/**\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