Fixed issue #17552: htmlArea RTE: Delete deprecated class HTMLArea.Dialog
authorStanislas Rolland <typo3@sjbr.ca>
Fri, 11 Feb 2011 22:24:26 +0000 (22:24 +0000)
committerStanislas Rolland <typo3@sjbr.ca>
Fri, 11 Feb 2011 22:24:26 +0000 (22:24 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@10442 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
typo3/sysext/rtehtmlarea/ChangeLog
typo3/sysext/rtehtmlarea/htmlarea/htmlarea.js

index d2966db..b5a6764 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2011-02-11  Stanislas Rolland  <typo3@sjbr.ca>
+
+       * Fixed issue #17552: htmlArea RTE: Delete deprecated class HTMLArea.Dialog
+
 2011-02-11  Christian Kuhn  <lolli@schwarzbu.ch>
 
        * Fixed bug #15721: Memcache::delete() without timeout param causes loss of memcache server in pool (Thanks to Michiel Ross)
index 2657d6d..1fb6ff7 100644 (file)
@@ -1,3 +1,7 @@
+2011-02-11  Stanislas Rolland  <typo3@sjbr.ca>
+
+       * Fixed issue #17552: htmlArea RTE: Delete deprecated class HTMLArea.Dialog
+
 2011-02-07  Stanislas Rolland  <typo3@sjbr.ca>
 
        * htmlArea RTE: Updated Manual
index 2c29c16..b1b3203 100644 (file)
@@ -4924,422 +4924,4 @@ HTMLArea.Plugin = HTMLArea.Base.extend({
                };
        }
 });
-
-/**
- * HTMLArea.Dialog class
- *********************************************
- * THIS OBJECT IS DEPRECATED AS OF TYPO3 4.4 *
- *********************************************
- */
-HTMLArea.Dialog = HTMLArea.Base.extend({
-
-       /**
-        * HTMLArea.Dialog constructor
-        *
-        * @param       object          plugin: reference to the invoking plugin
-        * @param       string          buttonId: buttonId triggering the opening of the dialog
-        * @param       string          url: url of the html document to load into the dialog window
-        * @param       function        action: function to be executed when the the dialog ends
-        * @param       object          arguments: object of variable type to be passed to the dialog
-        * @param       object          dimensions: object giving the width and height of the dialog window
-        * @param       string          showScrollbars: specifies by "yes" or "no" whether or not the dialog window should have scrollbars
-        * @param       object          dialogOpener: reference to the opener window
-        *
-        * @return      boolean         true if the dialog window was opened
-        */
-       constructor : function (plugin, buttonId, url, action, arguments, dimensions, showScrollbars, dialogOpener) {
-               this.window = window.window ? window.window : window.self;
-               this.plugin = plugin;
-               this.buttonId = buttonId;
-               this.action = action;
-               if (typeof(arguments) !== "undefined") {
-                       this.arguments = arguments;
-               }
-               this.plugin.dialog = this;
-
-               if (HTMLArea.Dialog[this.plugin.name] && HTMLArea.Dialog[this.plugin.name].hasOpenedWindow() && HTMLArea.Dialog[this.plugin.name].plugin != this.plugin) {
-                       HTMLArea.Dialog[this.plugin.name].close();
-               }
-               HTMLArea.Dialog[this.plugin.name] = this;
-               this.dialogWindow = window.open(url, this.plugin.name + "Dialog", "toolbar=no,location=no,directories=no,menubar=no,resizable=yes,top=" + dimensions.top + ",left=" + dimensions.left + ",dependent=yes,dialog=yes,chrome=no,width=" + dimensions.width + ",height=" + dimensions.height + ",scrollbars=" + showScrollbars);
-               if (!this.dialogWindow) {
-                       this.plugin.appendToLog("openDialog", "Dialog window could not be opened with url " + url);
-                       return false;
-               }
-
-               if (typeof(dialogOpener) !== "undefined") {
-                       this.dialogWindow.opener = dialogOpener;
-                       this.dialogWindow.opener.openedDialog = this;
-               }
-               if (!this.dialogWindow.opener) {
-                       this.dialogWindow.opener = this.window;
-               }
-               return true;
-       },
-       /**
-        * Adds OK and Cancel buttons to the dialogue window
-        *
-        * @return      void
-        */
-       addButtons : function() {
-               var self = this;
-               var div = this.document.createElement("div");
-               this.content.appendChild(div);
-               div.className = "buttons";
-               for (var i = 0; i < arguments.length; ++i) {
-                       var btn = arguments[i];
-                       var button = this.document.createElement("button");
-                       div.appendChild(button);
-                       switch (btn) {
-                               case "ok":
-                                       button.innerHTML = this.plugin.localize("OK");
-                                       button.onclick = function() {
-                                               try {
-                                                       self.callFormInputHandler();
-                                               } catch(e) { };
-                                               return false;
-                                       };
-                                       break;
-                               case "cancel":
-                                       button.innerHTML = this.plugin.localize("Cancel");
-                                       button.onclick = function() {
-                                               self.close();
-                                               return false;
-                                       };
-                                       break;
-                       }
-               }
-       },
-
-       /**
-        * Call the form input handler
-        *
-        * @return      boolean         false
-        */
-       callFormInputHandler : function() {
-               var tags = ["input", "textarea", "select"];
-               var params = new Object();
-               for (var ti = tags.length; --ti >= 0;) {
-                       var tag = tags[ti];
-                       var els = this.content.getElementsByTagName(tag);
-                       for (var j = 0; j < els.length; ++j) {
-                               var el = els[j];
-                               var val = el.value;
-                               if (el.nodeName.toLowerCase() == "input") {
-                                       if (el.type == "checkbox") {
-                                               val = el.checked;
-                                       }
-                               }
-                               params[el.name] = val;
-                       }
-               }
-               this.action(this, params);
-               return false;
-       },
-
-       /**
-        * Cheks if the dialogue has an open dialogue window
-        *
-        * @return      boolean         true if the dialogue has an open window
-        */
-       hasOpenedWindow : function () {
-               return this.dialogWindow && !this.dialogWindow.closed;
-       },
-
-       /**
-        * Initialize the dialog window: load the stylesheets, localize labels, resize if required, etc.
-        * This function MUST be invoked from the dialog window in the onLoad event handler
-        *
-        * @param       boolean         noResize: if true the window in not resized, but may be centered
-        *
-        * @return      void
-        */
-       initialize : function (noLocalize, noResize, noStyle) {
-               this.dialogWindow.HTMLArea = HTMLArea;
-               this.dialogWindow.dialog = this;
-                       // Capture unload and escape events
-               this.captureEvents();
-                       // Get stylesheets for the dialog window
-               if (!noStyle) this.loadStyle();
-                       // Localize the labels of the popup window
-               if (!noLocalize) this.localize();
-                       // Resize the dialog window to its contents
-               if (!noResize) this.resize(noResize);
-       },
-       /**
-        * Load the stylesheets in the dialog window
-        *
-        * @return      void
-        */
-       loadStyle : function () {
-               var head = this.dialogWindow.document.getElementsByTagName("head")[0];
-               var link = this.dialogWindow.document.createElement("link");
-               link.rel = "stylesheet";
-               link.type = "text/css";
-               link.href = HTMLArea.editorCSS;
-               if (link.href.indexOf("http") == -1 && !Ext.isIE) link.href = HTMLArea.hostUrl + link.href;
-               head.appendChild(link);
-       },
-
-       /**
-        * Localize the labels contained in the dialog window
-        *
-        * @return      void
-        */
-       localize : function () {
-               var label;
-               var types = ["input", "label", "option", "select", "legend", "span", "td", "button", "div", "h1", "h2", "a"];
-               for (var type = 0; type < types.length; ++type) {
-                       var elements = this.dialogWindow.document.getElementsByTagName(types[type]);
-                       for (var i = elements.length; --i >= 0;) {
-                               var element = elements[i];
-                               if (element.firstChild && element.firstChild.data) {
-                                       label = this.plugin.localize(element.firstChild.data);
-                                       if (label) element.firstChild.data = label;
-                               }
-                               if (element.title) {
-                                       label = this.plugin.localize(element.title);
-                                       if (label) element.title = label;
-                               }
-                                       // resetting the selected option for Mozilla
-                               if (types[type] == "option" && element.selected ) {
-                                       element.selected = false;
-                                       element.selected = true;
-                               }
-                       }
-               }
-               label = this.plugin.localize(this.dialogWindow.document.title);
-               if (label) this.dialogWindow.document.title = label;
-       },
-
-       /**
-        * Resize the dialog window to its contents
-        *
-        * @param       boolean         noResize: if true the window in not resized, but may be centered
-        *
-        * @return      void
-        */
-       resize : function (noResize) {
-               var buttonConfiguration = this.plugin.editorConfiguration.buttons[this.plugin.editorConfiguration.convertButtonId[this.buttonId]];
-               if (!this.plugin.editorConfiguration.dialogueWindows.doNotResize
-                               && (!buttonConfiguration  || !buttonConfiguration.dialogueWindow || !buttonConfiguration.dialogueWindow.doNotResize)) {
-                               // Resize if allowed
-                       var dialogWindow = this.dialogWindow;
-                       var doc = dialogWindow.document;
-                       var content = doc.getElementById("content");
-                               // As of Google Chrome build 1798, window resizeTo and resizeBy are completely erratic: do nothing
-                       if (Ext.isGecko || ((Ext.isIE || Ext.isOpera || (Ext.isWebKit && !Ext.isChrome)) && content)) {
-                               var self = this;
-                               setTimeout( function() {
-                                       if (!noResize) {
-                                               if (content) {
-                                                       self.resizeToContent(content);
-                                               } else if (dialogWindow.sizeToContent) {
-                                                       dialogWindow.sizeToContent();
-                                               }
-                                       }
-                                       self.centerOnParent();
-                               }, 75);
-                       } else if (!noResize) {
-                               var body = doc.body;
-                               if (Ext.isIE) {
-                                       var innerX = (doc.documentElement && doc.documentElement.clientWidth) ? doc.documentElement.clientWidth : body.clientWidth;
-                                       var innerY = (doc.documentElement && doc.documentElement.clientHeight) ? doc.documentElement.clientHeight : body.clientHeight;
-                                       var pageY = Math.max(body.scrollHeight, body.offsetHeight);
-                                       if (innerY == pageY) {
-                                               dialogWindow.resizeTo(body.scrollWidth, body.scrollHeight + 80);
-                                       } else {
-                                               dialogWindow.resizeBy((innerX < body.scrollWidth) ? (Math.max(body.scrollWidth, body.offsetWidth) - innerX) : 0, (body.scrollHeight - body.offsetHeight));
-                                       }
-                                       // As of Google Chrome build 1798, window resizeTo and resizeBy are completely erratic: do nothing
-                               } else if (Ext.isSafari || Ext.isOpera) {
-                                       dialogWindow.resizeTo(dialogWindow.innerWidth, body.offsetHeight + 10);
-                                       if (dialogWindow.innerHeight < body.scrollHeight) {
-                                               dialogWindow.resizeBy(0, (body.scrollHeight - dialogWindow.innerHeight) + 10);
-                                       }
-                               }
-                               this.centerOnParent();
-                       } else {
-                               this.centerOnParent();
-                       }
-               } else {
-                       this.centerOnParent();
-               }
-       },
-
-       /**
-        * Resize the Opera dialog window to its contents, based on size of content div
-        *
-        * @param       object          content: reference to the div (may also be form) section containing the contents of the dialog window
-        *
-        * @return      void
-        */
-       resizeToContent : function(content) {
-               var dialogWindow = this.dialogWindow;
-               var doc = dialogWindow.document;
-               var docElement = doc.documentElement;
-               var body = doc.body;
-               var width = 0, height = 0;
-
-               var contentWidth = content.offsetWidth;
-               var contentHeight = content.offsetHeight;
-               if (Ext.isGecko || Ext.isWebKit) {
-                       dialogWindow.resizeTo(contentWidth, contentHeight + (Ext.isWebKit ? 40 : (Ext.isGecko2 ? 75 : 95)));
-               } else {
-                       dialogWindow.resizeTo(contentWidth + 200, contentHeight + 200);
-                       if (dialogWindow.innerWidth) {
-                               width = dialogWindow.innerWidth;
-                               height = dialogWindow.innerHeight;
-                       } else if (docElement && docElement.clientWidth) {
-                               width = docElement.clientWidth;
-                               height = docElement.clientHeight;
-                       } else if (body && body.clientWidth) {
-                               width = body.clientWidth;
-                               height = body.clientHeight;
-                       }
-                       dialogWindow.resizeTo(contentWidth + ((contentWidth + 200 ) - width), contentHeight + ((contentHeight + 200) - (height - 16)));
-               }
-       },
-
-       /**
-        * Center the dialogue window on the parent window
-        *
-        * @return      void
-        */
-       centerOnParent : function () {
-               var buttonConfiguration = this.plugin.editorConfiguration.buttons[this.plugin.editorConfiguration.convertButtonId[this.buttonId]];
-               if (!this.plugin.editorConfiguration.dialogueWindows.doNotCenter && (!buttonConfiguration  || !buttonConfiguration.dialogueWindow || !buttonConfiguration.dialogueWindow.doNotCenter)) {
-                       var dialogWindow = this.dialogWindow;
-                       var doc = dialogWindow.document;
-                       var body = doc.body;
-                               // Center on parent if allowed
-                       if (!Ext.isIE) {
-                               var x = dialogWindow.opener.screenX + (dialogWindow.opener.outerWidth - dialogWindow.outerWidth) / 2;
-                               var y = dialogWindow.opener.screenY + (dialogWindow.opener.outerHeight - dialogWindow.outerHeight) / 2;
-                       } else {
-                               var W = body.offsetWidth;
-                               var H = body.offsetHeight;
-                               var x = (screen.availWidth - W) / 2;
-                               var y = (screen.availHeight - H) / 2;
-                       }
-                               // As of build 1798, Google Chrome moveTo breaks the window dimensions: do nothing
-                       if (!Ext.isChrome) {
-                               try {
-                                       dialogWindow.moveTo(x, y);
-                               } catch(e) { }
-                       }
-               }
-       },
-
-       /**
-        * Perform the action function when the dialog end
-        *
-        * @return      void
-        */
-       performAction : function (val) {
-               if (val && this.action) {
-                       this.action(val);
-               }
-       },
-
-       /**
-        * Bring the focus on the dialog window
-        *
-        * @return      void
-        */
-       focus : function () {
-               if (this.hasOpenedWindow()) {
-                       this.dialogWindow.focus();
-               }
-       },
-       /**
-        * Close the dialog window
-        *
-        * @return      void
-        */
-       close : function () {
-               if (this.dialogWindow) {
-                       try {
-                               if (this.dialogWindow.openedDialog) {
-                                       this.dialogWindow.openedDialog.close();
-                               }
-                       } catch(e) { }
-                       HTMLArea.Dialog[this.plugin.name] = null;
-                       if (!this.dialogWindow.closed) {
-                               this.dialogWindow.dialog = null;
-                               if (Ext.isWebKit || Ext.isIE) {
-                                       this.dialogWindow.blur();
-                               }
-                               this.dialogWindow.close();
-                                       // Safari 3.1.2 does not set the closed flag
-                               if (!this.dialogWindow.closed) {
-                                       this.dialogWindow = null;
-                               }
-                       }
-                               // Opera unload event may be triggered after the editor iframe is gone
-                       if (this.plugin.editor._iframe) {
-                               this.plugin.editor.toolbar.update();
-                       }
-               }
-               return false;
-       },
-
-       /**
-        * Make function reference in order to avoid memory leakage in IE
-        *
-        * @param       string          functionName: the name of the dialog function to be invoked
-        *
-        * @return      function        function definition invoking the specified function of the dialog
-        */
-       makeFunctionReference : function (functionName) {
-               var self = this;
-               return (function(arg1, arg2) {
-                       self[functionName](arg1, arg2);});
-       },
-
-       /**
-        * Escape event handler
-        *
-        * @param       object          ev: the event
-        *
-        * @return      boolean         false if the event was handled
-        */
-       closeOnEscape : function(event) {
-               var ev = event.browserEvent;
-               if (ev.keyCode == 27) {
-                       if (!Ext.isIE) {
-                               var parentWindow = ev.currentTarget.defaultView;
-                       } else {
-                               var parentWindow = ev.srcElement.parentNode.parentNode.parentWindow;
-                       }
-                       if (parentWindow && parentWindow.dialog) {
-                                       // If the dialogue window as an onEscape function, invoke it
-                               if (typeof(parentWindow.onEscape) == "function") {
-                                       parentWindow.onEscape(ev);
-                               }
-                               if (parentWindow.dialog) {
-                                       parentWindow.dialog.close();
-                               }
-                               return false;
-                       }
-               }
-               return true;
-       },
-       /**
-        * Capture unload and escape events
-        *
-        * @return      void
-        */
-       captureEvents : function (skipUnload) {
-                       // Capture unload events on the dialogue window and the editor frame
-               if (!Ext.isIE && this.plugin.editor._iframe.contentWindow) {
-                       Ext.EventManager.on(this.plugin.editor._iframe.contentWindow, 'unload', this.close, this, {single: true});
-               }
-               if (!skipUnload) {
-                       Ext.EventManager.on(this.dialogWindow, 'unload', this.close, this, {single: true});
-               }
-                       // Capture escape key on the dialogue window
-               Ext.EventManager.on(this.dialogWindow.document, 'keypress', this.closeOnEscape, this, {single: true});
-        }
-});
 }