source: trunk/library/tiny_mce/utils/mctabs.js @ 4829

Revision 4829, 4.0 KB checked in by airton, 13 years ago (diff)

Ticket #2146 - Implementacao da funcionalidade de multiplas assinaturas - Adicao da biblioteca TinyMCE

  • Property svn:executable set to *
Line 
1/**
2 * mctabs.js
3 *
4 * Copyright 2009, Moxiecode Systems AB
5 * Released under LGPL License.
6 *
7 * License: http://tinymce.moxiecode.com/license
8 * Contributing: http://tinymce.moxiecode.com/contributing
9 */
10
11function MCTabs() {
12        this.settings = [];
13        this.onChange = tinyMCEPopup.editor.windowManager.createInstance('tinymce.util.Dispatcher');
14};
15
16MCTabs.prototype.init = function(settings) {
17        this.settings = settings;
18};
19
20MCTabs.prototype.getParam = function(name, default_value) {
21        var value = null;
22
23        value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];
24
25        // Fix bool values
26        if (value == "true" || value == "false")
27                return (value == "true");
28
29        return value;
30};
31
32MCTabs.prototype.showTab =function(tab){
33        tab.className = 'current';
34        tab.setAttribute("aria-selected", true);
35        tab.setAttribute("aria-expanded", true);
36        tab.tabIndex = 0;
37};
38
39MCTabs.prototype.hideTab =function(tab){
40        var t=this;
41
42        tab.className = '';
43        tab.setAttribute("aria-selected", false);
44        tab.setAttribute("aria-expanded", false);
45        tab.tabIndex = -1;
46};
47
48MCTabs.prototype.showPanel = function(panel) {
49        panel.className = 'current';
50        panel.setAttribute("aria-hidden", false);
51};
52
53MCTabs.prototype.hidePanel = function(panel) {
54        panel.className = 'panel';
55        panel.setAttribute("aria-hidden", true);
56};
57
58MCTabs.prototype.getPanelForTab = function(tabElm) {
59        return tinyMCEPopup.dom.getAttrib(tabElm, "aria-controls");
60};
61
62MCTabs.prototype.displayTab = function(tab_id, panel_id, avoid_focus) {
63        var panelElm, panelContainerElm, tabElm, tabContainerElm, selectionClass, nodes, i, t = this;
64
65        tabElm = document.getElementById(tab_id);
66
67        if (panel_id === undefined) {
68                panel_id = t.getPanelForTab(tabElm);
69        }
70
71        panelElm= document.getElementById(panel_id);
72        panelContainerElm = panelElm ? panelElm.parentNode : null;
73        tabContainerElm = tabElm ? tabElm.parentNode : null;
74        selectionClass = t.getParam('selection_class', 'current');
75
76        if (tabElm && tabContainerElm) {
77                nodes = tabContainerElm.childNodes;
78
79                // Hide all other tabs
80                for (i = 0; i < nodes.length; i++) {
81                        if (nodes[i].nodeName == "LI") {
82                                t.hideTab(nodes[i]);
83                        }
84                }
85
86                // Show selected tab
87                t.showTab(tabElm);
88        }
89
90        if (panelElm && panelContainerElm) {
91                nodes = panelContainerElm.childNodes;
92
93                // Hide all other panels
94                for (i = 0; i < nodes.length; i++) {
95                        if (nodes[i].nodeName == "DIV")
96                                t.hidePanel(nodes[i]);
97                }
98
99                if (!avoid_focus) {
100                        tabElm.focus();
101                }
102
103                // Show selected panel
104                t.showPanel(panelElm);
105        }
106};
107
108MCTabs.prototype.getAnchor = function() {
109        var pos, url = document.location.href;
110
111        if ((pos = url.lastIndexOf('#')) != -1)
112                return url.substring(pos + 1);
113
114        return "";
115};
116
117
118//Global instance
119var mcTabs = new MCTabs();
120
121tinyMCEPopup.onInit.add(function() {
122        var tinymce = tinyMCEPopup.getWin().tinymce, dom = tinyMCEPopup.dom, each = tinymce.each;
123
124        each(dom.select('div.tabs'), function(tabContainerElm) {
125                var keyNav;
126
127                dom.setAttrib(tabContainerElm, "role", "tablist");
128
129                var items = tinyMCEPopup.dom.select('li', tabContainerElm);
130                var action = function(id) {
131                        mcTabs.displayTab(id, mcTabs.getPanelForTab(id));
132                        mcTabs.onChange.dispatch(id);
133                };
134
135                each(items, function(item) {
136                        dom.setAttrib(item, 'role', 'tab');
137                        dom.bind(item, 'click', function(evt) {
138                                action(item.id);
139                        });
140                });
141
142                dom.bind(dom.getRoot(), 'keydown', function(evt) {
143                        if (evt.keyCode === 9 && evt.ctrlKey && !evt.altKey) { // Tab
144                                keyNav.moveFocus(evt.shiftKey ? -1 : 1);
145                                tinymce.dom.Event.cancel(evt);
146                        }
147                });
148
149                each(dom.select('a', tabContainerElm), function(a) {
150                        dom.setAttrib(a, 'tabindex', '-1');
151                });
152
153                keyNav = tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', {
154                        root: tabContainerElm,
155                        items: items,
156                        onAction: action,
157                        actOnFocus: true,
158                        enableLeftRight: true,
159                        enableUpDown: true
160                }, tinyMCEPopup.dom);
161        });
162});
Note: See TracBrowser for help on using the repository browser.