-/**\r
- * editor_plugin_src.js\r
- *\r
- * Copyright 2009, Moxiecode Systems AB\r
- * Released under LGPL License.\r
- *\r
- * License: http://tinymce.moxiecode.com/license\r
- * Contributing: http://tinymce.moxiecode.com/contributing\r
- */\r
-\r
-(function() {\r
- var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, explode = tinymce.explode;\r
-\r
- tinymce.create('tinymce.plugins.TabFocusPlugin', {\r
- init : function(ed, url) {\r
- function tabCancel(ed, e) {\r
- if (e.keyCode === 9)\r
- return Event.cancel(e);\r
- };\r
-\r
- function tabHandler(ed, e) {\r
- var x, i, f, el, v;\r
-\r
- function find(d) {\r
- f = DOM.getParent(ed.id, 'form');\r
- el = f.elements;\r
-\r
- if (f) {\r
- each(el, function(e, i) {\r
- if (e.id == ed.id) {\r
- x = i;\r
- return false;\r
- }\r
- });\r
-\r
- if (d > 0) {\r
- for (i = x + 1; i < el.length; i++) {\r
- if (el[i].type != 'hidden')\r
- return el[i];\r
- }\r
- } else {\r
- for (i = x - 1; i >= 0; i--) {\r
- if (el[i].type != 'hidden')\r
- return el[i];\r
- }\r
- }\r
- }\r
-\r
- return null;\r
- };\r
-\r
- if (e.keyCode === 9) {\r
- v = explode(ed.getParam('tab_focus', ed.getParam('tabfocus_elements', ':prev,:next')));\r
-\r
- if (v.length == 1) {\r
- v[1] = v[0];\r
- v[0] = ':prev';\r
- }\r
-\r
- // Find element to focus\r
- if (e.shiftKey) {\r
- if (v[0] == ':prev')\r
- el = find(-1);\r
- else\r
- el = DOM.get(v[0]);\r
- } else {\r
- if (v[1] == ':next')\r
- el = find(1);\r
- else\r
- el = DOM.get(v[1]);\r
- }\r
-\r
- if (el) {\r
- if (ed = tinymce.get(el.id || el.name))\r
- ed.focus();\r
- else\r
- window.setTimeout(function() {window.focus();el.focus();}, 10);\r
-\r
- return Event.cancel(e);\r
- }\r
- }\r
- };\r
-\r
- ed.onKeyUp.add(tabCancel);\r
-\r
- if (tinymce.isGecko) {\r
- ed.onKeyPress.add(tabHandler);\r
- ed.onKeyDown.add(tabCancel);\r
- } else\r
- ed.onKeyDown.add(tabHandler);\r
-\r
- ed.onInit.add(function() {\r
- each(DOM.select('a:first,a:last', ed.getContainer()), function(n) {\r
- Event.add(n, 'focus', function() {ed.focus();});\r
- });\r
- });\r
- },\r
-\r
- getInfo : function() {\r
- return {\r
- longname : 'Tabfocus',\r
- author : 'Moxiecode Systems AB',\r
- authorurl : 'http://tinymce.moxiecode.com',\r
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus',\r
- version : tinymce.majorVersion + "." + tinymce.minorVersion\r
- };\r
- }\r
- });\r
-\r
- // Register plugin\r
- tinymce.PluginManager.add('tabfocus', tinymce.plugins.TabFocusPlugin);\r
-})();
\ No newline at end of file
+/**
+ * editor_plugin_src.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
+(function() {
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, explode = tinymce.explode;
+
+ tinymce.create('tinymce.plugins.TabFocusPlugin', {
+ init : function(ed, url) {
+ function tabCancel(ed, e) {
+ if (e.keyCode === 9)
+ return Event.cancel(e);
+ }
+
+ function tabHandler(ed, e) {
+ var x, i, f, el, v;
+
+ function find(d) {
+ el = DOM.select(':input:enabled,*[tabindex]');
+
+ function canSelectRecursive(e) {
+ return e.nodeName==="BODY" || (e.type != 'hidden' &&
+ !(e.style.display == "none") &&
+ !(e.style.visibility == "hidden") && canSelectRecursive(e.parentNode));
+ }
+ function canSelectInOldIe(el) {
+ return el.attributes["tabIndex"].specified || el.nodeName == "INPUT" || el.nodeName == "TEXTAREA";
+ }
+ function isOldIe() {
+ return tinymce.isIE6 || tinymce.isIE7;
+ }
+ function canSelect(el) {
+ return ((!isOldIe() || canSelectInOldIe(el))) && el.getAttribute("tabindex") != '-1' && canSelectRecursive(el);
+ }
+
+ each(el, function(e, i) {
+ if (e.id == ed.id) {
+ x = i;
+ return false;
+ }
+ });
+ if (d > 0) {
+ for (i = x + 1; i < el.length; i++) {
+ if (canSelect(el[i]))
+ return el[i];
+ }
+ } else {
+ for (i = x - 1; i >= 0; i--) {
+ if (canSelect(el[i]))
+ return el[i];
+ }
+ }
+
+ return null;
+ }
+
+ if (e.keyCode === 9) {
+ v = explode(ed.getParam('tab_focus', ed.getParam('tabfocus_elements', ':prev,:next')));
+
+ if (v.length == 1) {
+ v[1] = v[0];
+ v[0] = ':prev';
+ }
+
+ // Find element to focus
+ if (e.shiftKey) {
+ if (v[0] == ':prev')
+ el = find(-1);
+ else
+ el = DOM.get(v[0]);
+ } else {
+ if (v[1] == ':next')
+ el = find(1);
+ else
+ el = DOM.get(v[1]);
+ }
+
+ if (el) {
+ if (el.id && (ed = tinymce.get(el.id || el.name)))
+ ed.focus();
+ else
+ window.setTimeout(function() {
+ if (!tinymce.isWebKit)
+ window.focus();
+ el.focus();
+ }, 10);
+
+ return Event.cancel(e);
+ }
+ }
+ }
+
+ ed.onKeyUp.add(tabCancel);
+
+ if (tinymce.isGecko) {
+ ed.onKeyPress.add(tabHandler);
+ ed.onKeyDown.add(tabCancel);
+ } else
+ ed.onKeyDown.add(tabHandler);
+
+ },
+
+ getInfo : function() {
+ return {
+ longname : 'Tabfocus',
+ author : 'Moxiecode Systems AB',
+ authorurl : 'http://tinymce.moxiecode.com',
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus',
+ version : tinymce.majorVersion + "." + tinymce.minorVersion
+ };
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('tabfocus', tinymce.plugins.TabFocusPlugin);
+})();