forked from science-ation/science-ation
513 lines
13 KiB
JavaScript
513 lines
13 KiB
JavaScript
/*
|
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
|
*
|
|
* == BEGIN LICENSE ==
|
|
*
|
|
* Licensed under the terms of any of the following licenses at your
|
|
* choice:
|
|
*
|
|
* - GNU General Public License Version 2 or later (the "GPL")
|
|
* http://www.gnu.org/licenses/gpl.html
|
|
*
|
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
|
* http://www.gnu.org/licenses/lgpl.html
|
|
*
|
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
|
*
|
|
* == END LICENSE ==
|
|
*
|
|
* Scripts related to the Image dialog window (see fck_image.html).
|
|
*/
|
|
|
|
var dialog = window.parent ;
|
|
var oEditor = dialog.InnerDialogLoaded() ;
|
|
var FCK = oEditor.FCK ;
|
|
var FCKLang = oEditor.FCKLang ;
|
|
var FCKConfig = oEditor.FCKConfig ;
|
|
var FCKDebug = oEditor.FCKDebug ;
|
|
var FCKTools = oEditor.FCKTools ;
|
|
|
|
var bImageButton = ( document.location.search.length > 0 && document.location.search.substr(1) == 'ImageButton' ) ;
|
|
|
|
//#### Dialog Tabs
|
|
|
|
// Set the dialog tabs.
|
|
dialog.AddTab( 'Info', FCKLang.DlgImgInfoTab ) ;
|
|
|
|
if ( !bImageButton && !FCKConfig.ImageDlgHideLink )
|
|
dialog.AddTab( 'Link', FCKLang.DlgImgLinkTab ) ;
|
|
|
|
if ( FCKConfig.ImageUpload )
|
|
dialog.AddTab( 'Upload', FCKLang.DlgLnkUpload ) ;
|
|
|
|
if ( !FCKConfig.ImageDlgHideAdvanced )
|
|
dialog.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ;
|
|
|
|
// Function called when a dialog tag is selected.
|
|
function OnDialogTabChange( tabCode )
|
|
{
|
|
ShowE('divInfo' , ( tabCode == 'Info' ) ) ;
|
|
ShowE('divLink' , ( tabCode == 'Link' ) ) ;
|
|
ShowE('divUpload' , ( tabCode == 'Upload' ) ) ;
|
|
ShowE('divAdvanced' , ( tabCode == 'Advanced' ) ) ;
|
|
}
|
|
|
|
// Get the selected image (if available).
|
|
var oImage = dialog.Selection.GetSelectedElement() ;
|
|
|
|
if ( oImage && oImage.tagName != 'IMG' && !( oImage.tagName == 'INPUT' && oImage.type == 'image' ) )
|
|
oImage = null ;
|
|
|
|
// Get the active link.
|
|
var oLink = dialog.Selection.GetSelection().MoveToAncestorNode( 'A' ) ;
|
|
|
|
var oImageOriginal ;
|
|
|
|
function UpdateOriginal( resetSize )
|
|
{
|
|
if ( !eImgPreview )
|
|
return ;
|
|
|
|
if ( GetE('txtUrl').value.length == 0 )
|
|
{
|
|
oImageOriginal = null ;
|
|
return ;
|
|
}
|
|
|
|
oImageOriginal = document.createElement( 'IMG' ) ; // new Image() ;
|
|
|
|
if ( resetSize )
|
|
{
|
|
oImageOriginal.onload = function()
|
|
{
|
|
this.onload = null ;
|
|
ResetSizes() ;
|
|
}
|
|
}
|
|
|
|
oImageOriginal.src = eImgPreview.src ;
|
|
}
|
|
|
|
var bPreviewInitialized ;
|
|
|
|
window.onload = function()
|
|
{
|
|
// Translate the dialog box texts.
|
|
oEditor.FCKLanguageManager.TranslatePage(document) ;
|
|
|
|
GetE('btnLockSizes').title = FCKLang.DlgImgLockRatio ;
|
|
GetE('btnResetSize').title = FCKLang.DlgBtnResetSize ;
|
|
|
|
// Load the selected element information (if any).
|
|
LoadSelection() ;
|
|
|
|
// Show/Hide the "Browse Server" button.
|
|
GetE('tdBrowse').style.display = FCKConfig.ImageBrowser ? '' : 'none' ;
|
|
GetE('divLnkBrowseServer').style.display = FCKConfig.LinkBrowser ? '' : 'none' ;
|
|
|
|
UpdateOriginal() ;
|
|
|
|
// Set the actual uploader URL.
|
|
if ( FCKConfig.ImageUpload )
|
|
GetE('frmUpload').action = FCKConfig.ImageUploadURL ;
|
|
|
|
dialog.SetAutoSize( true ) ;
|
|
|
|
// Activate the "OK" button.
|
|
dialog.SetOkButton( true ) ;
|
|
|
|
SelectField( 'txtUrl' ) ;
|
|
}
|
|
|
|
function LoadSelection()
|
|
{
|
|
if ( ! oImage ) return ;
|
|
|
|
var sUrl = oImage.getAttribute( '_fcksavedurl' ) ;
|
|
if ( sUrl == null )
|
|
sUrl = GetAttribute( oImage, 'src', '' ) ;
|
|
|
|
GetE('txtUrl').value = sUrl ;
|
|
GetE('txtAlt').value = GetAttribute( oImage, 'alt', '' ) ;
|
|
GetE('txtVSpace').value = GetAttribute( oImage, 'vspace', '' ) ;
|
|
GetE('txtHSpace').value = GetAttribute( oImage, 'hspace', '' ) ;
|
|
GetE('txtBorder').value = GetAttribute( oImage, 'border', '' ) ;
|
|
GetE('cmbAlign').value = GetAttribute( oImage, 'align', '' ) ;
|
|
|
|
var iWidth, iHeight ;
|
|
|
|
var regexSize = /^\s*(\d+)px\s*$/i ;
|
|
|
|
if ( oImage.style.width )
|
|
{
|
|
var aMatchW = oImage.style.width.match( regexSize ) ;
|
|
if ( aMatchW )
|
|
{
|
|
iWidth = aMatchW[1] ;
|
|
oImage.style.width = '' ;
|
|
SetAttribute( oImage, 'width' , iWidth ) ;
|
|
}
|
|
}
|
|
|
|
if ( oImage.style.height )
|
|
{
|
|
var aMatchH = oImage.style.height.match( regexSize ) ;
|
|
if ( aMatchH )
|
|
{
|
|
iHeight = aMatchH[1] ;
|
|
oImage.style.height = '' ;
|
|
SetAttribute( oImage, 'height', iHeight ) ;
|
|
}
|
|
}
|
|
|
|
GetE('txtWidth').value = iWidth ? iWidth : GetAttribute( oImage, "width", '' ) ;
|
|
GetE('txtHeight').value = iHeight ? iHeight : GetAttribute( oImage, "height", '' ) ;
|
|
|
|
// Get Advances Attributes
|
|
GetE('txtAttId').value = oImage.id ;
|
|
GetE('cmbAttLangDir').value = oImage.dir ;
|
|
GetE('txtAttLangCode').value = oImage.lang ;
|
|
GetE('txtAttTitle').value = oImage.title ;
|
|
GetE('txtLongDesc').value = oImage.longDesc ;
|
|
|
|
if ( oEditor.FCKBrowserInfo.IsIE )
|
|
{
|
|
GetE('txtAttClasses').value = oImage.className || '' ;
|
|
GetE('txtAttStyle').value = oImage.style.cssText ;
|
|
}
|
|
else
|
|
{
|
|
GetE('txtAttClasses').value = oImage.getAttribute('class',2) || '' ;
|
|
GetE('txtAttStyle').value = oImage.getAttribute('style',2) ;
|
|
}
|
|
|
|
if ( oLink )
|
|
{
|
|
var sLinkUrl = oLink.getAttribute( '_fcksavedurl' ) ;
|
|
if ( sLinkUrl == null )
|
|
sLinkUrl = oLink.getAttribute('href',2) ;
|
|
|
|
GetE('txtLnkUrl').value = sLinkUrl ;
|
|
GetE('cmbLnkTarget').value = oLink.target ;
|
|
}
|
|
|
|
UpdatePreview() ;
|
|
}
|
|
|
|
//#### The OK button was hit.
|
|
function Ok()
|
|
{
|
|
if ( GetE('txtUrl').value.length == 0 )
|
|
{
|
|
dialog.SetSelectedTab( 'Info' ) ;
|
|
GetE('txtUrl').focus() ;
|
|
|
|
alert( FCKLang.DlgImgAlertUrl ) ;
|
|
|
|
return false ;
|
|
}
|
|
|
|
var bHasImage = ( oImage != null ) ;
|
|
|
|
if ( bHasImage && bImageButton && oImage.tagName == 'IMG' )
|
|
{
|
|
if ( confirm( 'Do you want to transform the selected image on a image button?' ) )
|
|
oImage = null ;
|
|
}
|
|
else if ( bHasImage && !bImageButton && oImage.tagName == 'INPUT' )
|
|
{
|
|
if ( confirm( 'Do you want to transform the selected image button on a simple image?' ) )
|
|
oImage = null ;
|
|
}
|
|
|
|
oEditor.FCKUndo.SaveUndoStep() ;
|
|
if ( !bHasImage )
|
|
{
|
|
if ( bImageButton )
|
|
{
|
|
oImage = FCK.EditorDocument.createElement( 'input' ) ;
|
|
oImage.type = 'image' ;
|
|
oImage = FCK.InsertElement( oImage ) ;
|
|
}
|
|
else
|
|
oImage = FCK.InsertElement( 'img' ) ;
|
|
}
|
|
|
|
UpdateImage( oImage ) ;
|
|
|
|
var sLnkUrl = GetE('txtLnkUrl').value.Trim() ;
|
|
|
|
if ( sLnkUrl.length == 0 )
|
|
{
|
|
if ( oLink )
|
|
FCK.ExecuteNamedCommand( 'Unlink' ) ;
|
|
}
|
|
else
|
|
{
|
|
if ( oLink ) // Modifying an existent link.
|
|
oLink.href = sLnkUrl ;
|
|
else // Creating a new link.
|
|
{
|
|
if ( !bHasImage )
|
|
oEditor.FCKSelection.SelectNode( oImage ) ;
|
|
|
|
oLink = oEditor.FCK.CreateLink( sLnkUrl )[0] ;
|
|
|
|
if ( !bHasImage )
|
|
{
|
|
oEditor.FCKSelection.SelectNode( oLink ) ;
|
|
oEditor.FCKSelection.Collapse( false ) ;
|
|
}
|
|
}
|
|
|
|
SetAttribute( oLink, '_fcksavedurl', sLnkUrl ) ;
|
|
SetAttribute( oLink, 'target', GetE('cmbLnkTarget').value ) ;
|
|
}
|
|
|
|
return true ;
|
|
}
|
|
|
|
function UpdateImage( e, skipId )
|
|
{
|
|
e.src = GetE('txtUrl').value ;
|
|
SetAttribute( e, "_fcksavedurl", GetE('txtUrl').value ) ;
|
|
SetAttribute( e, "alt" , GetE('txtAlt').value ) ;
|
|
SetAttribute( e, "width" , GetE('txtWidth').value ) ;
|
|
SetAttribute( e, "height", GetE('txtHeight').value ) ;
|
|
SetAttribute( e, "vspace", GetE('txtVSpace').value ) ;
|
|
SetAttribute( e, "hspace", GetE('txtHSpace').value ) ;
|
|
SetAttribute( e, "border", GetE('txtBorder').value ) ;
|
|
SetAttribute( e, "align" , GetE('cmbAlign').value ) ;
|
|
|
|
// Advances Attributes
|
|
|
|
if ( ! skipId )
|
|
SetAttribute( e, 'id', GetE('txtAttId').value ) ;
|
|
|
|
SetAttribute( e, 'dir' , GetE('cmbAttLangDir').value ) ;
|
|
SetAttribute( e, 'lang' , GetE('txtAttLangCode').value ) ;
|
|
SetAttribute( e, 'title' , GetE('txtAttTitle').value ) ;
|
|
SetAttribute( e, 'longDesc' , GetE('txtLongDesc').value ) ;
|
|
|
|
if ( oEditor.FCKBrowserInfo.IsIE )
|
|
{
|
|
e.className = GetE('txtAttClasses').value ;
|
|
e.style.cssText = GetE('txtAttStyle').value ;
|
|
}
|
|
else
|
|
{
|
|
SetAttribute( e, 'class' , GetE('txtAttClasses').value ) ;
|
|
SetAttribute( e, 'style', GetE('txtAttStyle').value ) ;
|
|
}
|
|
}
|
|
|
|
var eImgPreview ;
|
|
var eImgPreviewLink ;
|
|
|
|
function SetPreviewElements( imageElement, linkElement )
|
|
{
|
|
eImgPreview = imageElement ;
|
|
eImgPreviewLink = linkElement ;
|
|
|
|
UpdatePreview() ;
|
|
UpdateOriginal() ;
|
|
|
|
bPreviewInitialized = true ;
|
|
}
|
|
|
|
function UpdatePreview()
|
|
{
|
|
if ( !eImgPreview || !eImgPreviewLink )
|
|
return ;
|
|
|
|
if ( GetE('txtUrl').value.length == 0 )
|
|
eImgPreviewLink.style.display = 'none' ;
|
|
else
|
|
{
|
|
UpdateImage( eImgPreview, true ) ;
|
|
|
|
if ( GetE('txtLnkUrl').value.Trim().length > 0 )
|
|
eImgPreviewLink.href = 'javascript:void(null);' ;
|
|
else
|
|
SetAttribute( eImgPreviewLink, 'href', '' ) ;
|
|
|
|
eImgPreviewLink.style.display = '' ;
|
|
}
|
|
}
|
|
|
|
var bLockRatio = true ;
|
|
|
|
function SwitchLock( lockButton )
|
|
{
|
|
bLockRatio = !bLockRatio ;
|
|
lockButton.className = bLockRatio ? 'BtnLocked' : 'BtnUnlocked' ;
|
|
lockButton.title = bLockRatio ? 'Lock sizes' : 'Unlock sizes' ;
|
|
|
|
if ( bLockRatio )
|
|
{
|
|
if ( GetE('txtWidth').value.length > 0 )
|
|
OnSizeChanged( 'Width', GetE('txtWidth').value ) ;
|
|
else
|
|
OnSizeChanged( 'Height', GetE('txtHeight').value ) ;
|
|
}
|
|
}
|
|
|
|
// Fired when the width or height input texts change
|
|
function OnSizeChanged( dimension, value )
|
|
{
|
|
// Verifies if the aspect ration has to be maintained
|
|
if ( oImageOriginal && bLockRatio )
|
|
{
|
|
var e = dimension == 'Width' ? GetE('txtHeight') : GetE('txtWidth') ;
|
|
|
|
if ( value.length == 0 || isNaN( value ) )
|
|
{
|
|
e.value = '' ;
|
|
return ;
|
|
}
|
|
|
|
if ( dimension == 'Width' )
|
|
value = value == 0 ? 0 : Math.round( oImageOriginal.height * ( value / oImageOriginal.width ) ) ;
|
|
else
|
|
value = value == 0 ? 0 : Math.round( oImageOriginal.width * ( value / oImageOriginal.height ) ) ;
|
|
|
|
if ( !isNaN( value ) )
|
|
e.value = value ;
|
|
}
|
|
|
|
UpdatePreview() ;
|
|
}
|
|
|
|
// Fired when the Reset Size button is clicked
|
|
function ResetSizes()
|
|
{
|
|
if ( ! oImageOriginal ) return ;
|
|
if ( oEditor.FCKBrowserInfo.IsGecko && !oImageOriginal.complete )
|
|
{
|
|
setTimeout( ResetSizes, 50 ) ;
|
|
return ;
|
|
}
|
|
|
|
GetE('txtWidth').value = oImageOriginal.width ;
|
|
GetE('txtHeight').value = oImageOriginal.height ;
|
|
|
|
UpdatePreview() ;
|
|
}
|
|
|
|
function BrowseServer()
|
|
{
|
|
OpenServerBrowser(
|
|
'Image',
|
|
FCKConfig.ImageBrowserURL,
|
|
FCKConfig.ImageBrowserWindowWidth,
|
|
FCKConfig.ImageBrowserWindowHeight ) ;
|
|
}
|
|
|
|
function LnkBrowseServer()
|
|
{
|
|
OpenServerBrowser(
|
|
'Link',
|
|
FCKConfig.LinkBrowserURL,
|
|
FCKConfig.LinkBrowserWindowWidth,
|
|
FCKConfig.LinkBrowserWindowHeight ) ;
|
|
}
|
|
|
|
function OpenServerBrowser( type, url, width, height )
|
|
{
|
|
sActualBrowser = type ;
|
|
OpenFileBrowser( url, width, height ) ;
|
|
}
|
|
|
|
var sActualBrowser ;
|
|
|
|
function SetUrl( url, width, height, alt )
|
|
{
|
|
if ( sActualBrowser == 'Link' )
|
|
{
|
|
GetE('txtLnkUrl').value = url ;
|
|
UpdatePreview() ;
|
|
}
|
|
else
|
|
{
|
|
GetE('txtUrl').value = url ;
|
|
GetE('txtWidth').value = width ? width : '' ;
|
|
GetE('txtHeight').value = height ? height : '' ;
|
|
|
|
if ( alt )
|
|
GetE('txtAlt').value = alt;
|
|
|
|
UpdatePreview() ;
|
|
UpdateOriginal( true ) ;
|
|
}
|
|
|
|
dialog.SetSelectedTab( 'Info' ) ;
|
|
}
|
|
|
|
function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
|
|
{
|
|
// Remove animation
|
|
window.parent.Throbber.Hide() ;
|
|
GetE( 'divUpload' ).style.display = '' ;
|
|
|
|
switch ( errorNumber )
|
|
{
|
|
case 0 : // No errors
|
|
alert( 'Your file has been successfully uploaded' ) ;
|
|
break ;
|
|
case 1 : // Custom error
|
|
alert( customMsg ) ;
|
|
return ;
|
|
case 101 : // Custom warning
|
|
alert( customMsg ) ;
|
|
break ;
|
|
case 201 :
|
|
alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
|
|
break ;
|
|
case 202 :
|
|
alert( 'Invalid file type' ) ;
|
|
return ;
|
|
case 203 :
|
|
alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
|
|
return ;
|
|
case 500 :
|
|
alert( 'The connector is disabled' ) ;
|
|
break ;
|
|
default :
|
|
alert( 'Error on file upload. Error number: ' + errorNumber ) ;
|
|
return ;
|
|
}
|
|
|
|
sActualBrowser = '' ;
|
|
SetUrl( fileUrl ) ;
|
|
GetE('frmUpload').reset() ;
|
|
}
|
|
|
|
var oUploadAllowedExtRegex = new RegExp( FCKConfig.ImageUploadAllowedExtensions, 'i' ) ;
|
|
var oUploadDeniedExtRegex = new RegExp( FCKConfig.ImageUploadDeniedExtensions, 'i' ) ;
|
|
|
|
function CheckUpload()
|
|
{
|
|
var sFile = GetE('txtUploadFile').value ;
|
|
|
|
if ( sFile.length == 0 )
|
|
{
|
|
alert( 'Please select a file to upload' ) ;
|
|
return false ;
|
|
}
|
|
|
|
if ( ( FCKConfig.ImageUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) ||
|
|
( FCKConfig.ImageUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) )
|
|
{
|
|
OnUploadCompleted( 202 ) ;
|
|
return false ;
|
|
}
|
|
|
|
// Show animation
|
|
window.parent.Throbber.Show( 100 ) ;
|
|
GetE( 'divUpload' ).style.display = 'none' ;
|
|
|
|
return true ;
|
|
}
|