Add FCKEditor, uncompressed, no changes

This commit is contained in:
james 2008-08-18 16:20:55 +00:00
parent 251138248d
commit 4f5727a1de
561 changed files with 94023 additions and 0 deletions

View 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>

View 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.

Binary file not shown.

After

Width:  |  Height:  |  Size: 595 B

View 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>&nbsp;
</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">
&nbsp;<input id="chkCase" tabIndex="3" type="checkbox"><label for="chkCase" fckLang="DlgMyReplaceCaseChk">Match
case</label>
<br>
<div id="divWord" style="DISPLAY: none">
&nbsp;<input id="chkWord" tabIndex="4" type="checkbox"><label for="chkWord" fckLang="DlgMyReplaceWordChk">Match
whole word</label>
</div>
</td>
</tr>
</table>
</body>
</html>

View 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' ;

View 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' ;

View 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' ;

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 B

View 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">&nbsp;<input id="chkCase" tabIndex="3" type="checkbox"><label for="chkCase" fckLang="DlgMyReplaceCaseChk">Match
case</label>
<br>
&nbsp;<input id="chkWord" tabIndex="4" type="checkbox"><label for="chkWord" fckLang="DlgMyReplaceWordChk">Match
whole word</label>
</td>
</tr>
</table>
</body>
</html>

View 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 ) ;

View 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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 B

View 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 ../../ .

View 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 ../../

View 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>

Binary file not shown.

View File

@ -0,0 +1 @@
<application ID="fck"/>

View 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

View 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>

View 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:&nbsp;
</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>

View 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:&nbsp;
</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>

View 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:&nbsp;
</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>

View 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,"<","&lt;")
lcWert=STRTRAN(lcWert,">","&gt;") && ... if wanted remove/translate HTML Chars ...
? [<tr><th>]+lcVariable+[ =</th><td><pre>]+lcWert+[</pre></td></tr>]
ENDIF
NEXT
%>
</table>
</body>
</html>

View 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>

View 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:&nbsp;
</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>

View 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:&nbsp;
</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>

View 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:&nbsp;
</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>

View 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>

View 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">

View 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">

View 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:&nbsp;
</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">

View 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:&nbsp;
</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">

View 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:&nbsp;
</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">

View 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:&nbsp;
</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">

View 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:&nbsp;
</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">

View 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:&nbsp;
</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">

View 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>

View 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>

View 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 ) ;

View 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>

View 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' }
} ;

View 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;
}

View 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' }
} ;

View 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 ;

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

View 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>

View 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">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://www.fckeditor.net/"&gt;FCKeditor&lt;/a&gt;.&lt;/p&gt;</textarea>
</div>
<br />
<input type="submit" value="Submit" />
</form>
</body>
</html>

View 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:&nbsp;
</td>
<td>
<select id="cmbLanguages" onchange="ChangeLanguage(this.value);">
<option>&nbsp;</option>
</select>
</td>
<td>
&nbsp;<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>

View 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:&nbsp;
</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>

View 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:&nbsp;
</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>

View 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>

View 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 &lt;HTML&gt;
to &lt;/HTML&gt;).
</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>

View 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>
&nbsp;
</div>
<hr />
<div id="eMessage">
&nbsp;
</div>
<div>
&nbsp;
</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>

View 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>

View 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>

View 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>

View 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:&nbsp;
</td>
<td>
<select id="xEnter" onchange="ChangeMode();">
<option value="p" selected="selected">Create new &lt;P&gt;</option>
<option value="div">Create new &lt;DIV&gt;</option>
<option value="br">Break the line with a &lt;BR&gt;</option>
</select>
</td>
</tr>
<tr>
<td>
When [Shift] + [Enter] is pressed:&nbsp;
</td>
<td>
<select id="xShiftEnter" onchange="ChangeMode();">
<option value="p">Create new &lt;P&gt;</option>
<option value="div">Create new &lt;DIV&gt;</option>
<option value="br" selected="selected">Break the line with a &lt;BR&gt;</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>

View 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 &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://www.fckeditor.net/"&gt;FCKeditor&lt;/a&gt;.</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>

View 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 &lt;font&gt; and &lt;u&gt; 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>

View 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 &lt;b&gt;, &lt;i&gt;, and &lt;font&gt; are used in place of
&lt;strong&gt;, &lt;em&gt; 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>

View 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>

View 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>

View 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:&nbsp;
</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>

View 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:&nbsp;
</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>

View 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:&nbsp;
</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>

View 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>

View 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);
}

View 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:&nbsp;
</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);
}

View 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:&nbsp;
</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);
}

View 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:&nbsp;
</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);
}

View 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_

View 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>

View 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:&nbsp;
</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>

View 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:&nbsp;
</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>

View 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:&nbsp;
</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>

View 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>

View 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>
"""

View 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>
"""

View 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;
}

View 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
View 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
View 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 &amp;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 &lt;br&gt; 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 &lt;PRE&gt;
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 &lt;p&gt; 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>

File diff suppressed because it is too large Load Diff

View 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 ) ;
}

View 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 ;
}
} ;

View File

@ -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 ) ;
}
}

View 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 ) ) ;
}
} ;

View 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 = '&nbsp;' ;
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 = '&nbsp;' ;
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 ;
}
} ;

View 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 ) ;
}

View 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>&#65279;</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 = '&#65279;' ; // 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 &#65279;.
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 ) ;
}

View 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 &nbsp; 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 ;
}
} ;

View 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.
'&nbsp;' +
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 ;
}
}

View 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 ;
}

View 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() ;
}

View 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