Bug 5917 : Converted templates
[koha.git] / koha-tt / intranet-tmpl / prog / en / js / tinymce / jscripts / tiny_mce / plugins / layer / editor_plugin_src.js
1 /**\r
2  * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $\r
3  *\r
4  * @author Moxiecode\r
5  * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.\r
6  */\r
7 \r
8 /* Import plugin specific language pack */\r
9 tinyMCE.importPluginLanguagePack('layer');\r
10 \r
11 var TinyMCE_LayerPlugin = {\r
12         getInfo : function() {\r
13                 return {\r
14                         longname : 'Layer',\r
15                         author : 'Moxiecode Systems AB',\r
16                         authorurl : 'http://tinymce.moxiecode.com',\r
17                         infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer',\r
18                         version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion\r
19                 };\r
20         },\r
21 \r
22         initInstance : function(inst) {\r
23                 if (tinyMCE.isMSIE && !tinyMCE.isOpera)\r
24                         inst.getDoc().execCommand('2D-Position');\r
25         },\r
26 \r
27         handleEvent : function(e) {\r
28                 var inst = tinyMCE.selectedInstance;\r
29                 var w = inst.getWin(), le = inst._lastStyleElm, e;\r
30 \r
31                 if (tinyMCE.isGecko) {\r
32                         e = this._getParentLayer(inst.getFocusElement());\r
33 \r
34                         if (e) {\r
35                                 if (!inst._lastStyleElm) {\r
36                                         e.style.overflow = 'auto';\r
37                                         inst._lastStyleElm = e;\r
38                                 }\r
39                         } else if (le) {\r
40                                 le = inst._lastStyleElm;\r
41                                 le.style.width = le.scrollWidth + 'px';\r
42                                 le.style.height = le.scrollHeight + 'px';\r
43                                 le.style.overflow = '';\r
44                                 inst._lastStyleElm = null;\r
45                         }\r
46                 }\r
47 \r
48                 return true;\r
49         },\r
50 \r
51         handleVisualAid : function(el, deep, state, inst) {\r
52                 var nl = inst.getDoc().getElementsByTagName("div"), i;\r
53 \r
54                 for (i=0; i<nl.length; i++) {\r
55                         if (new RegExp('absolute|relative|static', 'gi').test(nl[i].style.position)) {\r
56                                 if (state)\r
57                                         tinyMCE.addCSSClass(nl[i], 'mceVisualAid');\r
58                                 else\r
59                                         tinyMCE.removeCSSClass(nl[i], 'mceVisualAid');                                  \r
60                         }\r
61                 }\r
62         },\r
63 \r
64         getControlHTML : function(cn) {\r
65                 switch (cn) {\r
66                         case "moveforward":\r
67                                 return tinyMCE.getButtonHTML(cn, 'lang_layer_forward_desc', '{$pluginurl}/images/moveforward.gif', 'mceMoveForward', true);\r
68 \r
69                         case "movebackward":\r
70                                 return tinyMCE.getButtonHTML(cn, 'lang_layer_backward_desc', '{$pluginurl}/images/movebackward.gif', 'mceMoveBackward', true);\r
71 \r
72                         case "absolute":\r
73                                 return tinyMCE.getButtonHTML(cn, 'lang_layer_absolute_desc', '{$pluginurl}/images/absolute.gif', 'mceMakeAbsolute', true);\r
74 \r
75                         case "insertlayer":\r
76                                 return tinyMCE.getButtonHTML(cn, 'lang_layer_insertlayer_desc', '{$pluginurl}/images/insertlayer.gif', 'mceInsertLayer', true);\r
77                 }\r
78 \r
79                 return "";\r
80         },\r
81 \r
82         execCommand : function(editor_id, element, command, user_interface, value) {\r
83                 // Handle commands\r
84                 switch (command) {\r
85                         case "mceInsertLayer":\r
86                                 this._insertLayer();\r
87                                 return true;\r
88 \r
89                         case "mceMoveForward":\r
90                                 this._move(1);\r
91                                 return true;\r
92 \r
93                         case "mceMoveBackward":\r
94                                 this._move(-1);\r
95                                 return true;\r
96 \r
97                         case "mceMakeAbsolute":\r
98                                 this._toggleAbsolute();\r
99                                 return true;\r
100                 }\r
101 \r
102                 // Pass to next handler in chain\r
103                 return false;\r
104         },\r
105 \r
106         handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) {\r
107                 var inst = tinyMCE.getInstanceById(editor_id);\r
108                 var le = this._getParentLayer(inst.getFocusElement());\r
109                 var p = tinyMCE.getParentElement(inst.getFocusElement(), 'div,p,img');\r
110 \r
111                 tinyMCE.switchClass(editor_id + '_absolute', 'mceButtonDisabled');\r
112                 tinyMCE.switchClass(editor_id + '_moveforward', 'mceButtonDisabled');\r
113                 tinyMCE.switchClass(editor_id + '_movebackward', 'mceButtonDisabled');\r
114 \r
115                 if (p)\r
116                         tinyMCE.switchClass(editor_id + '_absolute', 'mceButtonNormal');\r
117 \r
118                 if (le && le.style.position.toLowerCase() == "absolute") {\r
119                         tinyMCE.switchClass(editor_id + '_absolute', 'mceButtonSelected');\r
120                         tinyMCE.switchClass(editor_id + '_moveforward', 'mceButtonNormal');\r
121                         tinyMCE.switchClass(editor_id + '_movebackward', 'mceButtonNormal');\r
122                 }\r
123         },\r
124 \r
125         // Private plugin specific methods\r
126 \r
127         _move : function(d) {\r
128                 var inst = tinyMCE.selectedInstance, i, z = new Array();\r
129                 var le = this._getParentLayer(inst.getFocusElement()), ci = -1, fi = -1;\r
130                 var nl = tinyMCE.selectNodes(inst.getBody(), function(n) {\r
131                         return n.nodeType == 1 && new RegExp('absolute|relative|static', 'gi').test(n.style.position);\r
132                 });\r
133 \r
134                 // Find z-indexes\r
135                 for (i=0; i<nl.length; i++) {\r
136                         z[i] = nl[i].style.zIndex ? parseInt(nl[i].style.zIndex) : 0;\r
137 \r
138                         if (ci < 0 && nl[i] == le)\r
139                                 ci = i;\r
140                 }\r
141 \r
142                 if (d < 0) {\r
143                         // Move back\r
144 \r
145                         // Try find a lower one\r
146                         for (i=0; i<z.length; i++) {\r
147                                 if (z[i] < z[ci]) {\r
148                                         fi = i;\r
149                                         break;\r
150                                 }\r
151                         }\r
152 \r
153                         if (fi > -1) {\r
154                                 nl[ci].style.zIndex = z[fi];\r
155                                 nl[fi].style.zIndex = z[ci];\r
156                         } else {\r
157                                 if (z[ci] > 0)\r
158                                         nl[ci].style.zIndex = z[ci] - 1;\r
159                         }\r
160                 } else {\r
161                         // Move forward\r
162 \r
163                         // Try find a higher one\r
164                         for (i=0; i<z.length; i++) {\r
165                                 if (z[i] > z[ci]) {\r
166                                         fi = i;\r
167                                         break;\r
168                                 }\r
169                         }\r
170 \r
171                         if (fi > -1) {\r
172                                 nl[ci].style.zIndex = z[fi];\r
173                                 nl[fi].style.zIndex = z[ci];\r
174                         } else\r
175                                 nl[ci].style.zIndex = z[ci] + 1;\r
176                 }\r
177 \r
178                 inst.repaint();\r
179         },\r
180 \r
181         _getParentLayer : function(n) {\r
182                 return tinyMCE.getParentNode(n, function(n) {\r
183                         return n.nodeType == 1 && new RegExp('absolute|relative|static', 'gi').test(n.style.position);\r
184                 });\r
185         },\r
186 \r
187         _insertLayer : function() {\r
188                 var inst = tinyMCE.selectedInstance;\r
189                 var e = tinyMCE.getParentElement(inst.getFocusElement());\r
190                 var p = tinyMCE.getAbsPosition(e);\r
191                 var d = inst.getDoc();\r
192                 var ne = d.createElement('div');\r
193                 var h = inst.selection.getSelectedHTML();\r
194 \r
195                 // Move div\r
196                 ne.style.position = 'absolute';\r
197                 ne.style.left = p.absLeft + 'px';\r
198                 ne.style.top = (p.absTop > 20 ? p.absTop : 20) + 'px';\r
199                 ne.style.width = '100px';\r
200                 ne.style.height = '100px';\r
201                 ne.className = 'mceVisualAid';\r
202 \r
203                 if (!h)\r
204                         h = tinyMCE.getLang('lang_layer_content');\r
205 \r
206                 ne.innerHTML = h;\r
207 \r
208                 // Add it\r
209                 d.body.appendChild(ne);\r
210         },\r
211 \r
212         _toggleAbsolute : function() {\r
213                 var inst = tinyMCE.selectedInstance;\r
214                 var le = this._getParentLayer(inst.getFocusElement());\r
215 \r
216                 if (le == null)\r
217                         le = tinyMCE.getParentElement(inst.getFocusElement(), 'div,p,img');\r
218 \r
219                 if (le) {\r
220                         if (le.style.position.toLowerCase() == "absolute") {\r
221                                 le.style.position = "";\r
222                                 le.style.left = "";\r
223                                 le.style.top = "";\r
224                         } else {\r
225                                 le.style.position = "absolute";\r
226 \r
227                                 if (le.style.left == "")\r
228                                         le.style.left = 20 + 'px';\r
229 \r
230                                 if (le.style.top == "")\r
231                                         le.style.top = 20 + 'px';\r
232 \r
233                                 if (le.style.width == "")\r
234                                         le.style.width = le.width ? (le.width + 'px') : '100px';\r
235 \r
236                                 if (le.style.height == "")\r
237                                         le.style.height = le.height ? (le.height + 'px') : '100px';\r
238 \r
239                                 tinyMCE.handleVisualAid(inst.getBody(), true, inst.visualAid, inst);\r
240                         }\r
241 \r
242                         inst.repaint();\r
243                         tinyMCE.triggerNodeChange();\r
244                 }\r
245         }\r
246 };\r
247 \r
248 tinyMCE.addPlugin("layer", TinyMCE_LayerPlugin);\r