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