[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Phpgroupware-cvs] news_admin/js/fckeditor/editor/_source/internals fcks
From: |
skwashd |
Subject: |
[Phpgroupware-cvs] news_admin/js/fckeditor/editor/_source/internals fckselection_gecko.js, 1.1 fckselection_ie.js, 1.1 fcktablehandler.js, 1.1 fcktablehandler_gecko.js, 1.1 fckselection.js, 1.1 fckscriptloader.js, 1.1 fckdialog_ie.js, 1.1 fcklanguagemanager.js, 1.1 fckplugins.js, 1.1 fckregexlib.js, 1.1 fcktablehandler_ie.js, 1.1 fcktoolbaritems.js, 1.1 fckxhtml.js, 1.1 fckxhtml_gecko.js, 1.1 fckxhtml_ie.js, 1.1 fckxhtmlentities.js, 1.1 fckurlparams.js, 1.1 fcktools_ie.js, 1.1 fcktoolbarset.js, 1.1 fcktools.js, 1.1 fcktools_gecko.js, 1.1 fckdialog_gecko.js, 1.1 fckdialog.js, 1.1 fck_1_ie.js, 1.1 fck_2.js, 1.1 fck_2_gecko.js, 1.1 fck_2_ie.js, 1.1 fck_1_gecko.js, 1.1 fck_1.js, 1.1 fck.js, 1.1 fck_last.js, 1.1 fck_onload.js, 1.1 fckcontextmenu_gecko.js, 1.1 fckcontextmenu_ie.js, 1.1 fckcoreextensions.js, 1.1 fckdebug.js, 1.1 fckcontextmenu.js, 1.1 fckconfig.js, 1.1 fckbrowserinfo.js, 1.1 fckcodeformatter.js, 1.1 fckcommands.js, 1.1 |
Date: |
Tue, 24 May 2005 16:32:00 +0200 |
Update of news_admin/js/fckeditor/editor/_source/internals
Added Files:
Branch: MAIN
fckselection_gecko.js
fckselection_ie.js
fcktablehandler.js
fcktablehandler_gecko.js
fckselection.js
fckscriptloader.js
fckdialog_ie.js
fcklanguagemanager.js
fckplugins.js
fckregexlib.js
fcktablehandler_ie.js
fcktoolbaritems.js
fckxhtml.js
fckxhtml_gecko.js
fckxhtml_ie.js
fckxhtmlentities.js
fckurlparams.js
fcktools_ie.js
fcktoolbarset.js
fcktools.js
fcktools_gecko.js
fckdialog_gecko.js
fckdialog.js
fck_1_ie.js
fck_2.js
fck_2_gecko.js
fck_2_ie.js
fck_1_gecko.js
fck_1.js
fck.js
fck_last.js
fck_onload.js
fckcontextmenu_gecko.js
fckcontextmenu_ie.js
fckcoreextensions.js
fckdebug.js
fckcontextmenu.js
fckconfig.js
fckbrowserinfo.js
fckcodeformatter.js
fckcommands.js
Log Message:
I am working on a much better version of news_admin, this is just a taste of
what is coming.
Adding FCKeditor, which has the following issues:
* Images and files support FCKd
* Spellcheck FCKing up
Didn't include non php code or samples other unneeded crap
====================================================
Index: fckselection_gecko.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fckselection_gecko.js
* Active selection functions. (Gecko specific implementation)
*
* Version: 2.0 RC3
* Modified: 2005-01-19 07:50:24
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
// Get the selection type (like document.select.type in IE).
FCKSelection.GetType = function()
{
// if ( ! this._Type )
// {
// By default set the type to "Text".
this._Type = 'Text' ;
// Check if the actual selection is a Control (IMG, TABLE, HR,
etc...).
var oSel = FCK.EditorWindow.getSelection() ;
if ( oSel && oSel.rangeCount == 1 )
{
var oRange = oSel.getRangeAt(0) ;
if ( oRange.startContainer == oRange.endContainer &&
(oRange.endOffset - oRange.startOffset) == 1 )
this._Type = 'Control' ;
}
// }
return this._Type ;
}
// Retrieves the selected element (if any), just in the case that a single
// element (object like and image or a table) is selected.
FCKSelection.GetSelectedElement = function()
{
if ( this.GetType() == 'Control' )
{
var oSel = FCK.EditorWindow.getSelection() ;
return oSel.anchorNode.childNodes[ oSel.anchorOffset ] ;
}
}
FCKSelection.GetParentElement = function()
{
if ( this.GetType() == 'Control' )
return FCKSelection.GetSelectedElement().parentElement ;
else
{
var oSel = FCK.EditorWindow.getSelection() ;
if ( oSel )
{
var oNode = oSel.anchorNode ;
while ( oNode && oNode.nodeType != 1 )
oNode = oNode.parentNode ;
return oNode ;
}
}
}
FCKSelection.MoveToNode = function( node )
{
var oSel = FCK.EditorWindow.getSelection() ;
for ( i = oSel.rangeCount - 1 ; i >= 0 ; i-- )
{
if ( i == 0 )
oSel.getRangeAt(i).selectNodeContents( node ) ;
else
oSel.removeRange( oSel.getRangeAt(i) ) ;
}
}
// The "nodeTagName" parameter must be Upper Case.
FCKSelection.HasAncestorNode = function( nodeTagName )
{
var oContainer = this.GetSelectedElement() ;
if ( ! oContainer && FCK.EditorWindow )
{
try { oContainer =
FCK.EditorWindow.getSelection().getRangeAt(0).startContainer ; }
catch(e){}
}
while ( oContainer )
{
if ( oContainer.tagName == nodeTagName ) return true ;
oContainer = oContainer.parentNode ;
}
return false ;
}
// The "nodeTagName" parameter must be Upper Case.
FCKSelection.MoveToAncestorNode = function( nodeTagName )
{
var oNode ;
var oContainer = this.GetSelectedElement() ;
if ( ! oContainer )
oContainer =
FCK.EditorWindow.getSelection().getRangeAt(0).startContainer ;
while ( oContainer )
{
if ( oContainer.tagName == nodeTagName ) return oContainer ;
oContainer = oContainer.parentNode ;
}
}
FCKSelection.Delete = function()
{
// Gets the actual selection.
var oSel = FCK.EditorWindow.getSelection() ;
// Deletes the actual selection contents.
for ( var i = 0 ; i < oSel.rangeCount ; i++ )
{
oSel.getRangeAt(i).deleteContents() ;
}
return oSel ;
}
FCKSelection.SelectElement = function( element )
{
var oRange = FCK.EditorDocument.createRange() ;
oRange.selectNode( element ) ;
var oSel = FCK.EditorWindow.getSelection() ;
oSel.removeAllRanges() ;
oSel.addRange( oRange ) ;
}
====================================================
Index: fckselection_ie.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fckselection_ie.js
* Active selection functions. (IE specific implementation)
*
* Version: 2.0 RC3
* Modified: 2005-03-02 08:24:15
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
// Get the selection type.
FCKSelection.GetType = function()
{
return FCK.EditorDocument.selection.type ;
}
// Retrieves the selected element (if any), just in the case that a single
// element (object like and image or a table) is selected.
FCKSelection.GetSelectedElement = function()
{
if ( this.GetType() == 'Control' )
{
var oRange = FCK.EditorDocument.selection.createRange() ;
if ( oRange && oRange.item )
return
FCK.EditorDocument.selection.createRange().item(0) ;
}
}
FCKSelection.GetParentElement = function()
{
if ( this.GetType() == 'Control' )
return FCKSelection.GetSelectedElement().parentElement ;
else
return
FCK.EditorDocument.selection.createRange().parentElement() ;
}
FCKSelection.MoveToNode = function( node )
{
FCK.Focus() ;
FCK.EditorDocument.selection.empty() ;
var oRange = FCK.EditorDocument.selection.createRange() ;
oRange.moveToElementText( node ) ;
oRange.select() ;
}
// The "nodeTagName" parameter must be Upper Case.
FCKSelection.HasAncestorNode = function( nodeTagName )
{
var oContainer ;
if ( FCK.EditorDocument.selection.type == "Control" )
{
oContainer = this.GetSelectedElement() ;
}
else
{
var oRange = FCK.EditorDocument.selection.createRange() ;
oContainer = oRange.parentElement() ;
}
while ( oContainer )
{
if ( oContainer.tagName == nodeTagName ) return true ;
oContainer = oContainer.parentNode ;
}
return false ;
}
// The "nodeTagName" parameter must be UPPER CASE.
FCKSelection.MoveToAncestorNode = function( nodeTagName )
{
var oNode ;
if ( FCK.EditorDocument.selection.type == "Control" )
{
var oRange = FCK.EditorDocument.selection.createRange() ;
for ( i = 0 ; i < oRange.length ; i++ )
{
if (oRange(i).parentNode)
{
oNode = oRange(i).parentNode ;
break ;
}
}
}
else
{
var oRange = FCK.EditorDocument.selection.createRange() ;
oNode = oRange.parentElement() ;
}
while ( oNode && oNode.nodeName != nodeTagName )
oNode = oNode.parentNode ;
return oNode ;
}
FCKSelection.Delete = function()
{
// Gets the actual selection.
var oSel = FCK.EditorDocument.selection ;
// Deletes the actual selection contents.
if ( oSel.type.toLowerCase() != "none" )
{
oSel.clear() ;
}
return oSel ;
}
====================================================
Index: fcktablehandler.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fcktablehandler.js
* Manage table operations.
*
* Version: 2.0 RC3
* Modified: 2004-12-16 00:41:05
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
var FCKTableHandler = new Object() ;
FCKTableHandler.InsertRow = function()
{
// Get the row where the selection is placed in.
var oRow = FCKSelection.MoveToAncestorNode("TR") ;
if ( !oRow ) return ;
// Create a clone of the row.
var oNewRow = oRow.cloneNode( true ) ;
// Insert the new row (copy) before of it.
oRow.parentNode.insertBefore( oNewRow, oRow ) ;
// Clean the row (it seems that the new row has been added after it).
FCKTableHandler.ClearRow( oRow ) ;
}
FCKTableHandler.DeleteRows = function( row )
{
// If no row has been passed as a parameer,
// then get the row where the selection is placed in.
if ( !row )
row = FCKSelection.MoveToAncestorNode("TR") ;
if ( !row ) return ;
// Get the row's table.
var oTable = FCKTools.GetElementAscensor( row, 'TABLE' ) ;
// If just one row is available then delete the entire table.
if ( oTable.rows.length == 1 )
{
FCKTableHandler.DeleteTable( oTable ) ;
return ;
}
// Delete the row.
row.parentNode.removeChild( row ) ;
}
FCKTableHandler.DeleteTable = function( table )
{
// If no table has been passed as a parameer,
// then get the table where the selection is placed in.
if ( !table )
table = FCKSelection.MoveToAncestorNode("TABLE") ;
if ( !table ) return ;
// Delete the table.
table.parentNode.removeChild( table ) ;
}
FCKTableHandler.InsertColumn = function()
{
// Get the cell where the selection is placed in.
var oCell = FCKSelection.MoveToAncestorNode("TD") ;
if ( !oCell ) return ;
// Get the cell's table.
var oTable = FCKTools.GetElementAscensor( oCell, 'TABLE' ) ;
// Get the index of the column to be created (based on the cell).
var iIndex = oCell.cellIndex + 1 ;
// Loop throw all rows available in the table.
for ( var i = 0 ; i < oTable.rows.length ; i++ )
{
// Get the row.
var oRow = oTable.rows[i] ;
// If the row doens't have enought cells, ignore it.
if ( oRow.cells.length < iIndex )
continue ;
// Create the new cell element to be added.
oCell = FCK.EditorDocument.createElement('TD') ;
oCell.innerHTML = ' ' ;
// Get the cell that is placed in the new cell place.
var oBaseCell = oRow.cells[iIndex] ;
// If the cell is available (we are not in the last cell of the
row).
if ( oBaseCell )
{
// Insert the new cell just before of it.
oRow.insertBefore( oCell, oBaseCell ) ;
}
else
{
// Append the cell at the end of the row.
oRow.appendChild( oCell ) ;
}
}
}
FCKTableHandler.DeleteColumns = function()
{
// Get the cell where the selection is placed in.
var oCell = FCKSelection.MoveToAncestorNode("TD") ;
if ( !oCell ) return ;
// Get the cell's table.
var oTable = FCKTools.GetElementAscensor( oCell, 'TABLE' ) ;
// Get the cell index.
var iIndex = oCell.cellIndex ;
// Loop throw all rows (from down to up, because it's possible that some
// rows will be deleted).
for ( var i = oTable.rows.length - 1 ; i >= 0 ; i-- )
{
// Get the row.
var oRow = oTable.rows[i] ;
// If the cell to be removed is the first one and the row has
just one cell.
if ( iIndex == 0 && oRow.cells.length == 1 )
{
// Remove the entire row.
FCKTableHandler.DeleteRows( oRow ) ;
continue ;
}
// If the cell to be removed exists the delete it.
if ( oRow.cells[iIndex] )
oRow.removeChild( oRow.cells[iIndex] ) ;
}
}
FCKTableHandler.InsertCell = function( cell )
{
// Get the cell where the selection is placed in.
var oCell = cell ? cell : FCKSelection.MoveToAncestorNode("TD") ;
if ( !oCell ) return ;
// Create the new cell element to be added.
var oNewCell = FCK.EditorDocument.createElement("TD");
oNewCell.innerHTML = " " ;
// If it is the last cell in the row.
if ( oCell.cellIndex == oCell.parentNode.cells.lenght - 1 )
{
// Add the new cell at the end of the row.
oCell.parentNode.appendChild( oNewCell ) ;
}
else
{
// Add the new cell before the next cell (after the active one).
oCell.parentNode.insertBefore( oNewCell, oCell.nextSibling ) ;
}
return oNewCell ;
}
FCKTableHandler.DeleteCell = function( cell )
{
// If this is the last cell in the row.
if ( cell.parentNode.cells.length == 1 )
{
// Delete the entire row.
FCKTableHandler.DeleteRows( FCKTools.GetElementAscensor( cell,
'TR' ) ) ;
return ;
}
// Delete the cell from the row.
cell.parentNode.removeChild( cell ) ;
}
FCKTableHandler.DeleteCells = function()
{
var aCells = FCKTableHandler.GetSelectedCells() ;
for ( var i = aCells.length - 1 ; i >= 0 ; i-- )
{
FCKTableHandler.DeleteCell( aCells[i] ) ;
}
}
FCKTableHandler.MergeCells = function()
{
// Get all selected cells.
var aCells = FCKTableHandler.GetSelectedCells() ;
// At least 2 cells must be selected.
if ( aCells.length < 2 )
return ;
// The merge can occour only if the selected cells are from the same
row.
if ( aCells[0].parentNode != aCells[aCells.length-1].parentNode )
return ;
// Calculate the new colSpan for the first cell.
var iColSpan = isNaN( aCells[0].colSpan ) ? 1 : aCells[0].colSpan ;
var sHtml = '' ;
for ( var i = aCells.length - 1 ; i > 0 ; i-- )
{
iColSpan += isNaN( aCells[i].colSpan ) ? 1 : aCells[i].colSpan ;
// Append the HTML of each cell.
sHtml = aCells[i].innerHTML + sHtml ;
// Delete the cell.
FCKTableHandler.DeleteCell( aCells[i] ) ;
}
// Set the innerHTML of the remaining cell (the first one).
aCells[0].colSpan = iColSpan ;
aCells[0].innerHTML += sHtml ;
}
FCKTableHandler.SplitCell = function()
{
// Check that just one cell is selected, otherwise return.
var aCells = FCKTableHandler.GetSelectedCells() ;
if ( aCells.length != 1 )
return ;
var aMap = this._CreateTableMap( aCells[0].parentNode.parentNode ) ;
var iCellIndex = FCKTableHandler._GetCellIndexSpan( aMap,
aCells[0].parentNode.rowIndex , aCells[0] ) ;
var aCollCells = this._GetCollumnCells( aMap, iCellIndex ) ;
for ( var i = 0 ; i < aCollCells.length ; i++ )
{
if ( aCollCells[i] == aCells[0] )
{
var oNewCell = this.InsertCell( aCells[0] ) ;
if ( !isNaN( aCells[0].rowSpan ) && aCells[0].rowSpan >
1 )
oNewCell.rowSpan = aCells[0].rowSpan ;
}
else
{
if ( isNaN( aCollCells[i].colSpan ) )
aCollCells[i].colSpan = 2 ;
else
aCollCells[i].colSpan += 1 ;
}
}
}
// Get the cell index from a TableMap.
FCKTableHandler._GetCellIndexSpan = function( tableMap, rowIndex, cell )
{
if ( tableMap.length < rowIndex + 1 )
return ;
var oRow = tableMap[ rowIndex ] ;
for ( var c = 0 ; c < oRow.length ; c++ )
{
if ( oRow[c] == cell )
return c ;
}
}
// Get the cells available in a collumn of a TableMap.
FCKTableHandler._GetCollumnCells = function( tableMap, collumnIndex )
{
var aCollCells = new Array() ;
for ( var r = 0 ; r < tableMap.length ; r++ )
{
var oCell = tableMap[r][collumnIndex] ;
if ( oCell && ( aCollCells.length == 0 || aCollCells[
aCollCells.length - 1 ] != oCell ) )
aCollCells[ aCollCells.length ] = oCell ;
}
return aCollCells ;
}
// This function is quite hard to explain. It creates a matrix representing all
cells in a table.
// The difference here is that the "spanned" cells (colSpan and rowSpan) are
duplicated on the matrix
// cells that are "spanned". For example, a row with 3 cells where the second
cell has colSpan=2 and rowSpan=3
// will produce a bi-dimensional matrix with the following values (representing
the cells):
// Cell1, Cell2, Cell2, Cell 3
// Cell4, Cell2, Cell2, Cell 5
FCKTableHandler._CreateTableMap = function( table )
{
var aRows = table.rows ;
// Row and Collumn counters.
var r = -1 ;
var aMap = new Array() ;
for ( var i = 0 ; i < aRows.length ; i++ )
{
r++ ;
if ( !aMap[r] )
aMap[r] = new Array() ;
var c = -1 ;
for ( var j = 0 ; j < aRows[i].cells.length ; j++ )
{
var oCell = aRows[i].cells[j] ;
c++ ;
while ( aMap[r][c] )
c++ ;
var iColSpan = isNaN( oCell.colSpan ) ? 1 :
oCell.colSpan ;
var iRowSpan = isNaN( oCell.rowSpan ) ? 1 :
oCell.rowSpan ;
for ( var rs = 0 ; rs < iRowSpan ; rs++ )
{
if ( !aMap[r + rs] )
aMap[r + rs] = new Array() ;
for ( var cs = 0 ; cs < iColSpan ; cs++ )
{
aMap[r + rs][c + cs] =
aRows[i].cells[j] ;
}
}
c += iColSpan - 1 ;
}
}
return aMap ;
}
FCKTableHandler.ClearRow = function( tr )
{
// Get the array of row's cells.
var aCells = tr.cells ;
// Replace the contents of each cell with "nbsp;".
for ( var i = 0 ; i < aCells.length ; i++ )
{
aCells[i].innerHTML = ' ' ;
}
}
====================================================
Index: fcktablehandler_gecko.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fcktablehandler_gecko.js
* Manage table operations (IE specific).
*
* Version: 2.0 RC3
* Modified: 2004-09-07 00:52:56
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
FCKTableHandler.GetSelectedCells = function()
{
var aCells = new Array() ;
var oSelection = FCK.EditorWindow.getSelection() ;
// If the selection is a text.
if ( oSelection.rangeCount == 1 && oSelection.anchorNode.nodeType == 3 )
{
var oParent = FCKTools.GetElementAscensor(
oSelection.anchorNode, 'TD' ) ;
if ( oParent )
{
aCells[0] = oParent ;
return aCells ;
}
}
for ( var i = 0 ; i < oSelection.rangeCount ; i++ )
{
var oRange = oSelection.getRangeAt(i) ;
var oCell = oRange.startContainer.childNodes[
oRange.startOffset ] ;
if ( oCell.tagName == 'TD' )
aCells[aCells.length] = oCell ;
}
return aCells ;
}
====================================================
Index: fckselection.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fckselection.js
* Active selection functions.
*
* Version: 2.0 RC3
* Modified: 2004-11-22 11:03:02
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
var FCKSelection = new Object() ;
FCK.Selection = FCKSelection ;
====================================================
Index: fckscriptloader.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fckscriptloader.js
* Defines the FCKScriptLoader object that is used to dynamically load
* scripts in the editor.
*
* Version: 2.0 RC3
* Modified: 2004-05-31 23:07:50
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
// This object is used to download scripts and css files sequentialy.
// A file download is not started until the previous file was not completelly
// downloaded.
var FCKScriptLoader = new Object() ;
FCKScriptLoader.IsLoading = false ;
FCKScriptLoader.Queue = new Array() ;
// Adds a script or css to the queue.
FCKScriptLoader.AddScript = function( scriptPath )
{
FCKScriptLoader.Queue[ FCKScriptLoader.Queue.length ] = scriptPath ;
if ( !this.IsLoading )
this.CheckQueue() ;
}
// Checks the queue to see if there is something to load.
// This function should not be called by code. It's a internal function
// that's called recursively.
FCKScriptLoader.CheckQueue = function()
{
// Check if the queue is not empty.
if ( this.Queue.length > 0 )
{
this.IsLoading = true ;
// Get the first item in the queue
var sScriptPath = this.Queue[0] ;
// Removes the first item from the queue
var oTempArray = new Array() ;
for ( i = 1 ; i < this.Queue.length ; i++ )
oTempArray[ i - 1 ] = this.Queue[ i ] ;
this.Queue = oTempArray ;
// window.status = ( 'Loading ' + sScriptPath + '...' ) ;
// Dynamically load the file (it can be a CSS or a JS)
var e ;
// If is a CSS
if ( sScriptPath.lastIndexOf( '.css' ) > 0 )
{
e = document.createElement( 'LINK' ) ;
e.rel = 'stylesheet' ;
e.type = 'text/css' ;
}
// It is a JS
else
{
e = document.createElement( "script" ) ;
e.type = "text/javascript" ;
}
// Add the new object to the HEAD.
document.getElementsByTagName("head")[0].appendChild( e ) ;
var oEvent = function()
{
// Gecko doesn't have a "readyState" property
if ( this.tagName == 'LINK' || !this.readyState ||
this.readyState == 'loaded' )
// Load the next script available in the queue
FCKScriptLoader.CheckQueue() ;
}
// Start downloading it.
if ( e.tagName == 'LINK' )
{
// IE must wait for the file to be downloaded.
if ( FCKBrowserInfo.IsIE )
e.onload = oEvent ;
// Gecko doens't fire any event when the CSS is loaded,
so we
// can't wait for it.
else
FCKScriptLoader.CheckQueue() ;
e.href = sScriptPath ;
}
else
{
// Gecko fires the "onload" event and IE fires
"onreadystatechange"
e.onload = e.onreadystatechange = oEvent ;
e.src = sScriptPath ;
}
}
else
{
this.IsLoading = false ;
// Call the "OnEmpty" event.
if ( this.OnEmpty )
this.OnEmpty() ;
}
}
====================================================
Index: fckdialog_ie.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fckdialog_ie.js
* Dialog windows operations. (IE specific implementations)
*
* Version: 2.0 RC3
* Modified: 2004-12-19 23:28:42
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
FCKDialog.Show = function( dialogInfo, dialogName, pageUrl, dialogWidth,
dialogHeight, parentWindow )
{
if ( !parentWindow )
parentWindow = window ;
parentWindow.showModalDialog( pageUrl, dialogInfo, "dialogWidth:" +
dialogWidth + "px;dialogHeight:" + dialogHeight +
"px;help:no;scroll:no;status:no") ;
}
====================================================
Index: fcklanguagemanager.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fcklanguagemanager.js
* Defines the FCKLanguageManager object that is used for language
* operations.
*
* Version: 2.0 RC3
* Modified: 2005-03-02 10:25:49
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
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 ;
}
FCKDebug.Output( 'Navigator Language = ' + sUserLang ) ;
// 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 )
{
var aInputs = targetDocument.getElementsByTagName(tag) ;
for ( var i = 0 ; i < aInputs.length ; i++ )
{
var sKey = aInputs[i].getAttribute( 'fckLang' ) ;
if ( sKey )
{
var s = FCKLang[ sKey ] ;
if ( s )
eval( 'aInputs[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' ) ;
}
if ( FCKLanguageManager.AvailableLanguages[ FCKConfig.DefaultLanguage ] )
FCKLanguageManager.DefaultLanguage = FCKConfig.DefaultLanguage ;
else
FCKLanguageManager.DefaultLanguage = 'en' ;
FCKLanguageManager.ActiveLanguage = new Object() ;
FCKLanguageManager.ActiveLanguage.Code = FCKLanguageManager.GetActiveLanguage()
;
FCKLanguageManager.ActiveLanguage.Name = FCKLanguageManager.AvailableLanguages[
FCKLanguageManager.ActiveLanguage.Code ] ;
FCK.Language = FCKLanguageManager ;
// Load the language file and start the editor.
LoadLanguageFile() ;
====================================================
Index: fckplugins.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fckplugins.js
* Defines the FCKPlugins object that is responsible for loading the
Plugins.
*
* Version: 2.0 RC3
* Modified: 2005-01-19 17:36:21
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
var FCKPlugins = FCK.Plugins = new Object() ;
FCKPlugins.ItemsCount = 0 ;
FCKPlugins.Loaded = false ;
FCKPlugins.Items = new Object() ;
// Set the defined plugins scripts paths.
for ( var i = 0 ; i < FCKConfig.Plugins.Items.length ; i++ )
{
var oItem = FCKConfig.Plugins.Items[i] ;
FCKPlugins.Items[ oItem[0] ] = new FCKPlugin( oItem[0], oItem[1],
oItem[2] ) ;
FCKPlugins.ItemsCount++ ;
}
FCKPlugins.Load = function()
{
// Load all items.
for ( var s in this.Items )
this.Items[s].Load() ;
// Mark as loaded.
this.Loaded = true ;
// This is a self destroyable function (must be called once).
FCKPlugins.Load = null ;
}
====================================================
Index: fckregexlib.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fckregexlib.js
* These are some Regular Expresions used by the editor.
*
* Version: 2.0 RC3
* Modified: 2005-01-22 17:36:28
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
var FCKRegexLib = new Object() ;
// This is the Regular expression used by the SetHTML method for the "'"
entity.
FCKRegexLib.AposEntity = /'/gi ;
// Used by the Styles combo to identify styles that can't be applied to text.
FCKRegexLib.ObjectElements =
/^(?:IMG|TABLE|TR|TD|INPUT|SELECT|TEXTAREA|HR|OBJECT)$/i ;
// Block Elements.
FCKRegexLib.BlockElements =
/^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI)$/i ;
// Elements marked as empty "Empty" in the XHTML DTD.
FCKRegexLib.EmptyElements =
/^(?:BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT)$/i ;
// List all named commands (commands that can be interpreted by the browser
"execCommand" method.
FCKRegexLib.NamedCommands =
/^(?:Cut|Copy|Paste|Print|SelectAll|RemoveFormat|Unlink|Undo|Redo|Bold|Italic|Underline|StrikeThrough|Subscript|Superscript|JustifyLeft|JustifyCenter|JustifyRight|JustifyFull|Outdent|Indent|InsertOrderedList|InsertUnorderedList|InsertHorizontalRule)$/i
;
FCKRegexLib.BodyContents =
/([\s\S]*\<body[^\>]*\>)([\s\S]*)(\<\/body\>[\s\S]*)/i ;
// Temporary text used to solve some browser specific limitations.
FCKRegexLib.ToReplace = /___fcktoreplace:([\w]+)/ig ;
// Get the META http-equiv attribute from the tag.
FCKRegexLib.MetaHttpEquiv = /http-equiv\s*=\s*["']?([^"' ]+)/i ;
FCKRegexLib.HasBaseTag = /<base /i ;
FCKRegexLib.HeadCloser = /<\/head\s*>/i ;
FCKRegexLib.TableBorderClass = /\s*FCK__ShowTableBorders\s*/ ;
====================================================
Index: fcktablehandler_ie.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fcktablehandler_ie.js
* Manage table operations (IE specific).
*
* Version: 2.0 RC3
* Modified: 2004-09-05 02:17:58
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
FCKTableHandler.GetSelectedCells = function()
{
var aCells = new Array() ;
var oRange = FCK.EditorDocument.selection.createRange() ;
var oParent = oRange.parentElement() ;
if ( oParent && oParent.tagName == "TD" )
aCells[0] = oParent ;
else
{
var oParent = FCKSelection.MoveToAncestorNode( "TABLE" ) ;
if ( oParent )
{
// Loops throw all cells checking if the cell is, or
part of it, is inside the selection
// and then add it to the selected cells collection.
for ( var i = 0 ; i < oParent.cells.length ; i++ )
{
var oCellRange =
FCK.EditorDocument.selection.createRange() ;
oCellRange.moveToElementText( oParent.cells[i]
) ;
if ( oRange.inRange( oCellRange )
|| (
oRange.compareEndPoints('StartToStart',oCellRange) >= 0 &&
oRange.compareEndPoints('StartToEnd',oCellRange) <= 0 )
|| (
oRange.compareEndPoints('EndToStart',oCellRange) >= 0 &&
oRange.compareEndPoints('EndToEnd',oCellRange) <= 0 ) )
{
aCells[aCells.length] =
oParent.cells[i] ;
}
}
}
}
return aCells ;
}
====================================================
Index: fcktoolbaritems.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fcktoolbaritems.js
* Toolbar items definitions.
*
* Version: 2.0 RC3
* Modified: 2005-02-16 19:59:20
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
var FCKToolbarItems = new Object() ;
FCKToolbarItems.LoadedItems = new Object() ;
FCKToolbarItems.RegisterItem = function( itemName, item )
{
this.LoadedItems[ itemName ] = item ;
}
FCKToolbarItems.GetItem = function( itemName )
{
var oItem = FCKToolbarItems.LoadedItems[ itemName ] ;
if ( oItem )
return oItem ;
switch ( itemName )
{
case 'Source' : oItem = new FCKToolbarButton(
'Source' , FCKLang.Source, null, FCK_TOOLBARITEM_ICONTEXT, true, true )
; break ;
case 'DocProps' : oItem = new FCKToolbarButton(
'DocProps' , FCKLang.DocProps ) ; break ;
case 'Save' : oItem = new
FCKToolbarButton( 'Save' , FCKLang.Save, null, null, true ) ; break ;
case 'NewPage' : oItem = new FCKToolbarButton(
'NewPage' , FCKLang.NewPage, null, null, true ) ; break ;
case 'Preview' : oItem = new FCKToolbarButton(
'Preview' , FCKLang.Preview, null, null, true ) ; break ;
case 'About' : oItem = new FCKToolbarButton(
'About' , FCKLang.About, null, null, true ) ; break ;
case 'Cut' : oItem = new
FCKToolbarButton( 'Cut' , FCKLang.Cut, null, null, false, true ) ;
break ;
case 'Copy' : oItem = new
FCKToolbarButton( 'Copy' , FCKLang.Copy, null, null, false, true ) ;
break ;
case 'Paste' : oItem = new FCKToolbarButton(
'Paste' , FCKLang.Paste, null, null, false, true ) ; break ;
case 'PasteText' : oItem = new FCKToolbarButton(
'PasteText' , FCKLang.PasteText, null, null, false, true ) ; break ;
case 'PasteWord' : oItem = new FCKToolbarButton(
'PasteWord' , FCKLang.PasteWord, null, null, false, true ) ; break ;
case 'Print' : oItem = new FCKToolbarButton(
'Print' , FCKLang.Print ) ; break ;
case 'SpellCheck' : oItem = new FCKToolbarButton(
'SpellCheck', FCKLang.SpellCheck ) ; break ;
case 'Undo' : oItem = new
FCKToolbarButton( 'Undo' , FCKLang.Undo, null, null, false, true ) ;
break ;
case 'Redo' : oItem = new
FCKToolbarButton( 'Redo' , FCKLang.Redo, null, null, false, true ) ;
break ;
case 'SelectAll' : oItem = new FCKToolbarButton(
'SelectAll' , FCKLang.SelectAll ) ; break ;
case 'RemoveFormat' : oItem = new FCKToolbarButton(
'RemoveFormat', FCKLang.RemoveFormat, null, null, false, true ) ; break ;
case 'Bold' : oItem = new
FCKToolbarButton( 'Bold' , FCKLang.Bold, null, null, false, true ) ;
break ;
case 'Italic' : oItem = new FCKToolbarButton(
'Italic' , FCKLang.Italic, null, null, false, true ) ; break ;
case 'Underline' : oItem = new FCKToolbarButton(
'Underline' , FCKLang.Underline, null, null, false, true ) ; break ;
case 'StrikeThrough' : oItem = new FCKToolbarButton(
'StrikeThrough' , FCKLang.StrikeThrough, null, null, false, true ) ; break ;
case 'Subscript' : oItem = new FCKToolbarButton(
'Subscript' , FCKLang.Subscript, null, null, false, true ) ; break ;
case 'Superscript' : oItem = new FCKToolbarButton(
'Superscript' , FCKLang.Superscript, null, null, false, true ) ; break ;
case 'OrderedList' : oItem = new FCKToolbarButton(
'InsertOrderedList' , FCKLang.NumberedListLbl,
FCKLang.NumberedList, null, false, true ) ; break ;
case 'UnorderedList' : oItem = new FCKToolbarButton(
'InsertUnorderedList' , FCKLang.BulletedListLbl, FCKLang.BulletedList, null,
false, true ) ; break ;
case 'Outdent' : oItem = new FCKToolbarButton(
'Outdent' , FCKLang.DecreaseIndent, null, null, false, true ) ; break ;
case 'Indent' : oItem = new FCKToolbarButton(
'Indent' , FCKLang.IncreaseIndent, null, null, false, true ) ; break ;
case 'Link' : oItem = new
FCKToolbarButton( 'Link' , FCKLang.InsertLinkLbl, FCKLang.InsertLink,
null, false, true ) ; break ;
case 'Unlink' : oItem = new FCKToolbarButton(
'Unlink' , FCKLang.RemoveLink, null, null, false, true ) ; break ;
case 'Anchor' : oItem = new FCKToolbarButton(
'Anchor' , FCKLang.Anchor ) ; break ;
case 'Image' : oItem = new FCKToolbarButton(
'Image' , FCKLang.InsertImageLbl, FCKLang.InsertImage ) ; break
;
case 'Table' : oItem = new FCKToolbarButton(
'Table' , FCKLang.InsertTableLbl, FCKLang.InsertTable ) ; break
;
case 'SpecialChar' : oItem = new FCKToolbarButton(
'SpecialChar' , FCKLang.InsertSpecialCharLbl, FCKLang.InsertSpecialChar ) ;
break ;
case 'Smiley' : oItem = new FCKToolbarButton(
'Smiley' , FCKLang.InsertSmileyLbl, FCKLang.InsertSmiley ) ;
break ;
case 'UniversalKey' : oItem = new FCKToolbarButton(
'UniversalKey' , FCKLang.UniversalKeyboard ) ; break ;
case 'Rule' : oItem = new
FCKToolbarButton( 'InsertHorizontalRule', FCKLang.InsertLineLbl,
FCKLang.InsertLine ) ; break ;
case 'JustifyLeft' : oItem = new FCKToolbarButton(
'JustifyLeft' , FCKLang.LeftJustify, null, null, false, true ) ; break ;
case 'JustifyCenter' : oItem = new FCKToolbarButton(
'JustifyCenter' , FCKLang.CenterJustify, null, null, false, true ) ; break ;
case 'JustifyRight' : oItem = new FCKToolbarButton(
'JustifyRight' , FCKLang.RightJustify, null, null, false, true ) ; break ;
case 'JustifyFull' : oItem = new FCKToolbarButton(
'JustifyFull' , FCKLang.BlockJustify, null, null, false, true ) ; break ;
case 'Style' : oItem = new
FCKToolbarStyleCombo() ; break ;
case 'FontName' : oItem = new
FCKToolbarFontsCombo() ; break ;
case 'FontSize' : oItem = new
FCKToolbarFontSizeCombo() ; break ;
case 'FontFormat' : oItem = new
FCKToolbarFontFormatCombo() ; break ;
case 'TextColor' : oItem = new
FCKToolbarPanelButton( 'TextColor', FCKLang.TextColor ) ; break ;
case 'BGColor' : oItem = new
FCKToolbarPanelButton( 'BGColor' , FCKLang.BGColor ) ; break ;
case 'Find' : oItem = new
FCKToolbarButton( 'Find' , FCKLang.Find ) ; break ;
case 'Replace' : oItem = new FCKToolbarButton(
'Replace' , FCKLang.Replace ) ; break ;
case 'Form' : oItem = new
FCKToolbarButton( 'Form' , FCKLang.Form ) ; break ;
case 'Checkbox' : oItem = new FCKToolbarButton(
'Checkbox' , FCKLang.Checkbox ) ; break ;
case 'Radio' : oItem = new FCKToolbarButton(
'Radio' , FCKLang.RadioButton ) ; break ;
case 'TextField' : oItem = new FCKToolbarButton(
'TextField' , FCKLang.TextField ) ; break ;
case 'Textarea' : oItem = new FCKToolbarButton(
'Textarea' , FCKLang.Textarea ) ; break ;
case 'HiddenField' : oItem = new FCKToolbarButton(
'HiddenField' , FCKLang.HiddenField ) ; break ;
case 'Button' : oItem = new FCKToolbarButton(
'Button' , FCKLang.Button ) ; break ;
case 'Select' : oItem = new FCKToolbarButton(
'Select' , FCKLang.SelectionField ) ; break ;
case 'ImageButton' : oItem = new FCKToolbarButton(
'ImageButton' , FCKLang.ImageButton ) ; break ;
default:
alert( FCKLang.UnknownToolbarItem.replace( /%1/g,
itemName ) ) ;
return ;
}
FCKToolbarItems.LoadedItems[ itemName ] = oItem ;
return oItem ;
}
====================================================
Index: fckxhtml.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fckxhtml.js
* Defines the FCKXHtml object, responsible for the XHTML operations.
*
* Version: 2.0 RC3
* Modified: 2005-03-02 11:17:23
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
var FCKXHtml = new Object() ;
FCKXHtml.CurrentJobNum = 0 ;
FCKXHtml.GetXHTML = function( node, includeNode, format )
{
// Special blocks are blocks of content that remain untouched during the
// process. It is used for SCRIPTs and STYLEs.
FCKXHtml.SpecialBlocks = new Array() ;
// Create the XML DOMDocument object.
this.XML = FCKTools.CreateXmlObject( 'DOMDocument' ) ;
// Add a root element that holds all child nodes.
this.MainNode = this.XML.appendChild( this.XML.createElement( 'xhtml' )
) ;
FCKXHtml.CurrentJobNum++ ;
if ( includeNode )
this._AppendNode( this.MainNode, node ) ;
else
this._AppendChildNodes( this.MainNode, node, false ) ;
// Get the resulting XHTML as a string.
var sXHTML = this._GetMainXmlString() ;
// Strip the "XHTML" root node.
sXHTML = sXHTML.substr( 7, sXHTML.length - 15 ).trim() ;
if ( FCKConfig.ForceSimpleAmpersand )
sXHTML = sXHTML.replace( /___FCKAmp___/g, '&' ) ;
if ( format )
sXHTML = FCKCodeFormatter.Format( sXHTML ) ;
// Now we put back the SpecialBlocks contents.
for ( var i = 0 ; i < FCKXHtml.SpecialBlocks.length ; i++ )
{
var oRegex = new RegExp( '___FCKsi___' + i ) ;
sXHTML = sXHTML.replace( oRegex, FCKXHtml.SpecialBlocks[i] ) ;
}
this.XML = null ;
return sXHTML
}
FCKXHtml._AppendAttribute = function( xmlNode, attributeName, attributeValue )
{
try
{
// Create the attribute.
var oXmlAtt = this.XML.createAttribute( attributeName ) ;
oXmlAtt.value = attributeValue ? attributeValue : '' ;
// Set the attribute in the node.
xmlNode.attributes.setNamedItem( oXmlAtt ) ;
}
catch (e)
{}
}
FCKXHtml._AppendChildNodes = function( xmlNode, htmlNode, isBlockElement )
{
if ( htmlNode.hasChildNodes() )
{
// Get all children nodes.
var oChildren = htmlNode.childNodes ;
for ( var i = 0 ; i < oChildren.length ; i++ )
this._AppendNode( xmlNode, oChildren[i] ) ;
}
else
{
if ( isBlockElement && FCKConfig.FillEmptyBlocks )
{
this._AppendEntity( xmlNode, 'nbsp' ) ;
return ;
}
// We can't use short representation of empty elements that are
not marked
// as empty in th XHTML DTD.
if ( ! FCKRegexLib.EmptyElements.test( htmlNode.nodeName ) )
xmlNode.appendChild( this.XML.createTextNode('') ) ;
}
}
FCKXHtml._AppendNode = function( xmlNode, htmlNode )
{
switch ( htmlNode.nodeType )
{
// Element Node.
case 1 :
// Mozilla insert custom nodes in the DOM.
if ( FCKBrowserInfo.IsGecko &&
htmlNode.hasAttribute('_moz_editor_bogus_node') )
return ;
// Create the Element.
var sNodeName = htmlNode.nodeName.toLowerCase() ;
if ( FCKBrowserInfo.IsGecko && sNodeName == 'br' &&
htmlNode.hasAttribute('type') && htmlNode.getAttribute( 'type', 2 ) == '_moz' )
return ;
// The already processed nodes must be marked to avoid
then to be duplicated (bad formatted HTML).
// So here, the "mark" is checked... if the element is
Ok, then mark it.
if ( htmlNode._fckxhtmljob == FCKXHtml.CurrentJobNum )
return ;
else
htmlNode._fckxhtmljob = FCKXHtml.CurrentJobNum ;
// If the nodeName starts with a slash, it is a orphan
closing tag.
// On some strange cases, the nodeName is empty, even
if the node exists.
if ( sNodeName.length == 0 || sNodeName.substr(0,1) ==
'/' )
break ;
var oNode = this.XML.createElement( sNodeName ) ;
// Add all attributes.
FCKXHtml._AppendAttributes( xmlNode, htmlNode, oNode,
sNodeName ) ;
// Tag specific processing.
var oTagProcessor = FCKXHtml.TagProcessors[ sNodeName ]
;
if ( oTagProcessor )
{
oNode = oTagProcessor( oNode, htmlNode ) ;
if ( !oNode ) break ;
}
else
this._AppendChildNodes( oNode, htmlNode,
FCKRegexLib.BlockElements.test( sNodeName ) ) ;
xmlNode.appendChild( oNode ) ;
break ;
// Text Node.
case 3 :
// We can't just replace the special chars with
entities and create a
// text node with it. We must split the text isolating
the special chars
// and add each piece a time.
var asPieces = htmlNode.nodeValue.replaceNewLineChars('
').match( FCKXHtmlEntities.EntitiesRegex ) ;
if ( asPieces )
{
for ( var i = 0 ; i < asPieces.length ; i++ )
{
if ( asPieces[i].length == 1 )
{
var sEntity =
FCKXHtmlEntities.Entities[ asPieces[i] ] ;
if ( sEntity != null )
{
this._AppendEntity(
xmlNode, sEntity ) ;
continue ;
}
}
xmlNode.appendChild(
this.XML.createTextNode( asPieces[i] ) ) ;
}
}
// This is the original code. It doesn't care about the
entities.
//xmlNode.appendChild( this.XML.createTextNode(
htmlNode.nodeValue ) ) ;
break ;
// Comment
case 8 :
xmlNode.appendChild( this.XML.createComment(
htmlNode.nodeValue ) ) ;
break ;
// Unknown Node type.
default :
xmlNode.appendChild( this.XML.createComment( "Element
not supported - Type: " + htmlNode.nodeType + " Name: " + htmlNode.nodeName ) )
;
break ;
}
}
// Append an item to the SpecialBlocks array and returns the tag to be used.
FCKXHtml._AppendSpecialItem = function( item )
{
return '___FCKsi___' + FCKXHtml.SpecialBlocks.addItem( item ) ;
}
// An object that hold tag specific operations.
FCKXHtml.TagProcessors = new Object() ;
FCKXHtml.TagProcessors['img'] = function( node )
{
// The "ALT" attribute is required in XHTML.
if ( ! node.attributes.getNamedItem( 'alt' ) )
FCKXHtml._AppendAttribute( node, 'alt', '' ) ;
return node ;
}
FCKXHtml.TagProcessors['script'] = function( node, htmlNode )
{
// The "TYPE" attribute is required in XHTML.
if ( ! node.attributes.getNamedItem( 'type' ) )
FCKXHtml._AppendAttribute( node, 'type', 'text/javascript' ) ;
node.appendChild( FCKXHtml.XML.createTextNode(
FCKXHtml._AppendSpecialItem( htmlNode.text ) ) ) ;
return node ;
}
FCKXHtml.TagProcessors['style'] = function( node, htmlNode )
{
// The "_fcktemp" attribute is used to mark the <STYLE> used by the
editor
// to set some behaviors.
if ( htmlNode.getAttribute( '_fcktemp' ) )
return null ;
// The "TYPE" attribute is required in XHTML.
if ( ! node.attributes.getNamedItem( 'type' ) )
FCKXHtml._AppendAttribute( node, 'type', 'text/css' ) ;
node.appendChild( FCKXHtml.XML.createTextNode(
FCKXHtml._AppendSpecialItem( htmlNode.innerHTML ) ) ) ;
return node ;
}
FCKXHtml.TagProcessors['title'] = function( node, htmlNode )
{
node.appendChild( FCKXHtml.XML.createTextNode( FCK.EditorDocument.title
) ) ;
return node ;
}
FCKXHtml.TagProcessors['base'] = function( node, htmlNode )
{
// The "_fcktemp" attribute is used to mark the <BASE> tag when the
editor
// automatically sets it using the FCKConfig.BaseHref configuration.
if ( htmlNode.getAttribute( '_fcktemp' ) )
return null ;
// IE duplicates the BODY inside the <BASE /> tag (don't ask me why!).
// This tag processor does nothing... in this way, no child nodes are
added
// (also because the BASE tag must be empty).
return node ;
}
FCKXHtml.TagProcessors['link'] = function( node, htmlNode )
{
// The "_fcktemp" attribute is used to mark the fck_internal.css <LINK>
// reference.
if ( htmlNode.getAttribute( '_fcktemp' ) )
return null ;
return node ;
}
FCKXHtml.TagProcessors['table'] = function( node, htmlNode )
{
// There is a trick to show table borders when border=0. We add to the
// table class the FCK__ShowTableBorders rule. So now we must remove it.
var oClassAtt = node.attributes.getNamedItem( 'class' ) ;
if ( oClassAtt && FCKRegexLib.TableBorderClass.test(
oClassAtt.nodeValue ) )
{
var sClass = oClassAtt.nodeValue.replace(
FCKRegexLib.TableBorderClass, '' ) ;
if ( sClass.length == 0 )
node.attributes.removeNamedItem( 'class' ) ;
else
FCKXHtml._AppendAttribute( node, 'class', sClass ) ;
}
FCKXHtml._AppendChildNodes( node, htmlNode, false ) ;
return node ;
}
====================================================
Index: fckxhtml_gecko.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fckxhtml_gecko.js
* Defines the FCKXHtml object, responsible for the XHTML operations.
* Gecko specific.
*
* Version: 2.0 RC3
* Modified: 2005-02-24 00:20:55
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
FCKXHtml._GetMainXmlString = function()
{
// Create the XMLSerializer.
var oSerializer = new XMLSerializer() ;
// Return the serialized XML as a string.
// Due to a BUG on Gecko, the special chars sequence "#?-:" must be
replaced with "&"
// for the XHTML entities.
return oSerializer.serializeToString( this.MainNode ).replace(
FCKXHtmlEntities.GeckoEntitiesMarkerRegex, '&' ) ;
}
// There is a BUG on Gecko... createEntityReference returns null.
// So we use a trick to append entities on it.
FCKXHtml._AppendEntity = function( xmlNode, entity )
{
xmlNode.appendChild( this.XML.createTextNode( '#?-:' + entity + ';' ) )
;
}
FCKXHtml._AppendAttributes = function( xmlNode, htmlNode, node )
{
var aAttributes = htmlNode.attributes ;
for ( var n = 0 ; n < aAttributes.length ; n++ )
{
var oAttribute = aAttributes[n] ;
if ( oAttribute.specified )
{
var sAttName = oAttribute.nodeName.toLowerCase() ;
// The "_fckxhtmljob" attribute is used to mark the
already processed elements.
if ( sAttName == '_fckxhtmljob' )
continue ;
// There is a bug in Mozilla that returns '_moz_xxx'
attributes as specified.
else if ( sAttName.indexOf( '_moz' ) == 0 )
continue ;
// There are one cases (on Gecko) when the
oAttribute.nodeValue must be used:
// - for the "class" attribute
else if ( sAttName == 'class' )
var sAttValue = oAttribute.nodeValue ;
// XHTML doens't support attribute minimization like
"CHECKED". It must be trasformed to cheched="checked".
else if ( oAttribute.nodeValue === true )
sAttValue = sAttName ;
else
var sAttValue = htmlNode.getAttribute(
sAttName, 2 ) ; // We must use getAttribute to get it exactly as it is defined.
if ( FCKConfig.ForceSimpleAmpersand &&
sAttValue.replace )
sAttValue = sAttValue.replace( /&/g,
'___FCKAmp___' ) ;
this._AppendAttribute( node, sAttName, sAttValue ) ;
}
}
}
====================================================
Index: fckxhtml_ie.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fckxhtml_ie.js
* Defines the FCKXHtml object, responsible for the XHTML operations.
* IE specific.
*
* Version: 2.0 RC3
* Modified: 2005-02-24 00:20:19
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
FCKXHtml._GetMainXmlString = function()
{
return this.MainNode.xml ;
}
FCKXHtml._AppendEntity = function( xmlNode, entity )
{
xmlNode.appendChild( this.XML.createEntityReference( entity ) ) ;
}
FCKXHtml._AppendAttributes = function( xmlNode, htmlNode, node, nodeName )
{
var aAttributes = htmlNode.attributes ;
for ( var n = 0 ; n < aAttributes.length ; n++ )
{
var oAttribute = aAttributes[n] ;
if ( oAttribute.specified )
{
var sAttName = oAttribute.nodeName.toLowerCase() ;
// The "_fckxhtmljob" attribute is used to mark the
already processed elements.
if ( sAttName == '_fckxhtmljob' )
continue ;
// The following must be done because of a bug on IE
regarding the style
// attribute. It returns "null" for the nodeValue.
else if ( sAttName == 'style' )
var sAttValue = htmlNode.style.cssText ;
// There are two cases when the oAttribute.nodeValue
must be used:
// - for the "class" attribute
// - for events attributes (on IE only).
else if ( sAttName == 'class' || sAttName.indexOf('on')
== 0 )
var sAttValue = oAttribute.nodeValue ;
else if ( nodeName == 'body' && sAttName ==
'contenteditable' )
continue ;
// XHTML doens't support attribute minimization like
"CHECKED". It must be trasformed to cheched="checked".
else if ( oAttribute.nodeValue === true )
sAttValue = sAttName ;
// We must use getAttribute to get it exactly as it is
defined.
else
var sAttValue = htmlNode.getAttribute(
sAttName, 2 ) ;
if ( FCKConfig.ForceSimpleAmpersand &&
sAttValue.replace )
sAttValue = sAttValue.replace( /&/g,
'___FCKAmp___' ) ;
this._AppendAttribute( node, sAttName, sAttValue ) ;
}
}
}
FCKXHtml.TagProcessors['meta'] = function( node, htmlNode )
{
var oHttpEquiv = node.attributes.getNamedItem( 'http-equiv' ) ;
if ( oHttpEquiv == null || oHttpEquiv.value.length == 0 )
{
// Get the http-equiv value from the outerHTML.
var sHttpEquiv = htmlNode.outerHTML.match(
FCKRegexLib.MetaHttpEquiv ) ;
if ( sHttpEquiv )
{
sHttpEquiv = sHttpEquiv[1] ;
FCKXHtml._AppendAttribute( node, 'http-equiv',
sHttpEquiv ) ;
}
}
return node ;
}
// IE automaticaly changes <FONT> tags to <FONT size=+0>.
FCKXHtml.TagProcessors['font'] = function( node, htmlNode )
{
if ( node.attributes.length == 0 )
node = FCKXHtml.XML.createDocumentFragment() ;
FCKXHtml._AppendChildNodes( node, htmlNode ) ;
return node ;
}
// IE doens't see the value attribute as an attribute for the <INPUT> tag.
FCKXHtml.TagProcessors['input'] = function( node, htmlNode )
{
if ( htmlNode.name )
FCKXHtml._AppendAttribute( node, 'name', htmlNode.name ) ;
if ( htmlNode.value && !node.attributes.getNamedItem( 'value' ) )
FCKXHtml._AppendAttribute( node, 'value', htmlNode.value ) ;
return node ;
}
// IE ignores the "SELECTED" attribute so we must add it manually.
FCKXHtml.TagProcessors['option'] = function( node, htmlNode )
{
if ( htmlNode.selected && !node.attributes.getNamedItem( 'selected' ) )
FCKXHtml._AppendAttribute( node, 'selected', 'selected' ) ;
FCKXHtml._AppendChildNodes( node, htmlNode ) ;
return node ;
}
// There is a BUG in IE regarding the ABBR tag.
FCKXHtml.TagProcessors['abbr'] = function( node, htmlNode )
{
var oNextNode = htmlNode.nextSibling ;
while ( true )
{
if ( oNextNode && oNextNode.nodeName != '/ABBR' )
{
FCKXHtml._AppendNode( node, oNextNode ) ;
oNextNode = oNextNode.nextSibling ;
}
else
break ;
}
return node ;
}
// IE ignores the "COORDS" and "SHAPE" attribute so we must add it manually.
FCKXHtml.TagProcessors['area'] = function( node, htmlNode )
{
if ( ! node.attributes.getNamedItem( 'coords' ) )
{
var sCoords = htmlNode.getAttribute( 'coords', 2 ) ;
if ( sCoords && sCoords != '0,0,0' )
FCKXHtml._AppendAttribute( node, 'coords', sCoords ) ;
}
if ( ! node.attributes.getNamedItem( 'shape' ) )
{
var sCoords = htmlNode.getAttribute( 'shape', 2 ) ;
if ( sCoords && sCoords.length > 0 )
FCKXHtml._AppendAttribute( node, 'shape', sCoords ) ;
}
return node ;
}
FCKXHtml.TagProcessors['label'] = function( node, htmlNode )
{
if ( htmlNode.htmlFor.length > 0 )
FCKXHtml._AppendAttribute( node, 'for', htmlNode.htmlFor ) ;
FCKXHtml._AppendChildNodes( node, htmlNode ) ;
return node ;
}
FCKXHtml.TagProcessors['form'] = function( node, htmlNode )
{
if ( htmlNode.acceptCharset.length > 0 && htmlNode.acceptCharset !=
'UNKNOWN' )
FCKXHtml._AppendAttribute( node, 'accept-charset',
htmlNode.acceptCharset ) ;
FCKXHtml._AppendChildNodes( node, htmlNode ) ;
return node ;
}
====================================================
Index: fckxhtmlentities.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fckxhtmlentities.js
* This file define the HTML entities handled by the editor.
*
* Version: 2.0 RC3
* Modified: 2004-11-22 16:23:11
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
FCKXHtmlEntities = new Object();
FCKXHtmlEntities.Entities = {
// Latin-1 Entities
'Â ':'nbsp',
'¡':'iexcl',
'¢':'cent',
'£':'pound',
'¤':'curren',
'Â¥':'yen',
'¦':'brvbar',
'§':'sect',
'¨':'uml',
'©':'copy',
'ª':'ordf',
'«':'laquo',
'¬':'not',
'Â':'shy',
'®':'reg',
'¯':'macr',
'°':'deg',
'±':'plusmn',
'²':'sup2',
'³':'sup3',
'´':'acute',
'µ':'micro',
'¶':'para',
'·':'middot',
'¸':'cedil',
'¹':'sup1',
'º':'ordm',
'»':'raquo',
'¼':'frac14',
'½':'frac12',
'¾':'frac34',
'¿':'iquest',
'Ã':'Agrave',
'Ã':'Aacute',
'Ã':'Acirc',
'Ã':'Atilde',
'Ã':'Auml',
'Ã
':'Aring',
'Ã':'AElig',
'Ã':'Ccedil',
'Ã':'Egrave',
'Ã':'Eacute',
'Ã':'Ecirc',
'Ã':'Euml',
'Ã':'Igrave',
'Ã':'Iacute',
'Ã':'Icirc',
'Ã':'Iuml',
'Ã':'ETH',
'Ã':'Ntilde',
'Ã':'Ograve',
'Ã':'Oacute',
'Ã':'Ocirc',
'Ã':'Otilde',
'Ã':'Ouml',
'Ã':'times',
'Ã':'Oslash',
'Ã':'Ugrave',
'Ã':'Uacute',
'Ã':'Ucirc',
'Ã':'Uuml',
'Ã':'Yacute',
'Ã':'THORN',
'Ã':'szlig',
'Ã ':'agrave',
'á':'aacute',
'â':'acirc',
'ã':'atilde',
'ä':'auml',
'Ã¥':'aring',
'æ':'aelig',
'ç':'ccedil',
'è':'egrave',
'é':'eacute',
'ê':'ecirc',
'ë':'euml',
'ì':'igrave',
'Ã':'iacute',
'î':'icirc',
'ï':'iuml',
'ð':'eth',
'ñ':'ntilde',
'ò':'ograve',
'ó':'oacute',
'ô':'ocirc',
'õ':'otilde',
'ö':'ouml',
'÷':'divide',
'ø':'oslash',
'ù':'ugrave',
'ú':'uacute',
'û':'ucirc',
'ü':'uuml',
'ý':'yacute',
'þ':'thorn',
'ÿ':'yuml',
// Symbols and Greek Letters
'Æ':'fnof',
'Î':'Alpha',
'Î':'Beta',
'Î':'Gamma',
'Î':'Delta',
'Î':'Epsilon',
'Î':'Zeta',
'Î':'Eta',
'Î':'Theta',
'Î':'Iota',
'Î':'Kappa',
'Î':'Lambda',
'Î':'Mu',
'Î':'Nu',
'Î':'Xi',
'Î':'Omicron',
'Î ':'Pi',
'Ρ':'Rho',
'Σ':'Sigma',
'Τ':'Tau',
'Î¥':'Upsilon',
'Φ':'Phi',
'Χ':'Chi',
'Ψ':'Psi',
'Ω':'Omega',
'α':'alpha',
'β':'beta',
'γ':'gamma',
'δ':'delta',
'ε':'epsilon',
'ζ':'zeta',
'η':'eta',
'θ':'theta',
'ι':'iota',
'κ':'kappa',
'λ':'lambda',
'μ':'mu',
'ν':'nu',
'ξ':'xi',
'ο':'omicron',
'Ï':'pi',
'Ï':'rho',
'Ï':'sigmaf',
'Ï':'sigma',
'Ï':'tau',
'Ï
':'upsilon',
'Ï':'phi',
'Ï':'chi',
'Ï':'psi',
'Ï':'omega',
'Ï':'thetasym',
'Ï':'upsih',
'Ï':'piv',
'â¢':'bull',
'â¦':'hellip',
'â²':'prime',
'â³':'Prime',
'â¾':'oline',
'â':'frasl',
'â':'weierp',
'â':'image',
'â':'real',
'â¢':'trade',
'âµ':'alefsym',
'â':'larr',
'â':'uarr',
'â':'rarr',
'â':'darr',
'â':'harr',
'âµ':'crarr',
'â':'lArr',
'â':'uArr',
'â':'rArr',
'â':'dArr',
'â':'hArr',
'â':'forall',
'â':'part',
'â':'exist',
'â
':'empty',
'â':'nabla',
'â':'isin',
'â':'notin',
'â':'ni',
'â':'prod',
'â':'sum',
'â':'minus',
'â':'lowast',
'â':'radic',
'â':'prop',
'â':'infin',
'â ':'ang',
'â§':'and',
'â¨':'or',
'â©':'cap',
'âª':'cup',
'â«':'int',
'â´':'there4',
'â¼':'sim',
'â
':'cong',
'â':'asymp',
'â ':'ne',
'â¡':'equiv',
'â¤':'le',
'â¥':'ge',
'â':'sub',
'â':'sup',
'â':'nsub',
'â':'sube',
'â':'supe',
'â':'oplus',
'â':'otimes',
'â¥':'perp',
'â
':'sdot',
'â':'lceil',
'â':'rceil',
'â':'lfloor',
'â':'rfloor',
'â©':'lang',
'âª':'rang',
'â':'loz',
'â ':'spades',
'â£':'clubs',
'â¥':'hearts',
'â¦':'diams',
// Other Special Characters
'"':'quot',
// '&':'amp', // This entity is automatically handled by the
XHTML parser.
// '<':'lt', // This entity is automatically handled by the
XHTML parser.
// '>':'gt', // This entity is automatically handled by the
XHTML parser.
'Å':'OElig',
'Å':'oelig',
'Å ':'Scaron',
'Å¡':'scaron',
'Ÿ':'Yuml',
'Ë':'circ',
'Ë':'tilde',
'â':'ensp',
'â':'emsp',
'â':'thinsp',
'â':'zwnj',
'â':'zwj',
'â':'lrm',
'â':'rlm',
'â':'ndash',
'â':'mdash',
'â':'lsquo',
'â':'rsquo',
'â':'sbquo',
'â':'ldquo',
'â':'rdquo',
'â':'bdquo',
'â ':'dagger',
'â¡':'Dagger',
'â°':'permil',
'â¹':'lsaquo',
'âº':'rsaquo',
'â¬':'euro'
} ;
FCKXHtmlEntities.Chars = '' ;
for ( var e in FCKXHtmlEntities.Entities )
FCKXHtmlEntities.Chars += e ;
FCKXHtmlEntities.EntitiesRegex = new RegExp('','') ;
FCKXHtmlEntities.EntitiesRegex.compile( '[' + FCKXHtmlEntities.Chars + ']|[^' +
FCKXHtmlEntities.Chars + ']+', 'g' ) ;
FCKXHtmlEntities.GeckoEntitiesMarkerRegex = /#\?-\:/g ;
====================================================
Index: fckurlparams.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fckurlparams.js
* Defines the FCKURLParams object that is used to get all parameters
* passed by the URL QueryString (after the "?").
*
* Version: 2.0 RC3
* Modified: 2004-05-31 23:07:51
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
// #### URLParams: holds all URL passed parameters (like
?Param1=Value1&Param2=Value2)
var FCKURLParams = new Object() ;
var aParams = document.location.search.substr(1).split('&') ;
for ( i = 0 ; i < aParams.length ; i++ )
{
var aParam = aParams[i].split('=') ;
var sParamName = aParam[0] ;
var sParamValue = aParam[1] ;
FCKURLParams[ sParamName ] = sParamValue ;
}
====================================================
Index: fcktools_ie.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fcktools_ie.js
* Utility functions. (IE version).
*
* Version: 2.0 RC3
* Modified: 2005-02-23 00:43:29
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
// Appends a CSS file to a document.
FCKTools.AppendStyleSheet = function( documentElement, cssFileUrl )
{
return documentElement.createStyleSheet( cssFileUrl ) ;
}
// Removes all attributes and values from the element.
FCKTools.ClearElementAttributes = function( element )
{
element.clearAttributes() ;
}
FCKTools.GetAllChildrenIds = function( parentElement )
{
var aIds = new Array() ;
for ( var i = 0 ; i < parentElement.all.length ; i++ )
{
var sId = parentElement.all[i].id ;
if ( sId && sId.length > 0 )
aIds[ aIds.length ] = sId ;
}
return aIds ;
}
FCKTools.RemoveOuterTags = function( e )
{
e.insertAdjacentHTML( 'beforeBegin', e.innerHTML ) ;
e.parentNode.removeChild( e ) ;
}
FCKTools.CreateXmlObject = function( object )
{
var aObjs ;
switch ( object )
{
case 'XmlHttp' :
aObjs = [ 'MSXML2.XmlHttp', 'Microsoft.XmlHttp' ] ;
break ;
case 'DOMDocument' :
aObjs = [ 'MSXML2.DOMDocument', 'Microsoft.XmlDom' ] ;
break ;
}
for ( var i = 0 ; i < 2 ; i++ )
{
try { return new ActiveXObject( aObjs[i] ) ; }
catch (e) {}
}
}
====================================================
Index: fcktoolbarset.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fcktoolbarset.js
* Defines the FCKToolbarSet object that is used to load and draw the
* toolbar.
*
* Version: 2.0 RC3
* Modified: 2005-02-09 17:39:32
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
var FCKToolbarSet = FCK.ToolbarSet = new Object() ;
document.getElementById( 'ExpandHandle' ).title = FCKLang.ToolbarExpand
;
document.getElementById( 'CollapseHandle' ).title =
FCKLang.ToolbarCollapse ;
FCKToolbarSet.Toolbars = new Array() ;
// Array of toolbat items that are active only on WYSIWYG mode.
FCKToolbarSet.ItemsWysiwygOnly = new Array() ;
// Array of toolbar items that are sensitive to the cursor position.
FCKToolbarSet.ItemsContextSensitive = new Array() ;
FCKToolbarSet.Expand = function()
{
document.getElementById( 'Collapsed' ).style.display = 'none' ;
document.getElementById( 'Expanded' ).style.display = '' ;
if ( ! FCKBrowserInfo.IsIE )
{
// I had to use "setTimeout" because Gecko was not responding
in a right
// way when calling window.onresize() directly.
window.setTimeout( "window.onresize()", 1 ) ;
}
}
FCKToolbarSet.Collapse = function()
{
document.getElementById( 'Collapsed' ).style.display = '' ;
document.getElementById( 'Expanded' ).style.display = 'none' ;
if ( ! FCKBrowserInfo.IsIE )
{
// I had to use "setTimeout" because Gecko was not responding
in a right
// way when calling window.onresize() directly.
window.setTimeout( "window.onresize()", 1 ) ;
}
}
FCKToolbarSet.Restart = function()
{
if ( !FCKConfig.ToolbarCanCollapse || FCKConfig.ToolbarStartExpanded )
this.Expand() ;
else
this.Collapse() ;
document.getElementById( 'CollapseHandle' ).style.display =
FCKConfig.ToolbarCanCollapse ? '' : 'none' ;
}
FCKToolbarSet.Load = function( toolbarSetName )
{
this.DOMElement = document.getElementById( 'eToolbar' ) ;
var ToolbarSet = FCKConfig.ToolbarSets[toolbarSetName] ;
if (! ToolbarSet)
{
alert( FCKLang.UnknownToolbarSet.replace( /%1/g, toolbarSetName
) ) ;
return ;
}
this.Toolbars = new Array() ;
for ( var x = 0 ; x < ToolbarSet.length ; x++ )
{
var oToolbarItems = ToolbarSet[x] ;
var oToolbar ;
if ( typeof( oToolbarItems ) == 'string' )
{
if ( oToolbarItems == '/' )
oToolbar = new FCKToolbarBreak() ;
}
else
{
var oToolbar = new FCKToolbar() ;
for ( var j = 0 ; j < oToolbarItems.length ; j++ )
{
var sItem = oToolbarItems[j] ;
if ( sItem == '-')
oToolbar.AddSeparator() ;
else
{
var oItem = FCKToolbarItems.GetItem(
sItem ) ;
if ( oItem )
{
oToolbar.AddItem( oItem ) ;
if ( !oItem.SourceView )
this.ItemsWysiwygOnly[this.ItemsWysiwygOnly.length] = oItem ;
if ( oItem.ContextSensitive )
this.ItemsContextSensitive[this.ItemsContextSensitive.length] = oItem ;
}
}
}
oToolbar.AddTerminator() ;
}
this.Toolbars[ this.Toolbars.length ] = oToolbar ;
}
}
FCKToolbarSet.RefreshModeState = function()
{
if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
{
// Enable all buttons that are available on WYSIWYG mode only.
for ( var i = 0 ; i < FCKToolbarSet.ItemsWysiwygOnly.length ;
i++ )
FCKToolbarSet.ItemsWysiwygOnly[i].Enable() ;
// Refresh the buttons state.
FCKToolbarSet.RefreshItemsState() ;
}
else
{
// Refresh the buttons state.
FCKToolbarSet.RefreshItemsState() ;
// Disable all buttons that are available on WYSIWYG mode only.
for ( var i = 0 ; i < FCKToolbarSet.ItemsWysiwygOnly.length ;
i++ )
FCKToolbarSet.ItemsWysiwygOnly[i].Disable() ;
}
}
FCKToolbarSet.RefreshItemsState = function()
{
for ( var i = 0 ; i < FCKToolbarSet.ItemsContextSensitive.length ; i++ )
FCKToolbarSet.ItemsContextSensitive[i].RefreshState() ;
/*
TODO: Delete this commented block on stable version.
for ( var i = 0 ; i < FCKToolbarSet.Toolbars.length ; i++ )
{
var oToolbar = FCKToolbarSet.Toolbars[i] ;
for ( var j = 0 ; j < oToolbar.Items.length ; j++ )
{
oToolbar.Items[j].RefreshState() ;
}
}
*/
}
====================================================
Index: fcktools.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fcktools.js
* Utility functions.
*
* Version: 2.0 RC3
* Modified: 2005-02-19 15:27:16
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
var FCKTools = new Object() ;
//**
// FCKTools.GetLinkedFieldValue: Gets the value of the hidden INPUT element
// that is associated to the editor. This element has its ID set to the
// editor's instance name so the user reffers to the instance name when getting
// the posted data.
FCKTools.GetLinkedFieldValue = function()
{
return FCK.LinkedField.value ;
}
//**
// FCKTools.SetLinkedFieldValue: Sets the value of the hidden INPUT element
// that is associated to the editor. This element has its ID set to the
// editor's instance name so the user reffers to the instance name when getting
// the posted data.
FCKTools.SetLinkedFieldValue = function( value )
{
if ( FCKConfig.FormatOutput )
FCK.LinkedField.value = FCKCodeFormatter.Format( value ) ;
else
FCK.LinkedField.value = value ;
}
//**
// FCKTools.AttachToLinkedFieldFormSubmit: attaches a function call to the
// submit event of the linked field form. This function us generally used to
// update the linked field value before submitting the form.
FCKTools.AttachToLinkedFieldFormSubmit = function( functionPointer )
{
// Gets the linked field form
var oForm = FCK.LinkedField.form ;
// Return now if no form is available
if (!oForm) return ;
// Attaches the functionPointer call to the onsubmit event
if ( FCKBrowserInfo.IsIE )
oForm.attachEvent( "onsubmit", functionPointer ) ;
else
oForm.addEventListener( 'submit', functionPointer, true ) ;
//**
// Attaches the functionPointer call to the submit method
// This is done because IE doesn't fire onsubmit when the submit method
is called
// BEGIN --
// Creates a Array in the form object that will hold all Attached
function call
// (in the case there are more than one editor in the same page)
if (! oForm.updateFCKEditor) oForm.updateFCKEditor = new Array() ;
// Adds the function pointer to the array of functions to call when
"submit" is called
oForm.updateFCKEditor[oForm.updateFCKEditor.length] = functionPointer ;
// Switches the original submit method with a new one that first call
all functions
// on the above array and the call the original submit
// IE sees it oForm.submit function as an 'object'.
if (! oForm.originalSubmit && ( typeof( oForm.submit ) == 'function' ||
( !oForm.submit.tagName && !oForm.submit.length ) ) )
{
// Creates a copy of the original submit
oForm.originalSubmit = oForm.submit ;
// Creates our replacement for the submit
oForm.submit = function()
{
if (this.updateFCKEditor)
{
// Calls all functions in the functions array
for (var i = 0 ; i <
this.updateFCKEditor.length ; i++)
this.updateFCKEditor[i]() ;
}
// Calls the original "submit"
this.originalSubmit() ;
}
}
// END --
}
//**
// FCKTools.AddSelectOption: Adds a option to a SELECT element.
FCKTools.AddSelectOption = function( targetDocument, selectElement, optionText,
optionValue )
{
var oOption = targetDocument.createElement("OPTION") ;
oOption.text = optionText ;
oOption.value = optionValue ;
selectElement.options.add(oOption) ;
return oOption ;
}
FCKTools.RemoveAllSelectOptions = function( selectElement )
{
for ( var i = selectElement.options.length - 1 ; i >= 0 ; i-- )
{
selectElement.options.remove(i) ;
}
}
FCKTools.SelectNoCase = function( selectElement, value, defaultValue )
{
var sNoCaseValue = value.toString().toLowerCase() ;
for ( var i = 0 ; i < selectElement.options.length ; i++ )
{
if ( sNoCaseValue ==
selectElement.options[i].value.toLowerCase() )
{
selectElement.selectedIndex = i ;
return ;
}
}
if ( defaultValue != null ) FCKTools.SelectNoCase( selectElement,
defaultValue ) ;
}
FCKTools.HTMLEncode = function( text )
{
text = text.replace( /&/g, "&" ) ;
text = text.replace( /"/g, """ ) ;
text = text.replace( /</g, "<" ) ;
text = text.replace( />/g, ">" ) ;
text = text.replace( /'/g, "'" ) ;
return text ;
}
//**
// FCKTools.GetResultingArray: Gets a array from a string (where the elements
// are separated by a character), a fuction (that returns a array) or a array.
FCKTools.GetResultingArray = function( arraySource, separator )
{
switch ( typeof( arraySource ) )
{
case "string" :
return arraySource.split( separator ) ;
case "function" :
return separator() ;
default :
if ( isArray( arraySource ) ) return arraySource ;
else return new Array() ;
}
}
FCKTools.GetElementPosition = function( el )
{
// Initializes the Coordinates object that will be returned by the
function.
var c = { X:0, Y:0 } ;
// Loop throw the offset chain.
while ( el )
{
c.X += el.offsetLeft ;
c.Y += el.offsetTop ;
el = el.offsetParent ;
}
// Return the Coordinates object
return c ;
}
FCKTools.GetElementAscensor = function( element, ascensorTagName )
{
var e = element.parentNode ;
while ( e )
{
if ( e.nodeName == ascensorTagName )
return e ;
e = e.parentNode ;
}
}
FCKTools.Pause = function( miliseconds )
{
var oStart = new Date() ;
while (true)
{
var oNow = new Date() ;
if ( miliseconds < oNow - oStart )
return ;
}
}
====================================================
Index: fcktools_gecko.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fcktools_gecko.js
* Utility functions. (Gecko version).
*
* Version: 2.0 RC3
* Modified: 2005-02-23 00:00:57
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
// Appends a CSS file to a document.
FCKTools.AppendStyleSheet = function( documentElement, cssFileUrl )
{
var e = documentElement.createElement( 'LINK' ) ;
e.rel = 'stylesheet' ;
e.type = 'text/css' ;
e.href = cssFileUrl ;
documentElement.getElementsByTagName("HEAD")[0].appendChild( e ) ;
}
// Removes all attributes and values from the element.
FCKTools.ClearElementAttributes = function( element )
{
// Loop throw all attributes in the element
for ( var i = 0 ; i < element.attributes.length ; i++ )
{
// Remove the element by name.
element.removeAttribute( element.attributes[i].name, 0 ) ;
// 0 : Case Insensitive
}
}
// Returns an Array of strings with all defined in the elements inside another
element.
FCKTools.GetAllChildrenIds = function( parentElement )
{
// Create the array that will hold all Ids.
var aIds = new Array() ;
// Define a recursive function that search for the Ids.
var fGetIds = function( parent )
{
for ( var i = 0 ; i < parent.childNodes.length ; i++ )
{
var sId = parent.childNodes[i].id ;
// Check if the Id is defined for the element.
if ( sId && sId.length > 0 ) aIds[ aIds.length ] = sId ;
// Recursive call.
fGetIds( parent.childNodes[i] ) ;
}
}
// Start the recursive calls.
fGetIds( parentElement ) ;
return aIds ;
}
FCKTools.RemoveOuterTags = function( e )
{
var oFragment = e.ownerDocument.createDocumentFragment() ;
for ( var i = 0 ; i < e.childNodes.length ; i++ )
oFragment.appendChild( e.childNodes[i] ) ;
e.parentNode.replaceChild( oFragment, e ) ;
}
FCKTools.CreateXmlObject = function( object )
{
switch ( object )
{
case 'XmlHttp' :
return new XMLHttpRequest() ;
case 'DOMDocument' :
return document.implementation.createDocument( '', '',
null ) ;
}
}
====================================================
Index: fckdialog_gecko.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fckdialog_gecko.js
* Dialog windows operations. (Gecko specific implementations)
*
* Version: 2.0 RC3
* Modified: 2004-12-28 00:42:29
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
FCKDialog.Show = function( dialogInfo, dialogName, pageUrl, dialogWidth,
dialogHeight, parentWindow )
{
var iTop = (screen.height - dialogHeight) / 2 ;
var iLeft = (screen.width - dialogWidth) / 2 ;
var sOption =
"location=no,menubar=no,resizable=no,toolbar=no,dependent=yes,dialog=yes,minimizable=no,modal=yes,alwaysRaised=yes"
+
",width=" + dialogWidth +
",height=" + dialogHeight +
",top=" + iTop +
",left=" + iLeft ;
if ( !parentWindow )
parentWindow = window ;
var oWindow = parentWindow.open( '', 'FCKEditorDialog_' + dialogName,
sOption, true ) ;
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 ;
if ( FCKDialog.Window && !FCKDialog.Window.closed )
{
FCKDialog.Window.focus() ;
return false ;
}
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)
{}
}
}
====================================================
Index: fckdialog.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fckdialog.js
* Dialog windows operations.
*
* Version: 2.0 RC3
* Modified: 2004-12-19 23:28:55
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
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 )
{
// 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 )
;
}
====================================================
Index: fck_1_ie.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* 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)
*
* Version: 2.0 RC3
* Modified: 2005-03-02 08:58:17
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
FCK.Description = "FCKeditor for Internet Explorer 5.5+" ;
// The behaviors should be pointed using the FullBasePath to avoid security
// errors when using a differente BaseHref.
FCK._BehaviorsStyle =
'<style type="text/css" _fcktemp="true"> \
TABLE { behavior: url(' + FCKConfig.FullBasePath +
'css/behaviors/showtableborders.htc) ; } \
A { behavior: url(' + FCKConfig.FullBasePath +
'css/behaviors/anchors.htc) ; } \
INPUT { behavior: url(' + FCKConfig.FullBasePath +
'css/behaviors/hiddenfield.htc) ; } \
</style>' ;
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.onmousedown = this.EditorDocument.onmouseup =
function()
{
FCK.Focus() ;
FCK.EditorWindow.event.cancelBubble = true ;
FCK.EditorWindow.event.returnValue = false ;
}
// Intercept pasting operations
this.EditorDocument.body.onpaste = function()
{
if ( FCK.Status == FCK_STATUS_COMPLETE )
return FCK.Events.FireEvent( "OnPaste" ) ;
else
return false ;
}
// Disable Right-Click and shows the context menu.
this.EditorDocument.oncontextmenu = function()
{
var e = this.parentWindow.event ;
FCK.ShowContextMenu( e.screenX, e.screenY ) ;
return false ;
}
// Check if key strokes must be monitored.
if ( FCKConfig.UseBROnCarriageReturn || FCKConfig.TabSpaces > 0 )
{
// Build the "TAB" key replacement.
if ( FCKConfig.TabSpaces > 0 )
{
window.FCKTabHTML = '' ;
for ( i = 0 ; i < FCKConfig.TabSpaces ; i++ )
window.FCKTabHTML += " " ;
}
this.EditorDocument.onkeydown = function()
{
var e = FCK.EditorWindow.event ;
if ( e.keyCode == 13 && FCKConfig.UseBROnCarriageReturn
) // ENTER
{
if ( (e.ctrlKey || e.altKey || e.shiftKey) )
return true ;
else
{
// 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 ;
}
}
else if ( e.keyCode == 9 && FCKConfig.TabSpaces > 0 &&
!(e.ctrlKey || e.altKey || e.shiftKey) ) // TAB
{
FCK.InsertHtml( window.FCKTabHTML ) ;
return false ;
}
return true ;
}
}
this.EditorDocument.ondblclick = function()
{
FCK.OnDoubleClick( FCK.EditorWindow.event.srcElement ) ;
FCK.EditorWindow.event.cancelBubble = true ;
}
// Catch cursor movements
this.EditorDocument.onselectionchange = function()
{
FCK.Events.FireEvent( "OnSelectionChange" ) ;
}
//Enable editing
// this.EditorDocument.body.contentEditable = true ;
}
FCK.Focus = function()
{
try
{
if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
FCK.EditorDocument.body.focus() ;
else
document.getElementById('eSourceField').focus() ;
}
catch(e) {}
}
FCK.SetHTML = function( html, forceWYSIWYG )
{
if ( forceWYSIWYG || FCK.EditMode == FCK_EDITMODE_WYSIWYG )
{
// TODO: Wait stable version and remove the following commented
lines.
// In IE, if you do document.body.innerHTML = '<p><hr></p>' it
throws a "Unknow runtime error".
// To solve it we must add a fake (safe) tag before it, and
then remove it.
// this.EditorDocument.body.innerHTML = '<div
id="__fakeFCKRemove__"> </div>' + html.replace( FCKRegexLib.AposEntity,
''' ) ;
//
this.EditorDocument.getElementById('__fakeFCKRemove__').removeNode(true) ;
this.EditorDocument.open() ;
if ( FCKConfig.FullPage )
{
var sExtraHtml =
FCK._BehaviorsStyle +
'<link href="' + FCKConfig.FullBasePath +
'css/fck_internal.css' + '" rel="stylesheet" type="text/css" _fcktemp="true"
/>' ;
if ( FCK.TempBaseTag.length > 0 &&
!FCKRegexLib.HasBaseTag.test( html ) )
sExtraHtml += FCK.TempBaseTag ;
html = html.replace( FCKRegexLib.HeadCloser, sExtraHtml
+ '</head>' ) ;
this.EditorDocument.write( html ) ;
}
else
{
var sHtml =
'<html dir="' + FCKConfig.ContentLangDirection
+ '">' +
'<head><title></title>' +
'<link href="' + FCKConfig.EditorAreaCSS + '"
rel="stylesheet" type="text/css" />' +
'<link href="' + FCKConfig.FullBasePath +
'css/fck_internal.css' + '" rel="stylesheet" type="text/css" _fcktemp="true"
/>' ;
sHtml += FCK._BehaviorsStyle ;
sHtml += FCK.TempBaseTag ;
sHtml += '</head><body>' + html + '</body></html>' ;
this.EditorDocument.write( sHtml ) ;
}
this.EditorDocument.close() ;
this.InitializeBehaviors() ;
this.EditorDocument.body.contentEditable = true ;
this.Events.FireEvent( 'OnAfterSetHTML' ) ;
// TODO: Wait stable version and remove the following commented
lines.
// this.EditorDocument.body.innerHTML = '' ;
// if ( html && html.length > 0 )
// this.EditorDocument.write( html ) ;
// this.EditorDocument.dir = FCKConfig.ContentLangDirection ;
}
else
document.getElementById('eSourceField').value = html ;
}
// TODO: Wait stable version and remove the following commented lines.
/*
FCK.CheckRelativeLinks = function()
{
// IE automatically change relative URLs to absolute, so we use a trick
// to solve this problem (the document base points to "fckeditor:".
for ( var i = 0 ; i < this.EditorDocument.links.length ; i++ )
{
var e = this.EditorDocument.links[i] ;
if ( e.href.startsWith( FCK.BaseUrl ) )
e.href = e.href.remove( 0, FCK.BaseUrl.length ) ;
}
for ( var i = 0 ; i < this.EditorDocument.images.length ; i++ )
{
var e = this.EditorDocument.images[i] ;
if ( e.src.startsWith( FCK.BaseUrl ) )
e.src = e.src.remove( 0, FCK.BaseUrl.length ) ;
}
}
*/
FCK.InsertHtml = function( html )
{
FCK.Focus() ;
// Gets the actual selection.
var oSel = FCK.EditorDocument.selection ;
// Deletes the actual selection contents.
if ( oSel.type.toLowerCase() != "none" )
oSel.clear() ;
// Inset the HTML.
oSel.createRange().pasteHTML( html ) ;
}
====================================================
Index: fck_2.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* 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.
*
* Version: 2.0 RC3
* Modified: 2005-03-02 10:44:27
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
// 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 )
{
if ( FCK.RedirectNamedCommands[ commandName ] != null )
FCK.ExecuteRedirectedNamedCommand( commandName,
commandParameter ) ;
else
{
FCK.Focus() ;
FCK.EditorDocument.execCommand( commandName, false,
commandParameter ) ;
FCK.Events.FireEvent( 'OnSelectionChange' ) ;
}
}
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.CleanAndPaste = function( html )
{
// Remove all SPAN tags
html = html.replace(/<\/?SPAN[^>]*>/gi, "" );
// Remove Class attributes
html = html.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3") ;
// Remove Style attributes
html = html.replace(/<(\w[^>]*) style="([^"]*)"([^>]*)/gi, "<$1$3") ;
// Remove Lang attributes
html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ;
// Remove XML elements and declarations
html = html.replace(/<\\?\?xml[^>]*>/gi, "") ;
// Remove Tags with XML namespace declarations: <o:p></o:p>
html = html.replace(/<\/?\w+:[^>]*>/gi, "") ;
// Replace the
html = html.replace(/ /, " " );
// Transform <P> to <DIV>
var re = new RegExp("(<P)([^>]*>.*?)(<\/P>)","gi") ; // Different
because of a IE 5.0 error
html = html.replace( re, "<div$2</div>" ) ;
FCK.InsertHtml( html ) ;
}
FCK.Preview = function()
{
var oWindow = window.open( '', null,
'toolbar=yes,location=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes'
) ;
var sHTML = '<html><head><link href="' + FCKConfig.EditorAreaCSS + '"
rel="stylesheet" type="text/css" /></head><body>' + FCK.GetHTML() +
'</body></html>' ;
oWindow.document.write( sHTML );
oWindow.document.close();
// TODO: The CSS of the editor area must be configurable.
// oWindow.document.createStyleSheet( config.EditorAreaCSS );
}
FCK.SwitchEditMode = function()
{
// Check if the actual mode is WYSIWYG.
var bWYSIWYG = ( FCK.EditMode == FCK_EDITMODE_WYSIWYG ) ;
// Display/Hide the TRs.
document.getElementById('eWysiwyg').style.display = bWYSIWYG ?
'none' : '' ;
document.getElementById('eSource').style.display = bWYSIWYG ? ''
: 'none' ;
// Update the HTML in the view output to show.
if ( bWYSIWYG )
document.getElementById('eSourceField').value = (
FCKConfig.EnableXHTML && FCKConfig.EnableSourceXHTML ? FCK.GetXHTML(
FCKConfig.FormatSource ) : FCK.GetHTML( FCKConfig.FormatSource ) ) ;
else
FCK.SetHTML( FCK.GetHTML(), true ) ;
// Updates the actual mode status.
FCK.EditMode = bWYSIWYG ? FCK_EDITMODE_SOURCE : FCK_EDITMODE_WYSIWYG ;
// Update the toolbar.
FCKToolbarSet.RefreshModeState() ;
// Set the Focus.
FCK.Focus() ;
}
FCK.CreateElement = function( tag )
{
var e = FCK.EditorDocument.createElement( tag ) ;
return FCK.InsertElementAndGetIt( e ) ;
}
FCK.InsertElementAndGetIt = function( e )
{
e.setAttribute( '__FCKTempLabel', 1 ) ;
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] ;
}
}
}
====================================================
Index: fck_2_gecko.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* 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)
*
* Version: 2.0 RC3
* Modified: 2004-12-20 14:04:19
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
// GetNamedCommandState overload for Gecko.
FCK._BaseGetNamedCommandState = FCK.GetNamedCommandState ;
FCK.GetNamedCommandState = function( commandName )
{
switch ( commandName )
{
case 'Unlink' :
return FCKSelection.HasAncestorNode('A') ?
FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
default :
return FCK._BaseGetNamedCommandState( commandName ) ;
}
}
// Named commands to be handled by this browsers specific implementation.
FCK.RedirectNamedCommands =
{
Print : true,
Paste : true,
Cut : true,
Copy : true
}
// ExecuteNamedCommand overload for Gecko.
FCK.ExecuteRedirectedNamedCommand = function( commandName, commandParameter )
{
switch ( commandName )
{
case 'Print' :
FCK.EditorWindow.print() ;
break ;
case 'Paste' :
try { if ( FCK.Paste() )
FCK._BaseExecuteNamedCommand( 'Paste' ) ; }
catch (e) { alert( FCKLang.PasteErrorPaste ) ; }
break ;
case 'Cut' :
try { FCK._BaseExecuteNamedCommand(
'Cut' ) ; }
catch (e) { alert( FCKLang.PasteErrorCut ) ; }
break ;
case 'Copy' :
try { FCK._BaseExecuteNamedCommand(
'Copy' ) ; }
catch (e) { alert( FCKLang.PasteErrorCopy ) ; }
break ;
default :
FCK.ExecuteNamedCommand( commandName, commandParameter
) ;
}
}
FCK.AttachToOnSelectionChange = function( functionPointer )
{
this.Events.AttachEvent( 'OnSelectionChange', functionPointer ) ;
}
FCK.Paste = function()
{
if ( FCKConfig.ForcePasteAsPlainText )
{
FCK.PasteAsPlainText() ;
return false ;
}
else if ( FCKConfig.AutoDetectPasteFromWord &&
FCKBrowserInfo.IsIE55OrMore )
{
var sHTML = FCK.GetClipboardHTML() ;
var re = /<\w[^>]* class="?MsoNormal"?/gi ;
if ( re.test( sHTML ) )
{
if ( confirm( FCKLang["PasteWordConfirm"] ) )
{
FCK.CleanAndPaste( sHTML ) ;
return false ;
}
}
}
else
return true ;
}
//**
// FCK.InsertHtml: Inserts HTML at the current cursor location. Deletes the
// selected content if any.
FCK.InsertHtml = function( html )
{
// Delete the actual selection.
var oSel = FCKSelection.Delete() ;
// var oContainer = oSel.getRangeAt(0).startContainer ;
// var iOffSet = oSel.getRangeAt(0).startOffset ;
// Get the first available range.
var oRange = oSel.getRangeAt(0) ;
// var oRange = this.EditorDocument.createRange() ;
// oRange.setStart( oContainer, iOffSet ) ;
// oRange.setEnd( oContainer, iOffSet ) ;
// 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.
oRange.setEndAfter( oLastNode ) ;
oRange.setStartAfter( oLastNode ) ;
oSel.removeAllRanges() ;
oSel = FCK.EditorWindow.getSelection() ;
oSel.addRange( oRange ) ;
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.
oRange.setEndAfter( element ) ;
oRange.setStartAfter( element ) ;
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("//address@hidden'" + sTempUrl +
"']", this.EditorDocument.body, null, 9, null).singleNodeValue ;
if ( oLink )
{
oLink.href = url ;
return oLink ;
}
}
}
====================================================
Index: fck_2_ie.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* 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)
*
* Version: 2.0 RC3
* Modified: 2005-01-11 15:45:01
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
/*
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 &&
FCKBrowserInfo.IsIE55OrMore )
{
var sHTML = FCK.GetClipboardHTML() ;
var re = /<\w[^>]* class="?MsoNormal"?/gi ;
if ( re.test( sHTML ) )
{
if ( confirm( FCKLang["PasteWordConfirm"] ) )
{
FCK.CleanAndPaste( sHTML ) ;
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] ;
}
}
}
}
====================================================
Index: fck_1_gecko.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* 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)
*
* Version: 2.0 RC3
* Modified: 2005-02-23 18:27:28
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
FCK.Description = "FCKeditor for Gecko Browsers" ;
FCK.InitializeBehaviors = function()
{
// Disable Right-Click
var oOnContextMenu = function( e )
{
e.preventDefault() ;
FCK.ShowContextMenu( e.clientX, e.clientY ) ;
}
this.EditorDocument.addEventListener( 'contextmenu', oOnContextMenu,
true ) ;
var oOnKeyDown = function( e )
{
if ( e.ctrlKey && !e.shiftKey && !e.altKey )
{
// Char 86/118 = V/v
if ( e.which == 86 || e.which == 118 )
{
if ( FCK.Status == FCK_STATUS_COMPLETE )
{
if ( !FCK.Events.FireEvent( "OnPaste" )
)
e.preventDefault() ;
}
else
e.preventDefault() ;
}
}
}
this.EditorDocument.addEventListener( 'keydown', 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 ) ;
this._OnLoad = function()
{
if ( this._FCK_HTML )
{
this.document.body.innerHTML = this._FCK_HTML ;
this._FCK_HTML = null ;
}
}
this.EditorWindow.addEventListener( 'load', this._OnLoad, true ) ;
}
FCK.MakeEditable = function()
{
this.EditorWindow.document.designMode = 'on' ;
// Tell Gecko to use or not the <SPAN> tag for the bold, italic and
underline.
this.EditorWindow.document.execCommand( 'useCSS', false,
!FCKConfig.GeckoUseSPAN ) ;
}
FCK.Focus = function()
{
try
{
FCK.EditorWindow.focus() ;
}
catch(e) {}
}
FCK.SetHTML = function( html, forceWYSIWYG )
{
if ( forceWYSIWYG || FCK.EditMode == FCK_EDITMODE_WYSIWYG )
{
// Gecko has a lot of bugs mainly when handling editing
features.
// To avoid an Aplication Exception (that closes the browser!)
we
// must first write the <HTML> contents with an empty body, and
// then insert the body contents.
// (Oh yes... it took me a lot of time to find out this
workaround)
this.EditorDocument.open() ;
if ( FCKConfig.FullPage && FCKRegexLib.BodyContents.test( html
) )
{
// Add the <BASE> tag to the input HTML.
if ( FCK.TempBaseTag.length > 0 &&
!FCKRegexLib.HasBaseTag.test( html ) )
html = html.replace( FCKRegexLib.HeadCloser,
FCK.TempBaseTag + '</head>' ) ;
html = html.replace( FCKRegexLib.HeadCloser, '<link
href="' + FCKConfig.BasePath + 'css/fck_internal.css' + '" rel="stylesheet"
type="text/css" _fcktemp="true" /></head>' ) ;
// Extract the BODY contents from the html.
var oMatch = html.match(
FCKRegexLib.BodyContents ) ;
var sOpener = oMatch[1] ; // This is the
HTML until the <body...> tag, inclusive.
var sContents = oMatch[2] ; // This is the BODY tag
contents.
var sCloser = oMatch[3] ; // This is the
HTML from the </body> tag, inclusive.
this.EditorDocument.write( sOpener + ' ' + sCloser
) ;
}
else
{
var sHtml =
'<html dir="' + FCKConfig.ContentLangDirection
+ '">' +
'<head><title></title>' +
'<link href="' + FCKConfig.EditorAreaCSS + '"
rel="stylesheet" type="text/css" />' +
'<link href="' + FCKConfig.BasePath +
'css/fck_internal.css' + '" rel="stylesheet" type="text/css" _fcktemp="true"
/>' ;
sHtml += FCK.TempBaseTag ;
sHtml += '</head><body> </body></html>' ;
this.EditorDocument.write( sHtml ) ;
}
this.EditorDocument.close() ;
if ( this.EditorDocument.body )
this.EditorDocument.body.innerHTML = sContents ?
sContents : html ;
else
this.EditorWindow._FCK_HTML = sContents ? sContents :
html ;
// TODO: Wait stable version and remove the following commented
lines.
// We must load the CSS style after setting the innerHTML to
avoid an error.
// The body is not available is the style link tag is written
inside the <html> tag.
// if ( !FCKConfig.FullPage )
// {
// FCKTools.AppendStyleSheet( this.EditorDocument,
FCKConfig.EditorAreaCSS ) ;
// FCKTools.AppendStyleSheet( this.EditorDocument,
FCKConfig.BasePath + 'css/fck_internal.css' ) ;
// }
this.InitializeBehaviors() ;
this.Events.FireEvent( 'OnAfterSetHTML' ) ;
}
else
document.getElementById('eSourceField').value = html ;
}
====================================================
Index: fck_1.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* 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.
*
* Version: 2.0 RC3
* Modified: 2005-02-27 21:46:32
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
FCK.Events = new FCKEvents( FCK ) ;
FCK.Toolbar = null ;
FCK.TempBaseTag = FCKConfig.BaseHref.length > 0 ? '<base href="' +
FCKConfig.BaseHref + '" _fcktemp="true"></base>' : '' ;
FCK.StartEditor = function()
{
// Get the editor's window and document (DOM)
this.EditorWindow = window.frames[ 'eEditorArea' ] ;
this.EditorDocument = this.EditorWindow.document ;
// TODO: Wait stable version and remove the following commented lines.
// The Base Path of the editor is saved to rebuild relative URL (IE
issue).
// this.BaseUrl = this.EditorDocument.location.protocol + '//' +
this.EditorDocument.location.host ;
if ( FCKBrowserInfo.IsGecko )
this.MakeEditable() ;
// Set the editor's startup contents
this.SetHTML( FCKTools.GetLinkedFieldValue() ) ;
// Attach the editor to the form onsubmit event
FCKTools.AttachToLinkedFieldFormSubmit( this.UpdateLinkedField ) ;
this.SetStatus( FCK_STATUS_ACTIVE ) ;
}
FCK.SetStatus = function( newStatus )
{
this.Status = newStatus ;
if ( newStatus == FCK_STATUS_ACTIVE )
{
// Force the focus in the window to go to the editor.
window.onfocus = window.document.body.onfocus = FCK.Focus ;
// Force the focus in the editor.
if ( FCKConfig.StartupFocus )
FCK.Focus() ;
// @Packager.Compactor.Remove.Start
var sBrowserSuffix = FCKBrowserInfo.IsIE ? "ie" : "gecko" ;
FCKScriptLoader.AddScript( '_source/internals/fck_2.js' ) ;
FCKScriptLoader.AddScript( '_source/internals/fck_2_' +
sBrowserSuffix + '.js' ) ;
FCKScriptLoader.AddScript( '_source/internals/fckselection.js'
) ;
FCKScriptLoader.AddScript( '_source/internals/fckselection_' +
sBrowserSuffix + '.js' ) ;
FCKScriptLoader.AddScript( '_source/classes/fckpanel_' +
sBrowserSuffix + '.js' ) ;
FCKScriptLoader.AddScript(
'_source/internals/fcktablehandler.js' ) ;
FCKScriptLoader.AddScript( '_source/internals/fcktablehandler_'
+ sBrowserSuffix + '.js' ) ;
FCKScriptLoader.AddScript( '_source/classes/fckxml_' +
sBrowserSuffix + '.js' ) ;
FCKScriptLoader.AddScript( '_source/classes/fckstyledef.js' ) ;
FCKScriptLoader.AddScript( '_source/classes/fckstyledef_' +
sBrowserSuffix + '.js' ) ;
FCKScriptLoader.AddScript( '_source/classes/fckstylesloader.js'
) ;
FCKScriptLoader.AddScript(
'_source/commandclasses/fcknamedcommand.js' ) ;
FCKScriptLoader.AddScript(
'_source/commandclasses/fck_othercommands.js' ) ;
FCKScriptLoader.AddScript(
'_source/commandclasses/fckspellcheckcommand_' + sBrowserSuffix + '.js' ) ;
FCKScriptLoader.AddScript(
'_source/commandclasses/fcktextcolorcommand.js' ) ;
FCKScriptLoader.AddScript(
'_source/commandclasses/fckpasteplaintextcommand.js' ) ;
FCKScriptLoader.AddScript(
'_source/commandclasses/fckpastewordcommand.js' ) ;
FCKScriptLoader.AddScript(
'_source/commandclasses/fcktablecommand.js' ) ;
FCKScriptLoader.AddScript(
'_source/commandclasses/fckstylecommand.js' ) ;
FCKScriptLoader.AddScript( '_source/internals/fckcommands.js' )
;
FCKScriptLoader.AddScript(
'_source/classes/fcktoolbarbutton.js' ) ;
FCKScriptLoader.AddScript( '_source/classes/fcktoolbarcombo.js'
) ;
FCKScriptLoader.AddScript( '_source/classes/fckspecialcombo.js'
) ;
FCKScriptLoader.AddScript(
'_source/classes/fcktoolbarspecialcombo.js' ) ;
FCKScriptLoader.AddScript(
'_source/classes/fcktoolbarfontscombo.js' ) ;
FCKScriptLoader.AddScript(
'_source/classes/fcktoolbarfontsizecombo.js' ) ;
FCKScriptLoader.AddScript(
'_source/classes/fcktoolbarfontformatcombo.js' ) ;
FCKScriptLoader.AddScript(
'_source/classes/fcktoolbarstylecombo.js' ) ;
FCKScriptLoader.AddScript(
'_source/classes/fcktoolbarpanelbutton.js' ) ;
FCKScriptLoader.AddScript(
'_source/internals/fcktoolbaritems.js' ) ;
FCKScriptLoader.AddScript( '_source/classes/fcktoolbar.js' ) ;
FCKScriptLoader.AddScript( '_source/classes/fcktoolbarbreak_' +
sBrowserSuffix + '.js' ) ;
FCKScriptLoader.AddScript( '_source/internals/fcktoolbarset.js'
) ;
FCKScriptLoader.AddScript( '_source/internals/fckdialog.js' ) ;
FCKScriptLoader.AddScript( '_source/internals/fckdialog_' +
sBrowserSuffix + '.js' ) ;
FCKScriptLoader.AddScript(
'_source/classes/fckcontextmenuitem.js' ) ;
FCKScriptLoader.AddScript(
'_source/classes/fckcontextmenuseparator.js' ) ;
FCKScriptLoader.AddScript(
'_source/classes/fckcontextmenugroup.js' ) ;
FCKScriptLoader.AddScript(
'_source/internals/fckcontextmenu.js' ) ;
FCKScriptLoader.AddScript( '_source/internals/fckcontextmenu_'
+ sBrowserSuffix + '.js' ) ;
FCKScriptLoader.AddScript( '_source/classes/fckplugin.js' ) ;
FCKScriptLoader.AddScript( '_source/internals/fckplugins.js' ) ;
FCKScriptLoader.AddScript( '_source/internals/fck_last.js' ) ;
// @Packager.Compactor.Remove.End
/* @Packager.Compactor.RemoveLine
if ( FCKBrowserInfo.IsIE )
FCKScriptLoader.AddScript( 'js/fckeditorcode_ie_2.js' )
;
else
FCKScriptLoader.AddScript(
'js/fckeditorcode_gecko_2.js' ) ;
@Packager.Compactor.RemoveLine */
}
this.Events.FireEvent( 'OnStatusChange', newStatus ) ;
if ( this.OnStatusChange ) this.OnStatusChange( newStatus ) ;
}
FCK.GetHTML = function( format )
{
var sHTML ;
if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )
{
// TODO: Wait stable version and remove the following commented
lines.
// if ( FCKBrowserInfo.IsIE )
// FCK.CheckRelativeLinks() ;
if ( FCKBrowserInfo.IsIE )
sHTML = this.EditorDocument.body.innerHTML.replace(
FCKRegexLib.ToReplace, '$1' ) ;
else
sHTML = this.EditorDocument.body.innerHTML ;
}
else
sHTML = document.getElementById('eSourceField').value ;
if ( format )
return FCKCodeFormatter.Format( sHTML ) ;
else
return sHTML ;
}
FCK.GetXHTML = function( format )
{
var bSource = ( FCK.EditMode == FCK_EDITMODE_SOURCE ) ;
if ( bSource )
this.SwitchEditMode() ;
// TODO: Wait stable version and remove the following commented lines.
// if ( FCKBrowserInfo.IsIE )
// FCK.CheckRelativeLinks() ;
if ( FCKConfig.FullPage )
var sXHTML = FCKXHtml.GetXHTML(
this.EditorDocument.getElementsByTagName( 'html' )[0], true, format ) ;
else
var sXHTML = FCKXHtml.GetXHTML( this.EditorDocument.body,
false, format ) ;
if ( bSource )
this.SwitchEditMode() ;
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 sXHTML ;
}
FCK.UpdateLinkedField = function()
{
if ( FCKConfig.EnableXHTML )
FCKTools.SetLinkedFieldValue( FCK.GetXHTML(
FCKConfig.FormatOutput ) ) ;
else
FCKTools.SetLinkedFieldValue( FCK.GetHTML(
FCKConfig.FormatOutput ) ) ;
}
FCK.ShowContextMenu = function( x, y )
{
if ( this.Status != FCK_STATUS_COMPLETE )
return ;
FCKContextMenu.Show( x, y ) ;
this.Events.FireEvent( "OnContextMenu" ) ;
}
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 ;
}
====================================================
Index: fck.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fck.js
* Creation and initialization of the "FCK" object. This is the main object
* that represents an editor instance.
*
* Version: 2.0 RC3
* Modified: 2005-02-23 20:51:12
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
// 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.PasteEnabled = false ;
// First try to get the Linked field using its ID.
FCK.LinkedField = window.parent.document.getElementById( FCK.Name ) ;
// If no linked field is available with that ID, try with the "Name".
if ( !FCK.LinkedField )
FCK.LinkedField = window.parent.document.getElementsByName( FCK.Name
)[0] ;
====================================================
Index: fck_last.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fck_last.js
* These are the last script lines executed in the editor loading process.
*
* Version: 2.0 RC3
* Modified: 2005-01-19 17:36:02
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
// This is the last file loaded to complete the editor initialization and
activation
// Just check if the document direction has been correctly applied (at
fck_onload.js).
if ( FCKLang && window.document.dir.toLowerCase() != FCKLang.Dir.toLowerCase() )
window.document.dir = FCKLang.Dir ;
// Activate pasting operations.
if ( FCKConfig.ForcePasteAsPlainText )
FCK.Events.AttachEvent( "OnPaste", FCK.Paste ) ;
// Load Plugins.
if ( FCKPlugins.ItemsCount > 0 )
{
FCKScriptLoader.OnEmpty = CompleteLoading ;
FCKPlugins.Load() ;
}
else
CompleteLoading() ;
function CompleteLoading()
{
// Load the Toolbar
FCKToolbarSet.Name = FCKURLParams['Toolbar'] || 'Default' ;
FCKToolbarSet.Load( FCKToolbarSet.Name ) ;
FCKToolbarSet.Restart() ;
FCK.AttachToOnSelectionChange( FCKToolbarSet.RefreshItemsState ) ;
//FCK.AttachToOnSelectionChange( FCKSelection._Reset ) ;
FCK.SetStatus( FCK_STATUS_COMPLETE ) ;
// Call the special "FCKeditor_OnComplete" function that should be
present in
// the HTML page where the editor is located.
if ( typeof( window.parent.FCKeditor_OnComplete ) == 'function' )
window.parent.FCKeditor_OnComplete( FCK ) ;
}
====================================================
Index: fck_onload.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fck_onload.js
* This is the script that is called when the editor page is loaded inside
* its IFRAME. It's the editor startup.
*
* Version: 2.0 RC3
* Modified: 2005-02-19 13:00:42
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
// Disable the context menu in the editor (areas outside the editor area).
window.document.oncontextmenu = function( e )
{
if ( e )
e.preventDefault() ; // This is the Gecko way to do that.
return false ; // This is the IE way to do
that.
}
// Gecko browsers doens't calculate well that IFRAME size so we must
// recalculate it every time the window size changes.
if ( ! FCKBrowserInfo.IsIE )
{
window.onresize = function()
{
var oFrame = document.getElementById('eEditorArea') ;
oFrame.height = 0 ;
var oCell = document.getElementById( FCK.EditMode ==
FCK_EDITMODE_WYSIWYG ? 'eWysiwygCell' : 'eSource' ) ;
var iHeight = oCell.offsetHeight ;
oFrame.height = iHeight - 2 ;
}
}
// Start the editor as soon as the window is loaded.
window.onload = function()
{
// There is a bug on Netscape when rendering the frame. It goes over the
// right border. So we must correct it.
if ( FCKBrowserInfo.IsNetscape )
document.getElementById('eWysiwygCell').style.paddingRight =
'2px' ;
FCKScriptLoader.OnEmpty = function()
{
FCKScriptLoader.OnEmpty = null ;
// Override the configurations passed throw the hidden field.
FCKConfig.LoadHiddenField() ;
// Load the custom configurations file (if defined).
if ( FCKConfig.CustomConfigurationsPath.length > 0 )
FCKScriptLoader.AddScript(
FCKConfig.CustomConfigurationsPath ) ;
// Load the styles for the configured skin.
LoadStyles() ;
}
// First of all load the configuration file.
FCKScriptLoader.AddScript( '../fckconfig.js' ) ;
}
function LoadStyles()
{
FCKScriptLoader.OnEmpty = LoadScripts ;
// Load the active skin CSS.
FCKScriptLoader.AddScript( FCKConfig.SkinPath + 'fck_editor.css' ) ;
FCKScriptLoader.AddScript( FCKConfig.SkinPath + 'fck_contextmenu.css' )
;
}
function LoadScripts()
{
FCKScriptLoader.OnEmpty = null ;
// @Packager.Compactor.Remove.Start
var sSuffix = FCKBrowserInfo.IsIE ? 'ie' : 'gecko' ;
with ( FCKScriptLoader )
{
AddScript( '_source/internals/fckdebug.js' ) ;
AddScript( '_source/internals/fcktools.js' ) ;
AddScript( '_source/internals/fcktools_' + sSuffix + '.js' ) ;
AddScript( '_source/internals/fckregexlib.js' ) ;
AddScript( '_source/internals/fcklanguagemanager.js' ) ;
AddScript( '_source/classes/fckevents.js' ) ;
AddScript( '_source/internals/fckxhtmlentities.js' ) ;
AddScript( '_source/internals/fckxhtml.js' ) ;
AddScript( '_source/internals/fckxhtml_' + sSuffix + '.js' ) ;
AddScript( '_source/internals/fckcodeformatter.js' ) ;
AddScript( '_source/internals/fck_1.js' ) ;
AddScript( '_source/internals/fck_1_' + sSuffix + '.js' ) ;
}
// @Packager.Compactor.Remove.End
/* @Packager.Compactor.RemoveLine
if ( FCKBrowserInfo.IsIE )
FCKScriptLoader.AddScript( 'js/fckeditorcode_ie_1.js' ) ;
else
FCKScriptLoader.AddScript( 'js/fckeditorcode_gecko_1.js' ) ;
@Packager.Compactor.RemoveLine */
}
function LoadLanguageFile()
{
FCKScriptLoader.OnEmpty = function()
{
// Removes the OnEmpty listener.
FCKScriptLoader.OnEmpty = null ;
// Correct the editor layout to the correct language direction.
if ( FCKLang )
window.document.dir = FCKLang.Dir ;
// Starts the editor.
FCK.StartEditor() ;
}
FCKScriptLoader.AddScript( 'lang/' +
FCKLanguageManager.ActiveLanguage.Code + '.js' ) ;
}
====================================================
Index: fckcontextmenu_gecko.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fckcontextmenu_gecko.js
* Context Menu operations. (Gecko specific implementations)
*
* Version: 2.0 RC3
* Modified: 2004-08-27 16:58:07
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
// The Context Menu CSS must be added to the parent document.
FCKTools.AppendStyleSheet( window.parent.document, FCKConfig.SkinPath +
'fck_contextmenu.css' ) ;
FCKContextMenu.Show = function( x, y )
{
if ( ! this._Document )
{
this._Document = window.parent.document ;
}
// Create the context menu if needed.
if ( !this._IsLoaded )
{
this.Reload() ;
this._Div.style.zIndex = 10000 ;
this._Div.oncontextmenu = function() { return false ; }
}
this.RefreshState() ;
// Get the editor area and editor frames positions.
var oCoordsA = FCKTools.GetElementPosition(
FCK.EditorWindow.frameElement ) ;
var oCoordsB = FCKTools.GetElementPosition( window.frameElement ) ;
x += oCoordsA.X + oCoordsB.X ;
y += oCoordsA.Y + oCoordsB.Y ;
// Verifies if the context menu is completely visible.
var iXSpace = x + this._Div.offsetWidth -
this._Div.ownerDocument.defaultView.innerWidth ;
var iYSpace = y + this._Div.offsetHeight -
this._Div.ownerDocument.defaultView.innerHeight ;
if ( iXSpace > 0 ) x -= this._Div.offsetWidth ;
if ( iYSpace > 0 ) y -= this._Div.offsetHeight ;
// Set the context menu DIV in the specified location.
this._Div.style.left = x + 'px' ;
this._Div.style.top = y + 'px' ;
// Watch the "OnClick" event for all windows to close the Context Menu.
var oActualWindow = FCK.EditorWindow ;
while ( oActualWindow )
{
oActualWindow.document.addEventListener( 'click',
FCKContextMenu._OnDocumentClick, false ) ;
if ( oActualWindow != oActualWindow.parent )
oActualWindow = oActualWindow.parent ;
else if ( oActualWindow.opener == null )
oActualWindow = oActualWindow.opener ;
else
break ;
}
// Show it.
this._Div.style.visibility = '' ;
}
FCKContextMenu._OnDocumentClick = function( event )
{
var e = event.target ;
while ( e )
{
if ( e == FCKContextMenu._Div ) return ;
e = e.parentNode ;
}
FCKContextMenu.Hide() ;
}
FCKContextMenu.Hide = function()
{
this._Div.style.visibility = 'hidden' ;
this._Div.style.left = this._Div.style.top = '1px' ;
}
====================================================
Index: fckcontextmenu_ie.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fckcontextmenu_ie.js
* Context Menu operations. (IE specific implementations)
*
* Version: 2.0 RC3
* Modified: 2004-08-20 22:58:12
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
FCKContextMenu.Show = function( x, y )
{
// Create the Popup used to show the menu (this is a IE 5.5+ feature).
if ( ! this._Popup )
{
this._Popup = window.createPopup() ;
this._Document = this._Popup.document ;
this._Document.createStyleSheet( FCKConfig.SkinPath +
'fck_contextmenu.css' ) ;
this._Document.oncontextmenu = function() { return false ; }
}
// Create the context menu if needed.
if ( !this._IsLoaded )
{
this.Reload() ;
this._Div.style.visibility = '' ;
}
this.RefreshState() ;
// IE doens't get the offsetWidth and offsetHeight values if the
element is not visible.
// So the Popup must be "shown" with no size to be able to get these
values.
this._Popup.show( x, y, 0, 0 ) ;
// This was the previous solution. It works well to.
// So a temporary element is created to get this for us.
/*
if ( !this._DivCopy )
{
this._DivCopy = document.createElement( 'DIV' ) ;
this._DivCopy.className = 'CM_ContextMenu' ;
this._DivCopy.style.position = 'absolute' ;
this._DivCopy.style.visibility = 'hidden' ;
document.body.appendChild( this._DivCopy );
}
this._DivCopy.innerHTML = this._Div.innerHTML ;
*/
// Show the Popup at the specified location.
this._Popup.show( x, y, this._Div.offsetWidth, this._Div.offsetHeight )
;
}
FCKContextMenu.Hide = function()
{
if ( this._Popup )
this._Popup.hide() ;
}
====================================================
Index: fckcoreextensions.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fckcoreextensions.js
* Some extensions to the Javascript Core.
*
* Version: 2.0 RC3
* Modified: 2005-02-20 00:54:00
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
// Extends the Array object, creating a "addItem" method on it.
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 )
{
var L1 = this.length ;
var L2 = value.length ;
if ( L2 > L1 )
return false ;
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 ) ;
}
====================================================
Index: fckdebug.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fckdebug.js
* Debug window control and operations.
*
* Version: 2.0 RC3
* Modified: 2004-11-08 18:34:12
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
var FCKDebug = new Object() ;
if ( FCKConfig.Debug )
{
FCKDebug.Output = function( message, color )
{
if ( ! FCKConfig.Debug ) return ;
if ( message != null && isNaN( message ) )
message = message.replace(/</g, "<") ;
if ( !this.DebugWindow || this.DebugWindow.closed )
this.DebugWindow = window.open( 'fckdebug.html',
'FCKeditorDebug',
'menubar=no,scrollbars=no,resizable=yes,location=no,toolbar=no,width=600,height=500',
true ) ;
if ( this.DebugWindow.Output)
this.DebugWindow.Output( message, color ) ;
}
}
else
FCKDebug.Output = function() {}
====================================================
Index: fckcontextmenu.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fckcontextmenu.js
* Defines the FCKContextMenu object that is responsible for all
* Context Menu operations.
*
* Version: 2.0 RC3
* Modified: 2005-02-16 20:34:58
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
var FCKContextMenu = new Object() ;
// This property is internally used to indicate that the context menu has been
created.
FCKContextMenu._IsLoaded = false ;
// This method creates the context menu inside a DIV tag. Take a look at the
end of this file for a sample output.
FCKContextMenu.Reload = function()
{
// Create the Main DIV that holds the Context Menu.
this._Div = this._Document.createElement( 'DIV' ) ;
this._Div.className = 'CM_ContextMenu' ;
this._Div.style.position = 'absolute' ;
this._Div.style.visibility = 'hidden' ;
this._Document.body.appendChild( this._Div );
// Create the main table for the menu items.
var oTable = this._Document.createElement( 'TABLE' ) ;
oTable.cellSpacing = 0 ;
oTable.cellPadding = 0 ;
oTable.border = 0 ;
this._Div.appendChild( oTable ) ;
// Load all configured groups.
this.Groups = new Object() ;
for ( var i = 0 ; i < FCKConfig.ContextMenu.length ; i++ )
{
var sGroup = FCKConfig.ContextMenu[i] ;
this.Groups[ sGroup ] = this._GetGroup( sGroup ) ;
this.Groups[ sGroup ].CreateTableRows( oTable ) ;
}
this._IsLoaded = true ;
}
FCKContextMenu._GetGroup = function( groupName )
{
var oGroup ;
switch ( groupName )
{
case 'Generic' :
// Generic items that are always available.
oGroup = new FCKContextMenuGroup() ;
with ( oGroup )
{
Add( new FCKContextMenuItem( this, 'Cut'
, FCKLang.Cut , true ) ) ;
Add( new FCKContextMenuItem( this, 'Copy'
, FCKLang.Copy , true ) ) ;
Add( new FCKContextMenuItem( this, 'Paste'
, FCKLang.Paste , true ) ) ;
}
break ;
case 'Link' :
oGroup = new FCKContextMenuGroup() ;
with ( oGroup )
{
Add( new FCKContextMenuSeparator() ) ;
Add( new FCKContextMenuItem( this, 'Link'
, FCKLang.EditLink , true ) ) ;
Add( new FCKContextMenuItem( this, 'Unlink'
, FCKLang.RemoveLink, true ) ) ;
}
break ;
case 'TableCell' :
oGroup = new FCKContextMenuGroup() ;
with ( oGroup )
{
Add( new FCKContextMenuSeparator() ) ;
Add( new FCKContextMenuItem( this,
'TableInsertRow' , FCKLang.InsertRow, true ) ) ;
Add( new FCKContextMenuItem( this,
'TableDeleteRows' , FCKLang.DeleteRows, true ) ) ;
Add( new FCKContextMenuSeparator() ) ;
Add( new FCKContextMenuItem( this,
'TableInsertColumn' , FCKLang.InsertColumn, true ) ) ;
Add( new FCKContextMenuItem( this,
'TableDeleteColumns' , FCKLang.DeleteColumns, true ) ) ;
Add( new FCKContextMenuSeparator() ) ;
Add( new FCKContextMenuItem( this,
'TableInsertCell' , FCKLang.InsertCell, true ) ) ;
Add( new FCKContextMenuItem( this,
'TableDeleteCells' , FCKLang.DeleteCells, true ) ) ;
Add( new FCKContextMenuItem( this,
'TableMergeCells' , FCKLang.MergeCells, true ) ) ;
Add( new FCKContextMenuItem( this,
'TableSplitCell' , FCKLang.SplitCell, true ) ) ;
Add( new FCKContextMenuSeparator() ) ;
Add( new FCKContextMenuItem( this,
'TableCellProp' , FCKLang.CellProperties, true ) ) ;
Add( new FCKContextMenuItem( this, 'TableProp'
, FCKLang.TableProperties, true ) ) ;
}
break ;
case 'Table' :
return new FCKContextMenuGroup( true, this, 'Table',
FCKLang.TableProperties, true ) ;
case 'Image' :
return new FCKContextMenuGroup( true, this, 'Image',
FCKLang.ImageProperties, true ) ;
case 'Form' :
return new FCKContextMenuGroup( true, this, 'Form',
FCKLang.FormProp, true ) ;
case 'Checkbox' :
return new FCKContextMenuGroup( true, this, 'Checkbox',
FCKLang.CheckboxProp, true ) ;
case 'Radio' :
return new FCKContextMenuGroup( true, this, 'Radio',
FCKLang.RadioButtonProp, true ) ;
case 'TextField' :
return new FCKContextMenuGroup( true, this,
'TextField', FCKLang.TextFieldProp, true ) ;
case 'HiddenField' :
return new FCKContextMenuGroup( true, this,
'HiddenField', FCKLang.HiddenFieldProp, true ) ;
case 'ImageButton' :
return new FCKContextMenuGroup( true, this,
'ImageButton', FCKLang.ImageButtonProp, true ) ;
case 'Button' :
return new FCKContextMenuGroup( true, this, 'Button',
FCKLang.ButtonProp, true ) ;
case 'Select' :
return new FCKContextMenuGroup( true, this, 'Select',
FCKLang.SelectionFieldProp, true ) ;
case 'Textarea' :
return new FCKContextMenuGroup( true, this, 'Textarea',
FCKLang.TextareaProp, true ) ;
case 'BulletedList' :
return new FCKContextMenuGroup( true, this,
'BulletedList', FCKLang.BulletedListProp, true ) ;
case 'NumberedList' :
return new FCKContextMenuGroup( true, this,
'NumberedList', FCKLang.NumberedListProp, true ) ;
case 'Anchor' :
return new FCKContextMenuGroup( true, this, 'Anchor',
FCKLang.AnchorProp, true ) ;
}
return oGroup ;
}
FCKContextMenu.RefreshState = function()
{
// Get the actual selected tag (if any).
var oTag = FCKSelection.GetSelectedElement() ;
var sTagName ;
if ( oTag )
{
sTagName = oTag.tagName ;
}
// Set items visibility.
var bIsAnchor = ( sTagName == 'A' && oTag.name.length > 0 &&
oTag.href.length == 0 ) ;
if ( this.Groups['Anchor'] )
this.Groups['Anchor'].SetVisible( bIsAnchor ) ;
if ( this.Groups['Link'] )
this.Groups['Link'].SetVisible( !bIsAnchor && FCK.GetNamedCommandState(
'Unlink' ) != FCK_TRISTATE_DISABLED ) ;
if ( this.Groups['TableCell'] )
this.Groups['TableCell'].SetVisible( sTagName != 'TABLE' &&
FCKSelection.HasAncestorNode('TABLE') ) ;
if ( this.Groups['Table'] )
this.Groups['Table'].SetVisible( sTagName == 'TABLE' ) ;
if ( this.Groups['Image'] )
this.Groups['Image'].SetVisible( sTagName == 'IMG' ) ;
if ( this.Groups['BulletedList'] )
this.Groups['BulletedList'].SetVisible( FCKSelection.HasAncestorNode('UL') ) ;
if ( this.Groups['NumberedList'] )
this.Groups['NumberedList'].SetVisible( FCKSelection.HasAncestorNode('OL') ) ;
if ( this.Groups['Select'] )
this.Groups['Select'].SetVisible( sTagName == 'SELECT' ) ;
if ( this.Groups['Textarea'] )
this.Groups['Textarea'].SetVisible( sTagName == 'TEXTAREA' ) ;
if ( this.Groups['Form'] )
this.Groups['Form'].SetVisible( FCKSelection.HasAncestorNode('FORM') ) ;
if ( this.Groups['Checkbox'] )
this.Groups['Checkbox'].SetVisible( sTagName == 'INPUT' &&
oTag.type == 'checkbox' ) ;
if ( this.Groups['Radio'] )
this.Groups['Radio'].SetVisible( sTagName == 'INPUT' &&
oTag.type == 'radio' ) ;
if ( this.Groups['TextField'] )
this.Groups['TextField'].SetVisible( sTagName == 'INPUT' && ( oTag.type ==
'text' || oTag.type == 'password' ) ) ;
if ( this.Groups['HiddenField'] )
this.Groups['HiddenField'].SetVisible( sTagName == 'INPUT' && oTag.type ==
'hidden' ) ;
if ( this.Groups['ImageButton'] )
this.Groups['ImageButton'].SetVisible( sTagName == 'INPUT' && oTag.type ==
'image' ) ;
if ( this.Groups['Button'] )
this.Groups['Button'].SetVisible( sTagName == 'INPUT' && (
oTag.type == 'button' || oTag.type == 'submit' || oTag.type == 'reset' ) ) ;
// Refresh the state of all visible items (active/disactive)
for ( var o in this.Groups )
{
this.Groups[o].RefreshState() ;
}
}
/*
Sample Context Menu Output
-----------------------------------------
<div class="CM_ContextMenu">
<table cellSpacing="0" cellPadding="0" border="0">
<tr class="CM_Disabled">
<td class="CM_Icon"><img alt="" src="icons/cut.gif"
width="21" height="20" unselectable="on"></td>
<td class="CM_Label" unselectable="on">Cut</td>
</tr>
<tr class="CM_Disabled">
<td class="CM_Icon"><img height="20" alt=""
src="icons/copy.gif" width="21"></td>
<td class="CM_Label">Copy</td>
</tr>
<tr class="CM_Option" onmouseover="OnOver(this);"
onmouseout="OnOut(this);">
<td class="CM_Icon"><img height="20" alt=""
src="icons/paste.gif" width="21"></td>
<td class="CM_Label">Paste</td>
</tr>
<tr class="CM_Separator">
<td class="CM_Icon"></td>
<td class="CM_Label"><div></div></td>
</tr>
<tr class="CM_Option" onmouseover="OnOver(this);"
onmouseout="OnOut(this);">
<td class="CM_Icon"><img height="20" alt=""
src="icons/print.gif" width="21"></td>
<td class="CM_Label">Print</td>
</tr>
<tr class="CM_Separator">
<td class="CM_Icon"></td>
<td class="CM_Label"><div></div></td>
</tr>
<tr class="CM_Option" onmouseover="OnOver(this);"
onmouseout="OnOut(this);">
<td class="CM_Icon"></td>
<td class="CM_Label">Do Something</td>
</tr>
<tr class="CM_Option" onmouseover="OnOver(this);"
onmouseout="OnOut(this);">
<td class="CM_Icon"></td>
<td class="CM_Label">Just Testing</td>
</tr>
</table>
</div>
*/
====================================================
Index: fckconfig.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fckconfig.js
* Creates and initializes the FCKConfig object.
*
* Version: 2.0 RC3
* Modified: 2005-02-02 14:02:33
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
var FCKConfig = FCK.Config = new Object() ;
// Editor Base Path
if ( document.location.protocol == 'file:' )
{
FCKConfig.BasePath = document.location.pathname.substr(1) ;
FCKConfig.BasePath = FCKConfig.BasePath.replace( /\\/gi, '/' ) ;
FCKConfig.BasePath = 'file://' +
FCKConfig.BasePath.substring(0,FCKConfig.BasePath.lastIndexOf('/')+1) ;
}
else
{
FCKConfig.BasePath =
document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')+1)
;
FCKConfig.FullBasePath = document.location.protocol + '//' +
document.location.host + FCKConfig.BasePath ;
}
// Override the actual configuration values with the values passed throw the
// hidden field "<InstanceName>___Config".
FCKConfig.LoadHiddenField = function()
{
// 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 sConfigName = unescape( aConfig[0] ) ;
var sConfigValue = unescape( aConfig[1] ) ;
if ( sConfigValue.toLowerCase() == "true" )
// If it is a boolean TRUE.
FCKConfig[sConfigName] = true ;
else if ( sConfigValue.toLowerCase() == "false" ) // If
it is a boolean FALSE.
FCKConfig[sConfigName] = false ;
else if ( ! isNaN(sConfigValue) ) // If it is a
number.
FCKConfig[sConfigName] = parseInt( sConfigValue ) ;
else
// In any other case it is a string.
FCKConfig[sConfigName] = sConfigValue ;
}
}
// 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] ) ;
}
====================================================
Index: fckbrowserinfo.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fckbrowserinfo.js
* Defines the FCKBrowserInfo object that hold some browser informations.
*
* Version: 2.0 RC3
* Modified: 2005-02-23 00:43:57
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
var FCKBrowserInfo = new Object() ;
var sAgent = navigator.userAgent.toLowerCase() ;
FCKBrowserInfo.IsIE = sAgent.indexOf("msie") != -1 ;
FCKBrowserInfo.IsGecko = !FCKBrowserInfo.IsIE ;
FCKBrowserInfo.IsNetscape = sAgent.indexOf("netscape") != -1 ;
if ( FCKBrowserInfo.IsIE )
{
FCKBrowserInfo.MajorVer = navigator.appVersion.match(/MSIE (.)/)[1] ;
FCKBrowserInfo.MinorVer = navigator.appVersion.match(/MSIE .\.(.)/)[1] ;
}
else
{
// TODO: Other browsers
FCKBrowserInfo.MajorVer = 0 ;
FCKBrowserInfo.MinorVer = 0 ;
}
FCKBrowserInfo.IsIE55OrMore = FCKBrowserInfo.IsIE && ( FCKBrowserInfo.MajorVer
> 5 || FCKBrowserInfo.MinorVer >= 5 ) ;
====================================================
Index: fckcodeformatter.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fckcodeformatter.js
* Format the HTML.
*
* Version: 2.0 RC3
* Modified: 2005-02-07 19:48:21
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
var FCKCodeFormatter = new Object() ;
FCKCodeFormatter.Regex = new Object() ;
// Regex for line breaks.
FCKCodeFormatter.Regex.BlocksOpener =
/\<(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|AREA|OPTION)[^\>]*\>/gi
;
FCKCodeFormatter.Regex.BlocksCloser =
/\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|AREA|OPTION)[^\>]*\>/gi
;
FCKCodeFormatter.Regex.NewLineTags = /\<(BR|HR)[^\>]\>/gi ;
FCKCodeFormatter.Regex.MainTags =
/\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi ;
FCKCodeFormatter.Regex.LineSplitter = /\s*\n+\s*/g ;
// Regex for indentation.
FCKCodeFormatter.Regex.IncreaseIndent =
/^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \/\>]/i ;
FCKCodeFormatter.Regex.DecreaseIndent =
/^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \>]/i ;
FCKCodeFormatter.Regex.FormatIndentatorRemove = new RegExp(
FCKConfig.FormatIndentator ) ;
FCKCodeFormatter.Format = function( html )
{
// Line breaks.
var sFormatted = html.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 ;
}
return sFormatted.trim() ;
}
====================================================
Index: fckcommands.js
/*
* FCKeditor - The text editor for internet
* Copyright (C) 2003-2004 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/
*
* File Name: fckcommands.js
* Define all commands available in the editor.
*
* Version: 2.0 RC3
* Modified: 2005-03-02 08:22:35
*
* File Authors:
* Frederico Caldeira Knabben (address@hidden)
*/
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 'Link' : oCommand = new
FCKDialogCommand( 'Link' , FCKLang.DlgLnkWindowTitle
, 'dialog/fck_link.html' , 400, 330, FCK.GetNamedCommandState,
'CreateLink' ) ; 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 'SpecialChar' : oCommand = new FCKDialogCommand(
'SpecialChar', FCKLang.DlgSpecialCharTitle , 'dialog/fck_specialchar.html' ,
400, 300 ) ; 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' , 400, 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 '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 '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 ;
// 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 ;
}
}
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 ;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Phpgroupware-cvs] news_admin/js/fckeditor/editor/_source/internals fckselection_gecko.js, 1.1 fckselection_ie.js, 1.1 fcktablehandler.js, 1.1 fcktablehandler_gecko.js, 1.1 fckselection.js, 1.1 fckscriptloader.js, 1.1 fckdialog_ie.js, 1.1 fcklanguagemanager.js, 1.1 fckplugins.js, 1.1 fckregexlib.js, 1.1 fcktablehandler_ie.js, 1.1 fcktoolbaritems.js, 1.1 fckxhtml.js, 1.1 fckxhtml_gecko.js, 1.1 fckxhtml_ie.js, 1.1 fckxhtmlentities.js, 1.1 fckurlparams.js, 1.1 fcktools_ie.js, 1.1 fcktoolbarset.js, 1.1 fcktools.js, 1.1 fcktools_gecko.js, 1.1 fckdialog_gecko.js, 1.1 fckdialog.js, 1.1 fck_1_ie.js, 1.1 fck_2.js, 1.1 fck_2_gecko.js, 1.1 fck_2_ie.js, 1.1 fck_1_gecko.js, 1.1 fck_1.js, 1.1 fck.js, 1.1 fck_last.js, 1.1 fck_onload.js, 1.1 fckcontextmenu_gecko.js, 1.1 fckcontextmenu_ie.js, 1.1 fckcoreextensions.js, 1.1 fckdebug.js, 1.1 fckcontextmenu.js, 1.1 fckconfig.js, 1.1 fckbrowserinfo.js, 1.1 fckcodeformatter.js, 1.1 fckcommands.js, 1.1,
skwashd <=
- Prev by Date:
[Phpgroupware-cvs] news_admin/js/fckeditor/editor/dialog/fck_select fck_select.js, 1.1
- Next by Date:
[Phpgroupware-cvs] news_admin/js/fckeditor/_docs/contents 004.html, 1.1 005.html, 1.1 006.html, 1.1 007.html, 1.1 003.html, 1.1 002.html, 1.1 001.html, 1.1 008.html, 1.1 009.html, 1.1 010.html, 1.1 011.html, 1.1 012.html, 1.1
- Previous by thread:
[Phpgroupware-cvs] news_admin/js/fckeditor/editor/dialog/fck_select fck_select.js, 1.1
- Next by thread:
[Phpgroupware-cvs] news_admin/js/fckeditor/_docs/contents 004.html, 1.1 005.html, 1.1 006.html, 1.1 007.html, 1.1 003.html, 1.1 002.html, 1.1 001.html, 1.1 008.html, 1.1 009.html, 1.1 010.html, 1.1 011.html, 1.1 012.html, 1.1
- Index(es):