|
1 /** |
|
2 * editor_plugin_src.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 |
|
11 (function() { |
|
12 var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, explode = tinymce.explode; |
|
13 |
|
14 tinymce.create('tinymce.plugins.TabFocusPlugin', { |
|
15 init : function(ed, url) { |
|
16 function tabCancel(ed, e) { |
|
17 if (e.keyCode === 9) |
|
18 return Event.cancel(e); |
|
19 } |
|
20 |
|
21 function tabHandler(ed, e) { |
|
22 var x, i, f, el, v; |
|
23 |
|
24 function find(d) { |
|
25 el = DOM.select(':input:enabled,*[tabindex]'); |
|
26 |
|
27 function canSelectRecursive(e) { |
|
28 return e.nodeName==="BODY" || (e.type != 'hidden' && |
|
29 !(e.style.display == "none") && |
|
30 !(e.style.visibility == "hidden") && canSelectRecursive(e.parentNode)); |
|
31 } |
|
32 function canSelectInOldIe(el) { |
|
33 return el.attributes["tabIndex"].specified || el.nodeName == "INPUT" || el.nodeName == "TEXTAREA"; |
|
34 } |
|
35 function isOldIe() { |
|
36 return tinymce.isIE6 || tinymce.isIE7; |
|
37 } |
|
38 function canSelect(el) { |
|
39 return ((!isOldIe() || canSelectInOldIe(el))) && el.getAttribute("tabindex") != '-1' && canSelectRecursive(el); |
|
40 } |
|
41 |
|
42 each(el, function(e, i) { |
|
43 if (e.id == ed.id) { |
|
44 x = i; |
|
45 return false; |
|
46 } |
|
47 }); |
|
48 if (d > 0) { |
|
49 for (i = x + 1; i < el.length; i++) { |
|
50 if (canSelect(el[i])) |
|
51 return el[i]; |
|
52 } |
|
53 } else { |
|
54 for (i = x - 1; i >= 0; i--) { |
|
55 if (canSelect(el[i])) |
|
56 return el[i]; |
|
57 } |
|
58 } |
|
59 |
|
60 return null; |
|
61 } |
|
62 |
|
63 if (e.keyCode === 9) { |
|
64 v = explode(ed.getParam('tab_focus', ed.getParam('tabfocus_elements', ':prev,:next'))); |
|
65 |
|
66 if (v.length == 1) { |
|
67 v[1] = v[0]; |
|
68 v[0] = ':prev'; |
|
69 } |
|
70 |
|
71 // Find element to focus |
|
72 if (e.shiftKey) { |
|
73 if (v[0] == ':prev') |
|
74 el = find(-1); |
|
75 else |
|
76 el = DOM.get(v[0]); |
|
77 } else { |
|
78 if (v[1] == ':next') |
|
79 el = find(1); |
|
80 else |
|
81 el = DOM.get(v[1]); |
|
82 } |
|
83 |
|
84 if (el) { |
|
85 if (el.id && (ed = tinymce.get(el.id || el.name))) |
|
86 ed.focus(); |
|
87 else |
|
88 window.setTimeout(function() { |
|
89 if (!tinymce.isWebKit) |
|
90 window.focus(); |
|
91 el.focus(); |
|
92 }, 10); |
|
93 |
|
94 return Event.cancel(e); |
|
95 } |
|
96 } |
|
97 } |
|
98 |
|
99 ed.onKeyUp.add(tabCancel); |
|
100 |
|
101 if (tinymce.isGecko) { |
|
102 ed.onKeyPress.add(tabHandler); |
|
103 ed.onKeyDown.add(tabCancel); |
|
104 } else |
|
105 ed.onKeyDown.add(tabHandler); |
|
106 |
|
107 }, |
|
108 |
|
109 getInfo : function() { |
|
110 return { |
|
111 longname : 'Tabfocus', |
|
112 author : 'Moxiecode Systems AB', |
|
113 authorurl : 'http://tinymce.moxiecode.com', |
|
114 infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus', |
|
115 version : tinymce.majorVersion + "." + tinymce.minorVersion |
|
116 }; |
|
117 } |
|
118 }); |
|
119 |
|
120 // Register plugin |
|
121 tinymce.PluginManager.add('tabfocus', tinymce.plugins.TabFocusPlugin); |
|
122 })(); |