adding all weblabels from weblabels.fsf.org
[weblabels.fsf.org.git] / www.fsf.org / 20131028 / files / tinymce / tiny_mce_popup.js
CommitLineData
5a920362 1// Some global instances\r
2var tinymce = null, tinyMCEPopup, tinyMCE;\r
3\r
4tinyMCEPopup = {\r
5 init : function() {\r
6 var t = this, w, ti;\r
7\r
8 // Find window & API\r
9 w = t.getWin();\r
10 tinymce = w.tinymce;\r
11 tinyMCE = w.tinyMCE;\r
12 t.editor = tinymce.EditorManager.activeEditor;\r
13 t.params = t.editor.windowManager.params;\r
14 t.features = t.editor.windowManager.features;\r
15\r
16 // Setup local DOM\r
17 t.dom = t.editor.windowManager.createInstance('tinymce.dom.DOMUtils', document);\r
18\r
19 // Enables you to skip loading the default css\r
20 if (t.features.popup_css !== false)\r
21 t.dom.loadCSS(t.features.popup_css || t.editor.settings.popup_css);\r
22\r
23 // Setup on init listeners\r
24 t.listeners = [];\r
25 t.onInit = {\r
26 add : function(f, s) {\r
27 t.listeners.push({func : f, scope : s});\r
28 }\r
29 };\r
30\r
31 t.isWindow = !t.getWindowArg('mce_inline');\r
32 t.id = t.getWindowArg('mce_window_id');\r
33 t.editor.windowManager.onOpen.dispatch(t.editor.windowManager, window);\r
34 },\r
35\r
36 getWin : function() {\r
37 return window.dialogArguments || opener || parent || top;\r
38 },\r
39\r
40 getWindowArg : function(n, dv) {\r
41 var v = this.params[n];\r
42\r
43 return tinymce.is(v) ? v : dv;\r
44 },\r
45\r
46 getParam : function(n, dv) {\r
47 return this.editor.getParam(n, dv);\r
48 },\r
49\r
50 getLang : function(n, dv) {\r
51 return this.editor.getLang(n, dv);\r
52 },\r
53\r
54 execCommand : function(cmd, ui, val, a) {\r
55 a = a || {};\r
56 a.skip_focus = 1;\r
57\r
58 this.restoreSelection();\r
59 return this.editor.execCommand(cmd, ui, val, a);\r
60 },\r
61\r
62 resizeToInnerSize : function() {\r
63 var t = this, n, b = document.body, vp = t.dom.getViewPort(window), dw, dh;\r
64\r
65 dw = t.getWindowArg('mce_width') - vp.w;\r
66 dh = t.getWindowArg('mce_height') - vp.h;\r
67\r
68 if (t.isWindow)\r
69 window.resizeBy(dw, dh);\r
70 else\r
71 t.editor.windowManager.resizeBy(dw, dh, t.id);\r
72 },\r
73\r
74 executeOnLoad : function(s) {\r
75 this.onInit.add(function() {\r
76 eval(s);\r
77 });\r
78 },\r
79\r
80 storeSelection : function() {\r
81 this.editor.windowManager.bookmark = tinyMCEPopup.editor.selection.getBookmark('simple');\r
82 },\r
83\r
84 restoreSelection : function() {\r
85 var t = tinyMCEPopup;\r
86\r
87 if (!t.isWindow && tinymce.isIE)\r
88 t.editor.selection.moveToBookmark(t.editor.windowManager.bookmark);\r
89 },\r
90\r
91 requireLangPack : function() {\r
92 var t = this, u = t.getWindowArg('plugin_url') || t.getWindowArg('theme_url');\r
93\r
94 if (u && t.editor.settings.language && t.features.translate_i18n !== false) {\r
95 u += '/langs/' + t.editor.settings.language + '_dlg.js';\r
96\r
97 if (!tinymce.ScriptLoader.isDone(u)) {\r
98 document.write('<script type="text/javascript" src="' + tinymce._addVer(u) + '"></script>');\r
99 tinymce.ScriptLoader.markDone(u);\r
100 }\r
101 }\r
102 },\r
103\r
104 pickColor : function(e, element_id) {\r
105 this.execCommand('mceColorPicker', true, {\r
106 color : document.getElementById(element_id).value,\r
107 func : function(c) {\r
108 document.getElementById(element_id).value = c;\r
109\r
110 try {\r
111 document.getElementById(element_id).onchange();\r
112 } catch (ex) {\r
113 // Try fire event, ignore errors\r
114 }\r
115 }\r
116 });\r
117 },\r
118\r
119 openBrowser : function(element_id, type, option) {\r
120 tinyMCEPopup.restoreSelection();\r
121 this.editor.execCallback('file_browser_callback', element_id, document.getElementById(element_id).value, type, window);\r
122 },\r
123\r
124 confirm : function(t, cb, s) {\r
125 this.editor.windowManager.confirm(t, cb, s, window);\r
126 },\r
127\r
128 alert : function(tx, cb, s) {\r
129 this.editor.windowManager.alert(tx, cb, s, window);\r
130 },\r
131\r
132 close : function() {\r
133 var t = this;\r
134\r
135 // To avoid domain relaxing issue in Opera\r
136 function close() {\r
137 t.editor.windowManager.close(window);\r
138 tinymce = tinyMCE = t.editor = t.params = t.dom = t.dom.doc = null; // Cleanup\r
139 };\r
140\r
141 if (tinymce.isOpera)\r
142 t.getWin().setTimeout(close, 0);\r
143 else\r
144 close();\r
145 },\r
146\r
147 // Internal functions \r
148\r
149 _restoreSelection : function() {\r
150 var e = window.event.srcElement;\r
151\r
152 if (e.nodeName == 'INPUT' && (e.type == 'submit' || e.type == 'button'))\r
153 tinyMCEPopup.restoreSelection();\r
154 },\r
155\r
156/* _restoreSelection : function() {\r
157 var e = window.event.srcElement;\r
158\r
159 // If user focus a non text input or textarea\r
160 if ((e.nodeName != 'INPUT' && e.nodeName != 'TEXTAREA') || e.type != 'text')\r
161 tinyMCEPopup.restoreSelection();\r
162 },*/\r
163\r
164 _onDOMLoaded : function() {\r
165 var t = this, ti = document.title, bm, h, nv;\r
166\r
167 // Translate page\r
168 if (t.features.translate_i18n !== false) {\r
169 h = document.body.innerHTML;\r
170\r
171 // Replace a=x with a="x" in IE\r
172 if (tinymce.isIE)\r
173 h = h.replace(/ (value|title|alt)=([^"][^\s>]+)/gi, ' $1="$2"')\r
174\r
175 document.dir = t.editor.getParam('directionality','');\r
176\r
177 if ((nv = t.editor.translate(h)) && nv != h)\r
178 document.body.innerHTML = nv;\r
179\r
180 if ((nv = t.editor.translate(ti)) && nv != ti)\r
181 document.title = ti = nv;\r
182 }\r
183\r
184 document.body.style.display = '';\r
185\r
186 // Restore selection in IE when focus is placed on a non textarea or input element of the type text\r
187 if (tinymce.isIE) {\r
188 document.attachEvent('onmouseup', tinyMCEPopup._restoreSelection);\r
189\r
190 // Add base target element for it since it would fail with modal dialogs\r
191 t.dom.add(t.dom.select('head')[0], 'base', {target : '_self'});\r
192 }\r
193\r
194 t.restoreSelection();\r
195 t.resizeToInnerSize();\r
196\r
197 // Set inline title\r
198 if (!t.isWindow)\r
199 t.editor.windowManager.setTitle(window, ti);\r
200 else\r
201 window.focus();\r
202\r
203 if (!tinymce.isIE && !t.isWindow) {\r
204 tinymce.dom.Event._add(document, 'focus', function() {\r
205 t.editor.windowManager.focus(t.id)\r
206 });\r
207 }\r
208\r
209 // Patch for accessibility\r
210 tinymce.each(t.dom.select('select'), function(e) {\r
211 e.onkeydown = tinyMCEPopup._accessHandler;\r
212 });\r
213\r
214 // Call onInit\r
215 // Init must be called before focus so the selection won't get lost by the focus call\r
216 tinymce.each(t.listeners, function(o) {\r
217 o.func.call(o.scope, t.editor);\r
218 });\r
219\r
220 // Move focus to window\r
221 if (t.getWindowArg('mce_auto_focus', true)) {\r
222 window.focus();\r
223\r
224 // Focus element with mceFocus class\r
225 tinymce.each(document.forms, function(f) {\r
226 tinymce.each(f.elements, function(e) {\r
227 if (t.dom.hasClass(e, 'mceFocus') && !e.disabled) {\r
228 e.focus();\r
229 return false; // Break loop\r
230 }\r
231 });\r
232 });\r
233 }\r
234\r
235 document.onkeyup = tinyMCEPopup._closeWinKeyHandler;\r
236 },\r
237\r
238 _accessHandler : function(e) {\r
239 e = e || window.event;\r
240\r
241 if (e.keyCode == 13 || e.keyCode == 32) {\r
242 e = e.target || e.srcElement;\r
243\r
244 if (e.onchange)\r
245 e.onchange();\r
246\r
247 return tinymce.dom.Event.cancel(e);\r
248 }\r
249 },\r
250\r
251 _closeWinKeyHandler : function(e) {\r
252 e = e || window.event;\r
253\r
254 if (e.keyCode == 27)\r
255 tinyMCEPopup.close();\r
256 },\r
257\r
258 _wait : function() {\r
259 var t = this, ti;\r
260\r
261 if (tinymce.isIE && document.location.protocol != 'https:') {\r
262 // Fake DOMContentLoaded on IE\r
263 document.write('<script id=__ie_onload defer src=\'javascript:""\';><\/script>');\r
264 document.getElementById("__ie_onload").onreadystatechange = function() {\r
265 if (this.readyState == "complete") {\r
266 t._onDOMLoaded();\r
267 document.getElementById("__ie_onload").onreadystatechange = null; // Prevent leak\r
268 }\r
269 };\r
270 } else {\r
271 if (tinymce.isIE || tinymce.isWebKit) {\r
272 ti = setInterval(function() {\r
273 if (/loaded|complete/.test(document.readyState)) {\r
274 clearInterval(ti);\r
275 t._onDOMLoaded();\r
276 }\r
277 }, 10);\r
278 } else {\r
279 window.addEventListener('DOMContentLoaded', function() {\r
280 t._onDOMLoaded();\r
281 }, false);\r
282 }\r
283 }\r
284 }\r
285};\r
286\r
287tinyMCEPopup.init();\r
288tinyMCEPopup._wait(); // Wait for DOM Content Loaded\r