made a copy
[atutor.git] / jscripts / tiny_mce / plugins / tabfocus / editor_plugin_src.js
1 /**\r
2  * $Id: editor_plugin_src.js 787 2008-04-10 11:40:57Z spocke $\r
3  *\r
4  * @author Moxiecode\r
5  * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
6  */\r
7 \r
8 (function() {\r
9         var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, explode = tinymce.explode;\r
10 \r
11         tinymce.create('tinymce.plugins.TabFocusPlugin', {\r
12                 init : function(ed, url) {\r
13                         function tabCancel(ed, e) {\r
14                                 if (e.keyCode === 9)\r
15                                         return Event.cancel(e);\r
16                         };\r
17 \r
18                         function tabHandler(ed, e) {\r
19                                 var x, i, f, el, v;\r
20 \r
21                                 function find(d) {\r
22                                         f = DOM.getParent(ed.id, 'form');\r
23                                         el = f.elements;\r
24 \r
25                                         if (f) {\r
26                                                 each(el, function(e, i) {\r
27                                                         if (e.id == ed.id) {\r
28                                                                 x = i;\r
29                                                                 return false;\r
30                                                         }\r
31                                                 });\r
32 \r
33                                                 if (d > 0) {\r
34                                                         for (i = x + 1; i < el.length; i++) {\r
35                                                                 if (el[i].type != 'hidden')\r
36                                                                         return el[i];\r
37                                                         }\r
38                                                 } else {\r
39                                                         for (i = x - 1; i >= 0; i--) {\r
40                                                                 if (el[i].type != 'hidden')\r
41                                                                         return el[i];\r
42                                                         }\r
43                                                 }\r
44                                         }\r
45 \r
46                                         return null;\r
47                                 };\r
48 \r
49                                 if (e.keyCode === 9) {\r
50                                         v = explode(ed.getParam('tab_focus', ed.getParam('tabfocus_elements', ':prev,:next')));\r
51 \r
52                                         if (v.length == 1) {\r
53                                                 v[1] = v[0];\r
54                                                 v[0] = ':prev';\r
55                                         }\r
56 \r
57                                         // Find element to focus\r
58                                         if (e.shiftKey) {\r
59                                                 if (v[0] == ':prev')\r
60                                                         el = find(-1);\r
61                                                 else\r
62                                                         el = DOM.get(v[0]);\r
63                                         } else {\r
64                                                 if (v[1] == ':next')\r
65                                                         el = find(1);\r
66                                                 else\r
67                                                         el = DOM.get(v[1]);\r
68                                         }\r
69 \r
70                                         if (el) {\r
71                                                 if (ed = tinymce.EditorManager.get(el.id || el.name))\r
72                                                         ed.focus();\r
73                                                 else\r
74                                                         window.setTimeout(function() {window.focus();el.focus();}, 10);\r
75 \r
76                                                 return Event.cancel(e);\r
77                                         }\r
78                                 }\r
79                         };\r
80 \r
81                         ed.onKeyUp.add(tabCancel);\r
82 \r
83                         if (tinymce.isGecko) {\r
84                                 ed.onKeyPress.add(tabHandler);\r
85                                 ed.onKeyDown.add(tabCancel);\r
86                         } else\r
87                                 ed.onKeyDown.add(tabHandler);\r
88 \r
89                         ed.onInit.add(function() {\r
90                                 each(DOM.select('a:first,a:last', ed.getContainer()), function(n) {\r
91                                         Event.add(n, 'focus', function() {ed.focus();});\r
92                                 });\r
93                         });\r
94                 },\r
95 \r
96                 getInfo : function() {\r
97                         return {\r
98                                 longname : 'Tabfocus',\r
99                                 author : 'Moxiecode Systems AB',\r
100                                 authorurl : 'http://tinymce.moxiecode.com',\r
101                                 infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus',\r
102                                 version : tinymce.majorVersion + "." + tinymce.minorVersion\r
103                         };\r
104                 }\r
105         });\r
106 \r
107         // Register plugin\r
108         tinymce.PluginManager.add('tabfocus', tinymce.plugins.TabFocusPlugin);\r
109 })();