X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/a66f9e26487c560245ef9cd17d7e87c0cbb650af..177fd6fefd2e3d5a0ea6591c71d660cabdb3c1a4:/wp-includes/js/tinymce/tiny_mce_popup.js diff --git a/wp-includes/js/tinymce/tiny_mce_popup.js b/wp-includes/js/tinymce/tiny_mce_popup.js index acfca0a7..84cbded5 100644 --- a/wp-includes/js/tinymce/tiny_mce_popup.js +++ b/wp-includes/js/tinymce/tiny_mce_popup.js @@ -1,294 +1,275 @@ -// Some global instances, this will be filled later -var tinyMCE = null, tinyMCELang = null; +// Some global instances +var tinymce = null, tinyMCEPopup, tinyMCE; -function TinyMCE_Popup() { -}; - -TinyMCE_Popup.prototype = { - findWin : function(w) { - var c; - - // Check parents - c = w; - while (c && (c = c.parent) != null) { - if (typeof(c.tinyMCE) != "undefined") - return c; - } +tinyMCEPopup = { + init : function() { + var t = this, w, ti, li, q, i, it; - // Check openers - c = w; - while (c && (c = c.opener) != null) { - if (typeof(c.tinyMCE) != "undefined") - return c; + li = ('' + document.location.search).replace(/^\?/, '').split('&'); + q = {}; + for (i=0; i'); + if (t.isWindow) + window.resizeBy(dw, dh); + else + t.editor.windowManager.resizeBy(dw, dh, t.id); + }, - if (tinyMCE.getParam("popups_css_add")) { - c = tinyMCE.getParam("popups_css_add"); + executeOnLoad : function(s) { + this.onInit.add(function() { + eval(s); + }); + }, - // Is relative - if (c.indexOf('://') == -1 && c.charAt(0) != '/') - c = tinyMCE.documentBasePath + "/" + c; + storeSelection : function() { + this.editor.windowManager.bookmark = tinyMCEPopup.editor.selection.getBookmark('simple'); + }, - document.write(''); - } + restoreSelection : function() { + var t = tinyMCEPopup; - tinyMCE.addEvent(window, "load", this.onLoad); + if (!t.isWindow && tinymce.isIE) + t.editor.selection.moveToBookmark(t.editor.windowManager.bookmark); }, - onLoad : function() { - var dir, i, elms, body = document.body; + requireLangPack : function() { + var u = this.getWindowArg('plugin_url') || this.getWindowArg('theme_url'); - if (tinyMCE.getWindowArg('mce_replacevariables', true)) - body.innerHTML = tinyMCE.applyTemplate(body.innerHTML, tinyMCE.windowArgs); + if (u && this.editor.settings.language) { + u += '/langs/' + this.editor.settings.language + '_dlg.js'; - dir = tinyMCE.selectedInstance.settings.directionality; - if (dir == "rtl" && document.forms && document.forms.length > 0) { - elms = document.forms[0].elements; - for (i=0; i'); + tinymce.ScriptLoader.markDone(u); } } - - if (body.style.display == 'none') - body.style.display = 'block'; - - // Execute real onload (Opera fix) - if (tinyMCEPopup.onLoadEval !== '') - eval(tinyMCEPopup.onLoadEval); }, - executeOnLoad : function(str) { - if (tinyMCE.isOpera) - this.onLoadEval = str; - else - eval(str); + 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 + } + } + }); }, - resizeToInnerSize : function() { - var i, doc, body, oldMargin, wrapper, iframe, nodes, dx, dy; - - // Netscape 7.1 workaround - if (this.isWindow && tinyMCE.isNS71) { - window.resizeBy(0, 10); - return; - } - - if (this.isWindow) { - doc = document; - body = doc.body; + openBrowser : function(element_id, type, option) { + tinyMCEPopup.restoreSelection(); + this.editor.execCallback('file_browser_callback', element_id, document.getElementById(element_id).value, type, window); + }, - if (body.style.display == 'none') - body.style.display = 'block'; + close : function() { + var t = this; - // Remove margin - oldMargin = body.style.margin; - body.style.margin = '0'; + // To avoid domain relaxing issue in Opera + function close() { + t.editor.windowManager.close(window, t.id); + tinymce = tinyMCE = t.editor = t.params = t.dom = t.dom.doc = null; // Cleanup + }; - // Create wrapper - wrapper = doc.createElement("div"); - wrapper.id = 'mcBodyWrapper'; - wrapper.style.display = 'none'; - wrapper.style.margin = '0'; + if (tinymce.isOpera) + t.getWin().setTimeout(close, 0); + else + close(); + }, - // Wrap body elements - nodes = doc.body.childNodes; - for (i=nodes.length-1; i>=0; i--) { - if (wrapper.hasChildNodes()) - wrapper.insertBefore(nodes[i].cloneNode(true), wrapper.firstChild); - else - wrapper.appendChild(nodes[i].cloneNode(true)); + // Internal functions - nodes[i].parentNode.removeChild(nodes[i]); - } + _restoreSelection : function() { + var e = window.event.srcElement; - // Add wrapper - doc.body.appendChild(wrapper); - - // Create iframe - iframe = document.createElement("iframe"); - iframe.id = "mcWinIframe"; - iframe.src = document.location.href.toLowerCase().indexOf('https') == -1 ? "about:blank" : tinyMCE.settings.default_document; - iframe.width = "100%"; - iframe.height = "100%"; - iframe.style.margin = '0'; - - // Add iframe - doc.body.appendChild(iframe); - - // Measure iframe - iframe = document.getElementById('mcWinIframe'); - dx = tinyMCE.getWindowArg('mce_width') - iframe.clientWidth; - dy = tinyMCE.getWindowArg('mce_height') - iframe.clientHeight; - - // Resize window - // tinyMCE.debug(tinyMCE.getWindowArg('mce_width') + "," + tinyMCE.getWindowArg('mce_height') + " - " + dx + "," + dy); - window.resizeBy(dx, dy); - - // Hide iframe and show wrapper - body.style.margin = oldMargin; - iframe.style.display = 'none'; - wrapper.style.display = 'block'; - } + if (e.nodeName == 'INPUT' && (e.type == 'submit' || e.type == 'button')) + tinyMCEPopup.restoreSelection(); }, - resizeToContent : function() { - var isMSIE = (navigator.appName == "Microsoft Internet Explorer"); - var isOpera = (navigator.userAgent.indexOf("Opera") != -1); - var elm, width, height, x, y, dx, dy; +/* _restoreSelection : function() { + var e = window.event.srcElement; - if (isOpera) - return; + // If user focus a non text input or textarea + if ((e.nodeName != 'INPUT' && e.nodeName != 'TEXTAREA') || e.type != 'text') + tinyMCEPopup.restoreSelection(); + },*/ - if (isMSIE) { - try { window.resizeTo(10, 10); } catch (e) {} + _onDOMLoaded : function() { + var t = this, ti = document.title, bm, h; - elm = document.body; - width = elm.offsetWidth; - height = elm.offsetHeight; - dx = (elm.scrollWidth - width) + 4; - dy = elm.scrollHeight - height; + // Translate page + h = document.body.innerHTML; - try { window.resizeBy(dx, dy); } catch (e) {} - } else { - window.scrollBy(1000, 1000); - if (window.scrollX > 0 || window.scrollY > 0) { - window.resizeBy(window.innerWidth * 2, window.innerHeight * 2); - window.sizeToContent(); - window.scrollTo(0, 0); - x = parseInt(screen.width / 2.0) - (window.outerWidth / 2.0); - y = parseInt(screen.height / 2.0) - (window.outerHeight / 2.0); - window.moveTo(x, y); - } - } - }, + // Replace a=x with a="x" in IE + if (tinymce.isIE) + h = h.replace(/ (value|title|alt)=([^"][^\s>]+)/gi, ' $1="$2"') - getWindowArg : function(name, default_value) { - return tinyMCE.getWindowArg(name, default_value); - }, + document.dir = t.editor.getParam('directionality',''); + document.body.innerHTML = t.editor.translate(h); + document.title = ti = t.editor.translate(ti); + document.body.style.display = ''; - restoreSelection : function() { - var inst; + // 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); - if (this.storeSelection) { - inst = tinyMCE.selectedInstance; + t.restoreSelection(); + t.resizeToInnerSize(); - inst.getWin().focus(); + // Set inline title + if (!t.isWindow) + t.editor.windowManager.setTitle(ti, t.id); + else + window.focus(); - if (inst.selectionBookmark) - inst.selection.moveToBookmark(inst.selectionBookmark); + if (!tinymce.isIE && !t.isWindow) { + tinymce.dom.Event._add(document, 'focus', function() { + t.editor.windowManager.focus(t.id) + }); } - }, - execCommand : function(command, user_interface, value) { - var inst = tinyMCE.selectedInstance; + // Patch for accessibility + tinymce.each(t.dom.select('select'), function(e) { + e.onkeydown = tinyMCEPopup._accessHandler; + }); - this.restoreSelection(); - inst.execCommand(command, user_interface, value); + // 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); + }); - // Store selection - if (this.storeSelection) - inst.selectionBookmark = inst.selection.getBookmark(true); - }, + // Move focus to window + if (t.getWindowArg('mce_auto_focus', true)) { + window.focus(); - close : function() { - tinyMCE.closeWindow(window); - }, + // 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 + } + }); + }); + } - pickColor : function(e, element_id) { - tinyMCE.selectedInstance.execCommand('mceColorPicker', true, { - element_id : element_id, - document : document, - window : window, - store_selection : false - }); + document.onkeyup = tinyMCEPopup._closeWinKeyHandler; }, - openBrowser : function(element_id, type, option) { - var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback")); - var url = document.getElementById(element_id).value; + _accessHandler : function(e) { + e = e || window.event; - tinyMCE.setWindowArg("window", window); - tinyMCE.setWindowArg("document", document); + if (e.keyCode == 13 || e.keyCode == 32) { + e = e.target || e.srcElement; - // Call to external callback - if (eval('typeof(tinyMCEPopup.windowOpener.' + cb + ')') == "undefined") - alert("Callback function: " + cb + " could not be found."); - else - eval("tinyMCEPopup.windowOpener." + cb + "(element_id, url, type, window);"); - }, + if (e.onchange) + e.onchange(); - importClass : function(c) { - var n; + return tinymce.dom.Event.cancel(e); + } + }, - window[c] = function() {}; + _closeWinKeyHandler : function(e) { + e = e || window.event; - for (n in window.opener[c].prototype) - window[c].prototype[n] = window.opener[c].prototype[n]; + if (e.keyCode == 27) + tinyMCEPopup.close(); + }, - window[c].constructor = window.opener[c].constructor; + _wait : function() { + var t = this, ti; + + if (tinymce.isIE && document.location.protocol != 'https:') { + // Fake DOMContentLoaded on IE + document.write('