Subversion Repositories Applications.papyrus

Rev

Rev 1688 | Go to most recent revision | Blame | Last modification | View Log | RSS feed

/*
 * 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 ;
}