]> scripts.mit.edu Git - autoinstalls/wordpress.git/blobdiff - wp-includes/js/tinymce/utils/mctabs.js
Wordpress 3.2
[autoinstalls/wordpress.git] / wp-includes / js / tinymce / utils / mctabs.js
index 9554f8f08ab39e64e9b6f0a12311f1d59478433f..027ef40e74c1ef1db832c7b3a7713e9e91e0bba1 100644 (file)
-/**\r
- * $RCSfile: mctabs.js,v $\r
- * $Revision: 1.1 $\r
- * $Date: 2005/08/01 18:36:35 $\r
- *\r
- * Moxiecode DHTML Tabs script.\r
- *\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004, Moxiecode Systems AB, All rights reserved.\r
- */\r
-\r
-function MCTabs() {\r
-       this.settings = new Array();\r
-};\r
-\r
-MCTabs.prototype.init = function(settings) {\r
-       this.settings = settings;\r
-};\r
-\r
-MCTabs.prototype.getParam = function(name, default_value) {\r
-       var value = null;\r
-\r
-       value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];\r
-\r
-       // Fix bool values\r
-       if (value == "true" || value == "false")\r
-               return (value == "true");\r
-\r
-       return value;\r
-};\r
-\r
-MCTabs.prototype.displayTab = function(tab_id, panel_id) {\r
-       var panelElm = document.getElementById(panel_id);\r
-       var panelContainerElm = panelElm ? panelElm.parentNode : null;\r
-       var tabElm = document.getElementById(tab_id);\r
-       var tabContainerElm = tabElm ? tabElm.parentNode : null;\r
-       var selectionClass = this.getParam('selection_class', 'current');\r
-\r
-       if (tabElm && tabContainerElm) {\r
-               var nodes = tabContainerElm.childNodes;\r
-\r
-               // Hide all other tabs\r
-               for (var i=0; i<nodes.length; i++) {\r
-                       if (nodes[i].nodeName == "LI")\r
-                               nodes[i].className = '';\r
-               }\r
-\r
-               // Show selected tab\r
-               tabElm.className = 'current';\r
-       }\r
-\r
-       if (panelElm && panelContainerElm) {\r
-               var nodes = panelContainerElm.childNodes;\r
-\r
-               // Hide all other panels\r
-               for (var i=0; i<nodes.length; i++) {\r
-                       if (nodes[i].nodeName == "DIV")\r
-                               nodes[i].className = 'panel';\r
-               }\r
-\r
-               // Show selected panel\r
-               panelElm.className = 'current';\r
-       }\r
-};\r
-\r
-MCTabs.prototype.getAnchor = function() {\r
-       var pos, url = document.location.href;\r
-\r
-       if ((pos = url.lastIndexOf('#')) != -1)\r
-               return url.substring(pos + 1);\r
-\r
-       return "";\r
-};\r
-\r
-// Global instance\r
-var mcTabs = new MCTabs();\r
+/**
+ * mctabs.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
+function MCTabs() {
+       this.settings = [];
+       this.onChange = tinyMCEPopup.editor.windowManager.createInstance('tinymce.util.Dispatcher');
+};
+
+MCTabs.prototype.init = function(settings) {
+       this.settings = settings;
+};
+
+MCTabs.prototype.getParam = function(name, default_value) {
+       var value = null;
+
+       value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];
+
+       // Fix bool values
+       if (value == "true" || value == "false")
+               return (value == "true");
+
+       return value;
+};
+
+MCTabs.prototype.showTab =function(tab){
+       tab.className = 'current';
+       tab.setAttribute("aria-selected", true);
+       tab.setAttribute("aria-expanded", true);
+       tab.tabIndex = 0;
+};
+
+MCTabs.prototype.hideTab =function(tab){
+       var t=this;
+
+       tab.className = '';
+       tab.setAttribute("aria-selected", false);
+       tab.setAttribute("aria-expanded", false);
+       tab.tabIndex = -1;
+};
+
+MCTabs.prototype.showPanel = function(panel) {
+       panel.className = 'current'; 
+       panel.setAttribute("aria-hidden", false);
+};
+
+MCTabs.prototype.hidePanel = function(panel) {
+       panel.className = 'panel';
+       panel.setAttribute("aria-hidden", true);
+}; 
+
+MCTabs.prototype.getPanelForTab = function(tabElm) {
+       return tinyMCEPopup.dom.getAttrib(tabElm, "aria-controls");
+};
+
+MCTabs.prototype.displayTab = function(tab_id, panel_id, avoid_focus) {
+       var panelElm, panelContainerElm, tabElm, tabContainerElm, selectionClass, nodes, i, t = this;
+
+       tabElm = document.getElementById(tab_id);
+
+       if (panel_id === undefined) {
+               panel_id = t.getPanelForTab(tabElm);
+       }
+
+       panelElm= document.getElementById(panel_id);
+       panelContainerElm = panelElm ? panelElm.parentNode : null;
+       tabContainerElm = tabElm ? tabElm.parentNode : null;
+       selectionClass = t.getParam('selection_class', 'current');
+
+       if (tabElm && tabContainerElm) {
+               nodes = tabContainerElm.childNodes;
+
+               // Hide all other tabs
+               for (i = 0; i < nodes.length; i++) {
+                       if (nodes[i].nodeName == "LI") {
+                               t.hideTab(nodes[i]);
+                       }
+               }
+
+               // Show selected tab
+               t.showTab(tabElm);
+       }
+
+       if (panelElm && panelContainerElm) {
+               nodes = panelContainerElm.childNodes;
+
+               // Hide all other panels
+               for (i = 0; i < nodes.length; i++) {
+                       if (nodes[i].nodeName == "DIV")
+                               t.hidePanel(nodes[i]);
+               }
+
+               if (!avoid_focus) { 
+                       tabElm.focus();
+               }
+
+               // Show selected panel
+               t.showPanel(panelElm);
+       }
+};
+
+MCTabs.prototype.getAnchor = function() {
+       var pos, url = document.location.href;
+
+       if ((pos = url.lastIndexOf('#')) != -1)
+               return url.substring(pos + 1);
+
+       return "";
+};
+
+
+//Global instance
+var mcTabs = new MCTabs();
+
+tinyMCEPopup.onInit.add(function() {
+       var tinymce = tinyMCEPopup.getWin().tinymce, dom = tinyMCEPopup.dom, each = tinymce.each;
+
+       each(dom.select('div.tabs'), function(tabContainerElm) {
+               var keyNav;
+
+               dom.setAttrib(tabContainerElm, "role", "tablist"); 
+
+               var items = tinyMCEPopup.dom.select('li', tabContainerElm);
+               var action = function(id) {
+                       mcTabs.displayTab(id, mcTabs.getPanelForTab(id));
+                       mcTabs.onChange.dispatch(id);
+               };
+
+               each(items, function(item) {
+                       dom.setAttrib(item, 'role', 'tab');
+                       dom.bind(item, 'click', function(evt) {
+                               action(item.id);
+                       });
+               });
+
+               dom.bind(dom.getRoot(), 'keydown', function(evt) {
+                       if (evt.keyCode === 9 && evt.ctrlKey && !evt.altKey) { // Tab
+                               keyNav.moveFocus(evt.shiftKey ? -1 : 1);
+                               tinymce.dom.Event.cancel(evt);
+                       }
+               });
+
+               each(dom.select('a', tabContainerElm), function(a) {
+                       dom.setAttrib(a, 'tabindex', '-1');
+               });
+
+               keyNav = tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', {
+                       root: tabContainerElm,
+                       items: items,
+                       onAction: action,
+                       actOnFocus: true,
+                       enableLeftRight: true,
+                       enableUpDown: true
+               }, tinyMCEPopup.dom);
+       });
+});
\ No newline at end of file