New file |
0,0 → 1,196 |
/* |
* 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 ; |
} |
} |
} |