X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/022dfbbbe3215917d84708eb09acca93b21ae9e0..7688c6ba71852cd89123b62b2d57683535e4702a:/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 58b3964f..acfca0a7 100644 --- a/wp-includes/js/tinymce/tiny_mce_popup.js +++ b/wp-includes/js/tinymce/tiny_mce_popup.js @@ -1,250 +1,294 @@ -/** - * $RCSfile: tiny_mce_popup.js,v $ - * $Revision: 1.18 $ - * $Date: 2005/10/29 19:13:20 $ - * - * @author Moxiecode - * @copyright Copyright © 2004, Moxiecode Systems AB, All rights reserved. - */ - +// Some global instances, this will be filled later var tinyMCE = null, tinyMCELang = null; -function TinyMCEPopup() { +function TinyMCE_Popup() { }; -TinyMCEPopup.prototype.init = function() { - var win = window.opener ? window.opener : window.dialogArguments; +TinyMCE_Popup.prototype = { + findWin : function(w) { + var c; - if (!win) - win = top; + // Check parents + c = w; + while (c && (c = c.parent) != null) { + if (typeof(c.tinyMCE) != "undefined") + return c; + } - window.opener = win; - this.windowOpener = win; - this.onLoadEval = ""; + // Check openers + c = w; + while (c && (c = c.opener) != null) { + if (typeof(c.tinyMCE) != "undefined") + return c; + } - // Setup parent references - tinyMCE = win.tinyMCE; - tinyMCELang = win.tinyMCELang; + // Try top + if (typeof(top.tinyMCE) != "undefined") + return top; - if (!tinyMCE) { - alert("tinyMCE object reference not found from popup."); - return; - } + return null; + }, + + init : function() { + var win = window.opener ? window.opener : window.dialogArguments, c; + var inst, re, title, divElm; - this.isWindow = tinyMCE.getWindowArg('mce_inside_iframe', false) == false; - this.storeSelection = tinyMCE.isMSIE && !this.isWindow && tinyMCE.getWindowArg('mce_store_selection', true); + if (!win) + win = this.findWin(window); - if (this.isWindow) - window.focus(); + if (!win) { + alert("tinyMCE object reference not found from popup."); + return; + } - // Store selection - if (this.storeSelection) - tinyMCE.selectedInstance.execCommand('mceStoreSelection'); + window.opener = win; + this.windowOpener = win; + this.onLoadEval = ""; - // Setup dir - if (tinyMCELang['lang_dir']) - document.dir = tinyMCELang['lang_dir']; + // Setup parent references + tinyMCE = win.tinyMCE; + tinyMCELang = win.tinyMCELang; - // Setup title - var re = new RegExp('{|\\\$|}', 'g'); - var title = document.title.replace(re, ""); - if (typeof tinyMCELang[title] != "undefined") { - var divElm = document.createElement("div"); - divElm.innerHTML = tinyMCELang[title]; - document.title = divElm.innerHTML; + inst = tinyMCE.selectedInstance; + this.isWindow = tinyMCE.getWindowArg('mce_inside_iframe', false) == false; + this.storeSelection = (tinyMCE.isRealIE) && !this.isWindow && tinyMCE.getWindowArg('mce_store_selection', true); - if (tinyMCE.setWindowTitle != null) - tinyMCE.setWindowTitle(window, divElm.innerHTML); - } + if (this.isWindow) + window.focus(); - // Output Popup CSS class - document.write(''); + // Store selection + if (this.storeSelection) + inst.selectionBookmark = inst.selection.getBookmark(true); - tinyMCE.addEvent(window, "load", this.onLoad); -}; + // Setup dir + if (tinyMCELang.lang_dir) + document.dir = tinyMCELang.lang_dir; -TinyMCEPopup.prototype.onLoad = function() { - var body = document.body; + // Setup title + re = new RegExp('{|\\\$|}', 'g'); + title = document.title.replace(re, ""); + if (typeof(tinyMCELang[title]) != "undefined") { + divElm = document.createElement("div"); + divElm.innerHTML = tinyMCELang[title]; + document.title = divElm.innerHTML; - body.onkeydown = function (e) { - e = e ? e : window.event; - if ( e.keyCode == 27 && !e.shiftKey && !e.controlKey && !e.altKey ) { - tinyMCEPopup.close(); + if (typeof(tinyMCE.setWindowTitle) != 'undefined') + tinyMCE.setWindowTitle(window, divElm.innerHTML); } - } - if (tinyMCE.getWindowArg('mce_replacevariables', true)) - body.innerHTML = tinyMCE.applyTemplate(body.innerHTML, tinyMCE.windowArgs); + // Output Popup CSS class + document.write(''); - var dir = tinyMCE.selectedInstance.settings['directionality']; - if (dir == "rtl") { - var elms = document.forms[0].elements; - for (var i=0; i'); + } -TinyMCEPopup.prototype.executeOnLoad = function(str) { - if (tinyMCE.isOpera) - this.onLoadEval = str; - else - eval(str); -}; + tinyMCE.addEvent(window, "load", this.onLoad); + }, -TinyMCEPopup.prototype.resizeToInnerSize = function() { - // Netscape 7.1 workaround - if (this.isWindow && tinyMCE.isNS71) { - window.resizeBy(0, 10); - return; - } + onLoad : function() { + var dir, i, elms, body = document.body; + + if (tinyMCE.getWindowArg('mce_replacevariables', true)) + body.innerHTML = tinyMCE.applyTemplate(body.innerHTML, tinyMCE.windowArgs); - if (this.isWindow) { - var doc = document; - var body = doc.body; - var oldMargin, wrapper, iframe, nodes, dx, dy; + dir = tinyMCE.selectedInstance.settings.directionality; + if (dir == "rtl" && document.forms && document.forms.length > 0) { + elms = document.forms[0].elements; + for (i=0; i=0; i--) { - if (wrapper.hasChildNodes()) - wrapper.insertBefore(nodes[i].cloneNode(true), wrapper.firstChild); - else - wrapper.appendChild(nodes[i].cloneNode(true)); - - nodes[i].parentNode.removeChild(nodes[i]); + // Execute real onload (Opera fix) + if (tinyMCEPopup.onLoadEval !== '') + eval(tinyMCEPopup.onLoadEval); + }, + + executeOnLoad : function(str) { + if (tinyMCE.isOpera) + this.onLoadEval = str; + else + eval(str); + }, + + 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; } - // 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 = '0px'; - - // 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 (this.isWindow) { + doc = document; + body = doc.body; + + if (body.style.display == 'none') + body.style.display = 'block'; + + // Remove margin + oldMargin = body.style.margin; + body.style.margin = '0'; + + // Create wrapper + wrapper = doc.createElement("div"); + wrapper.id = 'mcBodyWrapper'; + wrapper.style.display = 'none'; + wrapper.style.margin = '0'; + + // 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)); + + nodes[i].parentNode.removeChild(nodes[i]); + } + + // 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'; + } + }, + + resizeToContent : function() { + var isMSIE = (navigator.appName == "Microsoft Internet Explorer"); + var isOpera = (navigator.userAgent.indexOf("Opera") != -1); + var elm, width, height, x, y, dx, dy; + + if (isOpera) + return; + + if (isMSIE) { + try { window.resizeTo(10, 10); } catch (e) {} + + elm = document.body; + width = elm.offsetWidth; + height = elm.offsetHeight; + dx = (elm.scrollWidth - width) + 4; + dy = elm.scrollHeight - height; + + 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); + } + } + }, + + getWindowArg : function(name, default_value) { + return tinyMCE.getWindowArg(name, default_value); + }, + + restoreSelection : function() { + var inst; -TinyMCEPopup.prototype.resizeToContent = function() { - var isMSIE = (navigator.appName == "Microsoft Internet Explorer"); - var isOpera = (navigator.userAgent.indexOf("Opera") != -1); - - if (isOpera) - return; - - if (isMSIE) { - try { window.resizeTo(10, 10); } catch (e) {} - - var elm = document.body; - var width = elm.offsetWidth; - var height = elm.offsetHeight; - var dx = (elm.scrollWidth - width) + 4; - var dy = elm.scrollHeight - height; - - 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); - var x = parseInt(screen.width / 2.0) - (window.outerWidth / 2.0); - var y = parseInt(screen.height / 2.0) - (window.outerHeight / 2.0); - window.moveTo(x, y); + if (this.storeSelection) { + inst = tinyMCE.selectedInstance; + + inst.getWin().focus(); + + if (inst.selectionBookmark) + inst.selection.moveToBookmark(inst.selectionBookmark); } - } -}; + }, -TinyMCEPopup.prototype.getWindowArg = function(name, default_value) { - return tinyMCE.getWindowArg(name, default_value); -}; + execCommand : function(command, user_interface, value) { + var inst = tinyMCE.selectedInstance; -TinyMCEPopup.prototype.execCommand = function(command, user_interface, value) { - var inst = tinyMCE.selectedInstance; + this.restoreSelection(); + inst.execCommand(command, user_interface, value); - // Restore selection - if (this.storeSelection) { - inst.getWin().focus(); - inst.execCommand('mceRestoreSelection'); - } + // Store selection + if (this.storeSelection) + inst.selectionBookmark = inst.selection.getBookmark(true); + }, - inst.execCommand(command, user_interface, value); + close : function() { + tinyMCE.closeWindow(window); + }, - // Store selection - if (this.storeSelection) - inst.execCommand('mceStoreSelection'); -}; + pickColor : function(e, element_id) { + tinyMCE.selectedInstance.execCommand('mceColorPicker', true, { + element_id : element_id, + document : document, + window : window, + store_selection : false + }); + }, -TinyMCEPopup.prototype.close = function() { - tinyMCE.closeWindow(window); -}; + openBrowser : function(element_id, type, option) { + var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback")); + var url = document.getElementById(element_id).value; -TinyMCEPopup.prototype.pickColor = function(e, element_id) { - tinyMCE.selectedInstance.execCommand('mceColorPicker', true, { - element_id : element_id, - document : document, - window : window, - store_selection : false - }); -}; + tinyMCE.setWindowArg("window", window); + tinyMCE.setWindowArg("document", document); -TinyMCEPopup.prototype.openBrowser = function(element_id, type, option) { - var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback")); - var url = document.getElementById(element_id).value; + // 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);"); + }, - tinyMCE.setWindowArg("window", window); - tinyMCE.setWindowArg("document", document); + importClass : function(c) { + var n; - // 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);"); -}; + window[c] = function() {}; + + for (n in window.opener[c].prototype) + window[c].prototype[n] = window.opener[c].prototype[n]; + + window[c].constructor = window.opener[c].constructor; + } + + }; // Setup global instance -var tinyMCEPopup = new TinyMCEPopup(); +var tinyMCEPopup = new TinyMCE_Popup(); tinyMCEPopup.init();