FCKeditor 2.6.6
[freeside.git] / httemplate / elements / fckeditor / editor / dialog / fck_div.html
diff --git a/httemplate/elements/fckeditor/editor/dialog/fck_div.html b/httemplate/elements/fckeditor/editor/dialog/fck_div.html
new file mode 100644 (file)
index 0000000..524c66a
--- /dev/null
@@ -0,0 +1,396 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >\r
+<!--\r
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net\r
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben\r
+ *\r
+ * == BEGIN LICENSE ==\r
+ *\r
+ * Licensed under the terms of any of the following licenses at your\r
+ * choice:\r
+ *\r
+ *  - GNU General Public License Version 2 or later (the "GPL")\r
+ *    http://www.gnu.org/licenses/gpl.html\r
+ *\r
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")\r
+ *    http://www.gnu.org/licenses/lgpl.html\r
+ *\r
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")\r
+ *    http://www.mozilla.org/MPL/MPL-1.1.html\r
+ *\r
+ * == END LICENSE ==\r
+ *\r
+ * Form dialog window.\r
+-->\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title></title>\r
+       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\r
+       <meta content="noindex, nofollow" name="robots" />\r
+       <script src="common/fck_dialog_common.js" type="text/javascript"></script>\r
+       <script type="text/javascript">\r
+var dialog     = window.parent ;\r
+var oEditor = dialog.InnerDialogLoaded() ;\r
+var FCK = oEditor.FCK ;\r
+var FCKLang = oEditor.FCKLang ;\r
+var FCKBrowserInfo = oEditor.FCKBrowserInfo ;\r
+var FCKStyles = oEditor.FCKStyles ;\r
+var FCKElementPath = oEditor.FCKElementPath ;\r
+var FCKDomRange = oEditor.FCKDomRange ;\r
+var FCKDomTools = oEditor.FCKDomTools ;\r
+var FCKDomRangeIterator = oEditor.FCKDomRangeIterator ;\r
+var FCKListsLib = oEditor.FCKListsLib ;\r
+var AlwaysCreate = dialog.Args().CustomValue ;\r
+\r
+String.prototype.IEquals = function()\r
+{\r
+       var thisUpper = this.toUpperCase() ;\r
+\r
+       var aArgs = arguments ;\r
+\r
+       // The arguments could also be a single array.\r
+       if ( aArgs.length == 1 && aArgs[0].pop )\r
+               aArgs = aArgs[0] ;\r
+\r
+       for ( var i = 0 ; i < aArgs.length ; i++ )\r
+       {\r
+               if ( thisUpper == aArgs[i].toUpperCase() )\r
+                       return true ;\r
+       }\r
+       return false ;\r
+}\r
+\r
+var CurrentContainers = [] ;\r
+if ( !AlwaysCreate )\r
+{\r
+       dialog.Selection.EnsureSelection() ;\r
+       CurrentContainers = FCKDomTools.GetSelectedDivContainers() ;\r
+}\r
+\r
+// Add some tabs\r
+dialog.AddTab( 'General', FCKLang.DlgDivGeneralTab );\r
+dialog.AddTab( 'Advanced', FCKLang.DlgDivAdvancedTab ) ;\r
+\r
+function AddStyleOption( styleName )\r
+{\r
+       var el = GetE( 'selStyle' ) ;\r
+       var opt = document.createElement( 'option' ) ;\r
+       opt.text = opt.value = styleName ;\r
+\r
+       if ( FCKBrowserInfo.IsIE )\r
+               el.add( opt ) ;\r
+       else\r
+               el.add( opt, null ) ;\r
+}\r
+\r
+function OnDialogTabChange( tabCode )\r
+{\r
+       ShowE( 'divGeneral', tabCode == 'General' ) ;\r
+       ShowE( 'divAdvanced', tabCode == 'Advanced' ) ;\r
+       dialog.SetAutoSize( true ) ;\r
+}\r
+\r
+function GetNearestAncestorDirection( node )\r
+{\r
+       var dir = 'ltr' ;       // HTML default.\r
+       while ( ( node = node.parentNode ) )\r
+       {\r
+               if ( node.dir )\r
+                       dir = node.dir ;\r
+       }\r
+       return dir ;\r
+}\r
+\r
+window.onload = function()\r
+{\r
+       // First of all, translate the dialog box texts\r
+       oEditor.FCKLanguageManager.TranslatePage(document) ;\r
+\r
+       dialog.SetOkButton( true ) ;\r
+       dialog.SetAutoSize( true ) ;\r
+\r
+       // Popuplate the style menu\r
+       var styles = FCKStyles.GetStyles() ;\r
+       var selectableStyles = {} ;\r
+       for ( var i in styles )\r
+       {\r
+               if ( ! /^_FCK_/.test( i ) && styles[i].Element == 'div' )\r
+                       selectableStyles[i] = styles[i] ;\r
+       }\r
+       if ( CurrentContainers.length <= 1 )\r
+       {\r
+               var target = CurrentContainers[0] ;\r
+               var match = null ;\r
+               for ( var i in selectableStyles )\r
+               {\r
+                       if ( target && styles[i].CheckElementRemovable( target, true ) )\r
+                               match = i ;\r
+               }\r
+               if ( !match )\r
+                       AddStyleOption( "" ) ;\r
+               for ( var i in selectableStyles )\r
+                       AddStyleOption( i ) ;\r
+               if ( match )\r
+                       GetE( 'selStyle' ).value = match ;\r
+\r
+               // Set the value for other inputs\r
+               if ( target )\r
+               {\r
+                       GetE( 'txtClass' ).value = target.className ;\r
+                       GetE( 'txtId' ).value = target.id ;\r
+                       GetE( 'txtLang' ).value = target.lang ;\r
+                       GetE( 'txtInlineStyle').value = target.style.cssText ;\r
+                       GetE( 'txtTitle' ).value = target.title ;\r
+                       GetE( 'selLangDir').value = target.dir || GetNearestAncestorDirection( target ) ;\r
+               }\r
+       }\r
+       else\r
+       {\r
+               GetE( 'txtId' ).disabled = true ;\r
+               AddStyleOption( "" ) ;\r
+               for ( var i in selectableStyles )\r
+                       AddStyleOption( i ) ;\r
+       }\r
+}\r
+\r
+function CreateDiv()\r
+{\r
+       var newBlocks = [] ;\r
+       var range = new FCKDomRange( FCK.EditorWindow ) ;\r
+       range.MoveToSelection() ;\r
+\r
+       var bookmark = range.CreateBookmark() ;\r
+\r
+       // Kludge for #1592: if the bookmark nodes are in the beginning of\r
+       // $tagName, then move them to the nearest block element in the\r
+       // $tagName.\r
+       if ( FCKBrowserInfo.IsIE )\r
+       {\r
+               var bStart      = range.GetBookmarkNode( bookmark, true ) ;\r
+               var bEnd        = range.GetBookmarkNode( bookmark, false ) ;\r
+\r
+               var cursor ;\r
+\r
+               if ( bStart\r
+                               && bStart.parentNode.nodeName.IEquals( 'div' )\r
+                               && !bStart.previousSibling )\r
+               {\r
+                       cursor = bStart ;\r
+                       while ( ( cursor = cursor.nextSibling ) )\r
+                       {\r
+                               if ( FCKListsLib.BlockElements[ cursor.nodeName.toLowerCase() ] )\r
+                                       FCKDomTools.MoveNode( bStart, cursor, true ) ;\r
+                       }\r
+               }\r
+\r
+               if ( bEnd\r
+                               && bEnd.parentNode.nodeName.IEquals( 'div' )\r
+                               && !bEnd.previousSibling )\r
+               {\r
+                       cursor = bEnd ;\r
+                       while ( ( cursor = cursor.nextSibling ) )\r
+                       {\r
+                               if ( FCKListsLib.BlockElements[ cursor.nodeName.toLowerCase() ] )\r
+                               {\r
+                                       if ( cursor.firstChild == bStart )\r
+                                               FCKDomTools.InsertAfterNode( bStart, bEnd ) ;\r
+                                       else\r
+                                               FCKDomTools.MoveNode( bEnd, cursor, true ) ;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       var iterator = new FCKDomRangeIterator( range ) ;\r
+       var block ;\r
+\r
+       var paragraphs = [] ;\r
+       while ( ( block = iterator.GetNextParagraph() ) )\r
+               paragraphs.push( block ) ;\r
+\r
+       // Make sure all paragraphs have the same parent.\r
+       var commonParent = paragraphs[0].parentNode ;\r
+       var tmp = [] ;\r
+       for ( var i = 0 ; i < paragraphs.length ; i++ )\r
+       {\r
+               block = paragraphs[i] ;\r
+               commonParent = FCKDomTools.GetCommonParents( block.parentNode, commonParent ).pop() ;\r
+       }\r
+\r
+       // The common parent must not be the following tags: table, tbody, tr, ol, ul.\r
+       while ( commonParent.nodeName.IEquals( 'table', 'tbody', 'tr', 'ol', 'ul' ) )\r
+               commonParent = commonParent.parentNode ;\r
+\r
+       // Reconstruct the block list to be processed such that all resulting blocks\r
+       // satisfy parentNode == commonParent.\r
+       var lastBlock = null ;\r
+       while ( paragraphs.length > 0 )\r
+       {\r
+               block = paragraphs.shift() ;\r
+               while ( block.parentNode != commonParent )\r
+                       block = block.parentNode ;\r
+               if ( block != lastBlock )\r
+                       tmp.push( block ) ;\r
+               lastBlock = block ;\r
+       }\r
+       paragraphs = tmp ;\r
+\r
+       // Split the paragraphs into groups depending on their BlockLimit element.\r
+       var groups = [] ;\r
+       var lastBlockLimit = null ;\r
+       for ( var i = 0 ; i < paragraphs.length ; i++ )\r
+       {\r
+               block = paragraphs[i] ;\r
+               var elementPath = new FCKElementPath( block ) ;\r
+               if ( elementPath.BlockLimit != lastBlockLimit )\r
+               {\r
+                       groups.push( [] ) ;\r
+                       lastBlockLimit = elementPath.BlockLimit ;\r
+               }\r
+               groups[groups.length - 1].push( block ) ;\r
+       }\r
+\r
+       // Create a DIV container for each group.\r
+       for ( var i = 0 ; i < groups.length ; i++ )\r
+       {\r
+               var divNode = FCK.EditorDocument.createElement( 'div' ) ;\r
+               groups[i][0].parentNode.insertBefore( divNode, groups[i][0] ) ;\r
+               for ( var j = 0 ; j < groups[i].length ; j++ )\r
+                       FCKDomTools.MoveNode( groups[i][j], divNode ) ;\r
+               newBlocks.push( divNode ) ;\r
+       }\r
+\r
+       range.MoveToBookmark( bookmark ) ;\r
+       range.Select() ;\r
+\r
+       FCK.Focus() ;\r
+       FCK.Events.FireEvent( 'OnSelectionChange' ) ;\r
+\r
+       return newBlocks ;\r
+}\r
+\r
+function Ok()\r
+{\r
+       oEditor.FCKUndo.SaveUndoStep() ;\r
+\r
+       if ( CurrentContainers.length < 1 )\r
+               CurrentContainers = CreateDiv();\r
+\r
+       var setValue = function( attrName, inputName )\r
+       {\r
+               var val = GetE( inputName ).value ;\r
+               for ( var i = 0 ; i < CurrentContainers.length ; i++ )\r
+               {\r
+                       if ( val == '' )\r
+                               CurrentContainers[i].removeAttribute( attrName ) ;\r
+                       else\r
+                               CurrentContainers[i].setAttribute( attrName, val ) ;\r
+               }\r
+       }\r
+\r
+       // Apply modifications to the DIV container according to dialog inputs.\r
+       if ( CurrentContainers.length == 1 )\r
+       {\r
+               setValue( 'class', 'txtClass' ) ;\r
+               setValue( 'id', 'txtId' ) ;\r
+       }\r
+       setValue( 'lang', 'txtLang' ) ;\r
+       if ( FCKBrowserInfo.IsIE )\r
+       {\r
+               for ( var i = 0 ; i < CurrentContainers.length ; i++ )\r
+                       CurrentContainers[i].style.cssText = GetE( 'txtInlineStyle' ).value ;\r
+       }\r
+       else\r
+               setValue( 'style', 'txtInlineStyle' ) ;\r
+       setValue( 'title', 'txtTitle' ) ;\r
+       for ( var i = 0 ; i < CurrentContainers.length ; i++ )\r
+       {\r
+               var dir = GetE( 'selLangDir' ).value ;\r
+               var styleName = GetE( 'selStyle' ).value ;\r
+               if ( GetNearestAncestorDirection( CurrentContainers[i] ) != dir )\r
+                       CurrentContainers[i].dir = dir ;\r
+               else\r
+                       CurrentContainers[i].removeAttribute( 'dir' ) ;\r
+\r
+               if ( styleName )\r
+                       FCKStyles.GetStyle( styleName ).ApplyToObject( CurrentContainers[i] ) ;\r
+       }\r
+\r
+       return true ;\r
+}\r
+\r
+       </script>\r
+</head>\r
+<body style="overflow: hidden">\r
+       <div id="divGeneral">\r
+               <table cellspacing="0" cellpadding="0" width="100%" border="0">\r
+                       <colgroup span="2">\r
+                               <col width="49%" />\r
+                               <col width="2%" />\r
+                               <col width="49%" />\r
+                       </colgroup>\r
+                       <tr>\r
+                               <td>\r
+                                       <span fcklang="DlgDivStyle">Style</span><br />\r
+                                       <select id="selStyle" style="width: 100%;">\r
+                                       </select>\r
+                               </td>\r
+                               <td>&nbsp;</td>\r
+                               <td>\r
+                                       <span fcklang="DlgGenClass">Stylesheet Classes</span><br />\r
+                                       <input id="txtClass" style="width: 100%" type="text" />\r
+                               </td>\r
+                       </tr>\r
+               </table>\r
+       </div>\r
+       <div id="divAdvanced" style="display: none">\r
+               <table cellspacing="0" cellpadding="0" width="100%" border="0">\r
+                       <colgroup span="2">\r
+                               <col width="49%" />\r
+                               <col width="2%" />\r
+                               <col width="49%" />\r
+                       </colgroup>\r
+                       <tr>\r
+                               <td>\r
+                                       <span fcklang="DlgGenId">Id</span><br />\r
+                                       <input style="width: 100%" type="text" id="txtId" />\r
+                               </td>\r
+                               <td>&nbsp;</td>\r
+                               <td>\r
+                                       <span fcklang="DlgGenLangCode">Language Code</span><br />\r
+                                       <input style="width: 100%" type="text" id="txtLang" />\r
+                               </td>\r
+                       </tr>\r
+                       <tr>\r
+                               <td colspan="3">&nbsp;</td>\r
+                       </tr>\r
+                       <tr>\r
+                               <td colspan="3">\r
+                                       <span fcklang="DlgDivInlineStyle">Inline Style</span><br />\r
+                                       <input style="width: 100%" type="text" id="txtInlineStyle" />\r
+                               </td>\r
+                       </tr>\r
+                       <tr>\r
+                               <td colspan="3">&nbsp;</td>\r
+                       </tr>\r
+                       <tr>\r
+                               <td colspan="3">\r
+                                       <span fcklang="DlgGenTitle">Advisory Title</span><br />\r
+                                       <input style="width: 100%" type="text" id="txtTitle" />\r
+                               </td>\r
+                       </tr>\r
+                       <tr>\r
+                               <td>&nbsp;</td>\r
+                       </tr>\r
+                       <tr>\r
+                               <td>\r
+                                       <span fcklang="DlgGenLangDir">Language Direction</span><br />\r
+                                       <select id="selLangDir">\r
+                                               <option fcklang="DlgGenLangDirLtr" value="ltr">Left to Right (LTR)\r
+                                               <option fcklang="DlgGenLangDirRtl" value="rtl">Right to Left (RTL)\r
+                                       </select>\r
+                               </td>\r
+                       </tr>\r
+               </table>\r
+       </div>\r
+</body>\r
+</html>\r