Upgrade TinyMCE to v3.4.5
[citadel.git] / webcit / tiny_mce / plugins / tabfocus / editor_plugin_src.js
index c2be2f40a6b2a9aa4f3c34e80b3947349b52040b..a1579c85f22760df55dc01ffa04c2a00aca7917a 100644 (file)
-/**\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);
+})();