Browse Source

Feature #2479
add insertHtml plugin

Juan Carlos Raña 14 years ago
parent
commit
ddb220cd62

+ 26 - 0
main/inc/lib/fckeditor/editor/plugins/insertHtml/help.txt

@@ -0,0 +1,26 @@
+Plugin for inserting HTML: a single preconfigured snippet; a choice from multiple preconfigured snippets; or manually entered HTML
+
+Move the folder 'insertHtml' into your plugins directory ('editor/plugins/') and add+configure the plugin in your fckconfig.js file by using the example below:
+
+FCKConfig.Plugins.Add('insertHtml', 'en,nl');
+	// --- config settings for the insertHtml plugin ---
+	// enter a single snippet (HMTL string) or multiple snippets to choose form (object of description string and HTML string pairs)
+	// or leave empty if you want to show a dialog for the user to enter HTML manually (and not show any default HTML in the dialog textarea)
+	FCKConfig.insertHtml_snippets = {
+		'ArtGallery': '<embed width="475" height="400" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="FlashGallery/Art/ArtFlashGallery.swf" mediaType="flashGallery" bgcolor="#ffffff" allowfullscreen="true" flashvars="XMLFile=userfiles/image/ArtGallery/gallery.xml"></embed>',
+		'PhotoFlowGallery' : '<embed width="700" height="300" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="FlashGallery/PhotoFlow/PhotoFlowGallery.swf" mediaType="flashGallery" bgcolor="#ffffff" flashvars="XMLFile=userfiles/image/PhotoFlowGallery/gallery.xml"></embed>',
+		'StackPhotoGallery' : '<embed width="600" height="400" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="FlashGallery/StackPhoto/StackPhotoGallery.swf" mediaType="flashGallery" bgcolor="#ffffff" flashvars="XMLFile=userfiles/image/StackPhotoGallery/gallery.xml"></embed>',
+		'ZenGallery' : '<embed width="550" height="400" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="FlashGallery/Zen/ZenGallery.swf" mediaType="flashGallery" bgcolor="#ffffff" flashvars="XMLFile=userfiles/image/ZenGallery/gallery.xml"></embed>'
+	};
+	// show a dialog for the user to enter HTML manually or to choose between snippets
+	// (if no snippets specified the dialog will show anyhow)
+	FCKConfig.insertHtml_showDialog = true;
+	// specify a custom tooltip if you want this to appear when hovering the plugin's toolbar button (e.g. a description of the element being inserted)
+	// (if no custom tooltip is set 'Insert HTML' will appear, and if available, translated into your language)
+	FCKConfig.insertHtml_buttonTooltip = '';
+	// show a textarea in the dialog? (the (first) HTML set with FCKConfig.insertHtml_snippets will be shown in the textarea by default)
+	// (if no snippets specified the textarea will show anyhow)
+	FCKConfig.insertHtml_showTextarea = false;
+	// the size of the textarea in the dialog, in px
+	FCKConfig.insertHtml_textareaWidth = 300;
+	FCKConfig.insertHtml_textareaHeight = 70;

+ 44 - 0
main/inc/lib/fckeditor/editor/plugins/insertHtml/insertHtml/fckplugin.js

@@ -0,0 +1,44 @@
+/*
+ * Licensed under the terms of the GNU Lesser General Public License:
+ * 		http://www.opensource.org/licenses/lgpl-license.php
+ * 
+ * File Name: fckplugin.js
+ * 	Plugin to add some HTML, a single snippet; a choice from multiple snippets; or manually entered HTML
+ * 
+ * File Authors:
+ * 		Paul Moers (http://www.saulmade.nl/FCKeditor/FCKPlugins.php)
+ */
+
+	// insertHtmlObject constructor
+	var insertHtmlToolbarCommand = function()
+	{
+	}
+
+	// register the command
+	FCKCommands.RegisterCommand('insertHtml', new insertHtmlToolbarCommand());
+
+	// create the toolbar  button
+	var insertHtmlButton = new FCKToolbarButton('insertHtml', FCKConfig.insertHtml_buttonTooltip || FCKLang.inserHTML_buttonTooltip);
+	insertHtmlButton.IconPath = FCKPlugins.Items['insertHtml'].Path + 'images/toolbarIcon_default.gif'; // or pick any other in folder 'images'
+	FCKToolbarItems.RegisterItem('insertHtml', insertHtmlButton);
+
+	// manage the plugins' button behavior
+	insertHtmlToolbarCommand.prototype.GetState = function()
+	{
+		return FCK_TRISTATE_OFF;
+	}
+
+	// insertHtml's button click function
+	insertHtmlToolbarCommand.prototype.Execute = function()
+	{
+		if (FCKConfig.insertHtml_showDialog || !FCKConfig.insertHtml_snippets || (FCKConfig.insertHtml_snippets && !FCKConfig.insertHtml_snippets.length))
+		{
+			var dialog = new FCKDialogCommand('insertHtml', FCKLang.insertHtml_dialogTitle, FCKPlugins.Items['insertHtml'].Path + 'insertHtml.html', 200, 100);
+			dialog.Execute();
+		}
+		else
+		{
+			FCK.InsertHtml(FCKConfig.insertHtml_snippet);
+			FCK.EditorWindow.parent.FCKUndo.SaveUndoStep();
+		}
+	}

BIN
main/inc/lib/fckeditor/editor/plugins/insertHtml/insertHtml/images/toolbarIcon_default.gif


BIN
main/inc/lib/fckeditor/editor/plugins/insertHtml/insertHtml/images/toolbarIcon_famfamfam.gif


+ 75 - 0
main/inc/lib/fckeditor/editor/plugins/insertHtml/insertHtml/insertHtml.html

@@ -0,0 +1,75 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+
+	<title>insertHtml</title>
+
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta name="robots" content="noindex, nofollow" />
+
+	<script src="insertHtml.js" type="text/javascript"></script>
+	<script src="../../dialog/common/fck_dialog_common.js" type="text/javascript"></script>
+
+	<style>
+
+		#snippets
+		{
+			width: 200px;
+			margin-right: 10px;
+		}
+		#insertHtmlHelp,
+		{
+			margin-right: 0px; /* no extra right margin needed in IE */
+		}
+		.snippet
+		{
+			background: white;
+			padding: 3px 5px;
+			margin: 3px 0px;
+			border: 1px solid #dcdcdc;
+		}
+		.snippet.PopupSelectionBox
+		{
+		}
+
+		#insertHtmlHelp
+		{
+			margin: 0px 15px 6px 0px;
+			display: block;
+		}
+		#insertHtmlHelp,
+		{
+			margin-right: 5px; /* no extra right margin needed in IE */
+		}
+
+		#insertHtmlTextArea
+		{
+			overflow: auto;
+			margin: 0px 10px 0px 0px;
+		}
+		#insertHtmlTextArea,
+		{
+			margin-right: 0px; /* no extra right margin needed in IE */
+		}
+
+	</style>
+
+</head>
+<body style="padding-bottom: 0px;">
+
+	<table border="0" cellpadding="0" cellspacing="0">
+		<tr>
+			<td>
+				<span fcklang="inserHtml_help" id="insertHtmlHelp">
+					Enter any HTML below and click 'ok' to insert it at the location of the cursor in the editor.
+				</span>
+			</td>
+		</tr>
+		<tr>
+			<td id="content">
+			</td>
+		</tr>
+	</table>
+
+</body>
+</html>

+ 110 - 0
main/inc/lib/fckeditor/editor/plugins/insertHtml/insertHtml/insertHtml.js

@@ -0,0 +1,110 @@
+
+
+	var dialog = window.parent;
+	var editorWindow = dialog.InnerDialogLoaded();
+	var editorInstance = editorWindow.FCK;
+	var FCKConfig = editorWindow.FCKConfig;
+	var FCKTools = editorWindow.FCKTools;
+	var FCKBrowserInfo = editorWindow.FCKBrowserInfo;
+
+
+	// onload
+	window.onload = function()
+	{
+		var description, snippet;
+
+		// show snippets to choose from
+		if (typeof(FCKConfig.insertHtml_snippets) == 'object')
+		{
+			var snippetsDiv, snippetDiv, numberOfSnippets = 0;
+
+			snippetsDiv = document.createElement('div');
+			snippetsDiv.id = 'snippets';
+
+			for (description in FCKConfig.insertHtml_snippets)
+			{
+				snippetDiv = document.createElement('div');
+				snippetDiv.innerHTML = description;
+				snippetDiv.className = 'snippet';
+				snippetDiv.snippet = FCKConfig.insertHtml_snippets[description];
+				snippetDiv.onmouseover = function(){this.className += ' PopupSelectionBox'};
+				snippetDiv.onmouseout = function(){this.className = this.className.replace(/\s?PopupSelectionBox\s?/, '')};
+				if (FCKConfig.insertHtml_showTextarea)
+				{
+					snippetDiv.onclick = function(){
+						document.getElementById('insertHtmlTextArea').value = this.snippet;
+					};
+				}
+				else
+				{
+					snippetDiv.onclick = function(){
+						editorInstance.InsertHtml(this.snippet);
+						editorWindow.FCKUndo.SaveUndoStep();
+						dialog.CloseDialog();
+					};
+				}
+				snippetsDiv.appendChild(snippetDiv);
+
+				numberOfSnippets++;
+			}
+			document.getElementById('content').appendChild(snippetsDiv);
+
+			// load dialog 
+		}
+
+		// show textarea
+		if (FCKConfig.insertHtml_showTextarea || !FCKConfig.insertHtml_snippets || !numberOfSnippets)
+		{
+			insertHtmlTextArea = document.createElement('textarea');
+			insertHtmlTextArea.id = 'insertHtmlTextArea';
+			document.getElementById('content').appendChild(insertHtmlTextArea);
+			// set the size of the textarea
+			insertHtmlTextArea.style.width = (FCKConfig.insertHtml_textareaWidth || 300) + 'px';
+			insertHtmlTextArea.style.height = (FCKConfig.insertHtml_textareaHeight || 100) + 'px';
+			// load default content
+			if (typeof(FCKConfig.insertHtml_snippets) == 'object')
+			{
+				for (description in FCKConfig.insertHtml_snippets)
+				{
+					snippet = FCKConfig.insertHtml_snippets[description];
+					break;
+				}
+			}
+			else
+			{
+				snippet = FCKConfig.insertHtml_snippets;
+			}
+			insertHtmlTextArea.value = snippet;
+		}
+
+		// resize around snippets and/or textarea
+		// for IE this must be done before translating the dialog or the dialog will be to wide; also IE needs an approximate resize before autofitting or the dialog width will be to large
+		if (FCKBrowserInfo.IsIE) dialog.Sizer.ResizeDialog(parseInt(FCKConfig.insertHtml_textareaWidth || 300), parseInt(FCKConfig.insertHtml_textareaHeight || 100) + 130);
+		dialog.SetAutoSize(true);
+
+		// recenter dialog
+		setTimeout(function(){ // after a dummy delay, needed for webkit
+			var topWindowSize = FCKTools.GetViewPaneSize(dialog.top.window);
+			dialog.frameElement.style.left = Math.round((topWindowSize.Width - dialog.frameElement.offsetWidth) / 2) + 'px';
+			dialog.frameElement.style.top = Math.round((topWindowSize.Height - dialog.frameElement.offsetHeight) / 2).toString() + 'px';;
+		}, 0);
+
+		// translate the dialog box texts
+		editorWindow.FCKLanguageManager.TranslatePage(document);
+
+		// activate the "OK" button
+		dialog.SetOkButton(true);
+	}
+
+	// dialog's 'ok' button function to insert the Html
+	function Ok()
+	{
+		if (insertHtmlTextArea.value)
+		{
+			editorInstance.InsertHtml(insertHtmlTextArea.value);
+			editorWindow.FCKUndo.SaveUndoStep();
+
+			return true; // makes the dialog to close
+		}
+	}
+

+ 6 - 0
main/inc/lib/fckeditor/editor/plugins/insertHtml/insertHtml/lang/en.js

@@ -0,0 +1,6 @@
+
+
+	FCKLang.inserHTML_buttonTooltip					= 'Insert HTML';
+	FCKLang.insertHtml_dialogTitle						= 'Insert HTML';
+	FCKLang.inserHtml_help								= 'Enter any HTML below and click \'ok\' to insert it at the location of the cursor in the editor.';
+

+ 5 - 0
main/inc/lib/fckeditor/editor/plugins/insertHtml/insertHtml/lang/nl.js

@@ -0,0 +1,5 @@
+
+
+	FCKLang.inserHTML_buttonTooltip					= 'HTML invoegen';
+	FCKLang.insertHtml_dialogTitle						= 'HTML invoegen';
+	FCKLang.inserHtml_help								= 'Geef HTML code in en klik op \'ok\' om de code in te voegen op de locatie van de cursor in de editor.';