tiny_mce_popup.js
294 lines
| 7.2 KiB
| application/javascript
|
JavascriptLexer
| r2 | // Some global instances | |||
| var tinymce = null, tinyMCEPopup, tinyMCE; | ||||
| tinyMCEPopup = { | ||||
| init : function() { | ||||
| var t = this, w, ti, li, q, i, it; | ||||
| li = ('' + document.location.search).replace(/^\?/, '').split('&'); | ||||
| q = {}; | ||||
| for (i=0; i<li.length; i++) { | ||||
| it = li[i].split('='); | ||||
| q[unescape(it[0])] = unescape(it[1]); | ||||
| } | ||||
| if (q.mce_rdomain) | ||||
| document.domain = q.mce_rdomain; | ||||
| // Find window & API | ||||
| w = t.getWin(); | ||||
| tinymce = w.tinymce; | ||||
| tinyMCE = w.tinyMCE; | ||||
| t.editor = tinymce.EditorManager.activeEditor; | ||||
| t.params = t.editor.windowManager.params; | ||||
| t.features = t.editor.windowManager.features; | ||||
| // Setup local DOM | ||||
| t.dom = t.editor.windowManager.createInstance('tinymce.dom.DOMUtils', document); | ||||
| // Enables you to skip loading the default css | ||||
| if (t.features.popup_css !== false) | ||||
| t.dom.loadCSS(t.features.popup_css || t.editor.settings.popup_css); | ||||
| // Setup on init listeners | ||||
| t.listeners = []; | ||||
| t.onInit = { | ||||
| add : function(f, s) { | ||||
| t.listeners.push({func : f, scope : s}); | ||||
| } | ||||
| }; | ||||
| t.isWindow = !t.getWindowArg('mce_inline'); | ||||
| t.id = t.getWindowArg('mce_window_id'); | ||||
| t.editor.windowManager.onOpen.dispatch(t.editor.windowManager, window); | ||||
| }, | ||||
| getWin : function() { | ||||
| return window.dialogArguments || opener || parent || top; | ||||
| }, | ||||
| getWindowArg : function(n, dv) { | ||||
| var v = this.params[n]; | ||||
| return tinymce.is(v) ? v : dv; | ||||
| }, | ||||
| getParam : function(n, dv) { | ||||
| return this.editor.getParam(n, dv); | ||||
| }, | ||||
| getLang : function(n, dv) { | ||||
| return this.editor.getLang(n, dv); | ||||
| }, | ||||
| execCommand : function(cmd, ui, val, a) { | ||||
| a = a || {}; | ||||
| a.skip_focus = 1; | ||||
| this.restoreSelection(); | ||||
| return this.editor.execCommand(cmd, ui, val, a); | ||||
| }, | ||||
| resizeToInnerSize : function() { | ||||
| var t = this, n, b = document.body, vp = t.dom.getViewPort(window), dw, dh; | ||||
| dw = t.getWindowArg('mce_width') - vp.w; | ||||
| dh = t.getWindowArg('mce_height') - vp.h; | ||||
| if (t.isWindow) | ||||
| window.resizeBy(dw, dh); | ||||
| else | ||||
| t.editor.windowManager.resizeBy(dw, dh, t.id); | ||||
| }, | ||||
| executeOnLoad : function(s) { | ||||
| this.onInit.add(function() { | ||||
| eval(s); | ||||
| }); | ||||
| }, | ||||
| storeSelection : function() { | ||||
| this.editor.windowManager.bookmark = tinyMCEPopup.editor.selection.getBookmark('simple'); | ||||
| }, | ||||
| restoreSelection : function() { | ||||
| var t = tinyMCEPopup; | ||||
| if (!t.isWindow && tinymce.isIE) | ||||
| t.editor.selection.moveToBookmark(t.editor.windowManager.bookmark); | ||||
| }, | ||||
| requireLangPack : function() { | ||||
| var u = this.getWindowArg('plugin_url') || this.getWindowArg('theme_url'); | ||||
| if (u && this.editor.settings.language) { | ||||
| u += '/langs/' + this.editor.settings.language + '_dlg.js'; | ||||
| if (!tinymce.ScriptLoader.isDone(u)) { | ||||
| document.write('<script type="text/javascript" src="' + tinymce._addVer(u) + '"></script>'); | ||||
| tinymce.ScriptLoader.markDone(u); | ||||
| } | ||||
| } | ||||
| }, | ||||
| pickColor : function(e, element_id) { | ||||
| this.execCommand('mceColorPicker', true, { | ||||
| color : document.getElementById(element_id).value, | ||||
| func : function(c) { | ||||
| document.getElementById(element_id).value = c; | ||||
| try { | ||||
| document.getElementById(element_id).onchange(); | ||||
| } catch (ex) { | ||||
| // Try fire event, ignore errors | ||||
| } | ||||
| } | ||||
| }); | ||||
| }, | ||||
| openBrowser : function(element_id, type, option) { | ||||
| tinyMCEPopup.restoreSelection(); | ||||
| this.editor.execCallback('file_browser_callback', element_id, document.getElementById(element_id).value, type, window); | ||||
| }, | ||||
| confirm : function(t, cb, s) { | ||||
| this.editor.windowManager.confirm(t, cb, s, window); | ||||
| }, | ||||
| alert : function(tx, cb, s) { | ||||
| this.editor.windowManager.alert(tx, cb, s, window); | ||||
| }, | ||||
| close : function() { | ||||
| var t = this; | ||||
| // To avoid domain relaxing issue in Opera | ||||
| function close() { | ||||
| t.editor.windowManager.close(window); | ||||
| tinymce = tinyMCE = t.editor = t.params = t.dom = t.dom.doc = null; // Cleanup | ||||
| }; | ||||
| if (tinymce.isOpera) | ||||
| t.getWin().setTimeout(close, 0); | ||||
| else | ||||
| close(); | ||||
| }, | ||||
| // Internal functions | ||||
| _restoreSelection : function() { | ||||
| var e = window.event.srcElement; | ||||
| if (e.nodeName == 'INPUT' && (e.type == 'submit' || e.type == 'button')) | ||||
| tinyMCEPopup.restoreSelection(); | ||||
| }, | ||||
| /* _restoreSelection : function() { | ||||
| var e = window.event.srcElement; | ||||
| // If user focus a non text input or textarea | ||||
| if ((e.nodeName != 'INPUT' && e.nodeName != 'TEXTAREA') || e.type != 'text') | ||||
| tinyMCEPopup.restoreSelection(); | ||||
| },*/ | ||||
| _onDOMLoaded : function() { | ||||
| var t = this, ti = document.title, bm, h, nv; | ||||
| // Translate page | ||||
| if (t.features.translate_i18n !== false) { | ||||
| h = document.body.innerHTML; | ||||
| // Replace a=x with a="x" in IE | ||||
| if (tinymce.isIE) | ||||
| h = h.replace(/ (value|title|alt)=([^"][^\s>]+)/gi, ' $1="$2"') | ||||
| document.dir = t.editor.getParam('directionality',''); | ||||
| if ((nv = t.editor.translate(h)) && nv != h) | ||||
| document.body.innerHTML = nv; | ||||
| if ((nv = t.editor.translate(ti)) && nv != ti) | ||||
| document.title = ti = nv; | ||||
| } | ||||
| document.body.style.display = ''; | ||||
| // Restore selection in IE when focus is placed on a non textarea or input element of the type text | ||||
| if (tinymce.isIE) | ||||
| document.attachEvent('onmouseup', tinyMCEPopup._restoreSelection); | ||||
| t.restoreSelection(); | ||||
| t.resizeToInnerSize(); | ||||
| // Set inline title | ||||
| if (!t.isWindow) | ||||
| t.editor.windowManager.setTitle(window, ti); | ||||
| else | ||||
| window.focus(); | ||||
| if (!tinymce.isIE && !t.isWindow) { | ||||
| tinymce.dom.Event._add(document, 'focus', function() { | ||||
| t.editor.windowManager.focus(t.id) | ||||
| }); | ||||
| } | ||||
| // Patch for accessibility | ||||
| tinymce.each(t.dom.select('select'), function(e) { | ||||
| e.onkeydown = tinyMCEPopup._accessHandler; | ||||
| }); | ||||
| // Call onInit | ||||
| // Init must be called before focus so the selection won't get lost by the focus call | ||||
| tinymce.each(t.listeners, function(o) { | ||||
| o.func.call(o.scope, t.editor); | ||||
| }); | ||||
| // Move focus to window | ||||
| if (t.getWindowArg('mce_auto_focus', true)) { | ||||
| window.focus(); | ||||
| // Focus element with mceFocus class | ||||
| tinymce.each(document.forms, function(f) { | ||||
| tinymce.each(f.elements, function(e) { | ||||
| if (t.dom.hasClass(e, 'mceFocus') && !e.disabled) { | ||||
| e.focus(); | ||||
| return false; // Break loop | ||||
| } | ||||
| }); | ||||
| }); | ||||
| } | ||||
| document.onkeyup = tinyMCEPopup._closeWinKeyHandler; | ||||
| }, | ||||
| _accessHandler : function(e) { | ||||
| e = e || window.event; | ||||
| if (e.keyCode == 13 || e.keyCode == 32) { | ||||
| e = e.target || e.srcElement; | ||||
| if (e.onchange) | ||||
| e.onchange(); | ||||
| return tinymce.dom.Event.cancel(e); | ||||
| } | ||||
| }, | ||||
| _closeWinKeyHandler : function(e) { | ||||
| e = e || window.event; | ||||
| if (e.keyCode == 27) | ||||
| tinyMCEPopup.close(); | ||||
| }, | ||||
| _wait : function() { | ||||
| var t = this, ti; | ||||
| if (tinymce.isIE && document.location.protocol != 'https:') { | ||||
| // Fake DOMContentLoaded on IE | ||||
| document.write('<script id=__ie_onload defer src=\'javascript:""\';><\/script>'); | ||||
| document.getElementById("__ie_onload").onreadystatechange = function() { | ||||
| if (this.readyState == "complete") { | ||||
| t._onDOMLoaded(); | ||||
| document.getElementById("__ie_onload").onreadystatechange = null; // Prevent leak | ||||
| } | ||||
| }; | ||||
| } else { | ||||
| if (tinymce.isIE || tinymce.isWebKit) { | ||||
| ti = setInterval(function() { | ||||
| if (/loaded|complete/.test(document.readyState)) { | ||||
| clearInterval(ti); | ||||
| t._onDOMLoaded(); | ||||
| } | ||||
| }, 10); | ||||
| } else { | ||||
| window.addEventListener('DOMContentLoaded', function() { | ||||
| t._onDOMLoaded(); | ||||
| }, false); | ||||
| } | ||||
| } | ||||
| } | ||||
| }; | ||||
| tinyMCEPopup.init(); | ||||
| tinyMCEPopup._wait(); // Wait for DOM Content Loaded | ||||
