1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
3
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
4
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
8
* Licensed under the terms of any of the following licenses at your
11
* - GNU General Public License Version 2 or later (the "GPL")
12
* http://www.gnu.org/licenses/gpl.html
14
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
15
* http://www.gnu.org/licenses/lgpl.html
17
* - Mozilla Public License Version 1.1 or later (the "MPL")
18
* http://www.mozilla.org/MPL/MPL-1.1.html
24
<html xmlns="http://www.w3.org/1999/xhtml">
27
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
28
<meta content="noindex, nofollow" name="robots" />
29
<script src="common/fck_dialog_common.js" type="text/javascript"></script>
30
<script type="text/javascript">
31
var dialog = window.parent ;
32
var oEditor = dialog.InnerDialogLoaded() ;
33
var FCK = oEditor.FCK ;
34
var FCKLang = oEditor.FCKLang ;
35
var FCKBrowserInfo = oEditor.FCKBrowserInfo ;
36
var FCKStyles = oEditor.FCKStyles ;
37
var FCKElementPath = oEditor.FCKElementPath ;
38
var FCKDomRange = oEditor.FCKDomRange ;
39
var FCKDomTools = oEditor.FCKDomTools ;
40
var FCKDomRangeIterator = oEditor.FCKDomRangeIterator ;
41
var FCKListsLib = oEditor.FCKListsLib ;
42
var AlwaysCreate = dialog.Args().CustomValue ;
44
String.prototype.IEquals = function()
46
var thisUpper = this.toUpperCase() ;
48
var aArgs = arguments ;
50
// The arguments could also be a single array.
51
if ( aArgs.length == 1 && aArgs[0].pop )
54
for ( var i = 0 ; i < aArgs.length ; i++ )
56
if ( thisUpper == aArgs[i].toUpperCase() )
62
var CurrentContainers = [] ;
65
dialog.Selection.EnsureSelection() ;
66
CurrentContainers = FCKDomTools.GetSelectedDivContainers() ;
70
dialog.AddTab( 'General', FCKLang.DlgDivGeneralTab );
71
dialog.AddTab( 'Advanced', FCKLang.DlgDivAdvancedTab ) ;
73
function AddStyleOption( styleName )
75
var el = GetE( 'selStyle' ) ;
76
var opt = document.createElement( 'option' ) ;
77
opt.text = opt.value = styleName ;
79
if ( FCKBrowserInfo.IsIE )
85
function OnDialogTabChange( tabCode )
87
ShowE( 'divGeneral', tabCode == 'General' ) ;
88
ShowE( 'divAdvanced', tabCode == 'Advanced' ) ;
89
dialog.SetAutoSize( true ) ;
92
function GetNearestAncestorDirection( node )
94
var dir = 'ltr' ; // HTML default.
95
while ( ( node = node.parentNode ) )
103
window.onload = function()
105
// First of all, translate the dialog box texts
106
oEditor.FCKLanguageManager.TranslatePage(document) ;
108
dialog.SetOkButton( true ) ;
109
dialog.SetAutoSize( true ) ;
111
// Popuplate the style menu
112
var styles = FCKStyles.GetStyles() ;
113
var selectableStyles = {} ;
114
for ( var i in styles )
116
if ( ! /^_FCK_/.test( i ) && styles[i].Element == 'div' )
117
selectableStyles[i] = styles[i] ;
119
if ( CurrentContainers.length <= 1 )
121
var target = CurrentContainers[0] ;
123
for ( var i in selectableStyles )
125
if ( target && styles[i].CheckElementRemovable( target, true ) )
129
AddStyleOption( "" ) ;
130
for ( var i in selectableStyles )
131
AddStyleOption( i ) ;
133
GetE( 'selStyle' ).value = match ;
135
// Set the value for other inputs
138
GetE( 'txtClass' ).value = target.className ;
139
GetE( 'txtId' ).value = target.id ;
140
GetE( 'txtLang' ).value = target.lang ;
141
GetE( 'txtInlineStyle').value = target.style.cssText ;
142
GetE( 'txtTitle' ).value = target.title ;
143
GetE( 'selLangDir').value = target.dir || GetNearestAncestorDirection( target ) ;
148
GetE( 'txtId' ).disabled = true ;
149
AddStyleOption( "" ) ;
150
for ( var i in selectableStyles )
151
AddStyleOption( i ) ;
158
var range = new FCKDomRange( FCK.EditorWindow ) ;
159
range.MoveToSelection() ;
161
var bookmark = range.CreateBookmark() ;
163
// Kludge for #1592: if the bookmark nodes are in the beginning of
164
// $tagName, then move them to the nearest block element in the
166
if ( FCKBrowserInfo.IsIE )
168
var bStart = range.GetBookmarkNode( bookmark, true ) ;
169
var bEnd = range.GetBookmarkNode( bookmark, false ) ;
174
&& bStart.parentNode.nodeName.IEquals( 'div' )
175
&& !bStart.previousSibling )
178
while ( ( cursor = cursor.nextSibling ) )
180
if ( FCKListsLib.BlockElements[ cursor.nodeName.toLowerCase() ] )
181
FCKDomTools.MoveNode( bStart, cursor, true ) ;
186
&& bEnd.parentNode.nodeName.IEquals( 'div' )
187
&& !bEnd.previousSibling )
190
while ( ( cursor = cursor.nextSibling ) )
192
if ( FCKListsLib.BlockElements[ cursor.nodeName.toLowerCase() ] )
194
if ( cursor.firstChild == bStart )
195
FCKDomTools.InsertAfterNode( bStart, bEnd ) ;
197
FCKDomTools.MoveNode( bEnd, cursor, true ) ;
203
var iterator = new FCKDomRangeIterator( range ) ;
206
iterator.EnforceRealBlocks = true ;
207
var paragraphs = [] ;
209
var lastBlockLimit = null ;
210
while ( ( block = iterator.GetNextParagraph() ) )
212
var elementPath = new FCKElementPath( block ) ;
213
if ( elementPath.BlockLimit != lastBlockLimit )
216
lastBlockLimit = elementPath.BlockLimit ;
218
groups[groups.length - 1].push( block ) ;
221
for ( var i = 0 ; i < groups.length ; i++ )
223
var divNode = FCK.EditorDocument.createElement( 'div' ) ;
224
groups[i][0].parentNode.insertBefore( divNode, groups[i][0] ) ;
225
for ( var j = 0 ; j < groups[i].length ; j++ )
226
FCKDomTools.MoveNode( groups[i][j], divNode ) ;
227
newBlocks.push( divNode ) ;
230
range.MoveToBookmark( bookmark ) ;
234
FCK.Events.FireEvent( 'OnSelectionChange' ) ;
241
oEditor.FCKUndo.SaveUndoStep() ;
243
if ( CurrentContainers.length < 1 )
244
CurrentContainers = CreateDiv();
246
var setValue = function( attrName, inputName )
248
var val = GetE( inputName ).value ;
249
for ( var i = 0 ; i < CurrentContainers.length ; i++ )
252
CurrentContainers[i].removeAttribute( attrName ) ;
254
CurrentContainers[i].setAttribute( attrName, val ) ;
258
// Apply modifications to the DIV container according to dialog inputs.
259
if ( CurrentContainers.length == 1 )
261
setValue( 'class', 'txtClass' ) ;
262
setValue( 'id', 'txtId' ) ;
264
setValue( 'lang', 'txtLang' ) ;
265
if ( FCKBrowserInfo.IsIE )
267
for ( var i = 0 ; i < CurrentContainers.length ; i++ )
268
CurrentContainers[i].style.cssText = GetE( 'txtInlineStyle' ).value ;
271
setValue( 'style', 'txtInlineStyle' ) ;
272
setValue( 'title', 'txtTitle' ) ;
273
for ( var i = 0 ; i < CurrentContainers.length ; i++ )
275
var dir = GetE( 'selLangDir' ).value ;
276
var styleName = GetE( 'selStyle' ).value ;
277
if ( GetNearestAncestorDirection( CurrentContainers[i] ) != dir )
278
CurrentContainers[i].dir = dir ;
280
CurrentContainers[i].removeAttribute( 'dir' ) ;
283
FCKStyles.GetStyle( styleName ).ApplyToObject( CurrentContainers[i] ) ;
291
<body style="overflow: hidden">
292
<div id="divGeneral">
293
<table cellspacing="0" cellpadding="0" width="100%" border="0">
301
<span fcklang="DlgDivStyle">Style</span><br />
302
<select id="selStyle" style="width: 100%;">
307
<span fcklang="DlgGenClass">Stylesheet Classes</span><br />
308
<input id="txtClass" style="width: 100%" type="text" />
313
<div id="divAdvanced" style="display: none">
314
<table cellspacing="0" cellpadding="0" width="100%" border="0">
322
<span fcklang="DlgGenId">Id</span><br />
323
<input style="width: 100%" type="text" id="txtId" />
327
<span fcklang="DlgGenLangCode">Language Code</span><br />
328
<input style="width: 100%" type="text" id="txtLang" />
332
<td colspan="3"> </td>
336
<span fcklang="DlgDivInlineStyle">Inline Style</span><br />
337
<input style="width: 100%" type="text" id="txtInlineStyle" />
341
<td colspan="3"> </td>
345
<span fcklang="DlgGenTitle">Advisory Title</span><br />
346
<input style="width: 100%" type="text" id="txtTitle" />
354
<span fcklang="DlgGenLangDir">Language Direction</span><br />
355
<select id="selLangDir">
356
<option fcklang="DlgGenLangDirLtr" value="ltr">Left to Right (LTR)
357
<option fcklang="DlgGenLangDirRtl" value="rtl">Right to Left (RTL)