includes/clientside/tinymce/plugins/fullscreen/editor_plugin_src.js
changeset 335 67bd3121a12e
parent 1 fe660c52c48f
child 395 fa4c5ecb7c9a
--- a/includes/clientside/tinymce/plugins/fullscreen/editor_plugin_src.js	Wed Dec 26 00:37:26 2007 -0500
+++ b/includes/clientside/tinymce/plugins/fullscreen/editor_plugin_src.js	Thu Dec 27 22:09:33 2007 -0500
@@ -1,230 +1,106 @@
 /**
- * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
+ * $Id: editor_plugin_src.js 453 2007-11-27 17:36:55Z spocke $
  *
  * @author Moxiecode
  * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
  */
 
-/* Import plugin specific language pack */
-tinyMCE.importPluginLanguagePack('fullscreen');
-
-var TinyMCE_FullScreenPlugin = {
-	getInfo : function() {
-		return {
-			longname : 'Fullscreen',
-			author : 'Moxiecode Systems AB',
-			authorurl : 'http://tinymce.moxiecode.com',
-			infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen',
-			version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
-		};
-	},
+(function() {
+	var DOM = tinymce.DOM;
 
-	initInstance : function(inst) {
-		if (!tinyMCE.settings['fullscreen_skip_plugin_css'])
-			tinyMCE.importCSS(inst.getContainerWin().document, tinyMCE.baseURL + "/plugins/fullscreen/css/page.css");
-	},
+	tinymce.create('tinymce.plugins.FullScreenPlugin', {
+		init : function(ed, url) {
+			var t = this, s = {}, vp;
 
-	getControlHTML : function(cn) {
-		switch (cn) {
-			case "fullscreen":
-				return tinyMCE.getButtonHTML(cn, 'lang_fullscreen_desc', '{$pluginurl}/images/fullscreen.gif', 'mceFullScreen');
-		}
+			t.editor = ed;
 
-		return "";
-	},
+			// Register commands
+			ed.addCommand('mceFullScreen', function() {
+				var win;
 
-	execCommand : function(editor_id, element, command, user_interface, value) {
-		var inst;
-
-		// Handle commands
-		switch (command) {
-			case "mceFullScreen":
-				inst = tinyMCE.getInstanceById(editor_id);
-
-				if (tinyMCE.getParam('fullscreen_new_window'))
-					this._toggleFullscreenWin(inst);
-				else
-					this._toggleFullscreen(inst);
-
-				return true;
-		}
-
-		// Pass to next handler in chain
-		return false;
-	},
-
-	_toggleFullscreenWin : function(inst) {
-		if (tinyMCE.getParam('fullscreen_is_enabled')) {
-			// In fullscreen mode
-			window.opener.tinyMCE.execInstanceCommand(tinyMCE.getParam('fullscreen_editor_id'), 'mceSetContent', false, tinyMCE.getContent(inst.editorId));
-			top.close();
-		} else {
-			tinyMCE.setWindowArg('editor_id', inst.editorId);
+				if (ed.getParam('fullscreen_is_enabled')) {
+					if (ed.getParam('fullscreen_new_window'))
+						closeFullscreen(); // Call to close in new window
+					else {
+						window.setTimeout(function() {
+							tinyMCE.get(ed.getParam('fullscreen_editor_id')).setContent(ed.getContent({format : 'raw'}), {format : 'raw'});
+							tinyMCE.remove(ed);
+							DOM.remove('mce_fullscreen_container');
+							DOM.setStyle(document.body, 'overflow', ed.getParam('fullscreen_overflow'));
+						}, 10);
+					}
+					return;
+				}
 
-			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);
-			try { win.resizeTo(screen.availWidth, screen.availHeight); } catch (e) {}
-		}
-	},
-
-	_toggleFullscreen : function(inst) {
-		var ds = inst.getData('fullscreen'), editorContainer, tableElm, iframe, vp, cw, cd, re, w, h, si, blo, delta = 0, cell, row, fcml, bcml;
+				if (ed.getParam('fullscreen_new_window')) {
+					win = window.open(url + "/fullscreen.htm", "mceFullScreenPopup", "fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=no,left=0,top=0,width=" + screen.availWidth + ",height=" + screen.availHeight);
+					try {
+						win.resizeTo(screen.availWidth, screen.availHeight);
+					} catch (e) {
+						// Ignore
+					}
+				} else {
+					s.fullscreen_overflow = DOM.getStyle(document.body, 'overflow', 1) || 'auto';
+					DOM.setStyle(document.body, 'overflow', 'hidden');
+					vp = DOM.getViewPort();
 
-		cw = inst.getContainerWin();
-		cd = cw.document;
-		editorContainer = cd.getElementById(inst.editorId + '_parent');
-		tableElm = editorContainer.firstChild;
-		iframe = inst.iframeElement;
-		re = cd.getElementById(inst.editorId + '_resize');
-		blo = document.getElementById('mce_fullscreen_blocker');
-		fcm = new TinyMCE_Layer(inst.editorId + '_fcMenu');
-		fcml = new TinyMCE_Layer(inst.editorId + '_fcMenu');
-		bcml = new TinyMCE_Layer(inst.editorId + '_bcMenu');
+					if (tinymce.isIE)
+						vp.h -= 1;
 
-		if (fcml.exists() && fcml.isVisible()) {
-			tinyMCE.switchClass(inst.editorId + '_forecolor', 'mceMenuButton');
-			fcml.hide();
-		}
+					n = DOM.add(document.body, 'div', {id : 'mce_fullscreen_container', style : 'position:absolute;top:0;left:0;width:' + vp.w + 'px;height:' + vp.h + 'px;z-index:150;'});
+					DOM.add(n, 'div', {id : 'mce_fullscreen'});
 
-		if (bcml.exists() && bcml.isVisible()) {
-			tinyMCE.switchClass(inst.editorId + '_backcolor', 'mceMenuButton');
-			bcml.hide();
-		}
+					tinymce.each(ed.settings, function(v, n) {
+						s[n] = v;
+					});
 
-		if (!ds.enabled) {
-			// Handle External Toolbar
-			if (inst.toolbarElement) {
-				delta += inst.toolbarElement.offsetHeight;
+					s.id = 'mce_fullscreen';
+					s.width = n.clientWidth;
+					s.height = n.clientHeight - 15;
+					s.fullscreen_is_enabled = true;
+					s.fullscreen_editor_id = ed.id;
+					s.theme_advanced_resizing = false;
 
-				cell = tableElm.tBodies[0].insertRow(0).insertCell(-1);
-				cell.className = 'mceToolbarTop';
-				cell.nowrap = true;
-
-				ds.oldToolbarParent = inst.toolbarElement.parentNode;
-				ds.toolbarHolder = document.createTextNode('...');
-
-				cell.appendChild(ds.oldToolbarParent.replaceChild(ds.toolbarHolder, inst.toolbarElement));
-			}
-
-			ds.parents = [];
+					tinymce.each(ed.getParam('fullscreen_settings'), function(v, k) {
+						s[k] = v;
+					});
 
-			vp = tinyMCE.getViewPort(cw);
-			ds.scrollX = vp.left;
-			ds.scrollY = vp.top;
+					if (s.theme_advanced_toolbar_location === 'external')
+						s.theme_advanced_toolbar_location = 'top';
 
-			// Opera has a bug restoring scrollbars
-			if (!tinyMCE.isOpera)
-				tinyMCE.addCSSClass(cd.body, 'mceFullscreen');
+					t.fullscreenEditor = new tinymce.Editor('mce_fullscreen', s);
+					t.fullscreenEditor.onInit.add(function() {
+						t.fullscreenEditor.setContent(ed.getContent({format : 'raw', no_events : 1}), {format : 'raw', no_events : 1});
+					});
 
-			tinyMCE.getParentNode(tableElm.parentNode, function (n) {
-				if (n.nodeName == 'BODY')
-					return true;
+					t.fullscreenEditor.render();
+					tinyMCE.add(t.fullscreenEditor);
 
-				if (n.nodeType == 1)
-					tinyMCE.addCSSClass(n, 'mceFullscreenPos');
-
-				return false;
+					t.fullscreenElement = new tinymce.dom.Element('mce_fullscreen_container');
+					t.fullscreenElement.update();
+					//document.body.overflow = 'hidden';
+				}
 			});
 
-			if (re)
-				re.style.display = 'none';
-
-			vp = tinyMCE.getViewPort(cw);
-
-			ds.oldWidth = iframe.style.width ? iframe.style.width : iframe.offsetWidth;
-			ds.oldHeight = iframe.style.height ? iframe.style.height : iframe.offsetHeight;
-			ds.oldTWidth = tableElm.style.width ? tableElm.style.width : tableElm.offsetWidth;
-			ds.oldTHeight = tableElm.style.height ? tableElm.style.height : tableElm.offsetHeight;
-
-			// Handle % width
-			if (ds.oldWidth && ds.oldWidth.indexOf)
-				ds.oldTWidth = ds.oldWidth.indexOf('%') != -1 ? ds.oldWidth : ds.oldTWidth;
-
-			if (!blo && tinyMCE.isRealIE) {
-				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;'});
-				document.body.appendChild(blo);
-			}
-
-			tableElm.style.position = 'absolute';
-			tableElm.style.zIndex = 1000;
-			tableElm.style.left = tableElm.style.top = '0';
-
-			tableElm.style.width = vp.width + 'px';
-			tableElm.style.height = vp.height + 'px';
+			// Register buttons
+			ed.addButton('fullscreen', {title : 'fullscreen.desc', cmd : 'mceFullScreen'});
 
-			if (tinyMCE.isRealIE) {
-				iframe.style.width = vp.width + 'px';
-				iframe.style.height = vp.height + 'px';
-
-				// Calc new width/height based on overflow
-				w = iframe.parentNode.clientWidth - (tableElm.offsetWidth - vp.width);
-				h = iframe.parentNode.clientHeight - (tableElm.offsetHeight - vp.height);
-			} else {
-				w = iframe.parentNode.clientWidth;
-				h = iframe.parentNode.clientHeight;
-			}
-
-			iframe.style.width = w + "px";
-			iframe.style.height = (h+delta) + "px";
-
-			tinyMCE.switchClass(inst.editorId + '_fullscreen', 'mceButtonSelected');
-			ds.enabled = true;
-
-			inst.useCSS = false;
-		} else {
-			// Handle External Toolbar
-			if (inst.toolbarElement) {
-				row = inst.toolbarElement.parentNode.parentNode;
-
-				row.parentNode.removeChild(row);
+			ed.onNodeChange.add(function(ed, cm) {
+				cm.setActive('fullscreen', ed.getParam('fullscreen_is_enabled'));
+			});
+		},
 
-				ds.oldToolbarParent.replaceChild(inst.toolbarElement, ds.toolbarHolder);
-
-				ds.oldToolbarParent = null;
-				ds.toolbarHolder = null;
-			}
-
-			if (blo)
-				blo.parentNode.removeChild(blo);
-
-			si = 0;
-			tinyMCE.getParentNode(tableElm.parentNode, function (n) {
-				if (n.nodeName == 'BODY')
-					return true;
-
-				if (n.nodeType == 1)
-					tinyMCE.removeCSSClass(n, 'mceFullscreenPos');
-			});
-
-			if (re && tinyMCE.getParam("theme_advanced_resizing", false))
-				re.style.display = 'block';
-
-			tableElm.style.position = 'static';
-			tableElm.style.zIndex = '';
-			tableElm.style.width = '';
-			tableElm.style.height = '';
+		getInfo : function() {
+			return {
+				longname : 'Fullscreen',
+				author : 'Moxiecode Systems AB',
+				authorurl : 'http://tinymce.moxiecode.com',
+				infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen',
+				version : tinymce.majorVersion + "." + tinymce.minorVersion
+			};
+		}
+	});
 
-			tableElm.style.width = ds.oldTWidth ? ds.oldTWidth : '';
-			tableElm.style.height = ds.oldTHeight ? ds.oldTHeight : '';
-
-			iframe.style.width = ds.oldWidth ? ds.oldWidth : '';
-			iframe.style.height = ds.oldHeight ? ds.oldHeight : '';
-
-			tinyMCE.switchClass(inst.editorId + '_fullscreen', 'mceButtonNormal');
-			ds.enabled = false;
-
-			tinyMCE.removeCSSClass(cd.body, 'mceFullscreen');
-			cw.scrollTo(ds.scrollX, ds.scrollY);
-
-			inst.useCSS = false;
-		}
-	},
-
-	handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) {
-		if (tinyMCE.getParam('fullscreen_is_enabled'))
-			tinyMCE.switchClass(editor_id + '_fullscreen', 'mceButtonSelected');
-
-		return true;
-	}
-};
-
-tinyMCE.addPlugin("fullscreen", TinyMCE_FullScreenPlugin);
+	// Register plugin
+	tinymce.PluginManager.add('fullscreen', tinymce.plugins.FullScreenPlugin);
+})();
\ No newline at end of file