Upgrade TinyMCE to v3.4.5
[citadel.git] / webcit / tiny_mce / plugins / fullscreen / editor_plugin_src.js
old mode 100755 (executable)
new mode 100644 (file)
index 0f8b83a..afa4f9b
 /**\r
- * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $\r
+ * editor_plugin_src.js\r
  *\r
- * @author Moxiecode\r
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
  */\r
 \r
-/* Import plugin specific language pack */\r
-tinyMCE.importPluginLanguagePack('fullscreen');\r
-\r
-var TinyMCE_FullScreenPlugin = {\r
-       getInfo : function() {\r
-               return {\r
-                       longname : 'Fullscreen',\r
-                       author : 'Moxiecode Systems AB',\r
-                       authorurl : 'http://tinymce.moxiecode.com',\r
-                       infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen',\r
-                       version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion\r
-               };\r
-       },\r
-\r
-       initInstance : function(inst) {\r
-               if (!tinyMCE.settings['fullscreen_skip_plugin_css'])\r
-                       tinyMCE.importCSS(inst.getContainerWin().document, tinyMCE.baseURL + "/plugins/fullscreen/css/page.css");\r
-       },\r
-\r
-       getControlHTML : function(cn) {\r
-               switch (cn) {\r
-                       case "fullscreen":\r
-                               return tinyMCE.getButtonHTML(cn, 'lang_fullscreen_desc', '{$pluginurl}/images/fullscreen.gif', 'mceFullScreen');\r
-               }\r
-\r
-               return "";\r
-       },\r
-\r
-       execCommand : function(editor_id, element, command, user_interface, value) {\r
-               var inst;\r
-\r
-               // Handle commands\r
-               switch (command) {\r
-                       case "mceFullScreen":\r
-                               inst = tinyMCE.getInstanceById(editor_id);\r
-\r
-                               if (tinyMCE.getParam('fullscreen_new_window'))\r
-                                       this._toggleFullscreenWin(inst);\r
-                               else\r
-                                       this._toggleFullscreen(inst);\r
-\r
-                               return true;\r
-               }\r
-\r
-               // Pass to next handler in chain\r
-               return false;\r
-       },\r
-\r
-       _toggleFullscreenWin : function(inst) {\r
-               if (tinyMCE.getParam('fullscreen_is_enabled')) {\r
-                       // In fullscreen mode\r
-                       window.opener.tinyMCE.execInstanceCommand(tinyMCE.getParam('fullscreen_editor_id'), 'mceSetContent', false, tinyMCE.getContent(inst.editorId));\r
-                       top.close();\r
-               } else {\r
-                       tinyMCE.setWindowArg('editor_id', inst.editorId);\r
-\r
-                       var win = window.open(tinyMCE.baseURL + "/plugins/fullscreen/fullscreen.htm", "mceFullScreenPopup", "fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width=" + screen.availWidth + ",height=" + screen.availHeight);\r
-                       try { win.resizeTo(screen.availWidth, screen.availHeight); } catch (e) {}\r
-               }\r
-       },\r
-\r
-       _toggleFullscreen : function(inst) {\r
-               var ds = inst.getData('fullscreen'), editorContainer, tableElm, iframe, vp, cw, cd, re, w, h, si, blo, delta = 0, cell, row, fcml, bcml;\r
-\r
-               cw = inst.getContainerWin();\r
-               cd = cw.document;\r
-               editorContainer = cd.getElementById(inst.editorId + '_parent');\r
-               tableElm = editorContainer.firstChild;\r
-               iframe = inst.iframeElement;\r
-               re = cd.getElementById(inst.editorId + '_resize');\r
-               blo = document.getElementById('mce_fullscreen_blocker');\r
-               fcm = new TinyMCE_Layer(inst.editorId + '_fcMenu');\r
-               fcml = new TinyMCE_Layer(inst.editorId + '_fcMenu');\r
-               bcml = new TinyMCE_Layer(inst.editorId + '_bcMenu');\r
-\r
-               if (fcml.exists() && fcml.isVisible()) {\r
-                       tinyMCE.switchClass(inst.editorId + '_forecolor', 'mceMenuButton');\r
-                       fcml.hide();\r
-               }\r
-\r
-               if (bcml.exists() && bcml.isVisible()) {\r
-                       tinyMCE.switchClass(inst.editorId + '_backcolor', 'mceMenuButton');\r
-                       bcml.hide();\r
-               }\r
-\r
-               if (!ds.enabled) {\r
-                       // Handle External Toolbar\r
-                       if (inst.toolbarElement) {\r
-                               delta += inst.toolbarElement.offsetHeight;\r
-\r
-                               cell = tableElm.tBodies[0].insertRow(0).insertCell(-1);\r
-                               cell.className = 'mceToolbarTop';\r
-                               cell.nowrap = true;\r
-\r
-                               ds.oldToolbarParent = inst.toolbarElement.parentNode;\r
-                               ds.toolbarHolder = document.createTextNode('...');\r
-\r
-                               cell.appendChild(ds.oldToolbarParent.replaceChild(ds.toolbarHolder, inst.toolbarElement));\r
-                       }\r
-\r
-                       ds.parents = [];\r
-\r
-                       vp = tinyMCE.getViewPort(cw);\r
-                       ds.scrollX = vp.left;\r
-                       ds.scrollY = vp.top;\r
-\r
-                       // Opera has a bug restoring scrollbars\r
-                       if (!tinyMCE.isOpera)\r
-                               tinyMCE.addCSSClass(cd.body, 'mceFullscreen');\r
-\r
-                       tinyMCE.getParentNode(tableElm.parentNode, function (n) {\r
-                               if (n.nodeName == 'BODY')\r
-                                       return true;\r
-\r
-                               if (n.nodeType == 1)\r
-                                       tinyMCE.addCSSClass(n, 'mceFullscreenPos');\r
-\r
-                               return false;\r
+(function() {\r
+       var DOM = tinymce.DOM;\r
+\r
+       tinymce.create('tinymce.plugins.FullScreenPlugin', {\r
+               init : function(ed, url) {\r
+                       var t = this, s = {}, vp, posCss;\r
+\r
+                       t.editor = ed;\r
+\r
+                       // Register commands\r
+                       ed.addCommand('mceFullScreen', function() {\r
+                               var win, de = DOM.doc.documentElement;\r
+\r
+                               if (ed.getParam('fullscreen_is_enabled')) {\r
+                                       if (ed.getParam('fullscreen_new_window'))\r
+                                               closeFullscreen(); // Call to close in new window\r
+                                       else {\r
+                                               DOM.win.setTimeout(function() {\r
+                                                       tinymce.dom.Event.remove(DOM.win, 'resize', t.resizeFunc);\r
+                                                       tinyMCE.get(ed.getParam('fullscreen_editor_id')).setContent(ed.getContent());\r
+                                                       tinyMCE.remove(ed);\r
+                                                       DOM.remove('mce_fullscreen_container');\r
+                                                       de.style.overflow = ed.getParam('fullscreen_html_overflow');\r
+                                                       DOM.setStyle(DOM.doc.body, 'overflow', ed.getParam('fullscreen_overflow'));\r
+                                                       DOM.win.scrollTo(ed.getParam('fullscreen_scrollx'), ed.getParam('fullscreen_scrolly'));\r
+                                                       tinyMCE.settings = tinyMCE.oldSettings; // Restore old settings\r
+                                               }, 10);\r
+                                       }\r
+\r
+                                       return;\r
+                               }\r
+\r
+                               if (ed.getParam('fullscreen_new_window')) {\r
+                                       win = DOM.win.open(url + "/fullscreen.htm", "mceFullScreenPopup", "fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width=" + screen.availWidth + ",height=" + screen.availHeight);\r
+                                       try {\r
+                                               win.resizeTo(screen.availWidth, screen.availHeight);\r
+                                       } catch (e) {\r
+                                               // Ignore\r
+                                       }\r
+                               } else {\r
+                                       tinyMCE.oldSettings = tinyMCE.settings; // Store old settings\r
+                                       s.fullscreen_overflow = DOM.getStyle(DOM.doc.body, 'overflow', 1) || 'auto';\r
+                                       s.fullscreen_html_overflow = DOM.getStyle(de, 'overflow', 1);\r
+                                       vp = DOM.getViewPort();\r
+                                       s.fullscreen_scrollx = vp.x;\r
+                                       s.fullscreen_scrolly = vp.y;\r
+\r
+                                       // Fixes an Opera bug where the scrollbars doesn't reappear\r
+                                       if (tinymce.isOpera && s.fullscreen_overflow == 'visible')\r
+                                               s.fullscreen_overflow = 'auto';\r
+\r
+                                       // Fixes an IE bug where horizontal scrollbars would appear\r
+                                       if (tinymce.isIE && s.fullscreen_overflow == 'scroll')\r
+                                               s.fullscreen_overflow = 'auto';\r
+\r
+                                       // Fixes an IE bug where the scrollbars doesn't reappear\r
+                                       if (tinymce.isIE && (s.fullscreen_html_overflow == 'visible' || s.fullscreen_html_overflow == 'scroll'))\r
+                                               s.fullscreen_html_overflow = 'auto'; \r
+\r
+                                       if (s.fullscreen_overflow == '0px')\r
+                                               s.fullscreen_overflow = '';\r
+\r
+                                       DOM.setStyle(DOM.doc.body, 'overflow', 'hidden');\r
+                                       de.style.overflow = 'hidden'; //Fix for IE6/7\r
+                                       vp = DOM.getViewPort();\r
+                                       DOM.win.scrollTo(0, 0);\r
+\r
+                                       if (tinymce.isIE)\r
+                                               vp.h -= 1;\r
+\r
+                                       // Use fixed position if it exists\r
+                                       if (tinymce.isIE6)\r
+                                               posCss = 'absolute;top:' + vp.y;\r
+                                       else\r
+                                               posCss = 'fixed;top:0';\r
+\r
+                                       n = DOM.add(DOM.doc.body, 'div', {\r
+                                               id : 'mce_fullscreen_container', \r
+                                               style : 'position:' + posCss + ';left:0;width:' + vp.w + 'px;height:' + vp.h + 'px;z-index:200000;'});\r
+                                       DOM.add(n, 'div', {id : 'mce_fullscreen'});\r
+\r
+                                       tinymce.each(ed.settings, function(v, n) {\r
+                                               s[n] = v;\r
+                                       });\r
+\r
+                                       s.id = 'mce_fullscreen';\r
+                                       s.width = n.clientWidth;\r
+                                       s.height = n.clientHeight - 15;\r
+                                       s.fullscreen_is_enabled = true;\r
+                                       s.fullscreen_editor_id = ed.id;\r
+                                       s.theme_advanced_resizing = false;\r
+                                       s.save_onsavecallback = function() {\r
+                                               ed.setContent(tinyMCE.get(s.id).getContent());\r
+                                               ed.execCommand('mceSave');\r
+                                       };\r
+\r
+                                       tinymce.each(ed.getParam('fullscreen_settings'), function(v, k) {\r
+                                               s[k] = v;\r
+                                       });\r
+\r
+                                       if (s.theme_advanced_toolbar_location === 'external')\r
+                                               s.theme_advanced_toolbar_location = 'top';\r
+\r
+                                       t.fullscreenEditor = new tinymce.Editor('mce_fullscreen', s);\r
+                                       t.fullscreenEditor.onInit.add(function() {\r
+                                               t.fullscreenEditor.setContent(ed.getContent());\r
+                                               t.fullscreenEditor.focus();\r
+                                       });\r
+\r
+                                       t.fullscreenEditor.render();\r
+\r
+                                       t.fullscreenElement = new tinymce.dom.Element('mce_fullscreen_container');\r
+                                       t.fullscreenElement.update();\r
+                                       //document.body.overflow = 'hidden';\r
+\r
+                                       t.resizeFunc = tinymce.dom.Event.add(DOM.win, 'resize', function() {\r
+                                               var vp = tinymce.DOM.getViewPort(), fed = t.fullscreenEditor, outerSize, innerSize;\r
+\r
+                                               // Get outer/inner size to get a delta size that can be used to calc the new iframe size\r
+                                               outerSize = fed.dom.getSize(fed.getContainer().firstChild);\r
+                                               innerSize = fed.dom.getSize(fed.getContainer().getElementsByTagName('iframe')[0]);\r
+\r
+                                               fed.theme.resizeTo(vp.w - outerSize.w + innerSize.w, vp.h - outerSize.h + innerSize.h);\r
+                                       });\r
+                               }\r
                        });\r
 \r
-                       if (re)\r
-                               re.style.display = 'none';\r
+                       // Register buttons\r
+                       ed.addButton('fullscreen', {title : 'fullscreen.desc', cmd : 'mceFullScreen'});\r
 \r
-                       vp = tinyMCE.getViewPort(cw);\r
-\r
-                       ds.oldWidth = iframe.style.width ? iframe.style.width : iframe.offsetWidth;\r
-                       ds.oldHeight = iframe.style.height ? iframe.style.height : iframe.offsetHeight;\r
-                       ds.oldTWidth = tableElm.style.width ? tableElm.style.width : tableElm.offsetWidth;\r
-                       ds.oldTHeight = tableElm.style.height ? tableElm.style.height : tableElm.offsetHeight;\r
-\r
-                       // Handle % width\r
-                       if (ds.oldWidth && ds.oldWidth.indexOf)\r
-                               ds.oldTWidth = ds.oldWidth.indexOf('%') != -1 ? ds.oldWidth : ds.oldTWidth;\r
-\r
-                       if (!blo && tinyMCE.isRealIE) {\r
-                               blo = tinyMCE.createTag(document, 'iframe', {id : 'mce_fullscreen_blocker', src : 'about:blank', frameBorder : 0, width : vp.width, height : vp.height, style : 'display: block; position: absolute; left: 0; top: 0; z-index: 999; margin: 0; padding: 0;'});\r
-                               document.body.appendChild(blo);\r
-                       }\r
-\r
-                       tableElm.style.position = 'absolute';\r
-                       tableElm.style.zIndex = 1000;\r
-                       tableElm.style.left = tableElm.style.top = '0';\r
-\r
-                       tableElm.style.width = vp.width + 'px';\r
-                       tableElm.style.height = vp.height + 'px';\r
-\r
-                       if (tinyMCE.isRealIE) {\r
-                               iframe.style.width = vp.width + 'px';\r
-                               iframe.style.height = vp.height + 'px';\r
-\r
-                               // Calc new width/height based on overflow\r
-                               w = iframe.parentNode.clientWidth - (tableElm.offsetWidth - vp.width);\r
-                               h = iframe.parentNode.clientHeight - (tableElm.offsetHeight - vp.height);\r
-                       } else {\r
-                               w = iframe.parentNode.clientWidth;\r
-                               h = iframe.parentNode.clientHeight;\r
-                       }\r
-\r
-                       iframe.style.width = w + "px";\r
-                       iframe.style.height = (h+delta) + "px";\r
-\r
-                       tinyMCE.switchClass(inst.editorId + '_fullscreen', 'mceButtonSelected');\r
-                       ds.enabled = true;\r
-\r
-                       inst.useCSS = false;\r
-               } else {\r
-                       // Handle External Toolbar\r
-                       if (inst.toolbarElement) {\r
-                               row = inst.toolbarElement.parentNode.parentNode;\r
-\r
-                               row.parentNode.removeChild(row);\r
-\r
-                               ds.oldToolbarParent.replaceChild(inst.toolbarElement, ds.toolbarHolder);\r
-\r
-                               ds.oldToolbarParent = null;\r
-                               ds.toolbarHolder = null;\r
-                       }\r
-\r
-                       if (blo)\r
-                               blo.parentNode.removeChild(blo);\r
-\r
-                       si = 0;\r
-                       tinyMCE.getParentNode(tableElm.parentNode, function (n) {\r
-                               if (n.nodeName == 'BODY')\r
-                                       return true;\r
-\r
-                               if (n.nodeType == 1)\r
-                                       tinyMCE.removeCSSClass(n, 'mceFullscreenPos');\r
+                       ed.onNodeChange.add(function(ed, cm) {\r
+                               cm.setActive('fullscreen', ed.getParam('fullscreen_is_enabled'));\r
                        });\r
-\r
-                       if (re && tinyMCE.getParam("theme_advanced_resizing", false))\r
-                               re.style.display = 'block';\r
-\r
-                       tableElm.style.position = 'static';\r
-                       tableElm.style.zIndex = '';\r
-                       tableElm.style.width = '';\r
-                       tableElm.style.height = '';\r
-\r
-                       tableElm.style.width = ds.oldTWidth ? ds.oldTWidth : '';\r
-                       tableElm.style.height = ds.oldTHeight ? ds.oldTHeight : '';\r
-\r
-                       iframe.style.width = ds.oldWidth ? ds.oldWidth : '';\r
-                       iframe.style.height = ds.oldHeight ? ds.oldHeight : '';\r
-\r
-                       tinyMCE.switchClass(inst.editorId + '_fullscreen', 'mceButtonNormal');\r
-                       ds.enabled = false;\r
-\r
-                       tinyMCE.removeCSSClass(cd.body, 'mceFullscreen');\r
-                       cw.scrollTo(ds.scrollX, ds.scrollY);\r
-\r
-                       inst.useCSS = false;\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Fullscreen',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
                }\r
-       },\r
-\r
-       handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) {\r
-               if (tinyMCE.getParam('fullscreen_is_enabled'))\r
-                       tinyMCE.switchClass(editor_id + '_fullscreen', 'mceButtonSelected');\r
-\r
-               return true;\r
-       }\r
-};\r
+       });\r
 \r
-tinyMCE.addPlugin("fullscreen", TinyMCE_FullScreenPlugin);\r
+       // Register plugin\r
+       tinymce.PluginManager.add('fullscreen', tinymce.plugins.FullScreenPlugin);\r
+})();
\ No newline at end of file