Mise a jour fckeditor 2.3.1 et correction pour que le code soit touch au minimum.
Correction pour faire fonctionner l'upload de fichiers
This commit is contained in:
parent
11483b225e
commit
d4f72730b9
1
htdocs/includes/fckeditor/editor/.cvsignore
Normal file
1
htdocs/includes/fckeditor/editor/.cvsignore
Normal file
@ -0,0 +1 @@
|
||||
_sources
|
||||
@ -1,120 +0,0 @@
|
||||
/*
|
||||
* 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: fckcontextmenu.js
|
||||
* FCKContextMenu Class: renders an control a context menu.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKContextMenu = function( parentWindow, mouseClickWindow, langDir )
|
||||
{
|
||||
var oPanel = this._Panel = new FCKPanel( parentWindow, true ) ;
|
||||
oPanel.AppendStyleSheet( FCKConfig.SkinPath + 'fck_editor.css' ) ;
|
||||
oPanel.IsContextMenu = true ;
|
||||
|
||||
var oMenuBlock = this._MenuBlock = new FCKMenuBlock() ;
|
||||
oMenuBlock.Panel = oPanel ;
|
||||
oMenuBlock.OnClick = FCKTools.CreateEventListener( FCKContextMenu_MenuBlock_OnClick, this ) ;
|
||||
|
||||
this._Redraw = true ;
|
||||
|
||||
this.SetMouseClickWindow( mouseClickWindow || parentWindow ) ;
|
||||
}
|
||||
|
||||
|
||||
FCKContextMenu.prototype.SetMouseClickWindow = function( mouseClickWindow )
|
||||
{
|
||||
if ( !FCKBrowserInfo.IsIE )
|
||||
{
|
||||
this._Document = mouseClickWindow.document ;
|
||||
this._Document.addEventListener( 'contextmenu', FCKContextMenu_Document_OnContextMenu, false ) ;
|
||||
}
|
||||
}
|
||||
|
||||
FCKContextMenu.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled )
|
||||
{
|
||||
var oItem = this._MenuBlock.AddItem( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled) ;
|
||||
this._Redraw = true ;
|
||||
return oItem ;
|
||||
}
|
||||
|
||||
FCKContextMenu.prototype.AddSeparator = function()
|
||||
{
|
||||
this._MenuBlock.AddSeparator() ;
|
||||
this._Redraw = true ;
|
||||
}
|
||||
|
||||
FCKContextMenu.prototype.RemoveAllItems = function()
|
||||
{
|
||||
this._MenuBlock.RemoveAllItems() ;
|
||||
this._Redraw = true ;
|
||||
}
|
||||
|
||||
FCKContextMenu.prototype.AttachToElement = function( element )
|
||||
{
|
||||
if ( FCKBrowserInfo.IsIE )
|
||||
FCKTools.AddEventListenerEx( element, 'contextmenu', FCKContextMenu_AttachedElement_OnContextMenu, this ) ;
|
||||
else
|
||||
element._FCKContextMenu = this ;
|
||||
|
||||
// element.onmouseup = FCKContextMenu_AttachedElement_OnMouseUp ;
|
||||
}
|
||||
|
||||
function FCKContextMenu_Document_OnContextMenu( e )
|
||||
{
|
||||
var el = e.target ;
|
||||
|
||||
while ( el )
|
||||
{
|
||||
if ( el._FCKContextMenu )
|
||||
{
|
||||
FCKTools.CancelEvent( e ) ;
|
||||
FCKContextMenu_AttachedElement_OnContextMenu( e, el._FCKContextMenu, el ) ;
|
||||
}
|
||||
el = el.parentNode ;
|
||||
}
|
||||
}
|
||||
|
||||
function FCKContextMenu_AttachedElement_OnContextMenu( ev, fckContextMenu, el )
|
||||
{
|
||||
// var iButton = e ? e.which - 1 : event.button ;
|
||||
|
||||
// if ( iButton != 2 )
|
||||
// return ;
|
||||
|
||||
var eTarget = el || this ;
|
||||
|
||||
if ( fckContextMenu.OnBeforeOpen )
|
||||
fckContextMenu.OnBeforeOpen.call( fckContextMenu, eTarget ) ;
|
||||
|
||||
if ( fckContextMenu._Redraw )
|
||||
{
|
||||
fckContextMenu._MenuBlock.Create( fckContextMenu._Panel.MainNode ) ;
|
||||
fckContextMenu._Redraw = false ;
|
||||
}
|
||||
|
||||
fckContextMenu._Panel.Show(
|
||||
ev.pageX || ev.screenX,
|
||||
ev.pageY || ev.screenY,
|
||||
ev.currentTarget || null
|
||||
) ;
|
||||
|
||||
return false ;
|
||||
}
|
||||
|
||||
function FCKContextMenu_MenuBlock_OnClick( menuItem, contextMenu )
|
||||
{
|
||||
contextMenu._Panel.Hide() ;
|
||||
FCKTools.RunFunction( contextMenu.OnItemClick, contextMenu, menuItem ) ;
|
||||
}
|
||||
@ -1,179 +0,0 @@
|
||||
/*
|
||||
* 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: fckeditingarea.js
|
||||
* FCKEditingArea Class: renders an editable area.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
* @param {String} targetElement The element that will hold the editing area. Any child element present in the target will be deleted.
|
||||
*/
|
||||
var FCKEditingArea = function( targetElement )
|
||||
{
|
||||
this.TargetElement = targetElement ;
|
||||
this.Mode = FCK_EDITMODE_WYSIWYG ;
|
||||
|
||||
if ( FCK.IECleanup )
|
||||
FCK.IECleanup.AddItem( this, FCKEditingArea_Cleanup ) ;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param {String} html The complete HTML for the page, including DOCTYPE and the <html> tag.
|
||||
*/
|
||||
FCKEditingArea.prototype.Start = function( html )
|
||||
{
|
||||
var eTargetElement = this.TargetElement ;
|
||||
var oTargetDocument = eTargetElement.ownerDocument ;
|
||||
|
||||
// Remove all child nodes from the target.
|
||||
while( eTargetElement.childNodes.length > 0 )
|
||||
eTargetElement.removeChild( eTargetElement.childNodes[0] ) ;
|
||||
|
||||
if ( this.Mode == FCK_EDITMODE_WYSIWYG )
|
||||
{
|
||||
if ( FCKBrowserInfo.IsGecko )
|
||||
{
|
||||
html = html.replace( /(<body[^>]*>)\s*(<\/body>)/i, '$1' + GECKO_BOGUS + '$2' ) ;
|
||||
}
|
||||
|
||||
// Create the editing area IFRAME.
|
||||
var oIFrame = this.IFrame = oTargetDocument.createElement( 'iframe' ) ;
|
||||
oIFrame.src = 'javascript:void(0)' ;
|
||||
oIFrame.frameBorder = 0 ;
|
||||
oIFrame.width = oIFrame.height = '100%' ;
|
||||
|
||||
// Append the new IFRAME to the target.
|
||||
eTargetElement.appendChild( oIFrame ) ;
|
||||
|
||||
// Get the window and document objects used to interact with the newly created IFRAME.
|
||||
this.Window = oIFrame.contentWindow ;
|
||||
|
||||
// IE: Avoid JavaScript errors thrown by the editing are source (like tags events).
|
||||
// TODO: This error handler is not being fired.
|
||||
// this.Window.onerror = function() { alert( 'Error!' ) ; return true ; }
|
||||
|
||||
var oDoc = this.Document = this.Window.document ;
|
||||
|
||||
oDoc.open() ;
|
||||
oDoc.write( html ) ;
|
||||
oDoc.close() ;
|
||||
|
||||
this.Window._FCKEditingArea = this ;
|
||||
|
||||
// FF 1.0.x is buggy... we must wait a lot to enable editing because
|
||||
// sometimes the content simply disappears, for example when pasting
|
||||
// "bla1!<img src='some_url'>!bla2" in the source and then switching
|
||||
// back to design.
|
||||
if ( FCKBrowserInfo.IsGecko10 )
|
||||
this.Window.setTimeout( FCKEditingArea_CompleteStart, 500 ) ;
|
||||
else
|
||||
FCKEditingArea_CompleteStart.call( this.Window ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
var eTextarea = this.Textarea = oTargetDocument.createElement( 'textarea' ) ;
|
||||
eTextarea.className = 'SourceField' ;
|
||||
eTextarea.dir = 'ltr' ;
|
||||
eTextarea.style.width = eTextarea.style.height = '100%' ;
|
||||
eTextarea.style.border = 'none' ;
|
||||
eTargetElement.appendChild( eTextarea ) ;
|
||||
|
||||
eTextarea.value = html ;
|
||||
|
||||
// Fire the "OnLoad" event.
|
||||
FCKTools.RunFunction( this.OnLoad ) ;
|
||||
}
|
||||
}
|
||||
|
||||
// "this" here is FCKEditingArea.Window
|
||||
function FCKEditingArea_CompleteStart()
|
||||
{
|
||||
// Of Firefox, the DOM takes a little to become available. So we must wait for it in a loop.
|
||||
if ( !this.document.body )
|
||||
{
|
||||
this.setTimeout( FCKEditingArea_CompleteStart, 50 ) ;
|
||||
return ;
|
||||
}
|
||||
|
||||
var oEditorArea = this._FCKEditingArea ;
|
||||
oEditorArea.MakeEditable() ;
|
||||
|
||||
// Fire the "OnLoad" event.
|
||||
FCKTools.RunFunction( oEditorArea.OnLoad ) ;
|
||||
}
|
||||
|
||||
FCKEditingArea.prototype.MakeEditable = function()
|
||||
{
|
||||
var oDoc = this.Document ;
|
||||
|
||||
if ( FCKBrowserInfo.IsIE )
|
||||
oDoc.body.contentEditable = true ;
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
oDoc.designMode = 'on' ;
|
||||
|
||||
// Tell Gecko to use or not the <SPAN> tag for the bold, italic and underline.
|
||||
oDoc.execCommand( 'useCSS', false, !FCKConfig.GeckoUseSPAN ) ;
|
||||
|
||||
// Analysing Firefox 1.5 source code, it seams that there is support for a
|
||||
// "insertBrOnReturn" command. Applying it gives no error, but it doesn't
|
||||
// gives the same behavior that you have with IE. It works only if you are
|
||||
// already inside a paragraph and it doesn't render correctly in the first enter.
|
||||
// oDoc.execCommand( 'insertBrOnReturn', false, false ) ;
|
||||
|
||||
// Tell Gecko (Firefox 1.5+) to enable or not live resizing of objects (by Alfonso Martinez)
|
||||
oDoc.execCommand( 'enableObjectResizing', false, !FCKConfig.DisableObjectResizing ) ;
|
||||
|
||||
// Disable the standard table editing features of Firefox.
|
||||
oDoc.execCommand( 'enableInlineTableEditing', false, !FCKConfig.DisableFFTableHandles ) ;
|
||||
}
|
||||
catch (e) {}
|
||||
}
|
||||
}
|
||||
|
||||
FCKEditingArea.prototype.Focus = function()
|
||||
{
|
||||
try
|
||||
{
|
||||
if ( this.Mode == FCK_EDITMODE_WYSIWYG )
|
||||
{
|
||||
if ( FCKBrowserInfo.IsSafari )
|
||||
this.IFrame.focus() ;
|
||||
else
|
||||
this.Window.focus() ;
|
||||
}
|
||||
else
|
||||
this.Textarea.focus() ;
|
||||
}
|
||||
catch(e) {}
|
||||
}
|
||||
|
||||
function FCKEditingArea_Cleanup()
|
||||
{
|
||||
this.TargetElement = null ;
|
||||
this.IFrame = null ;
|
||||
this.Document = null ;
|
||||
this.Textarea = null ;
|
||||
|
||||
if ( this.Window )
|
||||
{
|
||||
this.Window._FCKEditingArea = null ;
|
||||
this.Window = null ;
|
||||
}
|
||||
}
|
||||
@ -1,51 +0,0 @@
|
||||
/*
|
||||
* 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: fckevents.js
|
||||
* FCKEvents Class: used to handle events is a advanced way.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKEvents ;
|
||||
|
||||
FCKEvents = function( eventsOwner )
|
||||
{
|
||||
this.Owner = eventsOwner ;
|
||||
this.RegisteredEvents = new Object() ;
|
||||
}
|
||||
|
||||
FCKEvents.prototype.AttachEvent = function( eventName, functionPointer )
|
||||
{
|
||||
var aTargets ;
|
||||
|
||||
if ( !( aTargets = this.RegisteredEvents[ eventName ] ) )
|
||||
this.RegisteredEvents[ eventName ] = [ functionPointer ] ;
|
||||
else
|
||||
aTargets.push( functionPointer ) ;
|
||||
}
|
||||
|
||||
FCKEvents.prototype.FireEvent = function( eventName, params )
|
||||
{
|
||||
var bReturnValue = true ;
|
||||
|
||||
var oCalls = this.RegisteredEvents[ eventName ] ;
|
||||
|
||||
if ( oCalls )
|
||||
{
|
||||
for ( var i = 0 ; i < oCalls.length ; i++ )
|
||||
bReturnValue = ( oCalls[ i ]( this.Owner, params ) && bReturnValue ) ;
|
||||
}
|
||||
|
||||
return bReturnValue ;
|
||||
}
|
||||
@ -1,86 +0,0 @@
|
||||
/*
|
||||
* 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: fckicon.js
|
||||
* FCKIcon Class: renders an icon from a single image, a strip or even a
|
||||
* spacer.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKIcon = function( iconPathOrStripInfoArray )
|
||||
{
|
||||
var sTypeOf = iconPathOrStripInfoArray ? typeof( iconPathOrStripInfoArray ) : 'undefined' ;
|
||||
switch ( sTypeOf )
|
||||
{
|
||||
case 'number' :
|
||||
this.Path = FCKConfig.SkinPath + 'fck_strip.gif' ;
|
||||
this.Size = 16 ;
|
||||
this.Position = iconPathOrStripInfoArray ;
|
||||
break ;
|
||||
|
||||
case 'undefined' :
|
||||
this.Path = FCK_SPACER_PATH ;
|
||||
break ;
|
||||
|
||||
case 'string' :
|
||||
this.Path = iconPathOrStripInfoArray ;
|
||||
break ;
|
||||
|
||||
default :
|
||||
// It is an array in the format [ StripFilePath, IconSize, IconPosition ]
|
||||
this.Path = iconPathOrStripInfoArray[0] ;
|
||||
this.Size = iconPathOrStripInfoArray[1] ;
|
||||
this.Position = iconPathOrStripInfoArray[2] ;
|
||||
}
|
||||
}
|
||||
|
||||
FCKIcon.prototype.CreateIconElement = function( document )
|
||||
{
|
||||
var eIcon ;
|
||||
|
||||
if ( this.Position ) // It is using an icons strip image.
|
||||
{
|
||||
var sPos = '-' + ( ( this.Position - 1 ) * this.Size ) + 'px' ;
|
||||
|
||||
if ( FCKBrowserInfo.IsIE )
|
||||
{
|
||||
// <div class="TB_Button_Image"><img src="strip.gif" style="top:-16px"></div>
|
||||
|
||||
eIcon = document.createElement( 'DIV' ) ;
|
||||
|
||||
var eIconImage = eIcon.appendChild( document.createElement( 'IMG' ) ) ;
|
||||
eIconImage.src = this.Path ;
|
||||
eIconImage.style.top = sPos ;
|
||||
}
|
||||
else
|
||||
{
|
||||
// <img class="TB_Button_Image" src="spacer.gif" style="background-position: 0px -16px;background-image: url(strip.gif);">
|
||||
|
||||
eIcon = document.createElement( 'IMG' ) ;
|
||||
eIcon.src = FCK_SPACER_PATH ;
|
||||
eIcon.style.backgroundPosition = '0px ' + sPos ;
|
||||
eIcon.style.backgroundImage = 'url(' + this.Path + ')' ;
|
||||
}
|
||||
}
|
||||
else // It is using a single icon image.
|
||||
{
|
||||
// <img class="TB_Button_Image" src="smiley.gif">
|
||||
eIcon = document.createElement( 'IMG' ) ;
|
||||
eIcon.src = this.Path ? this.Path : FCK_SPACER_PATH ;
|
||||
}
|
||||
|
||||
eIcon.className = 'TB_Button_Image' ;
|
||||
|
||||
return eIcon ;
|
||||
}
|
||||
@ -1,51 +0,0 @@
|
||||
/*
|
||||
* 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: fckiecleanup.js
|
||||
* FCKIECleanup Class: a generic class used as a tool to remove IE leaks.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
|
||||
var FCKIECleanup = function( attachWindow )
|
||||
{
|
||||
|
||||
this.Items = new Array() ;
|
||||
|
||||
attachWindow._FCKCleanupObj = this ;
|
||||
attachWindow.attachEvent( 'onunload', FCKIECleanup_Cleanup ) ;
|
||||
}
|
||||
|
||||
FCKIECleanup.prototype.AddItem = function( dirtyItem, cleanupFunction )
|
||||
{
|
||||
this.Items.push( [ dirtyItem, cleanupFunction ] ) ;
|
||||
}
|
||||
|
||||
function FCKIECleanup_Cleanup()
|
||||
{
|
||||
var aItems = this._FCKCleanupObj.Items ;
|
||||
var iLenght = aItems.length ;
|
||||
|
||||
for ( var i = 0 ; i < iLenght ; i++ )
|
||||
{
|
||||
var oItem = aItems[i] ;
|
||||
oItem[1].call( oItem[0] ) ;
|
||||
aItems[i] = null ;
|
||||
}
|
||||
|
||||
this._FCKCleanupObj = null ;
|
||||
|
||||
if ( CollectGarbage )
|
||||
CollectGarbage() ;
|
||||
}
|
||||
@ -1,135 +0,0 @@
|
||||
/*
|
||||
* 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: fckmenublock.js
|
||||
* Renders a list of menu items.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
|
||||
var FCKMenuBlock = function()
|
||||
{
|
||||
this._Items = new Array() ;
|
||||
}
|
||||
|
||||
|
||||
FCKMenuBlock.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled )
|
||||
{
|
||||
var oItem = new FCKMenuItem( this, name, label, iconPathOrStripInfoArrayOrIndex, isDisabled ) ;
|
||||
|
||||
oItem.OnClick = FCKTools.CreateEventListener( FCKMenuBlock_Item_OnClick, this ) ;
|
||||
oItem.OnActivate = FCKTools.CreateEventListener( FCKMenuBlock_Item_OnActivate, this ) ;
|
||||
|
||||
this._Items.push( oItem ) ;
|
||||
|
||||
return oItem ;
|
||||
}
|
||||
|
||||
FCKMenuBlock.prototype.AddSeparator = function()
|
||||
{
|
||||
this._Items.push( new FCKMenuSeparator() ) ;
|
||||
}
|
||||
|
||||
FCKMenuBlock.prototype.RemoveAllItems = function()
|
||||
{
|
||||
this._Items = new Array() ;
|
||||
|
||||
var eItemsTable = this._ItemsTable ;
|
||||
if ( eItemsTable )
|
||||
{
|
||||
while ( eItemsTable.rows.length > 0 )
|
||||
eItemsTable.deleteRow( 0 ) ;
|
||||
}
|
||||
}
|
||||
|
||||
FCKMenuBlock.prototype.Create = function( parentElement )
|
||||
{
|
||||
if ( !this._ItemsTable )
|
||||
{
|
||||
if ( FCK.IECleanup )
|
||||
FCK.IECleanup.AddItem( this, FCKMenuBlock_Cleanup ) ;
|
||||
|
||||
this._Window = FCKTools.GetElementWindow( parentElement ) ;
|
||||
|
||||
var oDoc = parentElement.ownerDocument ;
|
||||
|
||||
var eTable = parentElement.appendChild( oDoc.createElement( 'table' ) ) ;
|
||||
eTable.cellPadding = 0 ;
|
||||
eTable.cellSpacing = 0 ;
|
||||
|
||||
FCKTools.DisableSelection( eTable ) ;
|
||||
|
||||
var oMainElement = eTable.insertRow(-1).insertCell(-1) ;
|
||||
oMainElement.className = 'MN_Menu' ;
|
||||
|
||||
var eItemsTable = this._ItemsTable = oMainElement.appendChild( oDoc.createElement( 'table' ) ) ;
|
||||
eItemsTable.cellPadding = 0 ;
|
||||
eItemsTable.cellSpacing = 0 ;
|
||||
}
|
||||
|
||||
for ( var i = 0 ; i < this._Items.length ; i++ )
|
||||
this._Items[i].Create( this._ItemsTable ) ;
|
||||
}
|
||||
|
||||
/* Events */
|
||||
|
||||
function FCKMenuBlock_Item_OnClick( clickedItem, menuBlock )
|
||||
{
|
||||
FCKTools.RunFunction( menuBlock.OnClick, menuBlock, [ clickedItem ] ) ;
|
||||
}
|
||||
|
||||
function FCKMenuBlock_Item_OnActivate( menuBlock )
|
||||
{
|
||||
var oActiveItem = menuBlock._ActiveItem ;
|
||||
|
||||
if ( oActiveItem && oActiveItem != this )
|
||||
{
|
||||
// Set the focus to this menu block window (to fire OnBlur on opened panels).
|
||||
if ( !FCKBrowserInfo.IsIE && oActiveItem.HasSubMenu && !this.HasSubMenu )
|
||||
menuBlock._Window.focus() ;
|
||||
|
||||
oActiveItem.Deactivate() ;
|
||||
}
|
||||
|
||||
menuBlock._ActiveItem = this ;
|
||||
}
|
||||
|
||||
function FCKMenuBlock_Cleanup()
|
||||
{
|
||||
this._Window = null ;
|
||||
this._ItemsTable = null ;
|
||||
}
|
||||
|
||||
// ################# //
|
||||
|
||||
var FCKMenuSeparator = function()
|
||||
{}
|
||||
|
||||
FCKMenuSeparator.prototype.Create = function( parentTable )
|
||||
{
|
||||
var oDoc = parentTable.ownerDocument ; // This is IE 6+
|
||||
|
||||
var r = parentTable.insertRow(-1) ;
|
||||
|
||||
var eCell = r.insertCell(-1) ;
|
||||
eCell.className = 'MN_Separator MN_Icon' ;
|
||||
|
||||
eCell = r.insertCell(-1) ;
|
||||
eCell.className = 'MN_Separator' ;
|
||||
eCell.appendChild( oDoc.createElement( 'DIV' ) ).className = 'MN_Separator_Line' ;
|
||||
|
||||
eCell = r.insertCell(-1) ;
|
||||
eCell.className = 'MN_Separator' ;
|
||||
eCell.appendChild( oDoc.createElement( 'DIV' ) ).className = 'MN_Separator_Line' ;
|
||||
}
|
||||
@ -1,51 +0,0 @@
|
||||
/*
|
||||
* 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: fckmenublockpanel.js
|
||||
* This class is a menu block that behaves like a panel. It's a mix of the
|
||||
* FCKMenuBlock and FCKPanel classes.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
|
||||
var FCKMenuBlockPanel = function()
|
||||
{
|
||||
// Call the "base" constructor.
|
||||
FCKMenuBlock.call( this ) ;
|
||||
}
|
||||
|
||||
FCKMenuBlockPanel.prototype = new FCKMenuBlock() ;
|
||||
|
||||
|
||||
// Override the create method.
|
||||
FCKMenuBlockPanel.prototype.Create = function()
|
||||
{
|
||||
var oPanel = this.Panel = ( this.Parent && this.Parent.Panel ? this.Parent.Panel.CreateChildPanel() : new FCKPanel() ) ;
|
||||
oPanel.AppendStyleSheet( FCKConfig.SkinPath + 'fck_editor.css' ) ;
|
||||
|
||||
// Call the "base" implementation.
|
||||
FCKMenuBlock.prototype.Create.call( this, oPanel.MainNode ) ;
|
||||
}
|
||||
|
||||
FCKMenuBlockPanel.prototype.Show = function( x, y, relElement )
|
||||
{
|
||||
if ( !this.Panel.CheckIsOpened() )
|
||||
this.Panel.Show( x, y, relElement ) ;
|
||||
}
|
||||
|
||||
FCKMenuBlockPanel.prototype.Hide = function()
|
||||
{
|
||||
if ( this.Panel.CheckIsOpened() )
|
||||
this.Panel.Hide() ;
|
||||
}
|
||||
@ -1,157 +0,0 @@
|
||||
/*
|
||||
* 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: fckmenuitem.js
|
||||
* Defines and renders a menu items in a menu block.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
|
||||
var FCKMenuItem = function( parentMenuBlock, name, label, iconPathOrStripInfoArray, isDisabled )
|
||||
{
|
||||
this.Name = name ;
|
||||
this.Label = label || name ;
|
||||
this.IsDisabled = isDisabled ;
|
||||
|
||||
this.Icon = new FCKIcon( iconPathOrStripInfoArray ) ;
|
||||
|
||||
this.SubMenu = new FCKMenuBlockPanel() ;
|
||||
this.SubMenu.Parent = parentMenuBlock ;
|
||||
this.SubMenu.OnClick = FCKTools.CreateEventListener( FCKMenuItem_SubMenu_OnClick, this ) ;
|
||||
|
||||
if ( FCK.IECleanup )
|
||||
FCK.IECleanup.AddItem( this, FCKMenuItem_Cleanup ) ;
|
||||
}
|
||||
|
||||
|
||||
FCKMenuItem.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled )
|
||||
{
|
||||
this.HasSubMenu = true ;
|
||||
return this.SubMenu.AddItem( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled ) ;
|
||||
}
|
||||
|
||||
FCKMenuItem.prototype.AddSeparator = function()
|
||||
{
|
||||
this.SubMenu.AddSeparator() ;
|
||||
}
|
||||
|
||||
FCKMenuItem.prototype.Create = function( parentTable )
|
||||
{
|
||||
var bHasSubMenu = this.HasSubMenu ;
|
||||
|
||||
var oDoc = parentTable.ownerDocument ; // This is not IE 5.5
|
||||
|
||||
// Add a row in the table to hold the menu item.
|
||||
var r = this.MainElement = parentTable.insertRow(-1) ;
|
||||
r.className = this.IsDisabled ? 'MN_Item_Disabled' : 'MN_Item' ;
|
||||
|
||||
// Set the row behavior.
|
||||
if ( !this.IsDisabled )
|
||||
{
|
||||
FCKTools.AddEventListenerEx( r, 'mouseover', FCKMenuItem_OnMouseOver, [ this ] ) ;
|
||||
FCKTools.AddEventListenerEx( r, 'click', FCKMenuItem_OnClick, [ this ] ) ;
|
||||
|
||||
if ( !bHasSubMenu )
|
||||
FCKTools.AddEventListenerEx( r, 'mouseout', FCKMenuItem_OnMouseOut, [ this ] ) ;
|
||||
}
|
||||
|
||||
// Create the icon cell.
|
||||
var eCell = r.insertCell(-1) ;
|
||||
eCell.className = 'MN_Icon' ;
|
||||
eCell.appendChild( this.Icon.CreateIconElement( oDoc ) ) ;
|
||||
|
||||
// Create the label cell.
|
||||
eCell = r.insertCell(-1) ;
|
||||
eCell.className = 'MN_Label' ;
|
||||
eCell.noWrap = true ;
|
||||
eCell.appendChild( oDoc.createTextNode( this.Label ) ) ;
|
||||
|
||||
// Create the arrow cell and setup the sub menu panel (if needed).
|
||||
eCell = r.insertCell(-1) ;
|
||||
if ( bHasSubMenu )
|
||||
{
|
||||
eCell.className = 'MN_Arrow' ;
|
||||
|
||||
// The arrow is a fixed size image.
|
||||
var eArrowImg = eCell.appendChild( oDoc.createElement( 'IMG' ) ) ;
|
||||
eArrowImg.src = FCK_IMAGES_PATH + 'arrow_' + FCKLang.Dir + '.gif' ;
|
||||
eArrowImg.width = 4 ;
|
||||
eArrowImg.height = 7 ;
|
||||
|
||||
this.SubMenu.Create() ;
|
||||
this.SubMenu.Panel.OnHide = FCKTools.CreateEventListener( FCKMenuItem_SubMenu_OnHide, this ) ;
|
||||
}
|
||||
}
|
||||
|
||||
FCKMenuItem.prototype.Activate = function()
|
||||
{
|
||||
this.MainElement.className = 'MN_Item_Over' ;
|
||||
|
||||
if ( this.HasSubMenu )
|
||||
{
|
||||
// Show the child menu block. The ( +2, -2 ) correction is done because
|
||||
// of the padding in the skin. It is not a good solution because one
|
||||
// could change the skin and so the final result would not be accurate.
|
||||
// For now it is ok because we are controlling the skin.
|
||||
this.SubMenu.Show( this.MainElement.offsetWidth + 2, -2, this.MainElement ) ;
|
||||
}
|
||||
|
||||
FCKTools.RunFunction( this.OnActivate, this ) ;
|
||||
}
|
||||
|
||||
FCKMenuItem.prototype.Deactivate = function()
|
||||
{
|
||||
this.MainElement.className = 'MN_Item' ;
|
||||
|
||||
if ( this.HasSubMenu )
|
||||
this.SubMenu.Hide() ;
|
||||
}
|
||||
|
||||
/* Events */
|
||||
|
||||
function FCKMenuItem_SubMenu_OnClick( clickedItem, listeningItem )
|
||||
{
|
||||
FCKTools.RunFunction( listeningItem.OnClick, listeningItem, [ clickedItem ] ) ;
|
||||
}
|
||||
|
||||
function FCKMenuItem_SubMenu_OnHide( menuItem )
|
||||
{
|
||||
menuItem.Deactivate() ;
|
||||
}
|
||||
|
||||
function FCKMenuItem_OnClick( ev, menuItem )
|
||||
{
|
||||
if ( menuItem.HasSubMenu )
|
||||
menuItem.Activate() ;
|
||||
else
|
||||
{
|
||||
menuItem.Deactivate() ;
|
||||
FCKTools.RunFunction( menuItem.OnClick, menuItem, [ menuItem ] ) ;
|
||||
}
|
||||
}
|
||||
|
||||
function FCKMenuItem_OnMouseOver( ev, menuItem )
|
||||
{
|
||||
menuItem.Activate() ;
|
||||
}
|
||||
|
||||
function FCKMenuItem_OnMouseOut( ev, menuItem )
|
||||
{
|
||||
menuItem.Deactivate() ;
|
||||
}
|
||||
|
||||
function FCKMenuItem_Cleanup()
|
||||
{
|
||||
this.MainElement = null ;
|
||||
}
|
||||
@ -1,290 +0,0 @@
|
||||
/*
|
||||
* 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: fckpanel.js
|
||||
* Component that creates floating panels. It is used by many
|
||||
* other components, like the toolbar items, context menu, etc...
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
|
||||
var FCKPanel = function( parentWindow )
|
||||
{
|
||||
this.IsRTL = ( FCKLang.Dir == 'rtl' ) ;
|
||||
this.IsContextMenu = false ;
|
||||
this._LockCounter = 0 ;
|
||||
|
||||
this._Window = parentWindow || window ;
|
||||
|
||||
var oDocument ;
|
||||
|
||||
if ( FCKBrowserInfo.IsIE )
|
||||
{
|
||||
// Create the Popup that will hold the panel.
|
||||
this._Popup = this._Window.createPopup() ;
|
||||
oDocument = this.Document = this._Popup.document ;
|
||||
}
|
||||
else
|
||||
{
|
||||
var oIFrame = this._IFrame = this._Window.document.createElement('iframe') ;
|
||||
oIFrame.src = 'javascript:void(0)' ;
|
||||
oIFrame.allowTransparency = true ;
|
||||
oIFrame.frameBorder = '0' ;
|
||||
oIFrame.scrolling = 'no' ;
|
||||
oIFrame.style.position = 'absolute';
|
||||
oIFrame.style.zIndex = FCKConfig.FloatingPanelsZIndex ;
|
||||
oIFrame.width = oIFrame.height = 0 ;
|
||||
|
||||
this._Window.document.body.appendChild( oIFrame ) ;
|
||||
|
||||
var oIFrameWindow = oIFrame.contentWindow ;
|
||||
|
||||
oDocument = this.Document = oIFrameWindow.document ;
|
||||
|
||||
// Initialize the IFRAME document body.
|
||||
oDocument.open() ;
|
||||
oDocument.write( '<html><head></head><body style="margin:0px;padding:0px;"><\/body><\/html>' ) ;
|
||||
oDocument.close() ;
|
||||
|
||||
FCKTools.AddEventListenerEx( oIFrameWindow, 'focus', FCKPanel_Window_OnFocus, this ) ;
|
||||
FCKTools.AddEventListenerEx( oIFrameWindow, 'blur', FCKPanel_Window_OnBlur, this ) ;
|
||||
}
|
||||
|
||||
oDocument.dir = FCKLang.Dir ;
|
||||
|
||||
oDocument.oncontextmenu = FCKTools.CancelEvent ;
|
||||
|
||||
|
||||
// Create the main DIV that is used as the panel base.
|
||||
this.MainNode = oDocument.body.appendChild( oDocument.createElement('DIV') ) ;
|
||||
|
||||
// The "float" property must be set so Firefox calculates the size correcly.
|
||||
this.MainNode.style.cssFloat = this.IsRTL ? 'right' : 'left' ;
|
||||
|
||||
if ( FCK.IECleanup )
|
||||
FCK.IECleanup.AddItem( this, FCKPanel_Cleanup ) ;
|
||||
}
|
||||
|
||||
|
||||
FCKPanel.prototype.AppendStyleSheet = function( styleSheet )
|
||||
{
|
||||
FCKTools.AppendStyleSheet( this.Document, styleSheet ) ;
|
||||
}
|
||||
|
||||
FCKPanel.prototype.Preload = function( x, y, relElement )
|
||||
{
|
||||
// The offsetWidth and offsetHeight properties are not available if the
|
||||
// element is not visible. So we must "show" the popup with no size to
|
||||
// be able to use that values in the second call (IE only).
|
||||
if ( this._Popup )
|
||||
this._Popup.show( x, y, 0, 0, relElement ) ;
|
||||
}
|
||||
|
||||
FCKPanel.prototype.Show = function( x, y, relElement, width, height )
|
||||
{
|
||||
if ( this._Popup )
|
||||
{
|
||||
// The offsetWidth and offsetHeight properties are not available if the
|
||||
// element is not visible. So we must "show" the popup with no size to
|
||||
// be able to use that values in the second call.
|
||||
this._Popup.show( x, y, 0, 0, relElement ) ;
|
||||
|
||||
// The following lines must be place after the above "show", otherwise it
|
||||
// doesn't has the desired effect.
|
||||
this.MainNode.style.width = width ? width + 'px' : '' ;
|
||||
this.MainNode.style.height = height ? height + 'px' : '' ;
|
||||
|
||||
var iMainWidth = this.MainNode.offsetWidth ;
|
||||
|
||||
if ( this.IsRTL )
|
||||
{
|
||||
if ( this.IsContextMenu )
|
||||
x = x - iMainWidth + 1 ;
|
||||
else if ( relElement )
|
||||
x = ( x * -1 ) + relElement.offsetWidth - iMainWidth ;
|
||||
}
|
||||
|
||||
// Second call: Show the Popup at the specified location, with the correct size.
|
||||
this._Popup.show( x, y, iMainWidth, this.MainNode.offsetHeight, relElement ) ;
|
||||
|
||||
if ( this.OnHide )
|
||||
{
|
||||
if ( this._Timer )
|
||||
CheckPopupOnHide.call( this, true ) ;
|
||||
|
||||
this._Timer = FCKTools.SetInterval( CheckPopupOnHide, 100, this ) ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Do not fire OnBlur while the panel is opened.
|
||||
FCKFocusManager.Lock() ;
|
||||
|
||||
if ( this.ParentPanel )
|
||||
this.ParentPanel.Lock() ;
|
||||
|
||||
this.MainNode.style.width = width ? width + 'px' : '' ;
|
||||
this.MainNode.style.height = height ? height + 'px' : '' ;
|
||||
|
||||
var iMainWidth = this.MainNode.offsetWidth ;
|
||||
|
||||
if ( !width ) this._IFrame.width = 1 ;
|
||||
if ( !height ) this._IFrame.height = 1 ;
|
||||
|
||||
// This is weird... but with Firefox, we must get the offsetWidth before
|
||||
// setting the _IFrame size (which returns "0"), and then after that,
|
||||
// to return the correct width. Remove the first step and it will not
|
||||
// work when the editor is in RTL.
|
||||
iMainWidth = this.MainNode.offsetWidth ;
|
||||
|
||||
var oPos = FCKTools.GetElementPosition( ( relElement.nodeType == 9 ? relElement.body : relElement), this._Window ) ;
|
||||
|
||||
if ( this.IsRTL && !this.IsContextMenu )
|
||||
x = ( x * -1 ) ;
|
||||
|
||||
x += oPos.X ;
|
||||
y += oPos.Y ;
|
||||
|
||||
if ( this.IsRTL )
|
||||
{
|
||||
if ( this.IsContextMenu )
|
||||
x = x - iMainWidth + 1 ;
|
||||
else if ( relElement )
|
||||
x = x + relElement.offsetWidth - iMainWidth ;
|
||||
}
|
||||
else
|
||||
{
|
||||
var oViewPaneSize = FCKTools.GetViewPaneSize( this._Window ) ;
|
||||
var oScrollPosition = FCKTools.GetScrollPosition( this._Window ) ;
|
||||
|
||||
var iViewPaneHeight = oViewPaneSize.Height + oScrollPosition.Y ;
|
||||
var iViewPaneWidth = oViewPaneSize.Width + oScrollPosition.X ;
|
||||
|
||||
if ( ( x + iMainWidth ) > iViewPaneWidth )
|
||||
x -= x + iMainWidth - iViewPaneWidth ;
|
||||
|
||||
if ( ( y + this.MainNode.offsetHeight ) > iViewPaneHeight )
|
||||
y -= y + this.MainNode.offsetHeight - iViewPaneHeight ;
|
||||
}
|
||||
|
||||
if ( x < 0 )
|
||||
x = 0 ;
|
||||
|
||||
// Set the context menu DIV in the specified location.
|
||||
this._IFrame.style.left = x + 'px' ;
|
||||
this._IFrame.style.top = y + 'px' ;
|
||||
|
||||
var iWidth = iMainWidth ;
|
||||
var iHeight = this.MainNode.offsetHeight ;
|
||||
|
||||
this._IFrame.width = iWidth ;
|
||||
this._IFrame.height = iHeight ;
|
||||
|
||||
// Move the focus to the IFRAME so we catch the "onblur".
|
||||
this._IFrame.contentWindow.focus() ;
|
||||
}
|
||||
|
||||
this._IsOpened = true ;
|
||||
|
||||
FCKTools.RunFunction( this.OnShow, this ) ;
|
||||
}
|
||||
|
||||
FCKPanel.prototype.Hide = function( ignoreOnHide )
|
||||
{
|
||||
if ( this._Popup )
|
||||
this._Popup.hide() ;
|
||||
else
|
||||
{
|
||||
if ( !this._IsOpened )
|
||||
return ;
|
||||
|
||||
// Enable the editor to fire the "OnBlur".
|
||||
FCKFocusManager.Unlock() ;
|
||||
|
||||
// It is better to set the sizes to 0, otherwise Firefox would have
|
||||
// rendering problems.
|
||||
this._IFrame.width = this._IFrame.height = 0 ;
|
||||
|
||||
this._IsOpened = false ;
|
||||
|
||||
if ( this.ParentPanel )
|
||||
this.ParentPanel.Unlock() ;
|
||||
|
||||
if ( !ignoreOnHide )
|
||||
FCKTools.RunFunction( this.OnHide, this ) ;
|
||||
}
|
||||
}
|
||||
|
||||
FCKPanel.prototype.CheckIsOpened = function()
|
||||
{
|
||||
if ( this._Popup )
|
||||
return this._Popup.isOpen ;
|
||||
else
|
||||
return this._IsOpened ;
|
||||
}
|
||||
|
||||
FCKPanel.prototype.CreateChildPanel = function()
|
||||
{
|
||||
var oWindow = this._Popup ? FCKTools.GetParentWindow( this.Document ) : this._Window ;
|
||||
|
||||
var oChildPanel = new FCKPanel( oWindow, true ) ;
|
||||
oChildPanel.ParentPanel = this ;
|
||||
|
||||
return oChildPanel ;
|
||||
}
|
||||
|
||||
FCKPanel.prototype.Lock = function()
|
||||
{
|
||||
this._LockCounter++ ;
|
||||
}
|
||||
|
||||
FCKPanel.prototype.Unlock = function()
|
||||
{
|
||||
if ( --this._LockCounter == 0 && !this.HasFocus )
|
||||
this.Hide() ;
|
||||
}
|
||||
|
||||
/* Events */
|
||||
|
||||
function FCKPanel_Window_OnFocus( e, panel )
|
||||
{
|
||||
panel.HasFocus = true ;
|
||||
}
|
||||
|
||||
function FCKPanel_Window_OnBlur( e, panel )
|
||||
{
|
||||
panel.HasFocus = false ;
|
||||
|
||||
if ( panel._LockCounter == 0 )
|
||||
FCKTools.RunFunction( panel.Hide, panel ) ;
|
||||
}
|
||||
|
||||
function CheckPopupOnHide( forceHide )
|
||||
{
|
||||
if ( forceHide || !this._Popup.isOpen )
|
||||
{
|
||||
window.clearInterval( this._Timer ) ;
|
||||
this._Timer = null ;
|
||||
|
||||
FCKTools.RunFunction( this.OnHide, this ) ;
|
||||
}
|
||||
}
|
||||
|
||||
function FCKPanel_Cleanup()
|
||||
{
|
||||
this._Popup = null ;
|
||||
this._Window = null ;
|
||||
this.Document = null ;
|
||||
this.MainNode = null ;
|
||||
}
|
||||
@ -1,52 +0,0 @@
|
||||
/*
|
||||
* 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: fckplugin.js
|
||||
* FCKPlugin Class: Represents a single plugin.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKPlugin = function( name, availableLangs, basePath )
|
||||
{
|
||||
this.Name = name ;
|
||||
this.BasePath = basePath ? basePath : FCKConfig.PluginsPath ;
|
||||
this.Path = this.BasePath + name + '/' ;
|
||||
|
||||
if ( !availableLangs || availableLangs.length == 0 )
|
||||
this.AvailableLangs = new Array() ;
|
||||
else
|
||||
this.AvailableLangs = availableLangs.split(',') ;
|
||||
}
|
||||
|
||||
FCKPlugin.prototype.Load = function()
|
||||
{
|
||||
// Load the language file, if defined.
|
||||
if ( this.AvailableLangs.length > 0 )
|
||||
{
|
||||
var sLang ;
|
||||
|
||||
// Check if the plugin has the language file for the active language.
|
||||
if ( this.AvailableLangs.indexOf( FCKLanguageManager.ActiveLanguage.Code ) >= 0 )
|
||||
sLang = FCKLanguageManager.ActiveLanguage.Code ;
|
||||
else
|
||||
// Load the default language file (first one) if the current one is not available.
|
||||
sLang = this.AvailableLangs[0] ;
|
||||
|
||||
// Add the main plugin script.
|
||||
LoadScript( this.Path + 'lang/' + sLang + '.js' ) ;
|
||||
}
|
||||
|
||||
// Add the main plugin script.
|
||||
LoadScript( this.Path + 'fckplugin.js' ) ;
|
||||
}
|
||||
@ -1,350 +0,0 @@
|
||||
/*
|
||||
* 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: fckspecialcombo.js
|
||||
* FCKSpecialCombo Class: represents a special combo.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKSpecialCombo = function( caption, fieldWidth, panelWidth, panelMaxHeight, parentWindow )
|
||||
{
|
||||
// Default properties values.
|
||||
this.FieldWidth = fieldWidth || 100 ;
|
||||
this.PanelWidth = panelWidth || 150 ;
|
||||
this.PanelMaxHeight = panelMaxHeight || 150 ;
|
||||
this.Label = ' ' ;
|
||||
this.Caption = caption ;
|
||||
this.Tooltip = caption ;
|
||||
this.Style = FCK_TOOLBARITEM_ICONTEXT ;
|
||||
|
||||
this.Enabled = true ;
|
||||
|
||||
this.Items = new Object() ;
|
||||
|
||||
this._Panel = new FCKPanel( parentWindow || window, true ) ;
|
||||
this._Panel.AppendStyleSheet( FCKConfig.SkinPath + 'fck_editor.css' ) ;
|
||||
this._PanelBox = this._Panel.MainNode.appendChild( this._Panel.Document.createElement( 'DIV' ) ) ;
|
||||
this._PanelBox.className = 'SC_Panel' ;
|
||||
this._PanelBox.style.width = this.PanelWidth + 'px' ;
|
||||
|
||||
this._PanelBox.innerHTML = '<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>' ;
|
||||
|
||||
this._ItemsHolderEl = this._PanelBox.getElementsByTagName('TD')[0] ;
|
||||
|
||||
if ( FCK.IECleanup )
|
||||
FCK.IECleanup.AddItem( this, FCKSpecialCombo_Cleanup ) ;
|
||||
|
||||
// this._Panel.StyleSheet = FCKConfig.SkinPath + 'fck_contextmenu.css' ;
|
||||
// this._Panel.Create() ;
|
||||
// this._Panel.PanelDiv.className += ' SC_Panel' ;
|
||||
// this._Panel.PanelDiv.innerHTML = '<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>' ;
|
||||
// this._ItemsHolderEl = this._Panel.PanelDiv.getElementsByTagName('TD')[0] ;
|
||||
}
|
||||
|
||||
function FCKSpecialCombo_ItemOnMouseOver()
|
||||
{
|
||||
this.className += ' SC_ItemOver' ;
|
||||
}
|
||||
|
||||
function FCKSpecialCombo_ItemOnMouseOut()
|
||||
{
|
||||
this.className = this.originalClass ;
|
||||
}
|
||||
|
||||
function FCKSpecialCombo_ItemOnClick()
|
||||
{
|
||||
this.className = this.originalClass ;
|
||||
|
||||
this.FCKSpecialCombo._Panel.Hide() ;
|
||||
|
||||
this.FCKSpecialCombo.SetLabel( this.FCKItemLabel ) ;
|
||||
|
||||
if ( typeof( this.FCKSpecialCombo.OnSelect ) == 'function' )
|
||||
this.FCKSpecialCombo.OnSelect( this.FCKItemID, this ) ;
|
||||
}
|
||||
|
||||
FCKSpecialCombo.prototype.AddItem = function( id, html, label, bgColor )
|
||||
{
|
||||
// <div class="SC_Item" onmouseover="this.className='SC_Item SC_ItemOver';" onmouseout="this.className='SC_Item';"><b>Bold 1</b></div>
|
||||
var oDiv = this._ItemsHolderEl.appendChild( this._Panel.Document.createElement( 'DIV' ) ) ;
|
||||
oDiv.className = oDiv.originalClass = 'SC_Item' ;
|
||||
oDiv.innerHTML = html ;
|
||||
oDiv.FCKItemID = id ;
|
||||
oDiv.FCKItemLabel = label || id ;
|
||||
oDiv.FCKSpecialCombo = this ;
|
||||
oDiv.Selected = false ;
|
||||
|
||||
// In IE, the width must be set so the borders are shown correctly when the content overflows.
|
||||
if ( FCKBrowserInfo.IsIE )
|
||||
oDiv.style.width = '100%' ;
|
||||
|
||||
if ( bgColor )
|
||||
oDiv.style.backgroundColor = bgColor ;
|
||||
|
||||
oDiv.onmouseover = FCKSpecialCombo_ItemOnMouseOver ;
|
||||
oDiv.onmouseout = FCKSpecialCombo_ItemOnMouseOut ;
|
||||
oDiv.onclick = FCKSpecialCombo_ItemOnClick ;
|
||||
|
||||
this.Items[ id.toString().toLowerCase() ] = oDiv ;
|
||||
|
||||
return oDiv ;
|
||||
}
|
||||
|
||||
FCKSpecialCombo.prototype.SelectItem = function( itemId )
|
||||
{
|
||||
itemId = itemId ? itemId.toString().toLowerCase() : '' ;
|
||||
|
||||
var oDiv = this.Items[ itemId ] ;
|
||||
if ( oDiv )
|
||||
{
|
||||
oDiv.className = oDiv.originalClass = 'SC_ItemSelected' ;
|
||||
oDiv.Selected = true ;
|
||||
}
|
||||
}
|
||||
|
||||
FCKSpecialCombo.prototype.SelectItemByLabel = function( itemLabel, setLabel )
|
||||
{
|
||||
for ( var id in this.Items )
|
||||
{
|
||||
var oDiv = this.Items[id] ;
|
||||
|
||||
if ( oDiv.FCKItemLabel == itemLabel )
|
||||
{
|
||||
oDiv.className = oDiv.originalClass = 'SC_ItemSelected' ;
|
||||
oDiv.Selected = true ;
|
||||
|
||||
if ( setLabel )
|
||||
this.SetLabel( itemLabel ) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FCKSpecialCombo.prototype.DeselectAll = function( clearLabel )
|
||||
{
|
||||
for ( var i in this.Items )
|
||||
{
|
||||
this.Items[i].className = this.Items[i].originalClass = 'SC_Item' ;
|
||||
this.Items[i].Selected = false ;
|
||||
}
|
||||
|
||||
if ( clearLabel )
|
||||
this.SetLabel( '' ) ;
|
||||
}
|
||||
|
||||
FCKSpecialCombo.prototype.SetLabelById = function( id )
|
||||
{
|
||||
id = id ? id.toString().toLowerCase() : '' ;
|
||||
|
||||
var oDiv = this.Items[ id ] ;
|
||||
this.SetLabel( oDiv ? oDiv.FCKItemLabel : '' ) ;
|
||||
}
|
||||
|
||||
FCKSpecialCombo.prototype.SetLabel = function( text )
|
||||
{
|
||||
this.Label = text.length == 0 ? ' ' : text ;
|
||||
|
||||
if ( this._LabelEl )
|
||||
this._LabelEl.innerHTML = this.Label ;
|
||||
}
|
||||
|
||||
FCKSpecialCombo.prototype.SetEnabled = function( isEnabled )
|
||||
{
|
||||
this.Enabled = isEnabled ;
|
||||
|
||||
this._OuterTable.className = isEnabled ? '' : 'SC_FieldDisabled' ;
|
||||
}
|
||||
|
||||
FCKSpecialCombo.prototype.Create = function( targetElement )
|
||||
{
|
||||
var eOuterTable = this._OuterTable = targetElement.appendChild( targetElement.ownerDocument.createElement( 'TABLE' ) ) ;
|
||||
eOuterTable.cellPadding = 0 ;
|
||||
eOuterTable.cellSpacing = 0 ;
|
||||
|
||||
eOuterTable.insertRow(-1) ;
|
||||
|
||||
var sClass ;
|
||||
var bShowLabel ;
|
||||
|
||||
switch ( this.Style )
|
||||
{
|
||||
case FCK_TOOLBARITEM_ONLYICON :
|
||||
sClass = 'TB_ButtonType_Icon' ;
|
||||
bShowLabel = false;
|
||||
break ;
|
||||
case FCK_TOOLBARITEM_ONLYTEXT :
|
||||
sClass = 'TB_ButtonType_Text' ;
|
||||
bShowLabel = false;
|
||||
break ;
|
||||
case FCK_TOOLBARITEM_ICONTEXT :
|
||||
bShowLabel = true;
|
||||
break ;
|
||||
}
|
||||
|
||||
if ( this.Caption && this.Caption.length > 0 && bShowLabel )
|
||||
{
|
||||
var oCaptionCell = eOuterTable.rows[0].insertCell(-1) ;
|
||||
oCaptionCell.innerHTML = this.Caption ;
|
||||
oCaptionCell.className = 'SC_FieldCaption' ;
|
||||
}
|
||||
|
||||
// Create the main DIV element.
|
||||
var oField = eOuterTable.rows[0].insertCell(-1).appendChild( targetElement.ownerDocument.createElement( 'DIV' ) ) ;
|
||||
if ( bShowLabel )
|
||||
{
|
||||
oField.className = 'SC_Field' ;
|
||||
oField.style.width = this.FieldWidth + 'px' ;
|
||||
oField.innerHTML = '<table width="100%" cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldLabel"><label> </label></td><td class="SC_FieldButton"> </td></tr></tbody></table>' ;
|
||||
|
||||
this._LabelEl = oField.getElementsByTagName('label')[0] ; // Memory Leak
|
||||
this._LabelEl.innerHTML = this.Label ;
|
||||
}
|
||||
else
|
||||
{
|
||||
oField.className = 'TB_Button_Off' ;
|
||||
//oField.innerHTML = '<span className="SC_FieldCaption">' + this.Caption + '<table cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldButton" style="border-left: none;"> </td></tr></tbody></table>' ;
|
||||
//oField.innerHTML = '<table cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldButton" style="border-left: none;"> </td></tr></tbody></table>' ;
|
||||
|
||||
// Gets the correct CSS class to use for the specified style (param).
|
||||
oField.innerHTML = '<table title="' + this.Tooltip + '" class="' + sClass + '" cellspacing="0" cellpadding="0" border="0">' +
|
||||
'<tr>' +
|
||||
//'<td class="TB_Icon"><img src="' + FCKConfig.SkinPath + 'toolbar/' + this.Command.Name.toLowerCase() + '.gif" width="21" height="21"></td>' +
|
||||
'<td><img class="TB_Button_Padding" src="' + FCK_SPACER_PATH + '" /></td>' +
|
||||
'<td class="TB_Text">' + this.Caption + '</td>' +
|
||||
'<td><img class="TB_Button_Padding" src="' + FCK_SPACER_PATH + '" /></td>' +
|
||||
'<td class="TB_ButtonArrow"><img src="' + FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif" width="5" height="3"></td>' +
|
||||
'<td><img class="TB_Button_Padding" src="' + FCK_SPACER_PATH + '" /></td>' +
|
||||
'</tr>' +
|
||||
'</table>' ;
|
||||
}
|
||||
|
||||
|
||||
// Events Handlers
|
||||
|
||||
oField.SpecialCombo = this ;
|
||||
|
||||
oField.onmouseover = FCKSpecialCombo_OnMouseOver ;
|
||||
oField.onmouseout = FCKSpecialCombo_OnMouseOut ;
|
||||
oField.onclick = FCKSpecialCombo_OnClick ;
|
||||
|
||||
FCKTools.DisableSelection( this._Panel.Document.body ) ;
|
||||
}
|
||||
|
||||
function FCKSpecialCombo_Cleanup()
|
||||
{
|
||||
this._LabelEl = null ;
|
||||
this._OuterTable = null ;
|
||||
this._ItemsHolderEl = null ;
|
||||
this._PanelBox = null ;
|
||||
|
||||
if ( this.Items )
|
||||
{
|
||||
for ( var key in this.Items )
|
||||
this.Items[key] = null ;
|
||||
}
|
||||
}
|
||||
|
||||
function FCKSpecialCombo_OnMouseOver()
|
||||
{
|
||||
if ( this.SpecialCombo.Enabled )
|
||||
{
|
||||
switch ( this.SpecialCombo.Style )
|
||||
{
|
||||
case FCK_TOOLBARITEM_ONLYICON :
|
||||
this.className = 'TB_Button_On_Over';
|
||||
break ;
|
||||
case FCK_TOOLBARITEM_ONLYTEXT :
|
||||
this.className = 'TB_Button_On_Over';
|
||||
break ;
|
||||
case FCK_TOOLBARITEM_ICONTEXT :
|
||||
this.className = 'SC_Field SC_FieldOver' ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function FCKSpecialCombo_OnMouseOut()
|
||||
{
|
||||
switch ( this.SpecialCombo.Style )
|
||||
{
|
||||
case FCK_TOOLBARITEM_ONLYICON :
|
||||
this.className = 'TB_Button_Off';
|
||||
break ;
|
||||
case FCK_TOOLBARITEM_ONLYTEXT :
|
||||
this.className = 'TB_Button_Off';
|
||||
break ;
|
||||
case FCK_TOOLBARITEM_ICONTEXT :
|
||||
this.className='SC_Field' ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
|
||||
function FCKSpecialCombo_OnClick( e )
|
||||
{
|
||||
// For Mozilla we must stop the event propagation to avoid it hiding
|
||||
// the panel because of a click outside of it.
|
||||
// if ( e )
|
||||
// {
|
||||
// e.stopPropagation() ;
|
||||
// FCKPanelEventHandlers.OnDocumentClick( e ) ;
|
||||
// }
|
||||
|
||||
var oSpecialCombo = this.SpecialCombo ;
|
||||
|
||||
if ( oSpecialCombo.Enabled )
|
||||
{
|
||||
var oPanel = oSpecialCombo._Panel ;
|
||||
var oPanelBox = oSpecialCombo._PanelBox ;
|
||||
var oItemsHolder = oSpecialCombo._ItemsHolderEl ;
|
||||
var iMaxHeight = oSpecialCombo.PanelMaxHeight ;
|
||||
|
||||
if ( oSpecialCombo.OnBeforeClick )
|
||||
oSpecialCombo.OnBeforeClick( oSpecialCombo ) ;
|
||||
|
||||
// This is a tricky thing. We must call the "Load" function, otherwise
|
||||
// it will not be possible to retrieve "oItemsHolder.offsetHeight" (IE only).
|
||||
if ( FCKBrowserInfo.IsIE )
|
||||
oPanel.Preload( 0, this.offsetHeight, this ) ;
|
||||
|
||||
if ( oItemsHolder.offsetHeight > iMaxHeight )
|
||||
// {
|
||||
oPanelBox.style.height = iMaxHeight + 'px' ;
|
||||
|
||||
// if ( FCKBrowserInfo.IsGecko )
|
||||
// oPanelBox.style.overflow = '-moz-scrollbars-vertical' ;
|
||||
// }
|
||||
else
|
||||
oPanelBox.style.height = '' ;
|
||||
|
||||
// oPanel.PanelDiv.style.width = oSpecialCombo.PanelWidth + 'px' ;
|
||||
|
||||
oPanel.Show( 0, this.offsetHeight, this ) ;
|
||||
}
|
||||
|
||||
// return false ;
|
||||
}
|
||||
|
||||
/*
|
||||
Sample Combo Field HTML output:
|
||||
|
||||
<div class="SC_Field" style="width: 80px;">
|
||||
<table width="100%" cellpadding="0" cellspacing="0" style="table-layout: fixed;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="SC_FieldLabel"><label> </label></td>
|
||||
<td class="SC_FieldButton"> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
*/
|
||||
@ -1,55 +0,0 @@
|
||||
/*
|
||||
* 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: fckstyledef.js
|
||||
* FCKStyleDef Class: represents a single style definition.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKStyleDef = function( name, element )
|
||||
{
|
||||
this.Name = name ;
|
||||
this.Element = element.toUpperCase() ;
|
||||
this.IsObjectElement = FCKRegexLib.ObjectElements.test( this.Element ) ;
|
||||
this.Attributes = new Object() ;
|
||||
}
|
||||
|
||||
FCKStyleDef.prototype.AddAttribute = function( name, value )
|
||||
{
|
||||
this.Attributes[ name ] = value ;
|
||||
}
|
||||
|
||||
FCKStyleDef.prototype.GetOpenerTag = function()
|
||||
{
|
||||
var s = '<' + this.Element ;
|
||||
|
||||
for ( var a in this.Attributes )
|
||||
s += ' ' + a + '="' + this.Attributes[a] + '"' ;
|
||||
|
||||
return s + '>' ;
|
||||
}
|
||||
|
||||
FCKStyleDef.prototype.GetCloserTag = function()
|
||||
{
|
||||
return '</' + this.Element + '>' ;
|
||||
}
|
||||
|
||||
|
||||
FCKStyleDef.prototype.RemoveFromSelection = function()
|
||||
{
|
||||
if ( FCKSelection.GetType() == 'Control' )
|
||||
this._RemoveMe( FCK.ToolbarSet.CurrentInstance.Selection.GetSelectedElement() ) ;
|
||||
else
|
||||
this._RemoveMe( FCK.ToolbarSet.CurrentInstance.Selection.GetParentElement() ) ;
|
||||
}
|
||||
@ -1,116 +0,0 @@
|
||||
/*
|
||||
* 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: fckstyledef_gecko.js
|
||||
* FCKStyleDef Class: represents a single stylke definition. (Gecko specific)
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
FCKStyleDef.prototype.ApplyToSelection = function()
|
||||
{
|
||||
if ( FCKSelection.GetType() == 'Text' && !this.IsObjectElement )
|
||||
{
|
||||
var oSelection = FCK.ToolbarSet.CurrentInstance.EditorWindow.getSelection() ;
|
||||
|
||||
// Create the main element.
|
||||
var e = FCK.ToolbarSet.CurrentInstance.EditorDocument.createElement( this.Element ) ;
|
||||
|
||||
for ( var i = 0 ; i < oSelection.rangeCount ; i++ )
|
||||
{
|
||||
e.appendChild( oSelection.getRangeAt(i).extractContents() ) ;
|
||||
}
|
||||
|
||||
// Set the attributes.
|
||||
this._AddAttributes( e ) ;
|
||||
|
||||
// Remove the duplicated elements.
|
||||
this._RemoveDuplicates( e ) ;
|
||||
|
||||
var oRange = oSelection.getRangeAt(0) ;
|
||||
oRange.insertNode( e ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
var oControl = FCK.ToolbarSet.CurrentInstance.Selection.GetSelectedElement() ;
|
||||
if ( oControl.tagName == this.Element )
|
||||
this._AddAttributes( oControl ) ;
|
||||
}
|
||||
}
|
||||
|
||||
FCKStyleDef.prototype._AddAttributes = function( targetElement )
|
||||
{
|
||||
for ( var a in this.Attributes )
|
||||
{
|
||||
switch ( a.toLowerCase() )
|
||||
{
|
||||
case 'src' :
|
||||
targetElement.setAttribute( '_fcksavedurl', this.Attributes[a], 0 ) ;
|
||||
|
||||
default :
|
||||
targetElement.setAttribute( a, this.Attributes[a], 0 ) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FCKStyleDef.prototype._RemoveDuplicates = function( parent )
|
||||
{
|
||||
for ( var i = 0 ; i < parent.childNodes.length ; i++ )
|
||||
{
|
||||
var oChild = parent.childNodes[i] ;
|
||||
|
||||
if ( oChild.nodeType != 1 )
|
||||
continue ;
|
||||
|
||||
this._RemoveDuplicates( oChild ) ;
|
||||
|
||||
if ( this.IsEqual( oChild ) )
|
||||
FCKTools.RemoveOuterTags( oChild ) ;
|
||||
}
|
||||
}
|
||||
|
||||
FCKStyleDef.prototype.IsEqual = function( e )
|
||||
{
|
||||
if ( e.tagName != this.Element )
|
||||
return false ;
|
||||
|
||||
for ( var a in this.Attributes )
|
||||
{
|
||||
if ( e.getAttribute( a ) != this.Attributes[a] )
|
||||
return false ;
|
||||
}
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
FCKStyleDef.prototype._RemoveMe = function( elementToCheck )
|
||||
{
|
||||
if ( ! elementToCheck )
|
||||
return ;
|
||||
|
||||
var oParent = elementToCheck.parentNode ;
|
||||
|
||||
if ( elementToCheck.nodeType == 1 && this.IsEqual( elementToCheck ) )
|
||||
{
|
||||
if ( this.IsObjectElement )
|
||||
{
|
||||
for ( var a in this.Attributes )
|
||||
elementToCheck.removeAttribute( a, 0 ) ;
|
||||
return ;
|
||||
}
|
||||
else
|
||||
FCKTools.RemoveOuterTags( elementToCheck ) ;
|
||||
}
|
||||
|
||||
this._RemoveMe( oParent ) ;
|
||||
}
|
||||
@ -1,139 +0,0 @@
|
||||
/*
|
||||
* 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: fckstyledef_ie.js
|
||||
* FCKStyleDef Class: represents a single stylke definition. (IE specific)
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
FCKStyleDef.prototype.ApplyToSelection = function()
|
||||
{
|
||||
var oSelection = FCK.ToolbarSet.CurrentInstance.EditorDocument.selection ;
|
||||
|
||||
if ( oSelection.type == 'Text' )
|
||||
{
|
||||
var oRange = oSelection.createRange() ;
|
||||
|
||||
// Create the main element.
|
||||
var e = document.createElement( this.Element ) ;
|
||||
e.innerHTML = oRange.htmlText ;
|
||||
|
||||
// Set the attributes.
|
||||
this._AddAttributes( e ) ;
|
||||
|
||||
// Remove the duplicated elements.
|
||||
this._RemoveDuplicates( e ) ;
|
||||
|
||||
// Replace the selection with the resulting HTML.
|
||||
oRange.pasteHTML( e.outerHTML ) ;
|
||||
}
|
||||
else if ( oSelection.type == 'Control' )
|
||||
{
|
||||
var oControl = FCK.ToolbarSet.CurrentInstance.Selection.GetSelectedElement() ;
|
||||
if ( oControl.tagName == this.Element )
|
||||
this._AddAttributes( oControl ) ;
|
||||
}
|
||||
}
|
||||
|
||||
FCKStyleDef.prototype._AddAttributes = function( targetElement )
|
||||
{
|
||||
for ( var a in this.Attributes )
|
||||
{
|
||||
switch ( a.toLowerCase() )
|
||||
{
|
||||
case 'style' :
|
||||
targetElement.style.cssText = this.Attributes[a] ;
|
||||
break ;
|
||||
|
||||
case 'class' :
|
||||
targetElement.setAttribute( 'className', this.Attributes[a], 0 ) ;
|
||||
break ;
|
||||
|
||||
case 'src' :
|
||||
targetElement.setAttribute( '_fcksavedurl', this.Attributes[a], 0 ) ;
|
||||
|
||||
default :
|
||||
targetElement.setAttribute( a, this.Attributes[a], 0 ) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FCKStyleDef.prototype._RemoveDuplicates = function( parent )
|
||||
{
|
||||
for ( var i = 0 ; i < parent.children.length ; i++ )
|
||||
{
|
||||
var oChild = parent.children[i] ;
|
||||
this._RemoveDuplicates( oChild ) ;
|
||||
|
||||
if ( this.IsEqual( oChild ) )
|
||||
FCKTools.RemoveOuterTags( oChild ) ;
|
||||
}
|
||||
}
|
||||
|
||||
FCKStyleDef.prototype.IsEqual = function( e )
|
||||
{
|
||||
if ( e.tagName != this.Element )
|
||||
return false ;
|
||||
|
||||
for ( var a in this.Attributes )
|
||||
{
|
||||
switch ( a.toLowerCase() )
|
||||
{
|
||||
case 'style' :
|
||||
if ( e.style.cssText.toLowerCase() != this.Attributes[a].toLowerCase() )
|
||||
return false ;
|
||||
break ;
|
||||
case 'class' :
|
||||
if ( e.getAttribute( 'className', 0 ) != this.Attributes[a] )
|
||||
return false ;
|
||||
break ;
|
||||
default :
|
||||
if ( e.getAttribute( a, 0 ) != this.Attributes[a] )
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
FCKStyleDef.prototype._RemoveMe = function( elementToCheck )
|
||||
{
|
||||
if ( ! elementToCheck )
|
||||
return ;
|
||||
|
||||
var oParent = elementToCheck.parentElement ;
|
||||
|
||||
if ( this.IsEqual( elementToCheck ) )
|
||||
{
|
||||
if ( this.IsObjectElement )
|
||||
{
|
||||
for ( var a in this.Attributes )
|
||||
{
|
||||
switch ( a.toLowerCase() )
|
||||
{
|
||||
case 'class' :
|
||||
elementToCheck.removeAttribute( 'className', 0 ) ;
|
||||
break ;
|
||||
default :
|
||||
elementToCheck.removeAttribute( a, 0 ) ;
|
||||
}
|
||||
}
|
||||
return ;
|
||||
}
|
||||
else
|
||||
FCKTools.RemoveOuterTags( elementToCheck ) ;
|
||||
}
|
||||
|
||||
this._RemoveMe( oParent ) ;
|
||||
}
|
||||
@ -1,84 +0,0 @@
|
||||
/*
|
||||
* 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: fckstylesloader.js
|
||||
* FCKStylesLoader Class: this class define objects that are responsible
|
||||
* for loading the styles defined in the XML file.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKStylesLoader = function()
|
||||
{
|
||||
this.Styles = new Object() ;
|
||||
this.StyleGroups = new Object() ;
|
||||
this.Loaded = false ;
|
||||
this.HasObjectElements = false ;
|
||||
}
|
||||
|
||||
FCKStylesLoader.prototype.Load = function( stylesXmlUrl )
|
||||
{
|
||||
// Load the XML file into a FCKXml object.
|
||||
var oXml = new FCKXml() ;
|
||||
oXml.LoadUrl( stylesXmlUrl ) ;
|
||||
|
||||
// Get the "Style" nodes defined in the XML file.
|
||||
var aStyleNodes = oXml.SelectNodes( 'Styles/Style' ) ;
|
||||
|
||||
// Add each style to our "Styles" collection.
|
||||
for ( var i = 0 ; i < aStyleNodes.length ; i++ )
|
||||
{
|
||||
var sElement = aStyleNodes[i].attributes.getNamedItem('element').value.toUpperCase() ;
|
||||
|
||||
// Create the style definition object.
|
||||
var oStyleDef = new FCKStyleDef( aStyleNodes[i].attributes.getNamedItem('name').value, sElement ) ;
|
||||
|
||||
if ( oStyleDef.IsObjectElement )
|
||||
this.HasObjectElements = true ;
|
||||
|
||||
// Get the attributes defined for the style (if any).
|
||||
var aAttNodes = oXml.SelectNodes( 'Attribute', aStyleNodes[i] ) ;
|
||||
|
||||
// Add the attributes to the style definition object.
|
||||
for ( var j = 0 ; j < aAttNodes.length ; j++ )
|
||||
{
|
||||
var sAttName = aAttNodes[j].attributes.getNamedItem('name').value ;
|
||||
var sAttValue = aAttNodes[j].attributes.getNamedItem('value').value ;
|
||||
|
||||
// IE changes the "style" attribute value when applied to an element
|
||||
// so we must get the final resulting value (for comparision issues).
|
||||
if ( sAttName.toLowerCase() == 'style' )
|
||||
{
|
||||
var oTempE = document.createElement( 'SPAN' ) ;
|
||||
oTempE.style.cssText = sAttValue ;
|
||||
sAttValue = oTempE.style.cssText ;
|
||||
}
|
||||
|
||||
oStyleDef.AddAttribute( sAttName, sAttValue ) ;
|
||||
}
|
||||
|
||||
// Add the style to the "Styles" collection using it's name as the key.
|
||||
this.Styles[ oStyleDef.Name ] = oStyleDef ;
|
||||
|
||||
// Add the style to the "StyleGroups" collection.
|
||||
var aGroup = this.StyleGroups[sElement] ;
|
||||
if ( aGroup == null )
|
||||
{
|
||||
this.StyleGroups[sElement] = new Array() ;
|
||||
aGroup = this.StyleGroups[sElement] ;
|
||||
}
|
||||
aGroup[aGroup.length] = oStyleDef ;
|
||||
}
|
||||
|
||||
this.Loaded = true ;
|
||||
}
|
||||
@ -1,116 +0,0 @@
|
||||
/*
|
||||
* 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: fcktoolbar.js
|
||||
* FCKToolbar Class: represents a toolbar in the toolbarset. It is a group of
|
||||
* toolbar items.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKToolbar = function()
|
||||
{
|
||||
this.Items = new Array() ;
|
||||
|
||||
if ( FCK.IECleanup )
|
||||
FCK.IECleanup.AddItem( this, FCKToolbar_Cleanup ) ;
|
||||
}
|
||||
|
||||
FCKToolbar.prototype.AddItem = function( item )
|
||||
{
|
||||
return this.Items[ this.Items.length ] = item ;
|
||||
}
|
||||
|
||||
FCKToolbar.prototype.AddButton = function( name, label, tooltip, iconPathOrStripInfoArrayOrIndex, style, state )
|
||||
{
|
||||
if ( typeof( iconPathOrStripInfoArrayOrIndex ) == 'number' )
|
||||
iconPathOrStripInfoArrayOrIndex = [ this.DefaultIconsStrip, this.DefaultIconSize, iconPathOrStripInfoArrayOrIndex ] ;
|
||||
|
||||
var oButton = new FCKToolbarButtonUI( name, label, tooltip, iconPathOrStripInfoArrayOrIndex, style, state ) ;
|
||||
oButton._FCKToolbar = this ;
|
||||
oButton.OnClick = FCKToolbar_OnItemClick ;
|
||||
|
||||
return this.AddItem( oButton ) ;
|
||||
}
|
||||
|
||||
function FCKToolbar_OnItemClick( item )
|
||||
{
|
||||
var oToolbar = item._FCKToolbar ;
|
||||
|
||||
if ( oToolbar.OnItemClick )
|
||||
oToolbar.OnItemClick( oToolbar, item ) ;
|
||||
}
|
||||
|
||||
FCKToolbar.prototype.AddSeparator = function()
|
||||
{
|
||||
this.AddItem( new FCKToolbarSeparator() ) ;
|
||||
}
|
||||
|
||||
FCKToolbar.prototype.Create = function( parentElement )
|
||||
{
|
||||
if ( this.MainElement )
|
||||
{
|
||||
// this._Cleanup() ;
|
||||
if ( this.MainElement.parentNode )
|
||||
this.MainElement.parentNode.removeChild( this.MainElement ) ;
|
||||
this.MainElement = null ;
|
||||
}
|
||||
|
||||
var oDoc = parentElement.ownerDocument ; // This is IE 6+
|
||||
|
||||
var e = this.MainElement = oDoc.createElement( 'table' ) ;
|
||||
e.className = 'TB_Toolbar' ;
|
||||
e.style.styleFloat = e.style.cssFloat = ( FCKLang.Dir == 'ltr' ? 'left' : 'right' ) ;
|
||||
e.dir = FCKLang.Dir ;
|
||||
e.cellPadding = 0 ;
|
||||
e.cellSpacing = 0 ;
|
||||
|
||||
this.RowElement = e.insertRow(-1) ;
|
||||
|
||||
// Insert the start cell.
|
||||
var eCell ;
|
||||
|
||||
if ( !this.HideStart )
|
||||
{
|
||||
eCell = this.RowElement.insertCell(-1) ;
|
||||
eCell.appendChild( oDoc.createElement( 'div' ) ).className = 'TB_Start' ;
|
||||
}
|
||||
|
||||
for ( var i = 0 ; i < this.Items.length ; i++ )
|
||||
{
|
||||
this.Items[i].Create( this.RowElement.insertCell(-1) ) ;
|
||||
}
|
||||
|
||||
// Insert the ending cell.
|
||||
if ( !this.HideEnd )
|
||||
{
|
||||
eCell = this.RowElement.insertCell(-1) ;
|
||||
eCell.appendChild( oDoc.createElement( 'div' ) ).className = 'TB_End' ;
|
||||
}
|
||||
|
||||
parentElement.appendChild( e ) ;
|
||||
}
|
||||
|
||||
function FCKToolbar_Cleanup()
|
||||
{
|
||||
this.MainElement = null ;
|
||||
this.RowElement = null ;
|
||||
}
|
||||
|
||||
var FCKToolbarSeparator = function()
|
||||
{}
|
||||
|
||||
FCKToolbarSeparator.prototype.Create = function( parentElement )
|
||||
{
|
||||
parentElement.appendChild( parentElement.ownerDocument.createElement( 'div' ) ).className = 'TB_Separator' ;
|
||||
}
|
||||
@ -1,32 +0,0 @@
|
||||
/*
|
||||
* 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: fcktoolbarbreak_gecko.js
|
||||
* FCKToolbarBreak Class: breaks the toolbars.
|
||||
* It makes it possible to force the toolbar to break to a new line.
|
||||
* This is the Gecko specific implementation.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKToolbarBreak = function()
|
||||
{}
|
||||
|
||||
FCKToolbarBreak.prototype.Create = function( targetElement )
|
||||
{
|
||||
var oBreakDiv = targetElement.ownerDocument.createElement( 'div' ) ;
|
||||
|
||||
oBreakDiv.style.clear = oBreakDiv.style.cssFloat = FCKLang.Dir == 'rtl' ? 'right' : 'left' ;
|
||||
|
||||
targetElement.appendChild( oBreakDiv ) ;
|
||||
}
|
||||
@ -1,34 +0,0 @@
|
||||
/*
|
||||
* 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: fcktoolbarbreak_ie.js
|
||||
* FCKToolbarBreak Class: breaks the toolbars.
|
||||
* It makes it possible to force the toolbar to brak to a new line.
|
||||
* This is the IE specific implementation.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKToolbarBreak = function()
|
||||
{}
|
||||
|
||||
FCKToolbarBreak.prototype.Create = function( targetElement )
|
||||
{
|
||||
var oBreakDiv = targetElement.ownerDocument.createElement( 'div' ) ;
|
||||
|
||||
oBreakDiv.className = 'TB_Break' ;
|
||||
|
||||
oBreakDiv.style.clear = FCKLang.Dir == 'rtl' ? 'left' : 'right' ;
|
||||
|
||||
targetElement.appendChild( oBreakDiv ) ;
|
||||
}
|
||||
@ -1,70 +0,0 @@
|
||||
/*
|
||||
* 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: fcktoolbarbutton.js
|
||||
* FCKToolbarButton Class: represents a button in the toolbar.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKToolbarButton = function( commandName, label, tooltip, style, sourceView, contextSensitive, icon )
|
||||
{
|
||||
this.CommandName = commandName ;
|
||||
this.Label = label ;
|
||||
this.Tooltip = tooltip ;
|
||||
this.Style = style ;
|
||||
this.SourceView = sourceView ? true : false ;
|
||||
this.ContextSensitive = contextSensitive ? true : false ;
|
||||
|
||||
if ( icon == null )
|
||||
this.IconPath = FCKConfig.SkinPath + 'toolbar/' + commandName.toLowerCase() + '.gif' ;
|
||||
else if ( typeof( icon ) == 'number' )
|
||||
this.IconPath = [ FCKConfig.SkinPath + 'fck_strip.gif', 16, icon ] ;
|
||||
}
|
||||
|
||||
FCKToolbarButton.prototype.Create = function( targetElement )
|
||||
{
|
||||
this._UIButton = new FCKToolbarButtonUI( this.CommandName, this.Label, this.Tooltip, this.IconPath, this.Style ) ;
|
||||
this._UIButton.OnClick = this.Click ;
|
||||
this._UIButton._ToolbarButton = this ;
|
||||
this._UIButton.Create( targetElement ) ;
|
||||
}
|
||||
|
||||
FCKToolbarButton.prototype.RefreshState = function()
|
||||
{
|
||||
// Gets the actual state.
|
||||
var eState = FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName ).GetState() ;
|
||||
|
||||
// If there are no state changes than do nothing and return.
|
||||
if ( eState == this._UIButton.State ) return ;
|
||||
|
||||
// Sets the actual state.
|
||||
this._UIButton.ChangeState( eState ) ;
|
||||
}
|
||||
|
||||
FCKToolbarButton.prototype.Click = function()
|
||||
{
|
||||
var oToolbarButton = this._ToolbarButton || this ;
|
||||
FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( oToolbarButton.CommandName ).Execute() ;
|
||||
}
|
||||
|
||||
FCKToolbarButton.prototype.Enable = function()
|
||||
{
|
||||
this.RefreshState() ;
|
||||
}
|
||||
|
||||
FCKToolbarButton.prototype.Disable = function()
|
||||
{
|
||||
// Sets the actual state.
|
||||
this._UIButton.ChangeState( FCK_TRISTATE_DISABLED ) ;
|
||||
}
|
||||
@ -1,218 +0,0 @@
|
||||
/*
|
||||
* 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: fcktoolbarbuttonui.js
|
||||
* FCKToolbarButtonUI Class: interface representation of a toolbar button.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKToolbarButtonUI = function( name, label, tooltip, iconPathOrStripInfoArray, style, state )
|
||||
{
|
||||
this.Name = name ;
|
||||
this.Label = label || name ;
|
||||
this.Tooltip = tooltip || this.Label ;
|
||||
this.Style = style || FCK_TOOLBARITEM_ONLYICON ;
|
||||
this.State = state || FCK_TRISTATE_OFF ;
|
||||
|
||||
this.Icon = new FCKIcon( iconPathOrStripInfoArray ) ;
|
||||
|
||||
if ( FCK.IECleanup )
|
||||
FCK.IECleanup.AddItem( this, FCKToolbarButtonUI_Cleanup ) ;
|
||||
}
|
||||
|
||||
|
||||
FCKToolbarButtonUI.prototype._CreatePaddingElement = function( document )
|
||||
{
|
||||
var oImg = document.createElement( 'IMG' ) ;
|
||||
oImg.className = 'TB_Button_Padding' ;
|
||||
oImg.src = FCK_SPACER_PATH ;
|
||||
return oImg ;
|
||||
}
|
||||
|
||||
FCKToolbarButtonUI.prototype.Create = function( parentElement )
|
||||
{
|
||||
var oMainElement = this.MainElement ;
|
||||
|
||||
if ( oMainElement )
|
||||
{
|
||||
FCKToolbarButtonUI_Cleanup.call(this) ;
|
||||
|
||||
if ( oMainElement.parentNode )
|
||||
oMainElement.parentNode.removeChild( oMainElement ) ;
|
||||
oMainElement = this.MainElement = null ;
|
||||
}
|
||||
|
||||
var oDoc = parentElement.ownerDocument ; // This is IE 6+
|
||||
|
||||
// Create the Main Element.
|
||||
oMainElement = this.MainElement = oDoc.createElement( 'DIV' ) ;
|
||||
oMainElement._FCKButton = this ; // IE Memory Leak (Circular reference).
|
||||
oMainElement.title = this.Tooltip ;
|
||||
|
||||
// The following will prevent the button from catching the focus.
|
||||
if ( FCKBrowserInfo.IsGecko )
|
||||
oMainElement.onmousedown = FCKTools.CancelEvent ;
|
||||
|
||||
this.ChangeState( this.State, true ) ;
|
||||
|
||||
if ( this.Style == FCK_TOOLBARITEM_ONLYICON && !this.ShowArrow )
|
||||
{
|
||||
// <td><div class="TB_Button_On" title="Smiley">{Image}</div></td>
|
||||
|
||||
oMainElement.appendChild( this.Icon.CreateIconElement( oDoc ) ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
// <td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td>{Image}</td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td>
|
||||
// <td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td><img class="TB_Button_Padding"></td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td>
|
||||
|
||||
var oTable = oMainElement.appendChild( oDoc.createElement( 'TABLE' ) ) ;
|
||||
oTable.cellPadding = 0 ;
|
||||
oTable.cellSpacing = 0 ;
|
||||
|
||||
var oRow = oTable.insertRow(-1) ;
|
||||
|
||||
// The Image cell (icon or padding).
|
||||
var oCell = oRow.insertCell(-1) ;
|
||||
|
||||
if ( this.Style == FCK_TOOLBARITEM_ONLYICON || this.Style == FCK_TOOLBARITEM_ICONTEXT )
|
||||
oCell.appendChild( this.Icon.CreateIconElement( oDoc ) ) ;
|
||||
else
|
||||
oCell.appendChild( this._CreatePaddingElement( oDoc ) ) ;
|
||||
|
||||
if ( this.Style == FCK_TOOLBARITEM_ONLYTEXT || this.Style == FCK_TOOLBARITEM_ICONTEXT )
|
||||
{
|
||||
// The Text cell.
|
||||
oCell = oRow.insertCell(-1) ;
|
||||
oCell.className = 'TB_Button_Text' ;
|
||||
oCell.noWrap = true ;
|
||||
oCell.appendChild( oDoc.createTextNode( this.Label ) ) ;
|
||||
}
|
||||
|
||||
if ( this.ShowArrow )
|
||||
{
|
||||
if ( this.Style != FCK_TOOLBARITEM_ONLYICON )
|
||||
{
|
||||
// A padding cell.
|
||||
oRow.insertCell(-1).appendChild( this._CreatePaddingElement( oDoc ) ) ;
|
||||
}
|
||||
|
||||
oCell = oRow.insertCell(-1) ;
|
||||
var eImg = oCell.appendChild( oDoc.createElement( 'IMG' ) ) ;
|
||||
eImg.src = FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif' ;
|
||||
eImg.width = 5 ;
|
||||
eImg.height = 3 ;
|
||||
}
|
||||
|
||||
// The last padding cell.
|
||||
oCell = oRow.insertCell(-1) ;
|
||||
oCell.appendChild( this._CreatePaddingElement( oDoc ) ) ;
|
||||
}
|
||||
|
||||
parentElement.appendChild( oMainElement ) ;
|
||||
}
|
||||
|
||||
FCKToolbarButtonUI.prototype.ChangeState = function( newState, force )
|
||||
{
|
||||
if ( !force && this.State == newState )
|
||||
return ;
|
||||
|
||||
var e = this.MainElement ;
|
||||
|
||||
switch ( parseInt( newState ) )
|
||||
{
|
||||
case FCK_TRISTATE_OFF :
|
||||
e.className = 'TB_Button_Off' ;
|
||||
e.onmouseover = FCKToolbarButton_OnMouseOverOff ;
|
||||
e.onmouseout = FCKToolbarButton_OnMouseOutOff ;
|
||||
e.onclick = FCKToolbarButton_OnClick ;
|
||||
|
||||
break ;
|
||||
|
||||
case FCK_TRISTATE_ON :
|
||||
e.className = 'TB_Button_On' ;
|
||||
e.onmouseover = FCKToolbarButton_OnMouseOverOn ;
|
||||
e.onmouseout = FCKToolbarButton_OnMouseOutOn ;
|
||||
e.onclick = FCKToolbarButton_OnClick ;
|
||||
|
||||
break ;
|
||||
|
||||
case FCK_TRISTATE_DISABLED :
|
||||
e.className = 'TB_Button_Disabled' ;
|
||||
e.onmouseover = null ;
|
||||
e.onmouseout = null ;
|
||||
e.onclick = null ;
|
||||
bEnableEvents = false ;
|
||||
break ;
|
||||
}
|
||||
|
||||
this.State = newState ;
|
||||
}
|
||||
|
||||
function FCKToolbarButtonUI_Cleanup()
|
||||
{
|
||||
if ( this.MainElement )
|
||||
{
|
||||
this.MainElement._FCKButton = null ;
|
||||
this.MainElement = null ;
|
||||
}
|
||||
}
|
||||
|
||||
// Event Handlers.
|
||||
|
||||
function FCKToolbarButton_OnMouseOverOn()
|
||||
{
|
||||
this.className = 'TB_Button_On_Over' ;
|
||||
}
|
||||
|
||||
function FCKToolbarButton_OnMouseOutOn()
|
||||
{
|
||||
this.className = 'TB_Button_On' ;
|
||||
}
|
||||
|
||||
function FCKToolbarButton_OnMouseOverOff()
|
||||
{
|
||||
this.className = 'TB_Button_Off_Over' ;
|
||||
}
|
||||
|
||||
function FCKToolbarButton_OnMouseOutOff()
|
||||
{
|
||||
this.className = 'TB_Button_Off' ;
|
||||
}
|
||||
|
||||
function FCKToolbarButton_OnClick( e )
|
||||
{
|
||||
if ( this._FCKButton.OnClick )
|
||||
this._FCKButton.OnClick( this._FCKButton ) ;
|
||||
}
|
||||
|
||||
/*
|
||||
Sample outputs:
|
||||
|
||||
This is the base structure. The variation is the image that is marked as {Image}:
|
||||
<td><div class="TB_Button_On" title="Smiley">{Image}</div></td>
|
||||
<td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td>{Image}</td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td>
|
||||
<td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td><img class="TB_Button_Padding"></td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td>
|
||||
|
||||
These are samples of possible {Image} values:
|
||||
|
||||
Strip - IE version:
|
||||
<div class="TB_Button_Image"><img src="strip.gif" style="top:-16px"></div>
|
||||
|
||||
Strip : Firefox, Safari and Opera version
|
||||
<img class="TB_Button_Image" style="background-position: 0px -16px;background-image: url(strip.gif);">
|
||||
|
||||
No-Strip : Browser independent:
|
||||
<img class="TB_Button_Image" src="smiley.gif">
|
||||
*/
|
||||
@ -1,99 +0,0 @@
|
||||
/*
|
||||
* 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: fcktoolbarfontformatcombo.js
|
||||
* FCKToolbarPanelButton Class: Handles the Fonts combo selector.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKToolbarFontFormatCombo = function( tooltip, style )
|
||||
{
|
||||
this.CommandName = 'FontFormat' ;
|
||||
this.Label = this.GetLabel() ;
|
||||
this.Tooltip = tooltip ? tooltip : this.Label ;
|
||||
this.Style = style ? style : FCK_TOOLBARITEM_ICONTEXT ;
|
||||
|
||||
this.NormalLabel = 'Normal' ;
|
||||
|
||||
this.PanelWidth = 190 ;
|
||||
}
|
||||
|
||||
// Inherit from FCKToolbarSpecialCombo.
|
||||
FCKToolbarFontFormatCombo.prototype = new FCKToolbarSpecialCombo ;
|
||||
|
||||
|
||||
FCKToolbarFontFormatCombo.prototype.GetLabel = function()
|
||||
{
|
||||
return FCKLang.FontFormat ;
|
||||
}
|
||||
|
||||
FCKToolbarFontFormatCombo.prototype.CreateItems = function( targetSpecialCombo )
|
||||
{
|
||||
// Get the format names from the language file.
|
||||
var aNames = FCKLang['FontFormats'].split(';') ;
|
||||
var oNames = {
|
||||
p : aNames[0],
|
||||
pre : aNames[1],
|
||||
address : aNames[2],
|
||||
h1 : aNames[3],
|
||||
h2 : aNames[4],
|
||||
h3 : aNames[5],
|
||||
h4 : aNames[6],
|
||||
h5 : aNames[7],
|
||||
h6 : aNames[8],
|
||||
div : aNames[9]
|
||||
} ;
|
||||
|
||||
// Get the available formats from the configuration file.
|
||||
var aTags = FCKConfig.FontFormats.split(';') ;
|
||||
|
||||
for ( var i = 0 ; i < aTags.length ; i++ )
|
||||
{
|
||||
// Support for DIV in Firefox has been reintroduced on version 2.2.
|
||||
// if ( aTags[i] == 'div' && FCKBrowserInfo.IsGecko )
|
||||
// continue ;
|
||||
|
||||
var sTag = aTags[i] ;
|
||||
var sLabel = oNames[sTag] ;
|
||||
|
||||
if ( sTag == 'p' )
|
||||
this.NormalLabel = sLabel ;
|
||||
|
||||
this._Combo.AddItem( sTag, '<div class="BaseFont"><' + sTag + '>' + sLabel + '</' + sTag + '></div>', sLabel ) ;
|
||||
}
|
||||
}
|
||||
|
||||
if ( FCKBrowserInfo.IsIE )
|
||||
{
|
||||
FCKToolbarFontFormatCombo.prototype.RefreshActiveItems = function( combo, value )
|
||||
{
|
||||
// FCKDebug.Output( 'FCKToolbarFontFormatCombo Value: ' + value ) ;
|
||||
|
||||
// IE returns normal for DIV and P, so to avoid confusion, we will not show it if normal.
|
||||
if ( value == this.NormalLabel )
|
||||
{
|
||||
if ( combo.Label != ' ' )
|
||||
combo.DeselectAll(true) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( this._LastValue == value )
|
||||
return ;
|
||||
|
||||
combo.SelectItemByLabel( value, true ) ;
|
||||
}
|
||||
|
||||
this._LastValue = value ;
|
||||
}
|
||||
}
|
||||
@ -1,43 +0,0 @@
|
||||
/*
|
||||
* 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: fcktoolbarfontscombo.js
|
||||
* FCKToolbarPanelButton Class: Handles the Fonts combo selector.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKToolbarFontsCombo = function( tooltip, style )
|
||||
{
|
||||
this.CommandName = 'FontName' ;
|
||||
this.Label = this.GetLabel() ;
|
||||
this.Tooltip = tooltip ? tooltip : this.Label ;
|
||||
this.Style = style ? style : FCK_TOOLBARITEM_ICONTEXT ;
|
||||
}
|
||||
|
||||
// Inherit from FCKToolbarSpecialCombo.
|
||||
FCKToolbarFontsCombo.prototype = new FCKToolbarSpecialCombo ;
|
||||
|
||||
|
||||
FCKToolbarFontsCombo.prototype.GetLabel = function()
|
||||
{
|
||||
return FCKLang.Font ;
|
||||
}
|
||||
|
||||
FCKToolbarFontsCombo.prototype.CreateItems = function( targetSpecialCombo )
|
||||
{
|
||||
var aFonts = FCKConfig.FontNames.split(';') ;
|
||||
|
||||
for ( var i = 0 ; i < aFonts.length ; i++ )
|
||||
this._Combo.AddItem( aFonts[i], '<font face="' + aFonts[i] + '" style="font-size: 12px">' + aFonts[i] + '</font>' ) ;
|
||||
}
|
||||
@ -1,48 +0,0 @@
|
||||
/*
|
||||
* 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: fcktoolbarfontsizecombo.js
|
||||
* FCKToolbarPanelButton Class: Handles the Fonts combo selector.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKToolbarFontSizeCombo = function( tooltip, style )
|
||||
{
|
||||
this.CommandName = 'FontSize' ;
|
||||
this.Label = this.GetLabel() ;
|
||||
this.Tooltip = tooltip ? tooltip : this.Label ;
|
||||
this.Style = style ? style : FCK_TOOLBARITEM_ICONTEXT ;
|
||||
}
|
||||
|
||||
// Inherit from FCKToolbarSpecialCombo.
|
||||
FCKToolbarFontSizeCombo.prototype = new FCKToolbarSpecialCombo ;
|
||||
|
||||
|
||||
FCKToolbarFontSizeCombo.prototype.GetLabel = function()
|
||||
{
|
||||
return FCKLang.FontSize ;
|
||||
}
|
||||
|
||||
FCKToolbarFontSizeCombo.prototype.CreateItems = function( targetSpecialCombo )
|
||||
{
|
||||
targetSpecialCombo.FieldWidth = 70 ;
|
||||
|
||||
var aSizes = FCKConfig.FontSizes.split(';') ;
|
||||
|
||||
for ( var i = 0 ; i < aSizes.length ; i++ )
|
||||
{
|
||||
var aSizeParts = aSizes[i].split('/') ;
|
||||
this._Combo.AddItem( aSizeParts[0], '<font size="' + aSizeParts[0] + '">' + aSizeParts[1] + '</font>', aSizeParts[1] ) ;
|
||||
}
|
||||
}
|
||||
@ -1,87 +0,0 @@
|
||||
/*
|
||||
* 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: fcktoolbarpanelbutton.js
|
||||
* FCKToolbarPanelButton Class: represents a special button in the toolbar
|
||||
* that shows a panel when pressed.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKToolbarPanelButton = function( commandName, label, tooltip, style, icon )
|
||||
{
|
||||
this.CommandName = commandName ;
|
||||
|
||||
var oIcon ;
|
||||
|
||||
if ( icon == null )
|
||||
oIcon = FCKConfig.SkinPath + 'toolbar/' + commandName.toLowerCase() + '.gif' ;
|
||||
else if ( typeof( icon ) == 'number' )
|
||||
oIcon = [ FCKConfig.SkinPath + 'fck_strip.gif', 16, icon ] ;
|
||||
|
||||
var oUIButton = this._UIButton = new FCKToolbarButtonUI( commandName, label, tooltip, oIcon, style ) ;
|
||||
oUIButton._FCKToolbarPanelButton = this ;
|
||||
oUIButton.ShowArrow = true ;
|
||||
oUIButton.OnClick = FCKToolbarPanelButton_OnButtonClick ;
|
||||
}
|
||||
|
||||
FCKToolbarPanelButton.prototype.TypeName = 'FCKToolbarPanelButton' ;
|
||||
|
||||
FCKToolbarPanelButton.prototype.Create = function( parentElement )
|
||||
{
|
||||
parentElement.className += 'Menu' ;
|
||||
|
||||
this._UIButton.Create( parentElement ) ;
|
||||
|
||||
var oPanel = FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName )._Panel ;
|
||||
oPanel._FCKToolbarPanelButton = this ;
|
||||
|
||||
var eLineDiv = oPanel.Document.body.appendChild( oPanel.Document.createElement( 'div' ) ) ;
|
||||
eLineDiv.style.position = 'absolute' ;
|
||||
eLineDiv.style.top = '0px' ;
|
||||
|
||||
var eLine = this.LineImg = eLineDiv.appendChild( oPanel.Document.createElement( 'IMG' ) ) ;
|
||||
eLine.className = 'TB_ConnectionLine' ;
|
||||
// eLine.style.backgroundColor = 'Red' ;
|
||||
eLine.src = FCK_SPACER_PATH ;
|
||||
|
||||
oPanel.OnHide = FCKToolbarPanelButton_OnPanelHide ;
|
||||
}
|
||||
|
||||
/*
|
||||
Events
|
||||
*/
|
||||
|
||||
function FCKToolbarPanelButton_OnButtonClick( toolbarButton )
|
||||
{
|
||||
var oButton = this._FCKToolbarPanelButton ;
|
||||
var e = oButton._UIButton.MainElement ;
|
||||
|
||||
oButton._UIButton.ChangeState( FCK_TRISTATE_ON ) ;
|
||||
|
||||
oButton.LineImg.style.width = ( e.offsetWidth - 2 ) + 'px' ;
|
||||
|
||||
FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( oButton.CommandName ).Execute( 0, e.offsetHeight - 1, e ) ; // -1 to be over the border
|
||||
}
|
||||
|
||||
function FCKToolbarPanelButton_OnPanelHide()
|
||||
{
|
||||
var oMenuButton = this._FCKToolbarPanelButton ;
|
||||
oMenuButton._UIButton.ChangeState( FCK_TRISTATE_OFF ) ;
|
||||
}
|
||||
|
||||
// The Panel Button works like a normal button so the refresh state functions
|
||||
// defined for the normal button can be reused here.
|
||||
FCKToolbarPanelButton.prototype.RefreshState = FCKToolbarButton.prototype.RefreshState ;
|
||||
FCKToolbarPanelButton.prototype.Enable = FCKToolbarButton.prototype.Enable ;
|
||||
FCKToolbarPanelButton.prototype.Disable = FCKToolbarButton.prototype.Disable ;
|
||||
@ -1,129 +0,0 @@
|
||||
/*
|
||||
* 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: fcktoolbarspecialcombo.js
|
||||
* FCKToolbarSpecialCombo Class: This is a "abstract" base class to be used
|
||||
* by the special combo toolbar elements like font name, font size, paragraph format, etc...
|
||||
*
|
||||
* The following properties and methods must be implemented when inheriting from
|
||||
* this class:
|
||||
* - Property: CommandName [ The command name to be executed ]
|
||||
* - Method: GetLabel() [ Returns the label ]
|
||||
* - CreateItems( targetSpecialCombo ) [ Add all items in the special combo ]
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKToolbarSpecialCombo = function()
|
||||
{
|
||||
this.SourceView = false ;
|
||||
this.ContextSensitive = true ;
|
||||
}
|
||||
|
||||
|
||||
function FCKToolbarSpecialCombo_OnSelect( itemId, item )
|
||||
{
|
||||
FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName ).Execute( itemId, item ) ;
|
||||
}
|
||||
|
||||
FCKToolbarSpecialCombo.prototype.Create = function( targetElement )
|
||||
{
|
||||
this._Combo = new FCKSpecialCombo( this.GetLabel(), this.FieldWidth, this.PanelWidth, this.PanelMaxHeight, FCKBrowserInfo.IsIE ? window : FCKTools.GetElementWindow( targetElement ).parent ) ;
|
||||
|
||||
/*
|
||||
this._Combo.FieldWidth = this.FieldWidth != null ? this.FieldWidth : 100 ;
|
||||
this._Combo.PanelWidth = this.PanelWidth != null ? this.PanelWidth : 150 ;
|
||||
this._Combo.PanelMaxHeight = this.PanelMaxHeight != null ? this.PanelMaxHeight : 150 ;
|
||||
*/
|
||||
|
||||
//this._Combo.Command.Name = this.Command.Name;
|
||||
// this._Combo.Label = this.Label ;
|
||||
this._Combo.Tooltip = this.Tooltip ;
|
||||
this._Combo.Style = this.Style ;
|
||||
|
||||
this.CreateItems( this._Combo ) ;
|
||||
|
||||
this._Combo.Create( targetElement ) ;
|
||||
|
||||
this._Combo.CommandName = this.CommandName ;
|
||||
|
||||
this._Combo.OnSelect = FCKToolbarSpecialCombo_OnSelect ;
|
||||
}
|
||||
|
||||
function FCKToolbarSpecialCombo_RefreshActiveItems( combo, value )
|
||||
{
|
||||
combo.DeselectAll() ;
|
||||
combo.SelectItem( value ) ;
|
||||
combo.SetLabelById( value ) ;
|
||||
}
|
||||
|
||||
FCKToolbarSpecialCombo.prototype.RefreshState = function()
|
||||
{
|
||||
// Gets the actual state.
|
||||
var eState ;
|
||||
|
||||
// if ( FCK.EditMode == FCK_EDITMODE_SOURCE && ! this.SourceView )
|
||||
// eState = FCK_TRISTATE_DISABLED ;
|
||||
// else
|
||||
// {
|
||||
var sValue = FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName ).GetState() ;
|
||||
|
||||
// FCKDebug.Output( 'RefreshState of Special Combo "' + this.TypeOf + '" - State: ' + sValue ) ;
|
||||
|
||||
if ( sValue != FCK_TRISTATE_DISABLED )
|
||||
{
|
||||
eState = FCK_TRISTATE_ON ;
|
||||
|
||||
if ( this.RefreshActiveItems )
|
||||
this.RefreshActiveItems( this._Combo, sValue ) ;
|
||||
else
|
||||
{
|
||||
if ( this._LastValue != sValue )
|
||||
{
|
||||
this._LastValue = sValue ;
|
||||
FCKToolbarSpecialCombo_RefreshActiveItems( this._Combo, sValue ) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
eState = FCK_TRISTATE_DISABLED ;
|
||||
// }
|
||||
|
||||
// If there are no state changes then do nothing and return.
|
||||
if ( eState == this.State ) return ;
|
||||
|
||||
if ( eState == FCK_TRISTATE_DISABLED )
|
||||
{
|
||||
this._Combo.DeselectAll() ;
|
||||
this._Combo.SetLabel( '' ) ;
|
||||
}
|
||||
|
||||
// Sets the actual state.
|
||||
this.State = eState ;
|
||||
|
||||
// Updates the graphical state.
|
||||
this._Combo.SetEnabled( eState != FCK_TRISTATE_DISABLED ) ;
|
||||
}
|
||||
|
||||
FCKToolbarSpecialCombo.prototype.Enable = function()
|
||||
{
|
||||
this.RefreshState() ;
|
||||
}
|
||||
|
||||
FCKToolbarSpecialCombo.prototype.Disable = function()
|
||||
{
|
||||
this.State = FCK_TRISTATE_DISABLED ;
|
||||
this._Combo.DeselectAll() ;
|
||||
this._Combo.SetLabel( '' ) ;
|
||||
this._Combo.SetEnabled( false ) ;
|
||||
}
|
||||
@ -1,102 +0,0 @@
|
||||
/*
|
||||
* 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: fcktoolbarstylecombo.js
|
||||
* FCKToolbarPanelButton Class: Handles the Fonts combo selector.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKToolbarStyleCombo = function( tooltip, style )
|
||||
{
|
||||
this.CommandName = 'Style' ;
|
||||
this.Label = this.GetLabel() ;
|
||||
this.Tooltip = tooltip ? tooltip : this.Label ;
|
||||
this.Style = style ? style : FCK_TOOLBARITEM_ICONTEXT ;
|
||||
}
|
||||
|
||||
// Inherit from FCKToolbarSpecialCombo.
|
||||
FCKToolbarStyleCombo.prototype = new FCKToolbarSpecialCombo ;
|
||||
|
||||
|
||||
FCKToolbarStyleCombo.prototype.GetLabel = function()
|
||||
{
|
||||
return FCKLang.Style ;
|
||||
}
|
||||
|
||||
FCKToolbarStyleCombo.prototype.CreateItems = function( targetSpecialCombo )
|
||||
{
|
||||
var oTargetDoc = targetSpecialCombo._Panel.Document ;
|
||||
|
||||
// Add the Editor Area CSS to the Styles panel so the style classes are previewed correctly.
|
||||
var aCSSs = FCKConfig.EditorAreaCSS ;
|
||||
for ( var i = 0 ; i < aCSSs.length ; i++ )
|
||||
FCKTools.AppendStyleSheet( oTargetDoc, aCSSs[i] ) ;
|
||||
|
||||
oTargetDoc.body.className += ' ForceBaseFont' ;
|
||||
|
||||
// For some reason Gecko is blocking inside the "RefreshVisibleItems" function.
|
||||
if ( ! FCKBrowserInfo.IsGecko )
|
||||
targetSpecialCombo.OnBeforeClick = this.RefreshVisibleItems ;
|
||||
|
||||
// Add the styles to the special combo.
|
||||
var aCommandStyles = FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName ).Styles ;
|
||||
for ( var s in aCommandStyles )
|
||||
{
|
||||
var oStyle = aCommandStyles[s] ;
|
||||
var oItem ;
|
||||
|
||||
if ( oStyle.IsObjectElement )
|
||||
oItem = targetSpecialCombo.AddItem( s, s ) ;
|
||||
else
|
||||
oItem = targetSpecialCombo.AddItem( s, oStyle.GetOpenerTag() + s + oStyle.GetCloserTag() ) ;
|
||||
|
||||
oItem.Style = oStyle ;
|
||||
}
|
||||
}
|
||||
|
||||
FCKToolbarStyleCombo.prototype.RefreshActiveItems = function( targetSpecialCombo )
|
||||
{
|
||||
// Clear the actual selection.
|
||||
targetSpecialCombo.DeselectAll() ;
|
||||
|
||||
// Get the active styles.
|
||||
var aStyles = FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName ).GetActiveStyles() ;
|
||||
|
||||
if ( aStyles.length > 0 )
|
||||
{
|
||||
// Select the active styles in the combo.
|
||||
for ( var i = 0 ; i < aStyles.length ; i++ )
|
||||
targetSpecialCombo.SelectItem( aStyles[i].Name ) ;
|
||||
|
||||
// Set the combo label to the first style in the collection.
|
||||
targetSpecialCombo.SetLabelById( aStyles[0].Name ) ;
|
||||
}
|
||||
else
|
||||
targetSpecialCombo.SetLabel('') ;
|
||||
}
|
||||
|
||||
FCKToolbarStyleCombo.prototype.RefreshVisibleItems = function( targetSpecialCombo )
|
||||
{
|
||||
if ( FCKSelection.GetType() == 'Control' )
|
||||
var sTagName = FCKSelection.GetSelectedElement().tagName ;
|
||||
|
||||
for ( var i in targetSpecialCombo.Items )
|
||||
{
|
||||
var oItem = targetSpecialCombo.Items[i] ;
|
||||
if ( ( sTagName && oItem.Style.Element == sTagName ) || ( ! sTagName && ! oItem.Style.IsObjectElement ) )
|
||||
oItem.style.display = '' ;
|
||||
else
|
||||
oItem.style.display = 'none' ; // For some reason Gecko is blocking here.
|
||||
}
|
||||
}
|
||||
@ -1,66 +0,0 @@
|
||||
/*
|
||||
* 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: fckxml_gecko.js
|
||||
* FCKXml Class: class to load and manipulate XML files.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKXml = function()
|
||||
{}
|
||||
|
||||
FCKXml.prototype.LoadUrl = function( urlToCall )
|
||||
{
|
||||
var oFCKXml = this ;
|
||||
|
||||
var oXmlHttp = FCKTools.CreateXmlObject( 'XmlHttp' ) ;
|
||||
oXmlHttp.open( "GET", urlToCall, false ) ;
|
||||
oXmlHttp.send( null ) ;
|
||||
|
||||
if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 )
|
||||
this.DOMDocument = oXmlHttp.responseXML ;
|
||||
else if ( oXmlHttp.status == 0 && oXmlHttp.readyState == 4 )
|
||||
this.DOMDocument = oXmlHttp.responseXML ;
|
||||
else
|
||||
alert( 'Error loading "' + urlToCall + '"' ) ;
|
||||
}
|
||||
|
||||
FCKXml.prototype.SelectNodes = function( xpath, contextNode )
|
||||
{
|
||||
var aNodeArray = new Array();
|
||||
|
||||
var xPathResult = this.DOMDocument.evaluate( xpath, contextNode ? contextNode : this.DOMDocument,
|
||||
this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), XPathResult.ORDERED_NODE_ITERATOR_TYPE, null) ;
|
||||
if ( xPathResult )
|
||||
{
|
||||
var oNode = xPathResult.iterateNext() ;
|
||||
while( oNode )
|
||||
{
|
||||
aNodeArray[aNodeArray.length] = oNode ;
|
||||
oNode = xPathResult.iterateNext();
|
||||
}
|
||||
}
|
||||
return aNodeArray ;
|
||||
}
|
||||
|
||||
FCKXml.prototype.SelectSingleNode = function( xpath, contextNode )
|
||||
{
|
||||
var xPathResult = this.DOMDocument.evaluate( xpath, contextNode ? contextNode : this.DOMDocument,
|
||||
this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), 9, null);
|
||||
|
||||
if ( xPathResult && xPathResult.singleNodeValue )
|
||||
return xPathResult.singleNodeValue ;
|
||||
else
|
||||
return null ;
|
||||
}
|
||||
@ -1,78 +0,0 @@
|
||||
/*
|
||||
* 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: fckxml_ie.js
|
||||
* FCKXml Class: class to load and manipulate XML files.
|
||||
* (IE specific implementation)
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKXml = function()
|
||||
{
|
||||
this.Error = false ;
|
||||
}
|
||||
|
||||
FCKXml.prototype.LoadUrl = function( urlToCall )
|
||||
{
|
||||
this.Error = false ;
|
||||
|
||||
var oXmlHttp = FCKTools.CreateXmlObject( 'XmlHttp' ) ;
|
||||
|
||||
if ( !oXmlHttp )
|
||||
{
|
||||
this.Error = true ;
|
||||
return ;
|
||||
}
|
||||
|
||||
oXmlHttp.open( "GET", urlToCall, false ) ;
|
||||
|
||||
oXmlHttp.send( null ) ;
|
||||
|
||||
if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 )
|
||||
this.DOMDocument = oXmlHttp.responseXML ;
|
||||
else if ( oXmlHttp.status == 0 && oXmlHttp.readyState == 4 )
|
||||
{
|
||||
this.DOMDocument = FCKTools.CreateXmlObject( 'DOMDocument' ) ;
|
||||
this.DOMDocument.async = false ;
|
||||
this.DOMDocument.resolveExternals = false ;
|
||||
this.DOMDocument.loadXML( oXmlHttp.responseText ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.Error = true ;
|
||||
alert( 'Error loading "' + urlToCall + '"' ) ;
|
||||
}
|
||||
}
|
||||
|
||||
FCKXml.prototype.SelectNodes = function( xpath, contextNode )
|
||||
{
|
||||
if ( this.Error )
|
||||
return new Array() ;
|
||||
|
||||
if ( contextNode )
|
||||
return contextNode.selectNodes( xpath ) ;
|
||||
else
|
||||
return this.DOMDocument.selectNodes( xpath ) ;
|
||||
}
|
||||
|
||||
FCKXml.prototype.SelectSingleNode = function( xpath, contextNode )
|
||||
{
|
||||
if ( this.Error )
|
||||
return ;
|
||||
|
||||
if ( contextNode )
|
||||
return contextNode.selectSingleNode( xpath ) ;
|
||||
else
|
||||
return this.DOMDocument.selectSingleNode( xpath ) ;
|
||||
}
|
||||
@ -1,309 +0,0 @@
|
||||
/*
|
||||
* 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_othercommands.js
|
||||
* Definition of other commands that are not available internaly in the
|
||||
* browser (see FCKNamedCommand).
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
// ### General Dialog Box Commands.
|
||||
var FCKDialogCommand = function( name, title, url, width, height, getStateFunction, getStateParam )
|
||||
{
|
||||
this.Name = name ;
|
||||
this.Title = title ;
|
||||
this.Url = url ;
|
||||
this.Width = width ;
|
||||
this.Height = height ;
|
||||
|
||||
this.GetStateFunction = getStateFunction ;
|
||||
this.GetStateParam = getStateParam ;
|
||||
}
|
||||
|
||||
FCKDialogCommand.prototype.Execute = function()
|
||||
{
|
||||
FCKDialog.OpenDialog( 'FCKDialog_' + this.Name , this.Title, this.Url, this.Width, this.Height ) ;
|
||||
}
|
||||
|
||||
FCKDialogCommand.prototype.GetState = function()
|
||||
{
|
||||
if ( this.GetStateFunction )
|
||||
return this.GetStateFunction( this.GetStateParam ) ;
|
||||
else
|
||||
return FCK_TRISTATE_OFF ;
|
||||
}
|
||||
|
||||
// Generic Undefined command (usually used when a command is under development).
|
||||
var FCKUndefinedCommand = function()
|
||||
{
|
||||
this.Name = 'Undefined' ;
|
||||
}
|
||||
|
||||
FCKUndefinedCommand.prototype.Execute = function()
|
||||
{
|
||||
alert( FCKLang.NotImplemented ) ;
|
||||
}
|
||||
|
||||
FCKUndefinedCommand.prototype.GetState = function()
|
||||
{
|
||||
return FCK_TRISTATE_OFF ;
|
||||
}
|
||||
|
||||
// ### FontName
|
||||
var FCKFontNameCommand = function()
|
||||
{
|
||||
this.Name = 'FontName' ;
|
||||
}
|
||||
|
||||
FCKFontNameCommand.prototype.Execute = function( fontName )
|
||||
{
|
||||
if (fontName == null || fontName == "")
|
||||
{
|
||||
// TODO: Remove font name attribute.
|
||||
}
|
||||
else
|
||||
FCK.ExecuteNamedCommand( 'FontName', fontName ) ;
|
||||
}
|
||||
|
||||
FCKFontNameCommand.prototype.GetState = function()
|
||||
{
|
||||
return FCK.GetNamedCommandValue( 'FontName' ) ;
|
||||
}
|
||||
|
||||
// ### FontSize
|
||||
var FCKFontSizeCommand = function()
|
||||
{
|
||||
this.Name = 'FontSize' ;
|
||||
}
|
||||
|
||||
FCKFontSizeCommand.prototype.Execute = function( fontSize )
|
||||
{
|
||||
if ( typeof( fontSize ) == 'string' ) fontSize = parseInt(fontSize) ;
|
||||
|
||||
if ( fontSize == null || fontSize == '' )
|
||||
{
|
||||
// TODO: Remove font size attribute (Now it works with size 3. Will it work forever?)
|
||||
FCK.ExecuteNamedCommand( 'FontSize', 3 ) ;
|
||||
}
|
||||
else
|
||||
FCK.ExecuteNamedCommand( 'FontSize', fontSize ) ;
|
||||
}
|
||||
|
||||
FCKFontSizeCommand.prototype.GetState = function()
|
||||
{
|
||||
return FCK.GetNamedCommandValue( 'FontSize' ) ;
|
||||
}
|
||||
|
||||
// ### FormatBlock
|
||||
var FCKFormatBlockCommand = function()
|
||||
{
|
||||
this.Name = 'FormatBlock' ;
|
||||
}
|
||||
|
||||
FCKFormatBlockCommand.prototype.Execute = function( formatName )
|
||||
{
|
||||
if ( formatName == null || formatName == '' )
|
||||
FCK.ExecuteNamedCommand( 'FormatBlock', '<P>' ) ;
|
||||
else if ( formatName == 'div' && FCKBrowserInfo.IsGecko )
|
||||
FCK.ExecuteNamedCommand( 'FormatBlock', 'div' ) ;
|
||||
else
|
||||
FCK.ExecuteNamedCommand( 'FormatBlock', '<' + formatName + '>' ) ;
|
||||
}
|
||||
|
||||
FCKFormatBlockCommand.prototype.GetState = function()
|
||||
{
|
||||
return FCK.GetNamedCommandValue( 'FormatBlock' ) ;
|
||||
}
|
||||
|
||||
// ### Preview
|
||||
var FCKPreviewCommand = function()
|
||||
{
|
||||
this.Name = 'Preview' ;
|
||||
}
|
||||
|
||||
FCKPreviewCommand.prototype.Execute = function()
|
||||
{
|
||||
FCK.Preview() ;
|
||||
}
|
||||
|
||||
FCKPreviewCommand.prototype.GetState = function()
|
||||
{
|
||||
return FCK_TRISTATE_OFF ;
|
||||
}
|
||||
|
||||
// ### Save
|
||||
var FCKSaveCommand = function()
|
||||
{
|
||||
this.Name = 'Save' ;
|
||||
}
|
||||
|
||||
FCKSaveCommand.prototype.Execute = function()
|
||||
{
|
||||
// Get the linked field form.
|
||||
var oForm = FCK.LinkedField.form ;
|
||||
|
||||
if ( typeof( oForm.onsubmit ) == 'function' )
|
||||
{
|
||||
var bRet = oForm.onsubmit() ;
|
||||
if ( bRet != null && bRet === false )
|
||||
return ;
|
||||
}
|
||||
|
||||
// Submit the form.
|
||||
oForm.submit() ;
|
||||
}
|
||||
|
||||
FCKSaveCommand.prototype.GetState = function()
|
||||
{
|
||||
return FCK_TRISTATE_OFF ;
|
||||
}
|
||||
|
||||
// ### NewPage
|
||||
var FCKNewPageCommand = function()
|
||||
{
|
||||
this.Name = 'NewPage' ;
|
||||
}
|
||||
|
||||
FCKNewPageCommand.prototype.Execute = function()
|
||||
{
|
||||
FCKUndo.SaveUndoStep() ;
|
||||
FCK.SetHTML( '' ) ;
|
||||
FCKUndo.Typing = true ;
|
||||
// FCK.SetHTML( FCKBrowserInfo.IsGecko ? ' ' : '' ) ;
|
||||
// FCK.SetHTML( FCKBrowserInfo.IsGecko ? GECKO_BOGUS : '' ) ;
|
||||
}
|
||||
|
||||
FCKNewPageCommand.prototype.GetState = function()
|
||||
{
|
||||
return FCK_TRISTATE_OFF ;
|
||||
}
|
||||
|
||||
// ### Source button
|
||||
var FCKSourceCommand = function()
|
||||
{
|
||||
this.Name = 'Source' ;
|
||||
}
|
||||
|
||||
FCKSourceCommand.prototype.Execute = function()
|
||||
{
|
||||
if ( FCKConfig.SourcePopup ) // Until v2.2, it was mandatory for FCKBrowserInfo.IsGecko.
|
||||
{
|
||||
var iWidth = FCKConfig.ScreenWidth * 0.65 ;
|
||||
var iHeight = FCKConfig.ScreenHeight * 0.65 ;
|
||||
FCKDialog.OpenDialog( 'FCKDialog_Source', FCKLang.Source, 'dialog/fck_source.html', iWidth, iHeight, null, null, true ) ;
|
||||
}
|
||||
else
|
||||
FCK.SwitchEditMode() ;
|
||||
}
|
||||
|
||||
FCKSourceCommand.prototype.GetState = function()
|
||||
{
|
||||
return ( FCK.EditMode == FCK_EDITMODE_WYSIWYG ? FCK_TRISTATE_OFF : FCK_TRISTATE_ON ) ;
|
||||
}
|
||||
|
||||
// ### Undo
|
||||
var FCKUndoCommand = function()
|
||||
{
|
||||
this.Name = 'Undo' ;
|
||||
}
|
||||
|
||||
FCKUndoCommand.prototype.Execute = function()
|
||||
{
|
||||
if ( FCKBrowserInfo.IsIE )
|
||||
FCKUndo.Undo() ;
|
||||
else
|
||||
FCK.ExecuteNamedCommand( 'Undo' ) ;
|
||||
}
|
||||
|
||||
FCKUndoCommand.prototype.GetState = function()
|
||||
{
|
||||
if ( FCKBrowserInfo.IsIE )
|
||||
return ( FCKUndo.CheckUndoState() ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ) ;
|
||||
else
|
||||
return FCK.GetNamedCommandState( 'Undo' ) ;
|
||||
}
|
||||
|
||||
// ### Redo
|
||||
var FCKRedoCommand = function()
|
||||
{
|
||||
this.Name = 'Redo' ;
|
||||
}
|
||||
|
||||
FCKRedoCommand.prototype.Execute = function()
|
||||
{
|
||||
if ( FCKBrowserInfo.IsIE )
|
||||
FCKUndo.Redo() ;
|
||||
else
|
||||
FCK.ExecuteNamedCommand( 'Redo' ) ;
|
||||
}
|
||||
|
||||
FCKRedoCommand.prototype.GetState = function()
|
||||
{
|
||||
if ( FCKBrowserInfo.IsIE )
|
||||
return ( FCKUndo.CheckRedoState() ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ) ;
|
||||
else
|
||||
return FCK.GetNamedCommandState( 'Redo' ) ;
|
||||
}
|
||||
|
||||
// ### Page Break
|
||||
var FCKPageBreakCommand = function()
|
||||
{
|
||||
this.Name = 'PageBreak' ;
|
||||
}
|
||||
|
||||
FCKPageBreakCommand.prototype.Execute = function()
|
||||
{
|
||||
// var e = FCK.EditorDocument.createElement( 'CENTER' ) ;
|
||||
// e.style.pageBreakAfter = 'always' ;
|
||||
|
||||
// Tidy was removing the empty CENTER tags, so the following solution has
|
||||
// been found. It also validates correctly as XHTML 1.0 Strict.
|
||||
var e = FCK.EditorDocument.createElement( 'DIV' ) ;
|
||||
e.style.pageBreakAfter = 'always' ;
|
||||
e.innerHTML = '<span style="DISPLAY:none"> </span>' ;
|
||||
|
||||
var oFakeImage = FCKDocumentProcessor_CreateFakeImage( 'FCK__PageBreak', e ) ;
|
||||
oFakeImage = FCK.InsertElement( oFakeImage ) ;
|
||||
}
|
||||
|
||||
FCKPageBreakCommand.prototype.GetState = function()
|
||||
{
|
||||
return 0 ; // FCK_TRISTATE_OFF
|
||||
}
|
||||
|
||||
// FCKUnlinkCommand - by Johnny Egeland (johnny@coretrek.com)
|
||||
var FCKUnlinkCommand = function()
|
||||
{
|
||||
this.Name = 'Unlink' ;
|
||||
}
|
||||
|
||||
FCKUnlinkCommand.prototype.Execute = function()
|
||||
{
|
||||
if ( FCKBrowserInfo.IsGecko )
|
||||
{
|
||||
var oLink = FCK.Selection.MoveToAncestorNode( 'A' ) ;
|
||||
if ( oLink )
|
||||
FCK.Selection.SelectNode( oLink ) ;
|
||||
}
|
||||
|
||||
FCK.ExecuteNamedCommand( this.Name ) ;
|
||||
|
||||
if ( FCKBrowserInfo.IsGecko )
|
||||
FCK.Selection.Collapse( true ) ;
|
||||
}
|
||||
|
||||
FCKUnlinkCommand.prototype.GetState = function()
|
||||
{
|
||||
return FCK.GetNamedCommandState( this.Name ) ;
|
||||
}
|
||||
@ -1,164 +0,0 @@
|
||||
/*
|
||||
* 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: fckfitwindow.js
|
||||
* Stretch the editor to full window size and back.
|
||||
*
|
||||
* File Authors:
|
||||
* Paul Moers (mail@saulmade.nl)
|
||||
* Thanks to Christian Fecteau (webmaster@christianfecteau.com)
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKFitWindow = function()
|
||||
{
|
||||
this.Name = 'FitWindow' ;
|
||||
}
|
||||
|
||||
FCKFitWindow.prototype.Execute = function()
|
||||
{
|
||||
var eEditorFrame = window.frameElement ;
|
||||
var eEditorFrameStyle = eEditorFrame.style ;
|
||||
|
||||
var eMainWindow = parent ;
|
||||
var eDocEl = eMainWindow.document.documentElement ;
|
||||
var eBody = eMainWindow.document.body ;
|
||||
var eBodyStyle = eBody.style ;
|
||||
|
||||
// No original style properties known? Go fullscreen.
|
||||
if ( !this.IsMaximized )
|
||||
{
|
||||
// Registering an event handler when the window gets resized.
|
||||
if( FCKBrowserInfo.IsIE )
|
||||
eMainWindow.attachEvent( 'onresize', FCKFitWindow_Resize ) ;
|
||||
else
|
||||
eMainWindow.addEventListener( 'resize', FCKFitWindow_Resize, true ) ;
|
||||
|
||||
// Save the scrollbars position.
|
||||
this._ScrollPos = FCKTools.GetScrollPosition( eMainWindow ) ;
|
||||
|
||||
// Save and reset the styles for the entire node tree. They could interfere in the result.
|
||||
var eParent = eEditorFrame ;
|
||||
while( eParent = eParent.parentNode )
|
||||
{
|
||||
if ( eParent.nodeType == 1 )
|
||||
eParent._fckSavedStyles = FCKTools.SaveStyles( eParent ) ;
|
||||
}
|
||||
|
||||
// Hide IE scrollbars (in strict mode).
|
||||
if ( FCKBrowserInfo.IsIE )
|
||||
{
|
||||
this.documentElementOverflow = eDocEl.style.overflow ;
|
||||
eDocEl.style.overflow = 'hidden' ;
|
||||
eBodyStyle.overflow = 'hidden' ;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Hide the scroolbars in Firefox.
|
||||
eBodyStyle.overflow = 'hidden' ;
|
||||
eBodyStyle.width = '0px' ;
|
||||
eBodyStyle.height = '0px' ;
|
||||
}
|
||||
|
||||
// Save the IFRAME styles.
|
||||
this._EditorFrameStyles = FCKTools.SaveStyles( eEditorFrame ) ;
|
||||
|
||||
// Resize.
|
||||
var oViewPaneSize = FCKTools.GetViewPaneSize( eMainWindow ) ;
|
||||
|
||||
eEditorFrameStyle.position = "absolute";
|
||||
eEditorFrameStyle.zIndex = FCKConfig.FloatingPanelsZIndex - 1;
|
||||
eEditorFrameStyle.left = "0px";
|
||||
eEditorFrameStyle.top = "0px";
|
||||
eEditorFrameStyle.width = oViewPaneSize.Width + "px";
|
||||
eEditorFrameStyle.height = oViewPaneSize.Height + "px";
|
||||
|
||||
// Giving the frame some (huge) borders on his right and bottom
|
||||
// side to hide the background that would otherwise show when the
|
||||
// editor is in fullsize mode and the window is increased in size
|
||||
// not for IE, because IE immediately adapts the editor on resize,
|
||||
// without showing any of the background oddly in firefox, the
|
||||
// editor seems not to fill the whole frame, so just setting the
|
||||
// background of it to white to cover the page laying behind it anyway.
|
||||
if ( !FCKBrowserInfo.IsIE )
|
||||
{
|
||||
eEditorFrameStyle.borderRight = eEditorFrameStyle.borderBottom = "9999px solid white" ;
|
||||
eEditorFrameStyle.backgroundColor = "white";
|
||||
}
|
||||
|
||||
// Scroll to top left.
|
||||
eMainWindow.scrollTo(0, 0);
|
||||
|
||||
this.IsMaximized = true ;
|
||||
}
|
||||
else // Resize to original size.
|
||||
{
|
||||
// Remove the event handler of window resizing.
|
||||
if( FCKBrowserInfo.IsIE )
|
||||
eMainWindow.detachEvent( "onresize", FCKFitWindow_Resize ) ;
|
||||
else
|
||||
eMainWindow.removeEventListener( "resize", FCKFitWindow_Resize, true ) ;
|
||||
|
||||
// Restore the CSS position for the entire node tree.
|
||||
var eParent = eEditorFrame ;
|
||||
while( eParent = eParent.parentNode )
|
||||
{
|
||||
if ( eParent._fckSavedStyles )
|
||||
{
|
||||
FCKTools.RestoreStyles( eParent, eParent._fckSavedStyles ) ;
|
||||
eParent._fckSavedStyles = null ;
|
||||
}
|
||||
}
|
||||
|
||||
// Restore IE scrollbars
|
||||
if ( FCKBrowserInfo.IsIE )
|
||||
eDocEl.style.overflow = this.documentElementOverflow ;
|
||||
|
||||
// Restore original size
|
||||
FCKTools.RestoreStyles( eEditorFrame, this._EditorFrameStyles ) ;
|
||||
|
||||
// Restore the window scroll position.
|
||||
eMainWindow.scrollTo( this._ScrollPos.X, this._ScrollPos.Y ) ;
|
||||
|
||||
this.IsMaximized = false ;
|
||||
}
|
||||
|
||||
FCKToolbarItems.GetItem('FitWindow').RefreshState() ;
|
||||
|
||||
// It seams that Firefox restarts the editing area when making this changes.
|
||||
// On FF 1.0.x, the area is not anymore editable. On FF 1.5+, the special
|
||||
//configuration, like DisableFFTableHandles and DisableObjectResizing get
|
||||
//lost, so we must reset it. Also, the cursor position and selection are
|
||||
//also lost, even if you comment the following line (MakeEditable).
|
||||
// if ( FCKBrowserInfo.IsGecko10 ) // Initially I thought it was a FF 1.0 only problem.
|
||||
FCK.EditingArea.MakeEditable() ;
|
||||
|
||||
FCK.Focus() ;
|
||||
}
|
||||
|
||||
FCKFitWindow.prototype.GetState = function()
|
||||
{
|
||||
if ( FCKConfig.ToolbarLocation != 'In' )
|
||||
return FCK_TRISTATE_DISABLED ;
|
||||
else
|
||||
return ( this.IsMaximized ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF );
|
||||
}
|
||||
|
||||
function FCKFitWindow_Resize()
|
||||
{
|
||||
var oViewPaneSize = FCKTools.GetViewPaneSize( parent ) ;
|
||||
|
||||
var eEditorFrameStyle = window.frameElement.style ;
|
||||
|
||||
eEditorFrameStyle.width = oViewPaneSize.Width + 'px' ;
|
||||
eEditorFrameStyle.height = oViewPaneSize.Height + 'px' ;
|
||||
}
|
||||
@ -1,33 +0,0 @@
|
||||
/*
|
||||
* 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: fcknamedcommand.js
|
||||
* FCKNamedCommand Class: represents an internal browser command.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKNamedCommand = function( commandName )
|
||||
{
|
||||
this.Name = commandName ;
|
||||
}
|
||||
|
||||
FCKNamedCommand.prototype.Execute = function()
|
||||
{
|
||||
FCK.ExecuteNamedCommand( this.Name ) ;
|
||||
}
|
||||
|
||||
FCKNamedCommand.prototype.GetState = function()
|
||||
{
|
||||
return FCK.GetNamedCommandState( this.Name ) ;
|
||||
}
|
||||
@ -1,34 +0,0 @@
|
||||
/*
|
||||
* 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: fckpasteplaintextcommand.js
|
||||
* FCKPastePlainTextCommand Class: represents the
|
||||
* "Paste as Plain Text" command.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKPastePlainTextCommand = function()
|
||||
{
|
||||
this.Name = 'PasteText' ;
|
||||
}
|
||||
|
||||
FCKPastePlainTextCommand.prototype.Execute = function()
|
||||
{
|
||||
FCK.PasteAsPlainText() ;
|
||||
}
|
||||
|
||||
FCKPastePlainTextCommand.prototype.GetState = function()
|
||||
{
|
||||
return FCK.GetNamedCommandState( 'Paste' ) ;
|
||||
}
|
||||
@ -1,36 +0,0 @@
|
||||
/*
|
||||
* 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: fckpastewordcommand.js
|
||||
* FCKPasteWordCommand Class: represents the "Paste from Word" command.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKPasteWordCommand = function()
|
||||
{
|
||||
this.Name = 'PasteWord' ;
|
||||
}
|
||||
|
||||
FCKPasteWordCommand.prototype.Execute = function()
|
||||
{
|
||||
FCK.PasteFromWord() ;
|
||||
}
|
||||
|
||||
FCKPasteWordCommand.prototype.GetState = function()
|
||||
{
|
||||
if ( FCKConfig.ForcePasteAsPlainText )
|
||||
return FCK_TRISTATE_DISABLED ;
|
||||
else
|
||||
return FCK.GetNamedCommandState( 'Paste' ) ;
|
||||
}
|
||||
@ -1,35 +0,0 @@
|
||||
/*
|
||||
* 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: fckspellcheckcommand_gecko.js
|
||||
* FCKStyleCommand Class: represents the "Spell Check" command.
|
||||
* (Gecko specific implementation)
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKSpellCheckCommand = function()
|
||||
{
|
||||
this.Name = 'SpellCheck' ;
|
||||
this.IsEnabled = ( FCKConfig.SpellChecker == 'SpellerPages' ) ;
|
||||
}
|
||||
|
||||
FCKSpellCheckCommand.prototype.Execute = function()
|
||||
{
|
||||
FCKDialog.OpenDialog( 'FCKDialog_SpellCheck', 'Spell Check', 'dialog/fck_spellerpages.html', 440, 480 ) ;
|
||||
}
|
||||
|
||||
FCKSpellCheckCommand.prototype.GetState = function()
|
||||
{
|
||||
return this.IsEnabled ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
|
||||
}
|
||||
@ -1,63 +0,0 @@
|
||||
/*
|
||||
* 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: fckspellcheckcommand_ie.js
|
||||
* FCKStyleCommand Class: represents the "Spell Check" command.
|
||||
* (IE specific implementation)
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKSpellCheckCommand = function()
|
||||
{
|
||||
this.Name = 'SpellCheck' ;
|
||||
this.IsEnabled = ( FCKConfig.SpellChecker == 'ieSpell' || FCKConfig.SpellChecker == 'SpellerPages' ) ;
|
||||
}
|
||||
|
||||
FCKSpellCheckCommand.prototype.Execute = function()
|
||||
{
|
||||
switch ( FCKConfig.SpellChecker )
|
||||
{
|
||||
case 'ieSpell' :
|
||||
this._RunIeSpell() ;
|
||||
break ;
|
||||
|
||||
case 'SpellerPages' :
|
||||
FCKDialog.OpenDialog( 'FCKDialog_SpellCheck', 'Spell Check', 'dialog/fck_spellerpages.html', 440, 480 ) ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
|
||||
FCKSpellCheckCommand.prototype._RunIeSpell = function()
|
||||
{
|
||||
try
|
||||
{
|
||||
var oIeSpell = new ActiveXObject( "ieSpell.ieSpellExtension" ) ;
|
||||
oIeSpell.CheckAllLinkedDocuments( FCK.EditorDocument ) ;
|
||||
}
|
||||
catch( e )
|
||||
{
|
||||
if( e.number == -2146827859 )
|
||||
{
|
||||
if ( confirm( FCKLang.IeSpellDownload ) )
|
||||
window.open( FCKConfig.IeSpellDownloadUrl , 'IeSpellDownload' ) ;
|
||||
}
|
||||
else
|
||||
alert( 'Error Loading ieSpell: ' + e.message + ' (' + e.number + ')' ) ;
|
||||
}
|
||||
}
|
||||
|
||||
FCKSpellCheckCommand.prototype.GetState = function()
|
||||
{
|
||||
return this.IsEnabled ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
|
||||
}
|
||||
@ -1,95 +0,0 @@
|
||||
/*
|
||||
* 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: fckstylecommand.js
|
||||
* FCKStyleCommand Class: represents the "Style" command.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKStyleCommand = function()
|
||||
{
|
||||
this.Name = 'Style' ;
|
||||
|
||||
// Load the Styles defined in the XML file.
|
||||
this.StylesLoader = new FCKStylesLoader() ;
|
||||
this.StylesLoader.Load( FCKConfig.StylesXmlPath ) ;
|
||||
this.Styles = this.StylesLoader.Styles ;
|
||||
}
|
||||
|
||||
FCKStyleCommand.prototype.Execute = function( styleName, styleComboItem )
|
||||
{
|
||||
FCKUndo.SaveUndoStep() ;
|
||||
|
||||
if ( styleComboItem.Selected )
|
||||
styleComboItem.Style.RemoveFromSelection() ;
|
||||
else
|
||||
styleComboItem.Style.ApplyToSelection() ;
|
||||
|
||||
FCKUndo.SaveUndoStep() ;
|
||||
|
||||
FCK.Focus() ;
|
||||
|
||||
FCK.Events.FireEvent( "OnSelectionChange" ) ;
|
||||
}
|
||||
|
||||
FCKStyleCommand.prototype.GetState = function()
|
||||
{
|
||||
if ( !FCK.EditorDocument )
|
||||
return FCK_TRISTATE_DISABLED ;
|
||||
|
||||
var oSelection = FCK.EditorDocument.selection ;
|
||||
|
||||
if ( FCKSelection.GetType() == 'Control' )
|
||||
{
|
||||
var e = FCKSelection.GetSelectedElement() ;
|
||||
if ( e )
|
||||
return this.StylesLoader.StyleGroups[ e.tagName ] ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
|
||||
}
|
||||
|
||||
return FCK_TRISTATE_OFF ;
|
||||
}
|
||||
|
||||
FCKStyleCommand.prototype.GetActiveStyles = function()
|
||||
{
|
||||
var aActiveStyles = new Array() ;
|
||||
|
||||
if ( FCKSelection.GetType() == 'Control' )
|
||||
this._CheckStyle( FCKSelection.GetSelectedElement(), aActiveStyles, false ) ;
|
||||
else
|
||||
this._CheckStyle( FCKSelection.GetParentElement(), aActiveStyles, true ) ;
|
||||
|
||||
return aActiveStyles ;
|
||||
}
|
||||
|
||||
FCKStyleCommand.prototype._CheckStyle = function( element, targetArray, checkParent )
|
||||
{
|
||||
if ( ! element )
|
||||
return ;
|
||||
|
||||
if ( element.nodeType == 1 )
|
||||
{
|
||||
var aStyleGroup = this.StylesLoader.StyleGroups[ element.tagName ] ;
|
||||
if ( aStyleGroup )
|
||||
{
|
||||
for ( var i = 0 ; i < aStyleGroup.length ; i++ )
|
||||
{
|
||||
if ( aStyleGroup[i].IsEqual( element ) )
|
||||
targetArray[ targetArray.length ] = aStyleGroup[i] ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( checkParent )
|
||||
this._CheckStyle( element.parentNode, targetArray, checkParent ) ;
|
||||
}
|
||||
@ -1,67 +0,0 @@
|
||||
/*
|
||||
* 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: fcktablecommand.js
|
||||
* FCKPastePlainTextCommand Class: represents the
|
||||
* "Paste as Plain Text" command.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKTableCommand = function( command )
|
||||
{
|
||||
this.Name = command ;
|
||||
}
|
||||
|
||||
FCKTableCommand.prototype.Execute = function()
|
||||
{
|
||||
FCKUndo.SaveUndoStep() ;
|
||||
|
||||
switch ( this.Name )
|
||||
{
|
||||
case 'TableInsertRow' :
|
||||
FCKTableHandler.InsertRow() ;
|
||||
break ;
|
||||
case 'TableDeleteRows' :
|
||||
FCKTableHandler.DeleteRows() ;
|
||||
break ;
|
||||
case 'TableInsertColumn' :
|
||||
FCKTableHandler.InsertColumn() ;
|
||||
break ;
|
||||
case 'TableDeleteColumns' :
|
||||
FCKTableHandler.DeleteColumns() ;
|
||||
break ;
|
||||
case 'TableInsertCell' :
|
||||
FCKTableHandler.InsertCell() ;
|
||||
break ;
|
||||
case 'TableDeleteCells' :
|
||||
FCKTableHandler.DeleteCells() ;
|
||||
break ;
|
||||
case 'TableMergeCells' :
|
||||
FCKTableHandler.MergeCells() ;
|
||||
break ;
|
||||
case 'TableSplitCell' :
|
||||
FCKTableHandler.SplitCell() ;
|
||||
break ;
|
||||
case 'TableDelete' :
|
||||
FCKTableHandler.DeleteTable() ;
|
||||
break ;
|
||||
default :
|
||||
alert( FCKLang.UnknownCommand.replace( /%1/g, this.Name ) ) ;
|
||||
}
|
||||
}
|
||||
|
||||
FCKTableCommand.prototype.GetState = function()
|
||||
{
|
||||
return FCK_TRISTATE_OFF ;
|
||||
}
|
||||
@ -1,171 +0,0 @@
|
||||
/*
|
||||
* 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: fcktextcolorcommand.js
|
||||
* FCKTextColorCommand Class: represents the text color comand. It shows the
|
||||
* color selection panel.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
// FCKTextColorCommand Contructor
|
||||
// type: can be 'ForeColor' or 'BackColor'.
|
||||
var FCKTextColorCommand = function( type )
|
||||
{
|
||||
this.Name = type == 'ForeColor' ? 'TextColor' : 'BGColor' ;
|
||||
this.Type = type ;
|
||||
|
||||
var oWindow ;
|
||||
|
||||
if ( FCKBrowserInfo.IsIE )
|
||||
oWindow = window ;
|
||||
else if ( FCK.ToolbarSet._IFrame )
|
||||
oWindow = FCKTools.GetElementWindow( FCK.ToolbarSet._IFrame ) ;
|
||||
else
|
||||
oWindow = window.parent ;
|
||||
|
||||
this._Panel = new FCKPanel( oWindow, true ) ;
|
||||
this._Panel.AppendStyleSheet( FCKConfig.SkinPath + 'fck_editor.css' ) ;
|
||||
this._Panel.MainNode.className = 'FCK_Panel' ;
|
||||
this._CreatePanelBody( this._Panel.Document, this._Panel.MainNode ) ;
|
||||
|
||||
FCKTools.DisableSelection( this._Panel.Document.body ) ;
|
||||
}
|
||||
|
||||
FCKTextColorCommand.prototype.Execute = function( panelX, panelY, relElement )
|
||||
{
|
||||
// We must "cache" the actual panel type to be used in the SetColor method.
|
||||
FCK._ActiveColorPanelType = this.Type ;
|
||||
|
||||
// Show the Color Panel at the desired position.
|
||||
this._Panel.Show( panelX, panelY, relElement ) ;
|
||||
}
|
||||
|
||||
FCKTextColorCommand.prototype.SetColor = function( color )
|
||||
{
|
||||
if ( FCK._ActiveColorPanelType == 'ForeColor' )
|
||||
FCK.ExecuteNamedCommand( 'ForeColor', color ) ;
|
||||
else if ( FCKBrowserInfo.IsGeckoLike )
|
||||
{
|
||||
if ( FCKBrowserInfo.IsGecko && !FCKConfig.GeckoUseSPAN )
|
||||
FCK.EditorDocument.execCommand( 'useCSS', false, false ) ;
|
||||
|
||||
FCK.ExecuteNamedCommand( 'hilitecolor', color ) ;
|
||||
|
||||
if ( FCKBrowserInfo.IsGecko && !FCKConfig.GeckoUseSPAN )
|
||||
FCK.EditorDocument.execCommand( 'useCSS', false, true ) ;
|
||||
}
|
||||
else
|
||||
FCK.ExecuteNamedCommand( 'BackColor', color ) ;
|
||||
|
||||
// Delete the "cached" active panel type.
|
||||
delete FCK._ActiveColorPanelType ;
|
||||
}
|
||||
|
||||
FCKTextColorCommand.prototype.GetState = function()
|
||||
{
|
||||
return FCK_TRISTATE_OFF ;
|
||||
}
|
||||
|
||||
function FCKTextColorCommand_OnMouseOver() { this.className='ColorSelected' ; }
|
||||
|
||||
function FCKTextColorCommand_OnMouseOut() { this.className='ColorDeselected' ; }
|
||||
|
||||
function FCKTextColorCommand_OnClick()
|
||||
{
|
||||
this.className = 'ColorDeselected' ;
|
||||
this.Command.SetColor( '#' + this.Color ) ;
|
||||
this.Command._Panel.Hide() ;
|
||||
}
|
||||
|
||||
function FCKTextColorCommand_AutoOnClick()
|
||||
{
|
||||
this.className = 'ColorDeselected' ;
|
||||
this.Command.SetColor( '' ) ;
|
||||
this.Command._Panel.Hide() ;
|
||||
}
|
||||
|
||||
function FCKTextColorCommand_MoreOnClick()
|
||||
{
|
||||
this.className = 'ColorDeselected' ;
|
||||
this.Command._Panel.Hide() ;
|
||||
FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, this.Command.SetColor ) ;
|
||||
}
|
||||
|
||||
FCKTextColorCommand.prototype._CreatePanelBody = function( targetDocument, targetDiv )
|
||||
{
|
||||
function CreateSelectionDiv()
|
||||
{
|
||||
var oDiv = targetDocument.createElement( "DIV" ) ;
|
||||
oDiv.className = 'ColorDeselected' ;
|
||||
oDiv.onmouseover = FCKTextColorCommand_OnMouseOver ;
|
||||
oDiv.onmouseout = FCKTextColorCommand_OnMouseOut ;
|
||||
|
||||
return oDiv ;
|
||||
}
|
||||
|
||||
// Create the Table that will hold all colors.
|
||||
var oTable = targetDiv.appendChild( targetDocument.createElement( "TABLE" ) ) ;
|
||||
oTable.className = 'ForceBaseFont' ; // Firefox 1.5 Bug.
|
||||
oTable.style.tableLayout = 'fixed' ;
|
||||
oTable.cellPadding = 0 ;
|
||||
oTable.cellSpacing = 0 ;
|
||||
oTable.border = 0 ;
|
||||
oTable.width = 150 ;
|
||||
|
||||
var oCell = oTable.insertRow(-1).insertCell(-1) ;
|
||||
oCell.colSpan = 8 ;
|
||||
|
||||
// Create the Button for the "Automatic" color selection.
|
||||
var oDiv = oCell.appendChild( CreateSelectionDiv() ) ;
|
||||
oDiv.innerHTML =
|
||||
'<table cellspacing="0" cellpadding="0" width="100%" border="0">\
|
||||
<tr>\
|
||||
<td><div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #000000"></div></div></td>\
|
||||
<td nowrap width="100%" align="center">' + FCKLang.ColorAutomatic + '</td>\
|
||||
</tr>\
|
||||
</table>' ;
|
||||
|
||||
oDiv.Command = this ;
|
||||
oDiv.onclick = FCKTextColorCommand_AutoOnClick ;
|
||||
|
||||
// Create an array of colors based on the configuration file.
|
||||
var aColors = FCKConfig.FontColors.toString().split(',') ;
|
||||
|
||||
// Create the colors table based on the array.
|
||||
var iCounter = 0 ;
|
||||
while ( iCounter < aColors.length )
|
||||
{
|
||||
var oRow = oTable.insertRow(-1) ;
|
||||
|
||||
for ( var i = 0 ; i < 8 && iCounter < aColors.length ; i++, iCounter++ )
|
||||
{
|
||||
oDiv = oRow.insertCell(-1).appendChild( CreateSelectionDiv() ) ;
|
||||
oDiv.Color = aColors[iCounter] ;
|
||||
oDiv.innerHTML = '<div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #' + aColors[iCounter] + '"></div></div>' ;
|
||||
|
||||
oDiv.Command = this ;
|
||||
oDiv.onclick = FCKTextColorCommand_OnClick ;
|
||||
}
|
||||
}
|
||||
|
||||
// Create the Row and the Cell for the "More Colors..." button.
|
||||
oCell = oTable.insertRow(-1).insertCell(-1) ;
|
||||
oCell.colSpan = 8 ;
|
||||
|
||||
oDiv = oCell.appendChild( CreateSelectionDiv() ) ;
|
||||
oDiv.innerHTML = '<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td nowrap align="center">' + FCKLang.ColorMoreColors + '</td></tr></table>' ;
|
||||
|
||||
oDiv.Command = this ;
|
||||
oDiv.onclick = FCKTextColorCommand_MoreOnClick ;
|
||||
}
|
||||
@ -1,44 +0,0 @@
|
||||
/*
|
||||
* 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: fckconstants.js
|
||||
* Defines some constants used by the editor. These constants are also
|
||||
* globally available in the page where the editor is placed.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
// Editor Instance Status.
|
||||
var FCK_STATUS_NOTLOADED = window.parent.FCK_STATUS_NOTLOADED = 0 ;
|
||||
var FCK_STATUS_ACTIVE = window.parent.FCK_STATUS_ACTIVE = 1 ;
|
||||
var FCK_STATUS_COMPLETE = window.parent.FCK_STATUS_COMPLETE = 2 ;
|
||||
|
||||
// Tristate Operations.
|
||||
var FCK_TRISTATE_OFF = window.parent.FCK_TRISTATE_OFF = 0 ;
|
||||
var FCK_TRISTATE_ON = window.parent.FCK_TRISTATE_ON = 1 ;
|
||||
var FCK_TRISTATE_DISABLED = window.parent.FCK_TRISTATE_DISABLED = -1 ;
|
||||
|
||||
// For unknown values.
|
||||
var FCK_UNKNOWN = window.parent.FCK_UNKNOWN = -9 ;
|
||||
|
||||
// Toolbar Items Style.
|
||||
var FCK_TOOLBARITEM_ONLYICON = window.parent.FCK_TOOLBARITEM_ONLYICON = 0 ;
|
||||
var FCK_TOOLBARITEM_ONLYTEXT = window.parent.FCK_TOOLBARITEM_ONLYTEXT = 1 ;
|
||||
var FCK_TOOLBARITEM_ICONTEXT = window.parent.FCK_TOOLBARITEM_ICONTEXT = 2 ;
|
||||
|
||||
// Edit Mode
|
||||
var FCK_EDITMODE_WYSIWYG = window.parent.FCK_EDITMODE_WYSIWYG = 0 ;
|
||||
var FCK_EDITMODE_SOURCE = window.parent.FCK_EDITMODE_SOURCE = 1 ;
|
||||
|
||||
var FCK_IMAGES_PATH = 'images/' ; // Check usage.
|
||||
var FCK_SPACER_PATH = 'images/spacer.gif' ;
|
||||
@ -1,91 +0,0 @@
|
||||
/*
|
||||
* 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: fckeditorapi.js
|
||||
* Create the FCKeditorAPI object that is available as a global object in
|
||||
* the page where the editor is placed in.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKeditorAPI ;
|
||||
|
||||
function InitializeAPI()
|
||||
{
|
||||
var oAPI ;
|
||||
|
||||
if ( !( oAPI = FCKeditorAPI = window.parent.FCKeditorAPI ) )
|
||||
{
|
||||
// Make the FCKeditorAPI object available in the parent window.
|
||||
oAPI = FCKeditorAPI = window.parent.FCKeditorAPI = new Object() ;
|
||||
oAPI.Version = '2.3' ;
|
||||
oAPI.VersionBuild = '1054' ;
|
||||
|
||||
oAPI.__Instances = new Object() ;
|
||||
|
||||
// Function used to get a instance of an existing editor present in the
|
||||
// page.
|
||||
oAPI.GetInstance = FCKeditorAPI_GetInstance ;
|
||||
|
||||
var oQueue = oAPI._FunctionQueue = new Object() ;
|
||||
oQueue.Functions = new Array() ;
|
||||
oQueue.IsRunning = false ;
|
||||
oQueue.Add = FCKeditorAPI_FunctionQueue_Add ;
|
||||
oQueue.StartNext = FCKeditorAPI_FunctionQueue_StartNext ;
|
||||
oQueue.Remove = FCKeditorAPI_FunctionQueue_Remove ;
|
||||
}
|
||||
|
||||
// Add the current instance to the FCKeditorAPI's instances collection.
|
||||
oAPI.__Instances[ FCK.Name ] = FCK ;
|
||||
}
|
||||
|
||||
function FCKeditorAPI_GetInstance( instanceName )
|
||||
{
|
||||
return this.__Instances[ instanceName ] ;
|
||||
}
|
||||
|
||||
function FCKeditorAPI_FunctionQueue_Add( functionToAdd )
|
||||
{
|
||||
this.Functions.push( functionToAdd ) ;
|
||||
|
||||
if ( !this.IsRunning )
|
||||
this.StartNext() ;
|
||||
}
|
||||
|
||||
function FCKeditorAPI_FunctionQueue_StartNext()
|
||||
{
|
||||
var aQueue = this.Functions ;
|
||||
|
||||
if ( aQueue.length > 0 )
|
||||
{
|
||||
this.IsRunning = true ;
|
||||
FCKTools.RunFunction( aQueue[0] ) ;
|
||||
}
|
||||
else
|
||||
this.IsRunning = false ;
|
||||
}
|
||||
|
||||
function FCKeditorAPI_FunctionQueue_Remove( func )
|
||||
{
|
||||
var aQueue = this.Functions ;
|
||||
|
||||
var i = 0, fFunc ;
|
||||
while( fFunc = aQueue[ i ] )
|
||||
{
|
||||
if ( fFunc == func )
|
||||
aQueue.splice( i,1 ) ;
|
||||
i++ ;
|
||||
}
|
||||
|
||||
this.StartNext() ;
|
||||
}
|
||||
@ -1,108 +0,0 @@
|
||||
/*
|
||||
* 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: fckjscoreextensions.js
|
||||
* Extensions to the JavaScript Core.
|
||||
*
|
||||
* All custom extentions functions are PascalCased to differ from the standard
|
||||
* camelCased ones.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
String.prototype.Contains = function( textToCheck )
|
||||
{
|
||||
return ( this.indexOf( textToCheck ) > -1 ) ;
|
||||
}
|
||||
|
||||
String.prototype.Equals = function()
|
||||
{
|
||||
for ( var i = 0 ; i < arguments.length ; i++ )
|
||||
if ( this == arguments[i] )
|
||||
return true ;
|
||||
|
||||
return false ;
|
||||
}
|
||||
|
||||
Array.prototype.AddItem = function( item )
|
||||
{
|
||||
var i = this.length ;
|
||||
this[ i ] = item ;
|
||||
return i ;
|
||||
}
|
||||
|
||||
Array.prototype.indexOf = function( value )
|
||||
{
|
||||
for ( var i = 0 ; i < this.length ; i++ )
|
||||
{
|
||||
if ( this[i] == value )
|
||||
return i ;
|
||||
}
|
||||
return -1 ;
|
||||
}
|
||||
|
||||
String.prototype.startsWith = function( value )
|
||||
{
|
||||
return ( this.substr( 0, value.length ) == value ) ;
|
||||
}
|
||||
|
||||
// Extends the String object, creating a "endsWith" method on it.
|
||||
String.prototype.endsWith = function( value, ignoreCase )
|
||||
{
|
||||
var L1 = this.length ;
|
||||
var L2 = value.length ;
|
||||
|
||||
if ( L2 > L1 )
|
||||
return false ;
|
||||
|
||||
if ( ignoreCase )
|
||||
{
|
||||
var oRegex = new RegExp( value + '$' , 'i' ) ;
|
||||
return oRegex.test( this ) ;
|
||||
}
|
||||
else
|
||||
return ( L2 == 0 || this.substr( L1 - L2, L2 ) == value ) ;
|
||||
}
|
||||
|
||||
String.prototype.remove = function( start, length )
|
||||
{
|
||||
var s = '' ;
|
||||
|
||||
if ( start > 0 )
|
||||
s = this.substring( 0, start ) ;
|
||||
|
||||
if ( start + length < this.length )
|
||||
s += this.substring( start + length , this.length ) ;
|
||||
|
||||
return s ;
|
||||
}
|
||||
|
||||
String.prototype.trim = function()
|
||||
{
|
||||
return this.replace( /(^\s*)|(\s*$)/g, '' ) ;
|
||||
}
|
||||
|
||||
String.prototype.ltrim = function()
|
||||
{
|
||||
return this.replace( /^\s*/g, '' ) ;
|
||||
}
|
||||
|
||||
String.prototype.rtrim = function()
|
||||
{
|
||||
return this.replace( /\s*$/g, '' ) ;
|
||||
}
|
||||
|
||||
String.prototype.replaceNewLineChars = function( replacement )
|
||||
{
|
||||
return this.replace( /\n/g, replacement ) ;
|
||||
}
|
||||
@ -1,77 +0,0 @@
|
||||
/*
|
||||
* 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.js
|
||||
* Creation and initialization of the "FCK" object. This is the main object
|
||||
* that represents an editor instance.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
// FCK represents the active editor instance
|
||||
var FCK = new Object() ;
|
||||
FCK.Name = FCKURLParams[ 'InstanceName' ] ;
|
||||
|
||||
FCK.Status = FCK_STATUS_NOTLOADED ;
|
||||
FCK.EditMode = FCK_EDITMODE_WYSIWYG ;
|
||||
|
||||
FCK.LoadLinkedFile = function()
|
||||
{
|
||||
// There is a bug on IE... getElementById returns any META tag that has the
|
||||
// name set to the ID you are looking for. So the best way in to get the array
|
||||
// by names and look for the correct one.
|
||||
// As ASP.Net generates a ID that is different from the Name, we must also
|
||||
// look for the field based on the ID (the first one is the ID).
|
||||
|
||||
var oDocument = window.parent.document ;
|
||||
|
||||
var eLinkedField = oDocument.getElementById( FCK.Name ) ;
|
||||
var colElementsByName = oDocument.getElementsByName( FCK.Name ) ;
|
||||
|
||||
var i = 0;
|
||||
while ( eLinkedField || i == 0 )
|
||||
{
|
||||
if ( eLinkedField && ( eLinkedField.tagName == 'INPUT' || eLinkedField.tagName == 'TEXTAREA' ) )
|
||||
{
|
||||
FCK.LinkedField = eLinkedField ;
|
||||
break ;
|
||||
}
|
||||
eLinkedField = colElementsByName[i++] ;
|
||||
}
|
||||
}
|
||||
FCK.LoadLinkedFile() ;
|
||||
|
||||
var FCKTempBin = new Object() ;
|
||||
FCKTempBin.Elements = new Array() ;
|
||||
|
||||
FCKTempBin.AddElement = function( element )
|
||||
{
|
||||
var iIndex = this.Elements.length ;
|
||||
this.Elements[ iIndex ] = element ;
|
||||
return iIndex ;
|
||||
}
|
||||
|
||||
FCKTempBin.RemoveElement = function( index )
|
||||
{
|
||||
var e = this.Elements[ index ] ;
|
||||
this.Elements[ index ] = null ;
|
||||
return e ;
|
||||
}
|
||||
|
||||
FCKTempBin.Reset = function()
|
||||
{
|
||||
var i = 0 ;
|
||||
while ( i < this.Elements.length )
|
||||
this.Elements[ i++ ] == null ;
|
||||
this.Elements.length = 0 ;
|
||||
}
|
||||
@ -1,355 +0,0 @@
|
||||
/*
|
||||
* 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_1.js
|
||||
* This is the first part of the "FCK" object creation. This is the main
|
||||
* object that represents an editor instance.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCK_StartupValue ;
|
||||
|
||||
FCK.Events = new FCKEvents( FCK ) ;
|
||||
FCK.Toolbar = null ;
|
||||
FCK.HasFocus = false ;
|
||||
|
||||
FCK.StartEditor = function()
|
||||
{
|
||||
FCK.TempBaseTag = FCKConfig.BaseHref.length > 0 ? '<base href="' + FCKConfig.BaseHref + '" _fcktemp="true"></base>' : '' ;
|
||||
|
||||
FCK.EditingArea = new FCKEditingArea( document.getElementById( 'xEditingArea' ) ) ;
|
||||
|
||||
// Set the editor's startup contents
|
||||
this.SetHTML( FCKTools.GetLinkedFieldValue() ) ;
|
||||
}
|
||||
|
||||
FCK.Focus = function()
|
||||
{
|
||||
FCK.EditingArea.Focus() ;
|
||||
}
|
||||
|
||||
FCK.SetStatus = function( newStatus )
|
||||
{
|
||||
this.Status = newStatus ;
|
||||
|
||||
if ( newStatus == FCK_STATUS_ACTIVE )
|
||||
{
|
||||
FCKFocusManager.AddWindow( window, true ) ;
|
||||
|
||||
if ( FCKBrowserInfo.IsIE )
|
||||
FCKFocusManager.AddWindow( window.frameElement, true ) ;
|
||||
|
||||
// Force the focus in the editor.
|
||||
if ( FCKConfig.StartupFocus )
|
||||
FCK.Focus() ;
|
||||
}
|
||||
|
||||
this.Events.FireEvent( 'OnStatusChange', newStatus ) ;
|
||||
}
|
||||
|
||||
// GetHTML is Deprecated : returns the same value as GetXHTML.
|
||||
FCK.GetHTML = FCK.GetXHTML = function( format )
|
||||
{
|
||||
// We assume that if the user is in source editing, the editor value must
|
||||
// represent the exact contents of the source, as the user wanted it to be.
|
||||
if ( FCK.EditMode == FCK_EDITMODE_SOURCE )
|
||||
return FCK.EditingArea.Textarea.value ;
|
||||
|
||||
var sXHTML ;
|
||||
|
||||
if ( FCKConfig.FullPage )
|
||||
sXHTML = FCKXHtml.GetXHTML( this.EditorDocument.getElementsByTagName( 'html' )[0], true, format ) ;
|
||||
else
|
||||
{
|
||||
if ( FCKConfig.IgnoreEmptyParagraphValue && this.EditorDocument.body.innerHTML == '<P> </P>' )
|
||||
sXHTML = '' ;
|
||||
else
|
||||
sXHTML = FCKXHtml.GetXHTML( this.EditorDocument.body, false, format ) ;
|
||||
}
|
||||
|
||||
if ( FCKBrowserInfo.IsIE )
|
||||
sXHTML = sXHTML.replace( FCKRegexLib.ToReplace, '$1' ) ;
|
||||
|
||||
if ( FCK.DocTypeDeclaration && FCK.DocTypeDeclaration.length > 0 )
|
||||
sXHTML = FCK.DocTypeDeclaration + '\n' + sXHTML ;
|
||||
|
||||
if ( FCK.XmlDeclaration && FCK.XmlDeclaration.length > 0 )
|
||||
sXHTML = FCK.XmlDeclaration + '\n' + sXHTML ;
|
||||
|
||||
return FCKConfig.ProtectedSource.Revert( sXHTML ) ;
|
||||
}
|
||||
|
||||
FCK.UpdateLinkedField = function()
|
||||
{
|
||||
FCK.LinkedField.value = FCK.GetXHTML( FCKConfig.FormatOutput ) ;
|
||||
FCK.Events.FireEvent( 'OnAfterLinkedFieldUpdate' ) ;
|
||||
}
|
||||
|
||||
FCK.RegisteredDoubleClickHandlers = new Object() ;
|
||||
|
||||
FCK.OnDoubleClick = function( element )
|
||||
{
|
||||
var oHandler = FCK.RegisteredDoubleClickHandlers[ element.tagName ] ;
|
||||
if ( oHandler )
|
||||
oHandler( element ) ;
|
||||
}
|
||||
|
||||
// Register objects that can handle double click operations.
|
||||
FCK.RegisterDoubleClickHandler = function( handlerFunction, tag )
|
||||
{
|
||||
FCK.RegisteredDoubleClickHandlers[ tag.toUpperCase() ] = handlerFunction ;
|
||||
}
|
||||
|
||||
FCK.OnAfterSetHTML = function()
|
||||
{
|
||||
FCKDocumentProcessor.Process( FCK.EditorDocument ) ;
|
||||
FCK.Events.FireEvent( 'OnAfterSetHTML' ) ;
|
||||
}
|
||||
|
||||
// Saves URLs on links and images on special attributes, so they don't change when
|
||||
// moving around.
|
||||
FCK.ProtectUrls = function( html )
|
||||
{
|
||||
// <A> href
|
||||
html = html.replace( FCKRegexLib.ProtectUrlsAApo , '$1$2$3$2 _fcksavedurl=$2$3$2' ) ;
|
||||
html = html.replace( FCKRegexLib.ProtectUrlsANoApo , '$1$2 _fcksavedurl="$2"' ) ;
|
||||
|
||||
// <IMG> src
|
||||
html = html.replace( FCKRegexLib.ProtectUrlsImgApo , '$1$2$3$2 _fcksavedurl=$2$3$2' ) ;
|
||||
html = html.replace( FCKRegexLib.ProtectUrlsImgNoApo, '$1$2 _fcksavedurl="$2"' ) ;
|
||||
|
||||
return html ;
|
||||
}
|
||||
|
||||
FCK.IsDirty = function()
|
||||
{
|
||||
return ( FCK_StartupValue != FCK.EditorDocument.body.innerHTML ) ;
|
||||
}
|
||||
|
||||
FCK.ResetIsDirty = function()
|
||||
{
|
||||
if ( FCK.EditorDocument.body )
|
||||
FCK_StartupValue = FCK.EditorDocument.body.innerHTML ;
|
||||
}
|
||||
|
||||
FCK.SetHTML = function( html )
|
||||
{
|
||||
this.EditingArea.Mode = FCK.EditMode ;
|
||||
|
||||
if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
|
||||
{
|
||||
// Firefox can't handle correctly the editing of the STRONG and EM tags.
|
||||
// We must replace them with B and I.
|
||||
if ( FCKBrowserInfo.IsGecko )
|
||||
{
|
||||
html = html.replace( FCKRegexLib.StrongOpener, '<b$1' ) ;
|
||||
html = html.replace( FCKRegexLib.StrongCloser, '<\/b>' ) ;
|
||||
html = html.replace( FCKRegexLib.EmOpener, '<i$1' ) ;
|
||||
html = html.replace( FCKRegexLib.EmCloser, '<\/i>' ) ;
|
||||
}
|
||||
|
||||
html = FCKConfig.ProtectedSource.Protect( html ) ;
|
||||
html = FCK.ProtectUrls( html ) ;
|
||||
|
||||
var sHtml ;
|
||||
|
||||
if ( FCKConfig.FullPage )
|
||||
{
|
||||
var sHtml ;
|
||||
|
||||
if ( FCKBrowserInfo.IsIE )
|
||||
sHtml = FCK._GetBehaviorsStyle() ;
|
||||
else if ( FCKConfig.ShowBorders )
|
||||
sHtml = '<link href="' + FCKConfig.FullBasePath + 'css/fck_showtableborders_gecko.css" rel="stylesheet" type="text/css" _fcktemp="true" />' ;
|
||||
|
||||
sHtml += '<link href="' + FCKConfig.FullBasePath + 'css/fck_internal.css' + '" rel="stylesheet" type="text/css" _fcktemp="true" />' ;
|
||||
|
||||
sHtml = html.replace( FCKRegexLib.HeadCloser, sHtml + '$&' ) ;
|
||||
|
||||
// Insert the base tag (FCKConfig.BaseHref), if not exists in the source.
|
||||
if ( FCK.TempBaseTag.length > 0 && !FCKRegexLib.HasBaseTag.test( html ) )
|
||||
sHtml = sHtml.replace( FCKRegexLib.HeadOpener, '$&' + FCK.TempBaseTag ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
sHtml =
|
||||
FCKConfig.DocType +
|
||||
'<html dir="' + FCKConfig.ContentLangDirection + '"' ;
|
||||
|
||||
// On IE, if you are use a DOCTYPE differenft of HTML 4 (like
|
||||
// XHTML), you must force the vertical scroll to show, otherwise
|
||||
// the horizontal one may appear when the page needs vertical scrolling.
|
||||
if ( FCKBrowserInfo.IsIE && !FCKRegexLib.Html4DocType.test( FCKConfig.DocType ) )
|
||||
sHtml += ' style="overflow-y: scroll"' ;
|
||||
|
||||
sHtml +=
|
||||
'><head><title></title>' +
|
||||
this._GetEditorAreaStyleTags() +
|
||||
'<link href="css/fck_internal.css' + '" rel="stylesheet" type="text/css" _fcktemp="true" />' ;
|
||||
|
||||
if ( FCKBrowserInfo.IsIE )
|
||||
sHtml += FCK._GetBehaviorsStyle() ;
|
||||
else if ( FCKConfig.ShowBorders )
|
||||
sHtml += '<link href="css/fck_showtableborders_gecko.css" rel="stylesheet" type="text/css" _fcktemp="true" />' ;
|
||||
|
||||
sHtml += FCK.TempBaseTag ;
|
||||
sHtml += '</head><body>' ;
|
||||
|
||||
if ( FCKBrowserInfo.IsGecko && ( html.length == 0 || FCKRegexLib.EmptyParagraph.test( html ) ) )
|
||||
sHtml += GECKO_BOGUS ;
|
||||
else
|
||||
sHtml += html ;
|
||||
|
||||
sHtml += '</body></html>' ;
|
||||
}
|
||||
|
||||
this.EditingArea.OnLoad = FCK_EditingArea_OnLoad ;
|
||||
this.EditingArea.Start( sHtml ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.EditingArea.OnLoad = null ;
|
||||
this.EditingArea.Start( html ) ;
|
||||
|
||||
// Enables the context menu in the textarea.
|
||||
this.EditingArea.Textarea._FCKShowContextMenu = true ;
|
||||
}
|
||||
}
|
||||
|
||||
function FCK_EditingArea_OnLoad()
|
||||
{
|
||||
// Get the editor's window and document (DOM)
|
||||
FCK.EditorWindow = FCK.EditingArea.Window ;
|
||||
FCK.EditorDocument = FCK.EditingArea.Document ;
|
||||
|
||||
FCK.InitializeBehaviors() ;
|
||||
|
||||
FCK.OnAfterSetHTML() ;
|
||||
|
||||
// Check if it is not a startup call, otherwise complete the startup.
|
||||
if ( FCK.Status != FCK_STATUS_NOTLOADED )
|
||||
return ;
|
||||
|
||||
// Save the startup value for the "IsDirty()" check.
|
||||
FCK.ResetIsDirty() ;
|
||||
|
||||
// Attach the editor to the form onsubmit event
|
||||
FCKTools.AttachToLinkedFieldFormSubmit( FCK.UpdateLinkedField ) ;
|
||||
|
||||
FCKUndo.SaveUndoStep() ;
|
||||
|
||||
FCK.SetStatus( FCK_STATUS_ACTIVE ) ;
|
||||
}
|
||||
|
||||
FCK._GetEditorAreaStyleTags = function()
|
||||
{
|
||||
var sTags = '' ;
|
||||
var aCSSs = FCKConfig.EditorAreaCSS ;
|
||||
|
||||
for ( var i = 0 ; i < aCSSs.length ; i++ )
|
||||
sTags += '<link href="' + aCSSs[i] + '" rel="stylesheet" type="text/css" />' ;
|
||||
|
||||
return sTags ;
|
||||
}
|
||||
|
||||
// # Focus Manager: Manages the focus in the editor.
|
||||
var FCKFocusManager = FCK.FocusManager = new Object() ;
|
||||
FCKFocusManager.IsLocked = false ;
|
||||
FCK.HasFocus = false ;
|
||||
|
||||
FCKFocusManager.AddWindow = function( win, sendToEditingArea )
|
||||
{
|
||||
var oTarget ;
|
||||
|
||||
if ( FCKBrowserInfo.IsIE )
|
||||
oTarget = win.nodeType == 1 ? win : win.frameElement ? win.frameElement : win.document ;
|
||||
else
|
||||
oTarget = win.document ;
|
||||
|
||||
FCKTools.AddEventListener( oTarget, 'blur', FCKFocusManager_Win_OnBlur ) ;
|
||||
FCKTools.AddEventListener( oTarget, 'focus', sendToEditingArea ? FCKFocusManager_Win_OnFocus_Area : FCKFocusManager_Win_OnFocus ) ;
|
||||
}
|
||||
|
||||
FCKFocusManager.RemoveWindow = function( win )
|
||||
{
|
||||
if ( FCKBrowserInfo.IsIE )
|
||||
oTarget = win.nodeType == 1 ? win : win.frameElement ? win.frameElement : win.document ;
|
||||
else
|
||||
oTarget = win.document ;
|
||||
|
||||
FCKTools.RemoveEventListener( oTarget, 'blur', FCKFocusManager_Win_OnBlur ) ;
|
||||
FCKTools.RemoveEventListener( oTarget, 'focus', FCKFocusManager_Win_OnFocus_Area ) ;
|
||||
FCKTools.RemoveEventListener( oTarget, 'focus', FCKFocusManager_Win_OnFocus ) ;
|
||||
}
|
||||
|
||||
FCKFocusManager.Lock = function()
|
||||
{
|
||||
this.IsLocked = true ;
|
||||
}
|
||||
|
||||
FCKFocusManager.Unlock = function()
|
||||
{
|
||||
if ( this._HasPendingBlur )
|
||||
FCKFocusManager._Timer = window.setTimeout( FCKFocusManager_FireOnBlur, 100 ) ;
|
||||
|
||||
this.IsLocked = false ;
|
||||
}
|
||||
|
||||
FCKFocusManager._ResetTimer = function()
|
||||
{
|
||||
this._HasPendingBlur = false ;
|
||||
|
||||
if ( this._Timer )
|
||||
{
|
||||
window.clearTimeout( this._Timer ) ;
|
||||
delete this._Timer ;
|
||||
}
|
||||
}
|
||||
|
||||
function FCKFocusManager_Win_OnBlur()
|
||||
{
|
||||
if ( FCK && FCK.HasFocus )
|
||||
{
|
||||
FCKFocusManager._ResetTimer() ;
|
||||
FCKFocusManager._Timer = window.setTimeout( FCKFocusManager_FireOnBlur, 100 ) ;
|
||||
}
|
||||
}
|
||||
|
||||
function FCKFocusManager_FireOnBlur()
|
||||
{
|
||||
if ( FCKFocusManager.IsLocked )
|
||||
FCKFocusManager._HasPendingBlur = true ;
|
||||
else
|
||||
{
|
||||
FCK.HasFocus = false ;
|
||||
FCK.Events.FireEvent( "OnBlur" ) ;
|
||||
}
|
||||
}
|
||||
|
||||
function FCKFocusManager_Win_OnFocus_Area()
|
||||
{
|
||||
FCKFocusManager_Win_OnFocus() ;
|
||||
FCK.Focus() ;
|
||||
}
|
||||
|
||||
function FCKFocusManager_Win_OnFocus()
|
||||
{
|
||||
FCKFocusManager._ResetTimer() ;
|
||||
|
||||
if ( !FCK.HasFocus && !FCKFocusManager.IsLocked )
|
||||
{
|
||||
FCK.HasFocus = true ;
|
||||
FCK.Events.FireEvent( "OnFocus" ) ;
|
||||
}
|
||||
}
|
||||
@ -1,127 +0,0 @@
|
||||
/*
|
||||
* 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_1_gecko.js
|
||||
* This is the first 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)
|
||||
*/
|
||||
|
||||
FCK.Description = "FCKeditor for Gecko Browsers" ;
|
||||
|
||||
FCK.InitializeBehaviors = function()
|
||||
{
|
||||
FCKFocusManager.AddWindow( this.EditorWindow ) ;
|
||||
|
||||
// Handle pasting operations.
|
||||
var oOnKeyDown = function( e )
|
||||
{
|
||||
|
||||
// START iCM Modifications
|
||||
/*
|
||||
// Need to amend carriage return key handling so inserts block element tags rather than BR all the time
|
||||
if ( e.which == 13 && !e.shiftKey && !e.ctrlKey && !e.altKey && !FCKConfig.UseBROnCarriageReturn && !FCK.Events.FireEvent( "OnEnter" ) )
|
||||
{
|
||||
e.preventDefault() ;
|
||||
e.stopPropagation() ;
|
||||
}
|
||||
// Amend backspace handling so correctly removes empty block elements i.e. those block elements containing nothing or
|
||||
// just the bogus BR node
|
||||
if ( e.which == 8 && !e.shiftKey && !e.ctrlKey && !e.altKey && !FCKConfig.UseBROnCarriageReturn && !FCK.Events.FireEvent( "OnBackSpace" ) )
|
||||
{
|
||||
e.preventDefault() ;
|
||||
e.stopPropagation() ;
|
||||
}
|
||||
*/
|
||||
// END iCM Modifications
|
||||
|
||||
var bPrevent ;
|
||||
|
||||
if ( e.ctrlKey && !e.shiftKey && !e.altKey )
|
||||
{
|
||||
switch ( e.which )
|
||||
{
|
||||
case 66 : // B
|
||||
case 98 : // b
|
||||
FCK.ExecuteNamedCommand( 'bold' ) ; bPrevent = true ;
|
||||
break;
|
||||
case 105 : // i
|
||||
case 73 : // I
|
||||
FCK.ExecuteNamedCommand( 'italic' ) ; bPrevent = true ;
|
||||
break;
|
||||
case 117 : // u
|
||||
case 85 : // U
|
||||
FCK.ExecuteNamedCommand( 'underline' ) ; bPrevent = true ;
|
||||
break;
|
||||
case 86 : // V
|
||||
case 118 : // v
|
||||
bPrevent = ( FCK.Status != FCK_STATUS_COMPLETE || !FCK.Events.FireEvent( "OnPaste" ) ) ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
else if ( e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode == 45 ) // SHIFT + <INS>
|
||||
bPrevent = ( FCK.Status != FCK_STATUS_COMPLETE || !FCK.Events.FireEvent( "OnPaste" ) ) ;
|
||||
|
||||
if ( bPrevent )
|
||||
{
|
||||
e.preventDefault() ;
|
||||
e.stopPropagation() ;
|
||||
}
|
||||
}
|
||||
this.EditorDocument.addEventListener( 'keypress', oOnKeyDown, true ) ;
|
||||
|
||||
this.ExecOnSelectionChange = function()
|
||||
{
|
||||
FCK.Events.FireEvent( "OnSelectionChange" ) ;
|
||||
}
|
||||
|
||||
this.ExecOnSelectionChangeTimer = function()
|
||||
{
|
||||
if ( FCK.LastOnChangeTimer )
|
||||
window.clearTimeout( FCK.LastOnChangeTimer ) ;
|
||||
|
||||
FCK.LastOnChangeTimer = window.setTimeout( FCK.ExecOnSelectionChange, 100 ) ;
|
||||
}
|
||||
|
||||
this.EditorDocument.addEventListener( 'mouseup', this.ExecOnSelectionChange, false ) ;
|
||||
|
||||
// On Gecko, firing the "OnSelectionChange" event on every key press started to be too much
|
||||
// slow. So, a timer has been implemented to solve performance issues when tipying to quickly.
|
||||
this.EditorDocument.addEventListener( 'keyup', this.ExecOnSelectionChangeTimer, false ) ;
|
||||
|
||||
this._DblClickListener = function( e )
|
||||
{
|
||||
FCK.OnDoubleClick( e.target ) ;
|
||||
e.stopPropagation() ;
|
||||
}
|
||||
this.EditorDocument.addEventListener( 'dblclick', this._DblClickListener, true ) ;
|
||||
|
||||
// Reset the context menu.
|
||||
FCK.ContextMenu._InnerContextMenu.SetMouseClickWindow( FCK.EditorWindow ) ;
|
||||
FCK.ContextMenu._InnerContextMenu.AttachToElement( FCK.EditorDocument ) ;
|
||||
}
|
||||
|
||||
FCK.MakeEditable = function()
|
||||
{
|
||||
this.EditingArea.MakeEditable() ;
|
||||
}
|
||||
|
||||
// Disable the context menu in the editor (outside the editing area).
|
||||
function Document_OnContextMenu( e )
|
||||
{
|
||||
if ( !e.target._FCKShowContextMenu )
|
||||
e.preventDefault() ;
|
||||
}
|
||||
document.oncontextmenu = Document_OnContextMenu ;
|
||||
@ -1,285 +0,0 @@
|
||||
/*
|
||||
* 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_1_ie.js
|
||||
* This is the first part of the "FCK" object creation. This is the main
|
||||
* object that represents an editor instance.
|
||||
* (IE specific implementations)
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
FCK.Description = "FCKeditor for Internet Explorer 5.5+" ;
|
||||
|
||||
FCK._GetBehaviorsStyle = function()
|
||||
{
|
||||
if ( !FCK._BehaviorsStyle )
|
||||
{
|
||||
var sBasePath = FCKConfig.FullBasePath ;
|
||||
var sStyle ;
|
||||
|
||||
// The behaviors should be pointed using the FullBasePath to avoid security
|
||||
// errors when using a differente BaseHref.
|
||||
sStyle =
|
||||
'<style type="text/css" _fcktemp="true">' +
|
||||
'INPUT { behavior: url(' + sBasePath + 'css/behaviors/hiddenfield.htc) ; }' ;
|
||||
|
||||
if ( FCKConfig.ShowBorders )
|
||||
sStyle += 'TABLE { behavior: url(' + sBasePath + 'css/behaviors/showtableborders.htc) ; }' ;
|
||||
|
||||
// Disable resize handlers.
|
||||
sStyle += 'INPUT,TEXTAREA,SELECT,.FCK__Anchor,.FCK__PageBreak' ;
|
||||
|
||||
if ( FCKConfig.DisableObjectResizing )
|
||||
sStyle += ',IMG,TABLE' ;
|
||||
|
||||
sStyle += ' { behavior: url(' + sBasePath + 'css/behaviors/disablehandles.htc) ; }' ;
|
||||
|
||||
sStyle += '</style>' ;
|
||||
FCK._BehaviorsStyle = sStyle ;
|
||||
}
|
||||
|
||||
return FCK._BehaviorsStyle ;
|
||||
}
|
||||
|
||||
function Doc_OnMouseUp()
|
||||
{
|
||||
if ( FCK.EditorWindow.event.srcElement.tagName == 'HTML' )
|
||||
{
|
||||
FCK.Focus() ;
|
||||
FCK.EditorWindow.event.cancelBubble = true ;
|
||||
FCK.EditorWindow.event.returnValue = false ;
|
||||
}
|
||||
}
|
||||
|
||||
function Doc_OnPaste()
|
||||
{
|
||||
if ( FCK.Status == FCK_STATUS_COMPLETE )
|
||||
return FCK.Events.FireEvent( "OnPaste" ) ;
|
||||
else
|
||||
return false ;
|
||||
}
|
||||
|
||||
/*
|
||||
function Doc_OnContextMenu()
|
||||
{
|
||||
var e = FCK.EditorWindow.event ;
|
||||
|
||||
FCK.ShowContextMenu( e.screenX, e.screenY ) ;
|
||||
return false ;
|
||||
}
|
||||
*/
|
||||
|
||||
function Doc_OnKeyDown()
|
||||
{
|
||||
var e = FCK.EditorWindow.event ;
|
||||
|
||||
|
||||
switch ( e.keyCode )
|
||||
{
|
||||
case 13 : // ENTER
|
||||
if ( FCKConfig.UseBROnCarriageReturn && !(e.ctrlKey || e.altKey || e.shiftKey) )
|
||||
{
|
||||
Doc_OnKeyDownUndo() ;
|
||||
|
||||
// We must ignore it if we are inside a List.
|
||||
if ( FCK.EditorDocument.queryCommandState( 'InsertOrderedList' ) || FCK.EditorDocument.queryCommandState( 'InsertUnorderedList' ) )
|
||||
return true ;
|
||||
|
||||
// Insert the <BR> (The must be also inserted to make it work)
|
||||
FCK.InsertHtml( '<br> ' ) ;
|
||||
|
||||
// Remove the
|
||||
var oRange = FCK.EditorDocument.selection.createRange() ;
|
||||
oRange.moveStart( 'character', -1 ) ;
|
||||
oRange.select() ;
|
||||
FCK.EditorDocument.selection.clear() ;
|
||||
|
||||
return false ;
|
||||
}
|
||||
break ;
|
||||
|
||||
case 8 : // BACKSPACE
|
||||
// We must delete a control selection by code and cancels the
|
||||
// keystroke, otherwise IE will execute the browser's "back" button.
|
||||
if ( FCKSelection.GetType() == 'Control' )
|
||||
{
|
||||
FCKSelection.Delete() ;
|
||||
return false ;
|
||||
}
|
||||
break ;
|
||||
|
||||
case 9 : // TAB
|
||||
if ( FCKConfig.TabSpaces > 0 && !(e.ctrlKey || e.altKey || e.shiftKey) )
|
||||
{
|
||||
Doc_OnKeyDownUndo() ;
|
||||
|
||||
FCK.InsertHtml( window.FCKTabHTML ) ;
|
||||
return false ;
|
||||
}
|
||||
break ;
|
||||
case 90 : // Z
|
||||
if ( e.ctrlKey && !(e.altKey || e.shiftKey) )
|
||||
{
|
||||
FCKUndo.Undo() ;
|
||||
return false ;
|
||||
}
|
||||
break ;
|
||||
case 89 : // Y
|
||||
if ( e.ctrlKey && !(e.altKey || e.shiftKey) )
|
||||
{
|
||||
FCKUndo.Redo() ;
|
||||
return false ;
|
||||
}
|
||||
break ;
|
||||
}
|
||||
|
||||
if ( !( e.keyCode >=16 && e.keyCode <= 18 ) )
|
||||
Doc_OnKeyDownUndo() ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
function Doc_OnKeyDownUndo()
|
||||
{
|
||||
if ( !FCKUndo.Typing )
|
||||
{
|
||||
FCKUndo.SaveUndoStep() ;
|
||||
FCKUndo.Typing = true ;
|
||||
FCK.Events.FireEvent( "OnSelectionChange" ) ;
|
||||
}
|
||||
|
||||
FCKUndo.TypesCount++ ;
|
||||
|
||||
if ( FCKUndo.TypesCount > FCKUndo.MaxTypes )
|
||||
{
|
||||
FCKUndo.TypesCount = 0 ;
|
||||
FCKUndo.SaveUndoStep() ;
|
||||
}
|
||||
}
|
||||
|
||||
function Doc_OnDblClick()
|
||||
{
|
||||
FCK.OnDoubleClick( FCK.EditorWindow.event.srcElement ) ;
|
||||
FCK.EditorWindow.event.cancelBubble = true ;
|
||||
}
|
||||
|
||||
function Doc_OnSelectionChange()
|
||||
{
|
||||
FCK.Events.FireEvent( "OnSelectionChange" ) ;
|
||||
}
|
||||
|
||||
FCK.InitializeBehaviors = function( dontReturn )
|
||||
{
|
||||
// Set the focus to the editable area when clicking in the document area.
|
||||
// TODO: The cursor must be positioned at the end.
|
||||
this.EditorDocument.attachEvent( 'onmouseup', Doc_OnMouseUp ) ;
|
||||
|
||||
// Intercept pasting operations
|
||||
this.EditorDocument.body.attachEvent( 'onpaste', Doc_OnPaste ) ;
|
||||
|
||||
// Reset the context menu.
|
||||
FCK.ContextMenu._InnerContextMenu.AttachToElement( FCK.EditorDocument.body ) ;
|
||||
|
||||
// Build the "TAB" key replacement (if necessary).
|
||||
if ( FCKConfig.TabSpaces > 0 )
|
||||
{
|
||||
window.FCKTabHTML = '' ;
|
||||
for ( i = 0 ; i < FCKConfig.TabSpaces ; i++ )
|
||||
window.FCKTabHTML += " " ;
|
||||
}
|
||||
this.EditorDocument.attachEvent("onkeydown", Doc_OnKeyDown ) ;
|
||||
|
||||
this.EditorDocument.attachEvent("ondblclick", Doc_OnDblClick ) ;
|
||||
|
||||
// Catch cursor movements
|
||||
this.EditorDocument.attachEvent("onselectionchange", Doc_OnSelectionChange ) ;
|
||||
|
||||
//Enable editing
|
||||
// this.EditorDocument.body.contentEditable = true ;
|
||||
}
|
||||
|
||||
FCK.InsertHtml = function( html )
|
||||
{
|
||||
html = FCKConfig.ProtectedSource.Protect( html ) ;
|
||||
html = FCK.ProtectUrls( html ) ;
|
||||
|
||||
FCK.Focus() ;
|
||||
|
||||
FCKUndo.SaveUndoStep() ;
|
||||
|
||||
// Gets the actual selection.
|
||||
var oSel = FCK.EditorDocument.selection ;
|
||||
|
||||
// Deletes the actual selection contents.
|
||||
if ( oSel.type.toLowerCase() == 'control' )
|
||||
oSel.clear() ;
|
||||
|
||||
// Insert the HTML.
|
||||
oSel.createRange().pasteHTML( html ) ;
|
||||
}
|
||||
|
||||
FCK.SetInnerHtml = function( html ) // IE Only
|
||||
{
|
||||
var oDoc = FCK.EditorDocument ;
|
||||
// Using the following trick, any comment in the begining of the HTML will
|
||||
// be preserved.
|
||||
oDoc.body.innerHTML = '<div id="__fakeFCKRemove__"> </div>' + html ;
|
||||
oDoc.getElementById('__fakeFCKRemove__').removeNode( true ) ;
|
||||
}
|
||||
|
||||
var FCK_PreloadImages_Count = 0 ;
|
||||
var FCK_PreloadImages_Images = new Array() ;
|
||||
|
||||
function FCK_PreloadImages()
|
||||
{
|
||||
// Get the images to preload.
|
||||
var aImages = FCKConfig.PreloadImages || [] ;
|
||||
|
||||
if ( typeof( aImages ) == 'string' )
|
||||
aImages = aImages.split( ';' ) ;
|
||||
|
||||
// Add the skin icons strip.
|
||||
aImages.push( FCKConfig.SkinPath + 'fck_strip.gif' ) ;
|
||||
|
||||
FCK_PreloadImages_Count = aImages.length ;
|
||||
|
||||
var aImageElements = new Array() ;
|
||||
|
||||
for ( var i = 0 ; i < aImages.length ; i++ )
|
||||
{
|
||||
var eImg = document.createElement( 'img' ) ;
|
||||
eImg.onload = eImg.onerror = FCK_PreloadImages_OnImage ;
|
||||
eImg.src = aImages[i] ;
|
||||
|
||||
FCK_PreloadImages_Images[i] = eImg ;
|
||||
}
|
||||
}
|
||||
|
||||
function FCK_PreloadImages_OnImage()
|
||||
{
|
||||
if ( (--FCK_PreloadImages_Count) == 0 )
|
||||
FCKTools.RunFunction( LoadToolbarSetup ) ;
|
||||
}
|
||||
|
||||
// Disable the context menu in the editor (outside the editing area).
|
||||
function Document_OnContextMenu()
|
||||
{
|
||||
return ( event.srcElement._FCKShowContextMenu == true ) ;
|
||||
}
|
||||
document.oncontextmenu = Document_OnContextMenu ;
|
||||
|
||||
function FCK_Cleanup()
|
||||
{
|
||||
this.EditorWindow = null ;
|
||||
this.EditorDocument = null ;
|
||||
}
|
||||
@ -1,165 +0,0 @@
|
||||
/*
|
||||
* 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.js
|
||||
* This is the second part of the "FCK" object creation. This is the main
|
||||
* object that represents an editor instance.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
// This collection is used by the browser specific implementations to tell
|
||||
// wich named commands must be handled separately.
|
||||
FCK.RedirectNamedCommands = new Object() ;
|
||||
|
||||
FCK.ExecuteNamedCommand = function( commandName, commandParameter, noRedirect )
|
||||
{
|
||||
FCKUndo.SaveUndoStep() ;
|
||||
|
||||
if ( !noRedirect && FCK.RedirectNamedCommands[ commandName ] != null )
|
||||
FCK.ExecuteRedirectedNamedCommand( commandName, commandParameter ) ;
|
||||
else
|
||||
{
|
||||
FCK.Focus() ;
|
||||
FCK.EditorDocument.execCommand( commandName, false, commandParameter ) ;
|
||||
FCK.Events.FireEvent( 'OnSelectionChange' ) ;
|
||||
}
|
||||
|
||||
FCKUndo.SaveUndoStep() ;
|
||||
}
|
||||
|
||||
FCK.GetNamedCommandState = function( commandName )
|
||||
{
|
||||
try
|
||||
{
|
||||
if ( !FCK.EditorDocument.queryCommandEnabled( commandName ) )
|
||||
return FCK_TRISTATE_DISABLED ;
|
||||
else
|
||||
return FCK.EditorDocument.queryCommandState( commandName ) ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF ;
|
||||
}
|
||||
catch ( e )
|
||||
{
|
||||
return FCK_TRISTATE_OFF ;
|
||||
}
|
||||
}
|
||||
|
||||
FCK.GetNamedCommandValue = function( commandName )
|
||||
{
|
||||
var sValue = '' ;
|
||||
var eState = FCK.GetNamedCommandState( commandName ) ;
|
||||
|
||||
if ( eState == FCK_TRISTATE_DISABLED )
|
||||
return null ;
|
||||
|
||||
try
|
||||
{
|
||||
sValue = this.EditorDocument.queryCommandValue( commandName ) ;
|
||||
}
|
||||
catch(e) {}
|
||||
|
||||
return sValue ? sValue : '' ;
|
||||
}
|
||||
|
||||
FCK.PasteFromWord = function()
|
||||
{
|
||||
FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.PasteFromWord, 'dialog/fck_paste.html', 400, 330, 'Word' ) ;
|
||||
}
|
||||
|
||||
FCK.Preview = function()
|
||||
{
|
||||
var iWidth = FCKConfig.ScreenWidth * 0.8 ;
|
||||
var iHeight = FCKConfig.ScreenHeight * 0.7 ;
|
||||
var iLeft = ( FCKConfig.ScreenWidth - iWidth ) / 2 ;
|
||||
var oWindow = window.open( '', null, 'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width=' + iWidth + ',height=' + iHeight + ',left=' + iLeft ) ;
|
||||
|
||||
var sHTML ;
|
||||
|
||||
if ( FCKConfig.FullPage )
|
||||
{
|
||||
if ( FCK.TempBaseTag.length > 0 )
|
||||
sHTML = FCK.GetXHTML().replace( FCKRegexLib.HeadOpener, '$&' + FCK.TempBaseTag ) ;
|
||||
else
|
||||
sHTML = FCK.GetXHTML() ;
|
||||
}
|
||||
else
|
||||
{
|
||||
sHTML =
|
||||
FCKConfig.DocType +
|
||||
'<html dir="' + FCKConfig.ContentLangDirection + '">' +
|
||||
'<head>' +
|
||||
FCK.TempBaseTag +
|
||||
'<title>' + FCKLang.Preview + '</title>' +
|
||||
FCK._GetEditorAreaStyleTags() +
|
||||
'</head><body>' +
|
||||
FCK.GetXHTML() +
|
||||
'</body></html>' ;
|
||||
}
|
||||
|
||||
oWindow.document.write( sHTML );
|
||||
oWindow.document.close();
|
||||
}
|
||||
|
||||
FCK.SwitchEditMode = function( noUndo )
|
||||
{
|
||||
var bIsWysiwyg = ( FCK.EditMode == FCK_EDITMODE_WYSIWYG ) ;
|
||||
var sHtml ;
|
||||
|
||||
// Update the HTML in the view output to show.
|
||||
if ( bIsWysiwyg )
|
||||
{
|
||||
if ( !noUndo && FCKBrowserInfo.IsIE )
|
||||
FCKUndo.SaveUndoStep() ;
|
||||
|
||||
sHtml = FCK.GetXHTML( FCKConfig.FormatSource ) ;
|
||||
}
|
||||
else
|
||||
sHtml = this.EditingArea.Textarea.value ;
|
||||
|
||||
FCK.EditMode = bIsWysiwyg ? FCK_EDITMODE_SOURCE : FCK_EDITMODE_WYSIWYG ;
|
||||
|
||||
FCK.SetHTML( sHtml ) ;
|
||||
|
||||
if ( FCKBrowserInfo.IsGecko )
|
||||
window.onresize() ;
|
||||
|
||||
// Set the Focus.
|
||||
FCK.Focus() ;
|
||||
|
||||
// Update the toolbar (Running it directly causes IE to fail).
|
||||
FCKTools.RunFunction( FCK.ToolbarSet.RefreshModeState, FCK.ToolbarSet ) ;
|
||||
}
|
||||
|
||||
FCK.CreateElement = function( tag )
|
||||
{
|
||||
var e = FCK.EditorDocument.createElement( tag ) ;
|
||||
return FCK.InsertElementAndGetIt( e ) ;
|
||||
}
|
||||
|
||||
FCK.InsertElementAndGetIt = function( e )
|
||||
{
|
||||
e.setAttribute( 'FCKTempLabel', 'true' ) ;
|
||||
|
||||
this.InsertElement( e ) ;
|
||||
|
||||
var aEls = FCK.EditorDocument.getElementsByTagName( e.tagName ) ;
|
||||
|
||||
for ( var i = 0 ; i < aEls.length ; i++ )
|
||||
{
|
||||
if ( aEls[i].getAttribute( 'FCKTempLabel' ) )
|
||||
{
|
||||
aEls[i].removeAttribute( 'FCKTempLabel' ) ;
|
||||
return aEls[i] ;
|
||||
}
|
||||
}
|
||||
return null ;
|
||||
}
|
||||
@ -1,461 +0,0 @@
|
||||
/*
|
||||
* 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
|
||||
// START iCM MODIFICATIONS
|
||||
// Include list functions so we can ensure content is wrapped
|
||||
// with P tags if not using BRs on carriage return, etc
|
||||
/*
|
||||
InsertOrderedList : true,
|
||||
InsertUnorderedList : true
|
||||
*/
|
||||
// END iCM MODIFICATIONS
|
||||
}
|
||||
|
||||
// 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 ;
|
||||
|
||||
// START iCM MODIFICATIONS
|
||||
/*
|
||||
case 'InsertOrderedList' :
|
||||
case 'InsertUnorderedList' :
|
||||
|
||||
if ( !FCKConfig.UseBROnCarriageReturn && FCK.EditorDocument.queryCommandState( commandName ) )
|
||||
{
|
||||
// We're in a list item which is in the same type of list as the toolbar button clicked
|
||||
// Therefore, move the selected list item out of the list as is done on an ENTER key within
|
||||
// an empty list item.
|
||||
var oSel = FCK.EditorWindow.getSelection() ;
|
||||
var oSelNode = oSel.focusNode ;
|
||||
var oLINode = FCKTools.GetElementAscensor( oSelNode, "LI" ) ;
|
||||
FCK.ToggleListItem( oLINode, oSelNode ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Let the default handler do its stuff
|
||||
FCK.Focus() ;
|
||||
FCK.EditorDocument.execCommand( commandName, false, commandParameter ) ;
|
||||
}
|
||||
|
||||
FCK.Events.FireEvent( 'OnSelectionChange' ) ;
|
||||
break ;
|
||||
*/
|
||||
// END iCM MODIFICATIONS
|
||||
|
||||
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 ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// START iCM Modifications
|
||||
/*
|
||||
// Ensure that behaviour of the ENTER key or the list toolbar button works correctly for a list item.
|
||||
// ENTER in empty list item at top of list should result in the empty list item being
|
||||
// removed and selection being moved out of the list into a P tag above it.
|
||||
// ENTER in empty list item at bottom of list should result in the empty list item being
|
||||
// removed and selection being moved out of the list into a P tag below it.
|
||||
// ENTER in empty list item in middle of the list should result in the list being split
|
||||
// into two and the selection being moved into a P tag between the two resulting lists.
|
||||
// Clicking the list toolbar button in a list item at top of list should result in the list item's contents being
|
||||
// moved out of the list into a P tag above it.
|
||||
// Clicking the list toolbar button in a list item at the bottom of list should result in the list item's contents being
|
||||
// moved out of the list into a P tag below it.
|
||||
// Clicking the list toolbar button in a list item in the middle of the list should result in the list being split
|
||||
// into two and the list item's contents being moved into a P tag between the two resulting lists.
|
||||
FCK.ToggleListItem = function( oLINode, oSelNode )
|
||||
{
|
||||
var oListNode = FCKTools.GetElementAscensor( oLINode, "UL,OL" ) ;
|
||||
var oRange = FCK.EditorDocument.createRange() ;
|
||||
|
||||
// Create a new block element
|
||||
var oBlockNode = FCK.EditorDocument.createElement( "P" ) ;
|
||||
oBlockNode.innerHTML = oLINode.innerHTML ; // Transfer any list item contents
|
||||
if ( FCKTools.NodeIsEmpty( oBlockNode ) )
|
||||
oBlockNode.innerHTML = GECKO_BOGUS ; // Ensure it has some content, required for Gecko
|
||||
if ( oLINode.className && oLINode.className != '' )
|
||||
oBlockNode.className = oLINode.className ; // Transfer across any class attribute
|
||||
|
||||
var oCursorNode = oBlockNode ;
|
||||
|
||||
// Then, perform list processing and locate the point at which the new P tag is to be inserted
|
||||
if ( oListNode.childNodes[0] == oLINode )
|
||||
{
|
||||
// First LI was empty so want to leave list and insert P above it
|
||||
oListNode.removeChild( oLINode );
|
||||
// Need to insert a new P tag (or other suitable block element) just before the list
|
||||
oRange.setStartBefore( oListNode ) ;
|
||||
oRange.setEndBefore( oListNode ) ;
|
||||
}
|
||||
else if ( oListNode.childNodes[oListNode.childNodes.length-1] == oLINode )
|
||||
{
|
||||
// Last LI was empty so want to leave list and insert new block element in the parent
|
||||
oListNode.removeChild( oLINode );
|
||||
// Need to insert a new P tag (or other suitable block element) just after the list
|
||||
oRange.setEndAfter( oListNode ) ;
|
||||
oRange.setStartAfter( oListNode ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
// A middle LI was empty so want to break list into two and insert the new block/text node in between them
|
||||
oListNode = FCKTools.SplitNode( oListNode, oSelNode, 0 ) ;
|
||||
oListNode.removeChild( oListNode.childNodes[0] ) ;
|
||||
oRange.setStartBefore( oListNode ) ;
|
||||
oRange.setEndBefore( oListNode ) ;
|
||||
}
|
||||
|
||||
// Insert new block/text node
|
||||
oRange.insertNode( oBlockNode ) ;
|
||||
|
||||
// Ensure that we don't leave empty UL/OL tags behind
|
||||
if ( oListNode.childNodes.length == 0 )
|
||||
oListNode.parentNode.removeChild( oListNode ) ;
|
||||
|
||||
// Reset cursor position to start of the new P tag's contents ready for typing
|
||||
FCK.Selection.SetCursorPosition( oCursorNode ) ;
|
||||
}
|
||||
|
||||
FCK.ListItemEnter = function( oLINode, oSelNode, nSelOffset )
|
||||
{
|
||||
// Ensure that behaviour of ENTER key within an empty list element works correctly.
|
||||
// ENTER in empty list item at top of list should result in the empty list item being
|
||||
// removed and selection being moved out of the list into a P tag above it.
|
||||
// ENTER in empty list item at bottom of list should result in the empty list item being
|
||||
// removed and selection being moved out of the list into a P tag below it.
|
||||
// ENTER in empty list item in middle of the list should result in the list being split
|
||||
// into two and the selection being moved into a P tag between the two resulting lists.
|
||||
if ( FCKTools.NodeIsEmpty( oLINode ) )
|
||||
{
|
||||
FCK.ToggleListItem( oLINode, oSelNode ) ;
|
||||
return false ; // Job done, perform no default handling
|
||||
}
|
||||
|
||||
return true ; // If non-empty list item, let default handler do its stuff
|
||||
}
|
||||
|
||||
FCK.ListItemBackSpace = function( oSelNode, nSelOffset )
|
||||
{
|
||||
// Ensure that behaviour of BACKSPACE key within an empty list element works correctly.
|
||||
// BACKSPACE in empty list item at top of list should result in the empty list item being
|
||||
// removed and selection being moved out of the list into a P tag above it.
|
||||
// Allow the default handler to do its stuff for backspace in other list elements.
|
||||
var oListNode = oSelNode.parentNode ;
|
||||
|
||||
if ( FCKTools.NodeIsEmpty( oSelNode ) && ( oListNode.childNodes[0] == oSelNode ) )
|
||||
{
|
||||
var oRange = FCK.EditorDocument.createRange() ;
|
||||
|
||||
// Create a new P element
|
||||
var oBlockNode = FCK.EditorDocument.createElement( "P" ) ;
|
||||
if ( FCKTools.NodeIsEmpty( oBlockNode ) )
|
||||
oBlockNode.innerHTML = GECKO_BOGUS ; // Ensure it has some content, required for Gecko
|
||||
|
||||
// First LI was empty so want to leave list and insert P above it
|
||||
oListNode.removeChild( oSelNode );
|
||||
oRange.setStartBefore( oListNode ) ;
|
||||
oRange.setEndBefore( oListNode ) ;
|
||||
|
||||
// Insert new P tag
|
||||
oRange.insertNode( oBlockNode ) ;
|
||||
|
||||
// Ensure that we don't leave empty UL/OL tags behind
|
||||
if ( oListNode.childNodes.length == 0 )
|
||||
oListNode.parentNode.removeChild( oListNode ) ;
|
||||
|
||||
// Reset cursor position to start of the new P tag's contents ready for typing
|
||||
FCK.Selection.SetCursorPosition( oBlockNode ) ;
|
||||
|
||||
return false ; // Job done, perform no default handling
|
||||
}
|
||||
|
||||
return true ; // Let default handler do its stuff if not backspacing in an empty first LI
|
||||
}
|
||||
|
||||
FCK.Enter = function()
|
||||
{
|
||||
// Remove any selected content before we begin so we end up with a single selection point
|
||||
FCK.Selection.Delete() ;
|
||||
|
||||
// Determine the current cursor (selection) point, the node it's within and the offset
|
||||
// position of the cursor within that node
|
||||
var oSel = FCK.EditorWindow.getSelection() ;
|
||||
var nSelOffset = oSel.focusOffset;
|
||||
var oSelNode = oSel.focusNode ;
|
||||
|
||||
// Guard against a null focus node.
|
||||
if ( !oSelNode )
|
||||
return false ;
|
||||
|
||||
var oLINode = FCKTools.GetElementAscensor( oSelNode, "LI" ) ;
|
||||
|
||||
if ( oLINode ) // An LI element is selected
|
||||
{
|
||||
// Handle list items separately as need to handle termination of the list, etc
|
||||
return FCK.ListItemEnter( oLINode, oSelNode, nSelOffset ) ;
|
||||
}
|
||||
else if ( oSelNode.nodeType == 3 ) // A TEXT node is selected
|
||||
{
|
||||
// Split it at the selection point and ensure both halves have a suitable enclosing block element
|
||||
var oParentBlockNode = FCKTools.GetParentBlockNode( oSelNode ) ;
|
||||
var oBlockNode2 = FCKTools.SplitNode( oParentBlockNode ? oParentBlockNode : FCK.EditorDocument.body, oSelNode, nSelOffset ) ;
|
||||
|
||||
FCK.Selection.SetCursorPosition( oBlockNode2 );
|
||||
|
||||
return false ;
|
||||
}
|
||||
else // An ELEMENT node is selected
|
||||
{
|
||||
// Cater for ENTER being pressed after very last element in the editor e.g. pressing ENTER after table element at very end of the editor's content
|
||||
if ( nSelOffset >= oSelNode.childNodes.length )
|
||||
{
|
||||
var oBlockNode = FCK.EditorDocument.createElement( "P" ) ;
|
||||
if ( FCKTools.NodeIsEmpty( oBlockNode ) )
|
||||
oBlockNode.innerHTML = GECKO_BOGUS ; // Ensure it has some content, required for Gecko
|
||||
oSelNode.appendChild( oBlockNode ) ;
|
||||
FCK.Selection.SetCursorPosition( oBlockNode ) ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
var oBlockNode2 = FCKTools.SplitNode( oSelNode, oSelNode.childNodes[nSelOffset] ) ;
|
||||
|
||||
FCK.Selection.SetCursorPosition( oBlockNode2 );
|
||||
|
||||
return false ;
|
||||
}
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
FCK.BackSpace = function()
|
||||
{
|
||||
var oSel = FCK.EditorWindow.getSelection() ;
|
||||
var oSelNode = oSel.focusNode ;
|
||||
var nSelOffset = oSel.focusOffset;
|
||||
var oParentNode = null ;
|
||||
|
||||
// Guard against a null focus node.
|
||||
if ( !oSelNode )
|
||||
return false ;
|
||||
|
||||
if ( oSelNode.nodeName.toUpperCase() == "LI" ) // An LI element is selected
|
||||
{
|
||||
// Handle list items separately as need to handle termination of the list, etc
|
||||
return FCK.ListItemBackSpace( oSelNode, nSelOffset ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
// If we are anything other than a TEXT node, move to the child indicated by the selection offset
|
||||
if ( oSelNode.nodeType != 3 )
|
||||
{
|
||||
oSelNode = oSelNode.childNodes[nSelOffset] ;
|
||||
nSelOffset = 0 ;
|
||||
}
|
||||
|
||||
// If we are the first child and the previous sibling of the parent is an empty block element (containing nothing or just the filler element)
|
||||
// want the backspace to completely remove the empty block element
|
||||
if ( !oSelNode.previousSibling && nSelOffset <= 0 )
|
||||
{
|
||||
oParentNode = oSelNode.parentNode ;
|
||||
|
||||
if ( oParentNode && oParentNode.previousSibling && FCKRegexLib.BlockElements.test( oParentNode.previousSibling.nodeName ) )
|
||||
{
|
||||
if ( FCKTools.NodeIsEmpty( oParentNode.previousSibling ) )
|
||||
{
|
||||
var oRange = FCK.EditorDocument.createRange() ;
|
||||
oRange.selectNode ( oParentNode.previousSibling );
|
||||
oRange.deleteContents() ;
|
||||
|
||||
// Don't do any default processing
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true ; // Let default processing do its stuff
|
||||
}
|
||||
*/
|
||||
// END iCM Modifications
|
||||
|
||||
@ -1,157 +0,0 @@
|
||||
/*
|
||||
* 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_ie.js
|
||||
* This is the second part of the "FCK" object creation. This is the main
|
||||
* object that represents an editor instance.
|
||||
* (IE specific implementations)
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
/*
|
||||
if ( FCKConfig.UseBROnCarriageReturn )
|
||||
{
|
||||
// Named commands to be handled by this browsers specific implementation.
|
||||
FCK.RedirectNamedCommands =
|
||||
{
|
||||
InsertOrderedList : true,
|
||||
InsertUnorderedList : true
|
||||
}
|
||||
|
||||
FCK.ExecuteRedirectedNamedCommand = function( commandName, commandParameter )
|
||||
{
|
||||
if ( commandName == 'InsertOrderedList' || commandName == 'InsertUnorderedList' )
|
||||
{
|
||||
if ( !(FCK.EditorDocument.queryCommandState( 'InsertOrderedList' ) || FCK.EditorDocument.queryCommandState( 'InsertUnorderedList' )) )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
FCK.ExecuteNamedCommand( commandName, commandParameter ) ;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
FCK.Paste = function()
|
||||
{
|
||||
if ( FCKConfig.ForcePasteAsPlainText )
|
||||
{
|
||||
FCK.PasteAsPlainText() ;
|
||||
return false ;
|
||||
}
|
||||
else if ( FCKConfig.AutoDetectPasteFromWord )
|
||||
{
|
||||
var sHTML = FCK.GetClipboardHTML() ;
|
||||
var re = /<\w[^>]*(( class="?MsoNormal"?)|(="mso-))/gi ;
|
||||
if ( re.test( sHTML ) )
|
||||
{
|
||||
if ( confirm( FCKLang["PasteWordConfirm"] ) )
|
||||
{
|
||||
FCK.PasteFromWord() ;
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
return true ;
|
||||
}
|
||||
|
||||
FCK.PasteAsPlainText = function()
|
||||
{
|
||||
// Get the data available in the clipboard and encodes it in HTML.
|
||||
var sText = FCKTools.HTMLEncode( clipboardData.getData("Text") ) ;
|
||||
|
||||
// Replace the carriage returns with <BR>
|
||||
sText = sText.replace( /\n/g, '<BR>' ) ;
|
||||
|
||||
// Insert the resulting data in the editor.
|
||||
this.InsertHtml( sText ) ;
|
||||
}
|
||||
/*
|
||||
FCK.PasteFromWord = function()
|
||||
{
|
||||
FCK.CleanAndPaste( FCK.GetClipboardHTML() ) ;
|
||||
}
|
||||
*/
|
||||
FCK.InsertElement = function( element )
|
||||
{
|
||||
FCK.InsertHtml( element.outerHTML ) ;
|
||||
}
|
||||
|
||||
FCK.GetClipboardHTML = function()
|
||||
{
|
||||
var oDiv = document.getElementById( '___FCKHiddenDiv' ) ;
|
||||
|
||||
if ( !oDiv )
|
||||
{
|
||||
var oDiv = document.createElement( 'DIV' ) ;
|
||||
oDiv.id = '___FCKHiddenDiv' ;
|
||||
oDiv.style.visibility = 'hidden' ;
|
||||
oDiv.style.overflow = 'hidden' ;
|
||||
oDiv.style.position = 'absolute' ;
|
||||
oDiv.style.width = 1 ;
|
||||
oDiv.style.height = 1 ;
|
||||
|
||||
document.body.appendChild( oDiv ) ;
|
||||
}
|
||||
|
||||
oDiv.innerHTML = '' ;
|
||||
|
||||
var oTextRange = document.body.createTextRange() ;
|
||||
oTextRange.moveToElementText( oDiv ) ;
|
||||
oTextRange.execCommand( 'Paste' ) ;
|
||||
|
||||
var sData = oDiv.innerHTML ;
|
||||
oDiv.innerHTML = '' ;
|
||||
|
||||
return sData ;
|
||||
}
|
||||
|
||||
FCK.AttachToOnSelectionChange = function( functionPointer )
|
||||
{
|
||||
this.Events.AttachEvent( 'OnSelectionChange', functionPointer ) ;
|
||||
}
|
||||
|
||||
/*
|
||||
FCK.AttachToOnSelectionChange = function( functionPointer )
|
||||
{
|
||||
FCK.EditorDocument.attachEvent( 'onselectionchange', functionPointer ) ;
|
||||
}
|
||||
*/
|
||||
|
||||
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 ) ;
|
||||
|
||||
// Loof for the just create link.
|
||||
var oLinks = this.EditorDocument.links ;
|
||||
|
||||
for ( i = 0 ; i < oLinks.length ; i++ )
|
||||
{
|
||||
if ( oLinks[i].href == sTempUrl )
|
||||
{
|
||||
oLinks[i].href = url ;
|
||||
return oLinks[i] ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,287 +0,0 @@
|
||||
/*
|
||||
* 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_contextmenu.js
|
||||
* Defines the FCK.ContextMenu object that is responsible for all
|
||||
* Context Menu operations in the editing area.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
FCK.ContextMenu = new Object() ;
|
||||
FCK.ContextMenu.Listeners = new Array() ;
|
||||
|
||||
FCK.ContextMenu.RegisterListener = function( listener )
|
||||
{
|
||||
if ( listener )
|
||||
this.Listeners.push( listener ) ;
|
||||
}
|
||||
|
||||
function FCK_ContextMenu_Init()
|
||||
{
|
||||
var oInnerContextMenu = FCK.ContextMenu._InnerContextMenu = new FCKContextMenu( FCKBrowserInfo.IsIE ? window : window.parent, FCK.EditorWindow, FCKLang.Dir ) ;
|
||||
oInnerContextMenu.OnBeforeOpen = FCK_ContextMenu_OnBeforeOpen ;
|
||||
oInnerContextMenu.OnItemClick = FCK_ContextMenu_OnItemClick ;
|
||||
|
||||
// Get the registering function.
|
||||
var oMenu = FCK.ContextMenu ;
|
||||
|
||||
// Register all configured context menu listeners.
|
||||
for ( var i = 0 ; i < FCKConfig.ContextMenu.length ; i++ )
|
||||
oMenu.RegisterListener( FCK_ContextMenu_GetListener( FCKConfig.ContextMenu[i] ) ) ;
|
||||
}
|
||||
|
||||
function FCK_ContextMenu_GetListener( listenerName )
|
||||
{
|
||||
switch ( listenerName )
|
||||
{
|
||||
case 'Generic' :
|
||||
return {
|
||||
AddItems : function( menu, tag, tagName )
|
||||
{
|
||||
menu.AddItem( 'Cut' , FCKLang.Cut , 7, FCKCommands.GetCommand( 'Cut' ).GetState() == FCK_TRISTATE_DISABLED ) ;
|
||||
menu.AddItem( 'Copy' , FCKLang.Copy , 8, FCKCommands.GetCommand( 'Copy' ).GetState() == FCK_TRISTATE_DISABLED ) ;
|
||||
menu.AddItem( 'Paste' , FCKLang.Paste , 9, FCKCommands.GetCommand( 'Paste' ).GetState() == FCK_TRISTATE_DISABLED ) ;
|
||||
}} ;
|
||||
|
||||
case 'Table' :
|
||||
return {
|
||||
AddItems : function( menu, tag, tagName )
|
||||
{
|
||||
var bIsTable = ( tagName == 'TABLE' ) ;
|
||||
var bIsCell = ( !bIsTable && FCKSelection.HasAncestorNode( 'TABLE' ) ) ;
|
||||
|
||||
if ( bIsCell )
|
||||
{
|
||||
menu.AddSeparator() ;
|
||||
var oItem = menu.AddItem( 'Cell' , FCKLang.CellCM ) ;
|
||||
oItem.AddItem( 'TableInsertCell' , FCKLang.InsertCell, 58 ) ;
|
||||
oItem.AddItem( 'TableDeleteCells' , FCKLang.DeleteCells, 59 ) ;
|
||||
oItem.AddItem( 'TableMergeCells' , FCKLang.MergeCells, 60 ) ;
|
||||
oItem.AddItem( 'TableSplitCell' , FCKLang.SplitCell, 61 ) ;
|
||||
oItem.AddSeparator() ;
|
||||
oItem.AddItem( 'TableCellProp' , FCKLang.CellProperties, 57 ) ;
|
||||
|
||||
menu.AddSeparator() ;
|
||||
oItem = menu.AddItem( 'Row' , FCKLang.RowCM ) ;
|
||||
oItem.AddItem( 'TableInsertRow' , FCKLang.InsertRow, 62 ) ;
|
||||
oItem.AddItem( 'TableDeleteRows' , FCKLang.DeleteRows, 63 ) ;
|
||||
|
||||
menu.AddSeparator() ;
|
||||
oItem = menu.AddItem( 'Column' , FCKLang.ColumnCM ) ;
|
||||
oItem.AddItem( 'TableInsertColumn' , FCKLang.InsertColumn, 64 ) ;
|
||||
oItem.AddItem( 'TableDeleteColumns' , FCKLang.DeleteColumns, 65 ) ;
|
||||
}
|
||||
|
||||
if ( bIsTable || bIsCell )
|
||||
{
|
||||
menu.AddSeparator() ;
|
||||
menu.AddItem( 'TableDelete' , FCKLang.TableDelete ) ;
|
||||
menu.AddItem( 'TableProp' , FCKLang.TableProperties, 39 ) ;
|
||||
}
|
||||
}} ;
|
||||
|
||||
case 'Link' :
|
||||
return {
|
||||
AddItems : function( menu, tag, tagName )
|
||||
{
|
||||
if ( FCK.GetNamedCommandState( 'Unlink' ) != FCK_TRISTATE_DISABLED )
|
||||
{
|
||||
menu.AddSeparator() ;
|
||||
menu.AddItem( 'Link' , FCKLang.EditLink , 34 ) ;
|
||||
menu.AddItem( 'Unlink' , FCKLang.RemoveLink , 35 ) ;
|
||||
}
|
||||
}} ;
|
||||
|
||||
case 'Image' :
|
||||
return {
|
||||
AddItems : function( menu, tag, tagName )
|
||||
{
|
||||
if ( tagName == 'IMG' && !tag.getAttribute( '_fckfakelement' ) )
|
||||
{
|
||||
menu.AddSeparator() ;
|
||||
menu.AddItem( 'Image', FCKLang.ImageProperties, 37 ) ;
|
||||
}
|
||||
}} ;
|
||||
|
||||
case 'Anchor' :
|
||||
return {
|
||||
AddItems : function( menu, tag, tagName )
|
||||
{
|
||||
if ( tagName == 'IMG' && tag.getAttribute( '_fckanchor' ) )
|
||||
{
|
||||
menu.AddSeparator() ;
|
||||
menu.AddItem( 'Anchor', FCKLang.AnchorProp, 36 ) ;
|
||||
}
|
||||
}} ;
|
||||
|
||||
case 'Flash' :
|
||||
return {
|
||||
AddItems : function( menu, tag, tagName )
|
||||
{
|
||||
if ( tagName == 'IMG' && tag.getAttribute( '_fckflash' ) )
|
||||
{
|
||||
menu.AddSeparator() ;
|
||||
menu.AddItem( 'Flash', FCKLang.FlashProperties, 38 ) ;
|
||||
}
|
||||
}} ;
|
||||
|
||||
case 'Form' :
|
||||
return {
|
||||
AddItems : function( menu, tag, tagName )
|
||||
{
|
||||
if ( FCKSelection.HasAncestorNode('FORM') )
|
||||
{
|
||||
menu.AddSeparator() ;
|
||||
menu.AddItem( 'Form', FCKLang.FormProp, 48 ) ;
|
||||
}
|
||||
}} ;
|
||||
|
||||
case 'Checkbox' :
|
||||
return {
|
||||
AddItems : function( menu, tag, tagName )
|
||||
{
|
||||
if ( tagName == 'INPUT' && tag.type == 'checkbox' )
|
||||
{
|
||||
menu.AddSeparator() ;
|
||||
menu.AddItem( 'Checkbox', FCKLang.CheckboxProp, 49 ) ;
|
||||
}
|
||||
}} ;
|
||||
|
||||
case 'Radio' :
|
||||
return {
|
||||
AddItems : function( menu, tag, tagName )
|
||||
{
|
||||
if ( tagName == 'INPUT' && tag.type == 'radio' )
|
||||
{
|
||||
menu.AddSeparator() ;
|
||||
menu.AddItem( 'Radio', FCKLang.RadioButtonProp, 50 ) ;
|
||||
}
|
||||
}} ;
|
||||
|
||||
case 'TextField' :
|
||||
return {
|
||||
AddItems : function( menu, tag, tagName )
|
||||
{
|
||||
if ( tagName == 'INPUT' && ( tag.type == 'text' || tag.type == 'password' ) )
|
||||
{
|
||||
menu.AddSeparator() ;
|
||||
menu.AddItem( 'TextField', FCKLang.TextFieldProp, 51 ) ;
|
||||
}
|
||||
}} ;
|
||||
|
||||
case 'HiddenField' :
|
||||
return {
|
||||
AddItems : function( menu, tag, tagName )
|
||||
{
|
||||
if ( tagName == 'INPUT' && tag.type == 'hidden' )
|
||||
{
|
||||
menu.AddSeparator() ;
|
||||
menu.AddItem( 'HiddenField', FCKLang.HiddenFieldProp, 56 ) ;
|
||||
}
|
||||
}} ;
|
||||
|
||||
case 'ImageButton' :
|
||||
return {
|
||||
AddItems : function( menu, tag, tagName )
|
||||
{
|
||||
if ( tagName == 'INPUT' && tag.type == 'image' )
|
||||
{
|
||||
menu.AddSeparator() ;
|
||||
menu.AddItem( 'ImageButton', FCKLang.ImageButtonProp, 55 ) ;
|
||||
}
|
||||
}} ;
|
||||
|
||||
case 'Button' :
|
||||
return {
|
||||
AddItems : function( menu, tag, tagName )
|
||||
{
|
||||
if ( tagName == 'INPUT' && ( tag.type == 'button' || tag.type == 'submit' || tag.type == 'reset' ) )
|
||||
{
|
||||
menu.AddSeparator() ;
|
||||
menu.AddItem( 'Button', FCKLang.ButtonProp, 54 ) ;
|
||||
}
|
||||
}} ;
|
||||
|
||||
case 'Select' :
|
||||
return {
|
||||
AddItems : function( menu, tag, tagName )
|
||||
{
|
||||
if ( tagName == 'SELECT' )
|
||||
{
|
||||
menu.AddSeparator() ;
|
||||
menu.AddItem( 'Select', FCKLang.SelectionFieldProp, 53 ) ;
|
||||
}
|
||||
}} ;
|
||||
|
||||
case 'Textarea' :
|
||||
return {
|
||||
AddItems : function( menu, tag, tagName )
|
||||
{
|
||||
if ( tagName == 'TEXTAREA' )
|
||||
{
|
||||
menu.AddSeparator() ;
|
||||
menu.AddItem( 'Textarea', FCKLang.TextareaProp, 52 ) ;
|
||||
}
|
||||
}} ;
|
||||
|
||||
case 'BulletedList' :
|
||||
return {
|
||||
AddItems : function( menu, tag, tagName )
|
||||
{
|
||||
if ( FCKSelection.HasAncestorNode('UL') )
|
||||
{
|
||||
menu.AddSeparator() ;
|
||||
menu.AddItem( 'BulletedList', FCKLang.BulletedListProp, 27 ) ;
|
||||
}
|
||||
}} ;
|
||||
|
||||
case 'NumberedList' :
|
||||
return {
|
||||
AddItems : function( menu, tag, tagName )
|
||||
{
|
||||
if ( FCKSelection.HasAncestorNode('OL') )
|
||||
{
|
||||
menu.AddSeparator() ;
|
||||
menu.AddItem( 'NumberedList', FCKLang.NumberedListProp, 26 ) ;
|
||||
}
|
||||
}} ;
|
||||
}
|
||||
}
|
||||
|
||||
function FCK_ContextMenu_OnBeforeOpen()
|
||||
{
|
||||
// Update the UI.
|
||||
FCK.Events.FireEvent( "OnSelectionChange" ) ;
|
||||
|
||||
// Get the actual selected tag (if any).
|
||||
var oTag, sTagName ;
|
||||
|
||||
if ( oTag = FCKSelection.GetSelectedElement() )
|
||||
sTagName = oTag.tagName ;
|
||||
|
||||
// Cleanup the current menu items.
|
||||
var oMenu = FCK.ContextMenu._InnerContextMenu ;
|
||||
oMenu.RemoveAllItems() ;
|
||||
|
||||
// Loop through the listeners.
|
||||
var aListeners = FCK.ContextMenu.Listeners ;
|
||||
for ( var i = 0 ; i < aListeners.length ; i++ )
|
||||
aListeners[i].AddItems( oMenu, oTag, sTagName ) ;
|
||||
}
|
||||
|
||||
function FCK_ContextMenu_OnItemClick( item )
|
||||
{
|
||||
FCK.Focus() ;
|
||||
FCKCommands.GetCommand( item.Name ).Execute() ;
|
||||
}
|
||||
@ -1,37 +0,0 @@
|
||||
/*
|
||||
* 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: fckbrowserinfo.js
|
||||
* Contains browser detection information.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var s = navigator.userAgent.toLowerCase() ;
|
||||
|
||||
var FCKBrowserInfo =
|
||||
{
|
||||
IsIE : s.Contains('msie'),
|
||||
IsIE7 : s.Contains('msie 7'),
|
||||
IsGecko : s.Contains('gecko/'),
|
||||
IsSafari : s.Contains('safari'),
|
||||
IsOpera : s.Contains('opera')
|
||||
}
|
||||
|
||||
FCKBrowserInfo.IsGeckoLike = FCKBrowserInfo.IsGecko || FCKBrowserInfo.IsSafari || FCKBrowserInfo.IsOpera ;
|
||||
|
||||
if ( FCKBrowserInfo.IsGecko )
|
||||
{
|
||||
var sGeckoVersion = s.match( /gecko\/(\d+)/ )[1] ;
|
||||
FCKBrowserInfo.IsGecko10 = sGeckoVersion < 20051111 ; // Actually "10" refers to versions before Firefox 1.5, where Gecko 20051111 has been released.
|
||||
}
|
||||
@ -1,96 +0,0 @@
|
||||
/*
|
||||
* 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: fckcodeformatter.js
|
||||
* Format the HTML.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKCodeFormatter = new Object() ;
|
||||
|
||||
FCKCodeFormatter.Init = function()
|
||||
{
|
||||
var oRegex = this.Regex = new Object() ;
|
||||
|
||||
// Regex for line breaks.
|
||||
oRegex.BlocksOpener = /\<(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi ;
|
||||
oRegex.BlocksCloser = /\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi ;
|
||||
|
||||
oRegex.NewLineTags = /\<(BR|HR)[^\>]*\>/gi ;
|
||||
|
||||
oRegex.MainTags = /\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi ;
|
||||
|
||||
oRegex.LineSplitter = /\s*\n+\s*/g ;
|
||||
|
||||
// Regex for indentation.
|
||||
oRegex.IncreaseIndent = /^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \/\>]/i ;
|
||||
oRegex.DecreaseIndent = /^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \>]/i ;
|
||||
oRegex.FormatIndentatorRemove = new RegExp( '^' + FCKConfig.FormatIndentator ) ;
|
||||
|
||||
oRegex.ProtectedTags = /(<PRE[^>]*>)([\s\S]*?)(<\/PRE>)/gi ;
|
||||
}
|
||||
|
||||
FCKCodeFormatter._ProtectData = function( outer, opener, data, closer )
|
||||
{
|
||||
return opener + '___FCKpd___' + FCKCodeFormatter.ProtectedData.AddItem( data ) + closer ;
|
||||
}
|
||||
|
||||
FCKCodeFormatter.Format = function( html )
|
||||
{
|
||||
if ( !this.Regex )
|
||||
this.Init() ;
|
||||
|
||||
// Protected content that remain untouched during the
|
||||
// process go in the following array.
|
||||
FCKCodeFormatter.ProtectedData = new Array() ;
|
||||
|
||||
var sFormatted = html.replace( this.Regex.ProtectedTags, FCKCodeFormatter._ProtectData ) ;
|
||||
|
||||
// Line breaks.
|
||||
sFormatted = sFormatted.replace( this.Regex.BlocksOpener, '\n$&' ) ; ;
|
||||
sFormatted = sFormatted.replace( this.Regex.BlocksCloser, '$&\n' ) ;
|
||||
sFormatted = sFormatted.replace( this.Regex.NewLineTags, '$&\n' ) ;
|
||||
sFormatted = sFormatted.replace( this.Regex.MainTags, '\n$&\n' ) ;
|
||||
|
||||
// Indentation.
|
||||
var sIndentation = '' ;
|
||||
|
||||
var asLines = sFormatted.split( this.Regex.LineSplitter ) ;
|
||||
sFormatted = '' ;
|
||||
|
||||
for ( var i = 0 ; i < asLines.length ; i++ )
|
||||
{
|
||||
var sLine = asLines[i] ;
|
||||
|
||||
if ( sLine.length == 0 )
|
||||
continue ;
|
||||
|
||||
if ( this.Regex.DecreaseIndent.test( sLine ) )
|
||||
sIndentation = sIndentation.replace( this.Regex.FormatIndentatorRemove, '' ) ;
|
||||
|
||||
sFormatted += sIndentation + sLine + '\n' ;
|
||||
|
||||
if ( this.Regex.IncreaseIndent.test( sLine ) )
|
||||
sIndentation += FCKConfig.FormatIndentator ;
|
||||
}
|
||||
|
||||
// Now we put back the protected data.
|
||||
for ( var i = 0 ; i < FCKCodeFormatter.ProtectedData.length ; i++ )
|
||||
{
|
||||
var oRegex = new RegExp( '___FCKpd___' + i ) ;
|
||||
sFormatted = sFormatted.replace( oRegex, FCKCodeFormatter.ProtectedData[i].replace( /\$/g, '$$$$' ) ) ;
|
||||
}
|
||||
|
||||
return sFormatted.trim() ;
|
||||
}
|
||||
@ -1,126 +0,0 @@
|
||||
/*
|
||||
* 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: fckcommands.js
|
||||
* Define all commands available in the editor.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKCommands = FCK.Commands = new Object() ;
|
||||
FCKCommands.LoadedCommands = new Object() ;
|
||||
|
||||
FCKCommands.RegisterCommand = function( commandName, command )
|
||||
{
|
||||
this.LoadedCommands[ commandName ] = command ;
|
||||
}
|
||||
|
||||
FCKCommands.GetCommand = function( commandName )
|
||||
{
|
||||
var oCommand = FCKCommands.LoadedCommands[ commandName ] ;
|
||||
|
||||
if ( oCommand )
|
||||
return oCommand ;
|
||||
|
||||
switch ( commandName )
|
||||
{
|
||||
case 'DocProps' : oCommand = new FCKDialogCommand( 'DocProps' , FCKLang.DocProps , 'dialog/fck_docprops.html' , 400, 390, FCKCommands.GetFullPageState ) ; break ;
|
||||
case 'Templates' : oCommand = new FCKDialogCommand( 'Templates' , FCKLang.DlgTemplatesTitle , 'dialog/fck_template.html' , 380, 450 ) ; break ;
|
||||
case 'Link' : oCommand = new FCKDialogCommand( 'Link' , FCKLang.DlgLnkWindowTitle , 'dialog/fck_link.html' , 400, 330, FCK.GetNamedCommandState, 'CreateLink' ) ; break ;
|
||||
case 'Unlink' : oCommand = new FCKUnlinkCommand() ; break ;
|
||||
case 'Anchor' : oCommand = new FCKDialogCommand( 'Anchor' , FCKLang.DlgAnchorTitle , 'dialog/fck_anchor.html' , 370, 170 ) ; break ;
|
||||
case 'BulletedList' : oCommand = new FCKDialogCommand( 'BulletedList', FCKLang.BulletedListProp , 'dialog/fck_listprop.html' , 370, 170 ) ; break ;
|
||||
case 'NumberedList' : oCommand = new FCKDialogCommand( 'NumberedList', FCKLang.NumberedListProp , 'dialog/fck_listprop.html' , 370, 170 ) ; break ;
|
||||
case 'About' : oCommand = new FCKDialogCommand( 'About' , FCKLang.About , 'dialog/fck_about.html' , 400, 330 ) ; break ;
|
||||
|
||||
case 'Find' : oCommand = new FCKDialogCommand( 'Find' , FCKLang.DlgFindTitle , 'dialog/fck_find.html' , 340, 170 ) ; break ;
|
||||
case 'Replace' : oCommand = new FCKDialogCommand( 'Replace' , FCKLang.DlgReplaceTitle , 'dialog/fck_replace.html' , 340, 200 ) ; break ;
|
||||
|
||||
case 'Image' : oCommand = new FCKDialogCommand( 'Image' , FCKLang.DlgImgTitle , 'dialog/fck_image.html' , 450, 400 ) ; break ;
|
||||
case 'Flash' : oCommand = new FCKDialogCommand( 'Flash' , FCKLang.DlgFlashTitle , 'dialog/fck_flash.html' , 450, 400 ) ; break ;
|
||||
case 'SpecialChar' : oCommand = new FCKDialogCommand( 'SpecialChar', FCKLang.DlgSpecialCharTitle , 'dialog/fck_specialchar.html' , 400, 320 ) ; break ;
|
||||
case 'Smiley' : oCommand = new FCKDialogCommand( 'Smiley' , FCKLang.DlgSmileyTitle , 'dialog/fck_smiley.html' , FCKConfig.SmileyWindowWidth, FCKConfig.SmileyWindowHeight ) ; break ;
|
||||
case 'Table' : oCommand = new FCKDialogCommand( 'Table' , FCKLang.DlgTableTitle , 'dialog/fck_table.html' , 450, 250 ) ; break ;
|
||||
case 'TableProp' : oCommand = new FCKDialogCommand( 'Table' , FCKLang.DlgTableTitle , 'dialog/fck_table.html?Parent', 400, 250 ) ; break ;
|
||||
case 'TableCellProp': oCommand = new FCKDialogCommand( 'TableCell' , FCKLang.DlgCellTitle , 'dialog/fck_tablecell.html' , 500, 250 ) ; break ;
|
||||
case 'UniversalKey' : oCommand = new FCKDialogCommand( 'UniversalKey', FCKLang.UniversalKeyboard , 'dialog/fck_universalkey.html', 415, 300 ) ; break ;
|
||||
|
||||
case 'Style' : oCommand = new FCKStyleCommand() ; break ;
|
||||
|
||||
case 'FontName' : oCommand = new FCKFontNameCommand() ; break ;
|
||||
case 'FontSize' : oCommand = new FCKFontSizeCommand() ; break ;
|
||||
case 'FontFormat' : oCommand = new FCKFormatBlockCommand() ; break ;
|
||||
|
||||
case 'Source' : oCommand = new FCKSourceCommand() ; break ;
|
||||
case 'Preview' : oCommand = new FCKPreviewCommand() ; break ;
|
||||
case 'Save' : oCommand = new FCKSaveCommand() ; break ;
|
||||
case 'NewPage' : oCommand = new FCKNewPageCommand() ; break ;
|
||||
case 'PageBreak' : oCommand = new FCKPageBreakCommand() ; break ;
|
||||
|
||||
case 'TextColor' : oCommand = new FCKTextColorCommand('ForeColor') ; break ;
|
||||
case 'BGColor' : oCommand = new FCKTextColorCommand('BackColor') ; break ;
|
||||
|
||||
case 'PasteText' : oCommand = new FCKPastePlainTextCommand() ; break ;
|
||||
case 'PasteWord' : oCommand = new FCKPasteWordCommand() ; break ;
|
||||
|
||||
case 'TableInsertRow' : oCommand = new FCKTableCommand('TableInsertRow') ; break ;
|
||||
case 'TableDeleteRows' : oCommand = new FCKTableCommand('TableDeleteRows') ; break ;
|
||||
case 'TableInsertColumn' : oCommand = new FCKTableCommand('TableInsertColumn') ; break ;
|
||||
case 'TableDeleteColumns' : oCommand = new FCKTableCommand('TableDeleteColumns') ; break ;
|
||||
case 'TableInsertCell' : oCommand = new FCKTableCommand('TableInsertCell') ; break ;
|
||||
case 'TableDeleteCells' : oCommand = new FCKTableCommand('TableDeleteCells') ; break ;
|
||||
case 'TableMergeCells' : oCommand = new FCKTableCommand('TableMergeCells') ; break ;
|
||||
case 'TableSplitCell' : oCommand = new FCKTableCommand('TableSplitCell') ; break ;
|
||||
case 'TableDelete' : oCommand = new FCKTableCommand('TableDelete') ; break ;
|
||||
|
||||
case 'Form' : oCommand = new FCKDialogCommand( 'Form' , FCKLang.Form , 'dialog/fck_form.html' , 380, 230 ) ; break ;
|
||||
case 'Checkbox' : oCommand = new FCKDialogCommand( 'Checkbox' , FCKLang.Checkbox , 'dialog/fck_checkbox.html' , 380, 230 ) ; break ;
|
||||
case 'Radio' : oCommand = new FCKDialogCommand( 'Radio' , FCKLang.RadioButton , 'dialog/fck_radiobutton.html' , 380, 230 ) ; break ;
|
||||
case 'TextField' : oCommand = new FCKDialogCommand( 'TextField' , FCKLang.TextField , 'dialog/fck_textfield.html' , 380, 230 ) ; break ;
|
||||
case 'Textarea' : oCommand = new FCKDialogCommand( 'Textarea' , FCKLang.Textarea , 'dialog/fck_textarea.html' , 380, 230 ) ; break ;
|
||||
case 'HiddenField' : oCommand = new FCKDialogCommand( 'HiddenField', FCKLang.HiddenField , 'dialog/fck_hiddenfield.html' , 380, 230 ) ; break ;
|
||||
case 'Button' : oCommand = new FCKDialogCommand( 'Button' , FCKLang.Button , 'dialog/fck_button.html' , 380, 230 ) ; break ;
|
||||
case 'Select' : oCommand = new FCKDialogCommand( 'Select' , FCKLang.SelectionField, 'dialog/fck_select.html' , 400, 380 ) ; break ;
|
||||
case 'ImageButton' : oCommand = new FCKDialogCommand( 'ImageButton', FCKLang.ImageButton , 'dialog/fck_image.html?ImageButton', 450, 400 ) ; break ;
|
||||
|
||||
case 'SpellCheck' : oCommand = new FCKSpellCheckCommand() ; break ;
|
||||
case 'FitWindow' : oCommand = new FCKFitWindow() ; break ;
|
||||
|
||||
case 'Undo' : oCommand = new FCKUndoCommand() ; break ;
|
||||
case 'Redo' : oCommand = new FCKRedoCommand() ; break ;
|
||||
|
||||
// Generic Undefined command (usually used when a command is under development).
|
||||
case 'Undefined' : oCommand = new FCKUndefinedCommand() ; break ;
|
||||
|
||||
// By default we assume that it is a named command.
|
||||
default:
|
||||
if ( FCKRegexLib.NamedCommands.test( commandName ) )
|
||||
oCommand = new FCKNamedCommand( commandName ) ;
|
||||
else
|
||||
{
|
||||
alert( FCKLang.UnknownCommand.replace( /%1/g, commandName ) ) ;
|
||||
return null ;
|
||||
}
|
||||
}
|
||||
|
||||
FCKCommands.LoadedCommands[ commandName ] = oCommand ;
|
||||
|
||||
return oCommand ;
|
||||
}
|
||||
|
||||
// Gets the state of the "Document Properties" button. It must be enabled only
|
||||
// when "Full Page" editing is available.
|
||||
FCKCommands.GetFullPageState = function()
|
||||
{
|
||||
return FCKConfig.FullPage ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
|
||||
}
|
||||
@ -1,175 +0,0 @@
|
||||
/*
|
||||
* 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: fckconfig.js
|
||||
* Creates and initializes the FCKConfig object.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKConfig = FCK.Config = new Object() ;
|
||||
|
||||
/*
|
||||
For the next major version (probably 3.0) we should move all this stuff to
|
||||
another dedicated object and leave FCKConfig as a holder object for settings only).
|
||||
*/
|
||||
|
||||
// Editor Base Path
|
||||
if ( document.location.protocol == 'file:' )
|
||||
{
|
||||
FCKConfig.BasePath = unescape( document.location.pathname.substr(1) ) ;
|
||||
FCKConfig.BasePath = FCKConfig.BasePath.replace( /\\/gi, '/' ) ;
|
||||
FCKConfig.BasePath = 'file://' + FCKConfig.BasePath.substring(0,FCKConfig.BasePath.lastIndexOf('/')+1) ;
|
||||
FCKConfig.FullBasePath = FCKConfig.BasePath ;
|
||||
}
|
||||
else
|
||||
{
|
||||
FCKConfig.BasePath = document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')+1) ;
|
||||
FCKConfig.FullBasePath = document.location.protocol + '//' + document.location.host + FCKConfig.BasePath ;
|
||||
}
|
||||
|
||||
FCKConfig.EditorPath = FCKConfig.BasePath.replace( /editor\/$/, '' ) ;
|
||||
|
||||
// There is a bug in Gecko. If the editor is hidden on startup, an error is
|
||||
// thrown when trying to get the screen dimentions.
|
||||
try
|
||||
{
|
||||
FCKConfig.ScreenWidth = screen.width ;
|
||||
FCKConfig.ScreenHeight = screen.height ;
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
FCKConfig.ScreenWidth = 800 ;
|
||||
FCKConfig.ScreenHeight = 600 ;
|
||||
}
|
||||
|
||||
// Override the actual configuration values with the values passed throw the
|
||||
// hidden field "<InstanceName>___Config".
|
||||
FCKConfig.ProcessHiddenField = function()
|
||||
{
|
||||
this.PageConfig = new Object() ;
|
||||
|
||||
// Get the hidden field.
|
||||
var oConfigField = window.parent.document.getElementById( FCK.Name + '___Config' ) ;
|
||||
|
||||
// Do nothing if the config field was not defined.
|
||||
if ( ! oConfigField ) return ;
|
||||
|
||||
var aCouples = oConfigField.value.split('&') ;
|
||||
|
||||
for ( var i = 0 ; i < aCouples.length ; i++ )
|
||||
{
|
||||
if ( aCouples[i].length == 0 )
|
||||
continue ;
|
||||
|
||||
var aConfig = aCouples[i].split( '=' ) ;
|
||||
var sKey = unescape( aConfig[0] ) ;
|
||||
var sVal = unescape( aConfig[1] ) ;
|
||||
|
||||
if ( sKey == 'CustomConfigurationsPath' ) // The Custom Config File path must be loaded immediately.
|
||||
FCKConfig[ sKey ] = sVal ;
|
||||
|
||||
else if ( sVal.toLowerCase() == "true" ) // If it is a boolean TRUE.
|
||||
this.PageConfig[ sKey ] = true ;
|
||||
|
||||
else if ( sVal.toLowerCase() == "false" ) // If it is a boolean FALSE.
|
||||
this.PageConfig[ sKey ] = false ;
|
||||
|
||||
else if ( ! isNaN( sVal ) ) // If it is a number.
|
||||
this.PageConfig[ sKey ] = parseInt( sVal ) ;
|
||||
|
||||
else // In any other case it is a string.
|
||||
this.PageConfig[ sKey ] = sVal ;
|
||||
}
|
||||
}
|
||||
|
||||
function FCKConfig_LoadPageConfig()
|
||||
{
|
||||
var oPageConfig = FCKConfig.PageConfig ;
|
||||
for ( var sKey in oPageConfig )
|
||||
FCKConfig[ sKey ] = oPageConfig[ sKey ] ;
|
||||
}
|
||||
|
||||
function FCKConfig_PreProcess()
|
||||
{
|
||||
var oConfig = FCKConfig ;
|
||||
|
||||
// Force debug mode if fckdebug=true in the QueryString (main page).
|
||||
if ( oConfig.AllowQueryStringDebug && (/fckdebug=true/i).test( window.top.location.search ) )
|
||||
oConfig.Debug = true ;
|
||||
|
||||
// Certifies that the "PluginsPath" configuration ends with a slash.
|
||||
if ( !oConfig.PluginsPath.endsWith('/') )
|
||||
oConfig.PluginsPath += '/' ;
|
||||
|
||||
// EditorAreaCSS accepts an array of paths or a single path (as string).
|
||||
// In the last case, transform it in an array.
|
||||
if ( typeof( oConfig.EditorAreaCSS ) == 'string' )
|
||||
oConfig.EditorAreaCSS = [ oConfig.EditorAreaCSS ] ;
|
||||
}
|
||||
|
||||
// Define toolbar sets collection.
|
||||
FCKConfig.ToolbarSets = new Object() ;
|
||||
|
||||
// Defines the plugins collection.
|
||||
FCKConfig.Plugins = new Object() ;
|
||||
FCKConfig.Plugins.Items = new Array() ;
|
||||
|
||||
FCKConfig.Plugins.Add = function( name, langs, path )
|
||||
{
|
||||
FCKConfig.Plugins.Items.AddItem( [name, langs, path] ) ;
|
||||
}
|
||||
|
||||
// FCKConfig.ProtectedSource: object that holds a collection of Regular
|
||||
// Expressions that defined parts of the raw HTML that must remain untouched
|
||||
// like custom tags, scripts, server side code, etc...
|
||||
FCKConfig.ProtectedSource = new Object() ;
|
||||
FCKConfig.ProtectedSource.RegexEntries = new Array() ;
|
||||
|
||||
FCKConfig.ProtectedSource.Add = function( regexPattern )
|
||||
{
|
||||
this.RegexEntries.AddItem( regexPattern ) ;
|
||||
}
|
||||
|
||||
FCKConfig.ProtectedSource.Protect = function( html )
|
||||
{
|
||||
function _Replace( protectedSource )
|
||||
{
|
||||
var index = FCKTempBin.AddElement( protectedSource ) ;
|
||||
return '<!--{PS..' + index + '}-->' ;
|
||||
}
|
||||
|
||||
for ( var i = 0 ; i < this.RegexEntries.length ; i++ )
|
||||
{
|
||||
html = html.replace( this.RegexEntries[i], _Replace ) ;
|
||||
}
|
||||
|
||||
return html ;
|
||||
}
|
||||
|
||||
|
||||
FCKConfig.ProtectedSource.Revert = function( html, clearBin )
|
||||
{
|
||||
function _Replace( m, opener, index )
|
||||
{
|
||||
var protectedValue = clearBin ? FCKTempBin.RemoveElement( index ) : FCKTempBin.Elements[ index ] ;
|
||||
// There could be protected source inside another one.
|
||||
return FCKConfig.ProtectedSource.Revert( protectedValue, clearBin ) ;
|
||||
}
|
||||
|
||||
return html.replace( /(<|<)!--\{PS..(\d+)\}--(>|>)/g, _Replace ) ;
|
||||
}
|
||||
|
||||
// First of any other protection, we must protect all comments to avoid
|
||||
// loosing them (of course, IE related).
|
||||
FCKConfig.ProtectedSource.Add( /<!--[\s\S]*?-->/g ) ;
|
||||
@ -1,77 +0,0 @@
|
||||
/*
|
||||
* 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: fckdebug.js
|
||||
* Debug window control and operations.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKDebug = new Object() ;
|
||||
|
||||
FCKDebug.Output = function( message, color, noParse )
|
||||
{
|
||||
if ( ! FCKConfig.Debug ) return ;
|
||||
|
||||
if ( !noParse && message != null && isNaN( message ) )
|
||||
message = message.replace(/</g, "<") ;
|
||||
|
||||
if ( !this.DebugWindow || this.DebugWindow.closed )
|
||||
this.DebugWindow = window.open( FCKConfig.BasePath + 'fckdebug.html', 'FCKeditorDebug', 'menubar=no,scrollbars=no,resizable=yes,location=no,toolbar=no,width=600,height=500', true ) ;
|
||||
|
||||
if ( this.DebugWindow && this.DebugWindow.Output)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.DebugWindow.Output( message, color ) ;
|
||||
}
|
||||
catch ( e ) {} // Ignore errors
|
||||
}
|
||||
}
|
||||
|
||||
FCKDebug.OutputObject = function( anyObject, color )
|
||||
{
|
||||
if ( ! FCKConfig.Debug ) return ;
|
||||
|
||||
var message ;
|
||||
|
||||
if ( anyObject != null )
|
||||
{
|
||||
message = 'Properties of: ' + anyObject + '</b><blockquote>' ;
|
||||
|
||||
for (var prop in anyObject)
|
||||
{
|
||||
try
|
||||
{
|
||||
var sVal = anyObject[ prop ] ? anyObject[ prop ] + '' : '[null]' ;
|
||||
message += '<b>' + prop + '</b> : ' + sVal.replace(/</g, '<') + '<br>' ;
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
try
|
||||
{
|
||||
message += '<b>' + prop + '</b> : [' + typeof( anyObject[ prop ] ) + ']<br>' ;
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
message += '<b>' + prop + '</b> : [-error-]<br>' ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
message += '</blockquote><b>' ;
|
||||
} else
|
||||
message = 'OutputObject : Object is "null".' ;
|
||||
|
||||
FCKDebug.Output( message, color, true ) ;
|
||||
}
|
||||
@ -1,34 +0,0 @@
|
||||
/*
|
||||
* 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: fckdialog.js
|
||||
* Dialog windows operations.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKDialog = new Object() ;
|
||||
|
||||
// This method opens a dialog window using the standard dialog template.
|
||||
FCKDialog.OpenDialog = function( dialogName, dialogTitle, dialogPage, width, height, customValue, parentWindow, resizable )
|
||||
{
|
||||
// Setup the dialog info.
|
||||
var oDialogInfo = new Object() ;
|
||||
oDialogInfo.Title = dialogTitle ;
|
||||
oDialogInfo.Page = dialogPage ;
|
||||
oDialogInfo.Editor = window ;
|
||||
oDialogInfo.CustomValue = customValue ; // Optional
|
||||
|
||||
var sUrl = FCKConfig.BasePath + 'fckdialog.html' ;
|
||||
this.Show( oDialogInfo, dialogName, sUrl, width, height, parentWindow, resizable ) ;
|
||||
}
|
||||
@ -1,101 +0,0 @@
|
||||
/*
|
||||
* 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: fckdialog_gecko.js
|
||||
* Dialog windows operations. (Gecko specific implementations)
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
FCKDialog.Show = function( dialogInfo, dialogName, pageUrl, dialogWidth, dialogHeight, parentWindow, resizable )
|
||||
{
|
||||
var iTop = (FCKConfig.ScreenHeight - dialogHeight) / 2 ;
|
||||
var iLeft = (FCKConfig.ScreenWidth - dialogWidth) / 2 ;
|
||||
|
||||
var sOption = "location=no,menubar=no,toolbar=no,dependent=yes,dialog=yes,minimizable=no,modal=yes,alwaysRaised=yes" +
|
||||
",resizable=" + ( resizable ? 'yes' : 'no' ) +
|
||||
",width=" + dialogWidth +
|
||||
",height=" + dialogHeight +
|
||||
",top=" + iTop +
|
||||
",left=" + iLeft ;
|
||||
|
||||
if ( !parentWindow )
|
||||
parentWindow = window ;
|
||||
|
||||
FCKFocusManager.Lock() ;
|
||||
|
||||
var oWindow = parentWindow.open( '', 'FCKeditorDialog_' + dialogName, sOption, true ) ;
|
||||
|
||||
if ( !oWindow )
|
||||
{
|
||||
alert( FCKLang.DialogBlocked ) ;
|
||||
FCKFocusManager.Unlock() ;
|
||||
return ;
|
||||
}
|
||||
|
||||
oWindow.moveTo( iLeft, iTop ) ;
|
||||
oWindow.resizeTo( dialogWidth, dialogHeight ) ;
|
||||
oWindow.focus() ;
|
||||
oWindow.location.href = pageUrl ;
|
||||
|
||||
oWindow.dialogArguments = dialogInfo ;
|
||||
|
||||
// On some Gecko browsers (probably over slow connections) the
|
||||
// "dialogArguments" are not set to the target window so we must
|
||||
// put it in the opener window so it can be used by the target one.
|
||||
parentWindow.FCKLastDialogInfo = dialogInfo ;
|
||||
|
||||
this.Window = oWindow ;
|
||||
|
||||
// Try/Catch must be used to avoit an error when using a frameset
|
||||
// on a different domain:
|
||||
// "Permission denied to get property Window.releaseEvents".
|
||||
try
|
||||
{
|
||||
window.top.captureEvents( Event.CLICK | Event.MOUSEDOWN | Event.MOUSEUP | Event.FOCUS ) ;
|
||||
window.top.parent.addEventListener( 'mousedown', this.CheckFocus, true ) ;
|
||||
window.top.parent.addEventListener( 'mouseup', this.CheckFocus, true ) ;
|
||||
window.top.parent.addEventListener( 'click', this.CheckFocus, true ) ;
|
||||
window.top.parent.addEventListener( 'focus', this.CheckFocus, true ) ;
|
||||
}
|
||||
catch (e)
|
||||
{}
|
||||
}
|
||||
|
||||
FCKDialog.CheckFocus = function()
|
||||
{
|
||||
// It is strange, but we have to check the FCKDialog existence to avoid a
|
||||
// random error: "FCKDialog is not defined".
|
||||
if ( typeof( FCKDialog ) != "object" )
|
||||
return false ;
|
||||
|
||||
if ( FCKDialog.Window && !FCKDialog.Window.closed )
|
||||
FCKDialog.Window.focus() ;
|
||||
else
|
||||
{
|
||||
// Try/Catch must be used to avoit an error when using a frameset
|
||||
// on a different domain:
|
||||
// "Permission denied to get property Window.releaseEvents".
|
||||
try
|
||||
{
|
||||
window.top.releaseEvents(Event.CLICK | Event.MOUSEDOWN | Event.MOUSEUP | Event.FOCUS) ;
|
||||
window.top.parent.removeEventListener( 'onmousedown', FCKDialog.CheckFocus, true ) ;
|
||||
window.top.parent.removeEventListener( 'mouseup', FCKDialog.CheckFocus, true ) ;
|
||||
window.top.parent.removeEventListener( 'click', FCKDialog.CheckFocus, true ) ;
|
||||
window.top.parent.removeEventListener( 'onfocus', FCKDialog.CheckFocus, true ) ;
|
||||
}
|
||||
catch (e)
|
||||
{}
|
||||
}
|
||||
return false ;
|
||||
}
|
||||
@ -1,33 +0,0 @@
|
||||
/*
|
||||
* 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: fckdialog_ie.js
|
||||
* Dialog windows operations. (IE specific implementations)
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
FCKDialog.Show = function( dialogInfo, dialogName, pageUrl, dialogWidth, dialogHeight, parentWindow )
|
||||
{
|
||||
if ( !parentWindow )
|
||||
parentWindow = window ;
|
||||
|
||||
FCKFocusManager.Lock() ;
|
||||
|
||||
var oReturn = parentWindow.showModalDialog( pageUrl, dialogInfo, "dialogWidth:" + dialogWidth + "px;dialogHeight:" + dialogHeight + "px;help:no;scroll:no;status:no") ;
|
||||
|
||||
if ( !oReturn )
|
||||
alert( FCKLang.DialogBlocked ) ;
|
||||
|
||||
FCKFocusManager.Unlock() ;
|
||||
}
|
||||
@ -1,230 +0,0 @@
|
||||
/*
|
||||
* 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: fckdocumentprocessor.js
|
||||
* Advanced document processors.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
|
||||
var FCKDocumentProcessor = new Object() ;
|
||||
FCKDocumentProcessor._Items = new Array() ;
|
||||
|
||||
FCKDocumentProcessor.AppendNew = function()
|
||||
{
|
||||
var oNewItem = new Object() ;
|
||||
this._Items.AddItem( oNewItem ) ;
|
||||
return oNewItem ;
|
||||
}
|
||||
|
||||
FCKDocumentProcessor.Process = function( document )
|
||||
{
|
||||
var oProcessor, i = 0 ;
|
||||
while( ( oProcessor = this._Items[i++] ) )
|
||||
oProcessor.ProcessDocument( document ) ;
|
||||
}
|
||||
|
||||
var FCKDocumentProcessor_CreateFakeImage = function( fakeClass, realElement )
|
||||
{
|
||||
var oImg = FCK.EditorDocument.createElement( 'IMG' ) ;
|
||||
oImg.className = fakeClass ;
|
||||
oImg.src = FCKConfig.FullBasePath + 'images/spacer.gif' ;
|
||||
oImg.setAttribute( '_fckfakelement', 'true', 0 ) ;
|
||||
oImg.setAttribute( '_fckrealelement', FCKTempBin.AddElement( realElement ), 0 ) ;
|
||||
return oImg ;
|
||||
}
|
||||
|
||||
// Link Anchors
|
||||
var FCKAnchorsProcessor = FCKDocumentProcessor.AppendNew() ;
|
||||
FCKAnchorsProcessor.ProcessDocument = function( document )
|
||||
{
|
||||
var aLinks = document.getElementsByTagName( 'A' ) ;
|
||||
|
||||
var oLink ;
|
||||
var i = aLinks.length - 1 ;
|
||||
while ( i >= 0 && ( oLink = aLinks[i--] ) )
|
||||
{
|
||||
// If it is anchor.
|
||||
if ( oLink.name.length > 0 && ( !oLink.getAttribute('href') || oLink.getAttribute('href').length == 0 ) )
|
||||
{
|
||||
var oImg = FCKDocumentProcessor_CreateFakeImage( 'FCK__Anchor', oLink.cloneNode(true) ) ;
|
||||
oImg.setAttribute( '_fckanchor', 'true', 0 ) ;
|
||||
|
||||
oLink.parentNode.insertBefore( oImg, oLink ) ;
|
||||
oLink.parentNode.removeChild( oLink ) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Page Breaks
|
||||
var FCKPageBreaksProcessor = FCKDocumentProcessor.AppendNew() ;
|
||||
FCKPageBreaksProcessor.ProcessDocument = function( document )
|
||||
{
|
||||
var aDIVs = document.getElementsByTagName( 'DIV' ) ;
|
||||
|
||||
var eDIV ;
|
||||
var i = aDIVs.length - 1 ;
|
||||
while ( i >= 0 && ( eDIV = aDIVs[i--] ) )
|
||||
{
|
||||
if ( eDIV.style.pageBreakAfter == 'always' && eDIV.childNodes.length == 1 && eDIV.childNodes[0].style && eDIV.childNodes[0].style.display == 'none' )
|
||||
{
|
||||
var oFakeImage = FCKDocumentProcessor_CreateFakeImage( 'FCK__PageBreak', eDIV.cloneNode(true) ) ;
|
||||
|
||||
eDIV.parentNode.insertBefore( oFakeImage, eDIV ) ;
|
||||
eDIV.parentNode.removeChild( eDIV ) ;
|
||||
}
|
||||
}
|
||||
/*
|
||||
var aCenters = document.getElementsByTagName( 'CENTER' ) ;
|
||||
|
||||
var oCenter ;
|
||||
var i = aCenters.length - 1 ;
|
||||
while ( i >= 0 && ( oCenter = aCenters[i--] ) )
|
||||
{
|
||||
if ( oCenter.style.pageBreakAfter == 'always' && oCenter.innerHTML.trim().length == 0 )
|
||||
{
|
||||
var oFakeImage = FCKDocumentProcessor_CreateFakeImage( 'FCK__PageBreak', oCenter.cloneNode(true) ) ;
|
||||
|
||||
oCenter.parentNode.insertBefore( oFakeImage, oCenter ) ;
|
||||
oCenter.parentNode.removeChild( oCenter ) ;
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
// Flash Embeds.
|
||||
var FCKFlashProcessor = FCKDocumentProcessor.AppendNew() ;
|
||||
FCKFlashProcessor.ProcessDocument = function( document )
|
||||
{
|
||||
/*
|
||||
Sample code:
|
||||
This is some <embed src="/UserFiles/Flash/Yellow_Runners.swf"></embed><strong>sample text</strong>. You are <a name="fred"></a> using <a href="http://www.fckeditor.net/">FCKeditor</a>.
|
||||
*/
|
||||
|
||||
var aEmbeds = document.getElementsByTagName( 'EMBED' ) ;
|
||||
|
||||
var oEmbed ;
|
||||
var i = aEmbeds.length - 1 ;
|
||||
while ( i >= 0 && ( oEmbed = aEmbeds[i--] ) )
|
||||
{
|
||||
if ( oEmbed.src.endsWith( '.swf', true ) )
|
||||
{
|
||||
var oCloned = oEmbed.cloneNode( true ) ;
|
||||
|
||||
// On IE, some properties are not getting clonned properly, so we
|
||||
// must fix it. Thanks to Alfonso Martinez.
|
||||
if ( FCKBrowserInfo.IsIE )
|
||||
{
|
||||
var oAtt ;
|
||||
if ( oAtt = oEmbed.getAttribute( 'scale' ) ) oCloned.setAttribute( 'scale', oAtt ) ;
|
||||
if ( oAtt = oEmbed.getAttribute( 'play' ) ) oCloned.setAttribute( 'play', oAtt ) ;
|
||||
if ( oAtt = oEmbed.getAttribute( 'loop' ) ) oCloned.setAttribute( 'loop', oAtt ) ;
|
||||
if ( oAtt = oEmbed.getAttribute( 'menu' ) ) oCloned.setAttribute( 'menu', oAtt ) ;
|
||||
if ( oAtt = oEmbed.getAttribute( 'wmode' ) ) oCloned.setAttribute( 'wmode', oAtt ) ;
|
||||
if ( oAtt = oEmbed.getAttribute( 'quality' ) ) oCloned.setAttribute( 'quality', oAtt ) ;
|
||||
}
|
||||
|
||||
var oImg = FCKDocumentProcessor_CreateFakeImage( 'FCK__Flash', oCloned ) ;
|
||||
oImg.setAttribute( '_fckflash', 'true', 0 ) ;
|
||||
|
||||
FCKFlashProcessor.RefreshView( oImg, oEmbed ) ;
|
||||
|
||||
oEmbed.parentNode.insertBefore( oImg, oEmbed ) ;
|
||||
oEmbed.parentNode.removeChild( oEmbed ) ;
|
||||
|
||||
// oEmbed.setAttribute( '_fckdelete', 'true', 0) ;
|
||||
// oEmbed.style.display = 'none' ;
|
||||
// oEmbed.hidden = true ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FCKFlashProcessor.RefreshView = function( placholderImage, originalEmbed )
|
||||
{
|
||||
if ( originalEmbed.width > 0 )
|
||||
placholderImage.style.width = FCKTools.ConvertHtmlSizeToStyle( originalEmbed.width ) ;
|
||||
|
||||
if ( originalEmbed.height > 0 )
|
||||
placholderImage.style.height = FCKTools.ConvertHtmlSizeToStyle( originalEmbed.height ) ;
|
||||
}
|
||||
|
||||
FCK.GetRealElement = function( fakeElement )
|
||||
{
|
||||
var e = FCKTempBin.Elements[ fakeElement.getAttribute('_fckrealelement') ] ;
|
||||
|
||||
if ( fakeElement.getAttribute('_fckflash') )
|
||||
{
|
||||
if ( fakeElement.style.width.length > 0 )
|
||||
e.width = FCKTools.ConvertStyleSizeToHtml( fakeElement.style.width ) ;
|
||||
|
||||
if ( fakeElement.style.height.length > 0 )
|
||||
e.height = FCKTools.ConvertStyleSizeToHtml( fakeElement.style.height ) ;
|
||||
}
|
||||
|
||||
return e ;
|
||||
}
|
||||
|
||||
// START iCM MODIFICATIONS
|
||||
/*
|
||||
var FCKTablesProcessor = FCKDocumentProcessor.AppendNew() ;
|
||||
FCKTablesProcessor.ProcessDocument = function( document )
|
||||
{
|
||||
FCKTablesProcessor.CheckTablesNesting( document ) ;
|
||||
}
|
||||
|
||||
// Ensure that tables are not incorrectly nested within P, H1, H2, etc tags
|
||||
FCKTablesProcessor.CheckTablesNesting = function( document )
|
||||
{
|
||||
var aTables = document.getElementsByTagName( "TABLE" ) ;
|
||||
var oParentNode ;
|
||||
|
||||
for ( var i=0; i<aTables.length; i++ )
|
||||
{
|
||||
FCKTablesProcessor.CheckTableNesting( aTables[i] ) ;
|
||||
}
|
||||
}
|
||||
|
||||
// Corrects nesting of the supplied table as necessary.
|
||||
// Also called by fck_table.html to check that a newly inserted table is correctly nested.
|
||||
FCKTablesProcessor.CheckTableNesting = function( oTableNode )
|
||||
{
|
||||
var oParentBlockNode = FCKTools.GetParentBlockNode( oTableNode.parentNode ) ;
|
||||
|
||||
if ( oParentBlockNode && !FCKRegexLib.TableBlockElements.test( oParentBlockNode.nodeName ) )
|
||||
{
|
||||
// Create a new tag which holds the content of the child nodes located before the table
|
||||
var oNode1 = FCK.EditorDocument.createElement( oParentBlockNode.tagName ) ;
|
||||
var oFragment1 = FCKTools.GetDocumentFragment( oParentBlockNode, oParentBlockNode.firstChild, oTableNode, true, false, true ) ;
|
||||
oNode1.appendChild( oFragment1 ) ;
|
||||
FCKTools.SetElementAttributes( oNode1, oParentBlockNode.attributes ) ; // Transfer across any class attributes, etc
|
||||
|
||||
// Create a new tag which holds the content of the child nodes located after the table
|
||||
var oNode2 = FCK.EditorDocument.createElement( oParentBlockNode.tagName );
|
||||
var oFragment2 = FCKTools.GetDocumentFragment( oParentBlockNode, oTableNode, oParentBlockNode.lastChild, false, true, true ) ;
|
||||
oNode2.appendChild( oFragment2 ) ;
|
||||
FCKTools.SetElementAttributes( oNode2, oParentBlockNode.attributes ) ; // Transfer across any class attributes, etc
|
||||
|
||||
// Create a document fragment that contains the two new elements with the table element inbetween
|
||||
var oNewNode = FCK.EditorDocument.createDocumentFragment() ;
|
||||
if ( !FCKTools.NodeIsEmpty( oNode1 ) )
|
||||
oNewNode.appendChild( oNode1 ) ;
|
||||
oNewNode.appendChild( oTableNode ) ;
|
||||
if ( !FCKTools.NodeIsEmpty( oNode2 ) )
|
||||
oNewNode.appendChild( oNode2 ) ;
|
||||
|
||||
// Replace the existing parent node with the nodes in the fragment
|
||||
oParentBlockNode.parentNode.replaceChild( oNewNode, oParentBlockNode ) ;
|
||||
}
|
||||
}
|
||||
*/
|
||||
// END iCM MODIFICATIONS
|
||||
@ -1,151 +0,0 @@
|
||||
/*
|
||||
* 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: fcklanguagemanager.js
|
||||
* Defines the FCKLanguageManager object that is used for language
|
||||
* operations.
|
||||
*
|
||||
* File Authors:
|
||||
* Frederico Caldeira Knabben (fredck@fckeditor.net)
|
||||
*/
|
||||
var FCKLanguageManager = FCK.Language = new Object() ;
|
||||
|
||||
FCKLanguageManager.AvailableLanguages =
|
||||
{
|
||||
'ar' : 'Arabic',
|
||||
'bg' : 'Bulgarian',
|
||||
'bn' : 'Bengali/Bangla',
|
||||
'bs' : 'Bosnian',
|
||||
'ca' : 'Catalan',
|
||||
'cs' : 'Czech',
|
||||
'da' : 'Danish',
|
||||
'de' : 'German',
|
||||
'el' : 'Greek',
|
||||
'en' : 'English',
|
||||
'en-au' : 'English (Australia)',
|
||||
'en-ca' : 'English (Canadian)',
|
||||
'en-uk' : 'English (United Kingdom)',
|
||||
'eo' : 'Esperanto',
|
||||
'es' : 'Spanish',
|
||||
'et' : 'Estonian',
|
||||
'eu' : 'Basque',
|
||||
'fa' : 'Persian',
|
||||
'fi' : 'Finnish',
|
||||
'fo' : 'Faroese',
|
||||
'fr' : 'French',
|
||||
'gl' : 'Galician',
|
||||
'he' : 'Hebrew',
|
||||
'hi' : 'Hindi',
|
||||
'hr' : 'Croatian',
|
||||
'hu' : 'Hungarian',
|
||||
'it' : 'Italian',
|
||||
'ja' : 'Japanese',
|
||||
'km' : 'Khmer',
|
||||
'ko' : 'Korean',
|
||||
'lt' : 'Lithuanian',
|
||||
'lv' : 'Latvian',
|
||||
'mn' : 'Mongolian',
|
||||
'ms' : 'Malay',
|
||||
'nl' : 'Dutch',
|
||||
'no' : 'Norwegian',
|
||||
'pl' : 'Polish',
|
||||
'pt' : 'Portuguese (Portugal)',
|
||||
'pt-br' : 'Portuguese (Brazil)',
|
||||
'ro' : 'Romanian',
|
||||
'ru' : 'Russian',
|
||||
'sk' : 'Slovak',
|
||||
'sl' : 'Slovenian',
|
||||
'sr' : 'Serbian (Cyrillic)',
|
||||
'sr-latn' : 'Serbian (Latin)',
|
||||
'sv' : 'Swedish',
|
||||
'th' : 'Thai',
|
||||
'tr' : 'Turkish',
|
||||
'uk' : 'Ukrainian',
|
||||
'vi' : 'Vietnamese',
|
||||
'zh' : 'Chinese Traditional',
|
||||
'zh-cn' : 'Chinese Simplified'
|
||||
}
|
||||
|
||||
FCKLanguageManager.GetActiveLanguage = function()
|
||||
{
|
||||
if ( FCKConfig.AutoDetectLanguage )
|
||||
{
|
||||
var sUserLang ;
|
||||
|
||||
// IE accepts "navigator.userLanguage" while Gecko "navigator.language".
|
||||
if ( navigator.userLanguage )
|
||||
sUserLang = navigator.userLanguage.toLowerCase() ;
|
||||
else if ( navigator.language )
|
||||
sUserLang = navigator.language.toLowerCase() ;
|
||||
else
|
||||
{
|
||||
// Firefox 1.0 PR has a bug: it doens't support the "language" property.
|
||||
return FCKConfig.DefaultLanguage ;
|
||||
}
|
||||
|
||||
// Some language codes are set in 5 characters,
|
||||
// like "pt-br" for Brasilian Portuguese.
|
||||
if ( sUserLang.length >= 5 )
|
||||
{
|
||||
sUserLang = sUserLang.substr(0,5) ;
|
||||
if ( this.AvailableLanguages[sUserLang] ) return sUserLang ;
|
||||
}
|
||||
|
||||
// If the user's browser is set to, for example, "pt-br" but only the
|
||||
// "pt" language file is available then get that file.
|
||||
if ( sUserLang.length >= 2 )
|
||||
{
|
||||
sUserLang = sUserLang.substr(0,2) ;
|
||||
if ( this.AvailableLanguages[sUserLang] ) return sUserLang ;
|
||||
}
|
||||
}
|
||||
|
||||
return this.DefaultLanguage ;
|
||||
}
|
||||
|
||||
FCKLanguageManager.TranslateElements = function( targetDocument, tag, propertyToSet, encode )
|
||||
{
|
||||
var e = targetDocument.getElementsByTagName(tag) ;
|
||||
var sKey, s ;
|
||||
for ( var i = 0 ; i < e.length ; i++ )
|
||||
{
|
||||
if ( sKey = e[i].getAttribute( 'fckLang' ) )
|
||||
{
|
||||
if ( s = FCKLang[ sKey ] )
|
||||
{
|
||||
if ( encode )
|
||||
s = FCKTools.HTMLEncode( s ) ;
|
||||
eval( 'e[i].' + propertyToSet + ' = s' ) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FCKLanguageManager.TranslatePage = function( targetDocument )
|
||||
{
|
||||
this.TranslateElements( targetDocument, 'INPUT', 'value' ) ;
|
||||
this.TranslateElements( targetDocument, 'SPAN', 'innerHTML' ) ;
|
||||
this.TranslateElements( targetDocument, 'LABEL', 'innerHTML' ) ;
|
||||
this.TranslateElements( targetDocument, 'OPTION', 'innerHTML', true ) ;
|
||||
}
|
||||
|
||||
FCKLanguageManager.Initialize = function()
|
||||
{
|
||||
if ( this.AvailableLanguages[ FCKConfig.DefaultLanguage ] )
|
||||
this.DefaultLanguage = FCKConfig.DefaultLanguage ;
|
||||
else
|
||||
this.DefaultLanguage = 'en' ;
|
||||
|
||||
this.ActiveLanguage = new Object() ;
|
||||
this.ActiveLanguage.Code = this.GetActiveLanguage() ;
|
||||
this.ActiveLanguage.Name = this.AvailableLanguages[ this.ActiveLanguage.Code ] ;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user