Subversion Repositories Applications.papyrus

Rev

Rev 1371 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
 * FCKeditor - The text editor for internet
 * Copyright (C) 2003-2006 Frederico Caldeira Knabben
 * 
 * Licensed under the terms of the GNU Lesser General Public License:
 *              http://www.opensource.org/licenses/lgpl-license.php
 * 
 * For further information visit:
 *              http://www.fckeditor.net/
 * 
 * "Support Open Source software. What about a donation today?"
 * 
 * File Name: fck_2_gecko.js
 *      This is the second part of the "FCK" object creation. This is the main
 *      object that represents an editor instance.
 *      (Gecko specific implementations)
 * 
 * File Authors:
 *              Frederico Caldeira Knabben (fredck@fckeditor.net)
 */

// GetNamedCommandState overload for Gecko.
FCK._BaseGetNamedCommandState = FCK.GetNamedCommandState ;
FCK.GetNamedCommandState = function( commandName )
{
        switch ( commandName )
        {
                case 'Unlink' :
                        return FCKSelection.HasAncestorNode('A') ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
                default :
                        return FCK._BaseGetNamedCommandState( commandName ) ;
        }
}

// Named commands to be handled by this browsers specific implementation.
FCK.RedirectNamedCommands = 
{
        Print   : true,
        Paste   : true,
        Cut             : true,
        Copy    : true
}

// ExecuteNamedCommand overload for Gecko.
FCK.ExecuteRedirectedNamedCommand = function( commandName, commandParameter )
{
        switch ( commandName )
        {
                case 'Print' :
                        FCK.EditorWindow.print() ;
                        break ;
                case 'Paste' :
                        try                     { if ( FCK.Paste() ) FCK.ExecuteNamedCommand( 'Paste', null, true ) ; }
                        catch (e)       { alert(FCKLang.PasteErrorPaste) ; }
                        break ;
                case 'Cut' :
                        try                     { FCK.ExecuteNamedCommand( 'Cut', null, true ) ; }
                        catch (e)       { alert(FCKLang.PasteErrorCut) ; }
                        break ;
                case 'Copy' :
                        try                     { FCK.ExecuteNamedCommand( 'Copy', null, true ) ; }
                        catch (e)       { alert(FCKLang.PasteErrorCopy) ; }
                        break ;                 
                default :
                        FCK.ExecuteNamedCommand( commandName, commandParameter ) ;
        }
}

FCK.AttachToOnSelectionChange = function( functionPointer )
{
        this.Events.AttachEvent( 'OnSelectionChange', functionPointer ) ;
}

FCK.Paste = function()
{
        if ( FCKConfig.ForcePasteAsPlainText )
        {
                FCK.PasteAsPlainText() ;        
                return false ;
        }
/* For now, the AutoDetectPasteFromWord feature is IE only.
        else if ( FCKConfig.AutoDetectPasteFromWord )
        {
                var sHTML = FCK.GetClipboardHTML() ;
                var re = /<\w[^>]* class="?MsoNormal"?/gi ;
                if ( re.test( sHTML ) )
                {
                        if ( confirm( FCKLang["PasteWordConfirm"] ) )
                        {
                                FCK.PasteFromWord() ;
                                return false ;
                        }
                }
        }
*/
        else
                return true ;
}

//**
// FCK.InsertHtml: Inserts HTML at the current cursor location. Deletes the
// selected content if any.
FCK.InsertHtml = function( html )
{
        html = FCKConfig.ProtectedSource.Protect( html ) ;
        html = FCK.ProtectUrls( html ) ;

        // Delete the actual selection.
        var oSel = FCKSelection.Delete() ;
        
        // Get the first available range.
        var oRange = oSel.getRangeAt(0) ;
        
        // Create a fragment with the input HTML.
        var oFragment = oRange.createContextualFragment( html ) ;
        
        // Get the last available node.
        var oLastNode = oFragment.lastChild ;

        // Insert the fragment in the range.
        oRange.insertNode(oFragment) ;
        
        // Set the cursor after the inserted fragment.
        FCKSelection.SelectNode( oLastNode ) ;
        FCKSelection.Collapse( false ) ;
        
        this.Focus() ;
}

FCK.InsertElement = function( element )
{
        // Deletes the actual selection.
        var oSel = FCKSelection.Delete() ;
        
        // Gets the first available range.
        var oRange = oSel.getRangeAt(0) ;
        
        // Inserts the element in the range.
        oRange.insertNode( element ) ;
        
        // Set the cursor after the inserted fragment.
        FCKSelection.SelectNode( element ) ;
        FCKSelection.Collapse( false ) ;

        this.Focus() ;
}

FCK.PasteAsPlainText = function()
{
        // TODO: Implement the "Paste as Plain Text" code.
        
        FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.PasteAsText, 'dialog/fck_paste.html', 400, 330, 'PlainText' ) ;
        
/*
        var sText = FCKTools.HTMLEncode( clipboardData.getData("Text") ) ;
        sText = sText.replace( /\n/g, '<BR>' ) ;
        this.InsertHtml( sText ) ;      
*/
}
/*
FCK.PasteFromWord = function()
{
        // TODO: Implement the "Paste as Plain Text" code.
        
        FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.PasteFromWord, 'dialog/fck_paste.html', 400, 330, 'Word' ) ;

//      FCK.CleanAndPaste( FCK.GetClipboardHTML() ) ;
}
*/
FCK.GetClipboardHTML = function()
{
        return '' ;
}

FCK.CreateLink = function( url )
{       
        FCK.ExecuteNamedCommand( 'Unlink' ) ;
        
        if ( url.length > 0 )
        {
                // Generate a temporary name for the link.
                var sTempUrl = 'javascript:void(0);/*' + ( new Date().getTime() ) + '*/' ;
                
                // Use the internal "CreateLink" command to create the link.
                FCK.ExecuteNamedCommand( 'CreateLink', sTempUrl ) ;

                // Retrieve the just created link using XPath.
                var oLink = document.evaluate("//a[@href='" + sTempUrl + "']", this.EditorDocument.body, null, 9, null).singleNodeValue ;
                
                if ( oLink )
                {
                        oLink.href = url ;
                        return oLink ;
                }
        }
}