--- /dev/null
+<!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> </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> </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"> </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"> </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> </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