forked from science-ation/science-ation
Add FCKEditor, uncompressed, no changes
This commit is contained in:
parent
251138248d
commit
4f5727a1de
38
fckeditor/_documentation.html
Normal file
38
fckeditor/_documentation.html
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
-->
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Documentation</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<style type="text/css">
|
||||||
|
body { font-family: arial, verdana, sans-serif }
|
||||||
|
p { margin-left: 20px }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>
|
||||||
|
FCKeditor Documentation</h1>
|
||||||
|
<p>
|
||||||
|
You can find the official documentation for FCKeditor online, at <a href="http://docs.fckeditor.net/">
|
||||||
|
http://docs.fckeditor.net/</a>.</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
38
fckeditor/_samples/_plugins/findreplace/fckplugin.js
Normal file
38
fckeditor/_samples/_plugins/findreplace/fckplugin.js
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* This is the sample plugin definition file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Register the related commands.
|
||||||
|
FCKCommands.RegisterCommand( 'My_Find' , new FCKDialogCommand( FCKLang['DlgMyFindTitle'] , FCKLang['DlgMyFindTitle'] , FCKConfig.PluginsPath + 'findreplace/find.html' , 340, 170 ) ) ;
|
||||||
|
FCKCommands.RegisterCommand( 'My_Replace' , new FCKDialogCommand( FCKLang['DlgMyReplaceTitle'], FCKLang['DlgMyReplaceTitle'] , FCKConfig.PluginsPath + 'findreplace/replace.html', 340, 200 ) ) ;
|
||||||
|
|
||||||
|
// Create the "Find" toolbar button.
|
||||||
|
var oFindItem = new FCKToolbarButton( 'My_Find', FCKLang['DlgMyFindTitle'] ) ;
|
||||||
|
oFindItem.IconPath = FCKConfig.PluginsPath + 'findreplace/find.gif' ;
|
||||||
|
|
||||||
|
FCKToolbarItems.RegisterItem( 'My_Find', oFindItem ) ; // 'My_Find' is the name used in the Toolbar config.
|
||||||
|
|
||||||
|
// Create the "Replace" toolbar button.
|
||||||
|
var oReplaceItem = new FCKToolbarButton( 'My_Replace', FCKLang['DlgMyReplaceTitle'] ) ;
|
||||||
|
oReplaceItem.IconPath = FCKConfig.PluginsPath + 'findreplace/replace.gif' ;
|
||||||
|
|
||||||
|
FCKToolbarItems.RegisterItem( 'My_Replace', oReplaceItem ) ; // 'My_Replace' is the name used in the Toolbar config.
|
BIN
fckeditor/_samples/_plugins/findreplace/find.gif
Normal file
BIN
fckeditor/_samples/_plugins/findreplace/find.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 595 B |
172
fckeditor/_samples/_plugins/findreplace/find.html
Normal file
172
fckeditor/_samples/_plugins/findreplace/find.html
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* This is the sample "Find" plugin window.
|
||||||
|
-->
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta content="noindex, nofollow" name="robots">
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
var oEditor = window.parent.InnerDialogLoaded() ;
|
||||||
|
|
||||||
|
function OnLoad()
|
||||||
|
{
|
||||||
|
// Whole word is available on IE only.
|
||||||
|
if ( oEditor.FCKBrowserInfo.IsIE )
|
||||||
|
document.getElementById('divWord').style.display = '' ;
|
||||||
|
|
||||||
|
// First of all, translate the dialog box texts.
|
||||||
|
oEditor.FCKLanguageManager.TranslatePage( document ) ;
|
||||||
|
|
||||||
|
window.parent.SetAutoSize( true ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function btnStat(frm)
|
||||||
|
{
|
||||||
|
document.getElementById('btnFind').disabled =
|
||||||
|
( document.getElementById('txtFind').value.length == 0 ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ReplaceTextNodes( parentNode, regex, replaceValue, replaceAll )
|
||||||
|
{
|
||||||
|
for ( var i = 0 ; i < parentNode.childNodes.length ; i++ )
|
||||||
|
{
|
||||||
|
var oNode = parentNode.childNodes[i] ;
|
||||||
|
if ( oNode.nodeType == 3 )
|
||||||
|
{
|
||||||
|
var sReplaced = oNode.nodeValue.replace( regex, replaceValue ) ;
|
||||||
|
if ( oNode.nodeValue != sReplaced )
|
||||||
|
{
|
||||||
|
oNode.nodeValue = sReplaced ;
|
||||||
|
if ( ! replaceAll )
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( ReplaceTextNodes( oNode, regex, replaceValue ) )
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function GetRegexExpr()
|
||||||
|
{
|
||||||
|
if ( document.getElementById('chkWord').checked )
|
||||||
|
var sExpr = '\\b' + document.getElementById('txtFind').value + '\\b' ;
|
||||||
|
else
|
||||||
|
var sExpr = document.getElementById('txtFind').value ;
|
||||||
|
|
||||||
|
return sExpr ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function GetCase()
|
||||||
|
{
|
||||||
|
return ( document.getElementById('chkCase').checked ? '' : 'i' ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function Ok()
|
||||||
|
{
|
||||||
|
if ( document.getElementById('txtFind').value.length == 0 )
|
||||||
|
return ;
|
||||||
|
|
||||||
|
if ( oEditor.FCKBrowserInfo.IsIE )
|
||||||
|
FindIE() ;
|
||||||
|
else
|
||||||
|
FindGecko() ;
|
||||||
|
}
|
||||||
|
|
||||||
|
var oRange = null ;
|
||||||
|
|
||||||
|
function FindIE()
|
||||||
|
{
|
||||||
|
if ( oRange == null )
|
||||||
|
oRange = oEditor.FCK.EditorDocument.body.createTextRange() ;
|
||||||
|
|
||||||
|
var iFlags = 0 ;
|
||||||
|
|
||||||
|
if ( chkCase.checked )
|
||||||
|
iFlags = iFlags | 4 ;
|
||||||
|
|
||||||
|
if ( chkWord.checked )
|
||||||
|
iFlags = iFlags | 2 ;
|
||||||
|
|
||||||
|
var bFound = oRange.findText( document.getElementById('txtFind').value, 1, iFlags ) ;
|
||||||
|
|
||||||
|
if ( bFound )
|
||||||
|
{
|
||||||
|
oRange.scrollIntoView() ;
|
||||||
|
oRange.select() ;
|
||||||
|
oRange.collapse(false) ;
|
||||||
|
oLastRangeFound = oRange ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
oRange = null ;
|
||||||
|
alert( oEditor.FCKLang.DlgFindNotFoundMsg ) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function FindGecko()
|
||||||
|
{
|
||||||
|
var bCase = document.getElementById('chkCase').checked ;
|
||||||
|
var bWord = document.getElementById('chkWord').checked ;
|
||||||
|
|
||||||
|
// window.find( searchString, caseSensitive, backwards, wrapAround, wholeWord, searchInFrames, showDialog ) ;
|
||||||
|
oEditor.FCK.EditorWindow.find( document.getElementById('txtFind').value, bCase, false, false, bWord, false, false ) ;
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body onload="OnLoad()" scroll="no" style="OVERFLOW: hidden">
|
||||||
|
<div align="center">
|
||||||
|
This is my Plugin!
|
||||||
|
</div>
|
||||||
|
<table cellSpacing="3" cellPadding="2" width="100%" border="0">
|
||||||
|
<tr>
|
||||||
|
<td nowrap>
|
||||||
|
<label for="txtFind" fckLang="DlgMyReplaceFindLbl">Find what:</label>
|
||||||
|
</td>
|
||||||
|
<td width="100%">
|
||||||
|
<input id="txtFind" onkeyup="btnStat(this.form)" style="WIDTH: 100%" tabIndex="1" type="text">
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input id="btnFind" style="WIDTH: 100%; PADDING-RIGHT: 5px; PADDING-LEFT: 5px" disabled
|
||||||
|
onclick="Ok();" type="button" value="Find" fckLang="DlgMyFindFindBtn">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td valign="bottom" colSpan="3">
|
||||||
|
<input id="chkCase" tabIndex="3" type="checkbox"><label for="chkCase" fckLang="DlgMyReplaceCaseChk">Match
|
||||||
|
case</label>
|
||||||
|
<br>
|
||||||
|
<div id="divWord" style="DISPLAY: none">
|
||||||
|
<input id="chkWord" tabIndex="4" type="checkbox"><label for="chkWord" fckLang="DlgMyReplaceWordChk">Match
|
||||||
|
whole word</label>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
33
fckeditor/_samples/_plugins/findreplace/lang/en.js
Normal file
33
fckeditor/_samples/_plugins/findreplace/lang/en.js
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* English language file for the sample plugin.
|
||||||
|
*/
|
||||||
|
|
||||||
|
FCKLang['DlgMyReplaceTitle'] = 'Plugin - Replace' ;
|
||||||
|
FCKLang['DlgMyReplaceFindLbl'] = 'Find what:' ;
|
||||||
|
FCKLang['DlgMyReplaceReplaceLbl'] = 'Replace with:' ;
|
||||||
|
FCKLang['DlgMyReplaceCaseChk'] = 'Match case' ;
|
||||||
|
FCKLang['DlgMyReplaceReplaceBtn'] = 'Replace' ;
|
||||||
|
FCKLang['DlgMyReplaceReplAllBtn'] = 'Replace All' ;
|
||||||
|
FCKLang['DlgMyReplaceWordChk'] = 'Match whole word' ;
|
||||||
|
|
||||||
|
FCKLang['DlgMyFindTitle'] = 'Plugin - Find' ;
|
||||||
|
FCKLang['DlgMyFindFindBtn'] = 'Find' ;
|
33
fckeditor/_samples/_plugins/findreplace/lang/fr.js
Normal file
33
fckeditor/_samples/_plugins/findreplace/lang/fr.js
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* French language file for the sample plugin.
|
||||||
|
*/
|
||||||
|
|
||||||
|
FCKLang['DlgMyReplaceTitle'] = 'Plugin - Remplacer' ;
|
||||||
|
FCKLang['DlgMyReplaceFindLbl'] = 'Chercher:' ;
|
||||||
|
FCKLang['DlgMyReplaceReplaceLbl'] = 'Remplacer par:' ;
|
||||||
|
FCKLang['DlgMyReplaceCaseChk'] = 'Respecter la casse' ;
|
||||||
|
FCKLang['DlgMyReplaceReplaceBtn'] = 'Remplacer' ;
|
||||||
|
FCKLang['DlgMyReplaceReplAllBtn'] = 'Remplacer Tout' ;
|
||||||
|
FCKLang['DlgMyReplaceWordChk'] = 'Mot entier' ;
|
||||||
|
|
||||||
|
FCKLang['DlgMyFindTitle'] = 'Plugin - Chercher' ;
|
||||||
|
FCKLang['DlgMyFindFindBtn'] = 'Chercher' ;
|
33
fckeditor/_samples/_plugins/findreplace/lang/it.js
Normal file
33
fckeditor/_samples/_plugins/findreplace/lang/it.js
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Italian language file for the sample plugin.
|
||||||
|
*/
|
||||||
|
|
||||||
|
FCKLang['DlgMyReplaceTitle'] = 'Plugin - Sostituisci' ;
|
||||||
|
FCKLang['DlgMyReplaceFindLbl'] = 'Trova:' ;
|
||||||
|
FCKLang['DlgMyReplaceReplaceLbl'] = 'Sostituisci con:' ;
|
||||||
|
FCKLang['DlgMyReplaceCaseChk'] = 'Maiuscole/minuscole' ;
|
||||||
|
FCKLang['DlgMyReplaceReplaceBtn'] = 'Sostituisci' ;
|
||||||
|
FCKLang['DlgMyReplaceReplAllBtn'] = 'Sostituisci tutto' ;
|
||||||
|
FCKLang['DlgMyReplaceWordChk'] = 'Parola intera' ;
|
||||||
|
|
||||||
|
FCKLang['DlgMyFindTitle'] = 'Plugin - Cerca' ;
|
||||||
|
FCKLang['DlgMyFindFindBtn'] = 'Cerca' ;
|
BIN
fckeditor/_samples/_plugins/findreplace/replace.gif
Normal file
BIN
fckeditor/_samples/_plugins/findreplace/replace.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 326 B |
135
fckeditor/_samples/_plugins/findreplace/replace.html
Normal file
135
fckeditor/_samples/_plugins/findreplace/replace.html
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* This is the sample "Replace" plugin window.
|
||||||
|
-->
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta content="noindex, nofollow" name="robots">
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
var oEditor = window.parent.InnerDialogLoaded() ;
|
||||||
|
|
||||||
|
function OnLoad()
|
||||||
|
{
|
||||||
|
// First of all, translate the dialog box texts
|
||||||
|
oEditor.FCKLanguageManager.TranslatePage( document ) ;
|
||||||
|
|
||||||
|
window.parent.SetAutoSize( true ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function btnStat(frm)
|
||||||
|
{
|
||||||
|
document.getElementById('btnReplace').disabled =
|
||||||
|
document.getElementById('btnReplaceAll').disabled =
|
||||||
|
( document.getElementById('txtFind').value.length == 0 ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ReplaceTextNodes( parentNode, regex, replaceValue, replaceAll, hasFound )
|
||||||
|
{
|
||||||
|
for ( var i = 0 ; i < parentNode.childNodes.length ; i++ )
|
||||||
|
{
|
||||||
|
var oNode = parentNode.childNodes[i] ;
|
||||||
|
if ( oNode.nodeType == 3 )
|
||||||
|
{
|
||||||
|
var sReplaced = oNode.nodeValue.replace( regex, replaceValue ) ;
|
||||||
|
if ( oNode.nodeValue != sReplaced )
|
||||||
|
{
|
||||||
|
oNode.nodeValue = sReplaced ;
|
||||||
|
if ( ! replaceAll )
|
||||||
|
return true ;
|
||||||
|
hasFound = true ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hasFound = ReplaceTextNodes( oNode, regex, replaceValue, replaceAll, hasFound ) ;
|
||||||
|
if ( ! replaceAll && hasFound )
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
return hasFound ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function GetRegexExpr()
|
||||||
|
{
|
||||||
|
if ( document.getElementById('chkWord').checked )
|
||||||
|
var sExpr = '\\b' + document.getElementById('txtFind').value + '\\b' ;
|
||||||
|
else
|
||||||
|
var sExpr = document.getElementById('txtFind').value ;
|
||||||
|
|
||||||
|
return sExpr ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function GetCase()
|
||||||
|
{
|
||||||
|
return ( document.getElementById('chkCase').checked ? '' : 'i' ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function Replace()
|
||||||
|
{
|
||||||
|
var oRegex = new RegExp( GetRegexExpr(), GetCase() ) ;
|
||||||
|
ReplaceTextNodes( oEditor.FCK.EditorDocument.body, oRegex, document.getElementById('txtReplace').value, false ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ReplaceAll()
|
||||||
|
{
|
||||||
|
var oRegex = new RegExp( GetRegexExpr(), GetCase() + 'g' ) ;
|
||||||
|
ReplaceTextNodes( oEditor.FCK.EditorDocument.body, oRegex, document.getElementById('txtReplace').value, true ) ;
|
||||||
|
window.parent.Cancel() ;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body onload="OnLoad()" scroll="no" style="OVERFLOW: hidden">
|
||||||
|
<div align="center">
|
||||||
|
This is my Plugin!
|
||||||
|
</div>
|
||||||
|
<table cellSpacing="3" cellPadding="2" width="100%" border="0">
|
||||||
|
<tr>
|
||||||
|
<td noWrap><label for="txtFind" fckLang="DlgMyReplaceFindLbl">Find what:</label>
|
||||||
|
</td>
|
||||||
|
<td width="100%"><input id="txtFind" onkeyup="btnStat(this.form)" style="WIDTH: 100%" tabIndex="1" type="text">
|
||||||
|
</td>
|
||||||
|
<td><input id="btnReplace" style="WIDTH: 100%" disabled onclick="Replace();" type="button"
|
||||||
|
value="Replace" fckLang="DlgMyReplaceReplaceBtn">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td vAlign="top" nowrap><label for="txtReplace" fckLang="DlgMyReplaceReplaceLbl">Replace
|
||||||
|
with:</label>
|
||||||
|
</td>
|
||||||
|
<td vAlign="top"><input id="txtReplace" style="WIDTH: 100%" tabIndex="2" type="text">
|
||||||
|
</td>
|
||||||
|
<td><input id="btnReplaceAll" disabled onclick="ReplaceAll()" type="button" value="Replace All"
|
||||||
|
fckLang="DlgMyReplaceReplAllBtn">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td vAlign="bottom" colSpan="3"> <input id="chkCase" tabIndex="3" type="checkbox"><label for="chkCase" fckLang="DlgMyReplaceCaseChk">Match
|
||||||
|
case</label>
|
||||||
|
<br>
|
||||||
|
<input id="chkWord" tabIndex="4" type="checkbox"><label for="chkWord" fckLang="DlgMyReplaceWordChk">Match
|
||||||
|
whole word</label>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
73
fckeditor/_samples/_plugins/samples/fckplugin.js
Normal file
73
fckeditor/_samples/_plugins/samples/fckplugin.js
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* This is a sample plugin definition file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Here we define our custom Style combo, with custom widths.
|
||||||
|
var oMyBigStyleCombo = new FCKToolbarStyleCombo() ;
|
||||||
|
oMyBigStyleCombo.FieldWidth = 250 ;
|
||||||
|
oMyBigStyleCombo.PanelWidth = 300 ;
|
||||||
|
FCKToolbarItems.RegisterItem( 'My_BigStyle', oMyBigStyleCombo ) ;
|
||||||
|
|
||||||
|
|
||||||
|
// ##### Defining a custom context menu entry.
|
||||||
|
|
||||||
|
// ## 1. Define the command to be executed when selecting the context menu item.
|
||||||
|
var oMyCMCommand = new Object() ;
|
||||||
|
oMyCMCommand.Name = 'OpenImage' ;
|
||||||
|
|
||||||
|
// This is the standard function used to execute the command (called when clicking in the context menu item).
|
||||||
|
oMyCMCommand.Execute = function()
|
||||||
|
{
|
||||||
|
// This command is called only when an image element is selected (IMG).
|
||||||
|
// Get image URL (src).
|
||||||
|
var sUrl = FCKSelection.GetSelectedElement().src ;
|
||||||
|
|
||||||
|
// Open the URL in a new window.
|
||||||
|
window.top.open( sUrl ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is the standard function used to retrieve the command state (it could be disabled for some reason).
|
||||||
|
oMyCMCommand.GetState = function()
|
||||||
|
{
|
||||||
|
// Let's make it always enabled.
|
||||||
|
return FCK_TRISTATE_OFF ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ## 2. Register our custom command.
|
||||||
|
FCKCommands.RegisterCommand( 'OpenImage', oMyCMCommand ) ;
|
||||||
|
|
||||||
|
// ## 3. Define the context menu "listener".
|
||||||
|
var oMyContextMenuListener = new Object() ;
|
||||||
|
|
||||||
|
// This is the standard function called right before sowing the context menu.
|
||||||
|
oMyContextMenuListener.AddItems = function( contextMenu, tag, tagName )
|
||||||
|
{
|
||||||
|
// Let's show our custom option only for images.
|
||||||
|
if ( tagName == 'IMG' )
|
||||||
|
{
|
||||||
|
contextMenu.AddSeparator() ;
|
||||||
|
contextMenu.AddItem( 'OpenImage', 'Open image in a new window (Custom)' ) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ## 4. Register our context menu listener.
|
||||||
|
FCK.ContextMenu.RegisterListener( oMyContextMenuListener ) ;
|
34
fckeditor/_samples/adobeair/application.xml
Normal file
34
fckeditor/_samples/adobeair/application.xml
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<application xmlns="http://ns.adobe.com/air/application/1.0">
|
||||||
|
<id>net.fckeditor.air.samples.sample01</id>
|
||||||
|
<name>FCKeditor Sample Application 1.0</name>
|
||||||
|
<version>1.0</version>
|
||||||
|
<filename>FCKeditor AIR Sample</filename>
|
||||||
|
<description>This is a sample AIR application including FCKeditor.</description>
|
||||||
|
<copyright>Copyright (C) 2003-2008 Frederico Caldeira Knabben</copyright>
|
||||||
|
<initialWindow>
|
||||||
|
<content>_samples/adobeair/sample01.html</content>
|
||||||
|
<title>FCKeditor AIR Sample</title>
|
||||||
|
<systemChrome>standard</systemChrome>
|
||||||
|
<transparent>false</transparent>
|
||||||
|
<visible>true</visible>
|
||||||
|
<minimizable>true</minimizable>
|
||||||
|
<maximizable>true</maximizable>
|
||||||
|
<resizable>true</resizable>
|
||||||
|
<x>100</x>
|
||||||
|
<y>80</y>
|
||||||
|
<width>820</width>
|
||||||
|
<height>600</height>
|
||||||
|
<minSize>600 400</minSize>
|
||||||
|
</initialWindow>
|
||||||
|
<installFolder>FCKeditor/AIR Samples/Sample01</installFolder>
|
||||||
|
<programMenuFolder>FCKeditor/AIR Samples</programMenuFolder>
|
||||||
|
<icon>
|
||||||
|
<image16x16>_samples/adobeair/icons/16.png</image16x16>
|
||||||
|
<image32x32>_samples/adobeair/icons/32.png</image32x32>
|
||||||
|
<image48x48>_samples/adobeair/icons/48.png</image48x48>
|
||||||
|
<image128x128>_samples/adobeair/icons/128.png</image128x128>
|
||||||
|
</icon>
|
||||||
|
<customUpdateUI>false</customUpdateUI>
|
||||||
|
<allowBrowserInvocation>false</allowBrowserInvocation>
|
||||||
|
</application>
|
BIN
fckeditor/_samples/adobeair/icons/128.png
Normal file
BIN
fckeditor/_samples/adobeair/icons/128.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
BIN
fckeditor/_samples/adobeair/icons/16.png
Normal file
BIN
fckeditor/_samples/adobeair/icons/16.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 273 B |
BIN
fckeditor/_samples/adobeair/icons/32.png
Normal file
BIN
fckeditor/_samples/adobeair/icons/32.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 562 B |
BIN
fckeditor/_samples/adobeair/icons/48.png
Normal file
BIN
fckeditor/_samples/adobeair/icons/48.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 563 B |
26
fckeditor/_samples/adobeair/package.bat
Normal file
26
fckeditor/_samples/adobeair/package.bat
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
@ECHO OFF
|
||||||
|
|
||||||
|
::
|
||||||
|
:: FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
:: Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
::
|
||||||
|
:: == BEGIN LICENSE ==
|
||||||
|
::
|
||||||
|
:: Licensed under the terms of any of the following licenses at your
|
||||||
|
:: choice:
|
||||||
|
::
|
||||||
|
:: - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
:: http://www.gnu.org/licenses/gpl.html
|
||||||
|
::
|
||||||
|
:: - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
:: http://www.gnu.org/licenses/lgpl.html
|
||||||
|
::
|
||||||
|
:: - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
:: http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
::
|
||||||
|
:: == END LICENSE ==
|
||||||
|
::
|
||||||
|
|
||||||
|
:: adt -package SIGNING_OPTIONS air_file app_xml [file_or_dir | -C dir file_or_dir | -e file dir ...] ...
|
||||||
|
|
||||||
|
"C:\Adobe AIR SDK\bin\adt" -package -storetype pkcs12 -keystore sample01_cert.pfx -storepass 123abc FCKeditor.air application.xml -C ../../ .
|
26
fckeditor/_samples/adobeair/run.bat
Normal file
26
fckeditor/_samples/adobeair/run.bat
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
@ECHO OFF
|
||||||
|
|
||||||
|
::
|
||||||
|
:: FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
:: Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
::
|
||||||
|
:: == BEGIN LICENSE ==
|
||||||
|
::
|
||||||
|
:: Licensed under the terms of any of the following licenses at your
|
||||||
|
:: choice:
|
||||||
|
::
|
||||||
|
:: - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
:: http://www.gnu.org/licenses/gpl.html
|
||||||
|
::
|
||||||
|
:: - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
:: http://www.gnu.org/licenses/lgpl.html
|
||||||
|
::
|
||||||
|
:: - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
:: http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
::
|
||||||
|
:: == END LICENSE ==
|
||||||
|
::
|
||||||
|
|
||||||
|
:: adl [-runtime runtime-directory] [-pubId publisher-id] [-nodebug] application.xml [rootdirectory] [-- arguments]
|
||||||
|
|
||||||
|
"C:\Adobe AIR SDK\bin\adl" application.xml ../../
|
58
fckeditor/_samples/adobeair/sample01.html
Normal file
58
fckeditor/_samples/adobeair/sample01.html
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample Adobe AIR application.
|
||||||
|
-->
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Adobe AIR Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript" src="../../fckeditor.js"></script>
|
||||||
|
<style type="text/css">
|
||||||
|
body { margin: 10px ; }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>
|
||||||
|
FCKeditor - Adobe AIR Sample
|
||||||
|
</h1>
|
||||||
|
<div>
|
||||||
|
This sample loads FCKeditor with full features enabled.
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
// oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
var sBasePath = document.location.href.substring(0,document.location.href.lastIndexOf('_samples')) ;
|
||||||
|
|
||||||
|
var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
|
||||||
|
oFCKeditor.BasePath = sBasePath ;
|
||||||
|
oFCKeditor.Height = 400 ;
|
||||||
|
oFCKeditor.Value = '<p>FCKeditor is in the <strong>AIR</strong>!<\/p>' ;
|
||||||
|
oFCKeditor.Create() ;
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
BIN
fckeditor/_samples/adobeair/sample01_cert.pfx
Normal file
BIN
fckeditor/_samples/adobeair/sample01_cert.pfx
Normal file
Binary file not shown.
1
fckeditor/_samples/afp/fck.afpa
Normal file
1
fckeditor/_samples/afp/fck.afpa
Normal file
@ -0,0 +1 @@
|
|||||||
|
<application ID="fck"/>
|
165
fckeditor/_samples/afp/fck.afpa.code
Normal file
165
fckeditor/_samples/afp/fck.afpa.code
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* This is the class definition file for the sample pages.
|
||||||
|
*
|
||||||
|
|
||||||
|
DEFINE CLASS fckeditor AS custom
|
||||||
|
cInstanceName =""
|
||||||
|
BasePath =""
|
||||||
|
cWIDTH =""
|
||||||
|
cHEIGHT =""
|
||||||
|
ToolbarSet =""
|
||||||
|
cValue=""
|
||||||
|
DIMENSION aConfig(10,2)
|
||||||
|
|
||||||
|
&& -----------------------------------------------------------------------
|
||||||
|
FUNCTION fckeditor( tcInstanceName )
|
||||||
|
LOCAL lnLoop,lnLoop2
|
||||||
|
THIS.cInstanceName = tcInstanceName
|
||||||
|
THIS.BasePath = '../../../FCKeditor/'
|
||||||
|
THIS.cWIDTH = '100%'
|
||||||
|
THIS.cHEIGHT = '200'
|
||||||
|
THIS.ToolbarSet = 'Default'
|
||||||
|
THIS.cValue = ''
|
||||||
|
FOR lnLoop=1 TO 10
|
||||||
|
FOR lnLoop2=1 TO 2
|
||||||
|
THIS.aConfig(lnLoop,lnLoop2) = ""
|
||||||
|
NEXT
|
||||||
|
NEXT
|
||||||
|
RETURN
|
||||||
|
ENDFUNC
|
||||||
|
|
||||||
|
|
||||||
|
&& -----------------------------------------------------------------------
|
||||||
|
FUNCTION CREATE()
|
||||||
|
RETURN(THIS.CreateHtml())
|
||||||
|
ENDFUNC
|
||||||
|
|
||||||
|
&& -----------------------------------------------------------------------
|
||||||
|
FUNCTION CreateHtml()
|
||||||
|
LOCAL html
|
||||||
|
LOCAL lcLink
|
||||||
|
|
||||||
|
HtmlValue = THIS.cValue && HTMLSPECIALCHARS()
|
||||||
|
|
||||||
|
html = [<div>]
|
||||||
|
IF THIS.IsCompatible()
|
||||||
|
lcLink = THIS.BasePath+[editor/fckeditor.html?InstanceName=]+THIS.cInstanceName
|
||||||
|
|
||||||
|
IF ( !THIS.ToolbarSet == '' )
|
||||||
|
lcLink = lcLink + [&Toolbar=]+THIS.ToolbarSet
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
&& Render the LINKED HIDDEN FIELD.
|
||||||
|
html = html + [<input type="hidden" id="]+THIS.cInstanceName +[" name="]+THIS.cInstanceName +[" value="]+HtmlValue+[">]
|
||||||
|
|
||||||
|
&& Render the configurations HIDDEN FIELD.
|
||||||
|
html = html + [<input type="hidden" id="]+THIS.cInstanceName +[___Config" value="]+THIS.GetConfigFieldString() + [">] +CHR(13)+CHR(10)
|
||||||
|
|
||||||
|
&& Render the EDITOR IFRAME.
|
||||||
|
html = html + [<iframe id="]+THIS.cInstanceName +[___Frame" src="]+lcLink+[" width="]+THIS.cWIDTH+[" height="]+THIS.cHEIGHT+[" frameborder="no" scrolling="no"></iframe>]
|
||||||
|
ELSE
|
||||||
|
IF ( AT("%", THIS.cWIDTH)=0 )
|
||||||
|
WidthCSS = THIS.cWIDTH + 'px'
|
||||||
|
ELSE
|
||||||
|
WidthCSS = THIS.cWIDTH
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
IF ( AT("%",THIS.cHEIGHT)=0 )
|
||||||
|
HeightCSS = THIS.cHEIGHT + 'px'
|
||||||
|
ELSE
|
||||||
|
HeightCSS = THIS.cHEIGHT
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
html = html + [<textarea name="]+THIS.cInstanceName +[" rows="4" cols="40" style="width: ]+WidthCSS+[ height: ]+HeightCSS+[" wrap="virtual">]+HtmlValue+[</textarea>]
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
html = html + [</div>]
|
||||||
|
|
||||||
|
RETURN (html)
|
||||||
|
ENDFUNC
|
||||||
|
|
||||||
|
|
||||||
|
&& -----------------------------------------------------------------------
|
||||||
|
FUNCTION IsCompatible()
|
||||||
|
LOCAL llRetval
|
||||||
|
LOCAL sAgent
|
||||||
|
|
||||||
|
llRetval=.F.
|
||||||
|
|
||||||
|
sAgent= LOWER(Request.ServerVariables("HTTP_USER_AGENT"))
|
||||||
|
|
||||||
|
IF AT("msie",sAgent) >0 .AND. AT("mac",sAgent)=0 .AND. AT("opera",sAgent)=0
|
||||||
|
iVersion=VAL(SUBSTR(sAgent,AT("msie",sAgent)+5,3))
|
||||||
|
llRetval= iVersion > 5.5
|
||||||
|
ELSE
|
||||||
|
IF AT("gecko",sAgent)>0
|
||||||
|
iVersion=VAL(SUBSTR(sAgent,AT("gecko/",sAgent)+6,8))
|
||||||
|
llRetval =iVersion > 20030210
|
||||||
|
ENDIF
|
||||||
|
ENDIF
|
||||||
|
RETURN (llRetval)
|
||||||
|
ENDFUNC
|
||||||
|
|
||||||
|
&& -----------------------------------------------------------------------
|
||||||
|
FUNCTION GetConfigFieldString()
|
||||||
|
LOCAL sParams
|
||||||
|
LOCAL bFirst
|
||||||
|
LOCAL sKey
|
||||||
|
sParams = ""
|
||||||
|
bFirst = .T.
|
||||||
|
FOR lnLoop=1 TO 10 && ALEN(this.aconfig)
|
||||||
|
IF !EMPTY(THIS.aConfig(lnLoop,1))
|
||||||
|
IF bFirst = .F.
|
||||||
|
sParams = sParams + "&"
|
||||||
|
ELSE
|
||||||
|
bFirst = .F.
|
||||||
|
ENDIF
|
||||||
|
sParams = sParams +THIS.aConfig(lnLoop,1)+[=]+THIS.aConfig(lnLoop,2)
|
||||||
|
ELSE
|
||||||
|
EXIT
|
||||||
|
ENDIF
|
||||||
|
NEXT
|
||||||
|
RETURN(sParams)
|
||||||
|
ENDFUNC
|
||||||
|
&& -----------------------------------------------------------------------
|
||||||
|
&& This function removes unwanted characters in URL parameters mostly entered by hackers
|
||||||
|
|
||||||
|
FUNCTION StripAttacks
|
||||||
|
LPARAMETERS tcString
|
||||||
|
IF !EMPTY(tcString)
|
||||||
|
tcString=STRTRAN(tcString,"&","")
|
||||||
|
tcString=STRTRAN(tcString,"?","")
|
||||||
|
tcString=STRTRAN(tcString,";","")
|
||||||
|
tcString=STRTRAN(tcString,"!","")
|
||||||
|
tcString=STRTRAN(tcString,"<%","")
|
||||||
|
tcString=STRTRAN(tcString,"%>","")
|
||||||
|
tcString=STRTRAN(tcString,"<","")
|
||||||
|
tcString=STRTRAN(tcString,">","")
|
||||||
|
tcString=STRTRAN(tcString,"..","")
|
||||||
|
tcString=STRTRAN(tcString,"/","")
|
||||||
|
tcString=STRTRAN(tcString,"\","")
|
||||||
|
tcString=STRTRAN(tcString,":","")
|
||||||
|
ELSE
|
||||||
|
tcString=""
|
||||||
|
ENDIF
|
||||||
|
RETURN (tcString)
|
||||||
|
|
||||||
|
ENDDEFINE
|
56
fckeditor/_samples/afp/sample01.afp
Normal file
56
fckeditor/_samples/afp/sample01.afp
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
<%
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* This page lists the data posted by a form.
|
||||||
|
*
|
||||||
|
%>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - AFP Sample 1</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - AFP - Sample 1</h1>
|
||||||
|
This sample displays a normal HTML form with an FCKeditor with full features enabled.
|
||||||
|
<hr>
|
||||||
|
<form action="sampleposteddata.afp" method="post" target="_blank">
|
||||||
|
<%
|
||||||
|
|
||||||
|
sBasePath="../../../fckeditor/" && Change this to your local path
|
||||||
|
|
||||||
|
lcText=[<p>This is some <strong>sample text</strong>. You are using ]
|
||||||
|
lcText=lcText+[<a href='http://www.fckeditor.net/'>FCKeditor</a>.]
|
||||||
|
|
||||||
|
oFCKeditor = CREATEOBJECT("FCKeditor")
|
||||||
|
oFCKeditor.fckeditor("FCKeditor1")
|
||||||
|
oFCKeditor.BasePath = sBasePath
|
||||||
|
oFCKeditor.cValue = lcText
|
||||||
|
|
||||||
|
? oFCKeditor.Create()
|
||||||
|
|
||||||
|
%>
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
113
fckeditor/_samples/afp/sample02.afp
Normal file
113
fckeditor/_samples/afp/sample02.afp
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
<%
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* This page is a basic Sample for FCKeditor integration in the AFP script language (www.afpages.de)
|
||||||
|
*
|
||||||
|
%>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - AFP Sample 2</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
var oCombo = document.getElementById( 'cmbLanguages' ) ;
|
||||||
|
for ( code in editorInstance.Language.AvailableLanguages )
|
||||||
|
{
|
||||||
|
AddComboOption( oCombo, editorInstance.Language.AvailableLanguages[code] + ' (' + code + ')', code ) ;
|
||||||
|
}
|
||||||
|
oCombo.value = editorInstance.Language.ActiveLanguage.Code ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function AddComboOption(combo, optionText, optionValue)
|
||||||
|
{
|
||||||
|
var oOption = document.createElement("OPTION") ;
|
||||||
|
|
||||||
|
combo.options.add(oOption) ;
|
||||||
|
|
||||||
|
oOption.innerHTML = optionText ;
|
||||||
|
oOption.value = optionValue ;
|
||||||
|
|
||||||
|
return oOption ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeLanguage( languageCode )
|
||||||
|
{
|
||||||
|
window.location.href = window.location.pathname + "?Lang=" + languageCode ;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - AFP - Sample 2</h1>
|
||||||
|
This sample shows the editor in all its available languages.
|
||||||
|
<hr>
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select a language:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbLanguages" onchange="ChangeLanguage(this.value);">
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<form action="sampleposteddata.afp" method="post" target="_blank">
|
||||||
|
<%
|
||||||
|
|
||||||
|
sBasePath="../../../fckeditor/" && Change this to your local path
|
||||||
|
|
||||||
|
oFCKeditor = CREATEOBJECT("FCKeditor")
|
||||||
|
oFCKeditor.fckeditor("FCKeditor1")
|
||||||
|
|
||||||
|
lcLanguage="" && Initialize Variable
|
||||||
|
lcLanguage=request.querystring("Lang") && Request Parameter
|
||||||
|
lcLanguage=oFCKeditor.StripAttacks(lcLanguage) && Remove special escape characters
|
||||||
|
IF EMPTY(lcLanguage)
|
||||||
|
oFCKeditor.aconfig[1,1]="AutoDetectLanguage"
|
||||||
|
oFCKeditor.aconfig[1,2]="true"
|
||||||
|
oFCKeditor.aconfig[2,1]="DefaultLanguage"
|
||||||
|
oFCKeditor.aconfig[2,2]="en"
|
||||||
|
ELSE
|
||||||
|
oFCKeditor.aconfig[1,1]="AutoDetectLanguage"
|
||||||
|
oFCKeditor.aconfig[1,2]="false"
|
||||||
|
oFCKeditor.aconfig[2,1]="DefaultLanguage"
|
||||||
|
oFCKeditor.aconfig[2,2]=lcLanguage
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
lcText=[<p>This is some <strong>sample text</strong>. You are using ]
|
||||||
|
lcText=lcText+[<a href='http://www.fckeditor.net/'>FCKeditor</a>.]
|
||||||
|
|
||||||
|
oFCKeditor.BasePath = sBasePath
|
||||||
|
oFCKeditor.cValue = lcText
|
||||||
|
|
||||||
|
? oFCKeditor.Create()
|
||||||
|
|
||||||
|
%>
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
91
fckeditor/_samples/afp/sample03.afp
Normal file
91
fckeditor/_samples/afp/sample03.afp
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
<%
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* This page is a basic Sample for FCKeditor integration in the AFP script language (www.afpages.de)
|
||||||
|
*
|
||||||
|
%>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - AFP Sample 3</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
var oCombo = document.getElementById( 'cmbToolbars' ) ;
|
||||||
|
oCombo.value = editorInstance.ToolbarSet.Name ;
|
||||||
|
oCombo.style.visibility = '' ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeToolbar( toolbarName )
|
||||||
|
{
|
||||||
|
window.location.href = window.location.pathname + "?Toolbar=" + toolbarName ;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - AFP - Sample 3</h1>
|
||||||
|
This sample shows how to change the editor toolbar.
|
||||||
|
<hr>
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select the toolbar to load:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbToolbars" onchange="ChangeToolbar(this.value);" style="VISIBILITY: hidden">
|
||||||
|
<option value="Default" selected>Default</option>
|
||||||
|
<option value="Basic">Basic</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<form action="sampleposteddata.afp" method="post" target="_blank">
|
||||||
|
<%
|
||||||
|
|
||||||
|
sBasePath="../../../fckeditor/" && Change this to your local path
|
||||||
|
|
||||||
|
oFCKeditor = CREATEOBJECT("FCKeditor")
|
||||||
|
oFCKeditor.fckeditor("FCKeditor1")
|
||||||
|
|
||||||
|
lcToolbar=request.querystring("Toolbar") && Request Parameter
|
||||||
|
lcToolbar=oFCKeditor.StripAttacks(lcToolbar) && Remove special escape characters
|
||||||
|
IF !EMPTY(lcToolbar)
|
||||||
|
oFCKeditor.ToolbarSet=lcToolbar
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
lcText=[<p>This is some <strong>sample text</strong>. You are using ]
|
||||||
|
lcText=lcText+[<a href='http://www.fckeditor.net/'>FCKeditor</a>.]
|
||||||
|
|
||||||
|
oFCKeditor.BasePath = sBasePath
|
||||||
|
oFCKeditor.cValue = lcText
|
||||||
|
|
||||||
|
? oFCKeditor.Create()
|
||||||
|
|
||||||
|
%>
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
98
fckeditor/_samples/afp/sample04.afp
Normal file
98
fckeditor/_samples/afp/sample04.afp
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
<%
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* This page is a basic Sample for FCKeditor integration in the AFP script language (www.afpages.de)
|
||||||
|
*
|
||||||
|
%>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - AFP Sample 4</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
var oCombo = document.getElementById( 'cmbSkins' ) ;
|
||||||
|
|
||||||
|
// Get the active skin.
|
||||||
|
var sSkin = editorInstance.Config['SkinPath'] ;
|
||||||
|
sSkin = sSkin.match( /[^\/]+(?=\/$)/g ) ;
|
||||||
|
|
||||||
|
oCombo.value = sSkin ;
|
||||||
|
oCombo.style.visibility = '' ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeSkin( skinName )
|
||||||
|
{
|
||||||
|
window.location.href = window.location.pathname + "?Skin=" + skinName ;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - AFP - Sample 4</h1>
|
||||||
|
This sample shows how to change the editor skin.
|
||||||
|
<hr>
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select the skin to load:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbSkins" onchange="ChangeSkin(this.value);" style="VISIBILITY: hidden">
|
||||||
|
<option value="default" selected>Default</option>
|
||||||
|
<option value="office2003">Office 2003</option>
|
||||||
|
<option value="silver">Silver</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<form action="sampleposteddata.afp" method="post" target="_blank">
|
||||||
|
<%
|
||||||
|
|
||||||
|
sBasePath="../../../fckeditor/" && <-- Change this to your local path
|
||||||
|
|
||||||
|
oFCKeditor = CREATEOBJECT("FCKeditor")
|
||||||
|
oFCKeditor.fckeditor("FCKeditor1")
|
||||||
|
|
||||||
|
lcSkin=request.querystring("Skin") && Request Parameter
|
||||||
|
lcSkin=oFCKeditor.StripAttacks(lcSkin) && Remove special escape characters
|
||||||
|
IF !EMPTY(lcSkin)
|
||||||
|
oFCKeditor.aconfig[1,1]="SkinPath"
|
||||||
|
oFCKeditor.aconfig[1,2]="/fckeditor/editor/skins/"+lcSkin+"/" && <-- Change this to your local path
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
lcText=[<p>This is some <strong>sample text</strong>. You are using ]
|
||||||
|
lcText=lcText+[<a href='http://www.fckeditor.net/'>FCKeditor</a>.]
|
||||||
|
|
||||||
|
oFCKeditor.BasePath = sBasePath
|
||||||
|
oFCKeditor.cValue = lcText
|
||||||
|
|
||||||
|
? oFCKeditor.Create()
|
||||||
|
|
||||||
|
%>
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
63
fckeditor/_samples/afp/sampleposteddata.afp
Normal file
63
fckeditor/_samples/afp/sampleposteddata.afp
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
<%
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* This page lists the data posted by a form.
|
||||||
|
*
|
||||||
|
%>
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - AFP - Samples - Posted Data</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - Samples - Posted Data</h1>
|
||||||
|
This page lists all data posted by the form.
|
||||||
|
<hr>
|
||||||
|
<table border="1" cellspacing="0" id="outputSample">
|
||||||
|
<colgroup><col width="80"><col></colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Field Name</th>
|
||||||
|
<th>Value</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<%
|
||||||
|
lcForm=REQUEST.Form()
|
||||||
|
lcForm=STRTRAN(lcForm,"&",CHR(13)+CHR(10))
|
||||||
|
|
||||||
|
FOR lnLoop=1 TO MEMLINES(lcForm)
|
||||||
|
lcZeile=ALLTRIM(MLINE(lcForm,lnLoop))
|
||||||
|
IF AT("=",lcZeile)>0
|
||||||
|
lcVariable=UPPER(ALLTRIM(LEFT(lcZeile,AT("=",lcZeile)-1)))
|
||||||
|
lcWert=ALLTRIM(RIGHT(lcZeile,LEN(lcZeile)-AT("=",lcZeile)))
|
||||||
|
lcWert=Server.UrlDecode( lcWert )
|
||||||
|
lcWert=STRTRAN(lcWert,"<","<")
|
||||||
|
lcWert=STRTRAN(lcWert,">",">") && ... if wanted remove/translate HTML Chars ...
|
||||||
|
|
||||||
|
? [<tr><th>]+lcVariable+[ =</th><td><pre>]+lcWert+[</pre></td></tr>]
|
||||||
|
ENDIF
|
||||||
|
NEXT
|
||||||
|
%>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
62
fckeditor/_samples/asp/sample01.asp
Normal file
62
fckeditor/_samples/asp/sample01.asp
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
<%@ codepage="65001" language="VBScript" %>
|
||||||
|
<% Option Explicit %>
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
-->
|
||||||
|
<% ' You must set "Enable Parent Paths" on your web site in order this relative include to work. %>
|
||||||
|
<!-- #INCLUDE file="../../fckeditor.asp" -->
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>
|
||||||
|
FCKeditor - ASP - Sample 1
|
||||||
|
</h1>
|
||||||
|
<div>
|
||||||
|
This sample displays a normal HTML form with an FCKeditor with full features enabled.
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<form action="sampleposteddata.asp" method="post" target="_blank">
|
||||||
|
<%
|
||||||
|
' Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
' This is usefull only for these samples. A real application should use something like this:
|
||||||
|
' oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
Dim sBasePath
|
||||||
|
sBasePath = Request.ServerVariables("PATH_INFO")
|
||||||
|
sBasePath = Left( sBasePath, InStrRev( sBasePath, "/_samples" ) )
|
||||||
|
|
||||||
|
Dim oFCKeditor
|
||||||
|
Set oFCKeditor = New FCKeditor
|
||||||
|
oFCKeditor.BasePath = sBasePath
|
||||||
|
oFCKeditor.Value = "<p>This is some <strong>sample text</strong>. You are using <a href=""http://www.fckeditor.net/"">FCKeditor</a>."
|
||||||
|
oFCKeditor.Create "FCKeditor1"
|
||||||
|
%>
|
||||||
|
<br />
|
||||||
|
<input type="submit" value="Submit" />
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
108
fckeditor/_samples/asp/sample02.asp
Normal file
108
fckeditor/_samples/asp/sample02.asp
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
<%@ CodePage=65001 Language="VBScript"%>
|
||||||
|
<% Option Explicit %>
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
-->
|
||||||
|
<% ' You must set "Enable Parent Paths" on your web site in order this relative include to work. %>
|
||||||
|
<!-- #INCLUDE file="../../fckeditor.asp" -->
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
var oCombo = document.getElementById( 'cmbLanguages' ) ;
|
||||||
|
for ( code in editorInstance.Language.AvailableLanguages )
|
||||||
|
{
|
||||||
|
AddComboOption( oCombo, editorInstance.Language.AvailableLanguages[code] + ' (' + code + ')', code ) ;
|
||||||
|
}
|
||||||
|
oCombo.value = editorInstance.Language.ActiveLanguage.Code ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function AddComboOption(combo, optionText, optionValue)
|
||||||
|
{
|
||||||
|
var oOption = document.createElement("OPTION") ;
|
||||||
|
|
||||||
|
combo.options.add(oOption) ;
|
||||||
|
|
||||||
|
oOption.innerHTML = optionText ;
|
||||||
|
oOption.value = optionValue ;
|
||||||
|
|
||||||
|
return oOption ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeLanguage( languageCode )
|
||||||
|
{
|
||||||
|
window.location.href = window.location.pathname + "?Lang=" + languageCode ;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - ASP - Sample 2</h1>
|
||||||
|
This sample shows the editor in all its available languages.
|
||||||
|
<hr>
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select a language:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbLanguages" onchange="ChangeLanguage(this.value);">
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<form action="sampleposteddata.asp" method="post" target="_blank">
|
||||||
|
<%
|
||||||
|
' Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
' This is usefull only for these samples. A real application should use something like this:
|
||||||
|
' oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
Dim sBasePath
|
||||||
|
sBasePath = Request.ServerVariables("PATH_INFO")
|
||||||
|
sBasePath = Left( sBasePath, InStrRev( sBasePath, "/_samples" ) )
|
||||||
|
|
||||||
|
Dim oFCKeditor
|
||||||
|
Set oFCKeditor = New FCKeditor
|
||||||
|
oFCKeditor.BasePath = sBasePath
|
||||||
|
|
||||||
|
If Request.QueryString("Lang") = "" Then
|
||||||
|
oFCKeditor.Config("AutoDetectLanguage") = True
|
||||||
|
oFCKeditor.Config("DefaultLanguage") = "en"
|
||||||
|
Else
|
||||||
|
oFCKeditor.Config("AutoDetectLanguage") = False
|
||||||
|
oFCKeditor.Config("DefaultLanguage") = Request.QueryString("Lang")
|
||||||
|
End If
|
||||||
|
|
||||||
|
oFCKeditor.Value = "<p>This is some <strong>sample text</strong>. You are using <a href=""http://www.fckeditor.net/"">FCKeditor</a>."
|
||||||
|
oFCKeditor.Create "FCKeditor1"
|
||||||
|
%>
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
92
fckeditor/_samples/asp/sample03.asp
Normal file
92
fckeditor/_samples/asp/sample03.asp
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<%@ CodePage=65001 Language="VBScript"%>
|
||||||
|
<% Option Explicit %>
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
-->
|
||||||
|
<% ' You must set "Enable Parent Paths" on your web site in order this relative include to work. %>
|
||||||
|
<!-- #INCLUDE file="../../fckeditor.asp" -->
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
var oCombo = document.getElementById( 'cmbToolbars' ) ;
|
||||||
|
oCombo.value = editorInstance.ToolbarSet.Name ;
|
||||||
|
oCombo.style.visibility = '' ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeToolbar( toolbarName )
|
||||||
|
{
|
||||||
|
window.location.href = window.location.pathname + "?Toolbar=" + toolbarName ;
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - ASP - Sample 3</h1>
|
||||||
|
This sample shows how to change the editor toolbar.
|
||||||
|
<hr>
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select the toolbar to load:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbToolbars" onchange="ChangeToolbar(this.value);" style="VISIBILITY: hidden">
|
||||||
|
<option value="Default" selected>Default</option>
|
||||||
|
<option value="Basic">Basic</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<form action="sampleposteddata.asp" method="post" target="_blank">
|
||||||
|
<%
|
||||||
|
' Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
' This is usefull only for these samples. A real application should use something like this:
|
||||||
|
' oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
Dim sBasePath
|
||||||
|
sBasePath = Request.ServerVariables("PATH_INFO")
|
||||||
|
sBasePath = Left( sBasePath, InStrRev( sBasePath, "/_samples" ) )
|
||||||
|
|
||||||
|
Dim oFCKeditor
|
||||||
|
Set oFCKeditor = New FCKeditor
|
||||||
|
oFCKeditor.BasePath = sBasePath
|
||||||
|
|
||||||
|
If Request.QueryString("Toolbar") <> "" Then
|
||||||
|
oFCKeditor.ToolbarSet = Server.HTMLEncode( Request.QueryString("Toolbar") )
|
||||||
|
End If
|
||||||
|
|
||||||
|
oFCKeditor.Value = "<p>This is some <strong>sample text</strong>. You are using <a href=""http://www.fckeditor.net/"">FCKeditor</a>."
|
||||||
|
oFCKeditor.Create "FCKeditor1"
|
||||||
|
%>
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
98
fckeditor/_samples/asp/sample04.asp
Normal file
98
fckeditor/_samples/asp/sample04.asp
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
<%@ CodePage=65001 Language="VBScript"%>
|
||||||
|
<% Option Explicit %>
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
-->
|
||||||
|
<% ' You must set "Enable Parent Paths" on your web site in order this relative include to work. %>
|
||||||
|
<!-- #INCLUDE file="../../fckeditor.asp" -->
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
var oCombo = document.getElementById( 'cmbSkins' ) ;
|
||||||
|
|
||||||
|
// Get the active skin.
|
||||||
|
var sSkin = editorInstance.Config['SkinPath'] ;
|
||||||
|
sSkin = sSkin.match( /[^\/]+(?=\/$)/g ) ;
|
||||||
|
|
||||||
|
oCombo.value = sSkin ;
|
||||||
|
oCombo.style.visibility = '' ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeSkin( skinName )
|
||||||
|
{
|
||||||
|
window.location.href = window.location.pathname + "?Skin=" + skinName ;
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - ASP - Sample 4</h1>
|
||||||
|
This sample shows how to change the editor skin.
|
||||||
|
<hr>
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select the skin to load:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbSkins" onchange="ChangeSkin(this.value);" style="VISIBILITY: hidden">
|
||||||
|
<option value="default" selected>Default</option>
|
||||||
|
<option value="office2003">Office 2003</option>
|
||||||
|
<option value="silver">Silver</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<form action="sampleposteddata.asp" method="post" target="_blank">
|
||||||
|
<%
|
||||||
|
' Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
' This is usefull only for these samples. A real application should use something like this:
|
||||||
|
' oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
Dim sBasePath
|
||||||
|
sBasePath = Request.ServerVariables("PATH_INFO")
|
||||||
|
sBasePath = Left( sBasePath, InStrRev( sBasePath, "/_samples" ) )
|
||||||
|
|
||||||
|
Dim oFCKeditor
|
||||||
|
Set oFCKeditor = New FCKeditor
|
||||||
|
oFCKeditor.BasePath = sBasePath
|
||||||
|
|
||||||
|
If Request.QueryString("Skin") <> "" Then
|
||||||
|
oFCKeditor.Config("SkinPath") = sBasePath + "editor/skins/" & Server.HTMLEncode( Request.QueryString("Skin") ) + "/"
|
||||||
|
End If
|
||||||
|
|
||||||
|
oFCKeditor.Value = "<p>This is some <strong>sample text</strong>. You are using <a href=""http://www.fckeditor.net/"">FCKeditor</a>."
|
||||||
|
oFCKeditor.Create "FCKeditor1"
|
||||||
|
%>
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
56
fckeditor/_samples/asp/sampleposteddata.asp
Normal file
56
fckeditor/_samples/asp/sampleposteddata.asp
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
<%@ CodePage=65001 Language="VBScript"%>
|
||||||
|
<% Option Explicit %>
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* This page lists the data posted by a form.
|
||||||
|
-->
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Samples - Posted Data</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" >
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - Samples - Posted Data</h1>
|
||||||
|
This page lists all data posted by the form.
|
||||||
|
<hr>
|
||||||
|
<table border="1" cellspacing="0" id="outputSample">
|
||||||
|
<colgroup><col width="80"><col></colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Field Name</th>
|
||||||
|
<th>Value</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<%
|
||||||
|
Dim sForm
|
||||||
|
For Each sForm in Request.Form
|
||||||
|
%>
|
||||||
|
<tr>
|
||||||
|
<th><%=sForm%></th>
|
||||||
|
<td><pre><%=Server.HTMLEncode( Request.Form(sForm) )%></pre></td>
|
||||||
|
</tr>
|
||||||
|
<% Next %>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
63
fckeditor/_samples/cfm/sample01.cfm
Normal file
63
fckeditor/_samples/cfm/sample01.cfm
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
<cfsetting enablecfoutputonly="true">
|
||||||
|
<!---
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page for ColdFusion.
|
||||||
|
--->
|
||||||
|
|
||||||
|
<cfoutput>
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - ColdFusion - Sample 1</h1>
|
||||||
|
|
||||||
|
This sample displays a normal HTML form with a FCKeditor with full features enabled.
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<form method="POST" action="sampleposteddata.cfm">
|
||||||
|
</cfoutput>
|
||||||
|
|
||||||
|
<!--- Calculate basepath for FCKeditor. It's in the folder right above _samples --->
|
||||||
|
<cfset basePath = Left( cgi.script_name, FindNoCase( '_samples', cgi.script_name ) - 1 )>
|
||||||
|
|
||||||
|
<cfmodule
|
||||||
|
template="../../fckeditor.cfm"
|
||||||
|
basePath="#basePath#"
|
||||||
|
instanceName="myEditor"
|
||||||
|
value='<p>This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</p>'
|
||||||
|
width="100%"
|
||||||
|
height="200"
|
||||||
|
>
|
||||||
|
|
||||||
|
<cfoutput>
|
||||||
|
<br />
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
<hr />
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</cfoutput>
|
||||||
|
<cfsetting enablecfoutputonly="false">
|
67
fckeditor/_samples/cfm/sample01_mx.cfm
Normal file
67
fckeditor/_samples/cfm/sample01_mx.cfm
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
<cfsetting enablecfoutputonly="true">
|
||||||
|
<!---
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page for ColdFusion MX 6.0 and above.
|
||||||
|
--->
|
||||||
|
|
||||||
|
<cfoutput>
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - ColdFusion Component (CFC) - Sample 1</h1>
|
||||||
|
|
||||||
|
This sample displays a normal HTML form with a FCKeditor with full features enabled.
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<form method="POST" action="sampleposteddata.cfm">
|
||||||
|
</cfoutput>
|
||||||
|
|
||||||
|
<cfif listFirst( server.coldFusion.productVersion ) LT 6>
|
||||||
|
<cfoutput><br><em style="color: red;">This sample works only with a ColdFusion MX server and higher, because it uses some advantages of this version.</em></cfoutput>
|
||||||
|
<cfabort>
|
||||||
|
</cfif>
|
||||||
|
|
||||||
|
<cfscript>
|
||||||
|
// Calculate basepath for FCKeditor. It's in the folder right above _samples
|
||||||
|
basePath = Left( cgi.script_name, FindNoCase( '_samples', cgi.script_name ) - 1 ) ;
|
||||||
|
|
||||||
|
fckEditor = createObject( "component", "#basePath#fckeditor" ) ;
|
||||||
|
fckEditor.instanceName = "myEditor" ;
|
||||||
|
fckEditor.value = '<p>This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</p>' ;
|
||||||
|
fckEditor.basePath = basePath ;
|
||||||
|
fckEditor.Create() ; // create the editor.
|
||||||
|
</cfscript>
|
||||||
|
|
||||||
|
<cfoutput>
|
||||||
|
<br />
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
<hr />
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</cfoutput>
|
||||||
|
<cfsetting enablecfoutputonly="false">
|
110
fckeditor/_samples/cfm/sample02.cfm
Normal file
110
fckeditor/_samples/cfm/sample02.cfm
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
<cfsetting enablecfoutputonly="true">
|
||||||
|
<!---
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page for ColdFusion.
|
||||||
|
--->
|
||||||
|
|
||||||
|
<cfoutput>
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
var oCombo = document.getElementById( 'cmbLanguages' ) ;
|
||||||
|
for ( code in editorInstance.Language.AvailableLanguages )
|
||||||
|
{
|
||||||
|
AddComboOption( oCombo, editorInstance.Language.AvailableLanguages[code] + ' (' + code + ')', code ) ;
|
||||||
|
}
|
||||||
|
oCombo.value = editorInstance.Language.ActiveLanguage.Code ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function AddComboOption(combo, optionText, optionValue)
|
||||||
|
{
|
||||||
|
var oOption = document.createElement("OPTION") ;
|
||||||
|
|
||||||
|
combo.options.add(oOption) ;
|
||||||
|
|
||||||
|
oOption.innerHTML = optionText ;
|
||||||
|
oOption.value = optionValue ;
|
||||||
|
|
||||||
|
return oOption ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeLanguage( languageCode )
|
||||||
|
{
|
||||||
|
window.location.href = window.location.pathname + "?Lang=" + languageCode ;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - ColdFusion - Sample 2</h1>
|
||||||
|
This sample shows the editor in all its available languages.
|
||||||
|
<hr>
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select a language:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbLanguages" onchange="ChangeLanguage(this.value);">
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<form action="sampleposteddata.cfm" method="post" target="_blank">
|
||||||
|
</cfoutput>
|
||||||
|
|
||||||
|
<cfset config = structNew()>
|
||||||
|
<cfif isDefined( "URL.Lang" )>
|
||||||
|
<cfset config["AutoDetectLanguage"] = false>
|
||||||
|
<cfset config["DefaultLanguage"] = HTMLEditFormat( URL.Lang )>
|
||||||
|
<cfelse>
|
||||||
|
<cfset config["AutoDetectLanguage"] = true>
|
||||||
|
<cfset config["DefaultLanguage"] = 'en'>
|
||||||
|
</cfif>
|
||||||
|
|
||||||
|
<!--- Calculate basepath for FCKeditor. It's in the folder right above _samples --->
|
||||||
|
<cfset basePath = Left( cgi.script_name, FindNoCase( '_samples', cgi.script_name ) - 1 )>
|
||||||
|
|
||||||
|
<cfmodule
|
||||||
|
template="../../fckeditor.cfm"
|
||||||
|
basePath="#basePath#"
|
||||||
|
instanceName="myEditor"
|
||||||
|
value='<p>This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</p>'
|
||||||
|
width="100%"
|
||||||
|
height="200"
|
||||||
|
config="#config#"
|
||||||
|
>
|
||||||
|
<cfoutput>
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</cfoutput>
|
||||||
|
<cfsetting enablecfoutputonly="false">
|
114
fckeditor/_samples/cfm/sample02_mx.cfm
Normal file
114
fckeditor/_samples/cfm/sample02_mx.cfm
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
<cfsetting enablecfoutputonly="true">
|
||||||
|
<!---
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page for ColdFusion MX 6.0 and above.
|
||||||
|
--->
|
||||||
|
|
||||||
|
<cfoutput>
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
var oCombo = document.getElementById( 'cmbLanguages' ) ;
|
||||||
|
for ( code in editorInstance.Language.AvailableLanguages )
|
||||||
|
{
|
||||||
|
AddComboOption( oCombo, editorInstance.Language.AvailableLanguages[code] + ' (' + code + ')', code ) ;
|
||||||
|
}
|
||||||
|
oCombo.value = editorInstance.Language.ActiveLanguage.Code ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function AddComboOption(combo, optionText, optionValue)
|
||||||
|
{
|
||||||
|
var oOption = document.createElement("OPTION") ;
|
||||||
|
|
||||||
|
combo.options.add(oOption) ;
|
||||||
|
|
||||||
|
oOption.innerHTML = optionText ;
|
||||||
|
oOption.value = optionValue ;
|
||||||
|
|
||||||
|
return oOption ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeLanguage( languageCode )
|
||||||
|
{
|
||||||
|
window.location.href = window.location.pathname + "?Lang=" + languageCode ;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - ColdFusion Component (CFC) - Sample 2</h1>
|
||||||
|
This sample shows the editor in all its available languages.
|
||||||
|
<hr>
|
||||||
|
</cfoutput>
|
||||||
|
<cfif listFirst( server.coldFusion.productVersion ) LT 6>
|
||||||
|
<cfoutput><br><em style="color: red;">This sample works only with a ColdFusion MX server and higher, because it uses some advantages of this version.</em></cfoutput>
|
||||||
|
<cfabort>
|
||||||
|
</cfif>
|
||||||
|
<cfoutput>
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select a language:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbLanguages" onchange="ChangeLanguage(this.value);">
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<form action="sampleposteddata.cfm" method="post" target="_blank">
|
||||||
|
</cfoutput>
|
||||||
|
<cfscript>
|
||||||
|
// Calculate basepath for FCKeditor. It's in the folder right above _samples
|
||||||
|
basePath = Left( cgi.script_name, FindNoCase( '_samples', cgi.script_name ) - 1 ) ;
|
||||||
|
|
||||||
|
fckEditor = createObject( "component", "#basePath#fckeditor" ) ;
|
||||||
|
fckEditor.instanceName = "myEditor" ;
|
||||||
|
fckEditor.value = '<p>This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</p>' ;
|
||||||
|
fckEditor.basePath = basePath ;
|
||||||
|
if ( isDefined( "URL.Lang" ) )
|
||||||
|
{
|
||||||
|
fckEditor.config["AutoDetectLanguage"] = false ;
|
||||||
|
fckEditor.config["DefaultLanguage"] = HTMLEditFormat( URL.Lang ) ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fckEeditor.config["AutoDetectLanguage"] = true ;
|
||||||
|
fckEeditor.config["DefaultLanguage"] = 'en' ;
|
||||||
|
}
|
||||||
|
fckEditor.create() ; // create the editor.
|
||||||
|
</cfscript>
|
||||||
|
<cfoutput>
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</cfoutput>
|
||||||
|
<cfsetting enablecfoutputonly="false">
|
95
fckeditor/_samples/cfm/sample03.cfm
Normal file
95
fckeditor/_samples/cfm/sample03.cfm
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
<cfsetting enablecfoutputonly="true">
|
||||||
|
<!---
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page for ColdFusion.
|
||||||
|
--->
|
||||||
|
<cfoutput>
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
var oCombo = document.getElementById( 'cmbToolbars' ) ;
|
||||||
|
oCombo.value = editorInstance.ToolbarSet.Name ;
|
||||||
|
oCombo.style.visibility = '' ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeToolbar( toolbarName )
|
||||||
|
{
|
||||||
|
window.location.href = window.location.pathname + "?Toolbar=" + toolbarName ;
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - ColdFusion - Sample 3</h1>
|
||||||
|
This sample shows how to change the editor toolbar.
|
||||||
|
<hr>
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select the toolbar to load:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbToolbars" onchange="ChangeToolbar(this.value);" style="VISIBILITY: hidden">
|
||||||
|
<option value="Default" selected>Default</option>
|
||||||
|
<option value="Basic">Basic</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<form action="sampleposteddata.cfm" method="post" target="_blank">
|
||||||
|
</cfoutput>
|
||||||
|
|
||||||
|
<cfif isDefined( "URL.Toolbar" )>
|
||||||
|
<cfset toolbarSet = HTMLEditFormat( URL.Toolbar )>
|
||||||
|
<cfelse>
|
||||||
|
<cfset toolbarSet = "Default">
|
||||||
|
</cfif>
|
||||||
|
|
||||||
|
<!--- Calculate basepath for FCKeditor. It's in the folder right above _samples --->
|
||||||
|
<cfset basePath = Left( cgi.script_name, FindNoCase( '_samples', cgi.script_name ) - 1 )>
|
||||||
|
|
||||||
|
<cfmodule
|
||||||
|
template="../../fckeditor.cfm"
|
||||||
|
basePath="#basePath#"
|
||||||
|
instanceName="myEditor"
|
||||||
|
value='<p>This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</p>'
|
||||||
|
width="100%"
|
||||||
|
height="200"
|
||||||
|
toolbarSet="#toolbarSet#"
|
||||||
|
>
|
||||||
|
|
||||||
|
<cfoutput>
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</cfoutput>
|
||||||
|
<cfsetting enablecfoutputonly="false">
|
95
fckeditor/_samples/cfm/sample03_mx.cfm
Normal file
95
fckeditor/_samples/cfm/sample03_mx.cfm
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
<cfsetting enablecfoutputonly="true">
|
||||||
|
<!---
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page for ColdFusion MX 6.0 and above.
|
||||||
|
--->
|
||||||
|
<cfoutput>
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
var oCombo = document.getElementById( 'cmbToolbars' ) ;
|
||||||
|
oCombo.value = editorInstance.ToolbarSet.Name ;
|
||||||
|
oCombo.style.visibility = '' ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeToolbar( toolbarName )
|
||||||
|
{
|
||||||
|
window.location.href = window.location.pathname + "?Toolbar=" + toolbarName ;
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - ColdFusion Component (CFC) - Sample 3</h1>
|
||||||
|
This sample shows how to change the editor toolbar.
|
||||||
|
<hr>
|
||||||
|
</cfoutput>
|
||||||
|
<cfif listFirst( server.coldFusion.productVersion ) LT 6>
|
||||||
|
<cfoutput><br><em style="color: red;">This sample works only with a ColdFusion MX server and higher, because it uses some advantages of this version.</em></cfoutput>
|
||||||
|
<cfabort>
|
||||||
|
</cfif>
|
||||||
|
<cfoutput>
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select the toolbar to load:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbToolbars" onchange="ChangeToolbar(this.value);" style="VISIBILITY: hidden">
|
||||||
|
<option value="Default" selected>Default</option>
|
||||||
|
<option value="Basic">Basic</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<form action="sampleposteddata.cfm" method="post" target="_blank">
|
||||||
|
</cfoutput>
|
||||||
|
<cfscript>
|
||||||
|
// Calculate basepath for FCKeditor. It's in the folder right above _samples
|
||||||
|
basePath = Left( cgi.script_name, FindNoCase( '_samples', cgi.script_name ) - 1 ) ;
|
||||||
|
|
||||||
|
fckEditor = createObject( "component", "#basePath#fckeditor" ) ;
|
||||||
|
fckEditor.instanceName = "myEditor" ;
|
||||||
|
fckEditor.value = '<p>This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</p>' ;
|
||||||
|
fckEditor.basePath = basePath ;
|
||||||
|
if ( isDefined( "URL.Toolbar" ) )
|
||||||
|
{
|
||||||
|
fckEditor.ToolbarSet = HTMLEditFormat( URL.Toolbar ) ;
|
||||||
|
}
|
||||||
|
fckEditor.create() ; // create the editor.
|
||||||
|
</cfscript>
|
||||||
|
<cfoutput>
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</cfoutput>
|
||||||
|
<cfsetting enablecfoutputonly="false">
|
100
fckeditor/_samples/cfm/sample04.cfm
Normal file
100
fckeditor/_samples/cfm/sample04.cfm
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
<cfsetting enablecfoutputonly="true">
|
||||||
|
<!---
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page for ColdFusion.
|
||||||
|
--->
|
||||||
|
<cfoutput>
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
var oCombo = document.getElementById( 'cmbSkins' ) ;
|
||||||
|
|
||||||
|
// Get the active skin.
|
||||||
|
var sSkin = editorInstance.Config['SkinPath'] ;
|
||||||
|
sSkin = sSkin.match( /[^\/]+(?=\/$)/g ) ;
|
||||||
|
|
||||||
|
oCombo.value = sSkin ;
|
||||||
|
oCombo.style.visibility = '' ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeSkin( skinName )
|
||||||
|
{
|
||||||
|
window.location.href = window.location.pathname + "?Skin=" + skinName ;
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - ColdFusion - Sample 4</h1>
|
||||||
|
This sample shows how to change the editor skin.
|
||||||
|
<hr>
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select the skin to load:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbSkins" onchange="ChangeSkin(this.value);" style="VISIBILITY: hidden">
|
||||||
|
<option value="default" selected>Default</option>
|
||||||
|
<option value="office2003">Office 2003</option>
|
||||||
|
<option value="silver">Silver</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<form action="sampleposteddata.cfm" method="post" target="_blank">
|
||||||
|
</cfoutput>
|
||||||
|
|
||||||
|
<!--- Calculate basepath for FCKeditor. It's in the folder right above _samples --->
|
||||||
|
<cfset basePath = Left( cgi.script_name, FindNoCase( '_samples', cgi.script_name ) - 1 )>
|
||||||
|
|
||||||
|
<cfset config = structNew()>
|
||||||
|
<cfif isDefined( "URL.Skin" )>
|
||||||
|
<cfset config["SkinPath"] = basePath & 'editor/skins/' & HTMLEditFormat( URL.Skin ) & '/'>
|
||||||
|
</cfif>
|
||||||
|
|
||||||
|
<cfmodule
|
||||||
|
template="../../fckeditor.cfm"
|
||||||
|
basePath="#basePath#"
|
||||||
|
instanceName="myEditor"
|
||||||
|
value='<p>This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</p>'
|
||||||
|
width="100%"
|
||||||
|
height="200"
|
||||||
|
config="#config#"
|
||||||
|
>
|
||||||
|
|
||||||
|
<cfoutput>
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</cfoutput>
|
||||||
|
<cfsetting enablecfoutputonly="false">
|
101
fckeditor/_samples/cfm/sample04_mx.cfm
Normal file
101
fckeditor/_samples/cfm/sample04_mx.cfm
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
<cfsetting enablecfoutputonly="true">
|
||||||
|
<!---
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page for ColdFusion MX 6.0 and above.
|
||||||
|
--->
|
||||||
|
<cfoutput>
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
var oCombo = document.getElementById( 'cmbSkins' ) ;
|
||||||
|
|
||||||
|
// Get the active skin.
|
||||||
|
var sSkin = editorInstance.Config['SkinPath'] ;
|
||||||
|
sSkin = sSkin.match( /[^\/]+(?=\/$)/g ) ;
|
||||||
|
|
||||||
|
oCombo.value = sSkin ;
|
||||||
|
oCombo.style.visibility = '' ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeSkin( skinName )
|
||||||
|
{
|
||||||
|
window.location.href = window.location.pathname + "?Skin=" + skinName ;
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - ColdFusion Component (CFC) - Sample 4</h1>
|
||||||
|
This sample shows how to change the editor skin.
|
||||||
|
<hr>
|
||||||
|
</cfoutput>
|
||||||
|
<cfif listFirst( server.coldFusion.productVersion ) LT 6>
|
||||||
|
<cfoutput><br><em style="color: red;">This sample works only with a ColdFusion MX server and higher, because it uses some advantages of this version.</em></cfoutput>
|
||||||
|
<cfabort>
|
||||||
|
</cfif>
|
||||||
|
<cfoutput>
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select the skin to load:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbSkins" onchange="ChangeSkin(this.value);" style="VISIBILITY: hidden">
|
||||||
|
<option value="default" selected>Default</option>
|
||||||
|
<option value="office2003">Office 2003</option>
|
||||||
|
<option value="silver">Silver</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<form action="sampleposteddata.cfm" method="post" target="_blank">
|
||||||
|
</cfoutput>
|
||||||
|
<cfscript>
|
||||||
|
// Calculate basepath for FCKeditor. It's in the folder right above _samples
|
||||||
|
basePath = Left( cgi.script_name, FindNoCase( '_samples', cgi.script_name ) - 1 ) ;
|
||||||
|
|
||||||
|
fckEditor = createObject( "component", "#basePath#fckeditor" ) ;
|
||||||
|
fckEditor.instanceName = "myEditor" ;
|
||||||
|
fckEditor.value = '<p>This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</p>' ;
|
||||||
|
fckEditor.basePath = basePath ;
|
||||||
|
if ( isDefined( "URL.Skin" ) )
|
||||||
|
{
|
||||||
|
fckEditor.config['SkinPath'] = basePath & 'editor/skins/' & HTMLEditFormat( URL.Skin ) & '/' ;
|
||||||
|
}
|
||||||
|
fckEditor.create() ; // create the editor.
|
||||||
|
</cfscript>
|
||||||
|
<cfoutput>
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</cfoutput>
|
||||||
|
<cfsetting enablecfoutputonly="false">
|
68
fckeditor/_samples/cfm/sampleposteddata.cfm
Normal file
68
fckeditor/_samples/cfm/sampleposteddata.cfm
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
<!---
|
||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* This page lists the data posted by a form.
|
||||||
|
*/
|
||||||
|
--->
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Samples - Posted Data</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - Samples - Posted Data</h1>
|
||||||
|
This page lists all data posted by the form.
|
||||||
|
<hr>
|
||||||
|
<cfif listFirst( server.coldFusion.productVersion ) LT 6>
|
||||||
|
<cfif isDefined( 'FORM.fieldnames' )>
|
||||||
|
<cfoutput>
|
||||||
|
<hr />
|
||||||
|
<table border="1" cellspacing="0" id="outputSample">
|
||||||
|
<colgroup><col width="80"><col></colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Field Name</th>
|
||||||
|
<th>Value</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tr>
|
||||||
|
<th>FieldNames</th>
|
||||||
|
<td>#FORM.fieldNames#</td>
|
||||||
|
</tr>
|
||||||
|
<cfloop list="#FORM.fieldnames#" index="key">
|
||||||
|
<tr>
|
||||||
|
<th>#key#</th>
|
||||||
|
<td><pre>#HTMLEditFormat( evaluate( "FORM.#key#" ) )#</pre></td>
|
||||||
|
</tr>
|
||||||
|
</cfloop>
|
||||||
|
</table>
|
||||||
|
</cfoutput>
|
||||||
|
</cfif>
|
||||||
|
<cfelse>
|
||||||
|
<cfdump var="#FORM#" label="Dump of FORM Variables">
|
||||||
|
</cfif>
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
35
fckeditor/_samples/default.html
Normal file
35
fckeditor/_samples/default.html
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
|
||||||
|
"http://www.w3.org/TR/html4/frameset.dtd">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Samples Frameset page.
|
||||||
|
-->
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Samples</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
</head>
|
||||||
|
<frameset rows="60,*">
|
||||||
|
<frame src="sampleslist.html" noresize scrolling="no">
|
||||||
|
<frame name="Sample" src="html/sample01.html" noresize>
|
||||||
|
</frameset>
|
||||||
|
</html>
|
49
fckeditor/_samples/html/assets/sample06.config.js
Normal file
49
fckeditor/_samples/html/assets/sample06.config.js
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample custom configuration settings used in the plugin sample page (sample06).
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Set our sample toolbar.
|
||||||
|
FCKConfig.ToolbarSets['PluginTest'] = [
|
||||||
|
['SourceSimple'],
|
||||||
|
['My_Find','My_Replace','-','Placeholder'],
|
||||||
|
['StyleSimple','FontFormatSimple','FontNameSimple','FontSizeSimple'],
|
||||||
|
['Table','-','TableInsertRowAfter','TableDeleteRows','TableInsertColumnAfter','TableDeleteColumns','TableInsertCellAfter','TableDeleteCells','TableMergeCells','TableHorizontalSplitCell','TableCellProp'],
|
||||||
|
['Bold','Italic','-','OrderedList','UnorderedList','-','Link','Unlink'],
|
||||||
|
'/',
|
||||||
|
['My_BigStyle','-','Smiley','-','About']
|
||||||
|
] ;
|
||||||
|
|
||||||
|
// Change the default plugin path.
|
||||||
|
FCKConfig.PluginsPath = FCKConfig.BasePath.substr(0, FCKConfig.BasePath.length - 7) + '_samples/_plugins/' ;
|
||||||
|
|
||||||
|
// Add our plugin to the plugins list.
|
||||||
|
// FCKConfig.Plugins.Add( pluginName, availableLanguages )
|
||||||
|
// pluginName: The plugin name. The plugin directory must match this name.
|
||||||
|
// availableLanguages: a list of available language files for the plugin (separated by a comma).
|
||||||
|
FCKConfig.Plugins.Add( 'findreplace', 'en,fr,it' ) ;
|
||||||
|
FCKConfig.Plugins.Add( 'samples' ) ;
|
||||||
|
|
||||||
|
// If you want to use plugins found on other directories, just use the third parameter.
|
||||||
|
var sOtherPluginPath = FCKConfig.BasePath.substr(0, FCKConfig.BasePath.length - 7) + 'editor/plugins/' ;
|
||||||
|
FCKConfig.Plugins.Add( 'placeholder', 'de,en,es,fr,it,pl', sOtherPluginPath ) ;
|
||||||
|
FCKConfig.Plugins.Add( 'tablecommands', null, sOtherPluginPath ) ;
|
||||||
|
FCKConfig.Plugins.Add( 'simplecommands', null, sOtherPluginPath ) ;
|
69
fckeditor/_samples/html/assets/sample11_frame.html
Normal file
69
fckeditor/_samples/html/assets/sample11_frame.html
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
-->
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript" src="../../../fckeditor.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<form action="../../php/sampleposteddata.php" method="post" target="_blank">
|
||||||
|
Normal text field:<br />
|
||||||
|
<input name="NormaText" value="Plain Text" />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
FCKeditor 1:
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
// oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
var sBasePath = document.location.href.substring(0,document.location.href.lastIndexOf('_samples')) ;
|
||||||
|
|
||||||
|
var oFCKeditor = new FCKeditor( 'FCKeditor_1' ) ;
|
||||||
|
oFCKeditor.BasePath = sBasePath ;
|
||||||
|
oFCKeditor.Height = 100 ;
|
||||||
|
oFCKeditor.Config[ 'ToolbarLocation' ] = 'Out:parent(xToolbar)' ;
|
||||||
|
oFCKeditor.Value = '<p>This is some <strong>sample text<\/strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor<\/a>.<\/p>' ;
|
||||||
|
oFCKeditor.Create() ;
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<br />
|
||||||
|
FCKeditor 2:
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
oFCKeditor = new FCKeditor( 'FCKeditor_2' ) ;
|
||||||
|
oFCKeditor.BasePath = sBasePath ;
|
||||||
|
oFCKeditor.Height = 100 ;
|
||||||
|
oFCKeditor.Config[ 'ToolbarLocation' ] = 'Out:parent(xToolbar)' ;
|
||||||
|
oFCKeditor.Value = '<p>This is some <strong>sample text<\/strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor<\/a>.<\/p>' ;
|
||||||
|
oFCKeditor.Create() ;
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<br />
|
||||||
|
<input type="submit" value="Submit" />
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
121
fckeditor/_samples/html/assets/sample14.config.js
Normal file
121
fckeditor/_samples/html/assets/sample14.config.js
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Configuration settings used by the XHTML 1.1 sample page (sample14.html).
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Our intention is force all formatting features to use CSS classes or
|
||||||
|
// semantic aware elements.
|
||||||
|
|
||||||
|
// Load our custom CSS files for this sample.
|
||||||
|
// We are using "BasePath" just for this sample convenience. In normal
|
||||||
|
// situations it would be just pointed to the file directly,
|
||||||
|
// like "/css/myfile.css".
|
||||||
|
FCKConfig.EditorAreaCSS = FCKConfig.BasePath + '../_samples/html/assets/sample14.styles.css' ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Core styles.
|
||||||
|
*/
|
||||||
|
FCKConfig.CoreStyles.Bold = { Element : 'span', Attributes : { 'class' : 'Bold' } } ;
|
||||||
|
FCKConfig.CoreStyles.Italic = { Element : 'span', Attributes : { 'class' : 'Italic' } } ;
|
||||||
|
FCKConfig.CoreStyles.Underline = { Element : 'span', Attributes : { 'class' : 'Underline' } } ;
|
||||||
|
FCKConfig.CoreStyles.StrikeThrough = { Element : 'span', Attributes : { 'class' : 'StrikeThrough' } } ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Font face
|
||||||
|
*/
|
||||||
|
// List of fonts available in the toolbar combo. Each font definition is
|
||||||
|
// separated by a semi-colon (;). We are using class names here, so each font
|
||||||
|
// is defined by {Class Name}/{Combo Label}.
|
||||||
|
FCKConfig.FontNames = 'FontComic/Comic Sans MS;FontCourier/Courier New;FontTimes/Times New Roman' ;
|
||||||
|
|
||||||
|
// Define the way font elements will be applied to the document. The "span"
|
||||||
|
// element will be used. When a font is selected, the font name defined in the
|
||||||
|
// above list is passed to this definition with the name "Font", being it
|
||||||
|
// injected in the "class" attribute.
|
||||||
|
// We must also instruct the editor to replace span elements that are used to
|
||||||
|
// set the font (Overrides).
|
||||||
|
FCKConfig.CoreStyles.FontFace =
|
||||||
|
{
|
||||||
|
Element : 'span',
|
||||||
|
Attributes : { 'class' : '#("Font")' },
|
||||||
|
Overrides : [ { Element : 'span', Attributes : { 'class' : /^Font(?:Comic|Courier|Times)$/ } } ]
|
||||||
|
} ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Font sizes.
|
||||||
|
*/
|
||||||
|
FCKConfig.FontSizes = 'FontSmaller/Smaller;FontLarger/Larger;FontSmall/8pt;FontBig/14pt;FontDouble/Double Size' ;
|
||||||
|
FCKConfig.CoreStyles.Size =
|
||||||
|
{
|
||||||
|
Element : 'span',
|
||||||
|
Attributes : { 'class' : '#("Size")' },
|
||||||
|
Overrides : [ { Element : 'span', Attributes : { 'class' : /^Font(?:Smaller|Larger|Small|Big|Double)$/ } } ]
|
||||||
|
} ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Font colors.
|
||||||
|
*/
|
||||||
|
FCKConfig.EnableMoreFontColors = false ;
|
||||||
|
FCKConfig.FontColors = 'ff9900/FontColor1,0066cc/FontColor2,ff0000/FontColor3' ;
|
||||||
|
FCKConfig.CoreStyles.Color =
|
||||||
|
{
|
||||||
|
Element : 'span',
|
||||||
|
Attributes : { 'class' : '#("Color")' },
|
||||||
|
Overrides : [ { Element : 'span', Attributes : { 'class' : /^FontColor(?:1|2|3)$/ } } ]
|
||||||
|
} ;
|
||||||
|
|
||||||
|
FCKConfig.CoreStyles.BackColor =
|
||||||
|
{
|
||||||
|
Element : 'span',
|
||||||
|
Attributes : { 'class' : '#("Color")BG' },
|
||||||
|
Overrides : [ { Element : 'span', Attributes : { 'class' : /^FontColor(?:1|2|3)BG$/ } } ]
|
||||||
|
} ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indentation.
|
||||||
|
*/
|
||||||
|
FCKConfig.IndentClasses = [ 'Indent1', 'Indent2', 'Indent3' ] ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Paragraph justification.
|
||||||
|
*/
|
||||||
|
FCKConfig.JustifyClasses = [ 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyFull' ] ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Styles combo.
|
||||||
|
*/
|
||||||
|
FCKConfig.StylesXmlPath = '' ;
|
||||||
|
FCKConfig.CustomStyles =
|
||||||
|
{
|
||||||
|
'Strong Emphasis' : { Element : 'strong' },
|
||||||
|
'Emphasis' : { Element : 'em' },
|
||||||
|
|
||||||
|
'Computer Code' : { Element : 'code' },
|
||||||
|
'Keyboard Phrase' : { Element : 'kbd' },
|
||||||
|
'Sample Text' : { Element : 'samp' },
|
||||||
|
'Variable' : { Element : 'var' },
|
||||||
|
|
||||||
|
'Deleted Text' : { Element : 'del' },
|
||||||
|
'Inserted Text' : { Element : 'ins' },
|
||||||
|
|
||||||
|
'Cited Work' : { Element : 'cite' },
|
||||||
|
'Inline Quotation' : { Element : 'q' }
|
||||||
|
} ;
|
228
fckeditor/_samples/html/assets/sample14.styles.css
Normal file
228
fckeditor/_samples/html/assets/sample14.styles.css
Normal file
@ -0,0 +1,228 @@
|
|||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Styles used by the XHTML 1.1 sample page (sample14.html).
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Basic definitions for the editing area.
|
||||||
|
*/
|
||||||
|
body
|
||||||
|
{
|
||||||
|
background-color: #ffffff;
|
||||||
|
padding: 5px 5px 5px 5px;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
body, td
|
||||||
|
{
|
||||||
|
font-family: Arial, Verdana, sans-serif;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a[href]
|
||||||
|
{
|
||||||
|
color: #0000FF !important; /* For Firefox... mark as important, otherwise it becomes black */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Core styles.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.Bold
|
||||||
|
{
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Italic
|
||||||
|
{
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Underline
|
||||||
|
{
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.StrikeThrough
|
||||||
|
{
|
||||||
|
text-decoration: line-through;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Subscript
|
||||||
|
{
|
||||||
|
vertical-align: sub;
|
||||||
|
font-size: smaller;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Superscript
|
||||||
|
{
|
||||||
|
vertical-align: super;
|
||||||
|
font-size: smaller;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Font faces.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.FontComic
|
||||||
|
{
|
||||||
|
font-family: 'Comic Sans MS';
|
||||||
|
}
|
||||||
|
|
||||||
|
.FontCourier
|
||||||
|
{
|
||||||
|
font-family: 'Courier New';
|
||||||
|
}
|
||||||
|
|
||||||
|
.FontTimes
|
||||||
|
{
|
||||||
|
font-family: 'Times New Roman';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Font sizes.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.FontSmaller
|
||||||
|
{
|
||||||
|
font-size: smaller;
|
||||||
|
}
|
||||||
|
|
||||||
|
.FontLarger
|
||||||
|
{
|
||||||
|
font-size: larger;
|
||||||
|
}
|
||||||
|
|
||||||
|
.FontSmall
|
||||||
|
{
|
||||||
|
font-size: 8pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
.FontBig
|
||||||
|
{
|
||||||
|
font-size: 14pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
.FontDouble
|
||||||
|
{
|
||||||
|
font-size: 200%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Font colors.
|
||||||
|
*/
|
||||||
|
.FontColor1
|
||||||
|
{
|
||||||
|
color: #ff9900;
|
||||||
|
}
|
||||||
|
|
||||||
|
.FontColor2
|
||||||
|
{
|
||||||
|
color: #0066cc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.FontColor3
|
||||||
|
{
|
||||||
|
color: #ff0000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.FontColor1BG
|
||||||
|
{
|
||||||
|
background-color: #ff9900;
|
||||||
|
}
|
||||||
|
|
||||||
|
.FontColor2BG
|
||||||
|
{
|
||||||
|
background-color: #0066cc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.FontColor3BG
|
||||||
|
{
|
||||||
|
background-color: #ff0000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indentation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.Indent1
|
||||||
|
{
|
||||||
|
margin-left: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Indent2
|
||||||
|
{
|
||||||
|
margin-left: 80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Indent3
|
||||||
|
{
|
||||||
|
margin-left: 120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Alignment.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.JustifyLeft
|
||||||
|
{
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.JustifyRight
|
||||||
|
{
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.JustifyCenter
|
||||||
|
{
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.JustifyFull
|
||||||
|
{
|
||||||
|
text-align: justify;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Other.
|
||||||
|
*/
|
||||||
|
|
||||||
|
code
|
||||||
|
{
|
||||||
|
font-family: courier, monospace;
|
||||||
|
background-color: #eeeeee;
|
||||||
|
padding-left: 1px;
|
||||||
|
padding-right: 1px;
|
||||||
|
border: #c0c0c0 1px solid;
|
||||||
|
}
|
||||||
|
|
||||||
|
kbd
|
||||||
|
{
|
||||||
|
padding: 0px 1px 0px 1px;
|
||||||
|
border-width: 1px 2px 2px 1px;
|
||||||
|
border-style: solid;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote
|
||||||
|
{
|
||||||
|
color: #808080;
|
||||||
|
}
|
92
fckeditor/_samples/html/assets/sample15.config.js
Normal file
92
fckeditor/_samples/html/assets/sample15.config.js
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Configuration settings used by the XHTML 1.1 sample page (sample14.html).
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Our intention is force all formatting features to use CSS classes or
|
||||||
|
// semantic aware elements.
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Core styles.
|
||||||
|
*/
|
||||||
|
FCKConfig.CoreStyles.Bold = { Element : 'b' } ;
|
||||||
|
FCKConfig.CoreStyles.Italic = { Element : 'i' } ;
|
||||||
|
FCKConfig.CoreStyles.Underline = { Element : 'u' } ;
|
||||||
|
FCKConfig.CoreStyles.StrikeThrough = { Element : 'strike' } ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Font face
|
||||||
|
*/
|
||||||
|
// Define the way font elements will be applied to the document. The "span"
|
||||||
|
// element will be used. When a font is selected, the font name defined in the
|
||||||
|
// above list is passed to this definition with the name "Font", being it
|
||||||
|
// injected in the "class" attribute.
|
||||||
|
// We must also instruct the editor to replace span elements that are used to
|
||||||
|
// set the font (Overrides).
|
||||||
|
FCKConfig.CoreStyles.FontFace =
|
||||||
|
{
|
||||||
|
Element : 'font',
|
||||||
|
Attributes : { 'face' : '#("Font")' }
|
||||||
|
} ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Font sizes.
|
||||||
|
*/
|
||||||
|
FCKConfig.FontSizes = '1/xx-small;2/x-small;3/small;4/medium;5/large;6/x-large;7/xx-large' ;
|
||||||
|
FCKConfig.CoreStyles.Size =
|
||||||
|
{
|
||||||
|
Element : 'font',
|
||||||
|
Attributes : { 'size' : '#("Size")' }
|
||||||
|
} ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Font colors.
|
||||||
|
*/
|
||||||
|
FCKConfig.EnableMoreFontColors = true ;
|
||||||
|
FCKConfig.CoreStyles.Color =
|
||||||
|
{
|
||||||
|
Element : 'font',
|
||||||
|
Attributes : { 'color' : '#("Color")' }
|
||||||
|
} ;
|
||||||
|
|
||||||
|
FCKConfig.CoreStyles.BackColor =
|
||||||
|
{
|
||||||
|
Element : 'font',
|
||||||
|
Styles : { 'background-color' : '#("Color","color")' }
|
||||||
|
} ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Styles combo.
|
||||||
|
*/
|
||||||
|
FCKConfig.StylesXmlPath = '' ;
|
||||||
|
FCKConfig.CustomStyles =
|
||||||
|
{
|
||||||
|
'Computer Code' : { Element : 'code' },
|
||||||
|
'Keyboard Phrase' : { Element : 'kbd' },
|
||||||
|
'Sample Text' : { Element : 'samp' },
|
||||||
|
'Variable' : { Element : 'var' },
|
||||||
|
|
||||||
|
'Deleted Text' : { Element : 'del' },
|
||||||
|
'Inserted Text' : { Element : 'ins' },
|
||||||
|
|
||||||
|
'Cited Work' : { Element : 'cite' },
|
||||||
|
'Inline Quotation' : { Element : 'q' }
|
||||||
|
} ;
|
92
fckeditor/_samples/html/assets/sample16.config.js
Normal file
92
fckeditor/_samples/html/assets/sample16.config.js
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Configuration settings used by the XHTML 1.1 sample page (sample14.html).
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Our intention is force all formatting features to use CSS classes or
|
||||||
|
// semantic aware elements.
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Core styles.
|
||||||
|
*/
|
||||||
|
FCKConfig.CoreStyles.Bold = { Element : 'b' } ;
|
||||||
|
FCKConfig.CoreStyles.Italic = { Element : 'i' } ;
|
||||||
|
FCKConfig.CoreStyles.Underline = { Element : 'u' } ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Font face
|
||||||
|
*/
|
||||||
|
// Define the way font elements will be applied to the document. The "span"
|
||||||
|
// element will be used. When a font is selected, the font name defined in the
|
||||||
|
// above list is passed to this definition with the name "Font", being it
|
||||||
|
// injected in the "class" attribute.
|
||||||
|
// We must also instruct the editor to replace span elements that are used to
|
||||||
|
// set the font (Overrides).
|
||||||
|
FCKConfig.CoreStyles.FontFace =
|
||||||
|
{
|
||||||
|
Element : 'font',
|
||||||
|
Attributes : { 'face' : '#("Font")' }
|
||||||
|
} ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Font sizes.
|
||||||
|
* The CSS part of the font sizes isn't used by Flash, it is there to get the
|
||||||
|
* font rendered correctly in FCKeditor.
|
||||||
|
*/
|
||||||
|
FCKConfig.FontSizes = '8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px' ;
|
||||||
|
FCKConfig.CoreStyles.Size =
|
||||||
|
{
|
||||||
|
Element : 'font',
|
||||||
|
Attributes : { 'size' : '#("Size")' },
|
||||||
|
Styles : { 'font-size' : '#("Size","fontSize")' }
|
||||||
|
} ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Font colors.
|
||||||
|
*/
|
||||||
|
FCKConfig.EnableMoreFontColors = true ;
|
||||||
|
FCKConfig.CoreStyles.Color =
|
||||||
|
{
|
||||||
|
Element : 'font',
|
||||||
|
Attributes : { 'color' : '#("Color")' }
|
||||||
|
} ;
|
||||||
|
/**
|
||||||
|
* Styles combo.
|
||||||
|
*/
|
||||||
|
FCKConfig.StylesXmlPath = '' ;
|
||||||
|
FCKConfig.CustomStyles =
|
||||||
|
{
|
||||||
|
} ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Toolbar set for Flash HTML editing.
|
||||||
|
*/
|
||||||
|
FCKConfig.ToolbarSets['Flash'] = [
|
||||||
|
['Source','-','Bold','Italic','Underline','-','UnorderedList','-','Link','Unlink'],
|
||||||
|
['FontName','FontSize','-','About']
|
||||||
|
] ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flash specific formatting settings.
|
||||||
|
*/
|
||||||
|
FCKConfig.EditorAreaStyles = 'p, ol, ul {margin-top: 0px; margin-bottom: 0px;}' ;
|
||||||
|
FCKConfig.FormatSource = false ;
|
||||||
|
FCKConfig.FormatOutput = false ;
|
BIN
fckeditor/_samples/html/assets/sample16.fla
Normal file
BIN
fckeditor/_samples/html/assets/sample16.fla
Normal file
Binary file not shown.
BIN
fckeditor/_samples/html/assets/sample16.swf
Normal file
BIN
fckeditor/_samples/html/assets/sample16.swf
Normal file
Binary file not shown.
18
fckeditor/_samples/html/assets/swfobject.js
Normal file
18
fckeditor/_samples/html/assets/swfobject.js
Normal file
File diff suppressed because one or more lines are too long
59
fckeditor/_samples/html/sample01.html
Normal file
59
fckeditor/_samples/html/sample01.html
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
-->
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript" src="../../fckeditor.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>
|
||||||
|
FCKeditor - JavaScript - Sample 1
|
||||||
|
</h1>
|
||||||
|
<div>
|
||||||
|
This sample displays a normal HTML form with an FCKeditor with full features enabled.
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<form action="../php/sampleposteddata.php" method="post" target="_blank">
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
// oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
var sBasePath = document.location.href.substring(0,document.location.href.lastIndexOf('_samples')) ;
|
||||||
|
|
||||||
|
var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
|
||||||
|
oFCKeditor.BasePath = sBasePath ;
|
||||||
|
oFCKeditor.Height = 300 ;
|
||||||
|
oFCKeditor.Value = '<p>This is some <strong>sample text<\/strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor<\/a>.<\/p>' ;
|
||||||
|
oFCKeditor.Create() ;
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<br />
|
||||||
|
<input type="submit" value="Submit" />
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
63
fckeditor/_samples/html/sample02.html
Normal file
63
fckeditor/_samples/html/sample02.html
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
-->
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript" src="../../fckeditor.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
window.onload = function()
|
||||||
|
{
|
||||||
|
// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
// oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
var sBasePath = document.location.href.substring(0,document.location.href.lastIndexOf('_samples')) ;
|
||||||
|
|
||||||
|
var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
|
||||||
|
oFCKeditor.BasePath = sBasePath ;
|
||||||
|
oFCKeditor.ReplaceTextarea() ;
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>
|
||||||
|
FCKeditor - JavaScript - Sample 2</h1>
|
||||||
|
<div>
|
||||||
|
This sample displays a normal HTML form with an FCKeditor with full features enabled.
|
||||||
|
It uses the "ReplaceTextarea" command to create the editor.
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<form action="../php/sampleposteddata.php" method="post" target="_blank">
|
||||||
|
<div>
|
||||||
|
<textarea name="FCKeditor1" rows="10" cols="80" style="width: 100%; height: 200px"><p>This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</p></textarea>
|
||||||
|
</div>
|
||||||
|
<br />
|
||||||
|
<input type="submit" value="Submit" />
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
140
fckeditor/_samples/html/sample03.html
Normal file
140
fckeditor/_samples/html/sample03.html
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
-->
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript" src="../../fckeditor.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
var bIsLoaded = false ;
|
||||||
|
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
if ( bIsLoaded )
|
||||||
|
return ;
|
||||||
|
|
||||||
|
var oCombo = document.getElementById( 'cmbLanguages' ) ;
|
||||||
|
|
||||||
|
// Remove all options. (#1399)
|
||||||
|
oCombo.innerHTML = '' ;
|
||||||
|
|
||||||
|
var aLanguages = new Array() ;
|
||||||
|
|
||||||
|
for ( code in editorInstance.Language.AvailableLanguages )
|
||||||
|
aLanguages.push( { Code : code, Name : editorInstance.Language.AvailableLanguages[code] } ) ;
|
||||||
|
|
||||||
|
aLanguages.sort( SortLanguage ) ;
|
||||||
|
|
||||||
|
for ( var i = 0 ; i < aLanguages.length ; i++ )
|
||||||
|
AddComboOption( oCombo, aLanguages[i].Name + ' (' + aLanguages[i].Code + ')', aLanguages[i].Code ) ;
|
||||||
|
|
||||||
|
oCombo.value = editorInstance.Language.ActiveLanguage.Code ;
|
||||||
|
|
||||||
|
document.getElementById('eNumLangs').innerHTML = '(' + aLanguages.length + ' languages available!)' ;
|
||||||
|
|
||||||
|
bIsLoaded = true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function SortLanguage( langA, langB )
|
||||||
|
{
|
||||||
|
return ( langA.Name < langB.Name ? -1 : langA.Name > langB.Name ? 1 : 0 ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function AddComboOption(combo, optionText, optionValue)
|
||||||
|
{
|
||||||
|
var oOption = document.createElement("OPTION") ;
|
||||||
|
|
||||||
|
combo.options.add(oOption) ;
|
||||||
|
|
||||||
|
oOption.innerHTML = optionText ;
|
||||||
|
oOption.value = optionValue ;
|
||||||
|
|
||||||
|
return oOption ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeLanguage( languageCode )
|
||||||
|
{
|
||||||
|
document.location.href = document.location.href.replace( /\?.*$/, '' ) + "?" + languageCode ;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>
|
||||||
|
FCKeditor - JavaScript - Sample 3</h1>
|
||||||
|
<div>
|
||||||
|
This sample shows the editor in all its available languages.
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select a language:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbLanguages" onchange="ChangeLanguage(this.value);">
|
||||||
|
<option> </option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<span id="eNumLangs"></span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br />
|
||||||
|
<form action="../php/sampleposteddata.php" method="post" target="_blank">
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
// oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
var sBasePath = document.location.href.substring(0,document.location.href.lastIndexOf('_samples')) ;
|
||||||
|
|
||||||
|
var sLang ;
|
||||||
|
if ( document.location.search.length > 1 )
|
||||||
|
sLang = document.location.search.substr(1) ;
|
||||||
|
|
||||||
|
var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
|
||||||
|
oFCKeditor.BasePath = sBasePath ;
|
||||||
|
if ( sLang == null )
|
||||||
|
{
|
||||||
|
oFCKeditor.Config["AutoDetectLanguage"] = true ;
|
||||||
|
oFCKeditor.Config["DefaultLanguage"] = "en" ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
oFCKeditor.Config["AutoDetectLanguage"] = false ;
|
||||||
|
oFCKeditor.Config["DefaultLanguage"] = sLang ;
|
||||||
|
}
|
||||||
|
oFCKeditor.Value = '<p>This is some <strong>sample text<\/strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor<\/a>.<\/p>' ;
|
||||||
|
oFCKeditor.Create() ;
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<br />
|
||||||
|
<input type="submit" value="Submit" />
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
95
fckeditor/_samples/html/sample04.html
Normal file
95
fckeditor/_samples/html/sample04.html
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
-->
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript" src="../../fckeditor.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
var oCombo = document.getElementById( 'cmbToolbars' ) ;
|
||||||
|
oCombo.value = editorInstance.ToolbarSet.Name ;
|
||||||
|
oCombo.style.visibility = '' ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeLanguage( languageCode )
|
||||||
|
{
|
||||||
|
document.location.href = document.location.href.replace( /\?.*$/, '' ) + "?" + languageCode ;
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>
|
||||||
|
FCKeditor - JavaScript - Sample 4</h1>
|
||||||
|
<div>
|
||||||
|
This sample shows how to change the editor toolbar.
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select the toolbar to load:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbToolbars" onchange="ChangeLanguage(this.value);" style="visibility: hidden">
|
||||||
|
<option value="Default" selected="selected">Default</option>
|
||||||
|
<option value="Basic">Basic</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br />
|
||||||
|
<form action="../php/sampleposteddata.php" method="post" target="_blank">
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
// oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
var sBasePath = document.location.href.substring(0,document.location.href.lastIndexOf('_samples')) ;
|
||||||
|
|
||||||
|
// Get the toolbar from the URL.
|
||||||
|
var sToolbar ;
|
||||||
|
if ( document.location.search.length > 1 )
|
||||||
|
sToolbar = document.location.search.substr(1) ;
|
||||||
|
|
||||||
|
var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
|
||||||
|
oFCKeditor.BasePath = sBasePath ;
|
||||||
|
|
||||||
|
if ( sToolbar != null )
|
||||||
|
oFCKeditor.ToolbarSet = sToolbar ;
|
||||||
|
|
||||||
|
oFCKeditor.Value = '<p>This is some <strong>sample text<\/strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor<\/a>.<\/p>' ;
|
||||||
|
oFCKeditor.Create() ;
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<br />
|
||||||
|
<input type="submit" value="Submit" />
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
125
fckeditor/_samples/html/sample05.html
Normal file
125
fckeditor/_samples/html/sample05.html
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
-->
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript" src="../../fckeditor.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
var oCombo = document.getElementById( 'cmbSkins' ) ;
|
||||||
|
|
||||||
|
// Get the active skin.
|
||||||
|
var sSkin = editorInstance.Config['SkinPath'] ;
|
||||||
|
sSkin = sSkin.match( /[^\/]+(?=\/$)/g ) ;
|
||||||
|
|
||||||
|
oCombo.value = sSkin ;
|
||||||
|
oCombo.style.visibility = '' ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeLanguage( languageCode )
|
||||||
|
{
|
||||||
|
document.location.href = document.location.href.replace( /\?.*$/, '' ) + "?" + languageCode ;
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>
|
||||||
|
FCKeditor - JavaScript - Sample 5</h1>
|
||||||
|
<div>
|
||||||
|
This sample shows how to change the editor skin.
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select the skin to load:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbSkins" onchange="ChangeLanguage(this.value);" style="visibility: hidden">
|
||||||
|
<option value="default" selected="selected">Default</option>
|
||||||
|
<option value="office2003">Office 2003</option>
|
||||||
|
<option value="silver">Silver</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br />
|
||||||
|
<form action="../php/sampleposteddata.php" method="post" target="_blank">
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
// oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
var sBasePath = document.location.href.substring(0,document.location.href.lastIndexOf('_samples')) ;
|
||||||
|
|
||||||
|
// Get the skin from the URL.
|
||||||
|
var sSkin ;
|
||||||
|
if ( document.location.search.length > 1 )
|
||||||
|
sSkin = document.location.search.substr(1) ;
|
||||||
|
|
||||||
|
var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
|
||||||
|
oFCKeditor.BasePath = sBasePath ;
|
||||||
|
|
||||||
|
if ( sSkin != null )
|
||||||
|
{
|
||||||
|
var sSkinPath = sBasePath + 'editor/skins/' + sSkin + '/' ;
|
||||||
|
oFCKeditor.Config['SkinPath'] = sSkinPath ;
|
||||||
|
|
||||||
|
// The following switch is optional. It is done to enhance the loading
|
||||||
|
// time of the toolbar, by preloading the images used on it.
|
||||||
|
switch ( sSkin )
|
||||||
|
{
|
||||||
|
case 'office2003' :
|
||||||
|
oFCKeditor.Config['PreloadImages'] =
|
||||||
|
sSkinPath + 'images/toolbar.start.gif' + ';' +
|
||||||
|
sSkinPath + 'images/toolbar.end.gif' + ';' +
|
||||||
|
sSkinPath + 'images/toolbar.bg.gif' + ';' +
|
||||||
|
sSkinPath + 'images/toolbar.buttonarrow.gif' ;
|
||||||
|
break ;
|
||||||
|
|
||||||
|
case 'silver' :
|
||||||
|
oFCKeditor.Config['PreloadImages'] =
|
||||||
|
sSkinPath + 'images/toolbar.start.gif' + ';' +
|
||||||
|
sSkinPath + 'images/toolbar.end.gif' + ';' +
|
||||||
|
sSkinPath + 'images/toolbar.buttonbg.gif' + ';' +
|
||||||
|
sSkinPath + 'images/toolbar.buttonarrow.gif' ;
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
oFCKeditor.Value = '<p>This is some <strong>sample text<\/strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor<\/a>.<\/p>' ;
|
||||||
|
oFCKeditor.Create() ;
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<br />
|
||||||
|
<input type="submit" value="Submit" />
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
73
fckeditor/_samples/html/sample06.html
Normal file
73
fckeditor/_samples/html/sample06.html
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
-->
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript" src="../../fckeditor.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>
|
||||||
|
FCKeditor - JavaScript - 6</h1>
|
||||||
|
<div>
|
||||||
|
This sample shows some sample plugins implementations. Things to note:<br />
|
||||||
|
<ul>
|
||||||
|
<li>In the toolbar, you will find sample "Find" and "Replace" plugins that do exactly
|
||||||
|
the same thing that the built in ones do. It just shows how to do that with a custom
|
||||||
|
implementation. Use the green toolbar buttons the test then. </li>
|
||||||
|
<li>There is also another sample plugin that is available in the package: the "Placeholder"
|
||||||
|
command (use the yellow icon). </li>
|
||||||
|
<li>It also shows a custom context menu option when right cliking on images (insert
|
||||||
|
a smiley to test it).</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<form action="../php/sampleposteddata.php" method="post" target="_blank">
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
// oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
var sBasePath = document.location.href.substring(0,document.location.href.lastIndexOf('_samples')) ;
|
||||||
|
|
||||||
|
var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
|
||||||
|
oFCKeditor.BasePath = sBasePath ;
|
||||||
|
|
||||||
|
// Set the custom configurations file path (in this way the original file is mantained).
|
||||||
|
oFCKeditor.Config['CustomConfigurationsPath'] = sBasePath + '_samples/html/assets/sample06.config.js' ;
|
||||||
|
|
||||||
|
// Let's use a custom toolbar for this sample.
|
||||||
|
oFCKeditor.ToolbarSet = 'PluginTest' ;
|
||||||
|
|
||||||
|
oFCKeditor.Value = '<p>This is some <strong>sample text<\/strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor<\/a>.<\/p>' ;
|
||||||
|
oFCKeditor.Create() ;
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<br />
|
||||||
|
<input type="submit" value="Submit" />
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
59
fckeditor/_samples/html/sample07.html
Normal file
59
fckeditor/_samples/html/sample07.html
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
-->
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript" src="../../fckeditor.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>
|
||||||
|
FCKeditor - JavaScript - Sample 7</h1>
|
||||||
|
<div>
|
||||||
|
In this sample the user can edit the complete page contents and header (from <HTML>
|
||||||
|
to </HTML>).
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<form action="../php/sampleposteddata.php" method="post" target="_blank">
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
// oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
var sBasePath = document.location.href.substring(0,document.location.href.lastIndexOf('_samples')) ;
|
||||||
|
|
||||||
|
var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
|
||||||
|
oFCKeditor.BasePath = sBasePath ;
|
||||||
|
oFCKeditor.Config['FullPage'] = true ;
|
||||||
|
oFCKeditor.Value = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Full Page Test<\/title><meta content="text/html; charset=utf-8" http-equiv="Content-Type"><\/head><body><p>This is some <strong>sample text<\/strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.<\/body><\/html>' ;
|
||||||
|
oFCKeditor.Create() ;
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<br />
|
||||||
|
<input type="submit" value="Submit" />
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
196
fckeditor/_samples/html/sample08.html
Normal file
196
fckeditor/_samples/html/sample08.html
Normal file
@ -0,0 +1,196 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
-->
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript" src="../../fckeditor.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
// FCKeditor_OnComplete is a special function that is called when an editor
|
||||||
|
// instance is loaded ad available to the API. It must be named exactly in
|
||||||
|
// this way.
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
// Show the editor name and description in the browser status bar.
|
||||||
|
document.getElementById('eMessage').innerHTML = 'Instance "' + editorInstance.Name + '" loaded - ' + editorInstance.Description ;
|
||||||
|
|
||||||
|
// Show this sample buttons.
|
||||||
|
document.getElementById('eButtons').style.visibility = '' ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function InsertHTML()
|
||||||
|
{
|
||||||
|
// Get the editor instance that we want to interact with.
|
||||||
|
var oEditor = FCKeditorAPI.GetInstance('FCKeditor1') ;
|
||||||
|
|
||||||
|
// Check the active editing mode.
|
||||||
|
if ( oEditor.EditMode == FCK_EDITMODE_WYSIWYG )
|
||||||
|
{
|
||||||
|
// Insert the desired HTML.
|
||||||
|
oEditor.InsertHtml( '- This is some <a href="/Test1.html">sample<\/a> HTML -' ) ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
alert( 'You must be on WYSIWYG mode!' ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function SetContents()
|
||||||
|
{
|
||||||
|
// Get the editor instance that we want to interact with.
|
||||||
|
var oEditor = FCKeditorAPI.GetInstance('FCKeditor1') ;
|
||||||
|
|
||||||
|
// Set the editor contents (replace the actual one).
|
||||||
|
oEditor.SetData( 'This is the <b>new content<\/b> I want in the editor.' ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function GetContents()
|
||||||
|
{
|
||||||
|
// Get the editor instance that we want to interact with.
|
||||||
|
var oEditor = FCKeditorAPI.GetInstance('FCKeditor1') ;
|
||||||
|
|
||||||
|
// Get the editor contents in XHTML.
|
||||||
|
alert( oEditor.GetXHTML( true ) ) ; // "true" means you want it formatted.
|
||||||
|
}
|
||||||
|
|
||||||
|
function ExecuteCommand( commandName )
|
||||||
|
{
|
||||||
|
// Get the editor instance that we want to interact with.
|
||||||
|
var oEditor = FCKeditorAPI.GetInstance('FCKeditor1') ;
|
||||||
|
|
||||||
|
// Execute the command.
|
||||||
|
oEditor.Commands.GetCommand( commandName ).Execute() ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function GetLength()
|
||||||
|
{
|
||||||
|
// This functions shows that you can interact directly with the editor area
|
||||||
|
// DOM. In this way you have the freedom to do anything you want with it.
|
||||||
|
|
||||||
|
// Get the editor instance that we want to interact with.
|
||||||
|
var oEditor = FCKeditorAPI.GetInstance('FCKeditor1') ;
|
||||||
|
|
||||||
|
// Get the Editor Area DOM (Document object).
|
||||||
|
var oDOM = oEditor.EditorDocument ;
|
||||||
|
|
||||||
|
var iLength ;
|
||||||
|
|
||||||
|
// The are two diffent ways to get the text (without HTML markups).
|
||||||
|
// It is browser specific.
|
||||||
|
|
||||||
|
if ( document.all ) // If Internet Explorer.
|
||||||
|
{
|
||||||
|
iLength = oDOM.body.innerText.length ;
|
||||||
|
}
|
||||||
|
else // If Gecko.
|
||||||
|
{
|
||||||
|
var r = oDOM.createRange() ;
|
||||||
|
r.selectNodeContents( oDOM.body ) ;
|
||||||
|
iLength = r.toString().length ;
|
||||||
|
}
|
||||||
|
|
||||||
|
alert( 'Actual text length (without HTML markups): ' + iLength + ' characters' ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function GetInnerHTML()
|
||||||
|
{
|
||||||
|
// Get the editor instance that we want to interact with.
|
||||||
|
var oEditor = FCKeditorAPI.GetInstance('FCKeditor1') ;
|
||||||
|
|
||||||
|
alert( oEditor.EditorDocument.body.innerHTML ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function CheckIsDirty()
|
||||||
|
{
|
||||||
|
// Get the editor instance that we want to interact with.
|
||||||
|
var oEditor = FCKeditorAPI.GetInstance('FCKeditor1') ;
|
||||||
|
alert( oEditor.IsDirty() ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ResetIsDirty()
|
||||||
|
{
|
||||||
|
// Get the editor instance that we want to interact with.
|
||||||
|
var oEditor = FCKeditorAPI.GetInstance('FCKeditor1') ;
|
||||||
|
oEditor.ResetIsDirty() ;
|
||||||
|
alert( 'The "IsDirty" status has been reset' ) ;
|
||||||
|
}
|
||||||
|
-->
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>
|
||||||
|
FCKeditor - JavaScript - Sample 8
|
||||||
|
</h1>
|
||||||
|
<div>
|
||||||
|
This sample shows how to use the FCKeditor JavaScript API to interact with the editor
|
||||||
|
at runtime.
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<form action="../php/sampleposteddata.php" method="post" target="_blank">
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
// oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
var sBasePath = document.location.href.substring(0,document.location.href.lastIndexOf('_samples')) ;
|
||||||
|
|
||||||
|
var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
|
||||||
|
oFCKeditor.BasePath = sBasePath ;
|
||||||
|
oFCKeditor.Value = '<p>This is some <strong>sample text<\/strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor<\/a>.<\/p>' ;
|
||||||
|
oFCKeditor.Create() ;
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<br />
|
||||||
|
<input type="submit" value="Submit" />
|
||||||
|
</form>
|
||||||
|
<div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<div id="eMessage">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="eButtons" style="visibility: hidden">
|
||||||
|
<input type="button" value="Insert HTML" onclick="InsertHTML();" />
|
||||||
|
<input type="button" value="Set Editor Contents" onclick="SetContents();" />
|
||||||
|
<input type="button" value="Get Editor Contents (XHTML)" onclick="GetContents();" />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<input type="button" value='Execute "Bold" Command' onclick="ExecuteCommand('Bold');" />
|
||||||
|
<input type="button" value='Execute "Link" Command' onclick="ExecuteCommand('Link');" />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<input type="button" value="Interact with the Editor Area DOM" onclick="GetLength();" />
|
||||||
|
<input type="button" value="Get innerHTML" onclick="GetInnerHTML();" />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<input type="button" value="Check IsDirty()" onclick="CheckIsDirty();" />
|
||||||
|
<input type="button" value="Reset IsDirty()" onclick="ResetIsDirty();" />
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
100
fckeditor/_samples/html/sample09.html
Normal file
100
fckeditor/_samples/html/sample09.html
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
-->
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript" src="../../fckeditor.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
editorInstance.Events.AttachEvent( 'OnBlur' , FCKeditor_OnBlur ) ;
|
||||||
|
editorInstance.Events.AttachEvent( 'OnFocus', FCKeditor_OnFocus ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function FCKeditor_OnBlur( editorInstance )
|
||||||
|
{
|
||||||
|
editorInstance.ToolbarSet.Collapse() ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function FCKeditor_OnFocus( editorInstance )
|
||||||
|
{
|
||||||
|
editorInstance.ToolbarSet.Expand() ;
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>
|
||||||
|
FCKeditor - JavaScript - Sample 9</h1>
|
||||||
|
<div>
|
||||||
|
This sample shows FCKeditor in a more complex form with two different instances.<br />
|
||||||
|
It also shows and interesting usage of the "OnFocus" and "OnBlur" events available
|
||||||
|
in the JavaScript API.
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<form action="../php/sampleposteddata.php" method="post" target="_blank">
|
||||||
|
Normal text field:<br />
|
||||||
|
<input name="NormaText" value="Plain Text" />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
FCKeditor with Basic toolbar:
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
// oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
var sBasePath = document.location.href.substring(0,document.location.href.lastIndexOf('_samples')) ;
|
||||||
|
|
||||||
|
var oFCKeditor = new FCKeditor( 'FCKeditor_Basic' ) ;
|
||||||
|
|
||||||
|
oFCKeditor.Config['ToolbarStartExpanded'] = false ;
|
||||||
|
|
||||||
|
oFCKeditor.BasePath = sBasePath ;
|
||||||
|
oFCKeditor.ToolbarSet = 'Basic' ;
|
||||||
|
oFCKeditor.Value = '<p>This is some <strong>sample text<\/strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor<\/a>.<\/p>' ;
|
||||||
|
oFCKeditor.Create() ;
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<br />
|
||||||
|
FCKeditor with Default toolbar:
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
oFCKeditor = new FCKeditor( 'FCKeditor_Default' ) ;
|
||||||
|
|
||||||
|
oFCKeditor.Config['ToolbarStartExpanded'] = false ;
|
||||||
|
|
||||||
|
oFCKeditor.BasePath = sBasePath ;
|
||||||
|
oFCKeditor.Value = '<p>This is some <strong>sample text<\/strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor<\/a>.<\/p>' ;
|
||||||
|
oFCKeditor.Create() ;
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<br />
|
||||||
|
<input type="submit" value="Submit" />
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
79
fckeditor/_samples/html/sample10.html
Normal file
79
fckeditor/_samples/html/sample10.html
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
-->
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript" src="../../fckeditor.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>
|
||||||
|
FCKeditor - JavaScript - Sample 10</h1>
|
||||||
|
<div>
|
||||||
|
This sample shows a form with two FCKeditor instance. Both instances share the same
|
||||||
|
toolbar, available in the top.
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<div id="xToolbar"></div>
|
||||||
|
<hr />
|
||||||
|
<form action="../php/sampleposteddata.php" method="post" target="_blank">
|
||||||
|
Normal text field:<br />
|
||||||
|
<input name="NormaText" value="Plain Text" />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
FCKeditor 1:
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
// oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
var sBasePath = document.location.href.substring(0,document.location.href.lastIndexOf('_samples')) ;
|
||||||
|
|
||||||
|
var oFCKeditor = new FCKeditor( 'FCKeditor_1' ) ;
|
||||||
|
oFCKeditor.BasePath = sBasePath ;
|
||||||
|
oFCKeditor.Height = 100 ;
|
||||||
|
oFCKeditor.Config[ 'ToolbarLocation' ] = 'Out:xToolbar' ;
|
||||||
|
oFCKeditor.Value = '<p>This is some <strong>sample text<\/strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor<\/a>.<\/p>' ;
|
||||||
|
oFCKeditor.Create() ;
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<br />
|
||||||
|
FCKeditor 2:
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
oFCKeditor = new FCKeditor( 'FCKeditor_2' ) ;
|
||||||
|
oFCKeditor.BasePath = sBasePath ;
|
||||||
|
oFCKeditor.Height = 100 ;
|
||||||
|
oFCKeditor.Config[ 'ToolbarLocation' ] = 'Out:xToolbar' ;
|
||||||
|
oFCKeditor.Value = '<p>This is some <strong>sample text<\/strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor<\/a>.<\/p>' ;
|
||||||
|
oFCKeditor.Create() ;
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<br />
|
||||||
|
<input type="submit" value="Submit" />
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
43
fckeditor/_samples/html/sample11.html
Normal file
43
fckeditor/_samples/html/sample11.html
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
-->
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>
|
||||||
|
FCKeditor - JavaScript - Sample 11</h1>
|
||||||
|
<div>
|
||||||
|
This sample shows a form with two FCKeditor instance loaded inside an IFRAME. Both instances share the same
|
||||||
|
toolbar, available in the main page (top).
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<div id="xToolbar"></div>
|
||||||
|
<hr />
|
||||||
|
<iframe src="assets/sample11_frame.html" width="100%" height="300"></iframe>
|
||||||
|
</body>
|
||||||
|
</html>
|
124
fckeditor/_samples/html/sample12.html
Normal file
124
fckeditor/_samples/html/sample12.html
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
-->
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript" src="../../fckeditor.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
// The following function is used in this samples to reload the page,
|
||||||
|
// setting the querystring parameters for the enter mode.
|
||||||
|
function ChangeMode()
|
||||||
|
{
|
||||||
|
var sEnterMode = document.getElementById('xEnter').value ;
|
||||||
|
var sShiftEnterMode = document.getElementById('xShiftEnter').value ;
|
||||||
|
|
||||||
|
window.location.href = window.location.pathname + '?enter=' + sEnterMode + '&shift=' + sShiftEnterMode ;
|
||||||
|
}
|
||||||
|
-->
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>
|
||||||
|
FCKeditor - JavaScript - Sample 12</h1>
|
||||||
|
<div>
|
||||||
|
This sample shows the different ways to configure the [Enter] key behavior on FCKeditor.
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
When [Enter] is pressed:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="xEnter" onchange="ChangeMode();">
|
||||||
|
<option value="p" selected="selected">Create new <P></option>
|
||||||
|
<option value="div">Create new <DIV></option>
|
||||||
|
<option value="br">Break the line with a <BR></option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
When [Shift] + [Enter] is pressed:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="xShiftEnter" onchange="ChangeMode();">
|
||||||
|
<option value="p">Create new <P></option>
|
||||||
|
<option value="div">Create new <DIV></option>
|
||||||
|
<option value="br" selected="selected">Break the line with a <BR></option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br />
|
||||||
|
<form action="../php/sampleposteddata.php" method="post" target="_blank">
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
// oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
var sBasePath = document.location.href.substring(0,document.location.href.lastIndexOf('_samples')) ;
|
||||||
|
|
||||||
|
// The following are the default configurations for the Enter and Shift+Enter modes.
|
||||||
|
var sEnterMode = 'p' ;
|
||||||
|
var sShiftEnterMode = 'br' ;
|
||||||
|
|
||||||
|
// Try to get the new configurations from the querystring, if available.
|
||||||
|
if ( document.location.search.length > 1 )
|
||||||
|
{
|
||||||
|
var aMatch = document.location.search.match( /enter=(p|div|br)/ ) ;
|
||||||
|
if ( aMatch )
|
||||||
|
sEnterMode = aMatch[1] ;
|
||||||
|
|
||||||
|
aMatch = document.location.search.match( /shift=(p|div|br)/ ) ;
|
||||||
|
if ( aMatch )
|
||||||
|
sShiftEnterMode = aMatch[1] ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the FCKeditor instance.
|
||||||
|
var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
|
||||||
|
oFCKeditor.BasePath = sBasePath ;
|
||||||
|
oFCKeditor.Value = 'This is some <strong>sample text<\/strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor<\/a>.' ;
|
||||||
|
|
||||||
|
// Set the configuration options for the Enter Key mode.
|
||||||
|
oFCKeditor.Config["EnterMode"] = sEnterMode ;
|
||||||
|
oFCKeditor.Config["ShiftEnterMode"] = sShiftEnterMode ;
|
||||||
|
|
||||||
|
oFCKeditor.Create() ;
|
||||||
|
|
||||||
|
// Update the select combos with the current values.
|
||||||
|
document.getElementById('xEnter').value = sEnterMode ;
|
||||||
|
document.getElementById('xShiftEnter').value = sShiftEnterMode ;
|
||||||
|
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<br />
|
||||||
|
<input type="submit" value="Submit" />
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
148
fckeditor/_samples/html/sample13.html
Normal file
148
fckeditor/_samples/html/sample13.html
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
-->
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript" src="../../fckeditor.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function Toggle()
|
||||||
|
{
|
||||||
|
// Try to get the FCKeditor instance, if available.
|
||||||
|
var oEditor ;
|
||||||
|
if ( typeof( FCKeditorAPI ) != 'undefined' )
|
||||||
|
oEditor = FCKeditorAPI.GetInstance( 'DataFCKeditor' ) ;
|
||||||
|
|
||||||
|
// Get the _Textarea and _FCKeditor DIVs.
|
||||||
|
var eTextareaDiv = document.getElementById( 'Textarea' ) ;
|
||||||
|
var eFCKeditorDiv = document.getElementById( 'FCKeditor' ) ;
|
||||||
|
|
||||||
|
// If the _Textarea DIV is visible, switch to FCKeditor.
|
||||||
|
if ( eTextareaDiv.style.display != 'none' )
|
||||||
|
{
|
||||||
|
// If it is the first time, create the editor.
|
||||||
|
if ( !oEditor )
|
||||||
|
{
|
||||||
|
CreateEditor() ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Set the current text in the textarea to the editor.
|
||||||
|
oEditor.SetData( document.getElementById('DataTextarea').value ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Switch the DIVs display.
|
||||||
|
eTextareaDiv.style.display = 'none' ;
|
||||||
|
eFCKeditorDiv.style.display = '' ;
|
||||||
|
|
||||||
|
// This is a hack for Gecko 1.0.x ... it stops editing when the editor is hidden.
|
||||||
|
if ( oEditor && !document.all )
|
||||||
|
{
|
||||||
|
if ( oEditor.EditMode == FCK_EDITMODE_WYSIWYG )
|
||||||
|
oEditor.MakeEditable() ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Set the textarea value to the editor value.
|
||||||
|
document.getElementById('DataTextarea').value = oEditor.GetXHTML() ;
|
||||||
|
|
||||||
|
// Switch the DIVs display.
|
||||||
|
eTextareaDiv.style.display = '' ;
|
||||||
|
eFCKeditorDiv.style.display = 'none' ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function CreateEditor()
|
||||||
|
{
|
||||||
|
// Copy the value of the current textarea, to the textarea that will be used by the editor.
|
||||||
|
document.getElementById('DataFCKeditor').value = document.getElementById('DataTextarea').value ;
|
||||||
|
|
||||||
|
// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
// oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
var sBasePath = document.location.href.substring(0,document.location.href.lastIndexOf('_samples')) ;
|
||||||
|
|
||||||
|
// Create an instance of FCKeditor (using the target textarea as the name).
|
||||||
|
var oFCKeditor = new FCKeditor( 'DataFCKeditor' ) ;
|
||||||
|
oFCKeditor.BasePath = sBasePath ;
|
||||||
|
oFCKeditor.Width = '100%' ;
|
||||||
|
oFCKeditor.Height = '350' ;
|
||||||
|
oFCKeditor.ReplaceTextarea() ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The FCKeditor_OnComplete function is a special function called everytime an
|
||||||
|
// editor instance is completely loaded and available for API interactions.
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
// Enable the switch button. It is disabled at startup, waiting the editor to be loaded.
|
||||||
|
document.getElementById('BtnSwitchTextarea').disabled = false ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function PrepareSave()
|
||||||
|
{
|
||||||
|
// If the textarea isn't visible update the content from the editor.
|
||||||
|
if ( document.getElementById( 'Textarea' ).style.display == 'none' )
|
||||||
|
{
|
||||||
|
var oEditor = FCKeditorAPI.GetInstance( 'DataFCKeditor' ) ;
|
||||||
|
document.getElementById( 'DataTextarea' ).value = oEditor.GetXHTML() ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>
|
||||||
|
FCKeditor - JavaScript - Sample 13
|
||||||
|
</h1>
|
||||||
|
<div>
|
||||||
|
This sample starts with a normal textarea and provides the ability to switch back
|
||||||
|
and forth between the textarea and FCKeditor. It uses the JavaScript API to do the
|
||||||
|
operations so it will work even if the internal implementation changes.
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<form action="../php/sampleposteddata.php" method="post" target="_blank" onsubmit="PrepareSave();">
|
||||||
|
<div id="Textarea">
|
||||||
|
<input type="button" value="Switch to FCKeditor" onclick="Toggle()" />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<textarea id="DataTextarea" name="Data" cols="80" rows="20" style="width: 95%">This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</textarea>
|
||||||
|
</div>
|
||||||
|
<div id="FCKeditor" style="display: none">
|
||||||
|
<!-- Note that the following button is disabled at startup.
|
||||||
|
It will be enabled once the editor is completely loaded. -->
|
||||||
|
<input id="BtnSwitchTextarea" type="button" disabled="disabled" value="Switch to Textarea" onclick="Toggle()" />
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
<!-- Note that the following textarea doesn't have a "name", so it will not be posted. -->
|
||||||
|
<textarea id="DataFCKeditor" cols="80" rows="20"></textarea>
|
||||||
|
</div>
|
||||||
|
<br />
|
||||||
|
<input type="submit" value="Submit" />
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
66
fckeditor/_samples/html/sample14.html
Normal file
66
fckeditor/_samples/html/sample14.html
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
-->
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript" src="../../fckeditor.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>
|
||||||
|
FCKeditor - JavaScript - Sample 14
|
||||||
|
</h1>
|
||||||
|
<div>
|
||||||
|
This sample shows FCKeditor configured to produce <strong>XHTML 1.1</strong> compliant
|
||||||
|
HTML. Deprecated elements or attributes, like the <font> and <u> elements
|
||||||
|
or the "style" attribute, are avoided.
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<form action="../php/sampleposteddata.php" method="post" target="_blank">
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
// oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
var sBasePath = document.location.href.substring(0,document.location.href.lastIndexOf('_samples')) ;
|
||||||
|
|
||||||
|
var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
|
||||||
|
oFCKeditor.BasePath = sBasePath ;
|
||||||
|
|
||||||
|
// Instruct the editor to load our configurations from a custom file, leaving the
|
||||||
|
// original configuration file untouched.
|
||||||
|
oFCKeditor.Config['CustomConfigurationsPath'] = sBasePath + '_samples/html/assets/sample14.config.js' ;
|
||||||
|
|
||||||
|
oFCKeditor.Height = 300 ;
|
||||||
|
oFCKeditor.Value = '<p>This is some <span class="Bold">sample text<\/span>. You are using <a href="http://www.fckeditor.net/">FCKeditor<\/a>.<\/p>' ;
|
||||||
|
oFCKeditor.Create() ;
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<br />
|
||||||
|
<input type="submit" value="Submit" />
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
66
fckeditor/_samples/html/sample15.html
Normal file
66
fckeditor/_samples/html/sample15.html
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
-->
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript" src="../../fckeditor.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>
|
||||||
|
FCKeditor - JavaScript - Sample 15
|
||||||
|
</h1>
|
||||||
|
<div>
|
||||||
|
This sample shows FCKeditor configured to produce a legacy HTML4 document. Traditional
|
||||||
|
HTML elements like <b>, <i>, and <font> are used in place of
|
||||||
|
<strong>, <em> and CSS styles.
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<form action="../php/sampleposteddata.php" method="post" target="_blank">
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
// oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
var sBasePath = document.location.href.substring(0,document.location.href.lastIndexOf('_samples')) ;
|
||||||
|
|
||||||
|
var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
|
||||||
|
oFCKeditor.BasePath = sBasePath ;
|
||||||
|
|
||||||
|
// Instruct the editor to load our configurations from a custom file, leaving the
|
||||||
|
// original configuration file untouched.
|
||||||
|
oFCKeditor.Config['CustomConfigurationsPath'] = sBasePath + '_samples/html/assets/sample15.config.js' ;
|
||||||
|
|
||||||
|
oFCKeditor.Height = 300 ;
|
||||||
|
oFCKeditor.Value = '<p>This is some <b>sample text<\/b>. You are using <a href="http://www.fckeditor.net/">FCKeditor<\/a>.<\/p>' ;
|
||||||
|
oFCKeditor.Create() ;
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<br />
|
||||||
|
<input type="submit" value="Submit" />
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
91
fckeditor/_samples/html/sample16.html
Normal file
91
fckeditor/_samples/html/sample16.html
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
-->
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript" src="../../fckeditor.js"></script>
|
||||||
|
<script type="text/javascript" src="assets/swfobject.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
function sendToFlash()
|
||||||
|
{
|
||||||
|
var html = FCKeditorAPI.GetInstance( 'FCKeditor1' ).GetData() ;
|
||||||
|
var flash = document.getElementById( 'fckFlash' ) ;
|
||||||
|
flash.setData( html ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function init()
|
||||||
|
{
|
||||||
|
var so = new SWFObject("assets/sample16.swf", "fckFlash", "550", "400", "8", "#ffffff") ;
|
||||||
|
so.addParam("wmode", "transparent");
|
||||||
|
so.write("fckFlashContainer") ;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body onload="init();">
|
||||||
|
<h1>
|
||||||
|
FCKeditor - JavaScript - Sample 16
|
||||||
|
</h1>
|
||||||
|
<div>
|
||||||
|
This sample shows FCKeditor configured to produce HTML code that can be used with
|
||||||
|
<a href="http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_14808#TextArea_Component">
|
||||||
|
Flash</a>.
|
||||||
|
</div>
|
||||||
|
<hr />
|
||||||
|
<table width="100%" cellpadding="0" cellspacing="0">
|
||||||
|
<tr>
|
||||||
|
<td style="width: 100%">
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
if ( document.location.protocol == 'file:' )
|
||||||
|
alert( 'Warning: This samples does not work when loaded from local filesystem due to security restrictions implemented in Flash.'
|
||||||
|
+ '\n\nPlease load the sample from a web server instead.') ;
|
||||||
|
// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
// oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
var sBasePath = document.location.href.substring(0,document.location.href.lastIndexOf('_samples')) ;
|
||||||
|
|
||||||
|
var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ;
|
||||||
|
oFCKeditor.BasePath = sBasePath ;
|
||||||
|
|
||||||
|
// Instruct the editor to load our configurations from a custom file, leaving the
|
||||||
|
// original configuration file untouched.
|
||||||
|
oFCKeditor.Config['CustomConfigurationsPath'] = sBasePath + '_samples/html/assets/sample16.config.js' ;
|
||||||
|
oFCKeditor.Height = 400 ;
|
||||||
|
oFCKeditor.Width = '100%' ;
|
||||||
|
oFCKeditor.ToolbarSet = 'Flash' ;
|
||||||
|
oFCKeditor.Value = '<p>This is some <b>sample text<\/b>. You are using <a href="http://www.fckeditor.net/">FCKeditor<\/a>.<\/p>' ;
|
||||||
|
oFCKeditor.Create() ;
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<input type="button" value="Send to Flash" onclick="sendToFlash();" />
|
||||||
|
</td>
|
||||||
|
<td valign="top" style="padding-left: 15px" id="fckFlashContainer">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
55
fckeditor/_samples/lasso/sample01.lasso
Normal file
55
fckeditor/_samples/lasso/sample01.lasso
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
[//lasso
|
||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
*/
|
||||||
|
]
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - Lasso - Sample 1</h1>
|
||||||
|
This sample displays a normal HTML form with an FCKeditor with full features
|
||||||
|
enabled.
|
||||||
|
<hr>
|
||||||
|
<form action="sampleposteddata.lasso" method="post" target="_blank">
|
||||||
|
[//lasso
|
||||||
|
include('../../fckeditor.lasso');
|
||||||
|
var('basepath') = response_filepath->split('_samples')->get(1);
|
||||||
|
|
||||||
|
var('myeditor') = fck_editor(
|
||||||
|
-instancename='FCKeditor1',
|
||||||
|
-basepath=$basepath,
|
||||||
|
-initialvalue='<p>This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</p>'
|
||||||
|
);
|
||||||
|
|
||||||
|
$myeditor->create;
|
||||||
|
]
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
109
fckeditor/_samples/lasso/sample02.lasso
Normal file
109
fckeditor/_samples/lasso/sample02.lasso
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
[//lasso
|
||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
*/
|
||||||
|
]
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
var oCombo = document.getElementById( 'cmbLanguages' ) ;
|
||||||
|
for ( code in editorInstance.Language.AvailableLanguages )
|
||||||
|
{
|
||||||
|
AddComboOption( oCombo, editorInstance.Language.AvailableLanguages[code] + ' (' + code + ')', code ) ;
|
||||||
|
}
|
||||||
|
oCombo.value = editorInstance.Language.ActiveLanguage.Code ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function AddComboOption(combo, optionText, optionValue)
|
||||||
|
{
|
||||||
|
var oOption = document.createElement("OPTION") ;
|
||||||
|
|
||||||
|
combo.options.add(oOption) ;
|
||||||
|
|
||||||
|
oOption.innerHTML = optionText ;
|
||||||
|
oOption.value = optionValue ;
|
||||||
|
|
||||||
|
return oOption ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeLanguage( languageCode )
|
||||||
|
{
|
||||||
|
window.location.href = window.location.pathname + "?Lang=" + languageCode ;
|
||||||
|
}
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - Lasso - Sample 2</h1>
|
||||||
|
This sample shows the editor in all its available languages.
|
||||||
|
<hr>
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select a language:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbLanguages" onchange="ChangeLanguage(this.value);">
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<form action="sampleposteddata.lasso" method="post" target="_blank">
|
||||||
|
[//lasso
|
||||||
|
include('../../fckeditor.lasso');
|
||||||
|
var('basepath') = response_filepath->split('_samples')->get(1);
|
||||||
|
|
||||||
|
if(action_param('Lang'));
|
||||||
|
var('config') = array(
|
||||||
|
'AutoDetectLanguage' = 'false',
|
||||||
|
'DefaultLanguage' = action_param('Lang')
|
||||||
|
);
|
||||||
|
else;
|
||||||
|
var('config') = array(
|
||||||
|
'AutoDetectLanguage' = 'true',
|
||||||
|
'DefaultLanguage' = 'en'
|
||||||
|
);
|
||||||
|
/if;
|
||||||
|
|
||||||
|
var('myeditor') = fck_editor(
|
||||||
|
-instancename='FCKeditor1',
|
||||||
|
-basepath=$basepath,
|
||||||
|
-config=$config,
|
||||||
|
-initialvalue='<p>This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</p>'
|
||||||
|
);
|
||||||
|
|
||||||
|
$myeditor->create;
|
||||||
|
]
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
87
fckeditor/_samples/lasso/sample03.lasso
Normal file
87
fckeditor/_samples/lasso/sample03.lasso
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
[//lasso
|
||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
*/
|
||||||
|
]
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
var oCombo = document.getElementById( 'cmbToolbars' ) ;
|
||||||
|
oCombo.value = editorInstance.ToolbarSet.Name ;
|
||||||
|
oCombo.style.visibility = '' ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeToolbar( toolbarName )
|
||||||
|
{
|
||||||
|
window.location.href = window.location.pathname + "?Toolbar=" + toolbarName ;
|
||||||
|
}
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - Lasso - Sample 3</h1>
|
||||||
|
This sample shows how to change the editor toolbar.
|
||||||
|
<hr>
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select the toolbar to load:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbToolbars" onchange="ChangeToolbar(this.value);" style="VISIBILITY: hidden">
|
||||||
|
<option value="Default" selected>Default</option>
|
||||||
|
<option value="Basic">Basic</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<form action="sampleposteddata.lasso" method="post" target="_blank">
|
||||||
|
[//lasso
|
||||||
|
include('../../fckeditor.lasso');
|
||||||
|
var('basepath') = response_filepath->split('_samples')->get(1);
|
||||||
|
|
||||||
|
var('myeditor') = fck_editor(
|
||||||
|
-instancename='FCKeditor1',
|
||||||
|
-basepath=$basepath,
|
||||||
|
-initialvalue='<p>This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</p>'
|
||||||
|
);
|
||||||
|
|
||||||
|
if(action_param('Toolbar'));
|
||||||
|
$myeditor->toolbarset = action_param('Toolbar');
|
||||||
|
/if;
|
||||||
|
|
||||||
|
$myeditor->create;
|
||||||
|
]
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
93
fckeditor/_samples/lasso/sample04.lasso
Normal file
93
fckeditor/_samples/lasso/sample04.lasso
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
[//lasso
|
||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
*/
|
||||||
|
]
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript">
|
||||||
|
<!--
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
var oCombo = document.getElementById( 'cmbSkins' ) ;
|
||||||
|
|
||||||
|
// Get the active skin.
|
||||||
|
var sSkin = editorInstance.Config['SkinPath'] ;
|
||||||
|
sSkin = sSkin.match( /[^\/]+(?=\/$)/g ) ;
|
||||||
|
|
||||||
|
oCombo.value = sSkin ;
|
||||||
|
oCombo.style.visibility = '' ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeSkin( skinName )
|
||||||
|
{
|
||||||
|
window.location.href = window.location.pathname + "?Skin=" + skinName ;
|
||||||
|
}
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - Lasso - Sample 4</h1>
|
||||||
|
This sample shows how to change the editor skin.
|
||||||
|
<hr>
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select the skin to load:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbSkins" onchange="ChangeSkin(this.value);" style="VISIBILITY: hidden">
|
||||||
|
<option value="default" selected>Default</option>
|
||||||
|
<option value="office2003">Office 2003</option>
|
||||||
|
<option value="silver">Silver</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<form action="sampleposteddata.lasso" method="post" target="_blank">
|
||||||
|
[//lasso
|
||||||
|
include('../../fckeditor.lasso');
|
||||||
|
var('basepath') = response_filepath->split('_samples')->get(1);
|
||||||
|
|
||||||
|
var('myeditor') = fck_editor(
|
||||||
|
-instancename='FCKeditor1',
|
||||||
|
-basepath=$basepath,
|
||||||
|
-initialvalue='<p>This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</p>'
|
||||||
|
);
|
||||||
|
|
||||||
|
if(action_param('Skin'));
|
||||||
|
$myeditor->config = array('SkinPath' = $basepath + 'editor/skins/' + action_param('Skin') + '/');
|
||||||
|
/if;
|
||||||
|
|
||||||
|
$myeditor->create;
|
||||||
|
]
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
53
fckeditor/_samples/lasso/sampleposteddata.lasso
Normal file
53
fckeditor/_samples/lasso/sampleposteddata.lasso
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
[//lasso
|
||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
*/
|
||||||
|
]
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Samples - Posted Data</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - Samples - Posted Data</h1>
|
||||||
|
This page lists all data posted by the form.
|
||||||
|
<hr>
|
||||||
|
<table border="1" cellspacing="0" id="outputSample">
|
||||||
|
<colgroup><col width="80"><col></colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Field Name</th>
|
||||||
|
<th>Value</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
[iterate(client_postparams, local('this'))]
|
||||||
|
<tr>
|
||||||
|
<th>[#this->first]</th>
|
||||||
|
<td><pre>[#this->second]</pre></td>
|
||||||
|
</tr>
|
||||||
|
[/iterate]
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
117
fckeditor/_samples/perl/sample01.cgi
Normal file
117
fckeditor/_samples/perl/sample01.cgi
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
#!/usr/bin/env perl
|
||||||
|
|
||||||
|
#####
|
||||||
|
# FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
# Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
#
|
||||||
|
# == BEGIN LICENSE ==
|
||||||
|
#
|
||||||
|
# Licensed under the terms of any of the following licenses at your
|
||||||
|
# choice:
|
||||||
|
#
|
||||||
|
# - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
# http://www.gnu.org/licenses/gpl.html
|
||||||
|
#
|
||||||
|
# - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
# http://www.gnu.org/licenses/lgpl.html
|
||||||
|
#
|
||||||
|
# - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
# http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
#
|
||||||
|
# == END LICENSE ==
|
||||||
|
#
|
||||||
|
# Sample page.
|
||||||
|
#####
|
||||||
|
|
||||||
|
## START: Hack for Windows (Not important to understand the editor code... Perl specific).
|
||||||
|
if(Windows_check()) {
|
||||||
|
chdir(GetScriptPath($0));
|
||||||
|
}
|
||||||
|
|
||||||
|
sub Windows_check
|
||||||
|
{
|
||||||
|
# IIS,PWS(NT/95)
|
||||||
|
$www_server_os = $^O;
|
||||||
|
# Win98 & NT(SP4)
|
||||||
|
if($www_server_os eq "") { $www_server_os= $ENV{'OS'}; }
|
||||||
|
# AnHTTPd/Omni/IIS
|
||||||
|
if($ENV{'SERVER_SOFTWARE'} =~ /AnWeb|Omni|IIS\//i) { $www_server_os= 'win'; }
|
||||||
|
# Win Apache
|
||||||
|
if($ENV{'WINDIR'} ne "") { $www_server_os= 'win'; }
|
||||||
|
if($www_server_os=~ /win/i) { return(1); }
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub GetScriptPath {
|
||||||
|
local($path) = @_;
|
||||||
|
if($path =~ /[\:\/\\]/) { $path =~ s/(.*?)[\/\\][^\/\\]+$/$1/; } else { $path = '.'; }
|
||||||
|
$path;
|
||||||
|
}
|
||||||
|
## END: Hack for IIS
|
||||||
|
|
||||||
|
require '../../fckeditor.pl';
|
||||||
|
|
||||||
|
# When $ENV{'PATH_INFO'} cannot be used by perl.
|
||||||
|
# $DefRootPath = "/XXXXX/_samples/perl/sample01.cgi"; Please write in script.
|
||||||
|
|
||||||
|
my $DefServerPath = "";
|
||||||
|
my $ServerPath;
|
||||||
|
|
||||||
|
$ServerPath = &GetServerPath();
|
||||||
|
print "Content-type: text/html\n\n";
|
||||||
|
print <<"_HTML_TAG_";
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - Perl - Sample 1</h1>
|
||||||
|
This sample displays a normal HTML form with an FCKeditor with full features
|
||||||
|
enabled.
|
||||||
|
<hr>
|
||||||
|
<form action="sampleposteddata.cgi" method="post" target="_blank">
|
||||||
|
_HTML_TAG_
|
||||||
|
|
||||||
|
#// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
#// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
#// $oFCKeditor->BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
|
||||||
|
$sBasePath = $ServerPath;
|
||||||
|
$sBasePath = substr($sBasePath,0,index($sBasePath,"_samples"));
|
||||||
|
&FCKeditor('FCKeditor1');
|
||||||
|
$BasePath = $sBasePath;
|
||||||
|
$Value = '<p>This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</p>';
|
||||||
|
&Create();
|
||||||
|
|
||||||
|
print <<"_HTML_TAG_";
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
_HTML_TAG_
|
||||||
|
|
||||||
|
################
|
||||||
|
#Please use this function, rewriting it depending on a server's environment.
|
||||||
|
################
|
||||||
|
sub GetServerPath
|
||||||
|
{
|
||||||
|
my $dir;
|
||||||
|
|
||||||
|
if($DefServerPath) {
|
||||||
|
$dir = $DefServerPath;
|
||||||
|
} else {
|
||||||
|
if($ENV{'PATH_INFO'}) {
|
||||||
|
$dir = $ENV{'PATH_INFO'};
|
||||||
|
} elsif($ENV{'FILEPATH_INFO'}) {
|
||||||
|
$dir = $ENV{'FILEPATH_INFO'};
|
||||||
|
} elsif($ENV{'REQUEST_URI'}) {
|
||||||
|
$dir = $ENV{'REQUEST_URI'};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return($dir);
|
||||||
|
}
|
182
fckeditor/_samples/perl/sample02.cgi
Normal file
182
fckeditor/_samples/perl/sample02.cgi
Normal file
@ -0,0 +1,182 @@
|
|||||||
|
#!/usr/bin/env perl
|
||||||
|
|
||||||
|
#####
|
||||||
|
# FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
# Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
#
|
||||||
|
# == BEGIN LICENSE ==
|
||||||
|
#
|
||||||
|
# Licensed under the terms of any of the following licenses at your
|
||||||
|
# choice:
|
||||||
|
#
|
||||||
|
# - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
# http://www.gnu.org/licenses/gpl.html
|
||||||
|
#
|
||||||
|
# - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
# http://www.gnu.org/licenses/lgpl.html
|
||||||
|
#
|
||||||
|
# - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
# http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
#
|
||||||
|
# == END LICENSE ==
|
||||||
|
#
|
||||||
|
# Sample page.
|
||||||
|
#####
|
||||||
|
|
||||||
|
## START: Hack for Windows (Not important to understand the editor code... Perl specific).
|
||||||
|
if(Windows_check()) {
|
||||||
|
chdir(GetScriptPath($0));
|
||||||
|
}
|
||||||
|
|
||||||
|
sub Windows_check
|
||||||
|
{
|
||||||
|
# IIS,PWS(NT/95)
|
||||||
|
$www_server_os = $^O;
|
||||||
|
# Win98 & NT(SP4)
|
||||||
|
if($www_server_os eq "") { $www_server_os= $ENV{'OS'}; }
|
||||||
|
# AnHTTPd/Omni/IIS
|
||||||
|
if($ENV{'SERVER_SOFTWARE'} =~ /AnWeb|Omni|IIS\//i) { $www_server_os= 'win'; }
|
||||||
|
# Win Apache
|
||||||
|
if($ENV{'WINDIR'} ne "") { $www_server_os= 'win'; }
|
||||||
|
if($www_server_os=~ /win/i) { return(1); }
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub GetScriptPath {
|
||||||
|
local($path) = @_;
|
||||||
|
if($path =~ /[\:\/\\]/) { $path =~ s/(.*?)[\/\\][^\/\\]+$/$1/; } else { $path = '.'; }
|
||||||
|
$path;
|
||||||
|
}
|
||||||
|
## END: Hack for IIS
|
||||||
|
|
||||||
|
require '../../fckeditor.pl';
|
||||||
|
|
||||||
|
# When $ENV{'PATH_INFO'} cannot be used by perl.
|
||||||
|
# $DefRootPath = "/XXXXX/_samples/perl/sample02.cgi"; Please write in script.
|
||||||
|
|
||||||
|
my $DefServerPath = "";
|
||||||
|
my $ServerPath;
|
||||||
|
|
||||||
|
$ServerPath = &GetServerPath();
|
||||||
|
|
||||||
|
if($ENV{'REQUEST_METHOD'} eq "POST") {
|
||||||
|
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
|
||||||
|
} else {
|
||||||
|
$buffer = $ENV{'QUERY_STRING'};
|
||||||
|
}
|
||||||
|
@pairs = split(/&/,$buffer);
|
||||||
|
foreach $pair (@pairs) {
|
||||||
|
($name,$value) = split(/=/,$pair);
|
||||||
|
$value =~ tr/+/ /;
|
||||||
|
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
|
||||||
|
$value =~ s/\t//g;
|
||||||
|
$value =~ s/\r\n/\n/g;
|
||||||
|
$FORM{$name} .= "\0" if(defined($FORM{$name}));
|
||||||
|
$FORM{$name} .= $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
print "Content-type: text/html\n\n";
|
||||||
|
print <<"_HTML_TAG_";
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
var oCombo = document.getElementById( 'cmbLanguages' ) ;
|
||||||
|
for ( code in editorInstance.Language.AvailableLanguages )
|
||||||
|
{
|
||||||
|
AddComboOption( oCombo, editorInstance.Language.AvailableLanguages[code] + ' (' + code + ')', code ) ;
|
||||||
|
}
|
||||||
|
oCombo.value = editorInstance.Language.ActiveLanguage.Code ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function AddComboOption(combo, optionText, optionValue)
|
||||||
|
{
|
||||||
|
var oOption = document.createElement("OPTION") ;
|
||||||
|
|
||||||
|
combo.options.add(oOption) ;
|
||||||
|
|
||||||
|
oOption.innerHTML = optionText ;
|
||||||
|
oOption.value = optionValue ;
|
||||||
|
|
||||||
|
return oOption ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeLanguage( languageCode )
|
||||||
|
{
|
||||||
|
window.location.href = window.location.pathname + "?Lang=" + languageCode ;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - Perl - Sample 2</h1>
|
||||||
|
This sample shows the editor in all its available languages.
|
||||||
|
<hr>
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select a language:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbLanguages" onchange="ChangeLanguage(this.value);">
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<form action="sampleposteddata.cgi" method="post" target="_blank">
|
||||||
|
_HTML_TAG_
|
||||||
|
|
||||||
|
#// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
#// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
#// $oFCKeditor->BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
$sBasePath = $ServerPath;
|
||||||
|
$sBasePath = substr( $sBasePath, 0, index($sBasePath,"_samples"));
|
||||||
|
|
||||||
|
&FCKeditor('FCKeditor1');
|
||||||
|
$BasePath = $sBasePath;
|
||||||
|
|
||||||
|
if($FORM{'Lang'} ne "") {
|
||||||
|
$Config{'AutoDetectLanguage'} = "false";
|
||||||
|
$Config{'DefaultLanguage'} = $FORM{'Lang'};
|
||||||
|
} else {
|
||||||
|
$Config{'AutoDetectLanguage'} = "true";
|
||||||
|
$Config{'DefaultLanguage'} = 'en' ;
|
||||||
|
}
|
||||||
|
$Value = '<p>This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</p>' ;
|
||||||
|
&Create();
|
||||||
|
|
||||||
|
print <<"_HTML_TAG_";
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
_HTML_TAG_
|
||||||
|
|
||||||
|
################
|
||||||
|
#Please use this function, rewriting it depending on a server's environment.
|
||||||
|
################
|
||||||
|
sub GetServerPath
|
||||||
|
{
|
||||||
|
my $dir;
|
||||||
|
|
||||||
|
if($DefServerPath) {
|
||||||
|
$dir = $DefServerPath;
|
||||||
|
} else {
|
||||||
|
if($ENV{'PATH_INFO'}) {
|
||||||
|
$dir = $ENV{'PATH_INFO'};
|
||||||
|
} elsif($ENV{'FILEPATH_INFO'}) {
|
||||||
|
$dir = $ENV{'FILEPATH_INFO'};
|
||||||
|
} elsif($ENV{'REQUEST_URI'}) {
|
||||||
|
$dir = $ENV{'REQUEST_URI'};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return($dir);
|
||||||
|
}
|
167
fckeditor/_samples/perl/sample03.cgi
Normal file
167
fckeditor/_samples/perl/sample03.cgi
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
#!/usr/bin/env perl
|
||||||
|
|
||||||
|
#####
|
||||||
|
# FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
# Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
#
|
||||||
|
# == BEGIN LICENSE ==
|
||||||
|
#
|
||||||
|
# Licensed under the terms of any of the following licenses at your
|
||||||
|
# choice:
|
||||||
|
#
|
||||||
|
# - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
# http://www.gnu.org/licenses/gpl.html
|
||||||
|
#
|
||||||
|
# - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
# http://www.gnu.org/licenses/lgpl.html
|
||||||
|
#
|
||||||
|
# - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
# http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
#
|
||||||
|
# == END LICENSE ==
|
||||||
|
#
|
||||||
|
# Sample page.
|
||||||
|
#####
|
||||||
|
|
||||||
|
## START: Hack for Windows (Not important to understand the editor code... Perl specific).
|
||||||
|
if(Windows_check()) {
|
||||||
|
chdir(GetScriptPath($0));
|
||||||
|
}
|
||||||
|
|
||||||
|
sub Windows_check
|
||||||
|
{
|
||||||
|
# IIS,PWS(NT/95)
|
||||||
|
$www_server_os = $^O;
|
||||||
|
# Win98 & NT(SP4)
|
||||||
|
if($www_server_os eq "") { $www_server_os= $ENV{'OS'}; }
|
||||||
|
# AnHTTPd/Omni/IIS
|
||||||
|
if($ENV{'SERVER_SOFTWARE'} =~ /AnWeb|Omni|IIS\//i) { $www_server_os= 'win'; }
|
||||||
|
# Win Apache
|
||||||
|
if($ENV{'WINDIR'} ne "") { $www_server_os= 'win'; }
|
||||||
|
if($www_server_os=~ /win/i) { return(1); }
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub GetScriptPath {
|
||||||
|
local($path) = @_;
|
||||||
|
if($path =~ /[\:\/\\]/) { $path =~ s/(.*?)[\/\\][^\/\\]+$/$1/; } else { $path = '.'; }
|
||||||
|
$path;
|
||||||
|
}
|
||||||
|
## END: Hack for IIS
|
||||||
|
|
||||||
|
require '../../fckeditor.pl';
|
||||||
|
|
||||||
|
# When $ENV{'PATH_INFO'} cannot be used by perl.
|
||||||
|
# $DefRootPath = "/XXXXX/_samples/perl/sample03.cgi"; Please write in script.
|
||||||
|
|
||||||
|
my $DefServerPath = "";
|
||||||
|
my $ServerPath;
|
||||||
|
|
||||||
|
$ServerPath = &GetServerPath();
|
||||||
|
|
||||||
|
if($ENV{'REQUEST_METHOD'} eq "POST") {
|
||||||
|
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
|
||||||
|
} else {
|
||||||
|
$buffer = $ENV{'QUERY_STRING'};
|
||||||
|
}
|
||||||
|
@pairs = split(/&/,$buffer);
|
||||||
|
foreach $pair (@pairs) {
|
||||||
|
($name,$value) = split(/=/,$pair);
|
||||||
|
$value =~ tr/+/ /;
|
||||||
|
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
|
||||||
|
$value =~ s/\t//g;
|
||||||
|
$value =~ s/\r\n/\n/g;
|
||||||
|
$FORM{$name} .= "\0" if(defined($FORM{$name}));
|
||||||
|
$FORM{$name} .= $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
print "Content-type: text/html\n\n";
|
||||||
|
print <<"_HTML_TAG_";
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
var oCombo = document.getElementById( 'cmbToolbars' ) ;
|
||||||
|
oCombo.value = editorInstance.ToolbarSet.Name ;
|
||||||
|
oCombo.style.visibility = '' ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeToolbar( toolbarName )
|
||||||
|
{
|
||||||
|
window.location.href = window.location.pathname + "?Toolbar=" + toolbarName ;
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - Perl - Sample 3</h1>
|
||||||
|
This sample shows how to change the editor toolbar.
|
||||||
|
<hr>
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select the toolbar to load:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbToolbars" onchange="ChangeToolbar(this.value);" style="VISIBILITY: hidden">
|
||||||
|
<option value="Default" selected>Default</option>
|
||||||
|
<option value="Basic">Basic</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<form action="sampleposteddata.cgi" method="post" target="_blank">
|
||||||
|
_HTML_TAG_
|
||||||
|
|
||||||
|
#// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
#// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
#// $oFCKeditor->BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
|
||||||
|
$sBasePath = $ServerPath;
|
||||||
|
$sBasePath = substr($sBasePath, 0, index( $sBasePath, "_samples" ));
|
||||||
|
|
||||||
|
&FCKeditor('FCKeditor1') ;
|
||||||
|
$BasePath = $sBasePath ;
|
||||||
|
|
||||||
|
if($FORM{'Toolbar'} ne "") {
|
||||||
|
$ToolbarSet = &specialchar_cnv( $FORM{'Toolbar'} );
|
||||||
|
}
|
||||||
|
$Value = '<p>This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</p>' ;
|
||||||
|
&Create();
|
||||||
|
|
||||||
|
print <<"_HTML_TAG_";
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
_HTML_TAG_
|
||||||
|
|
||||||
|
################
|
||||||
|
#Please use this function, rewriting it depending on a server's environment.
|
||||||
|
################
|
||||||
|
sub GetServerPath
|
||||||
|
{
|
||||||
|
my $dir;
|
||||||
|
|
||||||
|
if($DefServerPath) {
|
||||||
|
$dir = $DefServerPath;
|
||||||
|
} else {
|
||||||
|
if($ENV{'PATH_INFO'}) {
|
||||||
|
$dir = $ENV{'PATH_INFO'};
|
||||||
|
} elsif($ENV{'FILEPATH_INFO'}) {
|
||||||
|
$dir = $ENV{'FILEPATH_INFO'};
|
||||||
|
} elsif($ENV{'REQUEST_URI'}) {
|
||||||
|
$dir = $ENV{'REQUEST_URI'};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return($dir);
|
||||||
|
}
|
174
fckeditor/_samples/perl/sample04.cgi
Normal file
174
fckeditor/_samples/perl/sample04.cgi
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
#!/usr/bin/env perl
|
||||||
|
|
||||||
|
#####
|
||||||
|
# FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
# Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
#
|
||||||
|
# == BEGIN LICENSE ==
|
||||||
|
#
|
||||||
|
# Licensed under the terms of any of the following licenses at your
|
||||||
|
# choice:
|
||||||
|
#
|
||||||
|
# - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
# http://www.gnu.org/licenses/gpl.html
|
||||||
|
#
|
||||||
|
# - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
# http://www.gnu.org/licenses/lgpl.html
|
||||||
|
#
|
||||||
|
# - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
# http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
#
|
||||||
|
# == END LICENSE ==
|
||||||
|
#
|
||||||
|
# Sample page.
|
||||||
|
#####
|
||||||
|
|
||||||
|
## START: Hack for Windows (Not important to understand the editor code... Perl specific).
|
||||||
|
if(Windows_check()) {
|
||||||
|
chdir(GetScriptPath($0));
|
||||||
|
}
|
||||||
|
|
||||||
|
sub Windows_check
|
||||||
|
{
|
||||||
|
# IIS,PWS(NT/95)
|
||||||
|
$www_server_os = $^O;
|
||||||
|
# Win98 & NT(SP4)
|
||||||
|
if($www_server_os eq "") { $www_server_os= $ENV{'OS'}; }
|
||||||
|
# AnHTTPd/Omni/IIS
|
||||||
|
if($ENV{'SERVER_SOFTWARE'} =~ /AnWeb|Omni|IIS\//i) { $www_server_os= 'win'; }
|
||||||
|
# Win Apache
|
||||||
|
if($ENV{'WINDIR'} ne "") { $www_server_os= 'win'; }
|
||||||
|
if($www_server_os=~ /win/i) { return(1); }
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub GetScriptPath {
|
||||||
|
local($path) = @_;
|
||||||
|
if($path =~ /[\:\/\\]/) { $path =~ s/(.*?)[\/\\][^\/\\]+$/$1/; } else { $path = '.'; }
|
||||||
|
$path;
|
||||||
|
}
|
||||||
|
## END: Hack for IIS
|
||||||
|
|
||||||
|
require '../../fckeditor.pl';
|
||||||
|
|
||||||
|
# When $ENV{'PATH_INFO'} cannot be used by perl.
|
||||||
|
# $DefRootPath = "/XXXXX/_samples/perl/sample04.cgi"; Please write in script.
|
||||||
|
|
||||||
|
my $DefServerPath = "";
|
||||||
|
my $ServerPath;
|
||||||
|
|
||||||
|
$ServerPath = &GetServerPath();
|
||||||
|
|
||||||
|
if($ENV{'REQUEST_METHOD'} eq "POST") {
|
||||||
|
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
|
||||||
|
} else {
|
||||||
|
$buffer = $ENV{'QUERY_STRING'};
|
||||||
|
}
|
||||||
|
@pairs = split(/&/,$buffer);
|
||||||
|
foreach $pair (@pairs) {
|
||||||
|
($name,$value) = split(/=/,$pair);
|
||||||
|
$value =~ tr/+/ /;
|
||||||
|
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
|
||||||
|
$value =~ s/\t//g;
|
||||||
|
$value =~ s/\r\n/\n/g;
|
||||||
|
$FORM{$name} .= "\0" if(defined($FORM{$name}));
|
||||||
|
$FORM{$name} .= $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
#!!Caution javascript \ Quart
|
||||||
|
|
||||||
|
print "Content-type: text/html\n\n";
|
||||||
|
print <<"_HTML_TAG_";
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
var oCombo = document.getElementById( 'cmbSkins' ) ;
|
||||||
|
|
||||||
|
// Get the active skin.
|
||||||
|
var sSkin = editorInstance.Config['SkinPath'] ;
|
||||||
|
sSkin = sSkin.match(/[^\\/]+(?=\\/\$)/g) ;
|
||||||
|
|
||||||
|
oCombo.value = sSkin ;
|
||||||
|
oCombo.style.visibility = '' ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeSkin( skinName )
|
||||||
|
{
|
||||||
|
window.location.href = window.location.pathname + "?Skin=" + skinName ;
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - Perl - Sample 4</h1>
|
||||||
|
This sample shows how to change the editor skin.
|
||||||
|
<hr>
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select the skin to load:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbSkins" onchange="ChangeSkin(this.value);" style="VISIBILITY: hidden">
|
||||||
|
<option value="default" selected>Default</option>
|
||||||
|
<option value="office2003">Office 2003</option>
|
||||||
|
<option value="silver">Silver</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<form action="sampleposteddata.cgi" method="post" target="_blank">
|
||||||
|
_HTML_TAG_
|
||||||
|
|
||||||
|
#// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
#// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
#// $oFCKeditor->BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
$sBasePath = $ServerPath;
|
||||||
|
$sBasePath = substr( $sBasePath, 0, index( $sBasePath, "_samples" ) ) ;
|
||||||
|
|
||||||
|
&FCKeditor('FCKeditor1');
|
||||||
|
$BasePath = $sBasePath;
|
||||||
|
|
||||||
|
if($FORM{'Skin'} ne "") {
|
||||||
|
$Config{'SkinPath'} = $sBasePath . 'editor/skins/' . &specialchar_cnv( $FORM{'Skin'} ) . '/' ;
|
||||||
|
}
|
||||||
|
$Value = '<p>This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</p>' ;
|
||||||
|
&Create() ;
|
||||||
|
|
||||||
|
print <<"_HTML_TAG_";
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
_HTML_TAG_
|
||||||
|
|
||||||
|
################
|
||||||
|
#Please use this function, rewriting it depending on a server's environment.
|
||||||
|
################
|
||||||
|
sub GetServerPath
|
||||||
|
{
|
||||||
|
my $dir;
|
||||||
|
|
||||||
|
if($DefServerPath) {
|
||||||
|
$dir = $DefServerPath;
|
||||||
|
} else {
|
||||||
|
if($ENV{'PATH_INFO'}) {
|
||||||
|
$dir = $ENV{'PATH_INFO'};
|
||||||
|
} elsif($ENV{'FILEPATH_INFO'}) {
|
||||||
|
$dir = $ENV{'FILEPATH_INFO'};
|
||||||
|
} elsif($ENV{'REQUEST_URI'}) {
|
||||||
|
$dir = $ENV{'REQUEST_URI'};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return($dir);
|
||||||
|
}
|
107
fckeditor/_samples/perl/sampleposteddata.cgi
Normal file
107
fckeditor/_samples/perl/sampleposteddata.cgi
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
#!/usr/bin/env perl
|
||||||
|
|
||||||
|
#####
|
||||||
|
# FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
# Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
#
|
||||||
|
# == BEGIN LICENSE ==
|
||||||
|
#
|
||||||
|
# Licensed under the terms of any of the following licenses at your
|
||||||
|
# choice:
|
||||||
|
#
|
||||||
|
# - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
# http://www.gnu.org/licenses/gpl.html
|
||||||
|
#
|
||||||
|
# - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
# http://www.gnu.org/licenses/lgpl.html
|
||||||
|
#
|
||||||
|
# - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
# http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
#
|
||||||
|
# == END LICENSE ==
|
||||||
|
#
|
||||||
|
# This page lists the data posted by a form.
|
||||||
|
#####
|
||||||
|
|
||||||
|
## START: Hack for Windows (Not important to understand the editor code... Perl specific).
|
||||||
|
if(Windows_check()) {
|
||||||
|
chdir(GetScriptPath($0));
|
||||||
|
}
|
||||||
|
|
||||||
|
sub Windows_check
|
||||||
|
{
|
||||||
|
# IIS,PWS(NT/95)
|
||||||
|
$www_server_os = $^O;
|
||||||
|
# Win98 & NT(SP4)
|
||||||
|
if($www_server_os eq "") { $www_server_os= $ENV{'OS'}; }
|
||||||
|
# AnHTTPd/Omni/IIS
|
||||||
|
if($ENV{'SERVER_SOFTWARE'} =~ /AnWeb|Omni|IIS\//i) { $www_server_os= 'win'; }
|
||||||
|
# Win Apache
|
||||||
|
if($ENV{'WINDIR'} ne "") { $www_server_os= 'win'; }
|
||||||
|
if($www_server_os=~ /win/i) { return(1); }
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub GetScriptPath {
|
||||||
|
local($path) = @_;
|
||||||
|
if($path =~ /[\:\/\\]/) { $path =~ s/(.*?)[\/\\][^\/\\]+$/$1/; } else { $path = '.'; }
|
||||||
|
$path;
|
||||||
|
}
|
||||||
|
## END: Hack for IIS
|
||||||
|
|
||||||
|
require '../../fckeditor.pl';
|
||||||
|
|
||||||
|
if($ENV{'REQUEST_METHOD'} eq "POST") {
|
||||||
|
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
|
||||||
|
} else {
|
||||||
|
$buffer = $ENV{'QUERY_STRING'};
|
||||||
|
}
|
||||||
|
@pairs = split(/&/,$buffer);
|
||||||
|
foreach $pair (@pairs) {
|
||||||
|
($name,$value) = split(/=/,$pair);
|
||||||
|
$value =~ tr/+/ /;
|
||||||
|
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
|
||||||
|
$value =~ s/\t//g;
|
||||||
|
$value =~ s/\r\n/\n/g;
|
||||||
|
$FORM{$name} .= "\0" if(defined($FORM{$name}));
|
||||||
|
$FORM{$name} .= $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
print "Content-type: text/html\n\n";
|
||||||
|
print <<"_HTML_TAG_";
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Samples - Posted Data</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" >
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - Samples - Posted Data</h1>
|
||||||
|
This page lists all data posted by the form.
|
||||||
|
<hr>
|
||||||
|
<table border="1" cellspacing="0" id="outputSample">
|
||||||
|
<colgroup><col width="80"><col></colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Field Name</th>
|
||||||
|
<th>Value</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
_HTML_TAG_
|
||||||
|
|
||||||
|
foreach $key (keys %FORM) {
|
||||||
|
$postedValue = &specialchar_cnv($FORM{$key});
|
||||||
|
print <<"_HTML_TAG_";
|
||||||
|
<tr>
|
||||||
|
<th>$key</th>
|
||||||
|
<td><pre>$postedValue</pre></td>
|
||||||
|
</tr>
|
||||||
|
_HTML_TAG_
|
||||||
|
}
|
||||||
|
print <<"_HTML_TAG_";
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
_HTML_TAG_
|
57
fckeditor/_samples/php/sample01.php
Normal file
57
fckeditor/_samples/php/sample01.php
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
*/
|
||||||
|
|
||||||
|
include("../../fckeditor.php") ;
|
||||||
|
?>
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - PHP - Sample 1</h1>
|
||||||
|
This sample displays a normal HTML form with an FCKeditor with full features
|
||||||
|
enabled.
|
||||||
|
<hr>
|
||||||
|
<form action="sampleposteddata.php" method="post" target="_blank">
|
||||||
|
<?php
|
||||||
|
// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
// $oFCKeditor->BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
$sBasePath = $_SERVER['PHP_SELF'] ;
|
||||||
|
$sBasePath = substr( $sBasePath, 0, strpos( $sBasePath, "_samples" ) ) ;
|
||||||
|
|
||||||
|
$oFCKeditor = new FCKeditor('FCKeditor1') ;
|
||||||
|
$oFCKeditor->BasePath = $sBasePath ;
|
||||||
|
$oFCKeditor->Value = '<p>This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</p>' ;
|
||||||
|
$oFCKeditor->Create() ;
|
||||||
|
?>
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
108
fckeditor/_samples/php/sample02.php
Normal file
108
fckeditor/_samples/php/sample02.php
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
*/
|
||||||
|
|
||||||
|
include("../../fckeditor.php") ;
|
||||||
|
?>
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
var oCombo = document.getElementById( 'cmbLanguages' ) ;
|
||||||
|
for ( code in editorInstance.Language.AvailableLanguages )
|
||||||
|
{
|
||||||
|
AddComboOption( oCombo, editorInstance.Language.AvailableLanguages[code] + ' (' + code + ')', code ) ;
|
||||||
|
}
|
||||||
|
oCombo.value = editorInstance.Language.ActiveLanguage.Code ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function AddComboOption(combo, optionText, optionValue)
|
||||||
|
{
|
||||||
|
var oOption = document.createElement("OPTION") ;
|
||||||
|
|
||||||
|
combo.options.add(oOption) ;
|
||||||
|
|
||||||
|
oOption.innerHTML = optionText ;
|
||||||
|
oOption.value = optionValue ;
|
||||||
|
|
||||||
|
return oOption ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeLanguage( languageCode )
|
||||||
|
{
|
||||||
|
window.location.href = window.location.pathname + "?Lang=" + languageCode ;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - PHP - Sample 2</h1>
|
||||||
|
This sample shows the editor in all its available languages.
|
||||||
|
<hr>
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select a language:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbLanguages" onchange="ChangeLanguage(this.value);">
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<form action="sampleposteddata.php" method="post" target="_blank">
|
||||||
|
<?php
|
||||||
|
// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
// $oFCKeditor->BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
$sBasePath = $_SERVER['PHP_SELF'] ;
|
||||||
|
$sBasePath = substr( $sBasePath, 0, strpos( $sBasePath, "_samples" ) ) ;
|
||||||
|
|
||||||
|
$oFCKeditor = new FCKeditor('FCKeditor1') ;
|
||||||
|
$oFCKeditor->BasePath = $sBasePath ;
|
||||||
|
|
||||||
|
if ( isset($_GET['Lang']) )
|
||||||
|
{
|
||||||
|
$oFCKeditor->Config['AutoDetectLanguage'] = false ;
|
||||||
|
$oFCKeditor->Config['DefaultLanguage'] = $_GET['Lang'] ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$oFCKeditor->Config['AutoDetectLanguage'] = true ;
|
||||||
|
$oFCKeditor->Config['DefaultLanguage'] = 'en' ;
|
||||||
|
}
|
||||||
|
|
||||||
|
$oFCKeditor->Value = '<p>This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</p>' ;
|
||||||
|
$oFCKeditor->Create() ;
|
||||||
|
?> <br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
89
fckeditor/_samples/php/sample03.php
Normal file
89
fckeditor/_samples/php/sample03.php
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
*/
|
||||||
|
|
||||||
|
include("../../fckeditor.php") ;
|
||||||
|
?>
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
var oCombo = document.getElementById( 'cmbToolbars' ) ;
|
||||||
|
oCombo.value = editorInstance.ToolbarSet.Name ;
|
||||||
|
oCombo.style.visibility = '' ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeToolbar( toolbarName )
|
||||||
|
{
|
||||||
|
window.location.href = window.location.pathname + "?Toolbar=" + toolbarName ;
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - PHP - Sample 3</h1>
|
||||||
|
This sample shows how to change the editor toolbar.
|
||||||
|
<hr>
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select the toolbar to load:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbToolbars" onchange="ChangeToolbar(this.value);" style="VISIBILITY: hidden">
|
||||||
|
<option value="Default" selected>Default</option>
|
||||||
|
<option value="Basic">Basic</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<form action="sampleposteddata.php" method="post" target="_blank">
|
||||||
|
<?php
|
||||||
|
// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
// $oFCKeditor->BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
$sBasePath = $_SERVER['PHP_SELF'] ;
|
||||||
|
$sBasePath = substr( $sBasePath, 0, strpos( $sBasePath, "_samples" ) ) ;
|
||||||
|
|
||||||
|
$oFCKeditor = new FCKeditor('FCKeditor1') ;
|
||||||
|
$oFCKeditor->BasePath = $sBasePath ;
|
||||||
|
|
||||||
|
if ( isset($_GET['Toolbar']) )
|
||||||
|
$oFCKeditor->ToolbarSet = htmlspecialchars($_GET['Toolbar']);
|
||||||
|
|
||||||
|
$oFCKeditor->Value = '<p>This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</p>' ;
|
||||||
|
$oFCKeditor->Create() ;
|
||||||
|
?>
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
95
fckeditor/_samples/php/sample04.php
Normal file
95
fckeditor/_samples/php/sample04.php
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Sample page.
|
||||||
|
*/
|
||||||
|
|
||||||
|
include("../../fckeditor.php") ;
|
||||||
|
?>
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function FCKeditor_OnComplete( editorInstance )
|
||||||
|
{
|
||||||
|
var oCombo = document.getElementById( 'cmbSkins' ) ;
|
||||||
|
|
||||||
|
// Get the active skin.
|
||||||
|
var sSkin = editorInstance.Config['SkinPath'] ;
|
||||||
|
sSkin = sSkin.match( /[^\/]+(?=\/$)/g ) ;
|
||||||
|
|
||||||
|
oCombo.value = sSkin ;
|
||||||
|
oCombo.style.visibility = '' ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ChangeSkin( skinName )
|
||||||
|
{
|
||||||
|
window.location.href = window.location.pathname + "?Skin=" + skinName ;
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - PHP - Sample 4</h1>
|
||||||
|
This sample shows how to change the editor skin.
|
||||||
|
<hr>
|
||||||
|
<table cellpadding="0" cellspacing="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Select the skin to load:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="cmbSkins" onchange="ChangeSkin(this.value);" style="VISIBILITY: hidden">
|
||||||
|
<option value="default" selected>Default</option>
|
||||||
|
<option value="office2003">Office 2003</option>
|
||||||
|
<option value="silver">Silver</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<form action="sampleposteddata.php" method="post" target="_blank">
|
||||||
|
<?php
|
||||||
|
// Automatically calculates the editor base path based on the _samples directory.
|
||||||
|
// This is usefull only for these samples. A real application should use something like this:
|
||||||
|
// $oFCKeditor->BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value.
|
||||||
|
$sBasePath = $_SERVER['PHP_SELF'] ;
|
||||||
|
$sBasePath = substr( $sBasePath, 0, strpos( $sBasePath, "_samples" ) ) ;
|
||||||
|
|
||||||
|
$oFCKeditor = new FCKeditor('FCKeditor1') ;
|
||||||
|
$oFCKeditor->BasePath = $sBasePath ;
|
||||||
|
|
||||||
|
if ( isset($_GET['Skin']) )
|
||||||
|
$oFCKeditor->Config['SkinPath'] = $sBasePath . 'editor/skins/' . htmlspecialchars($_GET['Skin']) . '/' ;
|
||||||
|
|
||||||
|
$oFCKeditor->Value = '<p>This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</p>' ;
|
||||||
|
$oFCKeditor->Create() ;
|
||||||
|
?>
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
69
fckeditor/_samples/php/sampleposteddata.php
Normal file
69
fckeditor/_samples/php/sampleposteddata.php
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* This page lists the data posted by a form.
|
||||||
|
*/
|
||||||
|
?>
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Samples - Posted Data</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" >
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - Samples - Posted Data</h1>
|
||||||
|
This page lists all data posted by the form.
|
||||||
|
<hr>
|
||||||
|
<table border="1" cellspacing="0" id="outputSample">
|
||||||
|
<colgroup><col width="80"><col></colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Field Name</th>
|
||||||
|
<th>Value</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
if ( isset( $_POST ) )
|
||||||
|
$postArray = &$_POST ; // 4.1.0 or later, use $_POST
|
||||||
|
else
|
||||||
|
$postArray = &$HTTP_POST_VARS ; // prior to 4.1.0, use HTTP_POST_VARS
|
||||||
|
|
||||||
|
foreach ( $postArray as $sForm => $value )
|
||||||
|
{
|
||||||
|
if ( get_magic_quotes_gpc() )
|
||||||
|
$postedValue = htmlspecialchars( stripslashes( $value ) ) ;
|
||||||
|
else
|
||||||
|
$postedValue = htmlspecialchars( $value ) ;
|
||||||
|
|
||||||
|
?>
|
||||||
|
<tr>
|
||||||
|
<th><?php echo $sForm?></th>
|
||||||
|
<td><pre><?php echo $postedValue?></pre></td>
|
||||||
|
</tr>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
80
fckeditor/_samples/py/sample01.py
Normal file
80
fckeditor/_samples/py/sample01.py
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
"""
|
||||||
|
FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
|
||||||
|
== BEGIN LICENSE ==
|
||||||
|
|
||||||
|
Licensed under the terms of any of the following licenses at your
|
||||||
|
choice:
|
||||||
|
|
||||||
|
- GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
http://www.gnu.org/licenses/gpl.html
|
||||||
|
|
||||||
|
- GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
http://www.gnu.org/licenses/lgpl.html
|
||||||
|
|
||||||
|
- Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
|
||||||
|
== END LICENSE ==
|
||||||
|
|
||||||
|
Sample page.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import cgi
|
||||||
|
import os
|
||||||
|
|
||||||
|
# Ensure that the fckeditor.py is included in your classpath
|
||||||
|
import fckeditor
|
||||||
|
|
||||||
|
# Tell the browser to render html
|
||||||
|
print "Content-Type: text/html"
|
||||||
|
print ""
|
||||||
|
|
||||||
|
# Document header
|
||||||
|
print """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>FCKeditor - Python - Sample 1</h1>
|
||||||
|
This sample displays a normal HTML form with an FCKeditor with full features
|
||||||
|
enabled.
|
||||||
|
<hr>
|
||||||
|
<form action="sampleposteddata.py" method="post" target="_blank">
|
||||||
|
"""
|
||||||
|
|
||||||
|
# This is the real work
|
||||||
|
try:
|
||||||
|
sBasePath = os.environ.get("SCRIPT_NAME")
|
||||||
|
sBasePath = sBasePath[0:sBasePath.find("_samples")]
|
||||||
|
|
||||||
|
oFCKeditor = fckeditor.FCKeditor('FCKeditor1')
|
||||||
|
oFCKeditor.BasePath = sBasePath
|
||||||
|
oFCKeditor.Value = """<p>This is some <strong>sample text</strong>. You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.</p>"""
|
||||||
|
print oFCKeditor.Create()
|
||||||
|
except Exception, e:
|
||||||
|
print e
|
||||||
|
print """
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Submit">
|
||||||
|
</form>
|
||||||
|
"""
|
||||||
|
|
||||||
|
# For testing your environments
|
||||||
|
print "<hr>"
|
||||||
|
for key in os.environ.keys():
|
||||||
|
print "%s: %s<br>" % (key, os.environ.get(key, ""))
|
||||||
|
print "<hr>"
|
||||||
|
|
||||||
|
# Document footer
|
||||||
|
print """
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"""
|
88
fckeditor/_samples/py/sampleposteddata.py
Normal file
88
fckeditor/_samples/py/sampleposteddata.py
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
"""
|
||||||
|
FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
|
||||||
|
== BEGIN LICENSE ==
|
||||||
|
|
||||||
|
Licensed under the terms of any of the following licenses at your
|
||||||
|
choice:
|
||||||
|
|
||||||
|
- GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
http://www.gnu.org/licenses/gpl.html
|
||||||
|
|
||||||
|
- GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
http://www.gnu.org/licenses/lgpl.html
|
||||||
|
|
||||||
|
- Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
|
||||||
|
== END LICENSE ==
|
||||||
|
|
||||||
|
This page lists the data posted by a form.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import cgi
|
||||||
|
import os
|
||||||
|
|
||||||
|
# Tell the browser to render html
|
||||||
|
print "Content-Type: text/html"
|
||||||
|
print ""
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Create a cgi object
|
||||||
|
form = cgi.FieldStorage()
|
||||||
|
except Exception, e:
|
||||||
|
print e
|
||||||
|
|
||||||
|
# Document header
|
||||||
|
print """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Samples - Posted Data</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="../sample.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
"""
|
||||||
|
|
||||||
|
# This is the real work
|
||||||
|
print """
|
||||||
|
<h1>FCKeditor - Samples - Posted Data</h1>
|
||||||
|
This page lists all data posted by the form.
|
||||||
|
<hr>
|
||||||
|
<table border="1" cellspacing="0" id="outputSample">
|
||||||
|
<colgroup><col width="80"><col></colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Field Name</th>
|
||||||
|
<th>Value</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
"""
|
||||||
|
for key in form.keys():
|
||||||
|
try:
|
||||||
|
value = form[key].value
|
||||||
|
print """
|
||||||
|
<tr>
|
||||||
|
<th>%s</th>
|
||||||
|
<td><pre>%s</pre></td>
|
||||||
|
</tr>
|
||||||
|
""" % (key, value)
|
||||||
|
except Exception, e:
|
||||||
|
print e
|
||||||
|
print "</table>"
|
||||||
|
|
||||||
|
# For testing your environments
|
||||||
|
print "<hr>"
|
||||||
|
for key in os.environ.keys():
|
||||||
|
print "%s: %s<br>" % (key, os.environ.get(key, ""))
|
||||||
|
print "<hr>"
|
||||||
|
|
||||||
|
# Document footer
|
||||||
|
print """
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"""
|
74
fckeditor/_samples/sample.css
Normal file
74
fckeditor/_samples/sample.css
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Styles used in the samples pages.
|
||||||
|
*/
|
||||||
|
|
||||||
|
body, td, th, input, select, textarea
|
||||||
|
{
|
||||||
|
font-size: 12px;
|
||||||
|
font-family: Arial, Verdana, Sans-Serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1
|
||||||
|
{
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 180%;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
form
|
||||||
|
{
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#outputSample
|
||||||
|
{
|
||||||
|
table-layout: fixed;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre
|
||||||
|
{
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
white-space: pre; /* CSS2 */
|
||||||
|
white-space: -moz-pre-wrap; /* Mozilla*/
|
||||||
|
white-space: -o-pre-wrap; /* Opera 7 */
|
||||||
|
white-space: pre-wrap; /* CSS 2.1 */
|
||||||
|
white-space: pre-line; /* CSS 3 (and 2.1 as well, actually) */
|
||||||
|
word-wrap: break-word; /* IE */
|
||||||
|
}
|
||||||
|
|
||||||
|
#outputSample thead th
|
||||||
|
{
|
||||||
|
color: #dddddd;
|
||||||
|
background-color: #999999;
|
||||||
|
padding: 4px;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
#outputSample tbody th
|
||||||
|
{
|
||||||
|
vertical-align: top;
|
||||||
|
text-align: left;
|
||||||
|
}
|
120
fckeditor/_samples/sampleslist.html
Normal file
120
fckeditor/_samples/sampleslist.html
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
|
||||||
|
"http://www.w3.org/TR/html4/strict.dtd">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Page used to select the sample to view.
|
||||||
|
-->
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Sample Selection</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta name="robots" content="noindex, nofollow">
|
||||||
|
<link href="sample.css" rel="stylesheet" type="text/css">
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
if ( window.top == window )
|
||||||
|
document.location = 'default.html' ;
|
||||||
|
|
||||||
|
function OpenSample( sample )
|
||||||
|
{
|
||||||
|
if ( sample.length > 0 )
|
||||||
|
window.open( sample, 'Sample' ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body style="margin:1em;">
|
||||||
|
<table border="0" cellpadding="0" cellspacing="0" style="height: 100%">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Please select the sample you want to view:
|
||||||
|
<br />
|
||||||
|
<select onchange="OpenSample(this.value);">
|
||||||
|
<optgroup label="JavaScript">
|
||||||
|
<option value="html/sample01.html" selected="selected">JavaScript : Sample 01 : Editor
|
||||||
|
with all features</option>
|
||||||
|
<option value="html/sample02.html">JavaScript : Sample 02 : Replacement of a TEXTAREA</option>
|
||||||
|
<option value="html/sample03.html">JavaScript : Sample 03 : Multi-language support</option>
|
||||||
|
<option value="html/sample04.html">JavaScript : Sample 04 : Toolbar selection</option>
|
||||||
|
<option value="html/sample05.html">JavaScript : Sample 05 : Skins support</option>
|
||||||
|
<option value="html/sample06.html">JavaScript : Sample 06 : Plugins support</option>
|
||||||
|
<option value="html/sample07.html">JavaScript : Sample 07 : Full Page editing</option>
|
||||||
|
<option value="html/sample08.html">JavaScript : Sample 08 : Editor API usage</option>
|
||||||
|
<option value="html/sample09.html">JavaScript : Sample 09 : Complex form (multiple editors)</option>
|
||||||
|
<option value="html/sample10.html">JavaScript : Sample 10 : Shared toolbar on same page</option>
|
||||||
|
<option value="html/sample11.html">JavaScript : Sample 11 : Shared toolbar from IFRAME</option>
|
||||||
|
<option value="html/sample12.html">JavaScript : Sample 12 : Enter key behavior</option>
|
||||||
|
<option value="html/sample13.html">JavaScript : Sample 13 : Dinamically switching with a Textarea</option>
|
||||||
|
<option value="html/sample14.html">JavaScript : Sample 14 : XHTML 1.1</option>
|
||||||
|
<option value="html/sample15.html">JavaScript : Sample 15 : Legacy HTML 4 tags</option>
|
||||||
|
<option value="html/sample16.html">JavaScript : Sample 16 : Flash content editor</option>
|
||||||
|
<option value=""></option>
|
||||||
|
</optgroup>
|
||||||
|
<optgroup label="Active Fox Pro">
|
||||||
|
<option value="afp/sample01.afp">AFP : Sample 01 : Editor with all features</option>
|
||||||
|
<option value="afp/sample02.afp">AFP : Sample 02 : Multi-language support</option>
|
||||||
|
<option value="afp/sample03.afp">AFP : Sample 03 : Toolbar selection</option>
|
||||||
|
<option value="afp/sample04.afp">AFP : Sample 04 : Skins support</option>
|
||||||
|
<option value=""></option>
|
||||||
|
</optgroup>
|
||||||
|
<optgroup label="ASP">
|
||||||
|
<option value="asp/sample01.asp">ASP : Sample 01 : Editor with all features</option>
|
||||||
|
<option value="asp/sample02.asp">ASP : Sample 02 : Multi-language support</option>
|
||||||
|
<option value="asp/sample03.asp">ASP : Sample 03 : Toolbar selection</option>
|
||||||
|
<option value="asp/sample04.asp">ASP : Sample 04 : Skins support</option>
|
||||||
|
<option value=""></option>
|
||||||
|
</optgroup>
|
||||||
|
<optgroup label="ColdFusion">
|
||||||
|
<option value="cfm/sample01.cfm">ColdFusion : Sample 01 : Editor with all features</option>
|
||||||
|
<option value="cfm/sample02_mx.cfm">ColdFusion : Sample 02 : Advanced version for ColdFusion
|
||||||
|
MX</option>
|
||||||
|
<option value=""></option>
|
||||||
|
</optgroup>
|
||||||
|
<optgroup label="Lasso">
|
||||||
|
<option value="lasso/sample01.lasso">Lasso : Sample 01 : Editor with all features</option>
|
||||||
|
<option value="lasso/sample02.lasso">Lasso : Sample 02 : Multi-language support</option>
|
||||||
|
<option value="lasso/sample03.lasso">Lasso : Sample 03 : Toolbar selection</option>
|
||||||
|
<option value="lasso/sample04.lasso">Lasso : Sample 04 : Skins support</option>
|
||||||
|
<option value=""></option>
|
||||||
|
</optgroup>
|
||||||
|
<optgroup label="Perl">
|
||||||
|
<option value="perl/sample01.cgi">Perl : Sample 01 : Editor with all features</option>
|
||||||
|
<option value="perl/sample02.cgi">Perl : Sample 02 : Multi-language support</option>
|
||||||
|
<option value="perl/sample03.cgi">Perl : Sample 03 : Toolbar selection</option>
|
||||||
|
<option value="perl/sample04.cgi">Perl : Sample 04 : Skins support</option>
|
||||||
|
<option value=""></option>
|
||||||
|
</optgroup>
|
||||||
|
<optgroup label="PHP">
|
||||||
|
<option value="php/sample01.php">PHP : Sample 01 : Editor with all features</option>
|
||||||
|
<option value="php/sample02.php">PHP : Sample 02 : Multi-language support</option>
|
||||||
|
<option value="php/sample03.php">PHP : Sample 03 : Toolbar selection</option>
|
||||||
|
<option value="php/sample04.php">PHP : Sample 04 : Skins support</option>
|
||||||
|
<option value=""></option>
|
||||||
|
</optgroup>
|
||||||
|
<optgroup label="Python">
|
||||||
|
<option value="py/sample01.py">Python : Sample 01 : Editor with all features</option>
|
||||||
|
</optgroup>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
39
fckeditor/_upgrade.html
Normal file
39
fckeditor/_upgrade.html
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
-->
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor - Upgrade</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<style type="text/css">
|
||||||
|
body { font-family: arial, verdana, sans-serif }
|
||||||
|
p { margin-left: 20px }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>
|
||||||
|
FCKeditor Upgrade</h1>
|
||||||
|
<p>
|
||||||
|
Please check the following URL for notes regarding upgrade:<br />
|
||||||
|
<a href="http://docs.fckeditor.net/FCKeditor_2.x/Developers_Guide/Installation/Upgrading">
|
||||||
|
http://docs.fckeditor.net/FCKeditor_2.x/Developers_Guide/Installation/Upgrading</a></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
167
fckeditor/_whatsnew.html
Normal file
167
fckeditor/_whatsnew.html
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<!--
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
-->
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>FCKeditor ChangeLog - What's New?</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<style type="text/css">
|
||||||
|
body { font-family: arial, verdana, sans-serif }
|
||||||
|
p { margin-left: 20px }
|
||||||
|
h1 { border-bottom: solid 1px gray; padding-bottom: 20px }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>
|
||||||
|
FCKeditor ChangeLog - What's New?</h1>
|
||||||
|
<h3>
|
||||||
|
Version 2.6.3</h3>
|
||||||
|
<p>
|
||||||
|
Fixed Bugs:</p>
|
||||||
|
<ul>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2412">#2412</a>] FCK.InsertHtml()
|
||||||
|
is now properly removing selected contents after content insertion in Firefox.</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2420">#2420</a>] Spelling
|
||||||
|
mistake corrections made by the spell checking dialog are now undoable. </li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2411">#2411</a>] Insert
|
||||||
|
anchor was not working for non-empty selections.</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2426">#2426</a>] It was
|
||||||
|
impossible to switch between editor areas with a single click.</li>
|
||||||
|
<li>Language file updates for the following languages:
|
||||||
|
<ul>
|
||||||
|
<li>Canadian French</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2402">#2402</a>] Catalan
|
||||||
|
</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2400">#2400</a>] Chinese
|
||||||
|
(Simplified and Traditional)</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2401">#2401</a>] Croatian</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2422">#2422</a>] Czech</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2417">#2417</a>] Dutch</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2428">#2428</a>] French</li>
|
||||||
|
<li>German</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2427">#2427</a>] Hebrew</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2410">#2410</a>] Hindi</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2405">#2405</a>] Japanese</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2409">#2409</a>] Norwegian
|
||||||
|
and Norwegian Bokmål</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2429">#2429</a>] Spanish</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2406">#2406</a>] Vietnamese</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
This version has been sponsored by <a href="http://www.dataillusion.com/fs/">Data Illusion
|
||||||
|
survey software solutions</a>.</p>
|
||||||
|
<h3>
|
||||||
|
Version 2.6.3 Beta</h3>
|
||||||
|
<p>
|
||||||
|
New Features and Improvements:</p>
|
||||||
|
<ul>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/439">#439</a>] Added a
|
||||||
|
new <strong>context menu option for opening links</strong> in the editor.</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2220">#2220</a>] <strong>
|
||||||
|
Email links</strong> from the Link dialog <strong>are now encoded</strong> by default
|
||||||
|
to prevent being harvested by spammers. (Kudos to asuter for proposing the patch)
|
||||||
|
</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2234">#2234</a>] Added
|
||||||
|
the ability to create, modify and remove <strong>DIV containers</strong>. </li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2247">#2247</a>] The <strong>
|
||||||
|
SHIFT+SPACE</strong> keystroke will now <strong>produce a &nbsp;</strong> character.
|
||||||
|
</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2252">#2252</a>] It's
|
||||||
|
now possible to enable the browsers default menu using the configuration file (FCKConfig.BrowserContextMenu
|
||||||
|
option). </li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2032">#2032</a>] Added
|
||||||
|
HTML samples for legacy HTML and Flash HTML. </li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/234">#234</a>] Introduced
|
||||||
|
the "PreventSubmitHandler" setting, which makes it possible to instruct the editor
|
||||||
|
to not handle the hidden field update on form submit events.</li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
Fixed Bugs:</p>
|
||||||
|
<ul>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2319">#2319</a>] On Opera
|
||||||
|
and Firefox 3, the entire page was scrolling on SHIFT+ENTER, or when EnterMode='br'.</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2321">#2321</a>] On Firefox
|
||||||
|
3, the entire page was scrolling when inserting block elements with the FCK.InsertElement
|
||||||
|
function, used by the Table and Horizontal Rule buttons.. </li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/692">#692</a>] Added some
|
||||||
|
hints in editor/css/fck_editorarea.css on how to handle style items that would break
|
||||||
|
the style combo. </li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2263">#2263</a>] Fixed
|
||||||
|
a JavaScript error in IE which occurs when there are placeholder elements in the
|
||||||
|
document and the user has pressed the Source button.</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2314">#2314</a>] Corrected
|
||||||
|
mixed up Chinese translations for the blockquote command.</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2323">#2323</a>] Fixed
|
||||||
|
the issue where the show blocks command loses the current selection from the view
|
||||||
|
area when editing a long document.</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2322">#2322</a>] Fixed
|
||||||
|
the issue where the fit window command loses the current selection and scroll position
|
||||||
|
in the editing area.</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1917">#1917</a>] Fixed
|
||||||
|
the issue where the merge down command for tables cells does not work in IE for
|
||||||
|
more than two cells.</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2320">#2320</a>] Fixed
|
||||||
|
the issue where the Find/Replace dialog scrolls the entire page.</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1645">#1645</a>] Added
|
||||||
|
warning message about Firefox 3's strict origin policy.</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2272">#2272</a>] Improved
|
||||||
|
the garbage filter in Paste from Word dialog.</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2327">#2327</a>] Fixed
|
||||||
|
invalid HTML in the Paste dialog.</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1907">#1907</a>] Fixed
|
||||||
|
sporadic "FCKeditorAPI is not defined" errors in Firefox 3.</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2356">#2356</a>] Fixed
|
||||||
|
access denied error in IE7 when FCKeditor is launched from local filesystem.</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1150">#1150</a>] Fixed
|
||||||
|
the type="_moz" attribute that sometimes appear in <br> tags in non-IE browsers.</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/1229">#1229</a>] Converting
|
||||||
|
multiple contiguous paragraphs to Formatted will now be merged into a single <PRE>
|
||||||
|
block.</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2363">#2363</a>] There
|
||||||
|
were some sporadic "Permission Denied" errors with IE on some situations.</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2135">#2135</a>] Fixed
|
||||||
|
a data loss bug in IE when there are @import statements in the editor's CSS files,
|
||||||
|
and IE's cache is set to "Check for newer versions on every visit".</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2376">#2376</a>] FCK.InsertHtml()
|
||||||
|
will now insert to the last selected position after the user has selected things
|
||||||
|
outside of FCKeditor, in IE.</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2368">#2368</a>] Fixed
|
||||||
|
broken protect source logic for comments in IE.</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2387">#2387</a>] Fixed
|
||||||
|
JavaScript error with list commands when the editable document is selected with
|
||||||
|
Ctrl-A.</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2390">#2390</a>] Fixed
|
||||||
|
the issue where indent styles in JavaScript-generated <p> blocks are erased
|
||||||
|
in IE.</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2394">#2394</a>] Fixed
|
||||||
|
JavaScript error with the "split vertically" command in IE when attempting to split
|
||||||
|
cells in the last row of a table.</li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2316">#2316</a>] The sample
|
||||||
|
posted data page has now the table fixed at 100% width. </li>
|
||||||
|
<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2396">#2396</a>] SpellerPages
|
||||||
|
was causing a "Permission Denied" error in some situations. </li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
<a href="_whatsnew_history.html">See previous versions history</a></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
3787
fckeditor/_whatsnew_history.html
Normal file
3787
fckeditor/_whatsnew_history.html
Normal file
File diff suppressed because it is too large
Load Diff
223
fckeditor/editor/_source/classes/fckcontextmenu.js
Normal file
223
fckeditor/editor/_source/classes/fckcontextmenu.js
Normal file
@ -0,0 +1,223 @@
|
|||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* FCKContextMenu Class: renders an control a context menu.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var FCKContextMenu = function( parentWindow, langDir )
|
||||||
|
{
|
||||||
|
this.CtrlDisable = false ;
|
||||||
|
|
||||||
|
var oPanel = this._Panel = new FCKPanel( parentWindow ) ;
|
||||||
|
oPanel.AppendStyleSheet( FCKConfig.SkinEditorCSS ) ;
|
||||||
|
oPanel.IsContextMenu = true ;
|
||||||
|
|
||||||
|
// The FCKTools.DisableSelection doesn't seems to work to avoid dragging of the icons in Mozilla
|
||||||
|
// so we stop the start of the dragging
|
||||||
|
if ( FCKBrowserInfo.IsGecko )
|
||||||
|
oPanel.Document.addEventListener( 'draggesture', function(e) {e.preventDefault(); return false;}, true ) ;
|
||||||
|
|
||||||
|
var oMenuBlock = this._MenuBlock = new FCKMenuBlock() ;
|
||||||
|
oMenuBlock.Panel = oPanel ;
|
||||||
|
oMenuBlock.OnClick = FCKTools.CreateEventListener( FCKContextMenu_MenuBlock_OnClick, this ) ;
|
||||||
|
|
||||||
|
this._Redraw = true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FCKContextMenu.prototype.SetMouseClickWindow = function( mouseClickWindow )
|
||||||
|
{
|
||||||
|
if ( !FCKBrowserInfo.IsIE )
|
||||||
|
{
|
||||||
|
this._Document = mouseClickWindow.document ;
|
||||||
|
if ( FCKBrowserInfo.IsOpera && !( 'oncontextmenu' in document.createElement('foo') ) )
|
||||||
|
{
|
||||||
|
this._Document.addEventListener( 'mousedown', FCKContextMenu_Document_OnMouseDown, false ) ;
|
||||||
|
this._Document.addEventListener( 'mouseup', FCKContextMenu_Document_OnMouseUp, false ) ;
|
||||||
|
}
|
||||||
|
this._Document.addEventListener( 'contextmenu', FCKContextMenu_Document_OnContextMenu, false ) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
The customData parameter is just a value that will be send to the command that is executed,
|
||||||
|
so it's possible to reuse the same command for several items just by assigning different data for each one.
|
||||||
|
*/
|
||||||
|
FCKContextMenu.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData )
|
||||||
|
{
|
||||||
|
var oItem = this._MenuBlock.AddItem( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) ;
|
||||||
|
this._Redraw = true ;
|
||||||
|
return oItem ;
|
||||||
|
}
|
||||||
|
|
||||||
|
FCKContextMenu.prototype.AddSeparator = function()
|
||||||
|
{
|
||||||
|
this._MenuBlock.AddSeparator() ;
|
||||||
|
this._Redraw = true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
FCKContextMenu.prototype.RemoveAllItems = function()
|
||||||
|
{
|
||||||
|
this._MenuBlock.RemoveAllItems() ;
|
||||||
|
this._Redraw = true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
FCKContextMenu.prototype.AttachToElement = function( element )
|
||||||
|
{
|
||||||
|
if ( FCKBrowserInfo.IsIE )
|
||||||
|
FCKTools.AddEventListenerEx( element, 'contextmenu', FCKContextMenu_AttachedElement_OnContextMenu, this ) ;
|
||||||
|
else
|
||||||
|
element._FCKContextMenu = this ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function FCKContextMenu_Document_OnContextMenu( e )
|
||||||
|
{
|
||||||
|
if ( FCKConfig.BrowserContextMenu )
|
||||||
|
return true ;
|
||||||
|
|
||||||
|
var el = e.target ;
|
||||||
|
|
||||||
|
while ( el )
|
||||||
|
{
|
||||||
|
if ( el._FCKContextMenu )
|
||||||
|
{
|
||||||
|
if ( el._FCKContextMenu.CtrlDisable && ( e.ctrlKey || e.metaKey ) )
|
||||||
|
return true ;
|
||||||
|
|
||||||
|
FCKTools.CancelEvent( e ) ;
|
||||||
|
FCKContextMenu_AttachedElement_OnContextMenu( e, el._FCKContextMenu, el ) ;
|
||||||
|
return false ;
|
||||||
|
}
|
||||||
|
el = el.parentNode ;
|
||||||
|
}
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
var FCKContextMenu_OverrideButton ;
|
||||||
|
|
||||||
|
function FCKContextMenu_Document_OnMouseDown( e )
|
||||||
|
{
|
||||||
|
if( !e || e.button != 2 )
|
||||||
|
return false ;
|
||||||
|
|
||||||
|
if ( FCKConfig.BrowserContextMenu )
|
||||||
|
return true ;
|
||||||
|
|
||||||
|
var el = e.target ;
|
||||||
|
|
||||||
|
while ( el )
|
||||||
|
{
|
||||||
|
if ( el._FCKContextMenu )
|
||||||
|
{
|
||||||
|
if ( el._FCKContextMenu.CtrlDisable && ( e.ctrlKey || e.metaKey ) )
|
||||||
|
return true ;
|
||||||
|
|
||||||
|
var overrideButton = FCKContextMenu_OverrideButton ;
|
||||||
|
if( !overrideButton )
|
||||||
|
{
|
||||||
|
var doc = FCKTools.GetElementDocument( e.target ) ;
|
||||||
|
overrideButton = FCKContextMenu_OverrideButton = doc.createElement('input') ;
|
||||||
|
overrideButton.type = 'button' ;
|
||||||
|
var buttonHolder = doc.createElement('p') ;
|
||||||
|
doc.body.appendChild( buttonHolder ) ;
|
||||||
|
buttonHolder.appendChild( overrideButton ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
overrideButton.style.cssText = 'position:absolute;top:' + ( e.clientY - 2 ) +
|
||||||
|
'px;left:' + ( e.clientX - 2 ) +
|
||||||
|
'px;width:5px;height:5px;opacity:0.01' ;
|
||||||
|
}
|
||||||
|
el = el.parentNode ;
|
||||||
|
}
|
||||||
|
return false ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function FCKContextMenu_Document_OnMouseUp( e )
|
||||||
|
{
|
||||||
|
if ( FCKConfig.BrowserContextMenu )
|
||||||
|
return true ;
|
||||||
|
|
||||||
|
var overrideButton = FCKContextMenu_OverrideButton ;
|
||||||
|
|
||||||
|
if ( overrideButton )
|
||||||
|
{
|
||||||
|
var parent = overrideButton.parentNode ;
|
||||||
|
parent.parentNode.removeChild( parent ) ;
|
||||||
|
FCKContextMenu_OverrideButton = undefined ;
|
||||||
|
|
||||||
|
if( e && e.button == 2 )
|
||||||
|
{
|
||||||
|
FCKContextMenu_Document_OnContextMenu( e ) ;
|
||||||
|
return false ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function FCKContextMenu_AttachedElement_OnContextMenu( ev, fckContextMenu, el )
|
||||||
|
{
|
||||||
|
if ( ( fckContextMenu.CtrlDisable && ( ev.ctrlKey || ev.metaKey ) ) || FCKConfig.BrowserContextMenu )
|
||||||
|
return true ;
|
||||||
|
|
||||||
|
var eTarget = el || this ;
|
||||||
|
|
||||||
|
if ( fckContextMenu.OnBeforeOpen )
|
||||||
|
fckContextMenu.OnBeforeOpen.call( fckContextMenu, eTarget ) ;
|
||||||
|
|
||||||
|
if ( fckContextMenu._MenuBlock.Count() == 0 )
|
||||||
|
return false ;
|
||||||
|
|
||||||
|
if ( fckContextMenu._Redraw )
|
||||||
|
{
|
||||||
|
fckContextMenu._MenuBlock.Create( fckContextMenu._Panel.MainNode ) ;
|
||||||
|
fckContextMenu._Redraw = false ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// This will avoid that the content of the context menu can be dragged in IE
|
||||||
|
// as the content of the panel is recreated we need to do it every time
|
||||||
|
FCKTools.DisableSelection( fckContextMenu._Panel.Document.body ) ;
|
||||||
|
|
||||||
|
var x = 0 ;
|
||||||
|
var y = 0 ;
|
||||||
|
if ( FCKBrowserInfo.IsIE )
|
||||||
|
{
|
||||||
|
x = ev.screenX ;
|
||||||
|
y = ev.screenY ;
|
||||||
|
}
|
||||||
|
else if ( FCKBrowserInfo.IsSafari )
|
||||||
|
{
|
||||||
|
x = ev.clientX ;
|
||||||
|
y = ev.clientY ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
x = ev.pageX ;
|
||||||
|
y = ev.pageY ;
|
||||||
|
}
|
||||||
|
fckContextMenu._Panel.Show( x, y, ev.currentTarget || null ) ;
|
||||||
|
|
||||||
|
return false ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function FCKContextMenu_MenuBlock_OnClick( menuItem, contextMenu )
|
||||||
|
{
|
||||||
|
contextMenu._Panel.Hide() ;
|
||||||
|
FCKTools.RunFunction( contextMenu.OnItemClick, contextMenu, menuItem ) ;
|
||||||
|
}
|
119
fckeditor/editor/_source/classes/fckdataprocessor.js
Normal file
119
fckeditor/editor/_source/classes/fckdataprocessor.js
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* The Data Processor is responsible for transforming the input and output data
|
||||||
|
* in the editor. For more info:
|
||||||
|
* http://dev.fckeditor.net/wiki/Components/DataProcessor
|
||||||
|
*
|
||||||
|
* The default implementation offers the base XHTML compatibility features of
|
||||||
|
* FCKeditor. Further Data Processors may be implemented for other purposes.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
var FCKDataProcessor = function()
|
||||||
|
{}
|
||||||
|
|
||||||
|
FCKDataProcessor.prototype =
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Returns a string representing the HTML format of "data". The returned
|
||||||
|
* value will be loaded in the editor.
|
||||||
|
* The HTML must be from <html> to </html>, including <head>, <body> and
|
||||||
|
* eventually the DOCTYPE.
|
||||||
|
* Note: HTML comments may already be part of the data because of the
|
||||||
|
* pre-processing made with ProtectedSource.
|
||||||
|
* @param {String} data The data to be converted in the
|
||||||
|
* DataProcessor specific format.
|
||||||
|
*/
|
||||||
|
ConvertToHtml : function( data )
|
||||||
|
{
|
||||||
|
// The default data processor must handle two different cases depending
|
||||||
|
// on the FullPage setting. Custom Data Processors will not be
|
||||||
|
// compatible with FullPage, much probably.
|
||||||
|
if ( FCKConfig.FullPage )
|
||||||
|
{
|
||||||
|
// Save the DOCTYPE.
|
||||||
|
FCK.DocTypeDeclaration = data.match( FCKRegexLib.DocTypeTag ) ;
|
||||||
|
|
||||||
|
// Check if the <body> tag is available.
|
||||||
|
if ( !FCKRegexLib.HasBodyTag.test( data ) )
|
||||||
|
data = '<body>' + data + '</body>' ;
|
||||||
|
|
||||||
|
// Check if the <html> tag is available.
|
||||||
|
if ( !FCKRegexLib.HtmlOpener.test( data ) )
|
||||||
|
data = '<html dir="' + FCKConfig.ContentLangDirection + '">' + data + '</html>' ;
|
||||||
|
|
||||||
|
// Check if the <head> tag is available.
|
||||||
|
if ( !FCKRegexLib.HeadOpener.test( data ) )
|
||||||
|
data = data.replace( FCKRegexLib.HtmlOpener, '$&<head><title></title></head>' ) ;
|
||||||
|
|
||||||
|
return data ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var html =
|
||||||
|
FCKConfig.DocType +
|
||||||
|
'<html dir="' + FCKConfig.ContentLangDirection + '"' ;
|
||||||
|
|
||||||
|
// On IE, if you are using a DOCTYPE different of HTML 4 (like
|
||||||
|
// XHTML), you must force the vertical scroll to show, otherwise
|
||||||
|
// the horizontal one may appear when the page needs vertical scrolling.
|
||||||
|
// TODO : Check it with IE7 and make it IE6- if it is the case.
|
||||||
|
if ( FCKBrowserInfo.IsIE && FCKConfig.DocType.length > 0 && !FCKRegexLib.Html4DocType.test( FCKConfig.DocType ) )
|
||||||
|
html += ' style="overflow-y: scroll"' ;
|
||||||
|
|
||||||
|
html += '><head><title></title></head>' +
|
||||||
|
'<body' + FCKConfig.GetBodyAttributes() + '>' +
|
||||||
|
data +
|
||||||
|
'</body></html>' ;
|
||||||
|
|
||||||
|
return html ;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Converts a DOM (sub-)tree to a string in the data format.
|
||||||
|
* @param {Object} rootNode The node that contains the DOM tree to be
|
||||||
|
* converted to the data format.
|
||||||
|
* @param {Boolean} excludeRoot Indicates that the root node must not
|
||||||
|
* be included in the conversion, only its children.
|
||||||
|
* @param {Boolean} format Indicates that the data must be formatted
|
||||||
|
* for human reading. Not all Data Processors may provide it.
|
||||||
|
*/
|
||||||
|
ConvertToDataFormat : function( rootNode, excludeRoot, ignoreIfEmptyParagraph, format )
|
||||||
|
{
|
||||||
|
var data = FCKXHtml.GetXHTML( rootNode, !excludeRoot, format ) ;
|
||||||
|
|
||||||
|
if ( ignoreIfEmptyParagraph && FCKRegexLib.EmptyOutParagraph.test( data ) )
|
||||||
|
return '' ;
|
||||||
|
|
||||||
|
return data ;
|
||||||
|
},
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Makes any necessary changes to a piece of HTML for insertion in the
|
||||||
|
* editor selection position.
|
||||||
|
* @param {String} html The HTML to be fixed.
|
||||||
|
*/
|
||||||
|
FixHtml : function( html )
|
||||||
|
{
|
||||||
|
return html ;
|
||||||
|
}
|
||||||
|
} ;
|
@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* This is a generic Document Fragment object. It is not intended to provide
|
||||||
|
* the W3C implementation, but is a way to fix the missing of a real Document
|
||||||
|
* Fragment in IE (where document.createDocumentFragment() returns a normal
|
||||||
|
* document instead), giving a standard interface for it.
|
||||||
|
* (IE Implementation)
|
||||||
|
*/
|
||||||
|
|
||||||
|
var FCKDocumentFragment = function( parentDocument, baseDocFrag )
|
||||||
|
{
|
||||||
|
this.RootNode = baseDocFrag || parentDocument.createDocumentFragment() ;
|
||||||
|
}
|
||||||
|
|
||||||
|
FCKDocumentFragment.prototype =
|
||||||
|
{
|
||||||
|
|
||||||
|
// Append the contents of this Document Fragment to another element.
|
||||||
|
AppendTo : function( targetNode )
|
||||||
|
{
|
||||||
|
targetNode.appendChild( this.RootNode ) ;
|
||||||
|
},
|
||||||
|
|
||||||
|
AppendHtml : function( html )
|
||||||
|
{
|
||||||
|
var eTmpDiv = this.RootNode.ownerDocument.createElement( 'div' ) ;
|
||||||
|
eTmpDiv.innerHTML = html ;
|
||||||
|
FCKDomTools.MoveChildren( eTmpDiv, this.RootNode ) ;
|
||||||
|
},
|
||||||
|
|
||||||
|
InsertAfterNode : function( existingNode )
|
||||||
|
{
|
||||||
|
FCKDomTools.InsertAfterNode( existingNode, this.RootNode ) ;
|
||||||
|
}
|
||||||
|
}
|
58
fckeditor/editor/_source/classes/fckdocumentfragment_ie.js
Normal file
58
fckeditor/editor/_source/classes/fckdocumentfragment_ie.js
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* This is a generic Document Fragment object. It is not intended to provide
|
||||||
|
* the W3C implementation, but is a way to fix the missing of a real Document
|
||||||
|
* Fragment in IE (where document.createDocumentFragment() returns a normal
|
||||||
|
* document instead), giving a standard interface for it.
|
||||||
|
* (IE Implementation)
|
||||||
|
*/
|
||||||
|
|
||||||
|
var FCKDocumentFragment = function( parentDocument )
|
||||||
|
{
|
||||||
|
this._Document = parentDocument ;
|
||||||
|
this.RootNode = parentDocument.createElement( 'div' ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Append the contents of this Document Fragment to another node.
|
||||||
|
FCKDocumentFragment.prototype =
|
||||||
|
{
|
||||||
|
|
||||||
|
AppendTo : function( targetNode )
|
||||||
|
{
|
||||||
|
FCKDomTools.MoveChildren( this.RootNode, targetNode ) ;
|
||||||
|
},
|
||||||
|
|
||||||
|
AppendHtml : function( html )
|
||||||
|
{
|
||||||
|
var eTmpDiv = this._Document.createElement( 'div' ) ;
|
||||||
|
eTmpDiv.innerHTML = html ;
|
||||||
|
FCKDomTools.MoveChildren( eTmpDiv, this.RootNode ) ;
|
||||||
|
},
|
||||||
|
|
||||||
|
InsertAfterNode : function( existingNode )
|
||||||
|
{
|
||||||
|
var eRoot = this.RootNode ;
|
||||||
|
var eLast ;
|
||||||
|
|
||||||
|
while( ( eLast = eRoot.lastChild ) )
|
||||||
|
FCKDomTools.InsertAfterNode( existingNode, eRoot.removeChild( eLast ) ) ;
|
||||||
|
}
|
||||||
|
} ;
|
935
fckeditor/editor/_source/classes/fckdomrange.js
Normal file
935
fckeditor/editor/_source/classes/fckdomrange.js
Normal file
@ -0,0 +1,935 @@
|
|||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Class for working with a selection range, much like the W3C DOM Range, but
|
||||||
|
* it is not intended to be an implementation of the W3C interface.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var FCKDomRange = function( sourceWindow )
|
||||||
|
{
|
||||||
|
this.Window = sourceWindow ;
|
||||||
|
this._Cache = {} ;
|
||||||
|
}
|
||||||
|
|
||||||
|
FCKDomRange.prototype =
|
||||||
|
{
|
||||||
|
|
||||||
|
_UpdateElementInfo : function()
|
||||||
|
{
|
||||||
|
var innerRange = this._Range ;
|
||||||
|
|
||||||
|
if ( !innerRange )
|
||||||
|
this.Release( true ) ;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// For text nodes, the node itself is the StartNode.
|
||||||
|
var eStart = innerRange.startContainer ;
|
||||||
|
|
||||||
|
var oElementPath = new FCKElementPath( eStart ) ;
|
||||||
|
this.StartNode = eStart.nodeType == 3 ? eStart : eStart.childNodes[ innerRange.startOffset ] ;
|
||||||
|
this.StartContainer = eStart ;
|
||||||
|
this.StartBlock = oElementPath.Block ;
|
||||||
|
this.StartBlockLimit = oElementPath.BlockLimit ;
|
||||||
|
|
||||||
|
if ( innerRange.collapsed )
|
||||||
|
{
|
||||||
|
this.EndNode = this.StartNode ;
|
||||||
|
this.EndContainer = this.StartContainer ;
|
||||||
|
this.EndBlock = this.StartBlock ;
|
||||||
|
this.EndBlockLimit = this.StartBlockLimit ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var eEnd = innerRange.endContainer ;
|
||||||
|
|
||||||
|
if ( eStart != eEnd )
|
||||||
|
oElementPath = new FCKElementPath( eEnd ) ;
|
||||||
|
|
||||||
|
// The innerRange.endContainer[ innerRange.endOffset ] is not
|
||||||
|
// usually part of the range, but the marker for the range end. So,
|
||||||
|
// let's get the previous available node as the real end.
|
||||||
|
var eEndNode = eEnd ;
|
||||||
|
if ( innerRange.endOffset == 0 )
|
||||||
|
{
|
||||||
|
while ( eEndNode && !eEndNode.previousSibling )
|
||||||
|
eEndNode = eEndNode.parentNode ;
|
||||||
|
|
||||||
|
if ( eEndNode )
|
||||||
|
eEndNode = eEndNode.previousSibling ;
|
||||||
|
}
|
||||||
|
else if ( eEndNode.nodeType == 1 )
|
||||||
|
eEndNode = eEndNode.childNodes[ innerRange.endOffset - 1 ] ;
|
||||||
|
|
||||||
|
this.EndNode = eEndNode ;
|
||||||
|
this.EndContainer = eEnd ;
|
||||||
|
this.EndBlock = oElementPath.Block ;
|
||||||
|
this.EndBlockLimit = oElementPath.BlockLimit ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this._Cache = {} ;
|
||||||
|
},
|
||||||
|
|
||||||
|
CreateRange : function()
|
||||||
|
{
|
||||||
|
return new FCKW3CRange( this.Window.document ) ;
|
||||||
|
},
|
||||||
|
|
||||||
|
DeleteContents : function()
|
||||||
|
{
|
||||||
|
if ( this._Range )
|
||||||
|
{
|
||||||
|
this._Range.deleteContents() ;
|
||||||
|
this._UpdateElementInfo() ;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
ExtractContents : function()
|
||||||
|
{
|
||||||
|
if ( this._Range )
|
||||||
|
{
|
||||||
|
var docFrag = this._Range.extractContents() ;
|
||||||
|
this._UpdateElementInfo() ;
|
||||||
|
return docFrag ;
|
||||||
|
}
|
||||||
|
return null ;
|
||||||
|
},
|
||||||
|
|
||||||
|
CheckIsCollapsed : function()
|
||||||
|
{
|
||||||
|
if ( this._Range )
|
||||||
|
return this._Range.collapsed ;
|
||||||
|
|
||||||
|
return false ;
|
||||||
|
},
|
||||||
|
|
||||||
|
Collapse : function( toStart )
|
||||||
|
{
|
||||||
|
if ( this._Range )
|
||||||
|
this._Range.collapse( toStart ) ;
|
||||||
|
|
||||||
|
this._UpdateElementInfo() ;
|
||||||
|
},
|
||||||
|
|
||||||
|
Clone : function()
|
||||||
|
{
|
||||||
|
var oClone = FCKTools.CloneObject( this ) ;
|
||||||
|
|
||||||
|
if ( this._Range )
|
||||||
|
oClone._Range = this._Range.cloneRange() ;
|
||||||
|
|
||||||
|
return oClone ;
|
||||||
|
},
|
||||||
|
|
||||||
|
MoveToNodeContents : function( targetNode )
|
||||||
|
{
|
||||||
|
if ( !this._Range )
|
||||||
|
this._Range = this.CreateRange() ;
|
||||||
|
|
||||||
|
this._Range.selectNodeContents( targetNode ) ;
|
||||||
|
|
||||||
|
this._UpdateElementInfo() ;
|
||||||
|
},
|
||||||
|
|
||||||
|
MoveToElementStart : function( targetElement )
|
||||||
|
{
|
||||||
|
this.SetStart(targetElement,1) ;
|
||||||
|
this.SetEnd(targetElement,1) ;
|
||||||
|
},
|
||||||
|
|
||||||
|
// Moves to the first editing point inside a element. For example, in a
|
||||||
|
// element tree like "<p><b><i></i></b> Text</p>", the start editing point
|
||||||
|
// is "<p><b><i>^</i></b> Text</p>" (inside <i>).
|
||||||
|
MoveToElementEditStart : function( targetElement )
|
||||||
|
{
|
||||||
|
var editableElement ;
|
||||||
|
|
||||||
|
while ( targetElement && targetElement.nodeType == 1 )
|
||||||
|
{
|
||||||
|
if ( FCKDomTools.CheckIsEditable( targetElement ) )
|
||||||
|
editableElement = targetElement ;
|
||||||
|
else if ( editableElement )
|
||||||
|
break ; // If we already found an editable element, stop the loop.
|
||||||
|
|
||||||
|
targetElement = targetElement.firstChild ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( editableElement )
|
||||||
|
this.MoveToElementStart( editableElement ) ;
|
||||||
|
},
|
||||||
|
|
||||||
|
InsertNode : function( node )
|
||||||
|
{
|
||||||
|
if ( this._Range )
|
||||||
|
this._Range.insertNode( node ) ;
|
||||||
|
},
|
||||||
|
|
||||||
|
CheckIsEmpty : function()
|
||||||
|
{
|
||||||
|
if ( this.CheckIsCollapsed() )
|
||||||
|
return true ;
|
||||||
|
|
||||||
|
// Inserts the contents of the range in a div tag.
|
||||||
|
var eToolDiv = this.Window.document.createElement( 'div' ) ;
|
||||||
|
this._Range.cloneContents().AppendTo( eToolDiv ) ;
|
||||||
|
|
||||||
|
FCKDomTools.TrimNode( eToolDiv ) ;
|
||||||
|
|
||||||
|
return ( eToolDiv.innerHTML.length == 0 ) ;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the start boundary of the current range is "visually" (like a
|
||||||
|
* selection caret) at the beginning of the block. It means that some
|
||||||
|
* things could be brefore the range, like spaces or empty inline elements,
|
||||||
|
* but it would still be considered at the beginning of the block.
|
||||||
|
*/
|
||||||
|
CheckStartOfBlock : function()
|
||||||
|
{
|
||||||
|
var cache = this._Cache ;
|
||||||
|
var bIsStartOfBlock = cache.IsStartOfBlock ;
|
||||||
|
|
||||||
|
if ( bIsStartOfBlock != undefined )
|
||||||
|
return bIsStartOfBlock ;
|
||||||
|
|
||||||
|
// Take the block reference.
|
||||||
|
var block = this.StartBlock || this.StartBlockLimit ;
|
||||||
|
|
||||||
|
var container = this._Range.startContainer ;
|
||||||
|
var offset = this._Range.startOffset ;
|
||||||
|
var currentNode ;
|
||||||
|
|
||||||
|
if ( offset > 0 )
|
||||||
|
{
|
||||||
|
// First, check the start container. If it is a text node, get the
|
||||||
|
// substring of the node value before the range offset.
|
||||||
|
if ( container.nodeType == 3 )
|
||||||
|
{
|
||||||
|
var textValue = container.nodeValue.substr( 0, offset ).Trim() ;
|
||||||
|
|
||||||
|
// If we have some text left in the container, we are not at
|
||||||
|
// the end for the block.
|
||||||
|
if ( textValue.length != 0 )
|
||||||
|
return cache.IsStartOfBlock = false ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
currentNode = container.childNodes[ offset - 1 ] ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We'll not have a currentNode if the container was a text node, or
|
||||||
|
// the offset is zero.
|
||||||
|
if ( !currentNode )
|
||||||
|
currentNode = FCKDomTools.GetPreviousSourceNode( container, true, null, block ) ;
|
||||||
|
|
||||||
|
while ( currentNode )
|
||||||
|
{
|
||||||
|
switch ( currentNode.nodeType )
|
||||||
|
{
|
||||||
|
case 1 :
|
||||||
|
// It's not an inline element.
|
||||||
|
if ( !FCKListsLib.InlineChildReqElements[ currentNode.nodeName.toLowerCase() ] )
|
||||||
|
return cache.IsStartOfBlock = false ;
|
||||||
|
|
||||||
|
break ;
|
||||||
|
|
||||||
|
case 3 :
|
||||||
|
// It's a text node with real text.
|
||||||
|
if ( currentNode.nodeValue.Trim().length > 0 )
|
||||||
|
return cache.IsStartOfBlock = false ;
|
||||||
|
}
|
||||||
|
|
||||||
|
currentNode = FCKDomTools.GetPreviousSourceNode( currentNode, false, null, block ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
return cache.IsStartOfBlock = true ;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the end boundary of the current range is "visually" (like a
|
||||||
|
* selection caret) at the end of the block. It means that some things
|
||||||
|
* could be after the range, like spaces, empty inline elements, or a
|
||||||
|
* single <br>, but it would still be considered at the end of the block.
|
||||||
|
*/
|
||||||
|
CheckEndOfBlock : function( refreshSelection )
|
||||||
|
{
|
||||||
|
var isEndOfBlock = this._Cache.IsEndOfBlock ;
|
||||||
|
|
||||||
|
if ( isEndOfBlock != undefined )
|
||||||
|
return isEndOfBlock ;
|
||||||
|
|
||||||
|
// Take the block reference.
|
||||||
|
var block = this.EndBlock || this.EndBlockLimit ;
|
||||||
|
|
||||||
|
var container = this._Range.endContainer ;
|
||||||
|
var offset = this._Range.endOffset ;
|
||||||
|
var currentNode ;
|
||||||
|
|
||||||
|
// First, check the end container. If it is a text node, get the
|
||||||
|
// substring of the node value after the range offset.
|
||||||
|
if ( container.nodeType == 3 )
|
||||||
|
{
|
||||||
|
var textValue = container.nodeValue ;
|
||||||
|
if ( offset < textValue.length )
|
||||||
|
{
|
||||||
|
textValue = textValue.substr( offset ) ;
|
||||||
|
|
||||||
|
// If we have some text left in the container, we are not at
|
||||||
|
// the end for the block.
|
||||||
|
if ( textValue.Trim().length != 0 )
|
||||||
|
return this._Cache.IsEndOfBlock = false ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
currentNode = container.childNodes[ offset ] ;
|
||||||
|
|
||||||
|
// We'll not have a currentNode if the container was a text node, of
|
||||||
|
// the offset is out the container children limits (after it probably).
|
||||||
|
if ( !currentNode )
|
||||||
|
currentNode = FCKDomTools.GetNextSourceNode( container, true, null, block ) ;
|
||||||
|
|
||||||
|
var hadBr = false ;
|
||||||
|
|
||||||
|
while ( currentNode )
|
||||||
|
{
|
||||||
|
switch ( currentNode.nodeType )
|
||||||
|
{
|
||||||
|
case 1 :
|
||||||
|
var nodeName = currentNode.nodeName.toLowerCase() ;
|
||||||
|
|
||||||
|
// It's an inline element.
|
||||||
|
if ( FCKListsLib.InlineChildReqElements[ nodeName ] )
|
||||||
|
break ;
|
||||||
|
|
||||||
|
// It is the first <br> found.
|
||||||
|
if ( nodeName == 'br' && !hadBr )
|
||||||
|
{
|
||||||
|
hadBr = true ;
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this._Cache.IsEndOfBlock = false ;
|
||||||
|
|
||||||
|
case 3 :
|
||||||
|
// It's a text node with real text.
|
||||||
|
if ( currentNode.nodeValue.Trim().length > 0 )
|
||||||
|
return this._Cache.IsEndOfBlock = false ;
|
||||||
|
}
|
||||||
|
|
||||||
|
currentNode = FCKDomTools.GetNextSourceNode( currentNode, false, null, block ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( refreshSelection )
|
||||||
|
this.Select() ;
|
||||||
|
|
||||||
|
return this._Cache.IsEndOfBlock = true ;
|
||||||
|
},
|
||||||
|
|
||||||
|
// This is an "intrusive" way to create a bookmark. It includes <span> tags
|
||||||
|
// in the range boundaries. The advantage of it is that it is possible to
|
||||||
|
// handle DOM mutations when moving back to the bookmark.
|
||||||
|
// Attention: the inclusion of nodes in the DOM is a design choice and
|
||||||
|
// should not be changed as there are other points in the code that may be
|
||||||
|
// using those nodes to perform operations. See GetBookmarkNode.
|
||||||
|
// For performance, includeNodes=true if intended to SelectBookmark.
|
||||||
|
CreateBookmark : function( includeNodes )
|
||||||
|
{
|
||||||
|
// Create the bookmark info (random IDs).
|
||||||
|
var oBookmark =
|
||||||
|
{
|
||||||
|
StartId : (new Date()).valueOf() + Math.floor(Math.random()*1000) + 'S',
|
||||||
|
EndId : (new Date()).valueOf() + Math.floor(Math.random()*1000) + 'E'
|
||||||
|
} ;
|
||||||
|
|
||||||
|
var oDoc = this.Window.document ;
|
||||||
|
var eStartSpan ;
|
||||||
|
var eEndSpan ;
|
||||||
|
var oClone ;
|
||||||
|
|
||||||
|
// For collapsed ranges, add just the start marker.
|
||||||
|
if ( !this.CheckIsCollapsed() )
|
||||||
|
{
|
||||||
|
eEndSpan = oDoc.createElement( 'span' ) ;
|
||||||
|
eEndSpan.style.display = 'none' ;
|
||||||
|
eEndSpan.id = oBookmark.EndId ;
|
||||||
|
eEndSpan.setAttribute( '_fck_bookmark', true ) ;
|
||||||
|
|
||||||
|
// For IE, it must have something inside, otherwise it may be
|
||||||
|
// removed during DOM operations.
|
||||||
|
// if ( FCKBrowserInfo.IsIE )
|
||||||
|
eEndSpan.innerHTML = ' ' ;
|
||||||
|
|
||||||
|
oClone = this.Clone() ;
|
||||||
|
oClone.Collapse( false ) ;
|
||||||
|
oClone.InsertNode( eEndSpan ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
eStartSpan = oDoc.createElement( 'span' ) ;
|
||||||
|
eStartSpan.style.display = 'none' ;
|
||||||
|
eStartSpan.id = oBookmark.StartId ;
|
||||||
|
eStartSpan.setAttribute( '_fck_bookmark', true ) ;
|
||||||
|
|
||||||
|
// For IE, it must have something inside, otherwise it may be removed
|
||||||
|
// during DOM operations.
|
||||||
|
// if ( FCKBrowserInfo.IsIE )
|
||||||
|
eStartSpan.innerHTML = ' ' ;
|
||||||
|
|
||||||
|
oClone = this.Clone() ;
|
||||||
|
oClone.Collapse( true ) ;
|
||||||
|
oClone.InsertNode( eStartSpan ) ;
|
||||||
|
|
||||||
|
if ( includeNodes )
|
||||||
|
{
|
||||||
|
oBookmark.StartNode = eStartSpan ;
|
||||||
|
oBookmark.EndNode = eEndSpan ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the range position.
|
||||||
|
if ( eEndSpan )
|
||||||
|
{
|
||||||
|
this.SetStart( eStartSpan, 4 ) ;
|
||||||
|
this.SetEnd( eEndSpan, 3 ) ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
this.MoveToPosition( eStartSpan, 4 ) ;
|
||||||
|
|
||||||
|
return oBookmark ;
|
||||||
|
},
|
||||||
|
|
||||||
|
// This one should be a part of a hypothetic "bookmark" object.
|
||||||
|
GetBookmarkNode : function( bookmark, start )
|
||||||
|
{
|
||||||
|
var doc = this.Window.document ;
|
||||||
|
|
||||||
|
if ( start )
|
||||||
|
return bookmark.StartNode || doc.getElementById( bookmark.StartId ) ;
|
||||||
|
else
|
||||||
|
return bookmark.EndNode || doc.getElementById( bookmark.EndId ) ;
|
||||||
|
},
|
||||||
|
|
||||||
|
MoveToBookmark : function( bookmark, preserveBookmark )
|
||||||
|
{
|
||||||
|
var eStartSpan = this.GetBookmarkNode( bookmark, true ) ;
|
||||||
|
var eEndSpan = this.GetBookmarkNode( bookmark, false ) ;
|
||||||
|
|
||||||
|
this.SetStart( eStartSpan, 3 ) ;
|
||||||
|
|
||||||
|
if ( !preserveBookmark )
|
||||||
|
FCKDomTools.RemoveNode( eStartSpan ) ;
|
||||||
|
|
||||||
|
// If collapsed, the end span will not be available.
|
||||||
|
if ( eEndSpan )
|
||||||
|
{
|
||||||
|
this.SetEnd( eEndSpan, 3 ) ;
|
||||||
|
|
||||||
|
if ( !preserveBookmark )
|
||||||
|
FCKDomTools.RemoveNode( eEndSpan ) ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
this.Collapse( true ) ;
|
||||||
|
|
||||||
|
this._UpdateElementInfo() ;
|
||||||
|
},
|
||||||
|
|
||||||
|
// Non-intrusive bookmark algorithm
|
||||||
|
CreateBookmark2 : function()
|
||||||
|
{
|
||||||
|
// If there is no range then get out of here.
|
||||||
|
// It happens on initial load in Safari #962 and if the editor it's hidden also in Firefox
|
||||||
|
if ( ! this._Range )
|
||||||
|
return { "Start" : 0, "End" : 0 } ;
|
||||||
|
|
||||||
|
// First, we record down the offset values
|
||||||
|
var bookmark =
|
||||||
|
{
|
||||||
|
"Start" : [ this._Range.startOffset ],
|
||||||
|
"End" : [ this._Range.endOffset ]
|
||||||
|
} ;
|
||||||
|
// Since we're treating the document tree as normalized, we need to backtrack the text lengths
|
||||||
|
// of previous text nodes into the offset value.
|
||||||
|
var curStart = this._Range.startContainer.previousSibling ;
|
||||||
|
var curEnd = this._Range.endContainer.previousSibling ;
|
||||||
|
|
||||||
|
// Also note that the node that we use for "address base" would change during backtracking.
|
||||||
|
var addrStart = this._Range.startContainer ;
|
||||||
|
var addrEnd = this._Range.endContainer ;
|
||||||
|
while ( curStart && addrStart.nodeType == 3 )
|
||||||
|
{
|
||||||
|
bookmark.Start[0] += curStart.length ;
|
||||||
|
addrStart = curStart ;
|
||||||
|
curStart = curStart.previousSibling ;
|
||||||
|
}
|
||||||
|
while ( curEnd && addrEnd.nodeType == 3 )
|
||||||
|
{
|
||||||
|
bookmark.End[0] += curEnd.length ;
|
||||||
|
addrEnd = curEnd ;
|
||||||
|
curEnd = curEnd.previousSibling ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the object pointed to by the startOffset and endOffset are text nodes, we need
|
||||||
|
// to backtrack and add in the text offset to the bookmark addresses.
|
||||||
|
if ( addrStart.nodeType == 1 && addrStart.childNodes[bookmark.Start[0]] && addrStart.childNodes[bookmark.Start[0]].nodeType == 3 )
|
||||||
|
{
|
||||||
|
var curNode = addrStart.childNodes[bookmark.Start[0]] ;
|
||||||
|
var offset = 0 ;
|
||||||
|
while ( curNode.previousSibling && curNode.previousSibling.nodeType == 3 )
|
||||||
|
{
|
||||||
|
curNode = curNode.previousSibling ;
|
||||||
|
offset += curNode.length ;
|
||||||
|
}
|
||||||
|
addrStart = curNode ;
|
||||||
|
bookmark.Start[0] = offset ;
|
||||||
|
}
|
||||||
|
if ( addrEnd.nodeType == 1 && addrEnd.childNodes[bookmark.End[0]] && addrEnd.childNodes[bookmark.End[0]].nodeType == 3 )
|
||||||
|
{
|
||||||
|
var curNode = addrEnd.childNodes[bookmark.End[0]] ;
|
||||||
|
var offset = 0 ;
|
||||||
|
while ( curNode.previousSibling && curNode.previousSibling.nodeType == 3 )
|
||||||
|
{
|
||||||
|
curNode = curNode.previousSibling ;
|
||||||
|
offset += curNode.length ;
|
||||||
|
}
|
||||||
|
addrEnd = curNode ;
|
||||||
|
bookmark.End[0] = offset ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Then, we record down the precise position of the container nodes
|
||||||
|
// by walking up the DOM tree and counting their childNode index
|
||||||
|
bookmark.Start = FCKDomTools.GetNodeAddress( addrStart, true ).concat( bookmark.Start ) ;
|
||||||
|
bookmark.End = FCKDomTools.GetNodeAddress( addrEnd, true ).concat( bookmark.End ) ;
|
||||||
|
return bookmark;
|
||||||
|
},
|
||||||
|
|
||||||
|
MoveToBookmark2 : function( bookmark )
|
||||||
|
{
|
||||||
|
// Reverse the childNode counting algorithm in CreateBookmark2()
|
||||||
|
var curStart = FCKDomTools.GetNodeFromAddress( this.Window.document, bookmark.Start.slice( 0, -1 ), true ) ;
|
||||||
|
var curEnd = FCKDomTools.GetNodeFromAddress( this.Window.document, bookmark.End.slice( 0, -1 ), true ) ;
|
||||||
|
|
||||||
|
// Generate the W3C Range object and update relevant data
|
||||||
|
this.Release( true ) ;
|
||||||
|
this._Range = new FCKW3CRange( this.Window.document ) ;
|
||||||
|
var startOffset = bookmark.Start[ bookmark.Start.length - 1 ] ;
|
||||||
|
var endOffset = bookmark.End[ bookmark.End.length - 1 ] ;
|
||||||
|
while ( curStart.nodeType == 3 && startOffset > curStart.length )
|
||||||
|
{
|
||||||
|
if ( ! curStart.nextSibling || curStart.nextSibling.nodeType != 3 )
|
||||||
|
break ;
|
||||||
|
startOffset -= curStart.length ;
|
||||||
|
curStart = curStart.nextSibling ;
|
||||||
|
}
|
||||||
|
while ( curEnd.nodeType == 3 && endOffset > curEnd.length )
|
||||||
|
{
|
||||||
|
if ( ! curEnd.nextSibling || curEnd.nextSibling.nodeType != 3 )
|
||||||
|
break ;
|
||||||
|
endOffset -= curEnd.length ;
|
||||||
|
curEnd = curEnd.nextSibling ;
|
||||||
|
}
|
||||||
|
this._Range.setStart( curStart, startOffset ) ;
|
||||||
|
this._Range.setEnd( curEnd, endOffset ) ;
|
||||||
|
this._UpdateElementInfo() ;
|
||||||
|
},
|
||||||
|
|
||||||
|
MoveToPosition : function( targetElement, position )
|
||||||
|
{
|
||||||
|
this.SetStart( targetElement, position ) ;
|
||||||
|
this.Collapse( true ) ;
|
||||||
|
},
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Moves the position of the start boundary of the range to a specific position
|
||||||
|
* relatively to a element.
|
||||||
|
* @position:
|
||||||
|
* 1 = After Start <target>^contents</target>
|
||||||
|
* 2 = Before End <target>contents^</target>
|
||||||
|
* 3 = Before Start ^<target>contents</target>
|
||||||
|
* 4 = After End <target>contents</target>^
|
||||||
|
*/
|
||||||
|
SetStart : function( targetElement, position, noInfoUpdate )
|
||||||
|
{
|
||||||
|
var oRange = this._Range ;
|
||||||
|
if ( !oRange )
|
||||||
|
oRange = this._Range = this.CreateRange() ;
|
||||||
|
|
||||||
|
switch( position )
|
||||||
|
{
|
||||||
|
case 1 : // After Start <target>^contents</target>
|
||||||
|
oRange.setStart( targetElement, 0 ) ;
|
||||||
|
break ;
|
||||||
|
|
||||||
|
case 2 : // Before End <target>contents^</target>
|
||||||
|
oRange.setStart( targetElement, targetElement.childNodes.length ) ;
|
||||||
|
break ;
|
||||||
|
|
||||||
|
case 3 : // Before Start ^<target>contents</target>
|
||||||
|
oRange.setStartBefore( targetElement ) ;
|
||||||
|
break ;
|
||||||
|
|
||||||
|
case 4 : // After End <target>contents</target>^
|
||||||
|
oRange.setStartAfter( targetElement ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !noInfoUpdate )
|
||||||
|
this._UpdateElementInfo() ;
|
||||||
|
},
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Moves the position of the start boundary of the range to a specific position
|
||||||
|
* relatively to a element.
|
||||||
|
* @position:
|
||||||
|
* 1 = After Start <target>^contents</target>
|
||||||
|
* 2 = Before End <target>contents^</target>
|
||||||
|
* 3 = Before Start ^<target>contents</target>
|
||||||
|
* 4 = After End <target>contents</target>^
|
||||||
|
*/
|
||||||
|
SetEnd : function( targetElement, position, noInfoUpdate )
|
||||||
|
{
|
||||||
|
var oRange = this._Range ;
|
||||||
|
if ( !oRange )
|
||||||
|
oRange = this._Range = this.CreateRange() ;
|
||||||
|
|
||||||
|
switch( position )
|
||||||
|
{
|
||||||
|
case 1 : // After Start <target>^contents</target>
|
||||||
|
oRange.setEnd( targetElement, 0 ) ;
|
||||||
|
break ;
|
||||||
|
|
||||||
|
case 2 : // Before End <target>contents^</target>
|
||||||
|
oRange.setEnd( targetElement, targetElement.childNodes.length ) ;
|
||||||
|
break ;
|
||||||
|
|
||||||
|
case 3 : // Before Start ^<target>contents</target>
|
||||||
|
oRange.setEndBefore( targetElement ) ;
|
||||||
|
break ;
|
||||||
|
|
||||||
|
case 4 : // After End <target>contents</target>^
|
||||||
|
oRange.setEndAfter( targetElement ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !noInfoUpdate )
|
||||||
|
this._UpdateElementInfo() ;
|
||||||
|
},
|
||||||
|
|
||||||
|
Expand : function( unit )
|
||||||
|
{
|
||||||
|
var oNode, oSibling ;
|
||||||
|
|
||||||
|
switch ( unit )
|
||||||
|
{
|
||||||
|
// Expand the range to include all inline parent elements if we are
|
||||||
|
// are in their boundary limits.
|
||||||
|
// For example (where [ ] are the range limits):
|
||||||
|
// Before => Some <b>[<i>Some sample text]</i></b>.
|
||||||
|
// After => Some [<b><i>Some sample text</i></b>].
|
||||||
|
case 'inline_elements' :
|
||||||
|
// Expand the start boundary.
|
||||||
|
if ( this._Range.startOffset == 0 )
|
||||||
|
{
|
||||||
|
oNode = this._Range.startContainer ;
|
||||||
|
|
||||||
|
if ( oNode.nodeType != 1 )
|
||||||
|
oNode = oNode.previousSibling ? null : oNode.parentNode ;
|
||||||
|
|
||||||
|
if ( oNode )
|
||||||
|
{
|
||||||
|
while ( FCKListsLib.InlineNonEmptyElements[ oNode.nodeName.toLowerCase() ] )
|
||||||
|
{
|
||||||
|
this._Range.setStartBefore( oNode ) ;
|
||||||
|
|
||||||
|
if ( oNode != oNode.parentNode.firstChild )
|
||||||
|
break ;
|
||||||
|
|
||||||
|
oNode = oNode.parentNode ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Expand the end boundary.
|
||||||
|
oNode = this._Range.endContainer ;
|
||||||
|
var offset = this._Range.endOffset ;
|
||||||
|
|
||||||
|
if ( ( oNode.nodeType == 3 && offset >= oNode.nodeValue.length ) || ( oNode.nodeType == 1 && offset >= oNode.childNodes.length ) || ( oNode.nodeType != 1 && oNode.nodeType != 3 ) )
|
||||||
|
{
|
||||||
|
if ( oNode.nodeType != 1 )
|
||||||
|
oNode = oNode.nextSibling ? null : oNode.parentNode ;
|
||||||
|
|
||||||
|
if ( oNode )
|
||||||
|
{
|
||||||
|
while ( FCKListsLib.InlineNonEmptyElements[ oNode.nodeName.toLowerCase() ] )
|
||||||
|
{
|
||||||
|
this._Range.setEndAfter( oNode ) ;
|
||||||
|
|
||||||
|
if ( oNode != oNode.parentNode.lastChild )
|
||||||
|
break ;
|
||||||
|
|
||||||
|
oNode = oNode.parentNode ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break ;
|
||||||
|
|
||||||
|
case 'block_contents' :
|
||||||
|
case 'list_contents' :
|
||||||
|
var boundarySet = FCKListsLib.BlockBoundaries ;
|
||||||
|
if ( unit == 'list_contents' || FCKConfig.EnterMode == 'br' )
|
||||||
|
boundarySet = FCKListsLib.ListBoundaries ;
|
||||||
|
|
||||||
|
if ( this.StartBlock && FCKConfig.EnterMode != 'br' && unit == 'block_contents' )
|
||||||
|
this.SetStart( this.StartBlock, 1 ) ;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Get the start node for the current range.
|
||||||
|
oNode = this._Range.startContainer ;
|
||||||
|
|
||||||
|
// If it is an element, get the node right before of it (in source order).
|
||||||
|
if ( oNode.nodeType == 1 )
|
||||||
|
{
|
||||||
|
var lastNode = oNode.childNodes[ this._Range.startOffset ] ;
|
||||||
|
if ( lastNode )
|
||||||
|
oNode = FCKDomTools.GetPreviousSourceNode( lastNode, true ) ;
|
||||||
|
else
|
||||||
|
oNode = oNode.lastChild || oNode ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We must look for the left boundary, relative to the range
|
||||||
|
// start, which is limited by a block element.
|
||||||
|
while ( oNode
|
||||||
|
&& ( oNode.nodeType != 1
|
||||||
|
|| ( oNode != this.StartBlockLimit
|
||||||
|
&& !boundarySet[ oNode.nodeName.toLowerCase() ] ) ) )
|
||||||
|
{
|
||||||
|
this._Range.setStartBefore( oNode ) ;
|
||||||
|
oNode = oNode.previousSibling || oNode.parentNode ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( this.EndBlock && FCKConfig.EnterMode != 'br' && unit == 'block_contents' && this.EndBlock.nodeName.toLowerCase() != 'li' )
|
||||||
|
this.SetEnd( this.EndBlock, 2 ) ;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
oNode = this._Range.endContainer ;
|
||||||
|
if ( oNode.nodeType == 1 )
|
||||||
|
oNode = oNode.childNodes[ this._Range.endOffset ] || oNode.lastChild ;
|
||||||
|
|
||||||
|
// We must look for the right boundary, relative to the range
|
||||||
|
// end, which is limited by a block element.
|
||||||
|
while ( oNode
|
||||||
|
&& ( oNode.nodeType != 1
|
||||||
|
|| ( oNode != this.StartBlockLimit
|
||||||
|
&& !boundarySet[ oNode.nodeName.toLowerCase() ] ) ) )
|
||||||
|
{
|
||||||
|
this._Range.setEndAfter( oNode ) ;
|
||||||
|
oNode = oNode.nextSibling || oNode.parentNode ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// In EnterMode='br', the end <br> boundary element must
|
||||||
|
// be included in the expanded range.
|
||||||
|
if ( oNode && oNode.nodeName.toLowerCase() == 'br' )
|
||||||
|
this._Range.setEndAfter( oNode ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._UpdateElementInfo() ;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Split the block element for the current range. It deletes the contents
|
||||||
|
* of the range and splits the block in the collapsed position, resulting
|
||||||
|
* in two sucessive blocks. The range is then positioned in the middle of
|
||||||
|
* them.
|
||||||
|
*
|
||||||
|
* It returns and object with the following properties:
|
||||||
|
* - PreviousBlock : a reference to the block element that preceeds
|
||||||
|
* the range after the split.
|
||||||
|
* - NextBlock : a reference to the block element that follows the
|
||||||
|
* range after the split.
|
||||||
|
* - WasStartOfBlock : a boolean indicating that the range was
|
||||||
|
* originaly at the start of the block.
|
||||||
|
* - WasEndOfBlock : a boolean indicating that the range was originaly
|
||||||
|
* at the end of the block.
|
||||||
|
*
|
||||||
|
* If the range was originaly at the start of the block, no split will happen
|
||||||
|
* and the PreviousBlock value will be null. The same is valid for the
|
||||||
|
* NextBlock value if the range was at the end of the block.
|
||||||
|
*/
|
||||||
|
SplitBlock : function( forceBlockTag )
|
||||||
|
{
|
||||||
|
var blockTag = forceBlockTag || FCKConfig.EnterMode ;
|
||||||
|
|
||||||
|
if ( !this._Range )
|
||||||
|
this.MoveToSelection() ;
|
||||||
|
|
||||||
|
// The range boundaries must be in the same "block limit" element.
|
||||||
|
if ( this.StartBlockLimit == this.EndBlockLimit )
|
||||||
|
{
|
||||||
|
// Get the current blocks.
|
||||||
|
var eStartBlock = this.StartBlock ;
|
||||||
|
var eEndBlock = this.EndBlock ;
|
||||||
|
var oElementPath = null ;
|
||||||
|
|
||||||
|
if ( blockTag != 'br' )
|
||||||
|
{
|
||||||
|
if ( !eStartBlock )
|
||||||
|
{
|
||||||
|
eStartBlock = this.FixBlock( true, blockTag ) ;
|
||||||
|
eEndBlock = this.EndBlock ; // FixBlock may have fixed the EndBlock too.
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !eEndBlock )
|
||||||
|
eEndBlock = this.FixBlock( false, blockTag ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the range position.
|
||||||
|
var bIsStartOfBlock = ( eStartBlock != null && this.CheckStartOfBlock() ) ;
|
||||||
|
var bIsEndOfBlock = ( eEndBlock != null && this.CheckEndOfBlock() ) ;
|
||||||
|
|
||||||
|
// Delete the current contents.
|
||||||
|
if ( !this.CheckIsEmpty() )
|
||||||
|
this.DeleteContents() ;
|
||||||
|
|
||||||
|
if ( eStartBlock && eEndBlock && eStartBlock == eEndBlock )
|
||||||
|
{
|
||||||
|
if ( bIsEndOfBlock )
|
||||||
|
{
|
||||||
|
oElementPath = new FCKElementPath( this.StartContainer ) ;
|
||||||
|
this.MoveToPosition( eEndBlock, 4 ) ;
|
||||||
|
eEndBlock = null ;
|
||||||
|
}
|
||||||
|
else if ( bIsStartOfBlock )
|
||||||
|
{
|
||||||
|
oElementPath = new FCKElementPath( this.StartContainer ) ;
|
||||||
|
this.MoveToPosition( eStartBlock, 3 ) ;
|
||||||
|
eStartBlock = null ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Extract the contents of the block from the selection point to the end of its contents.
|
||||||
|
this.SetEnd( eStartBlock, 2 ) ;
|
||||||
|
var eDocFrag = this.ExtractContents() ;
|
||||||
|
|
||||||
|
// Duplicate the block element after it.
|
||||||
|
eEndBlock = eStartBlock.cloneNode( false ) ;
|
||||||
|
eEndBlock.removeAttribute( 'id', false ) ;
|
||||||
|
|
||||||
|
// Place the extracted contents in the duplicated block.
|
||||||
|
eDocFrag.AppendTo( eEndBlock ) ;
|
||||||
|
|
||||||
|
FCKDomTools.InsertAfterNode( eStartBlock, eEndBlock ) ;
|
||||||
|
|
||||||
|
this.MoveToPosition( eStartBlock, 4 ) ;
|
||||||
|
|
||||||
|
// In Gecko, the last child node must be a bogus <br>.
|
||||||
|
// Note: bogus <br> added under <ul> or <ol> would cause lists to be incorrectly rendered.
|
||||||
|
if ( FCKBrowserInfo.IsGecko &&
|
||||||
|
! eStartBlock.nodeName.IEquals( ['ul', 'ol'] ) )
|
||||||
|
FCKTools.AppendBogusBr( eStartBlock ) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
PreviousBlock : eStartBlock,
|
||||||
|
NextBlock : eEndBlock,
|
||||||
|
WasStartOfBlock : bIsStartOfBlock,
|
||||||
|
WasEndOfBlock : bIsEndOfBlock,
|
||||||
|
ElementPath : oElementPath
|
||||||
|
} ;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null ;
|
||||||
|
},
|
||||||
|
|
||||||
|
// Transform a block without a block tag in a valid block (orphan text in the body or td, usually).
|
||||||
|
FixBlock : function( isStart, blockTag )
|
||||||
|
{
|
||||||
|
// Bookmark the range so we can restore it later.
|
||||||
|
var oBookmark = this.CreateBookmark() ;
|
||||||
|
|
||||||
|
// Collapse the range to the requested ending boundary.
|
||||||
|
this.Collapse( isStart ) ;
|
||||||
|
|
||||||
|
// Expands it to the block contents.
|
||||||
|
this.Expand( 'block_contents' ) ;
|
||||||
|
|
||||||
|
// Create the fixed block.
|
||||||
|
var oFixedBlock = this.Window.document.createElement( blockTag ) ;
|
||||||
|
|
||||||
|
// Move the contents of the temporary range to the fixed block.
|
||||||
|
this.ExtractContents().AppendTo( oFixedBlock ) ;
|
||||||
|
FCKDomTools.TrimNode( oFixedBlock ) ;
|
||||||
|
|
||||||
|
// If the fixed block is empty (not counting bookmark nodes)
|
||||||
|
// Add a <br /> inside to expand it.
|
||||||
|
if ( FCKDomTools.CheckIsEmptyElement(oFixedBlock, function( element ) { return element.getAttribute('_fck_bookmark') != 'true' ; } )
|
||||||
|
&& FCKBrowserInfo.IsGeckoLike )
|
||||||
|
FCKTools.AppendBogusBr( oFixedBlock ) ;
|
||||||
|
|
||||||
|
// Insert the fixed block into the DOM.
|
||||||
|
this.InsertNode( oFixedBlock ) ;
|
||||||
|
|
||||||
|
// Move the range back to the bookmarked place.
|
||||||
|
this.MoveToBookmark( oBookmark ) ;
|
||||||
|
|
||||||
|
return oFixedBlock ;
|
||||||
|
},
|
||||||
|
|
||||||
|
Release : function( preserveWindow )
|
||||||
|
{
|
||||||
|
if ( !preserveWindow )
|
||||||
|
this.Window = null ;
|
||||||
|
|
||||||
|
this.StartNode = null ;
|
||||||
|
this.StartContainer = null ;
|
||||||
|
this.StartBlock = null ;
|
||||||
|
this.StartBlockLimit = null ;
|
||||||
|
this.EndNode = null ;
|
||||||
|
this.EndContainer = null ;
|
||||||
|
this.EndBlock = null ;
|
||||||
|
this.EndBlockLimit = null ;
|
||||||
|
this._Range = null ;
|
||||||
|
this._Cache = null ;
|
||||||
|
},
|
||||||
|
|
||||||
|
CheckHasRange : function()
|
||||||
|
{
|
||||||
|
return !!this._Range ;
|
||||||
|
},
|
||||||
|
|
||||||
|
GetTouchedStartNode : function()
|
||||||
|
{
|
||||||
|
var range = this._Range ;
|
||||||
|
var container = range.startContainer ;
|
||||||
|
|
||||||
|
if ( range.collapsed || container.nodeType != 1 )
|
||||||
|
return container ;
|
||||||
|
|
||||||
|
return container.childNodes[ range.startOffset ] || container ;
|
||||||
|
},
|
||||||
|
|
||||||
|
GetTouchedEndNode : function()
|
||||||
|
{
|
||||||
|
var range = this._Range ;
|
||||||
|
var container = range.endContainer ;
|
||||||
|
|
||||||
|
if ( range.collapsed || container.nodeType != 1 )
|
||||||
|
return container ;
|
||||||
|
|
||||||
|
return container.childNodes[ range.endOffset - 1 ] || container ;
|
||||||
|
}
|
||||||
|
} ;
|
104
fckeditor/editor/_source/classes/fckdomrange_gecko.js
Normal file
104
fckeditor/editor/_source/classes/fckdomrange_gecko.js
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Class for working with a selection range, much like the W3C DOM Range, but
|
||||||
|
* it is not intended to be an implementation of the W3C interface.
|
||||||
|
* (Gecko Implementation)
|
||||||
|
*/
|
||||||
|
|
||||||
|
FCKDomRange.prototype.MoveToSelection = function()
|
||||||
|
{
|
||||||
|
this.Release( true ) ;
|
||||||
|
|
||||||
|
var oSel = this.Window.getSelection() ;
|
||||||
|
|
||||||
|
if ( oSel && oSel.rangeCount > 0 )
|
||||||
|
{
|
||||||
|
this._Range = FCKW3CRange.CreateFromRange( this.Window.document, oSel.getRangeAt(0) ) ;
|
||||||
|
this._UpdateElementInfo() ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if ( this.Window.document )
|
||||||
|
this.MoveToElementStart( this.Window.document.body ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
FCKDomRange.prototype.Select = function()
|
||||||
|
{
|
||||||
|
var oRange = this._Range ;
|
||||||
|
if ( oRange )
|
||||||
|
{
|
||||||
|
var startContainer = oRange.startContainer ;
|
||||||
|
|
||||||
|
// If we have a collapsed range, inside an empty element, we must add
|
||||||
|
// something to it, otherwise the caret will not be visible.
|
||||||
|
if ( oRange.collapsed && startContainer.nodeType == 1 && startContainer.childNodes.length == 0 )
|
||||||
|
startContainer.appendChild( oRange._Document.createTextNode('') ) ;
|
||||||
|
|
||||||
|
var oDocRange = this.Window.document.createRange() ;
|
||||||
|
oDocRange.setStart( startContainer, oRange.startOffset ) ;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
oDocRange.setEnd( oRange.endContainer, oRange.endOffset ) ;
|
||||||
|
}
|
||||||
|
catch ( e )
|
||||||
|
{
|
||||||
|
// There is a bug in Firefox implementation (it would be too easy
|
||||||
|
// otherwise). The new start can't be after the end (W3C says it can).
|
||||||
|
// So, let's create a new range and collapse it to the desired point.
|
||||||
|
if ( e.toString().Contains( 'NS_ERROR_ILLEGAL_VALUE' ) )
|
||||||
|
{
|
||||||
|
oRange.collapse( true ) ;
|
||||||
|
oDocRange.setEnd( oRange.endContainer, oRange.endOffset ) ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
throw( e ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
var oSel = this.Window.getSelection() ;
|
||||||
|
oSel.removeAllRanges() ;
|
||||||
|
|
||||||
|
// We must add a clone otherwise Firefox will have rendering issues.
|
||||||
|
oSel.addRange( oDocRange ) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Not compatible with bookmark created with CreateBookmark2.
|
||||||
|
// The bookmark nodes will be deleted from the document.
|
||||||
|
FCKDomRange.prototype.SelectBookmark = function( bookmark )
|
||||||
|
{
|
||||||
|
var domRange = this.Window.document.createRange() ;
|
||||||
|
|
||||||
|
var startNode = this.GetBookmarkNode( bookmark, true ) ;
|
||||||
|
var endNode = this.GetBookmarkNode( bookmark, false ) ;
|
||||||
|
|
||||||
|
domRange.setStart( startNode.parentNode, FCKDomTools.GetIndexOf( startNode ) ) ;
|
||||||
|
FCKDomTools.RemoveNode( startNode ) ;
|
||||||
|
|
||||||
|
if ( endNode )
|
||||||
|
{
|
||||||
|
domRange.setEnd( endNode.parentNode, FCKDomTools.GetIndexOf( endNode ) ) ;
|
||||||
|
FCKDomTools.RemoveNode( endNode ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
var selection = this.Window.getSelection() ;
|
||||||
|
selection.removeAllRanges() ;
|
||||||
|
selection.addRange( domRange ) ;
|
||||||
|
}
|
199
fckeditor/editor/_source/classes/fckdomrange_ie.js
Normal file
199
fckeditor/editor/_source/classes/fckdomrange_ie.js
Normal file
@ -0,0 +1,199 @@
|
|||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Class for working with a selection range, much like the W3C DOM Range, but
|
||||||
|
* it is not intended to be an implementation of the W3C interface.
|
||||||
|
* (IE Implementation)
|
||||||
|
*/
|
||||||
|
|
||||||
|
FCKDomRange.prototype.MoveToSelection = function()
|
||||||
|
{
|
||||||
|
this.Release( true ) ;
|
||||||
|
|
||||||
|
this._Range = new FCKW3CRange( this.Window.document ) ;
|
||||||
|
|
||||||
|
var oSel = this.Window.document.selection ;
|
||||||
|
|
||||||
|
if ( oSel.type != 'Control' )
|
||||||
|
{
|
||||||
|
var eMarkerStart = this._GetSelectionMarkerTag( true ) ;
|
||||||
|
var eMarkerEnd = this._GetSelectionMarkerTag( false ) ;
|
||||||
|
|
||||||
|
if ( !eMarkerStart && !eMarkerEnd )
|
||||||
|
{
|
||||||
|
this._Range.setStart( this.Window.document.body, 0 ) ;
|
||||||
|
this._UpdateElementInfo() ;
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the start boundary.
|
||||||
|
this._Range.setStart( eMarkerStart.parentNode, FCKDomTools.GetIndexOf( eMarkerStart ) ) ;
|
||||||
|
eMarkerStart.parentNode.removeChild( eMarkerStart ) ;
|
||||||
|
|
||||||
|
// Set the end boundary.
|
||||||
|
this._Range.setEnd( eMarkerEnd.parentNode, FCKDomTools.GetIndexOf( eMarkerEnd ) ) ;
|
||||||
|
eMarkerEnd.parentNode.removeChild( eMarkerEnd ) ;
|
||||||
|
|
||||||
|
this._UpdateElementInfo() ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var oControl = oSel.createRange().item(0) ;
|
||||||
|
|
||||||
|
if ( oControl )
|
||||||
|
{
|
||||||
|
this._Range.setStartBefore( oControl ) ;
|
||||||
|
this._Range.setEndAfter( oControl ) ;
|
||||||
|
this._UpdateElementInfo() ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FCKDomRange.prototype.Select = function( forceExpand )
|
||||||
|
{
|
||||||
|
if ( this._Range )
|
||||||
|
this.SelectBookmark( this.CreateBookmark( true ), forceExpand ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Not compatible with bookmark created with CreateBookmark2.
|
||||||
|
// The bookmark nodes will be deleted from the document.
|
||||||
|
FCKDomRange.prototype.SelectBookmark = function( bookmark, forceExpand )
|
||||||
|
{
|
||||||
|
var bIsCollapsed = this.CheckIsCollapsed() ;
|
||||||
|
var bIsStartMakerAlone ;
|
||||||
|
var dummySpan ;
|
||||||
|
|
||||||
|
// Create marker tags for the start and end boundaries.
|
||||||
|
var eStartMarker = this.GetBookmarkNode( bookmark, true ) ;
|
||||||
|
|
||||||
|
if ( !eStartMarker )
|
||||||
|
return ;
|
||||||
|
|
||||||
|
var eEndMarker ;
|
||||||
|
if ( !bIsCollapsed )
|
||||||
|
eEndMarker = this.GetBookmarkNode( bookmark, false ) ;
|
||||||
|
|
||||||
|
// Create the main range which will be used for the selection.
|
||||||
|
var oIERange = this.Window.document.body.createTextRange() ;
|
||||||
|
|
||||||
|
// Position the range at the start boundary.
|
||||||
|
oIERange.moveToElementText( eStartMarker ) ;
|
||||||
|
oIERange.moveStart( 'character', 1 ) ;
|
||||||
|
|
||||||
|
if ( eEndMarker )
|
||||||
|
{
|
||||||
|
// Create a tool range for the end.
|
||||||
|
var oIERangeEnd = this.Window.document.body.createTextRange() ;
|
||||||
|
|
||||||
|
// Position the tool range at the end.
|
||||||
|
oIERangeEnd.moveToElementText( eEndMarker ) ;
|
||||||
|
|
||||||
|
// Move the end boundary of the main range to match the tool range.
|
||||||
|
oIERange.setEndPoint( 'EndToEnd', oIERangeEnd ) ;
|
||||||
|
oIERange.moveEnd( 'character', -1 ) ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bIsStartMakerAlone = ( forceExpand || !eStartMarker.previousSibling || eStartMarker.previousSibling.nodeName.toLowerCase() == 'br' ) && !eStartMarker.nextSibing ;
|
||||||
|
|
||||||
|
// Append a temporary <span></span> before the selection.
|
||||||
|
// This is needed to avoid IE destroying selections inside empty
|
||||||
|
// inline elements, like <b></b> (#253).
|
||||||
|
// It is also needed when placing the selection right after an inline
|
||||||
|
// element to avoid the selection moving inside of it.
|
||||||
|
dummySpan = this.Window.document.createElement( 'span' ) ;
|
||||||
|
dummySpan.innerHTML = '' ; // Zero Width No-Break Space (U+FEFF). See #1359.
|
||||||
|
eStartMarker.parentNode.insertBefore( dummySpan, eStartMarker ) ;
|
||||||
|
|
||||||
|
if ( bIsStartMakerAlone )
|
||||||
|
{
|
||||||
|
// To expand empty blocks or line spaces after <br>, we need
|
||||||
|
// instead to have any char, which will be later deleted using the
|
||||||
|
// selection.
|
||||||
|
// \ufeff = Zero Width No-Break Space (U+FEFF). See #1359.
|
||||||
|
eStartMarker.parentNode.insertBefore( this.Window.document.createTextNode( '\ufeff' ), eStartMarker ) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !this._Range )
|
||||||
|
this._Range = this.CreateRange() ;
|
||||||
|
|
||||||
|
// Remove the markers (reset the position, because of the changes in the DOM tree).
|
||||||
|
this._Range.setStartBefore( eStartMarker ) ;
|
||||||
|
eStartMarker.parentNode.removeChild( eStartMarker ) ;
|
||||||
|
|
||||||
|
if ( bIsCollapsed )
|
||||||
|
{
|
||||||
|
if ( bIsStartMakerAlone )
|
||||||
|
{
|
||||||
|
// Move the selection start to include the temporary .
|
||||||
|
oIERange.moveStart( 'character', -1 ) ;
|
||||||
|
|
||||||
|
oIERange.select() ;
|
||||||
|
|
||||||
|
// Remove our temporary stuff.
|
||||||
|
this.Window.document.selection.clear() ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
oIERange.select() ;
|
||||||
|
|
||||||
|
FCKDomTools.RemoveNode( dummySpan ) ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this._Range.setEndBefore( eEndMarker ) ;
|
||||||
|
eEndMarker.parentNode.removeChild( eEndMarker ) ;
|
||||||
|
oIERange.select() ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FCKDomRange.prototype._GetSelectionMarkerTag = function( toStart )
|
||||||
|
{
|
||||||
|
var doc = this.Window.document ;
|
||||||
|
var selection = doc.selection ;
|
||||||
|
|
||||||
|
// Get a range for the start boundary.
|
||||||
|
var oRange ;
|
||||||
|
|
||||||
|
// IE may throw an "unspecified error" on some cases (it happened when
|
||||||
|
// loading _samples/default.html), so try/catch.
|
||||||
|
try
|
||||||
|
{
|
||||||
|
oRange = selection.createRange() ;
|
||||||
|
}
|
||||||
|
catch (e)
|
||||||
|
{
|
||||||
|
return null ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// IE might take the range object to the main window instead of inside the editor iframe window.
|
||||||
|
// This is known to happen when the editor window has not been selected before (See #933).
|
||||||
|
// We need to avoid that.
|
||||||
|
if ( oRange.parentElement().document != doc )
|
||||||
|
return null ;
|
||||||
|
|
||||||
|
oRange.collapse( toStart === true ) ;
|
||||||
|
|
||||||
|
// Paste a marker element at the collapsed range and get it from the DOM.
|
||||||
|
var sMarkerId = 'fck_dom_range_temp_' + (new Date()).valueOf() + '_' + Math.floor(Math.random()*1000) ;
|
||||||
|
oRange.pasteHTML( '<span id="' + sMarkerId + '"></span>' ) ;
|
||||||
|
|
||||||
|
return doc.getElementById( sMarkerId ) ;
|
||||||
|
}
|
327
fckeditor/editor/_source/classes/fckdomrangeiterator.js
Normal file
327
fckeditor/editor/_source/classes/fckdomrangeiterator.js
Normal file
@ -0,0 +1,327 @@
|
|||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* This class can be used to interate through nodes inside a range.
|
||||||
|
*
|
||||||
|
* During interation, the provided range can become invalid, due to document
|
||||||
|
* mutations, so CreateBookmark() used to restore it after processing, if
|
||||||
|
* needed.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var FCKDomRangeIterator = function( range )
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The FCKDomRange object that marks the interation boundaries.
|
||||||
|
*/
|
||||||
|
this.Range = range ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates that <br> elements must be used as paragraph boundaries.
|
||||||
|
*/
|
||||||
|
this.ForceBrBreak = false ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Guarantees that the iterator will always return "real" block elements.
|
||||||
|
* If "false", elements like <li>, <th> and <td> are returned. If "true", a
|
||||||
|
* dedicated block element block element will be created inside those
|
||||||
|
* elements to hold the selected content.
|
||||||
|
*/
|
||||||
|
this.EnforceRealBlocks = false ;
|
||||||
|
}
|
||||||
|
|
||||||
|
FCKDomRangeIterator.CreateFromSelection = function( targetWindow )
|
||||||
|
{
|
||||||
|
var range = new FCKDomRange( targetWindow ) ;
|
||||||
|
range.MoveToSelection() ;
|
||||||
|
return new FCKDomRangeIterator( range ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
FCKDomRangeIterator.prototype =
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Get the next paragraph element. It automatically breaks the document
|
||||||
|
* when necessary to generate block elements for the paragraphs.
|
||||||
|
*/
|
||||||
|
GetNextParagraph : function()
|
||||||
|
{
|
||||||
|
// The block element to be returned.
|
||||||
|
var block ;
|
||||||
|
|
||||||
|
// The range object used to identify the paragraph contents.
|
||||||
|
var range ;
|
||||||
|
|
||||||
|
// Indicated that the current element in the loop is the last one.
|
||||||
|
var isLast ;
|
||||||
|
|
||||||
|
// Instructs to cleanup remaining BRs.
|
||||||
|
var removePreviousBr ;
|
||||||
|
var removeLastBr ;
|
||||||
|
|
||||||
|
var boundarySet = this.ForceBrBreak ? FCKListsLib.ListBoundaries : FCKListsLib.BlockBoundaries ;
|
||||||
|
|
||||||
|
// This is the first iteration. Let's initialize it.
|
||||||
|
if ( !this._LastNode )
|
||||||
|
{
|
||||||
|
var range = this.Range.Clone() ;
|
||||||
|
range.Expand( this.ForceBrBreak ? 'list_contents' : 'block_contents' ) ;
|
||||||
|
|
||||||
|
this._NextNode = range.GetTouchedStartNode() ;
|
||||||
|
this._LastNode = range.GetTouchedEndNode() ;
|
||||||
|
|
||||||
|
// Let's reuse this variable.
|
||||||
|
range = null ;
|
||||||
|
}
|
||||||
|
|
||||||
|
var currentNode = this._NextNode ;
|
||||||
|
var lastNode = this._LastNode ;
|
||||||
|
|
||||||
|
this._NextNode = null ;
|
||||||
|
|
||||||
|
while ( currentNode )
|
||||||
|
{
|
||||||
|
// closeRange indicates that a paragraph boundary has been found,
|
||||||
|
// so the range can be closed.
|
||||||
|
var closeRange = false ;
|
||||||
|
|
||||||
|
// includeNode indicates that the current node is good to be part
|
||||||
|
// of the range. By default, any non-element node is ok for it.
|
||||||
|
var includeNode = ( currentNode.nodeType != 1 ) ;
|
||||||
|
|
||||||
|
var continueFromSibling = false ;
|
||||||
|
|
||||||
|
// If it is an element node, let's check if it can be part of the
|
||||||
|
// range.
|
||||||
|
if ( !includeNode )
|
||||||
|
{
|
||||||
|
var nodeName = currentNode.nodeName.toLowerCase() ;
|
||||||
|
|
||||||
|
if ( boundarySet[ nodeName ] && ( !FCKBrowserInfo.IsIE || currentNode.scopeName == 'HTML' ) )
|
||||||
|
{
|
||||||
|
// <br> boundaries must be part of the range. It will
|
||||||
|
// happen only if ForceBrBreak.
|
||||||
|
if ( nodeName == 'br' )
|
||||||
|
includeNode = true ;
|
||||||
|
else if ( !range && currentNode.childNodes.length == 0 && nodeName != 'hr' )
|
||||||
|
{
|
||||||
|
// If we have found an empty block, and haven't started
|
||||||
|
// the range yet, it means we must return this block.
|
||||||
|
block = currentNode ;
|
||||||
|
isLast = currentNode == lastNode ;
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The range must finish right before the boundary,
|
||||||
|
// including possibly skipped empty spaces. (#1603)
|
||||||
|
if ( range )
|
||||||
|
{
|
||||||
|
range.SetEnd( currentNode, 3, true ) ;
|
||||||
|
|
||||||
|
// The found boundary must be set as the next one at this
|
||||||
|
// point. (#1717)
|
||||||
|
if ( nodeName != 'br' )
|
||||||
|
this._NextNode = FCKDomTools.GetNextSourceNode( currentNode, true, null, lastNode ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
closeRange = true ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// If we have child nodes, let's check them.
|
||||||
|
if ( currentNode.firstChild )
|
||||||
|
{
|
||||||
|
// If we don't have a range yet, let's start it.
|
||||||
|
if ( !range )
|
||||||
|
{
|
||||||
|
range = new FCKDomRange( this.Range.Window ) ;
|
||||||
|
range.SetStart( currentNode, 3, true ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
currentNode = currentNode.firstChild ;
|
||||||
|
continue ;
|
||||||
|
}
|
||||||
|
includeNode = true ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( currentNode.nodeType == 3 )
|
||||||
|
{
|
||||||
|
// Ignore normal whitespaces (i.e. not including or
|
||||||
|
// other unicode whitespaces) before/after a block node.
|
||||||
|
if ( /^[\r\n\t ]+$/.test( currentNode.nodeValue ) )
|
||||||
|
includeNode = false ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The current node is good to be part of the range and we are
|
||||||
|
// starting a new range, initialize it first.
|
||||||
|
if ( includeNode && !range )
|
||||||
|
{
|
||||||
|
range = new FCKDomRange( this.Range.Window ) ;
|
||||||
|
range.SetStart( currentNode, 3, true ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The last node has been found.
|
||||||
|
isLast = ( ( !closeRange || includeNode ) && currentNode == lastNode ) ;
|
||||||
|
// isLast = ( currentNode == lastNode && ( currentNode.nodeType != 1 || currentNode.childNodes.length == 0 ) ) ;
|
||||||
|
|
||||||
|
// If we are in an element boundary, let's check if it is time
|
||||||
|
// to close the range, otherwise we include the parent within it.
|
||||||
|
if ( range && !closeRange )
|
||||||
|
{
|
||||||
|
while ( !currentNode.nextSibling && !isLast )
|
||||||
|
{
|
||||||
|
var parentNode = currentNode.parentNode ;
|
||||||
|
|
||||||
|
if ( boundarySet[ parentNode.nodeName.toLowerCase() ] )
|
||||||
|
{
|
||||||
|
closeRange = true ;
|
||||||
|
isLast = isLast || ( parentNode == lastNode ) ;
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
|
||||||
|
currentNode = parentNode ;
|
||||||
|
includeNode = true ;
|
||||||
|
isLast = ( currentNode == lastNode ) ;
|
||||||
|
continueFromSibling = true ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now finally include the node.
|
||||||
|
if ( includeNode )
|
||||||
|
range.SetEnd( currentNode, 4, true ) ;
|
||||||
|
|
||||||
|
// We have found a block boundary. Let's close the range and move out of the
|
||||||
|
// loop.
|
||||||
|
if ( ( closeRange || isLast ) && range )
|
||||||
|
{
|
||||||
|
range._UpdateElementInfo() ;
|
||||||
|
|
||||||
|
if ( range.StartNode == range.EndNode
|
||||||
|
&& range.StartNode.parentNode == range.StartBlockLimit
|
||||||
|
&& range.StartNode.getAttribute && range.StartNode.getAttribute( '_fck_bookmark' ) )
|
||||||
|
range = null ;
|
||||||
|
else
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( isLast )
|
||||||
|
break ;
|
||||||
|
|
||||||
|
currentNode = FCKDomTools.GetNextSourceNode( currentNode, continueFromSibling, null, lastNode ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now, based on the processed range, look for (or create) the block to be returned.
|
||||||
|
if ( !block )
|
||||||
|
{
|
||||||
|
// If no range has been found, this is the end.
|
||||||
|
if ( !range )
|
||||||
|
{
|
||||||
|
this._NextNode = null ;
|
||||||
|
return null ;
|
||||||
|
}
|
||||||
|
|
||||||
|
block = range.StartBlock ;
|
||||||
|
|
||||||
|
if ( !block
|
||||||
|
&& !this.EnforceRealBlocks
|
||||||
|
&& range.StartBlockLimit.nodeName.IEquals( 'DIV', 'TH', 'TD' )
|
||||||
|
&& range.CheckStartOfBlock()
|
||||||
|
&& range.CheckEndOfBlock() )
|
||||||
|
{
|
||||||
|
block = range.StartBlockLimit ;
|
||||||
|
}
|
||||||
|
else if ( !block || ( this.EnforceRealBlocks && block.nodeName.toLowerCase() == 'li' ) )
|
||||||
|
{
|
||||||
|
// Create the fixed block.
|
||||||
|
block = this.Range.Window.document.createElement( FCKConfig.EnterMode == 'p' ? 'p' : 'div' ) ;
|
||||||
|
|
||||||
|
// Move the contents of the temporary range to the fixed block.
|
||||||
|
range.ExtractContents().AppendTo( block ) ;
|
||||||
|
FCKDomTools.TrimNode( block ) ;
|
||||||
|
|
||||||
|
// Insert the fixed block into the DOM.
|
||||||
|
range.InsertNode( block ) ;
|
||||||
|
|
||||||
|
removePreviousBr = true ;
|
||||||
|
removeLastBr = true ;
|
||||||
|
}
|
||||||
|
else if ( block.nodeName.toLowerCase() != 'li' )
|
||||||
|
{
|
||||||
|
// If the range doesn't includes the entire contents of the
|
||||||
|
// block, we must split it, isolating the range in a dedicated
|
||||||
|
// block.
|
||||||
|
if ( !range.CheckStartOfBlock() || !range.CheckEndOfBlock() )
|
||||||
|
{
|
||||||
|
// The resulting block will be a clone of the current one.
|
||||||
|
block = block.cloneNode( false ) ;
|
||||||
|
|
||||||
|
// Extract the range contents, moving it to the new block.
|
||||||
|
range.ExtractContents().AppendTo( block ) ;
|
||||||
|
FCKDomTools.TrimNode( block ) ;
|
||||||
|
|
||||||
|
// Split the block. At this point, the range will be in the
|
||||||
|
// right position for our intents.
|
||||||
|
var splitInfo = range.SplitBlock() ;
|
||||||
|
|
||||||
|
removePreviousBr = !splitInfo.WasStartOfBlock ;
|
||||||
|
removeLastBr = !splitInfo.WasEndOfBlock ;
|
||||||
|
|
||||||
|
// Insert the new block into the DOM.
|
||||||
|
range.InsertNode( block ) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( !isLast )
|
||||||
|
{
|
||||||
|
// LIs are returned as is, with all their children (due to the
|
||||||
|
// nested lists). But, the next node is the node right after
|
||||||
|
// the current range, which could be an <li> child (nested
|
||||||
|
// lists) or the next sibling <li>.
|
||||||
|
|
||||||
|
this._NextNode = block == lastNode ? null : FCKDomTools.GetNextSourceNode( range.EndNode, true, null, lastNode ) ;
|
||||||
|
return block ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( removePreviousBr )
|
||||||
|
{
|
||||||
|
var previousSibling = block.previousSibling ;
|
||||||
|
if ( previousSibling && previousSibling.nodeType == 1 )
|
||||||
|
{
|
||||||
|
if ( previousSibling.nodeName.toLowerCase() == 'br' )
|
||||||
|
previousSibling.parentNode.removeChild( previousSibling ) ;
|
||||||
|
else if ( previousSibling.lastChild && previousSibling.lastChild.nodeName.IEquals( 'br' ) )
|
||||||
|
previousSibling.removeChild( previousSibling.lastChild ) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( removeLastBr )
|
||||||
|
{
|
||||||
|
var lastChild = block.lastChild ;
|
||||||
|
if ( lastChild && lastChild.nodeType == 1 && lastChild.nodeName.toLowerCase() == 'br' )
|
||||||
|
block.removeChild( lastChild ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get a reference for the next element. This is important because the
|
||||||
|
// above block can be removed or changed, so we can rely on it for the
|
||||||
|
// next interation.
|
||||||
|
if ( !this._NextNode )
|
||||||
|
this._NextNode = ( isLast || block == lastNode ) ? null : FCKDomTools.GetNextSourceNode( block, true, null, lastNode ) ;
|
||||||
|
|
||||||
|
return block ;
|
||||||
|
}
|
||||||
|
} ;
|
368
fckeditor/editor/_source/classes/fckeditingarea.js
Normal file
368
fckeditor/editor/_source/classes/fckeditingarea.js
Normal file
@ -0,0 +1,368 @@
|
|||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* FCKEditingArea Class: renders an editable area.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @constructor
|
||||||
|
* @param {String} targetElement The element that will hold the editing area. Any child element present in the target will be deleted.
|
||||||
|
*/
|
||||||
|
var FCKEditingArea = function( targetElement )
|
||||||
|
{
|
||||||
|
this.TargetElement = targetElement ;
|
||||||
|
this.Mode = FCK_EDITMODE_WYSIWYG ;
|
||||||
|
|
||||||
|
if ( FCK.IECleanup )
|
||||||
|
FCK.IECleanup.AddItem( this, FCKEditingArea_Cleanup ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {String} html The complete HTML for the page, including DOCTYPE and the <html> tag.
|
||||||
|
*/
|
||||||
|
FCKEditingArea.prototype.Start = function( html, secondCall )
|
||||||
|
{
|
||||||
|
var eTargetElement = this.TargetElement ;
|
||||||
|
var oTargetDocument = FCKTools.GetElementDocument( eTargetElement ) ;
|
||||||
|
|
||||||
|
// Remove all child nodes from the target.
|
||||||
|
while( eTargetElement.firstChild )
|
||||||
|
eTargetElement.removeChild( eTargetElement.firstChild ) ;
|
||||||
|
|
||||||
|
if ( this.Mode == FCK_EDITMODE_WYSIWYG )
|
||||||
|
{
|
||||||
|
// For FF, document.domain must be set only when different, otherwhise
|
||||||
|
// we'll strangely have "Permission denied" issues.
|
||||||
|
if ( FCK_IS_CUSTOM_DOMAIN )
|
||||||
|
html = '<script>document.domain="' + FCK_RUNTIME_DOMAIN + '";</script>' + html ;
|
||||||
|
|
||||||
|
// IE has a bug with the <base> tag... it must have a </base> closer,
|
||||||
|
// otherwise the all successive tags will be set as children nodes of the <base>.
|
||||||
|
if ( FCKBrowserInfo.IsIE )
|
||||||
|
html = html.replace( /(<base[^>]*?)\s*\/?>(?!\s*<\/base>)/gi, '$1></base>' ) ;
|
||||||
|
else if ( !secondCall )
|
||||||
|
{
|
||||||
|
// Gecko moves some tags out of the body to the head, so we must use
|
||||||
|
// innerHTML to set the body contents (SF BUG 1526154).
|
||||||
|
|
||||||
|
// Extract the BODY contents from the html.
|
||||||
|
var oMatchBefore = html.match( FCKRegexLib.BeforeBody ) ;
|
||||||
|
var oMatchAfter = html.match( FCKRegexLib.AfterBody ) ;
|
||||||
|
|
||||||
|
if ( oMatchBefore && oMatchAfter )
|
||||||
|
{
|
||||||
|
var sBody = html.substr( oMatchBefore[1].length,
|
||||||
|
html.length - oMatchBefore[1].length - oMatchAfter[1].length ) ; // This is the BODY tag contents.
|
||||||
|
|
||||||
|
html =
|
||||||
|
oMatchBefore[1] + // This is the HTML until the <body...> tag, inclusive.
|
||||||
|
' ' +
|
||||||
|
oMatchAfter[1] ; // This is the HTML from the </body> tag, inclusive.
|
||||||
|
|
||||||
|
// If nothing in the body, place a BOGUS tag so the cursor will appear.
|
||||||
|
if ( FCKBrowserInfo.IsGecko && ( sBody.length == 0 || FCKRegexLib.EmptyParagraph.test( sBody ) ) )
|
||||||
|
sBody = '<br type="_moz">' ;
|
||||||
|
|
||||||
|
this._BodyHTML = sBody ;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
this._BodyHTML = html ; // Invalid HTML input.
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the editing area IFRAME.
|
||||||
|
var oIFrame = this.IFrame = oTargetDocument.createElement( 'iframe' ) ;
|
||||||
|
|
||||||
|
// IE: Avoid JavaScript errors thrown by the editing are source (like tags events).
|
||||||
|
// See #1055.
|
||||||
|
var sOverrideError = '<script type="text/javascript" _fcktemp="true">window.onerror=function(){return true;};</script>' ;
|
||||||
|
|
||||||
|
oIFrame.frameBorder = 0 ;
|
||||||
|
oIFrame.style.width = oIFrame.style.height = '100%' ;
|
||||||
|
|
||||||
|
if ( FCK_IS_CUSTOM_DOMAIN && FCKBrowserInfo.IsIE )
|
||||||
|
{
|
||||||
|
window._FCKHtmlToLoad = html.replace( /<head>/i, '<head>' + sOverrideError ) ;
|
||||||
|
oIFrame.src = 'javascript:void( (function(){' +
|
||||||
|
'document.open() ;' +
|
||||||
|
'document.domain="' + document.domain + '" ;' +
|
||||||
|
'document.write( window.parent._FCKHtmlToLoad );' +
|
||||||
|
'document.close() ;' +
|
||||||
|
'window.parent._FCKHtmlToLoad = null ;' +
|
||||||
|
'})() )' ;
|
||||||
|
}
|
||||||
|
else if ( !FCKBrowserInfo.IsGecko )
|
||||||
|
{
|
||||||
|
// Firefox will render the tables inside the body in Quirks mode if the
|
||||||
|
// source of the iframe is set to javascript. see #515
|
||||||
|
oIFrame.src = 'javascript:void(0)' ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Append the new IFRAME to the target. For IE, it must be done after
|
||||||
|
// setting the "src", to avoid the "secure/unsecure" message under HTTPS.
|
||||||
|
eTargetElement.appendChild( oIFrame ) ;
|
||||||
|
|
||||||
|
// Get the window and document objects used to interact with the newly created IFRAME.
|
||||||
|
this.Window = oIFrame.contentWindow ;
|
||||||
|
|
||||||
|
// IE: Avoid JavaScript errors thrown by the editing are source (like tags events).
|
||||||
|
// TODO: This error handler is not being fired.
|
||||||
|
// this.Window.onerror = function() { alert( 'Error!' ) ; return true ; }
|
||||||
|
|
||||||
|
if ( !FCK_IS_CUSTOM_DOMAIN || !FCKBrowserInfo.IsIE )
|
||||||
|
{
|
||||||
|
var oDoc = this.Window.document ;
|
||||||
|
|
||||||
|
oDoc.open() ;
|
||||||
|
oDoc.write( html.replace( /<head>/i, '<head>' + sOverrideError ) ) ;
|
||||||
|
oDoc.close() ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( FCKBrowserInfo.IsAIR )
|
||||||
|
FCKAdobeAIR.EditingArea_Start( oDoc, html ) ;
|
||||||
|
|
||||||
|
// Firefox 1.0.x is buggy... ohh yes... so let's do it two times and it
|
||||||
|
// will magically work.
|
||||||
|
if ( FCKBrowserInfo.IsGecko10 && !secondCall )
|
||||||
|
{
|
||||||
|
this.Start( html, true ) ;
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( oIFrame.readyState && oIFrame.readyState != 'completed' )
|
||||||
|
{
|
||||||
|
var editArea = this ;
|
||||||
|
|
||||||
|
// Using a IE alternative for DOMContentLoaded, similar to the
|
||||||
|
// solution proposed at http://javascript.nwbox.com/IEContentLoaded/
|
||||||
|
setTimeout( function()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
editArea.Window.document.documentElement.doScroll("left") ;
|
||||||
|
}
|
||||||
|
catch(e)
|
||||||
|
{
|
||||||
|
setTimeout( arguments.callee, 0 ) ;
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
editArea.Window._FCKEditingArea = editArea ;
|
||||||
|
FCKEditingArea_CompleteStart.call( editArea.Window ) ;
|
||||||
|
}, 0 ) ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.Window._FCKEditingArea = this ;
|
||||||
|
|
||||||
|
// FF 1.0.x is buggy... we must wait a lot to enable editing because
|
||||||
|
// sometimes the content simply disappears, for example when pasting
|
||||||
|
// "bla1!<img src='some_url'>!bla2" in the source and then switching
|
||||||
|
// back to design.
|
||||||
|
if ( FCKBrowserInfo.IsGecko10 )
|
||||||
|
this.Window.setTimeout( FCKEditingArea_CompleteStart, 500 ) ;
|
||||||
|
else
|
||||||
|
FCKEditingArea_CompleteStart.call( this.Window ) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var eTextarea = this.Textarea = oTargetDocument.createElement( 'textarea' ) ;
|
||||||
|
eTextarea.className = 'SourceField' ;
|
||||||
|
eTextarea.dir = 'ltr' ;
|
||||||
|
FCKDomTools.SetElementStyles( eTextarea,
|
||||||
|
{
|
||||||
|
width : '100%',
|
||||||
|
height : '100%',
|
||||||
|
border : 'none',
|
||||||
|
resize : 'none',
|
||||||
|
outline : 'none'
|
||||||
|
} ) ;
|
||||||
|
eTargetElement.appendChild( eTextarea ) ;
|
||||||
|
|
||||||
|
eTextarea.value = html ;
|
||||||
|
|
||||||
|
// Fire the "OnLoad" event.
|
||||||
|
FCKTools.RunFunction( this.OnLoad ) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// "this" here is FCKEditingArea.Window
|
||||||
|
function FCKEditingArea_CompleteStart()
|
||||||
|
{
|
||||||
|
// On Firefox, the DOM takes a little to become available. So we must wait for it in a loop.
|
||||||
|
if ( !this.document.body )
|
||||||
|
{
|
||||||
|
this.setTimeout( FCKEditingArea_CompleteStart, 50 ) ;
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
var oEditorArea = this._FCKEditingArea ;
|
||||||
|
|
||||||
|
// Save this reference to be re-used later.
|
||||||
|
oEditorArea.Document = oEditorArea.Window.document ;
|
||||||
|
|
||||||
|
oEditorArea.MakeEditable() ;
|
||||||
|
|
||||||
|
// Fire the "OnLoad" event.
|
||||||
|
FCKTools.RunFunction( oEditorArea.OnLoad ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
FCKEditingArea.prototype.MakeEditable = function()
|
||||||
|
{
|
||||||
|
var oDoc = this.Document ;
|
||||||
|
|
||||||
|
if ( FCKBrowserInfo.IsIE )
|
||||||
|
{
|
||||||
|
// Kludge for #141 and #523
|
||||||
|
oDoc.body.disabled = true ;
|
||||||
|
oDoc.body.contentEditable = true ;
|
||||||
|
oDoc.body.removeAttribute( "disabled" ) ;
|
||||||
|
|
||||||
|
/* The following commands don't throw errors, but have no effect.
|
||||||
|
oDoc.execCommand( 'AutoDetect', false, false ) ;
|
||||||
|
oDoc.execCommand( 'KeepSelection', false, true ) ;
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Disable Firefox 2 Spell Checker.
|
||||||
|
oDoc.body.spellcheck = ( this.FFSpellChecker !== false ) ;
|
||||||
|
|
||||||
|
if ( this._BodyHTML )
|
||||||
|
{
|
||||||
|
oDoc.body.innerHTML = this._BodyHTML ;
|
||||||
|
oDoc.body.offsetLeft ; // Don't remove, this is a hack to fix Opera 9.50, see #2264.
|
||||||
|
this._BodyHTML = null ;
|
||||||
|
}
|
||||||
|
|
||||||
|
oDoc.designMode = 'on' ;
|
||||||
|
|
||||||
|
// Tell Gecko (Firefox 1.5+) to enable or not live resizing of objects (by Alfonso Martinez)
|
||||||
|
oDoc.execCommand( 'enableObjectResizing', false, !FCKConfig.DisableObjectResizing ) ;
|
||||||
|
|
||||||
|
// Disable the standard table editing features of Firefox.
|
||||||
|
oDoc.execCommand( 'enableInlineTableEditing', false, !FCKConfig.DisableFFTableHandles ) ;
|
||||||
|
}
|
||||||
|
catch (e)
|
||||||
|
{
|
||||||
|
// In Firefox if the iframe is initially hidden it can't be set to designMode and it raises an exception
|
||||||
|
// So we set up a DOM Mutation event Listener on the HTML, as it will raise several events when the document is visible again
|
||||||
|
FCKTools.AddEventListener( this.Window.frameElement, 'DOMAttrModified', FCKEditingArea_Document_AttributeNodeModified ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// This function processes the notifications of the DOM Mutation event on the document
|
||||||
|
// We use it to know that the document will be ready to be editable again (or we hope so)
|
||||||
|
function FCKEditingArea_Document_AttributeNodeModified( evt )
|
||||||
|
{
|
||||||
|
var editingArea = evt.currentTarget.contentWindow._FCKEditingArea ;
|
||||||
|
|
||||||
|
// We want to run our function after the events no longer fire, so we can know that it's a stable situation
|
||||||
|
if ( editingArea._timer )
|
||||||
|
window.clearTimeout( editingArea._timer ) ;
|
||||||
|
|
||||||
|
editingArea._timer = FCKTools.SetTimeout( FCKEditingArea_MakeEditableByMutation, 1000, editingArea ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// This function ideally should be called after the document is visible, it does clean up of the
|
||||||
|
// mutation tracking and tries again to make the area editable.
|
||||||
|
function FCKEditingArea_MakeEditableByMutation()
|
||||||
|
{
|
||||||
|
// Clean up
|
||||||
|
delete this._timer ;
|
||||||
|
// Now we don't want to keep on getting this event
|
||||||
|
FCKTools.RemoveEventListener( this.Window.frameElement, 'DOMAttrModified', FCKEditingArea_Document_AttributeNodeModified ) ;
|
||||||
|
// Let's try now to set the editing area editable
|
||||||
|
// If it fails it will set up the Mutation Listener again automatically
|
||||||
|
this.MakeEditable() ;
|
||||||
|
}
|
||||||
|
|
||||||
|
FCKEditingArea.prototype.Focus = function()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if ( this.Mode == FCK_EDITMODE_WYSIWYG )
|
||||||
|
{
|
||||||
|
if ( FCKBrowserInfo.IsIE )
|
||||||
|
this._FocusIE() ;
|
||||||
|
else
|
||||||
|
this.Window.focus() ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var oDoc = FCKTools.GetElementDocument( this.Textarea ) ;
|
||||||
|
if ( (!oDoc.hasFocus || oDoc.hasFocus() ) && oDoc.activeElement == this.Textarea )
|
||||||
|
return ;
|
||||||
|
|
||||||
|
this.Textarea.focus() ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
FCKEditingArea.prototype._FocusIE = function()
|
||||||
|
{
|
||||||
|
// In IE it can happen that the document is in theory focused but the
|
||||||
|
// active element is outside of it.
|
||||||
|
this.Document.body.setActive() ;
|
||||||
|
|
||||||
|
this.Window.focus() ;
|
||||||
|
|
||||||
|
// Kludge for #141... yet more code to workaround IE bugs
|
||||||
|
var range = this.Document.selection.createRange() ;
|
||||||
|
|
||||||
|
var parentNode = range.parentElement() ;
|
||||||
|
var parentTag = parentNode.nodeName.toLowerCase() ;
|
||||||
|
|
||||||
|
// Only apply the fix when in a block, and the block is empty.
|
||||||
|
if ( parentNode.childNodes.length > 0 ||
|
||||||
|
!( FCKListsLib.BlockElements[parentTag] ||
|
||||||
|
FCKListsLib.NonEmptyBlockElements[parentTag] ) )
|
||||||
|
{
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Force the selection to happen, in this way we guarantee the focus will
|
||||||
|
// be there.
|
||||||
|
range = new FCKDomRange( this.Window ) ;
|
||||||
|
range.MoveToElementEditStart( parentNode ) ;
|
||||||
|
range.Select() ;
|
||||||
|
}
|
||||||
|
|
||||||
|
function FCKEditingArea_Cleanup()
|
||||||
|
{
|
||||||
|
if ( this.Document )
|
||||||
|
this.Document.body.innerHTML = "" ;
|
||||||
|
this.TargetElement = null ;
|
||||||
|
this.IFrame = null ;
|
||||||
|
this.Document = null ;
|
||||||
|
this.Textarea = null ;
|
||||||
|
|
||||||
|
if ( this.Window )
|
||||||
|
{
|
||||||
|
this.Window._FCKEditingArea = null ;
|
||||||
|
this.Window = null ;
|
||||||
|
}
|
||||||
|
}
|
89
fckeditor/editor/_source/classes/fckelementpath.js
Normal file
89
fckeditor/editor/_source/classes/fckelementpath.js
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Manages the DOM ascensors element list of a specific DOM node
|
||||||
|
* (limited to body, inclusive).
|
||||||
|
*/
|
||||||
|
|
||||||
|
var FCKElementPath = function( lastNode )
|
||||||
|
{
|
||||||
|
var eBlock = null ;
|
||||||
|
var eBlockLimit = null ;
|
||||||
|
|
||||||
|
var aElements = new Array() ;
|
||||||
|
|
||||||
|
var e = lastNode ;
|
||||||
|
while ( e )
|
||||||
|
{
|
||||||
|
if ( e.nodeType == 1 )
|
||||||
|
{
|
||||||
|
if ( !this.LastElement )
|
||||||
|
this.LastElement = e ;
|
||||||
|
|
||||||
|
var sElementName = e.nodeName.toLowerCase() ;
|
||||||
|
if ( FCKBrowserInfo.IsIE && e.scopeName != 'HTML' )
|
||||||
|
sElementName = e.scopeName.toLowerCase() + ':' + sElementName ;
|
||||||
|
|
||||||
|
if ( !eBlockLimit )
|
||||||
|
{
|
||||||
|
if ( !eBlock && FCKListsLib.PathBlockElements[ sElementName ] != null )
|
||||||
|
eBlock = e ;
|
||||||
|
|
||||||
|
if ( FCKListsLib.PathBlockLimitElements[ sElementName ] != null )
|
||||||
|
{
|
||||||
|
// DIV is considered the Block, if no block is available (#525)
|
||||||
|
// and if it doesn't contain other blocks.
|
||||||
|
if ( !eBlock && sElementName == 'div' && !FCKElementPath._CheckHasBlock( e ) )
|
||||||
|
eBlock = e ;
|
||||||
|
else
|
||||||
|
eBlockLimit = e ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
aElements.push( e ) ;
|
||||||
|
|
||||||
|
if ( sElementName == 'body' )
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
e = e.parentNode ;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.Block = eBlock ;
|
||||||
|
this.BlockLimit = eBlockLimit ;
|
||||||
|
this.Elements = aElements ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if an element contains any block element.
|
||||||
|
*/
|
||||||
|
FCKElementPath._CheckHasBlock = function( element )
|
||||||
|
{
|
||||||
|
var childNodes = element.childNodes ;
|
||||||
|
|
||||||
|
for ( var i = 0, count = childNodes.length ; i < count ; i++ )
|
||||||
|
{
|
||||||
|
var child = childNodes[i] ;
|
||||||
|
|
||||||
|
if ( child.nodeType == 1 && FCKListsLib.BlockElements[ child.nodeName.toLowerCase() ] )
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false ;
|
||||||
|
}
|
688
fckeditor/editor/_source/classes/fckenterkey.js
Normal file
688
fckeditor/editor/_source/classes/fckenterkey.js
Normal file
@ -0,0 +1,688 @@
|
|||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* Controls the [Enter] keystroke behavior in a document.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Constructor.
|
||||||
|
* @targetDocument : the target document.
|
||||||
|
* @enterMode : the behavior for the <Enter> keystroke.
|
||||||
|
* May be "p", "div", "br". Default is "p".
|
||||||
|
* @shiftEnterMode : the behavior for the <Shift>+<Enter> keystroke.
|
||||||
|
* May be "p", "div", "br". Defaults to "br".
|
||||||
|
*/
|
||||||
|
var FCKEnterKey = function( targetWindow, enterMode, shiftEnterMode, tabSpaces )
|
||||||
|
{
|
||||||
|
this.Window = targetWindow ;
|
||||||
|
this.EnterMode = enterMode || 'p' ;
|
||||||
|
this.ShiftEnterMode = shiftEnterMode || 'br' ;
|
||||||
|
|
||||||
|
// Setup the Keystroke Handler.
|
||||||
|
var oKeystrokeHandler = new FCKKeystrokeHandler( false ) ;
|
||||||
|
oKeystrokeHandler._EnterKey = this ;
|
||||||
|
oKeystrokeHandler.OnKeystroke = FCKEnterKey_OnKeystroke ;
|
||||||
|
|
||||||
|
oKeystrokeHandler.SetKeystrokes( [
|
||||||
|
[ 13 , 'Enter' ],
|
||||||
|
[ SHIFT + 13, 'ShiftEnter' ],
|
||||||
|
[ 8 , 'Backspace' ],
|
||||||
|
[ CTRL + 8 , 'CtrlBackspace' ],
|
||||||
|
[ 46 , 'Delete' ]
|
||||||
|
] ) ;
|
||||||
|
|
||||||
|
this.TabText = '' ;
|
||||||
|
|
||||||
|
// Safari by default inserts 4 spaces on TAB, while others make the editor
|
||||||
|
// loose focus. So, we need to handle it here to not include those spaces.
|
||||||
|
if ( tabSpaces > 0 || FCKBrowserInfo.IsSafari )
|
||||||
|
{
|
||||||
|
while ( tabSpaces-- )
|
||||||
|
this.TabText += '\xa0' ;
|
||||||
|
|
||||||
|
oKeystrokeHandler.SetKeystrokes( [ 9, 'Tab' ] );
|
||||||
|
}
|
||||||
|
|
||||||
|
oKeystrokeHandler.AttachToElement( targetWindow.document ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function FCKEnterKey_OnKeystroke( keyCombination, keystrokeValue )
|
||||||
|
{
|
||||||
|
var oEnterKey = this._EnterKey ;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
switch ( keystrokeValue )
|
||||||
|
{
|
||||||
|
case 'Enter' :
|
||||||
|
return oEnterKey.DoEnter() ;
|
||||||
|
break ;
|
||||||
|
case 'ShiftEnter' :
|
||||||
|
return oEnterKey.DoShiftEnter() ;
|
||||||
|
break ;
|
||||||
|
case 'Backspace' :
|
||||||
|
return oEnterKey.DoBackspace() ;
|
||||||
|
break ;
|
||||||
|
case 'Delete' :
|
||||||
|
return oEnterKey.DoDelete() ;
|
||||||
|
break ;
|
||||||
|
case 'Tab' :
|
||||||
|
return oEnterKey.DoTab() ;
|
||||||
|
break ;
|
||||||
|
case 'CtrlBackspace' :
|
||||||
|
return oEnterKey.DoCtrlBackspace() ;
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (e)
|
||||||
|
{
|
||||||
|
// If for any reason we are not able to handle it, go
|
||||||
|
// ahead with the browser default behavior.
|
||||||
|
}
|
||||||
|
|
||||||
|
return false ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Executes the <Enter> key behavior.
|
||||||
|
*/
|
||||||
|
FCKEnterKey.prototype.DoEnter = function( mode, hasShift )
|
||||||
|
{
|
||||||
|
// Save an undo snapshot before doing anything
|
||||||
|
FCKUndo.SaveUndoStep() ;
|
||||||
|
|
||||||
|
this._HasShift = ( hasShift === true ) ;
|
||||||
|
|
||||||
|
var parentElement = FCKSelection.GetParentElement() ;
|
||||||
|
var parentPath = new FCKElementPath( parentElement ) ;
|
||||||
|
var sMode = mode || this.EnterMode ;
|
||||||
|
|
||||||
|
if ( sMode == 'br' || parentPath.Block && parentPath.Block.tagName.toLowerCase() == 'pre' )
|
||||||
|
return this._ExecuteEnterBr() ;
|
||||||
|
else
|
||||||
|
return this._ExecuteEnterBlock( sMode ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Executes the <Shift>+<Enter> key behavior.
|
||||||
|
*/
|
||||||
|
FCKEnterKey.prototype.DoShiftEnter = function()
|
||||||
|
{
|
||||||
|
return this.DoEnter( this.ShiftEnterMode, true ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Executes the <Backspace> key behavior.
|
||||||
|
*/
|
||||||
|
FCKEnterKey.prototype.DoBackspace = function()
|
||||||
|
{
|
||||||
|
var bCustom = false ;
|
||||||
|
|
||||||
|
// Get the current selection.
|
||||||
|
var oRange = new FCKDomRange( this.Window ) ;
|
||||||
|
oRange.MoveToSelection() ;
|
||||||
|
|
||||||
|
// Kludge for #247
|
||||||
|
if ( FCKBrowserInfo.IsIE && this._CheckIsAllContentsIncluded( oRange, this.Window.document.body ) )
|
||||||
|
{
|
||||||
|
this._FixIESelectAllBug( oRange ) ;
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
var isCollapsed = oRange.CheckIsCollapsed() ;
|
||||||
|
|
||||||
|
if ( !isCollapsed )
|
||||||
|
{
|
||||||
|
// Bug #327, Backspace with an img selection would activate the default action in IE.
|
||||||
|
// Let's override that with our logic here.
|
||||||
|
if ( FCKBrowserInfo.IsIE && this.Window.document.selection.type.toLowerCase() == "control" )
|
||||||
|
{
|
||||||
|
var controls = this.Window.document.selection.createRange() ;
|
||||||
|
for ( var i = controls.length - 1 ; i >= 0 ; i-- )
|
||||||
|
{
|
||||||
|
var el = controls.item( i ) ;
|
||||||
|
el.parentNode.removeChild( el ) ;
|
||||||
|
}
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// On IE, it is better for us handle the deletion if the caret is preceeded
|
||||||
|
// by a <br> (#1383).
|
||||||
|
if ( FCKBrowserInfo.IsIE )
|
||||||
|
{
|
||||||
|
var previousElement = FCKDomTools.GetPreviousSourceElement( oRange.StartNode, true ) ;
|
||||||
|
|
||||||
|
if ( previousElement && previousElement.nodeName.toLowerCase() == 'br' )
|
||||||
|
{
|
||||||
|
// Create a range that starts after the <br> and ends at the
|
||||||
|
// current range position.
|
||||||
|
var testRange = oRange.Clone() ;
|
||||||
|
testRange.SetStart( previousElement, 4 ) ;
|
||||||
|
|
||||||
|
// If that range is empty, we can proceed cleaning that <br> manually.
|
||||||
|
if ( testRange.CheckIsEmpty() )
|
||||||
|
{
|
||||||
|
previousElement.parentNode.removeChild( previousElement ) ;
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var oStartBlock = oRange.StartBlock ;
|
||||||
|
var oEndBlock = oRange.EndBlock ;
|
||||||
|
|
||||||
|
// The selection boundaries must be in the same "block limit" element
|
||||||
|
if ( oRange.StartBlockLimit == oRange.EndBlockLimit && oStartBlock && oEndBlock )
|
||||||
|
{
|
||||||
|
if ( !isCollapsed )
|
||||||
|
{
|
||||||
|
var bEndOfBlock = oRange.CheckEndOfBlock() ;
|
||||||
|
|
||||||
|
oRange.DeleteContents() ;
|
||||||
|
|
||||||
|
if ( oStartBlock != oEndBlock )
|
||||||
|
{
|
||||||
|
oRange.SetStart(oEndBlock,1) ;
|
||||||
|
oRange.SetEnd(oEndBlock,1) ;
|
||||||
|
|
||||||
|
// if ( bEndOfBlock )
|
||||||
|
// oEndBlock.parentNode.removeChild( oEndBlock ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
oRange.Select() ;
|
||||||
|
|
||||||
|
bCustom = ( oStartBlock == oEndBlock ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( oRange.CheckStartOfBlock() )
|
||||||
|
{
|
||||||
|
var oCurrentBlock = oRange.StartBlock ;
|
||||||
|
|
||||||
|
var ePrevious = FCKDomTools.GetPreviousSourceElement( oCurrentBlock, true, [ 'BODY', oRange.StartBlockLimit.nodeName ], ['UL','OL'] ) ;
|
||||||
|
|
||||||
|
bCustom = this._ExecuteBackspace( oRange, ePrevious, oCurrentBlock ) ;
|
||||||
|
}
|
||||||
|
else if ( FCKBrowserInfo.IsGeckoLike )
|
||||||
|
{
|
||||||
|
// Firefox and Opera (#1095) loose the selection when executing
|
||||||
|
// CheckStartOfBlock, so we must reselect.
|
||||||
|
oRange.Select() ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
oRange.Release() ;
|
||||||
|
return bCustom ;
|
||||||
|
}
|
||||||
|
|
||||||
|
FCKEnterKey.prototype.DoCtrlBackspace = function()
|
||||||
|
{
|
||||||
|
FCKUndo.SaveUndoStep() ;
|
||||||
|
var oRange = new FCKDomRange( this.Window ) ;
|
||||||
|
oRange.MoveToSelection() ;
|
||||||
|
if ( FCKBrowserInfo.IsIE && this._CheckIsAllContentsIncluded( oRange, this.Window.document.body ) )
|
||||||
|
{
|
||||||
|
this._FixIESelectAllBug( oRange ) ;
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
return false ;
|
||||||
|
}
|
||||||
|
|
||||||
|
FCKEnterKey.prototype._ExecuteBackspace = function( range, previous, currentBlock )
|
||||||
|
{
|
||||||
|
var bCustom = false ;
|
||||||
|
|
||||||
|
// We could be in a nested LI.
|
||||||
|
if ( !previous && currentBlock && currentBlock.nodeName.IEquals( 'LI' ) && currentBlock.parentNode.parentNode.nodeName.IEquals( 'LI' ) )
|
||||||
|
{
|
||||||
|
this._OutdentWithSelection( currentBlock, range ) ;
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( previous && previous.nodeName.IEquals( 'LI' ) )
|
||||||
|
{
|
||||||
|
var oNestedList = FCKDomTools.GetLastChild( previous, ['UL','OL'] ) ;
|
||||||
|
|
||||||
|
while ( oNestedList )
|
||||||
|
{
|
||||||
|
previous = FCKDomTools.GetLastChild( oNestedList, 'LI' ) ;
|
||||||
|
oNestedList = FCKDomTools.GetLastChild( previous, ['UL','OL'] ) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( previous && currentBlock )
|
||||||
|
{
|
||||||
|
// If we are in a LI, and the previous block is not an LI, we must outdent it.
|
||||||
|
if ( currentBlock.nodeName.IEquals( 'LI' ) && !previous.nodeName.IEquals( 'LI' ) )
|
||||||
|
{
|
||||||
|
this._OutdentWithSelection( currentBlock, range ) ;
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Take a reference to the parent for post processing cleanup.
|
||||||
|
var oCurrentParent = currentBlock.parentNode ;
|
||||||
|
|
||||||
|
var sPreviousName = previous.nodeName.toLowerCase() ;
|
||||||
|
if ( FCKListsLib.EmptyElements[ sPreviousName ] != null || sPreviousName == 'table' )
|
||||||
|
{
|
||||||
|
FCKDomTools.RemoveNode( previous ) ;
|
||||||
|
bCustom = true ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Remove the current block.
|
||||||
|
FCKDomTools.RemoveNode( currentBlock ) ;
|
||||||
|
|
||||||
|
// Remove any empty tag left by the block removal.
|
||||||
|
while ( oCurrentParent.innerHTML.Trim().length == 0 )
|
||||||
|
{
|
||||||
|
var oParent = oCurrentParent.parentNode ;
|
||||||
|
oParent.removeChild( oCurrentParent ) ;
|
||||||
|
oCurrentParent = oParent ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cleanup the previous and the current elements.
|
||||||
|
FCKDomTools.LTrimNode( currentBlock ) ;
|
||||||
|
FCKDomTools.RTrimNode( previous ) ;
|
||||||
|
|
||||||
|
// Append a space to the previous.
|
||||||
|
// Maybe it is not always desirable...
|
||||||
|
// previous.appendChild( this.Window.document.createTextNode( ' ' ) ) ;
|
||||||
|
|
||||||
|
// Set the range to the end of the previous element and bookmark it.
|
||||||
|
range.SetStart( previous, 2, true ) ;
|
||||||
|
range.Collapse( true ) ;
|
||||||
|
var oBookmark = range.CreateBookmark( true ) ;
|
||||||
|
|
||||||
|
// Move the contents of the block to the previous element and delete it.
|
||||||
|
// But for some block types (e.g. table), moving the children to the previous block makes no sense.
|
||||||
|
// So a check is needed. (See #1081)
|
||||||
|
if ( ! currentBlock.tagName.IEquals( [ 'TABLE' ] ) )
|
||||||
|
FCKDomTools.MoveChildren( currentBlock, previous ) ;
|
||||||
|
|
||||||
|
// Place the selection at the bookmark.
|
||||||
|
range.SelectBookmark( oBookmark ) ;
|
||||||
|
|
||||||
|
bCustom = true ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return bCustom ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Executes the <Delete> key behavior.
|
||||||
|
*/
|
||||||
|
FCKEnterKey.prototype.DoDelete = function()
|
||||||
|
{
|
||||||
|
// Save an undo snapshot before doing anything
|
||||||
|
// This is to conform with the behavior seen in MS Word
|
||||||
|
FCKUndo.SaveUndoStep() ;
|
||||||
|
|
||||||
|
// The <Delete> has the same effect as the <Backspace>, so we have the same
|
||||||
|
// results if we just move to the next block and apply the same <Backspace> logic.
|
||||||
|
|
||||||
|
var bCustom = false ;
|
||||||
|
|
||||||
|
// Get the current selection.
|
||||||
|
var oRange = new FCKDomRange( this.Window ) ;
|
||||||
|
oRange.MoveToSelection() ;
|
||||||
|
|
||||||
|
// Kludge for #247
|
||||||
|
if ( FCKBrowserInfo.IsIE && this._CheckIsAllContentsIncluded( oRange, this.Window.document.body ) )
|
||||||
|
{
|
||||||
|
this._FixIESelectAllBug( oRange ) ;
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// There is just one special case for collapsed selections at the end of a block.
|
||||||
|
if ( oRange.CheckIsCollapsed() && oRange.CheckEndOfBlock( FCKBrowserInfo.IsGeckoLike ) )
|
||||||
|
{
|
||||||
|
var oCurrentBlock = oRange.StartBlock ;
|
||||||
|
var eCurrentCell = FCKTools.GetElementAscensor( oCurrentBlock, 'td' );
|
||||||
|
|
||||||
|
var eNext = FCKDomTools.GetNextSourceElement( oCurrentBlock, true, [ oRange.StartBlockLimit.nodeName ],
|
||||||
|
['UL','OL','TR'], true ) ;
|
||||||
|
|
||||||
|
// Bug #1323 : if we're in a table cell, and the next node belongs to a different cell, then don't
|
||||||
|
// delete anything.
|
||||||
|
if ( eCurrentCell )
|
||||||
|
{
|
||||||
|
var eNextCell = FCKTools.GetElementAscensor( eNext, 'td' );
|
||||||
|
if ( eNextCell != eCurrentCell )
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
bCustom = this._ExecuteBackspace( oRange, oCurrentBlock, eNext ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
oRange.Release() ;
|
||||||
|
return bCustom ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Executes the <Tab> key behavior.
|
||||||
|
*/
|
||||||
|
FCKEnterKey.prototype.DoTab = function()
|
||||||
|
{
|
||||||
|
var oRange = new FCKDomRange( this.Window );
|
||||||
|
oRange.MoveToSelection() ;
|
||||||
|
|
||||||
|
// If the user pressed <tab> inside a table, we should give him the default behavior ( moving between cells )
|
||||||
|
// instead of giving him more non-breaking spaces. (Bug #973)
|
||||||
|
var node = oRange._Range.startContainer ;
|
||||||
|
while ( node )
|
||||||
|
{
|
||||||
|
if ( node.nodeType == 1 )
|
||||||
|
{
|
||||||
|
var tagName = node.tagName.toLowerCase() ;
|
||||||
|
if ( tagName == "tr" || tagName == "td" || tagName == "th" || tagName == "tbody" || tagName == "table" )
|
||||||
|
return false ;
|
||||||
|
else
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
node = node.parentNode ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( this.TabText )
|
||||||
|
{
|
||||||
|
oRange.DeleteContents() ;
|
||||||
|
oRange.InsertNode( this.Window.document.createTextNode( this.TabText ) ) ;
|
||||||
|
oRange.Collapse( false ) ;
|
||||||
|
oRange.Select() ;
|
||||||
|
}
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
FCKEnterKey.prototype._ExecuteEnterBlock = function( blockTag, range )
|
||||||
|
{
|
||||||
|
// Get the current selection.
|
||||||
|
var oRange = range || new FCKDomRange( this.Window ) ;
|
||||||
|
|
||||||
|
var oSplitInfo = oRange.SplitBlock( blockTag ) ;
|
||||||
|
|
||||||
|
if ( oSplitInfo )
|
||||||
|
{
|
||||||
|
// Get the current blocks.
|
||||||
|
var ePreviousBlock = oSplitInfo.PreviousBlock ;
|
||||||
|
var eNextBlock = oSplitInfo.NextBlock ;
|
||||||
|
|
||||||
|
var bIsStartOfBlock = oSplitInfo.WasStartOfBlock ;
|
||||||
|
var bIsEndOfBlock = oSplitInfo.WasEndOfBlock ;
|
||||||
|
|
||||||
|
// If there is one block under a list item, modify the split so that the list item gets split as well. (Bug #1647)
|
||||||
|
if ( eNextBlock )
|
||||||
|
{
|
||||||
|
if ( eNextBlock.parentNode.nodeName.IEquals( 'li' ) )
|
||||||
|
{
|
||||||
|
FCKDomTools.BreakParent( eNextBlock, eNextBlock.parentNode ) ;
|
||||||
|
FCKDomTools.MoveNode( eNextBlock, eNextBlock.nextSibling, true ) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( ePreviousBlock && ePreviousBlock.parentNode.nodeName.IEquals( 'li' ) )
|
||||||
|
{
|
||||||
|
FCKDomTools.BreakParent( ePreviousBlock, ePreviousBlock.parentNode ) ;
|
||||||
|
oRange.MoveToElementEditStart( ePreviousBlock.nextSibling );
|
||||||
|
FCKDomTools.MoveNode( ePreviousBlock, ePreviousBlock.previousSibling ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we have both the previous and next blocks, it means that the
|
||||||
|
// boundaries were on separated blocks, or none of them where on the
|
||||||
|
// block limits (start/end).
|
||||||
|
if ( !bIsStartOfBlock && !bIsEndOfBlock )
|
||||||
|
{
|
||||||
|
// If the next block is an <li> with another list tree as the first child
|
||||||
|
// We'll need to append a placeholder or the list item wouldn't be editable. (Bug #1420)
|
||||||
|
if ( eNextBlock.nodeName.IEquals( 'li' ) && eNextBlock.firstChild
|
||||||
|
&& eNextBlock.firstChild.nodeName.IEquals( ['ul', 'ol'] ) )
|
||||||
|
eNextBlock.insertBefore( FCKTools.GetElementDocument( eNextBlock ).createTextNode( '\xa0' ), eNextBlock.firstChild ) ;
|
||||||
|
// Move the selection to the end block.
|
||||||
|
if ( eNextBlock )
|
||||||
|
oRange.MoveToElementEditStart( eNextBlock ) ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( bIsStartOfBlock && bIsEndOfBlock && ePreviousBlock.tagName.toUpperCase() == 'LI' )
|
||||||
|
{
|
||||||
|
oRange.MoveToElementStart( ePreviousBlock ) ;
|
||||||
|
this._OutdentWithSelection( ePreviousBlock, oRange ) ;
|
||||||
|
oRange.Release() ;
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
var eNewBlock ;
|
||||||
|
|
||||||
|
if ( ePreviousBlock )
|
||||||
|
{
|
||||||
|
var sPreviousBlockTag = ePreviousBlock.tagName.toUpperCase() ;
|
||||||
|
|
||||||
|
// If is a header tag, or we are in a Shift+Enter (#77),
|
||||||
|
// create a new block element (later in the code).
|
||||||
|
if ( !this._HasShift && !(/^H[1-6]$/).test( sPreviousBlockTag ) )
|
||||||
|
{
|
||||||
|
// Otherwise, duplicate the previous block.
|
||||||
|
eNewBlock = FCKDomTools.CloneElement( ePreviousBlock ) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( eNextBlock )
|
||||||
|
eNewBlock = FCKDomTools.CloneElement( eNextBlock ) ;
|
||||||
|
|
||||||
|
if ( !eNewBlock )
|
||||||
|
eNewBlock = this.Window.document.createElement( blockTag ) ;
|
||||||
|
|
||||||
|
// Recreate the inline elements tree, which was available
|
||||||
|
// before the hitting enter, so the same styles will be
|
||||||
|
// available in the new block.
|
||||||
|
var elementPath = oSplitInfo.ElementPath ;
|
||||||
|
if ( elementPath )
|
||||||
|
{
|
||||||
|
for ( var i = 0, len = elementPath.Elements.length ; i < len ; i++ )
|
||||||
|
{
|
||||||
|
var element = elementPath.Elements[i] ;
|
||||||
|
|
||||||
|
if ( element == elementPath.Block || element == elementPath.BlockLimit )
|
||||||
|
break ;
|
||||||
|
|
||||||
|
if ( FCKListsLib.InlineChildReqElements[ element.nodeName.toLowerCase() ] )
|
||||||
|
{
|
||||||
|
element = FCKDomTools.CloneElement( element ) ;
|
||||||
|
FCKDomTools.MoveChildren( eNewBlock, element ) ;
|
||||||
|
eNewBlock.appendChild( element ) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( FCKBrowserInfo.IsGeckoLike )
|
||||||
|
FCKTools.AppendBogusBr( eNewBlock ) ;
|
||||||
|
|
||||||
|
oRange.InsertNode( eNewBlock ) ;
|
||||||
|
|
||||||
|
// This is tricky, but to make the new block visible correctly
|
||||||
|
// we must select it.
|
||||||
|
if ( FCKBrowserInfo.IsIE )
|
||||||
|
{
|
||||||
|
// Move the selection to the new block.
|
||||||
|
oRange.MoveToElementEditStart( eNewBlock ) ;
|
||||||
|
oRange.Select() ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Move the selection to the new block.
|
||||||
|
oRange.MoveToElementEditStart( bIsStartOfBlock && !bIsEndOfBlock ? eNextBlock : eNewBlock ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( FCKBrowserInfo.IsGeckoLike )
|
||||||
|
FCKDomTools.ScrollIntoView( eNextBlock || eNewBlock, false ) ;
|
||||||
|
|
||||||
|
oRange.Select() ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Release the resources used by the range.
|
||||||
|
oRange.Release() ;
|
||||||
|
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
FCKEnterKey.prototype._ExecuteEnterBr = function( blockTag )
|
||||||
|
{
|
||||||
|
// Get the current selection.
|
||||||
|
var oRange = new FCKDomRange( this.Window ) ;
|
||||||
|
oRange.MoveToSelection() ;
|
||||||
|
|
||||||
|
// The selection boundaries must be in the same "block limit" element.
|
||||||
|
if ( oRange.StartBlockLimit == oRange.EndBlockLimit )
|
||||||
|
{
|
||||||
|
oRange.DeleteContents() ;
|
||||||
|
|
||||||
|
// Get the new selection (it is collapsed at this point).
|
||||||
|
oRange.MoveToSelection() ;
|
||||||
|
|
||||||
|
var bIsStartOfBlock = oRange.CheckStartOfBlock() ;
|
||||||
|
var bIsEndOfBlock = oRange.CheckEndOfBlock() ;
|
||||||
|
|
||||||
|
var sStartBlockTag = oRange.StartBlock ? oRange.StartBlock.tagName.toUpperCase() : '' ;
|
||||||
|
|
||||||
|
var bHasShift = this._HasShift ;
|
||||||
|
var bIsPre = false ;
|
||||||
|
|
||||||
|
if ( !bHasShift && sStartBlockTag == 'LI' )
|
||||||
|
return this._ExecuteEnterBlock( null, oRange ) ;
|
||||||
|
|
||||||
|
// If we are at the end of a header block.
|
||||||
|
if ( !bHasShift && bIsEndOfBlock && (/^H[1-6]$/).test( sStartBlockTag ) )
|
||||||
|
{
|
||||||
|
// Insert a BR after the current paragraph.
|
||||||
|
FCKDomTools.InsertAfterNode( oRange.StartBlock, this.Window.document.createElement( 'br' ) ) ;
|
||||||
|
|
||||||
|
// The space is required by Gecko only to make the cursor blink.
|
||||||
|
if ( FCKBrowserInfo.IsGecko )
|
||||||
|
FCKDomTools.InsertAfterNode( oRange.StartBlock, this.Window.document.createTextNode( '' ) ) ;
|
||||||
|
|
||||||
|
// IE and Gecko have different behaviors regarding the position.
|
||||||
|
oRange.SetStart( oRange.StartBlock.nextSibling, FCKBrowserInfo.IsIE ? 3 : 1 ) ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var eLineBreak ;
|
||||||
|
bIsPre = sStartBlockTag.IEquals( 'pre' ) ;
|
||||||
|
if ( bIsPre )
|
||||||
|
eLineBreak = this.Window.document.createTextNode( FCKBrowserInfo.IsIE ? '\r' : '\n' ) ;
|
||||||
|
else
|
||||||
|
eLineBreak = this.Window.document.createElement( 'br' ) ;
|
||||||
|
|
||||||
|
oRange.InsertNode( eLineBreak ) ;
|
||||||
|
|
||||||
|
// The space is required by Gecko only to make the cursor blink.
|
||||||
|
if ( FCKBrowserInfo.IsGecko )
|
||||||
|
FCKDomTools.InsertAfterNode( eLineBreak, this.Window.document.createTextNode( '' ) ) ;
|
||||||
|
|
||||||
|
// If we are at the end of a block, we must be sure the bogus node is available in that block.
|
||||||
|
if ( bIsEndOfBlock && FCKBrowserInfo.IsGeckoLike )
|
||||||
|
FCKTools.AppendBogusBr( eLineBreak.parentNode ) ;
|
||||||
|
|
||||||
|
if ( FCKBrowserInfo.IsIE )
|
||||||
|
oRange.SetStart( eLineBreak, 4 ) ;
|
||||||
|
else
|
||||||
|
oRange.SetStart( eLineBreak.nextSibling, 1 ) ;
|
||||||
|
|
||||||
|
if ( ! FCKBrowserInfo.IsIE )
|
||||||
|
{
|
||||||
|
var dummy = null ;
|
||||||
|
if ( FCKBrowserInfo.IsOpera )
|
||||||
|
dummy = this.Window.document.createElement( 'span' ) ;
|
||||||
|
else
|
||||||
|
dummy = this.Window.document.createElement( 'br' ) ;
|
||||||
|
|
||||||
|
eLineBreak.parentNode.insertBefore( dummy, eLineBreak.nextSibling ) ;
|
||||||
|
|
||||||
|
FCKDomTools.ScrollIntoView( dummy, false ) ;
|
||||||
|
|
||||||
|
dummy.parentNode.removeChild( dummy ) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// This collapse guarantees the cursor will be blinking.
|
||||||
|
oRange.Collapse( true ) ;
|
||||||
|
|
||||||
|
oRange.Select( bIsPre ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Release the resources used by the range.
|
||||||
|
oRange.Release() ;
|
||||||
|
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Outdents a LI, maintaining the selection defined on a range.
|
||||||
|
FCKEnterKey.prototype._OutdentWithSelection = function( li, range )
|
||||||
|
{
|
||||||
|
var oBookmark = range.CreateBookmark() ;
|
||||||
|
|
||||||
|
FCKListHandler.OutdentListItem( li ) ;
|
||||||
|
|
||||||
|
range.MoveToBookmark( oBookmark ) ;
|
||||||
|
range.Select() ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Is all the contents under a node included by a range?
|
||||||
|
FCKEnterKey.prototype._CheckIsAllContentsIncluded = function( range, node )
|
||||||
|
{
|
||||||
|
var startOk = false ;
|
||||||
|
var endOk = false ;
|
||||||
|
|
||||||
|
/*
|
||||||
|
FCKDebug.Output( 'sc='+range.StartContainer.nodeName+
|
||||||
|
',so='+range._Range.startOffset+
|
||||||
|
',ec='+range.EndContainer.nodeName+
|
||||||
|
',eo='+range._Range.endOffset ) ;
|
||||||
|
*/
|
||||||
|
if ( range.StartContainer == node || range.StartContainer == node.firstChild )
|
||||||
|
startOk = ( range._Range.startOffset == 0 ) ;
|
||||||
|
|
||||||
|
if ( range.EndContainer == node || range.EndContainer == node.lastChild )
|
||||||
|
{
|
||||||
|
var nodeLength = range.EndContainer.nodeType == 3 ? range.EndContainer.length : range.EndContainer.childNodes.length ;
|
||||||
|
endOk = ( range._Range.endOffset == nodeLength ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
return startOk && endOk ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Kludge for #247
|
||||||
|
FCKEnterKey.prototype._FixIESelectAllBug = function( range )
|
||||||
|
{
|
||||||
|
var doc = this.Window.document ;
|
||||||
|
doc.body.innerHTML = '' ;
|
||||||
|
var editBlock ;
|
||||||
|
if ( FCKConfig.EnterMode.IEquals( ['div', 'p'] ) )
|
||||||
|
{
|
||||||
|
editBlock = doc.createElement( FCKConfig.EnterMode ) ;
|
||||||
|
doc.body.appendChild( editBlock ) ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
editBlock = doc.body ;
|
||||||
|
|
||||||
|
range.MoveToNodeContents( editBlock ) ;
|
||||||
|
range.Collapse( true ) ;
|
||||||
|
range.Select() ;
|
||||||
|
range.Release() ;
|
||||||
|
}
|
71
fckeditor/editor/_source/classes/fckevents.js
Normal file
71
fckeditor/editor/_source/classes/fckevents.js
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
|
||||||
|
* Copyright (C) 2003-2008 Frederico Caldeira Knabben
|
||||||
|
*
|
||||||
|
* == BEGIN LICENSE ==
|
||||||
|
*
|
||||||
|
* Licensed under the terms of any of the following licenses at your
|
||||||
|
* choice:
|
||||||
|
*
|
||||||
|
* - GNU General Public License Version 2 or later (the "GPL")
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
*
|
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
|
||||||
|
* http://www.gnu.org/licenses/lgpl.html
|
||||||
|
*
|
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL")
|
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html
|
||||||
|
*
|
||||||
|
* == END LICENSE ==
|
||||||
|
*
|
||||||
|
* FCKEvents Class: used to handle events is a advanced way.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var FCKEvents = function( eventsOwner )
|
||||||
|
{
|
||||||
|
this.Owner = eventsOwner ;
|
||||||
|
this._RegisteredEvents = new Object() ;
|
||||||
|
}
|
||||||
|
|
||||||
|
FCKEvents.prototype.AttachEvent = function( eventName, functionPointer )
|
||||||
|
{
|
||||||
|
var aTargets ;
|
||||||
|
|
||||||
|
if ( !( aTargets = this._RegisteredEvents[ eventName ] ) )
|
||||||
|
this._RegisteredEvents[ eventName ] = [ functionPointer ] ;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Check that the event handler isn't already registered with the same listener
|
||||||
|
// It doesn't detect function pointers belonging to an object (at least in Gecko)
|
||||||
|
if ( aTargets.IndexOf( functionPointer ) == -1 )
|
||||||
|
aTargets.push( functionPointer ) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FCKEvents.prototype.FireEvent = function( eventName, params )
|
||||||
|
{
|
||||||
|
var bReturnValue = true ;
|
||||||
|
|
||||||
|
var oCalls = this._RegisteredEvents[ eventName ] ;
|
||||||
|
|
||||||
|
if ( oCalls )
|
||||||
|
{
|
||||||
|
for ( var i = 0 ; i < oCalls.length ; i++ )
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
bReturnValue = ( oCalls[ i ]( this.Owner, params ) && bReturnValue ) ;
|
||||||
|
}
|
||||||
|
catch(e)
|
||||||
|
{
|
||||||
|
// Ignore the following error. It may happen if pointing to a
|
||||||
|
// script not anymore available (#934):
|
||||||
|
// -2146823277 = Can't execute code from a freed script
|
||||||
|
if ( e.number != -2146823277 )
|
||||||
|
throw e ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return bReturnValue ;
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user