2
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
3
* Copyright (C) 2003-2009 Frederico Caldeira Knabben
7
* Licensed under the terms of any of the following licenses at your
10
* - GNU General Public License Version 2 or later (the "GPL")
11
* http://www.gnu.org/licenses/gpl.html
13
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
14
* http://www.gnu.org/licenses/lgpl.html
16
* - Mozilla Public License Version 1.1 or later (the "MPL")
17
* http://www.mozilla.org/MPL/MPL-1.1.html
21
* Scripts related to the Image dialog window (see fck_image.html).
24
var dialog = window.parent ;
25
var oEditor = dialog.InnerDialogLoaded() ;
26
var FCK = oEditor.FCK ;
27
var FCKLang = oEditor.FCKLang ;
28
var FCKConfig = oEditor.FCKConfig ;
29
var FCKDebug = oEditor.FCKDebug ;
30
var FCKTools = oEditor.FCKTools ;
32
var bImageButton = ( document.location.search.length > 0 && document.location.search.substr(1) == 'ImageButton' ) ;
36
// Set the dialog tabs.
37
dialog.AddTab( 'Info', FCKLang.DlgImgInfoTab ) ;
39
if ( !bImageButton && !FCKConfig.ImageDlgHideLink )
40
dialog.AddTab( 'Link', FCKLang.DlgImgLinkTab ) ;
42
if ( FCKConfig.ImageUpload )
43
dialog.AddTab( 'Upload', FCKLang.DlgLnkUpload ) ;
45
if ( !FCKConfig.ImageDlgHideAdvanced )
46
dialog.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ;
48
// Function called when a dialog tag is selected.
49
function OnDialogTabChange( tabCode )
51
ShowE('divInfo' , ( tabCode == 'Info' ) ) ;
52
ShowE('divLink' , ( tabCode == 'Link' ) ) ;
53
ShowE('divUpload' , ( tabCode == 'Upload' ) ) ;
54
ShowE('divAdvanced' , ( tabCode == 'Advanced' ) ) ;
57
// Get the selected image (if available).
58
var oImage = dialog.Selection.GetSelectedElement() ;
60
if ( oImage && oImage.tagName != 'IMG' && !( oImage.tagName == 'INPUT' && oImage.type == 'image' ) )
63
// Get the active link.
64
var oLink = dialog.Selection.GetSelection().MoveToAncestorNode( 'A' ) ;
68
function UpdateOriginal( resetSize )
73
if ( GetE('txtUrl').value.length == 0 )
75
oImageOriginal = null ;
79
oImageOriginal = document.createElement( 'IMG' ) ; // new Image() ;
83
oImageOriginal.onload = function()
90
oImageOriginal.src = eImgPreview.src ;
93
var bPreviewInitialized ;
95
window.onload = function()
97
// Translate the dialog box texts.
98
oEditor.FCKLanguageManager.TranslatePage(document) ;
100
GetE('btnLockSizes').title = FCKLang.DlgImgLockRatio ;
101
GetE('btnResetSize').title = FCKLang.DlgBtnResetSize ;
103
// Load the selected element information (if any).
106
// Show/Hide the "Browse Server" button.
107
GetE('tdBrowse').style.display = FCKConfig.ImageBrowser ? '' : 'none' ;
108
GetE('divLnkBrowseServer').style.display = FCKConfig.LinkBrowser ? '' : 'none' ;
112
// Set the actual uploader URL.
113
if ( FCKConfig.ImageUpload )
114
GetE('frmUpload').action = FCKConfig.ImageUploadURL ;
116
dialog.SetAutoSize( true ) ;
118
// Activate the "OK" button.
119
dialog.SetOkButton( true ) ;
121
SelectField( 'txtUrl' ) ;
124
function LoadSelection()
126
if ( ! oImage ) return ;
128
var sUrl = oImage.getAttribute( '_fcksavedurl' ) ;
130
sUrl = GetAttribute( oImage, 'src', '' ) ;
132
GetE('txtUrl').value = sUrl ;
133
GetE('txtAlt').value = GetAttribute( oImage, 'alt', '' ) ;
134
GetE('txtVSpace').value = GetAttribute( oImage, 'vspace', '' ) ;
135
GetE('txtHSpace').value = GetAttribute( oImage, 'hspace', '' ) ;
136
GetE('txtBorder').value = GetAttribute( oImage, 'border', '' ) ;
137
GetE('cmbAlign').value = GetAttribute( oImage, 'align', '' ) ;
139
var iWidth, iHeight ;
141
var regexSize = /^\s*(\d+)px\s*$/i ;
143
if ( oImage.style.width )
145
var aMatchW = oImage.style.width.match( regexSize ) ;
148
iWidth = aMatchW[1] ;
149
oImage.style.width = '' ;
150
SetAttribute( oImage, 'width' , iWidth ) ;
154
if ( oImage.style.height )
156
var aMatchH = oImage.style.height.match( regexSize ) ;
159
iHeight = aMatchH[1] ;
160
oImage.style.height = '' ;
161
SetAttribute( oImage, 'height', iHeight ) ;
165
GetE('txtWidth').value = iWidth ? iWidth : GetAttribute( oImage, "width", '' ) ;
166
GetE('txtHeight').value = iHeight ? iHeight : GetAttribute( oImage, "height", '' ) ;
168
// Get Advances Attributes
169
GetE('txtAttId').value = oImage.id ;
170
GetE('cmbAttLangDir').value = oImage.dir ;
171
GetE('txtAttLangCode').value = oImage.lang ;
172
GetE('txtAttTitle').value = oImage.title ;
173
GetE('txtLongDesc').value = oImage.longDesc ;
175
if ( oEditor.FCKBrowserInfo.IsIE )
177
GetE('txtAttClasses').value = oImage.className || '' ;
178
GetE('txtAttStyle').value = oImage.style.cssText ;
182
GetE('txtAttClasses').value = oImage.getAttribute('class',2) || '' ;
183
GetE('txtAttStyle').value = oImage.getAttribute('style',2) ;
188
var sLinkUrl = oLink.getAttribute( '_fcksavedurl' ) ;
189
if ( sLinkUrl == null )
190
sLinkUrl = oLink.getAttribute('href',2) ;
192
GetE('txtLnkUrl').value = sLinkUrl ;
193
GetE('cmbLnkTarget').value = oLink.target ;
199
//#### The OK button was hit.
202
if ( GetE('txtUrl').value.length == 0 )
204
dialog.SetSelectedTab( 'Info' ) ;
205
GetE('txtUrl').focus() ;
207
alert( FCKLang.DlgImgAlertUrl ) ;
212
var bHasImage = ( oImage != null ) ;
214
if ( bHasImage && bImageButton && oImage.tagName == 'IMG' )
216
if ( confirm( 'Do you want to transform the selected image on a image button?' ) )
219
else if ( bHasImage && !bImageButton && oImage.tagName == 'INPUT' )
221
if ( confirm( 'Do you want to transform the selected image button on a simple image?' ) )
225
oEditor.FCKUndo.SaveUndoStep() ;
230
oImage = FCK.EditorDocument.createElement( 'input' ) ;
231
oImage.type = 'image' ;
232
oImage = FCK.InsertElement( oImage ) ;
235
oImage = FCK.InsertElement( 'img' ) ;
238
UpdateImage( oImage ) ;
240
var sLnkUrl = GetE('txtLnkUrl').value.Trim() ;
242
if ( sLnkUrl.length == 0 )
245
FCK.ExecuteNamedCommand( 'Unlink' ) ;
249
if ( oLink ) // Modifying an existent link.
250
oLink.href = sLnkUrl ;
251
else // Creating a new link.
254
oEditor.FCKSelection.SelectNode( oImage ) ;
256
oLink = oEditor.FCK.CreateLink( sLnkUrl )[0] ;
260
oEditor.FCKSelection.SelectNode( oLink ) ;
261
oEditor.FCKSelection.Collapse( false ) ;
265
SetAttribute( oLink, '_fcksavedurl', sLnkUrl ) ;
266
SetAttribute( oLink, 'target', GetE('cmbLnkTarget').value ) ;
272
function UpdateImage( e, skipId )
274
e.src = GetE('txtUrl').value ;
275
SetAttribute( e, "_fcksavedurl", GetE('txtUrl').value ) ;
276
SetAttribute( e, "alt" , GetE('txtAlt').value ) ;
277
SetAttribute( e, "width" , GetE('txtWidth').value ) ;
278
SetAttribute( e, "height", GetE('txtHeight').value ) ;
279
SetAttribute( e, "vspace", GetE('txtVSpace').value ) ;
280
SetAttribute( e, "hspace", GetE('txtHSpace').value ) ;
281
SetAttribute( e, "border", GetE('txtBorder').value ) ;
282
SetAttribute( e, "align" , GetE('cmbAlign').value ) ;
284
// Advances Attributes
287
SetAttribute( e, 'id', GetE('txtAttId').value ) ;
289
SetAttribute( e, 'dir' , GetE('cmbAttLangDir').value ) ;
290
SetAttribute( e, 'lang' , GetE('txtAttLangCode').value ) ;
291
SetAttribute( e, 'title' , GetE('txtAttTitle').value ) ;
292
SetAttribute( e, 'longDesc' , GetE('txtLongDesc').value ) ;
294
if ( oEditor.FCKBrowserInfo.IsIE )
296
e.className = GetE('txtAttClasses').value ;
297
e.style.cssText = GetE('txtAttStyle').value ;
301
SetAttribute( e, 'class' , GetE('txtAttClasses').value ) ;
302
SetAttribute( e, 'style', GetE('txtAttStyle').value ) ;
307
var eImgPreviewLink ;
309
function SetPreviewElements( imageElement, linkElement )
311
eImgPreview = imageElement ;
312
eImgPreviewLink = linkElement ;
317
bPreviewInitialized = true ;
320
function UpdatePreview()
322
if ( !eImgPreview || !eImgPreviewLink )
325
if ( GetE('txtUrl').value.length == 0 )
326
eImgPreviewLink.style.display = 'none' ;
329
UpdateImage( eImgPreview, true ) ;
331
if ( GetE('txtLnkUrl').value.Trim().length > 0 )
332
eImgPreviewLink.href = 'javascript:void(null);' ;
334
SetAttribute( eImgPreviewLink, 'href', '' ) ;
336
eImgPreviewLink.style.display = '' ;
340
var bLockRatio = true ;
342
function SwitchLock( lockButton )
344
bLockRatio = !bLockRatio ;
345
lockButton.className = bLockRatio ? 'BtnLocked' : 'BtnUnlocked' ;
346
lockButton.title = bLockRatio ? 'Lock sizes' : 'Unlock sizes' ;
350
if ( GetE('txtWidth').value.length > 0 )
351
OnSizeChanged( 'Width', GetE('txtWidth').value ) ;
353
OnSizeChanged( 'Height', GetE('txtHeight').value ) ;
357
// Fired when the width or height input texts change
358
function OnSizeChanged( dimension, value )
360
// Verifies if the aspect ration has to be maintained
361
if ( oImageOriginal && bLockRatio )
363
var e = dimension == 'Width' ? GetE('txtHeight') : GetE('txtWidth') ;
365
if ( value.length == 0 || isNaN( value ) )
371
if ( dimension == 'Width' )
372
value = value == 0 ? 0 : Math.round( oImageOriginal.height * ( value / oImageOriginal.width ) ) ;
374
value = value == 0 ? 0 : Math.round( oImageOriginal.width * ( value / oImageOriginal.height ) ) ;
376
if ( !isNaN( value ) )
383
// Fired when the Reset Size button is clicked
384
function ResetSizes()
386
if ( ! oImageOriginal ) return ;
387
if ( oEditor.FCKBrowserInfo.IsGecko && !oImageOriginal.complete )
389
setTimeout( ResetSizes, 50 ) ;
393
GetE('txtWidth').value = oImageOriginal.width ;
394
GetE('txtHeight').value = oImageOriginal.height ;
399
function BrowseServer()
403
FCKConfig.ImageBrowserURL,
404
FCKConfig.ImageBrowserWindowWidth,
405
FCKConfig.ImageBrowserWindowHeight ) ;
408
function LnkBrowseServer()
412
FCKConfig.LinkBrowserURL,
413
FCKConfig.LinkBrowserWindowWidth,
414
FCKConfig.LinkBrowserWindowHeight ) ;
417
function OpenServerBrowser( type, url, width, height )
419
sActualBrowser = type ;
420
OpenFileBrowser( url, width, height ) ;
425
function SetUrl( url, width, height, alt )
427
if ( sActualBrowser == 'Link' )
429
GetE('txtLnkUrl').value = url ;
434
GetE('txtUrl').value = url ;
435
GetE('txtWidth').value = width ? width : '' ;
436
GetE('txtHeight').value = height ? height : '' ;
439
GetE('txtAlt').value = alt;
442
UpdateOriginal( true ) ;
445
dialog.SetSelectedTab( 'Info' ) ;
448
function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
451
window.parent.Throbber.Hide() ;
452
GetE( 'divUpload' ).style.display = '' ;
454
switch ( errorNumber )
456
case 0 : // No errors
457
alert( 'Your file has been successfully uploaded' ) ;
459
case 1 : // Custom error
462
case 101 : // Custom warning
466
alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
469
alert( 'Invalid file type' ) ;
472
alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
475
alert( 'The connector is disabled' ) ;
478
alert( 'Error on file upload. Error number: ' + errorNumber ) ;
482
sActualBrowser = '' ;
484
GetE('frmUpload').reset() ;
487
var oUploadAllowedExtRegex = new RegExp( FCKConfig.ImageUploadAllowedExtensions, 'i' ) ;
488
var oUploadDeniedExtRegex = new RegExp( FCKConfig.ImageUploadDeniedExtensions, 'i' ) ;
490
function CheckUpload()
492
var sFile = GetE('txtUploadFile').value ;
494
if ( sFile.length == 0 )
496
alert( 'Please select a file to upload' ) ;
500
if ( ( FCKConfig.ImageUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) ||
501
( FCKConfig.ImageUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) )
503
OnUploadCompleted( 202 ) ;
508
window.parent.Throbber.Show( 100 ) ;
509
GetE( 'divUpload' ).style.display = 'none' ;