author | Dan |
Sun, 21 Dec 2008 06:32:06 -0500 | |
changeset 773 | 7b1ac402b451 |
parent 543 | dffcbfbc4e59 |
child 778 | 57ce13805b6f |
permissions | -rw-r--r-- |
// 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; // Setup local DOM t.dom = t.editor.windowManager.createInstance('tinymce.dom.DOMUtils', document); t.dom.loadCSS(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); }, 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; // Translate page 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',''); document.body.innerHTML = t.editor.translate(h); document.title = ti = t.editor.translate(ti); 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