2 * FCKeditor - The text editor for Internet - http://www.fckeditor.net
\r
3 * Copyright (C) 2003-2007 Frederico Caldeira Knabben
\r
5 * == BEGIN LICENSE ==
\r
7 * Licensed under the terms of any of the following licenses at your
\r
10 * - GNU General Public License Version 2 or later (the "GPL")
\r
11 * http://www.gnu.org/licenses/gpl.html
\r
13 * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
\r
14 * http://www.gnu.org/licenses/lgpl.html
\r
16 * - Mozilla Public License Version 1.1 or later (the "MPL")
\r
17 * http://www.mozilla.org/MPL/MPL-1.1.html
\r
21 * Scripts related to the Image dialog window (see fck_image.html).
\r
24 var oEditor = window.parent.InnerDialogLoaded() ;
\r
25 var FCK = oEditor.FCK ;
\r
26 var FCKLang = oEditor.FCKLang ;
\r
27 var FCKConfig = oEditor.FCKConfig ;
\r
28 var FCKDebug = oEditor.FCKDebug ;
\r
30 var bImageButton = ( document.location.search.length > 0 && document.location.search.substr(1) == 'ImageButton' ) ;
\r
34 // Set the dialog tabs.
\r
35 window.parent.AddTab( 'Info', FCKLang.DlgImgInfoTab ) ;
\r
37 if ( !bImageButton && !FCKConfig.ImageDlgHideLink )
\r
38 window.parent.AddTab( 'Link', FCKLang.DlgImgLinkTab ) ;
\r
40 if ( FCKConfig.ImageUpload )
\r
41 window.parent.AddTab( 'Upload', FCKLang.DlgLnkUpload ) ;
\r
43 if ( !FCKConfig.ImageDlgHideAdvanced )
\r
44 window.parent.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ;
\r
46 // Function called when a dialog tag is selected.
\r
47 function OnDialogTabChange( tabCode )
\r
49 ShowE('divInfo' , ( tabCode == 'Info' ) ) ;
\r
50 ShowE('divLink' , ( tabCode == 'Link' ) ) ;
\r
51 ShowE('divUpload' , ( tabCode == 'Upload' ) ) ;
\r
52 ShowE('divAdvanced' , ( tabCode == 'Advanced' ) ) ;
\r
55 // Get the selected image (if available).
\r
56 var oImage = FCK.Selection.GetSelectedElement() ;
\r
58 if ( oImage && oImage.tagName != 'IMG' && !( oImage.tagName == 'INPUT' && oImage.type == 'image' ) )
\r
61 // Get the active link.
\r
62 var oLink = FCK.Selection.MoveToAncestorNode( 'A' ) ;
\r
64 var oImageOriginal ;
\r
66 function UpdateOriginal( resetSize )
\r
71 if ( GetE('txtUrl').value.length == 0 )
\r
73 oImageOriginal = null ;
\r
77 oImageOriginal = document.createElement( 'IMG' ) ; // new Image() ;
\r
81 oImageOriginal.onload = function()
\r
83 this.onload = null ;
\r
88 oImageOriginal.src = eImgPreview.src ;
\r
91 var bPreviewInitialized ;
\r
93 window.onload = function()
\r
95 // Translate the dialog box texts.
\r
96 oEditor.FCKLanguageManager.TranslatePage(document) ;
\r
98 GetE('btnLockSizes').title = FCKLang.DlgImgLockRatio ;
\r
99 GetE('btnResetSize').title = FCKLang.DlgBtnResetSize ;
\r
101 // Load the selected element information (if any).
\r
104 // Show/Hide the "Browse Server" button.
\r
105 GetE('tdBrowse').style.display = FCKConfig.ImageBrowser ? '' : 'none' ;
\r
106 GetE('divLnkBrowseServer').style.display = FCKConfig.LinkBrowser ? '' : 'none' ;
\r
110 // Set the actual uploader URL.
\r
111 if ( FCKConfig.ImageUpload )
\r
112 GetE('frmUpload').action = FCKConfig.ImageUploadURL ;
\r
114 window.parent.SetAutoSize( true ) ;
\r
116 // Activate the "OK" button.
\r
117 window.parent.SetOkButton( true ) ;
\r
120 function LoadSelection()
\r
122 if ( ! oImage ) return ;
\r
124 var sUrl = oImage.getAttribute( '_fcksavedurl' ) ;
\r
125 if ( sUrl == null )
\r
126 sUrl = GetAttribute( oImage, 'src', '' ) ;
\r
128 GetE('txtUrl').value = sUrl ;
\r
129 GetE('txtAlt').value = GetAttribute( oImage, 'alt', '' ) ;
\r
130 GetE('txtVSpace').value = GetAttribute( oImage, 'vspace', '' ) ;
\r
131 GetE('txtHSpace').value = GetAttribute( oImage, 'hspace', '' ) ;
\r
132 GetE('txtBorder').value = GetAttribute( oImage, 'border', '' ) ;
\r
133 GetE('cmbAlign').value = GetAttribute( oImage, 'align', '' ) ;
\r
135 var iWidth, iHeight ;
\r
137 var regexSize = /^\s*(\d+)px\s*$/i ;
\r
139 if ( oImage.style.width )
\r
141 var aMatchW = oImage.style.width.match( regexSize ) ;
\r
144 iWidth = aMatchW[1] ;
\r
145 oImage.style.width = '' ;
\r
146 SetAttribute( oImage, 'width' , iWidth ) ;
\r
150 if ( oImage.style.height )
\r
152 var aMatchH = oImage.style.height.match( regexSize ) ;
\r
155 iHeight = aMatchH[1] ;
\r
156 oImage.style.height = '' ;
\r
157 SetAttribute( oImage, 'height', iHeight ) ;
\r
161 GetE('txtWidth').value = iWidth ? iWidth : GetAttribute( oImage, "width", '' ) ;
\r
162 GetE('txtHeight').value = iHeight ? iHeight : GetAttribute( oImage, "height", '' ) ;
\r
164 // Get Advances Attributes
\r
165 GetE('txtAttId').value = oImage.id ;
\r
166 GetE('cmbAttLangDir').value = oImage.dir ;
\r
167 GetE('txtAttLangCode').value = oImage.lang ;
\r
168 GetE('txtAttTitle').value = oImage.title ;
\r
169 GetE('txtLongDesc').value = oImage.longDesc ;
\r
171 if ( oEditor.FCKBrowserInfo.IsIE )
\r
173 GetE('txtAttClasses').value = oImage.className || '' ;
\r
174 GetE('txtAttStyle').value = oImage.style.cssText ;
\r
178 GetE('txtAttClasses').value = oImage.getAttribute('class',2) || '' ;
\r
179 GetE('txtAttStyle').value = oImage.getAttribute('style',2) ;
\r
184 var sLinkUrl = oLink.getAttribute( '_fcksavedurl' ) ;
\r
185 if ( sLinkUrl == null )
\r
186 sLinkUrl = oLink.getAttribute('href',2) ;
\r
188 GetE('txtLnkUrl').value = sLinkUrl ;
\r
189 GetE('cmbLnkTarget').value = oLink.target ;
\r
195 //#### The OK button was hit.
\r
198 if ( GetE('txtUrl').value.length == 0 )
\r
200 window.parent.SetSelectedTab( 'Info' ) ;
\r
201 GetE('txtUrl').focus() ;
\r
203 alert( FCKLang.DlgImgAlertUrl ) ;
\r
208 var bHasImage = ( oImage != null ) ;
\r
210 if ( bHasImage && bImageButton && oImage.tagName == 'IMG' )
\r
212 if ( confirm( 'Do you want to transform the selected image on a image button?' ) )
\r
215 else if ( bHasImage && !bImageButton && oImage.tagName == 'INPUT' )
\r
217 if ( confirm( 'Do you want to transform the selected image button on a simple image?' ) )
\r
223 if ( bImageButton )
\r
225 oImage = FCK.EditorDocument.createElement( 'INPUT' ) ;
\r
226 oImage.type = 'image' ;
\r
227 oImage = FCK.InsertElementAndGetIt( oImage ) ;
\r
230 oImage = FCK.CreateElement( 'IMG' ) ;
\r
233 oEditor.FCKUndo.SaveUndoStep() ;
\r
235 UpdateImage( oImage ) ;
\r
237 var sLnkUrl = GetE('txtLnkUrl').value.Trim() ;
\r
239 if ( sLnkUrl.length == 0 )
\r
242 FCK.ExecuteNamedCommand( 'Unlink' ) ;
\r
246 if ( oLink ) // Modifying an existent link.
\r
247 oLink.href = sLnkUrl ;
\r
248 else // Creating a new link.
\r
251 oEditor.FCKSelection.SelectNode( oImage ) ;
\r
253 oLink = oEditor.FCK.CreateLink( sLnkUrl )[0] ;
\r
257 oEditor.FCKSelection.SelectNode( oLink ) ;
\r
258 oEditor.FCKSelection.Collapse( false ) ;
\r
262 SetAttribute( oLink, '_fcksavedurl', sLnkUrl ) ;
\r
263 SetAttribute( oLink, 'target', GetE('cmbLnkTarget').value ) ;
\r
269 function UpdateImage( e, skipId )
\r
271 e.src = GetE('txtUrl').value ;
\r
272 SetAttribute( e, "_fcksavedurl", GetE('txtUrl').value ) ;
\r
273 SetAttribute( e, "alt" , GetE('txtAlt').value ) ;
\r
274 SetAttribute( e, "width" , GetE('txtWidth').value ) ;
\r
275 SetAttribute( e, "height", GetE('txtHeight').value ) ;
\r
276 SetAttribute( e, "vspace", GetE('txtVSpace').value ) ;
\r
277 SetAttribute( e, "hspace", GetE('txtHSpace').value ) ;
\r
278 SetAttribute( e, "border", GetE('txtBorder').value ) ;
\r
279 SetAttribute( e, "align" , GetE('cmbAlign').value ) ;
\r
281 // Advances Attributes
\r
284 SetAttribute( e, 'id', GetE('txtAttId').value ) ;
\r
286 SetAttribute( e, 'dir' , GetE('cmbAttLangDir').value ) ;
\r
287 SetAttribute( e, 'lang' , GetE('txtAttLangCode').value ) ;
\r
288 SetAttribute( e, 'title' , GetE('txtAttTitle').value ) ;
\r
289 SetAttribute( e, 'longDesc' , GetE('txtLongDesc').value ) ;
\r
291 if ( oEditor.FCKBrowserInfo.IsIE )
\r
293 e.className = GetE('txtAttClasses').value ;
\r
294 e.style.cssText = GetE('txtAttStyle').value ;
\r
298 SetAttribute( e, 'class' , GetE('txtAttClasses').value ) ;
\r
299 SetAttribute( e, 'style', GetE('txtAttStyle').value ) ;
\r
304 var eImgPreviewLink ;
\r
306 function SetPreviewElements( imageElement, linkElement )
\r
308 eImgPreview = imageElement ;
\r
309 eImgPreviewLink = linkElement ;
\r
314 bPreviewInitialized = true ;
\r
317 function UpdatePreview()
\r
319 if ( !eImgPreview || !eImgPreviewLink )
\r
322 if ( GetE('txtUrl').value.length == 0 )
\r
323 eImgPreviewLink.style.display = 'none' ;
\r
326 UpdateImage( eImgPreview, true ) ;
\r
328 if ( GetE('txtLnkUrl').value.Trim().length > 0 )
\r
329 eImgPreviewLink.href = 'javascript:void(null);' ;
\r
331 SetAttribute( eImgPreviewLink, 'href', '' ) ;
\r
333 eImgPreviewLink.style.display = '' ;
\r
337 var bLockRatio = true ;
\r
339 function SwitchLock( lockButton )
\r
341 bLockRatio = !bLockRatio ;
\r
342 lockButton.className = bLockRatio ? 'BtnLocked' : 'BtnUnlocked' ;
\r
343 lockButton.title = bLockRatio ? 'Lock sizes' : 'Unlock sizes' ;
\r
347 if ( GetE('txtWidth').value.length > 0 )
\r
348 OnSizeChanged( 'Width', GetE('txtWidth').value ) ;
\r
350 OnSizeChanged( 'Height', GetE('txtHeight').value ) ;
\r
354 // Fired when the width or height input texts change
\r
355 function OnSizeChanged( dimension, value )
\r
357 // Verifies if the aspect ration has to be mantained
\r
358 if ( oImageOriginal && bLockRatio )
\r
360 var e = dimension == 'Width' ? GetE('txtHeight') : GetE('txtWidth') ;
\r
362 if ( value.length == 0 || isNaN( value ) )
\r
368 if ( dimension == 'Width' )
\r
369 value = value == 0 ? 0 : Math.round( oImageOriginal.height * ( value / oImageOriginal.width ) ) ;
\r
371 value = value == 0 ? 0 : Math.round( oImageOriginal.width * ( value / oImageOriginal.height ) ) ;
\r
373 if ( !isNaN( value ) )
\r
380 // Fired when the Reset Size button is clicked
\r
381 function ResetSizes()
\r
383 if ( ! oImageOriginal ) return ;
\r
385 GetE('txtWidth').value = oImageOriginal.width ;
\r
386 GetE('txtHeight').value = oImageOriginal.height ;
\r
391 function BrowseServer()
\r
395 FCKConfig.ImageBrowserURL,
\r
396 FCKConfig.ImageBrowserWindowWidth,
\r
397 FCKConfig.ImageBrowserWindowHeight ) ;
\r
400 function LnkBrowseServer()
\r
404 FCKConfig.LinkBrowserURL,
\r
405 FCKConfig.LinkBrowserWindowWidth,
\r
406 FCKConfig.LinkBrowserWindowHeight ) ;
\r
409 function OpenServerBrowser( type, url, width, height )
\r
411 sActualBrowser = type ;
\r
412 OpenFileBrowser( url, width, height ) ;
\r
415 var sActualBrowser ;
\r
417 function SetUrl( url, width, height, alt )
\r
419 if ( sActualBrowser == 'Link' )
\r
421 GetE('txtLnkUrl').value = url ;
\r
426 GetE('txtUrl').value = url ;
\r
427 GetE('txtWidth').value = width ? width : '' ;
\r
428 GetE('txtHeight').value = height ? height : '' ;
\r
431 GetE('txtAlt').value = alt;
\r
434 UpdateOriginal( true ) ;
\r
437 window.parent.SetSelectedTab( 'Info' ) ;
\r
440 function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
\r
442 switch ( errorNumber )
\r
444 case 0 : // No errors
\r
445 alert( 'Your file has been successfully uploaded' ) ;
\r
447 case 1 : // Custom error
\r
448 alert( customMsg ) ;
\r
450 case 101 : // Custom warning
\r
451 alert( customMsg ) ;
\r
454 alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
\r
457 alert( 'Invalid file type' ) ;
\r
460 alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
\r
463 alert( 'Error on file upload. Error number: ' + errorNumber ) ;
\r
467 sActualBrowser = '' ;
\r
468 SetUrl( fileUrl ) ;
\r
469 GetE('frmUpload').reset() ;
\r
472 var oUploadAllowedExtRegex = new RegExp( FCKConfig.ImageUploadAllowedExtensions, 'i' ) ;
\r
473 var oUploadDeniedExtRegex = new RegExp( FCKConfig.ImageUploadDeniedExtensions, 'i' ) ;
\r
475 function CheckUpload()
\r
477 var sFile = GetE('txtUploadFile').value ;
\r
479 if ( sFile.length == 0 )
\r
481 alert( 'Please select a file to upload' ) ;
\r
485 if ( ( FCKConfig.ImageUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) ||
\r
486 ( FCKConfig.ImageUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) )
\r
488 OnUploadCompleted( 202 ) ;
\r