diff --git a/phpgwapi/js/fckeditor/_documentation.html b/phpgwapi/js/fckeditor/_documentation.html new file mode 100644 index 0000000000..ec28555338 --- /dev/null +++ b/phpgwapi/js/fckeditor/_documentation.html @@ -0,0 +1,38 @@ + + + + + FCKeditor - Documentation + + + + +

+ FCKeditor Documentation

+

+ You can find the official documentation for FCKeditor online, at + http://wiki.fckeditor.net/.

+ + diff --git a/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/fckplugin.js b/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/fckplugin.js new file mode 100644 index 0000000000..1edee89c51 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/fckplugin.js @@ -0,0 +1,38 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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. \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/find.gif b/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/find.gif new file mode 100644 index 0000000000..81915f4f63 Binary files /dev/null and b/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/find.gif differ diff --git a/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/find.html b/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/find.html new file mode 100644 index 0000000000..7356e0b768 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/find.html @@ -0,0 +1,172 @@ + + + + + + + + + +
+ This is my Plugin! +
+ + + + + + + + + +
+   + + + + +
+   +
+ +
+ + diff --git a/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/lang/en.js b/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/lang/en.js new file mode 100644 index 0000000000..785ab9d8e7 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/lang/en.js @@ -0,0 +1,33 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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' ; \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/lang/fr.js b/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/lang/fr.js new file mode 100644 index 0000000000..553d2f6047 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/lang/fr.js @@ -0,0 +1,33 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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' ; \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/lang/it.js b/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/lang/it.js new file mode 100644 index 0000000000..0f4bfb469b --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/lang/it.js @@ -0,0 +1,33 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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' ; \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/replace.gif b/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/replace.gif new file mode 100644 index 0000000000..ac0d893700 Binary files /dev/null and b/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/replace.gif differ diff --git a/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/replace.html b/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/replace.html new file mode 100644 index 0000000000..76dade6128 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/_plugins/findreplace/replace.html @@ -0,0 +1,135 @@ + + + + + + + + + +
+ This is my Plugin! +
+ + + + + + + + + + + + + + +
+ + +
+ + +
  +
+   +
+ + diff --git a/phpgwapi/js/fckeditor/_samples/_plugins/samples/fckplugin.js b/phpgwapi/js/fckeditor/_samples/_plugins/samples/fckplugin.js new file mode 100644 index 0000000000..fee230a835 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/_plugins/samples/fckplugin.js @@ -0,0 +1,73 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 ) ; \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/_samples/afp/fck.afpa b/phpgwapi/js/fckeditor/_samples/afp/fck.afpa new file mode 100644 index 0000000000..e88a492fef --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/afp/fck.afpa @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/_samples/afp/fck.afpa.code b/phpgwapi/js/fckeditor/_samples/afp/fck.afpa.code new file mode 100644 index 0000000000..401ee905a9 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/afp/fck.afpa.code @@ -0,0 +1,166 @@ + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 = [
] + 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 + [] + +&& Render the configurations HIDDEN FIELD. + html = html + [] +CHR(13)+CHR(10) + +&& Render the EDITOR IFRAME. + html = html + [] + 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 + [] + ENDIF + + html = html + [
] + + 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 + diff --git a/phpgwapi/js/fckeditor/_samples/afp/sample01.afp b/phpgwapi/js/fckeditor/_samples/afp/sample01.afp new file mode 100644 index 0000000000..0a743a4547 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/afp/sample01.afp @@ -0,0 +1,56 @@ +<% + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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. + * +%> + + + + FCKeditor - AFP Sample 1 + + + + + +

FCKeditor - AFP - Sample 1

+ This sample displays a normal HTML form with an FCKeditor with full features enabled. +
+
+<% + + sBasePath="../../../fckeditor/" && Change this to your local path + + lcText=[

This is some sample text. You are using ] + lcText=lcText+[FCKeditor.] + + oFCKeditor = CREATEOBJECT("FCKeditor") + oFCKeditor.fckeditor("FCKeditor1") + oFCKeditor.BasePath = sBasePath + oFCKeditor.cValue = lcText + + ? oFCKeditor.Create() + +%> +
+ +

+ + diff --git a/phpgwapi/js/fckeditor/_samples/afp/sample02.afp b/phpgwapi/js/fckeditor/_samples/afp/sample02.afp new file mode 100644 index 0000000000..c38e571bfd --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/afp/sample02.afp @@ -0,0 +1,113 @@ +<% + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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) + * +%> + + + + FCKeditor - AFP Sample 2 + + + + + + + +

FCKeditor - AFP - Sample 2

+ This sample shows the editor in all its available languages. +
+ + + + + +
+ Select a language:  + + +
+
+
+<% + + 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=[

This is some sample text. You are using ] + lcText=lcText+[FCKeditor.] + + oFCKeditor.BasePath = sBasePath + oFCKeditor.cValue = lcText + + ? oFCKeditor.Create() + +%> +
+ +

+ + diff --git a/phpgwapi/js/fckeditor/_samples/afp/sample03.afp b/phpgwapi/js/fckeditor/_samples/afp/sample03.afp new file mode 100644 index 0000000000..fdf6a723c2 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/afp/sample03.afp @@ -0,0 +1,91 @@ +<% + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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) + * +%> + + + + FCKeditor - AFP Sample 3 + + + + + + + +

FCKeditor - AFP - Sample 3

+ This sample shows how to change the editor toolbar. +
+ + + + + +
+ Select the toolbar to load:  + + +
+
+
+<% + + 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=[

This is some sample text. You are using ] + lcText=lcText+[FCKeditor.] + + oFCKeditor.BasePath = sBasePath + oFCKeditor.cValue = lcText + + ? oFCKeditor.Create() + +%> +
+ +

+ + diff --git a/phpgwapi/js/fckeditor/_samples/afp/sample04.afp b/phpgwapi/js/fckeditor/_samples/afp/sample04.afp new file mode 100644 index 0000000000..ae5813b670 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/afp/sample04.afp @@ -0,0 +1,98 @@ +<% + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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) + * +%> + + + + FCKeditor - AFP Sample 4 + + + + + + + +

FCKeditor - AFP - Sample 4

+ This sample shows how to change the editor skin. +
+ + + + + +
+ Select the skin to load:  + + +
+
+
+<% + + 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=[

This is some sample text. You are using ] + lcText=lcText+[FCKeditor.] + + oFCKeditor.BasePath = sBasePath + oFCKeditor.cValue = lcText + + ? oFCKeditor.Create() + +%> +
+ +

+ + diff --git a/phpgwapi/js/fckeditor/_samples/afp/sampleposteddata.afp b/phpgwapi/js/fckeditor/_samples/afp/sampleposteddata.afp new file mode 100644 index 0000000000..c3464f6106 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/afp/sampleposteddata.afp @@ -0,0 +1,60 @@ +<% + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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. + * +%> + + + + FCKeditor - AFP - Samples - Posted Data + + + + + +

FCKeditor - Samples - Posted Data

+ This page lists all data posted by the form. +
+ + + + + +<% + lcForm=REQUEST.Form() + lcForm=STRTRAN(lcForm,"&",CHR(13)+CHR(10)) + + FOR lnLoop=1 TO MEMLINES(lcForm) + lcZeile=ALLTRIM(MLINE(lcForm,lnLoop)) + IF AT("=",lcZeile)>0 + lcVariable=UPPER(ALLTRIM(LEFT(lcZeile,AT("=",lcZeile)-1))) + lcWert=ALLTRIM(RIGHT(lcZeile,LEN(lcZeile)-AT("=",lcZeile))) + lcWert=Server.UrlDecode( lcWert ) + lcWert=STRTRAN(lcWert,"<","<") + lcWert=STRTRAN(lcWert,">",">") && ... if wanted remove/translate HTML Chars ... + + ? [] + ENDIF + NEXT +%> +
Field Name  Value
]+lcVariable+[ =]+lcWert+[
+ + diff --git a/phpgwapi/js/fckeditor/_samples/asp/sample01.asp b/phpgwapi/js/fckeditor/_samples/asp/sample01.asp new file mode 100644 index 0000000000..427b78373f --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/asp/sample01.asp @@ -0,0 +1,62 @@ +<%@ codepage="65001" language="VBScript" %> +<% Option Explicit %> + +<% ' You must set "Enable Parent Paths" on your web site in order this relative include to work. %> + + + + + FCKeditor - Sample + + + + + +

+ FCKeditor - ASP - Sample 1 +

+
+ This sample displays a normal HTML form with an FCKeditor with full features enabled. +
+
+
+ <% +' 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 = "

This is some sample text. You are using FCKeditor." +oFCKeditor.Create "FCKeditor1" + %> +
+ +

+ + diff --git a/phpgwapi/js/fckeditor/_samples/asp/sample02.asp b/phpgwapi/js/fckeditor/_samples/asp/sample02.asp new file mode 100644 index 0000000000..1a187ad831 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/asp/sample02.asp @@ -0,0 +1,108 @@ +<%@ CodePage=65001 Language="VBScript"%> +<% Option Explicit %> + +<% ' You must set "Enable Parent Paths" on your web site in order this relative include to work. %> + + + + + FCKeditor - Sample + + + + + + +

FCKeditor - ASP - Sample 2

+ This sample shows the editor in all its available languages. +
+ + + + + +
+ Select a language:  + + +
+
+
+<% +' 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 = "

This is some sample text. You are using FCKeditor." +oFCKeditor.Create "FCKeditor1" +%> +
+ +

+ + \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/_samples/asp/sample03.asp b/phpgwapi/js/fckeditor/_samples/asp/sample03.asp new file mode 100644 index 0000000000..3c83b60136 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/asp/sample03.asp @@ -0,0 +1,92 @@ +<%@ CodePage=65001 Language="VBScript"%> +<% Option Explicit %> + +<% ' You must set "Enable Parent Paths" on your web site in order this relative include to work. %> + + + + + FCKeditor - Sample + + + + + + +

FCKeditor - ASP - Sample 3

+ This sample shows how to change the editor toolbar. +
+ + + + + +
+ Select the toolbar to load:  + + +
+
+
+<% +' 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 = "

This is some sample text. You are using FCKeditor." +oFCKeditor.Create "FCKeditor1" +%> +
+ +

+ + \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/_samples/asp/sample04.asp b/phpgwapi/js/fckeditor/_samples/asp/sample04.asp new file mode 100644 index 0000000000..7d5b8172dc --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/asp/sample04.asp @@ -0,0 +1,98 @@ +<%@ CodePage=65001 Language="VBScript"%> +<% Option Explicit %> + +<% ' You must set "Enable Parent Paths" on your web site in order this relative include to work. %> + + + + + FCKeditor - Sample + + + + + + +

FCKeditor - ASP - Sample 4

+ This sample shows how to change the editor skin. +
+ + + + + +
+ Select the skin to load:  + + +
+
+
+<% +' 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 = "

This is some sample text. You are using FCKeditor." +oFCKeditor.Create "FCKeditor1" +%> +
+ +

+ + \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/_samples/asp/sampleposteddata.asp b/phpgwapi/js/fckeditor/_samples/asp/sampleposteddata.asp new file mode 100644 index 0000000000..e5ec0d7831 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/asp/sampleposteddata.asp @@ -0,0 +1,53 @@ +<%@ CodePage=65001 Language="VBScript"%> +<% Option Explicit %> + + + + + FCKeditor - Samples - Posted Data + + + + + +

FCKeditor - Samples - Posted Data

+ This page lists all data posted by the form. +
+ + + + + + <% + Dim sForm + For Each sForm in Request.Form + %> + + + + + <% Next %> +
Field Name  Value
<%=sForm%><%=Server.HTMLEncode( Request.Form(sForm) )%>
+ + diff --git a/phpgwapi/js/fckeditor/_samples/cfm/sample01.cfm b/phpgwapi/js/fckeditor/_samples/cfm/sample01.cfm new file mode 100644 index 0000000000..965b35f832 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/cfm/sample01.cfm @@ -0,0 +1,63 @@ + + + + + + + + FCKeditor - Sample + + + + + +

FCKeditor - ColdFusion - Sample 1

+ +This sample displays a normal HTML form with a FCKeditor with full features enabled. +
+ +
+ + + + + + + + +
+ +
+ + + +
+ \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/_samples/cfm/sample01_mx.cfm b/phpgwapi/js/fckeditor/_samples/cfm/sample01_mx.cfm new file mode 100644 index 0000000000..03fed885e1 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/cfm/sample01_mx.cfm @@ -0,0 +1,67 @@ + + + + + + + + FCKeditor - Sample + + + + + +

FCKeditor - ColdFusion Component (CFC) - Sample 1

+ +This sample displays a normal HTML form with a FCKeditor with full features enabled. +
+ +
+ + + +
This sample works only with a ColdFusion MX server and higher, because it uses some advantages of this version.
+ +
+ + + // 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 = '

This is some sample text. You are using FCKeditor.

' ; + fckEditor.basePath = basePath ; + fckEditor.Create() ; // create the editor. +
+ + +
+ +
+ + + +
+ \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/_samples/cfm/sample02.cfm b/phpgwapi/js/fckeditor/_samples/cfm/sample02.cfm new file mode 100644 index 0000000000..192ef4adae --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/cfm/sample02.cfm @@ -0,0 +1,110 @@ + + + + + + + + FCKeditor - Sample + + + + + + +

FCKeditor - ColdFusion - Sample 2

+This sample shows the editor in all its available languages. +
+ + + + + +
+ Select a language:  + + +
+
+
+ + + + + + + + + + + + + + + + +
+ + + + +
+ \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/_samples/cfm/sample02_mx.cfm b/phpgwapi/js/fckeditor/_samples/cfm/sample02_mx.cfm new file mode 100644 index 0000000000..c507d97706 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/cfm/sample02_mx.cfm @@ -0,0 +1,114 @@ + + + + + + + + FCKeditor - Sample + + + + + + +

FCKeditor - ColdFusion Component (CFC) - Sample 2

+This sample shows the editor in all its available languages. +
+
+ +
This sample works only with a ColdFusion MX server and higher, because it uses some advantages of this version.
+ +
+ + + + + + +
+ Select a language:  + + +
+
+
+ + + // 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 = '

This is some sample text. You are using FCKeditor.

' ; + 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. +
+ +
+ + + + +
+ \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/_samples/cfm/sample03.cfm b/phpgwapi/js/fckeditor/_samples/cfm/sample03.cfm new file mode 100644 index 0000000000..471f877763 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/cfm/sample03.cfm @@ -0,0 +1,95 @@ + + + + + + + FCKeditor - Sample + + + + + + +

FCKeditor - ColdFusion - Sample 3

+ This sample shows how to change the editor toolbar. +
+ + + + + +
+ Select the toolbar to load:  + + +
+
+
+ + + + + + + + + + + + + + +
+ + + + +
+ \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/_samples/cfm/sample03_mx.cfm b/phpgwapi/js/fckeditor/_samples/cfm/sample03_mx.cfm new file mode 100644 index 0000000000..fb7ad5c5c4 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/cfm/sample03_mx.cfm @@ -0,0 +1,95 @@ + + + + + + + FCKeditor - Sample + + + + + + +

FCKeditor - ColdFusion Component (CFC) - Sample 3

+ This sample shows how to change the editor toolbar. +
+
+ +
This sample works only with a ColdFusion MX server and higher, because it uses some advantages of this version.
+ +
+ + + + + + +
+ Select the toolbar to load:  + + +
+
+
+ + + // 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 = '

This is some sample text. You are using FCKeditor.

' ; + fckEditor.basePath = basePath ; + if ( isDefined( "URL.Toolbar" ) ) + { + fckEditor.ToolbarSet = HTMLEditFormat( URL.Toolbar ) ; + } + fckEditor.create() ; // create the editor. +
+ +
+ + + + +
+ \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/_samples/cfm/sample04.cfm b/phpgwapi/js/fckeditor/_samples/cfm/sample04.cfm new file mode 100644 index 0000000000..7aeaac11aa --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/cfm/sample04.cfm @@ -0,0 +1,100 @@ + + + + + + + FCKeditor - Sample + + + + + + +

FCKeditor - ColdFusion - Sample 4

+ This sample shows how to change the editor skin. +
+ + + + + +
+ Select the skin to load:  + + +
+
+
+ + + + + + + + + + + + + +
+ + + + +
+ \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/_samples/cfm/sample04_mx.cfm b/phpgwapi/js/fckeditor/_samples/cfm/sample04_mx.cfm new file mode 100644 index 0000000000..df0d1944e9 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/cfm/sample04_mx.cfm @@ -0,0 +1,101 @@ + + + + + + + FCKeditor - Sample + + + + + + +

FCKeditor - ColdFusion Component (CFC) - Sample 4

+ This sample shows how to change the editor skin. +
+
+ +
This sample works only with a ColdFusion MX server and higher, because it uses some advantages of this version.
+ +
+ + + + + + +
+ Select the skin to load:  + + +
+
+
+ + + // 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 = '

This is some sample text. You are using FCKeditor.

' ; + fckEditor.basePath = basePath ; + if ( isDefined( "URL.Skin" ) ) + { + fckEditor.config['SkinPath'] = basePath & 'editor/skins/' & HTMLEditFormat( URL.Skin ) & '/' ; + } + fckEditor.create() ; // create the editor. +
+ +
+ + + + +
+ \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/_samples/cfm/sampleposteddata.cfm b/phpgwapi/js/fckeditor/_samples/cfm/sampleposteddata.cfm new file mode 100644 index 0000000000..90e7421653 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/cfm/sampleposteddata.cfm @@ -0,0 +1,69 @@ + + + + + FCKeditor - Samples - Posted Data + + + + + +

FCKeditor - Samples - Posted Data

+ This page lists all data posted by the form. +
+ + + +
+ + + + + + + + + + + + + + + +
Dump of FORM Variables
FieldNames#FORM.fieldNames#
#key##HTMLEditFormat( evaluate( "FORM.#key#" ) )#
+
+
+ + +
+ + + + diff --git a/phpgwapi/js/fckeditor/_samples/default.html b/phpgwapi/js/fckeditor/_samples/default.html new file mode 100644 index 0000000000..a5335dd8ef --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/default.html @@ -0,0 +1,35 @@ + + + + + FCKeditor - Samples + + + + + + + + diff --git a/phpgwapi/js/fckeditor/_samples/html/sample01.html b/phpgwapi/js/fckeditor/_samples/html/sample01.html new file mode 100644 index 0000000000..e00c003c2f --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/html/sample01.html @@ -0,0 +1,59 @@ + + + + + FCKeditor - Sample + + + + + + +

+ FCKeditor - JavaScript - Sample 1 +

+
+ This sample displays a normal HTML form with an FCKeditor with full features enabled. +
+
+
+ +
+ +
+ + diff --git a/phpgwapi/js/fckeditor/_samples/html/sample02.html b/phpgwapi/js/fckeditor/_samples/html/sample02.html new file mode 100644 index 0000000000..edea413964 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/html/sample02.html @@ -0,0 +1,63 @@ + + + + + FCKeditor - Sample + + + + + + + +

+ FCKeditor - JavaScript - Sample 2

+
+ This sample displays a normal HTML form with an FCKeditor with full features enabled. + It uses the "ReplaceTextarea" command to create the editor. +
+
+
+
+ +
+
+ +
+ + diff --git a/phpgwapi/js/fckeditor/_samples/html/sample03.html b/phpgwapi/js/fckeditor/_samples/html/sample03.html new file mode 100644 index 0000000000..0096bc917a --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/html/sample03.html @@ -0,0 +1,140 @@ + + + + + FCKeditor - Sample + + + + + + + +

+ FCKeditor - JavaScript - Sample 3

+
+ This sample shows the editor in all its available languages. +
+
+ + + + + + +
+ Select a language:  + + + +   +
+
+
+ +
+ +
+ + diff --git a/phpgwapi/js/fckeditor/_samples/html/sample04.html b/phpgwapi/js/fckeditor/_samples/html/sample04.html new file mode 100644 index 0000000000..6af065b5bb --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/html/sample04.html @@ -0,0 +1,95 @@ + + + + + FCKeditor - Sample + + + + + + + +

+ FCKeditor - JavaScript - Sample 4

+
+ This sample shows how to change the editor toolbar. +
+
+ + + + + +
+ Select the toolbar to load:  + + +
+
+
+ +
+ +
+ + diff --git a/phpgwapi/js/fckeditor/_samples/html/sample05.html b/phpgwapi/js/fckeditor/_samples/html/sample05.html new file mode 100644 index 0000000000..d027bd1bfd --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/html/sample05.html @@ -0,0 +1,125 @@ + + + + + FCKeditor - Sample + + + + + + + +

+ FCKeditor - JavaScript - Sample 5

+
+ This sample shows how to change the editor skin. +
+
+ + + + + +
+ Select the skin to load:  + + +
+
+
+ +
+ +
+ + diff --git a/phpgwapi/js/fckeditor/_samples/html/sample06.config.js b/phpgwapi/js/fckeditor/_samples/html/sample06.config.js new file mode 100644 index 0000000000..e82c350404 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/html/sample06.config.js @@ -0,0 +1,49 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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,it,fr' ) ; +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', 'en,it,de,fr', sOtherPluginPath ) ; +FCKConfig.Plugins.Add( 'tablecommands', null, sOtherPluginPath ) ; +FCKConfig.Plugins.Add( 'simplecommands', null, sOtherPluginPath ) ; diff --git a/phpgwapi/js/fckeditor/_samples/html/sample06.html b/phpgwapi/js/fckeditor/_samples/html/sample06.html new file mode 100644 index 0000000000..df11a4c571 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/html/sample06.html @@ -0,0 +1,73 @@ + + + + + FCKeditor - Sample + + + + + + +

+ FCKeditor - JavaScript - 6

+
+ This sample shows some sample plugins implementations. Things to note:
+
    +
  • 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.
  • +
  • There is also another sample plugin that is available in the package: the "Placeholder" + command (use the yellow icon).
  • +
  • It also shows a custom context menu option when right cliking on images (insert + a smiley to test it).
  • +
+
+
+
+ +
+ +
+ + diff --git a/phpgwapi/js/fckeditor/_samples/html/sample07.html b/phpgwapi/js/fckeditor/_samples/html/sample07.html new file mode 100644 index 0000000000..1d9b6ee0de --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/html/sample07.html @@ -0,0 +1,59 @@ + + + + + FCKeditor - Sample + + + + + + +

+ FCKeditor - JavaScript - Sample 7

+
+ In this sample the user can edit the complete page contents and header (from <HTML> + to </HTML>). +
+
+
+ +
+ +
+ + diff --git a/phpgwapi/js/fckeditor/_samples/html/sample08.html b/phpgwapi/js/fckeditor/_samples/html/sample08.html new file mode 100644 index 0000000000..fefc7c5bfd --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/html/sample08.html @@ -0,0 +1,196 @@ + + + + + FCKeditor - Sample + + + + + + + +

+ FCKeditor - JavaScript - Sample 8 +

+
+ This sample shows how to use the FCKeditor JavaScript API to interact with the editor + at runtime. +
+
+
+ +
+ +
+
+   +
+
+
+   +
+
+   +
+ + + diff --git a/phpgwapi/js/fckeditor/_samples/html/sample09.html b/phpgwapi/js/fckeditor/_samples/html/sample09.html new file mode 100644 index 0000000000..47f72712fd --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/html/sample09.html @@ -0,0 +1,100 @@ + + + + + FCKeditor - Sample + + + + + + + +

+ FCKeditor - JavaScript - Sample 9

+
+ This sample shows FCKeditor in a more complex form with two different instances.
+ It also shows and interesting usage of the "OnFocus" and "OnBlur" events available + in the JavaScript API. +
+
+
+ Normal text field:
+ +
+
+ FCKeditor with Basic toolbar: + +
+ FCKeditor with Default toolbar: + +
+ +
+ + diff --git a/phpgwapi/js/fckeditor/_samples/html/sample10.html b/phpgwapi/js/fckeditor/_samples/html/sample10.html new file mode 100644 index 0000000000..fb67588741 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/html/sample10.html @@ -0,0 +1,79 @@ + + + + + FCKeditor - Sample + + + + + + +

+ FCKeditor - JavaScript - Sample 10

+
+ This sample shows a form with two FCKeditor instance. Both instances share the same + toolbar, available in the top. +
+
+
+
+
+ Normal text field:
+ +
+
+ FCKeditor 1: + +
+ FCKeditor 2: + +
+ +
+ + diff --git a/phpgwapi/js/fckeditor/_samples/html/sample11.html b/phpgwapi/js/fckeditor/_samples/html/sample11.html new file mode 100644 index 0000000000..3dc5323221 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/html/sample11.html @@ -0,0 +1,43 @@ + + + + + FCKeditor - Sample + + + + + +

+ FCKeditor - JavaScript - Sample 11

+
+ 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). +
+
+
+
+ + + diff --git a/phpgwapi/js/fckeditor/_samples/html/sample11_frame.html b/phpgwapi/js/fckeditor/_samples/html/sample11_frame.html new file mode 100644 index 0000000000..c56e7eff77 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/html/sample11_frame.html @@ -0,0 +1,69 @@ + + + + FCKeditor - Sample + + + + + + +
+ Normal text field:
+ +
+
+ FCKeditor 1: + +
+ FCKeditor 2: + +
+ +
+ + diff --git a/phpgwapi/js/fckeditor/_samples/html/sample12.html b/phpgwapi/js/fckeditor/_samples/html/sample12.html new file mode 100644 index 0000000000..83d59490a2 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/html/sample12.html @@ -0,0 +1,124 @@ + + + + + FCKeditor - Sample + + + + + + + +

+ FCKeditor - JavaScript - Sample 12

+
+ This sample shows the different ways to configure the [Enter] key behavior on FCKeditor. +
+
+ + + + + + + + + +
+ When [Enter] is pressed:  + + +
+ When [Shift] + [Enter] is pressed:  + + +
+
+
+ +
+ +
+ + diff --git a/phpgwapi/js/fckeditor/_samples/html/sample13.html b/phpgwapi/js/fckeditor/_samples/html/sample13.html new file mode 100644 index 0000000000..4cb3ae503d --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/html/sample13.html @@ -0,0 +1,148 @@ + + + + + FCKeditor - Sample + + + + + + + +

+ FCKeditor - JavaScript - Sample 13 +

+
+ 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. +
+
+
+
+ +
+
+ +
+ +
+ +
+ + diff --git a/phpgwapi/js/fckeditor/_samples/html/sample14.config.js b/phpgwapi/js/fckeditor/_samples/html/sample14.config.js new file mode 100644 index 0000000000..bfa499a7ae --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/html/sample14.config.js @@ -0,0 +1,121 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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/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' } + } ; diff --git a/phpgwapi/js/fckeditor/_samples/html/sample14.html b/phpgwapi/js/fckeditor/_samples/html/sample14.html new file mode 100644 index 0000000000..107538d6b0 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/html/sample14.html @@ -0,0 +1,66 @@ + + + + + FCKeditor - Sample + + + + + + +

+ FCKeditor - JavaScript - Sample 14 +

+
+ This sample shows FCKeditor configured to produce XHTML 1.1 compliant + HTML. Deprecated elements or attributes, like the <font> and <u> elements + or the "style" attribute, are avoided. +
+
+
+ +
+ +
+ + diff --git a/phpgwapi/js/fckeditor/_samples/html/sample14.styles.css b/phpgwapi/js/fckeditor/_samples/html/sample14.styles.css new file mode 100644 index 0000000000..5441989ca6 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/html/sample14.styles.css @@ -0,0 +1,228 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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; +} diff --git a/phpgwapi/js/fckeditor/_samples/html/sampleposteddata.asp b/phpgwapi/js/fckeditor/_samples/html/sampleposteddata.asp new file mode 100644 index 0000000000..fedc8d4066 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/html/sampleposteddata.asp @@ -0,0 +1,72 @@ + + + + + FCKeditor - Samples - Posted Data + + + + + +

+ FCKeditor - Samples - Posted Data

+
+ This page lists all data posted by the form. +
+
+ + + + + + <% For Each sForm in Request.Form %> + + + + + <% Next %> +
+ Field Name   + Value
+ + <%=sForm%> + + +
<%=ModifyForOutput( Request.Form(sForm) )%>
+
+ + +<% + +' This function is useful only for this sample page se whe can display the +' posted data accordingly. This processing is usually not done on real +' applications, where the posted data must be saved on a DB or file. In those +' cases, no processing must be done, and the data is saved as posted. +Function ModifyForOutput( value ) + + ModifyForOutput = Server.HTMLEncode( value ) + +End Function + +%> diff --git a/phpgwapi/js/fckeditor/_samples/html/sampleposteddata.html b/phpgwapi/js/fckeditor/_samples/html/sampleposteddata.html new file mode 100644 index 0000000000..db765ef788 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/html/sampleposteddata.html @@ -0,0 +1,80 @@ + + + + + FCKeditor - Samples - Posted Data + + + + + +

+ FCKeditor - Samples - Posted Data +

+
+ This page lists all data posted by the form. It uses the "QueryString" to search + for data submitted using the "GET" method, so it is limited to 2KB. +
+
+ + + + + + +
+ Field + Value
+ + diff --git a/phpgwapi/js/fckeditor/_samples/lasso/sample01.lasso b/phpgwapi/js/fckeditor/_samples/lasso/sample01.lasso new file mode 100644 index 0000000000..0c182b721e --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/lasso/sample01.lasso @@ -0,0 +1,55 @@ +[//lasso +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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. + */ +] + + + + FCKeditor - Sample + + + + + +

FCKeditor - Lasso - Sample 1

+ This sample displays a normal HTML form with an FCKeditor with full features + enabled. +
+
+[//lasso + include('../../fckeditor.lasso'); + var('basepath') = response_filepath->split('_samples')->get(1); + + var('myeditor') = fck_editor( + -instancename='FCKeditor1', + -basepath=$basepath, + -initialvalue='

This is some sample text. You are using FCKeditor.

' + ); + + $myeditor->create; +] +
+ +
+ + diff --git a/phpgwapi/js/fckeditor/_samples/lasso/sample02.lasso b/phpgwapi/js/fckeditor/_samples/lasso/sample02.lasso new file mode 100644 index 0000000000..70010a1864 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/lasso/sample02.lasso @@ -0,0 +1,109 @@ +[//lasso +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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. + */ +] + + + + FCKeditor - Sample + + + + + + +

FCKeditor - Lasso - Sample 2

+ This sample shows the editor in all its available languages. +
+ + + + + +
+ Select a language:  + + +
+
+
+[//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='

This is some sample text. You are using FCKeditor.

' + ); + + $myeditor->create; +] +
+ +
+ + diff --git a/phpgwapi/js/fckeditor/_samples/lasso/sample03.lasso b/phpgwapi/js/fckeditor/_samples/lasso/sample03.lasso new file mode 100644 index 0000000000..e7b63e4efc --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/lasso/sample03.lasso @@ -0,0 +1,87 @@ +[//lasso +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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. + */ +] + + + + FCKeditor - Sample + + + + + + +

FCKeditor - Lasso - Sample 3

+ This sample shows how to change the editor toolbar. +
+ + + + + +
+ Select the toolbar to load:  + + +
+
+
+[//lasso + include('../../fckeditor.lasso'); + var('basepath') = response_filepath->split('_samples')->get(1); + + var('myeditor') = fck_editor( + -instancename='FCKeditor1', + -basepath=$basepath, + -initialvalue='

This is some sample text. You are using FCKeditor.

' + ); + + if(action_param('Toolbar')); + $myeditor->toolbarset = action_param('Toolbar'); + /if; + + $myeditor->create; +] +
+ +
+ + diff --git a/phpgwapi/js/fckeditor/_samples/lasso/sample04.lasso b/phpgwapi/js/fckeditor/_samples/lasso/sample04.lasso new file mode 100644 index 0000000000..d8f0db0038 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/lasso/sample04.lasso @@ -0,0 +1,93 @@ +[//lasso +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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. + */ +] + + + + FCKeditor - Sample + + + + + + +

FCKeditor - Lasso - Sample 4

+ This sample shows how to change the editor skin. +
+ + + + + +
+ Select the skin to load:  + + +
+
+
+[//lasso + include('../../fckeditor.lasso'); + var('basepath') = response_filepath->split('_samples')->get(1); + + var('myeditor') = fck_editor( + -instancename='FCKeditor1', + -basepath=$basepath, + -initialvalue='

This is some sample text. You are using FCKeditor.

' + ); + + if(action_param('Skin')); + $myeditor->config = array('SkinPath' = $basepath + 'editor/skins/' + action_param('Skin') + '/'); + /if; + + $myeditor->create; +] +
+ +
+ + diff --git a/phpgwapi/js/fckeditor/_samples/lasso/sampleposteddata.lasso b/phpgwapi/js/fckeditor/_samples/lasso/sampleposteddata.lasso new file mode 100644 index 0000000000..bd9e1cda03 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/lasso/sampleposteddata.lasso @@ -0,0 +1,50 @@ +[//lasso +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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. + */ +] + + + + FCKeditor - Samples - Posted Data + + + + + +

FCKeditor - Samples - Posted Data

+ This page lists all data posted by the form. +
+ + + + + +[iterate(client_postparams, local('this'))] + + + + +[/iterate] +
Field Name  Value
[#this->first][#this->second]
+ + diff --git a/phpgwapi/js/fckeditor/_samples/perl/sample01.cgi b/phpgwapi/js/fckeditor/_samples/perl/sample01.cgi new file mode 100644 index 0000000000..6da091d868 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/perl/sample01.cgi @@ -0,0 +1,115 @@ +#!/usr/bin/env perl + +##### +# FCKeditor - The text editor for Internet - http://www.fckeditor.net +# Copyright (C) 2003-2007 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_"; + + + + FCKeditor - Sample + + + + + +

FCKeditor - Perl - Sample 1

+ This sample displays a normal HTML form with an FCKeditor with full features + enabled. +
+
+_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 = '

This is some sample text. You are using FCKeditor.

'; + &Create(); + + print <<"_HTML_TAG_"; +
+ +
+ + +_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'}; + } + } + return($dir); +} diff --git a/phpgwapi/js/fckeditor/_samples/perl/sample02.cgi b/phpgwapi/js/fckeditor/_samples/perl/sample02.cgi new file mode 100644 index 0000000000..441695e7cf --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/perl/sample02.cgi @@ -0,0 +1,180 @@ +#!/usr/bin/env perl + +##### +# FCKeditor - The text editor for Internet - http://www.fckeditor.net +# Copyright (C) 2003-2007 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_"; + + + + FCKeditor - Sample + + + + + + +

FCKeditor - Perl - Sample 2

+ This sample shows the editor in all its available languages. +
+ + + + + +
+ Select a language:  + + +
+
+
+_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 = '

This is some sample text. You are using FCKeditor.

' ; + &Create(); + + print <<"_HTML_TAG_"; +
+ +
+ + +_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'}; + } + } + return($dir); +} diff --git a/phpgwapi/js/fckeditor/_samples/perl/sample03.cgi b/phpgwapi/js/fckeditor/_samples/perl/sample03.cgi new file mode 100644 index 0000000000..6408f2cf09 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/perl/sample03.cgi @@ -0,0 +1,165 @@ +#!/usr/bin/env perl + +##### +# FCKeditor - The text editor for Internet - http://www.fckeditor.net +# Copyright (C) 2003-2007 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_"; + + + + FCKeditor - Sample + + + + + + +

FCKeditor - Perl - Sample 3

+ This sample shows how to change the editor toolbar. +
+ + + + + +
+ Select the toolbar to load:  + + +
+
+
+_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 = '

This is some sample text. You are using FCKeditor.

' ; + &Create(); + + print <<"_HTML_TAG_"; +
+ +
+ + +_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'}; + } + } + return($dir); +} diff --git a/phpgwapi/js/fckeditor/_samples/perl/sample04.cgi b/phpgwapi/js/fckeditor/_samples/perl/sample04.cgi new file mode 100644 index 0000000000..d73aaf1c44 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/perl/sample04.cgi @@ -0,0 +1,172 @@ +#!/usr/bin/env perl + +##### +# FCKeditor - The text editor for Internet - http://www.fckeditor.net +# Copyright (C) 2003-2007 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_"; + + + + FCKeditor - Sample + + + + + + +

FCKeditor - Perl - Sample 4

+ This sample shows how to change the editor skin. +
+ + + + + +
+ Select the skin to load:  + + +
+
+
+_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 = '

This is some sample text. You are using FCKeditor.

' ; + &Create() ; + + print <<"_HTML_TAG_"; +
+ +
+ + +_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'}; + } + } + return($dir); +} diff --git a/phpgwapi/js/fckeditor/_samples/perl/sampleposteddata.cgi b/phpgwapi/js/fckeditor/_samples/perl/sampleposteddata.cgi new file mode 100644 index 0000000000..6c1058b576 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/perl/sampleposteddata.cgi @@ -0,0 +1,105 @@ +#!/usr/bin/env perl + +##### +# FCKeditor - The text editor for Internet - http://www.fckeditor.net +# Copyright (C) 2003-2007 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_"; + + + + + FCKeditor - Samples - Posted Data + + + + + +

FCKeditor - Samples - Posted Data

+ This page lists all data posted by the form. +
+ + + + + +_HTML_TAG_ + + foreach $key (keys %FORM) { + $postedValue = &specialchar_cnv($FORM{$key}); + print <<"_HTML_TAG_"; + + + + +_HTML_TAG_ + } + print <<"_HTML_TAG_"; +
Field Name  Value
$key$postedValue
+ + +_HTML_TAG_ diff --git a/phpgwapi/js/fckeditor/_samples/php/sample01.php b/phpgwapi/js/fckeditor/_samples/php/sample01.php new file mode 100644 index 0000000000..528ac78499 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/php/sample01.php @@ -0,0 +1,57 @@ + + + + + FCKeditor - Sample + + + + + +

FCKeditor - PHP - Sample 1

+ This sample displays a normal HTML form with an FCKeditor with full features + enabled. +
+
+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 = '

This is some sample text. You are using FCKeditor.

' ; +$oFCKeditor->Create() ; +?> +
+ +
+ + \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/_samples/php/sample02.php b/phpgwapi/js/fckeditor/_samples/php/sample02.php new file mode 100644 index 0000000000..011daa6af2 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/php/sample02.php @@ -0,0 +1,108 @@ + + + + + FCKeditor - Sample + + + + + + +

FCKeditor - PHP - Sample 2

+ This sample shows the editor in all its available languages. +
+ + + + + +
+ Select a language:  + + +
+
+
+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 = '

This is some sample text. You are using FCKeditor.

' ; +$oFCKeditor->Create() ; +?>
+ +
+ + \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/_samples/php/sample03.php b/phpgwapi/js/fckeditor/_samples/php/sample03.php new file mode 100644 index 0000000000..9ce0409cf0 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/php/sample03.php @@ -0,0 +1,89 @@ + + + + + FCKeditor - Sample + + + + + + +

FCKeditor - PHP - Sample 3

+ This sample shows how to change the editor toolbar. +
+ + + + + +
+ Select the toolbar to load:  + + +
+
+
+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 = '

This is some sample text. You are using FCKeditor.

' ; +$oFCKeditor->Create() ; +?> +
+ +
+ + \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/_samples/php/sample04.php b/phpgwapi/js/fckeditor/_samples/php/sample04.php new file mode 100644 index 0000000000..b69f9fe883 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/php/sample04.php @@ -0,0 +1,95 @@ + + + + + FCKeditor - Sample + + + + + + +

FCKeditor - PHP - Sample 4

+ This sample shows how to change the editor skin. +
+ + + + + +
+ Select the skin to load:  + + +
+
+
+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 = '

This is some sample text. You are using FCKeditor.

' ; +$oFCKeditor->Create() ; +?> +
+ +
+ + \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/_samples/php/sampleposteddata.php b/phpgwapi/js/fckeditor/_samples/php/sampleposteddata.php new file mode 100644 index 0000000000..6cf39f67b2 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/php/sampleposteddata.php @@ -0,0 +1,66 @@ + + + + + FCKeditor - Samples - Posted Data + + + + + +

FCKeditor - Samples - Posted Data

+ This page lists all data posted by the form. +
+ + + + + + $value ) +{ + if ( get_magic_quotes_gpc() ) + $postedValue = htmlspecialchars( stripslashes( $value ) ) ; + else + $postedValue = htmlspecialchars( $value ) ; + +?> + + + + + +
Field Name  Value
+ + diff --git a/phpgwapi/js/fckeditor/_samples/py/sample01.py b/phpgwapi/js/fckeditor/_samples/py/sample01.py new file mode 100644 index 0000000000..b203d28f30 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/py/sample01.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python + +""" +FCKeditor - The text editor for Internet - http://www.fckeditor.net +Copyright (C) 2003-2007 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 """ + + + FCKeditor - Sample + + + + + +

FCKeditor - Python - Sample 1

+ This sample displays a normal HTML form with an FCKeditor with full features + enabled. +
+
+""" + +# 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 = """

This is some sample text. You are using FCKeditor.

""" + print oFCKeditor.Create() +except Exception, e: + print e +print """ +
+ +
+""" + +# For testing your environments +print "
" +for key in os.environ.keys(): + print "%s: %s
" % (key, os.environ.get(key, "")) +print "
" + +# Document footer +print """ + + +""" + + diff --git a/phpgwapi/js/fckeditor/_samples/py/sampleposteddata.py b/phpgwapi/js/fckeditor/_samples/py/sampleposteddata.py new file mode 100644 index 0000000000..a66185f1e3 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/py/sampleposteddata.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python + +""" +FCKeditor - The text editor for Internet - http://www.fckeditor.net +Copyright (C) 2003-2007 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 """ + + + FCKeditor - Samples - Posted Data + + + + + +""" + +# This is the real work +print """ +

FCKeditor - Samples - Posted Data

+ This page lists all data posted by the form. +
+ + + + + +""" +for key in form.keys(): + try: + value = form[key].value + print """ + + + + + """ % (key, value) + except Exception, e: + print e +print "
Field Name  Value
%s%s
" + +# For testing your environments +print "
" +for key in os.environ.keys(): + print "%s: %s
" % (key, os.environ.get(key, "")) +print "
" + +# Document footer +print """ + + +""" diff --git a/phpgwapi/js/fckeditor/_samples/sample.css b/phpgwapi/js/fckeditor/_samples/sample.css new file mode 100644 index 0000000000..8ec05f529b --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/sample.css @@ -0,0 +1,50 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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, input, select, textarea +{ + font-size: 12px; + font-family: Arial, Verdana, Sans-Serif; +} + +h1 +{ + font-weight: bold; + font-size: 180%; + margin-bottom: 10px; +} + +form +{ + margin: 0px 0px 0px 0px; + padding: 0px 0px 0px 0px; +} + +pre +{ + margin:0px; + padding:0px; + white-space: pre-wrap; /* css-3 */ + white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ + word-wrap: break-word; /* Internet Explorer 5.5+ */ +} \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/_samples/sampleslist.html b/phpgwapi/js/fckeditor/_samples/sampleslist.html new file mode 100644 index 0000000000..8a09868a38 --- /dev/null +++ b/phpgwapi/js/fckeditor/_samples/sampleslist.html @@ -0,0 +1,118 @@ + + + + + FCKeditor - Sample Selection + + + + + + + + + + +
+ Please select the sample you want to view: +
+ +
+ + diff --git a/phpgwapi/js/fckeditor/_upgrade.html b/phpgwapi/js/fckeditor/_upgrade.html new file mode 100644 index 0000000000..bf73f04f5f --- /dev/null +++ b/phpgwapi/js/fckeditor/_upgrade.html @@ -0,0 +1,38 @@ + + + + + FCKeditor - Upgrade + + + + +

+ FCKeditor Upgrade

+

+ Please check the following URL for notes regarding upgrade: + http://wiki.fckeditor.net/Developer%27s_Guide/Upgrade

+ + diff --git a/phpgwapi/js/fckeditor/_whatsnew.html b/phpgwapi/js/fckeditor/_whatsnew.html new file mode 100644 index 0000000000..f4ab24097d --- /dev/null +++ b/phpgwapi/js/fckeditor/_whatsnew.html @@ -0,0 +1,571 @@ + + + + + FCKeditor ChangeLog - What's New? + + + + +

+ FCKeditor ChangeLog - What's New?

+

+ Version 2.5

+

+ New Features and Improvements:

+
    +
  • The heading options have been moved to the top, in the default settings for the + Format combo.
  • +
+

+ Fixed Bugs:

+
    +
  • The focus is now correctly set when working on Safari.
  • +
  • [#1436] Nested + context menu panels are now correctly closed on Safari.
  • +
  • Empty anchors are now properly created on Safari.
  • +
  • [#1359] FCKeditor + will no longer produce the strange visual effect of creating a selected space and + then deleting it in Internet Explorer.
  • +
  • [#1399] Removed + the empty entry in the language selection box of sample03.html.
  • +
  • [#1400] Fixed + the issue where the style selection box in sample14.html is not context sensitive.
  • +
  • [#1401] Completed + Hebrew translation of the user interface.
  • +
  • [#1409] Completed + Finnish translation of the user interface.
  • +
  • [#1414] Fixed + the issue where entity code words written inside a <pre> block in Source mode + are not converted to the corresponding characters after switching back to editor + mode.
  • +
  • [#1418] Fixed + the issue where a detached toolbar would flicker when FCKeditor is being loaded.
  • +
  • [#1419] Fixed + the issue where pressing Delete in the middle of two lists would incorrectly move + contents after the lists to the character position.
  • +
  • [#1420] Fixed + the issue where empty list items can become collapsed and uneditable when it has + one of more indented list items directly under it.
  • +
  • [#1431] Fixed + the issue where pressing Enter in a <pre> block in Internet Explorer would + move the caret one space forward instead of sending it to the next line.
  • +
  • [#1472] Completed + Arabic translation of the user interface.
  • +
  • [#1474] Fixed + the issue where reloading a page containing FCKeditor may provoke JavaScript errors + in Internet Explorer.
  • +
  • [#1478] Fixed + the issue where parsing fckstyles.xml fails if the file contains no <style> + nodes.
  • +
  • [#1491] Fixed + the issue where FCKeditor causes the selection to include an "end of line" character + in list items even though the list item is empty.
  • +
  • [#1496] Fixed + the issue where attributes under <area> and <map> nodes are destroyed + or left unprotected when switching to and from Source mode.
  • +
  • [#1500] Fixed + the issue where the function _FCK_PaddingNodeListener() is called excessively which + negatively affects performance.
  • +
  • [#1514] Fixed + the issue where floating menus are incorrectly positioned when the toolbar or the + editor frame are not static positioned.
  • +
  • [#1518] Fixed + the issue where excessive <BR> nodes are not removed after a paragraph is + split when creating lists.
  • +
  • [#1521] Fixed + JavaScript error and erratic behavior of the Replace dialog.
  • +
  • [#1524] Fixed + the issue where the caret jumps to the beginning or end of a list block and when + user is trying to select the end of a list item.
  • +
  • Completed Simplified Chinese translation of the user interface.
  • +
  • Completed Estonian translation of the user interface.
  • +
  • [#1406] Editor + was always "dirty" if flash is available in the contents.
  • +
  • [#1561] Non standard + elements are now properly applied if defined in the styles XML file.
  • +
  • [#1412] The _QuickUploadLanguage + value is now work properly for Perl.
  • +
  • Several compatibility fixes for Firefox 3 (Beta 1): +
      +
    • [#1558] Nested + context menu close properly when one of their options is selected.
    • +
    • [#1556] Dialogs + contents are now showing completely, without scrollbar.
    • +
    • [#1559] It is + not possible to have more than one panel opened at the same time.
    • +
    • [#1554] Links + now get underlined.
    • +
    • [#1557] The "Automatic" + and "More colors..." buttons were improperly styled in the color selector panels + (Opera too).
    • +
    • [#1462] The enter + key will not any more scroll the main window.
    • +
    +
  • +
  • [#1562] Fixed + the issue where empty paragraphs are added around page breaks each time the user + switches to Source mode.
  • +
  • [#1578] The editor + will now scroll correctly when hitting enter in front of a paragraph.
  • +
  • [#1579] Fixed + the issue where the create table and table properties dialogs are too narrow for + certain translations.
  • +
  • [#1580] Completed + Polish translation of the user interface.
  • +
  • [#1591] Fixed + JavaScript error when using the blockquote command in an empty document in IE.
  • +
  • [#1592] Fixed + the issue where attempting to remove a blockquote with an empty paragraph would + leave behind an empty blockquote IE.
  • +
  • [#1594] Undo/Redo + will now work properly for the color selectors.
  • +
  • [#1597] The color + boxes are now properly rendered in the color selector panels on sample14.html.
  • +
+

+ Version 2.5 Beta

+

+ New Features and Improvements:

+
    +
  • [#624] [#634] [#1300] [#1301] + Official compatibility support with Opera 9.50 and Safari 3 + (WebKit based browsers actually). These browsers are still in Beta, but we are confident + that we'll have amazing results as soon as they get stable. We are continuously + collaborating with Opera Software and Apple to bring a wonderful FCKeditor experience + over their browser platforms.
  • +
  • [#494] Introduced + the new Style System. We are not anymore relaying on browser features + to apply and remove styles, which guarantees that the editor will behave in + the same way in all browsers. It is an incredibly flexible system, + which aims to fit all developer's needs, from Flash content or HTML4 to XHTML 1.0 + Strict or XHTML 1.1: +
      +
    • All basic formatting features, like Bold and Italic, can be precisely controlled + by using the configuration file (CoreStyles setting). It means that now, + the Bold button, for example, can produce <b>, <strong>, <span class...>, + <span style...> or anything the developer prefers.
    • +
    • Again with the CoreStyles setting, each block format, font, size, and even + the color pickers can precisely reflect end developer's needs.
    • +
    • Because of the above changes, font sizes are much more flexible. Any kind of + font unit can be used, including a mix of units.
    • +
    • All styles, including toolbar bottom styles, are precisely controlled when being + applied to the document. FCKeditor uses an element table derived from the W3C XHTML + DTDs to precisely create the elements, guarantee standards compliant code.
    • +
    • No more <font> tags... well... actually, the system is so flexible + that it is up to you to use them or not.
    • +
    • It is possible to configure FCKeditor to produce a truly semantic aware and + XHTML 1.1 compliant code. Check out sample14.html.
    • +
    • It's also possible to precisely control which inline elements must be removed with + the "Remove All" button, by using the "RemoveFormatTags" + setting.
    • +
    • [#1231] [#160] Paragraph indentation + and justification now uses style attributes and don't create unnecessary + elements, and <blockquote> is not anymore used for it. Now, even CSS classes + can be used to indent or align text.
    • +
    • All paragraph formatting features work well when EnterMode=br.
    • +
    • [#172] All paragraph + formatting features work well when list items too.
    • +
    +
  • +
  • [#1197] [#132] The toolbar + now presents a new button for Blockquote. The indentation button + will not anymore be used for that.
  • +
  • [#125] Table's + columns size can now be changed by dragging on cell borders, with + the "dragresizetable" plugin.
  • +
  • The EditorAreaCSS config option can now also be set to a string of paths separated + by commas.
  • +
  • [#212] New "Show + Blocks" command button in toolbar to show block details in the editing + area.
  • +
  • [#915] The + undo/redo system has been revamped to work the same across Internet Explorer + and Gecko-based browsers (e.g. Firefox). A number of critical bugs in the undo/redo + system are also fixed.
  • +
  • [#194] The editor + now uses the Data Processor technology, which makes it possible + to handle different input formats. A sample of it may be found at "editor/plugins/bbcode/_sample", + that shows some simple BBCode support.
  • +
  • [#145] The "htaccess.txt" + file has been renamed to ".htaccess" as it doesn't bring security concerns, being + active out of the box.
  • +
  • File Browser and Quick Upload changes: +
      +
    • [#163] Attention: The default connector + in fckconfig.js has been changed from ASP to PHP. If you are using ASP remember + to change the _FileBrowserLanguage and _QuickUploadLanguage settings in your fckconfig.js. + [#454] The file + browser and upload connectors have been unified so they can reuse the same configuration + settings.
    • +
    • [#865] The ASP + and PHP connectors have been improved so it's easy to select the location of the + destination folder for each file type, and it's no longer necessary to use the "file", + "image", "flash" subfolders
      + Attention: The location of + all the connectors have been changed in the fckconfig.js file. Please check your + settings to match the current ones. Also review carefully the config file for your + server language.
    • +
    • [#688] Now the + Perl quick upload is available.
    • +
    • [#575] The Python + connector has been rewritten as a WSGI app to be fully compatible with the latest + python frameworks and servers. The QuickUpload feature has been added as well as + all the features available in the PHP connector. Thanks to Mariano Reingart.
    • +
    • [#561] The ASP + connector provides an AbsolutePath setting so it's possible to set the url to a + full domain or a relative path and specify that way the physical folder where the + files are stored..
    • +
    • [#333] The Quick + Upload now can use the same ServerPath parameter as the full connector.
    • +
    • [#199] The AllowedCommands + configuration setting is available in the asp and php connectors so it's possible + to disallow the upload of files (although the "select file" button will still be + available in the file browser).
    • +
    +
  • +
  • [#100] A new configuration + directive "FCKConfig.EditorAreaStyles" has been implemented to allow setting editing + area styles from JavaScript.
  • +
  • [#102] HTML code + generated by the "Paste As Plain Text" feature now obeys the EnterMode setting.
  • +
  • [#1266] Introducing + the HtmlEncodeOutput setting to instruct the editor to HTML-encode some characters + (&, < and >) in the posted data.
  • +
  • [#357] Added a + "Remove Anchor" option in the context menu for anchors.
  • +
  • [#1060] Compatibility + checks with Firefox 3.0 Alpha.
  • +
  • [#817] [#1077] New "Merge + Down/Right" commands for merging tables cells in non-Gecko browsers.
  • +
  • [#1288] The "More + Colors..." button in color selector popup has been made optional and configurable + by the EnableMoreFontColors option.
  • +
  • [#356] The + Find and Replace dialogs are now unified into a single dialog with tabs.
  • +
  • [#549] Added a + 'None' option to the FCKConfig.ToolbarLocation option to allow for hidden toolbars. +
  • +
  • [#1313] An XHTML + 1.1 target editor sample has been created as sample14.html.
  • +
  • The ASP, ColdFusion and PHP integration have been aligned to our standards.
  • +
+

+ Fixed Bugs:

+
    +
  • [#71] [#243] [#267] + The editor now takes care to not create invalid nested block elements, like creating + <form> or <hr> inside <p>.  
  • +
  • [SF + Patch 1511298] The CF Component failed on CFMX 6.0
  • +
  • [#639] If the + FCKConfig.DefaultLinkTarget setting was missing in fckconfig.js the links has target="undefined".
  • +
  • [#497] Fixed EMBED + attributes handling in IE.
  • +
  • [SF + Patch 1315722] Avoid getting a cached version of the folder contents after uploading + a file
  • +
  • [SF + Patch 1386086] The php connector has been protected so mkdir doesn't fail if + there are double slashes.
  • +
  • [#943] The PHP + connector now specifies that the included files are relative to the current path.
  • +
  • [#560] The PHP + connector will work better if the connector or the userfiles folder is a symlink.
  • +
  • [#784] Fixed a + non initialized $php_errormsg in the PHP connector.
  • +
  • [#802] The replace + dialog will now advance its searching position correctly and is able to search for + strings spanning across multiple inline tags.
  • +
  • [#944] The _samples + didn't work directly from the Mac filesystem.
  • +
  • [#946] Toolbar + images didn't show in non-IE browsers if the path contained a space.
  • +
  • [#291] [#395] [#932] Clicking outside the editor + it was possible to paste or apply formatting to the rest of the page in IE.
  • +
  • [#137] Fixed FCKConfig.TabSpaces + being ignored, and weird behaviors when pressing tab in edit source mode.
  • +
  • [#268] Fixed special + XHTML characters present in event attribute values being converted inappropriately + when switching to source view.
  • +
  • [#272] The toolbar + was cut sometimes in IE to just one row if there are multiple instances of the editor.
  • +
  • [#515] Tables + in Firefox didn't inherit font styles properly in Standards mode.
  • +
  • [#321] If FCKeditor + is initially hidden in Firefox it will no longer be necessary to call the oEditor.MakeEditable() + function.
  • +
  • [#299] The 'Browse + Server' button in the Image and Flash dialogs was a little too high.
  • +
  • [#931] The BodyId + and BodyClass configuration settings weren't applied in the preview window.
  • +
  • [#583] The "noWrap" + attribute for table cells was getting an empty value in Firefox. Thanks to geirhelge.
  • +
  • [#141] Fixed incorrect + startup focus in Internet Explorer after page reloads.
  • +
  • [#143] Fixed browser + lockup when the user writes <!--{PS..x}> into the editor in source mode.
  • +
  • [#174] Fixed incorrect + positioning of FCKeditor in full screen mode.
  • +
  • [#978] Fixed a + SpellerPages error with ColdFusion when no suggestions where available for a word.
  • +
  • [#977] The "shape" + attribute of <area> had its value changed to uppercase in IE.
  • +
  • [#996] "OnPaste" + event listeners will now get executed only once.
  • +
  • [#289] Removed + debugging popups from page load regarding JavaScript and CSS loading errors.
  • +
  • [#328] [#346] [#404] Fixed a number of problems + regarding <pre> blocks: +
      +
    1. Leading whitespaces and line breaks in <pre> blocks are trimmed when the user + switches between editor mode and source mode;
    2. +
    3. Pressing Enter inside a <pre> block would split the block into two, but the + expected behavior is simply inserting a line break;
    4. +
    5. Simple line breaks inside <pre> blocks entered in source mode are being turned + into <br> tags when the user switches to editor mode and back.
    6. +
    +
  • +
  • [#581] Fixed the + issue where the "Maximize the editor size" toolbar button stops working if any of + the following occurs: +
      +
    1. There exists a form input whose name or id is "style" in FCKeditor's host form;
    2. +
    3. There exists a form input whose name or id is "className" in FCKeditor's host form;
    4. +
    5. There exists a form and a form input whose name of id is "style" in the editing + frame.
    6. +
    +
  • +
  • [#183] Fixed the + issue when FCKeditor is being executed in a custom application with the WebBrowser + ActiveX control, hiding the WebBrowser control would incorrectly invoke FCKeditor's + cleanup routines, causing FCKeditor to stop working.
  • +
  • [#539] Fixed the + issue where right clicking on a table inside the editing frame in Firefox would + cause the editor the scroll to the top of the document.
  • +
  • [#523] Fixed the + issue where, under certain circumstances, FCKeditor would obtain focus at startup + even though FCKConfig.StartupFocus is set to false.
  • +
  • [#393] Fixed the + issue where if an inline tag is at the end of the document, the user would have + no way of escaping from the inline tag if he continues typing at the end of the + document. FCKeditor's behaviors regarding inline tags has been made to be more like + MS Word's: +
      +
    1. If the caret is moved to the end of a hyperlink by the keyboard, then hyperlink + mode is disabled.
    2. +
    3. If the caret is moved to the end of other styled inline tags by any key other than + the End key (like bold text or italic text), the original bold/italic/... modes + would continue to be effective.
    4. +
    5. If the caret is moved to the end of other styled inline tags by the End key, all + style tag modes (e.g. bold, italic, underline, etc.) would be canceled. This is + not consistent with MS Word, but provides a convenient way for the user to escape + the inline tag at the end of a line.
    6. +
    +
  • +
  • [#338] Fixed the + issue where the configuration directive FCKConfig.ForcePasteAsPlainText is ignored + when new contents are pasted into the editor via drag-and drop from outside of the + editor.
  • +
  • [#1026] Fixed + the issue where the cursor or selection positions are not restored with undo/redo + commands correctly in IE, under some circumstances.
  • +
  • [#1160] [#1184] Home, End + and Tab keys are working properly for numeric fields in dialogs.
  • +
  • [#68] The style + system now properly handles Format styles when EnterMode=br.
  • +
  • [#525] The union + of successive DIVs will work properly now if EnterMode!=div.
  • +
  • [#1227] The color + commands used an unnecessary temporary variable. Thanks to Matthias Miller
  • +
  • [#67] [#277] [#427] + [#428] [#965] [#1178] + [#1267] The list + insertion/removal/indent/outdent logic in FCKeditor has been rewritten, such that: +
      +
    1. Text separated by <br> will always be treated as separate items during list + insertion regardless of browser;
    2. +
    3. List removal will now always obey the FCKConfig.EnterMode setting;
    4. +
    5. List indentation will be XHTML 1.1 compliant - all child elements under an <ol> + or <ul> must be <li> nodes;
    6. +
    7. IE editor hacks like <ul type="1"> will no longer appear;
    8. +
    9. Excessive <div> nodes are no longer inserted into list items due to alignment + changes.
    10. +
    +
  • +
  • [#205] Fixed the + issue where visible <br> tags at the end of paragraphs are incorrectly removed + after switching to and from source mode.
  • +
  • [#1050] Fixed + a minor PHP/XML incompatibility bug in editor/dialog/fck_docprops.html.
  • +
  • [#462] Fixed an + algorithm bug in switching from source mode to WYSIWYG mode which causes the browser + to spin up and freeze for broken HTML code inputs.
  • +
  • [#1019] Table + command buttons are now disabled when the current selection is not inside a table.
  • +
  • [#135] Fixed the + issue where context menus are misplaced in FCKeditor when FCKeditor is created inside + a <div> node with scrolling.
  • +
  • [#1067] Fixed + the issue where context menus are misplaced in Safari when FCKeditor is scrolled + down.
  • +
  • [#1081] Fixed + the issue where undoing table deletion in IE7 would cause JavaScript errors.
  • +
  • [#1061] Fixed + the issue where backspace and delete cannot delete special characters in Firefox + under some circumstances.
  • +
  • [#403] Fixed the + issue where switching to and from source mode in full page mode under IE would add + excessive line breaks to <style> blocks.
  • +
  • [#121] Fixed the + issue where maximizing FCKeditor inside a frameset would resize FCKeditor to the + whole window's size instead of just the container frame's size.
  • +
  • [#1093] Fixed + the issue where pressing Enter inside an inline tag would not create a new paragraph + correctly.
  • +
  • [#1089] Fixed + the issue where pressing Enter inside a <pre> block do not generate visible + line breaks in IE.
  • +
  • [#332] Hitting + Enter when the caret is at the end of a hyperlink will no longer continue the link + at the new paragraph.
  • +
  • [#1121] Hitting + Enter with FCKConfig.EnterMode=br will now scroll the document correctly when the + new lines have exceeded the lower boundary of the editor frame.
  • +
  • [#1063] [#1084] [#1092] Fixed a few Norwegian + language translation errors.
  • +
  • [#1148] Fixed + the issue where the "Automatic" and "More Colors..." buttons + in the color selection panel are not centered in Safari.
  • +
  • [#1187] Fixed + the issue where the "Paste as plain text" command cannot be undone in + non-IE browsers.
  • +
  • [#1222] Ctrl-Backspace + operations will now save undo snapshots in all browsers.
  • +
  • [#1223] Fixed + the issue where the insert link dialog would save multiple undo snapshots for a + single operation.
  • +
  • [#247] Fixed the + issue where deleting everything in the document in IE would create an empty <p> + block in the document regardless of EnterMode setting.
  • +
  • [#1280] Fixed + the issue where opening a combo box will cause the editor frames to lose focus when + there are multiple editors in the same document.
  • +
  • [#363] Fixed the + issue where the Find dialog does not work under Opera.
  • +
  • [#50] Fixed the + issue where the Paste button is always disabled in Safari.
  • +
  • [#389] Pasting + text with comments from Word won't generate errors in IE, thanks to the idea from + Swift.
  • +
  • The pasting area in the Paste from Word dialog is focused on initial load
  • +
  • Some fixes related to html comment handling in the Word clean up routine
  • +
  • [#1303] <col> + is correctly treated as an empty element.
  • +
  • [#969] Removed + unused files (fcknumericfield.htc and moz-bindings.xml).
  • +
  • [#1166] Fixed + the issue where <meta> tags are incorrectly outputted with closing tags in + full page mode.
  • +
  • [#1200] Fixed + the issue where context menus sometimes disappear prematurely before the user can + click on any items in Opera.
  • +
  • [#1315] Fixed + the issue where the source view text area in Safari is displayed with an excessive + blue border.
  • +
  • [#1201] Fixed + the issue where hitting Backspace or Delete inside a table cell deletes the table + cell instead of its contents in Opera.
  • +
  • [#1311] Fixed + the issue where undoing and redoing a special character insertion would send the + caret to incorrect positions. (e.g. the beginning of document)
  • +
  • [#923] Font colors + are now properly applied on links.
  • +
  • [#1316] Fixed + the issue where the image dialog expands to a size too big in Safari.
  • +
  • [#1306] [#894] The undo system + can now undo text formatting steps like setting fonts to bold and italic.
  • +
  • [#95] Fixed the + issue where FCKeditor breaks <meta> tags in full page mode in some circumstances.
  • +
  • [#175] Fixed the + issue where entering an email address with a '%' sign in the insert link dialog + would cause JavaScript error.
  • +
  • [#180] Improved + backward compatibility with older PHP versions. FCKeditor can now work with PHP + versions down to 4.0.
  • +
  • [#192] Document + modifying actions from the FCKeditor JavaScript API will now save undo steps.
  • +
  • [#246] Using text + formatting commands in EnterMode=div will no longer cause tags to randomly disappear.
  • +
  • [#327] It is no + longer possible for the browser's back action to misfire when a user presses backspace + while an image is being selected in FCKeditor.
  • +
  • [#362] Ctrl-Backspace + now works in FCKeditor.
  • +
  • [#390] Text alignment + and justification commands now respects EnterMode=br paragraph rules.
  • +
  • [#534] Pressing + Ctrl-End while the document contains a list towards the end will no longer make + the cursor disappear.
  • +
  • [#906] It is now + possible to have XHTML 1.0 Strict compliant output from a document pasted from Word.
  • +
  • [#929] Pressing + the Enter key will now produce an undo step.
  • +
  • [#934] Fixed the + "Cannot execute code from a freed script" error in IE from editor dialogs.
  • +
  • [#942] Server + based spell checking with ColdFusion integration no longer breaks fir non en_US + languages.
  • +
  • [#1056] Deleting + everything in the editor document and moving the cursor around will no longer leave + the cursor hanging beyond the top of the editor document.
  • +
+

+ # This version has been partially sponsored + by the Council of Europe. +

+

+ See previous versions history +

+ + diff --git a/phpgwapi/js/fckeditor/_whatsnew_history.html b/phpgwapi/js/fckeditor/_whatsnew_history.html new file mode 100644 index 0000000000..ffc6cb5279 --- /dev/null +++ b/phpgwapi/js/fckeditor/_whatsnew_history.html @@ -0,0 +1,2807 @@ + + + + + FCKeditor ChangeLog - What's New? + + + + +

+ FCKeditor ChangeLog - What's New?

+

+ Version 2.4.3

+

+ New Features and Improvements:

+
    +
  • It is now possible to set the default target when creating links, with the new "DefaultLinkTarget" + setting.
  • +
  • [#436] The new + "FirefoxSpellChecker" setting is available, to enable/disable the + Firefox built-in spellchecker while typing. Even if word suggestions will not appear + in the FCKeditor context menu, this feature is useful to quickly identify misspelled + words.
  • +
  • [#311] The new + "BrowserContextMenuOnCtrl" setting is being introduced, to enable/disable + the ability of displaying the default browser's context menu when right-clicking + with the CTRL key pressed.
  • +
+

+ Fixed Bugs:

+
    +
  • [#300] The fck_internal.css + file was not validating with the W3C CSS Validation Service.
  • +
  • [#336] Ordered + list didn't keep the Type attribute properly (it was converted to lowercase when + the properties dialog was opened again).
  • +
  • [#318] Multiple + linked images are merged in a single link in IE.
  • +
  • [#350] The <marquee> + element will no longer append unwanted <p>&nbsp;</p> to the code.
  • +
  • [#351] The content + was being lost for images or comments only HTML inserted directly in the editor + source or loaded in the editor.
  • +
  • [#388] Creating + links in lines separated by <br> in IE can lead to a merge of the links.
  • +
  • [#325] Calling + the GetXHTML can distort visually the rendering in Firefox.
  • +
  • [#391] When ToolbarLocation=Out, + a "Security Warning" alert was being shown in IE if under https. Thanks to reister.
  • +
  • [#360] Form "name" + was being set to "[object]" if it contained an element with id="name".
  • +
  • Fixed a type that was breaking the ColdFusion SpellerPages integration file when + no spelling errors were found.
  • +
  • The ColdFusion SpellerPages integration was not working it Aspell was installed + in a directory with spaces in the name.
  • +
  • Added option to SpellerPages to ignore "alt" attributes.
  • +
  • [#451] Classes + for images in IE didn't take effect immediately.
  • +
  • [#430] Links with + a class did generate a span in Firefox when removing them.
  • +
  • [#274] The PHP + quick upload still tried to use the uppercased types instead of the lowercased ones. +
  • +
  • [#416] The PHP + quick upload didn't check for the existence of the folder before saving.
  • +
  • [#467] If InsertHtml + was called in IE with a comment (or any protected source at the beginning) it was + lost.
  • +
  • [SF + BUG-1518766] Mozilla 1.7.13 wasn't recognized properly as an old Gecko engine.
  • +
  • [#324] Improperly + nested tags could lead to a crash in IE.
  • +
  • [#455] Files and + folders with non-ANSI names were returned with a double UTF-8 encoding in the PHP + File Manager.
  • +
  • [#273] The extensions + "sh", "shtml", "shtm" and "phtm" have been added to the list of denied extensions + on upload.
  • +
  • [#453] No more + errors when hitting del inside an empty table cell.
  • +
  • The perl connector cgi file has been changed to Unix line endings.
  • +
  • [#202] Regression: + The HR tag will not anymore break the contents loaded in the editor.
  • +
  • [#508] The HR + command had a typo.
  • +
  • [#505] Regression: + IE crashed if a table caption was deleted.
  • +
  • [#82] [#359] <object> and <embed> + tags are not anymore lost in IE.
  • +
  • [#493] If the + containing form had a button named "submit" the "Save" command didn't work in Firefox.
  • +
  • [#414] If tracing + was globally enabled in Asp.Net 2.0 then the Asp.Net connector did fail.
  • +
  • [#520] The "Select + Field" properties dialog was not correctly handling select options with &, < + and >.
  • +
  • [#258] The Asp + integration didn't pass boolean values in English, using instead the locale of the + server and failing.
  • +
  • [#487] If an image + with dimensions set as styles was opened with the image manager and then the dialog + was canceled the dimensions in the style were lost.
  • +
  • [#220] The creation + of links or anchors in a selection that results on more than a single link created + will not anymore leave temporary links in the source. All links will be defined + as expected.
  • +
  • [#182] [#261] [#511] Special characters, like + percent signs or accented chars, and spaces are now correctly returned by the File + Browser.
  • +
  • [#281] Custom + toolbar buttons now render correctly in all skins.
  • +
  • [#527] If the + configuration for a toolbar isn't fully valid, try to keep on parsing it.
  • +
  • [#187] [#435] [SF + BUG-1612978] [SF + BUG-1163511] Updated the configuration options in the ColdFusion integration + files.
  • +
  • [SF + Patch-1726781] Updated the upload class for asp to handle large files and other + data in the forms. Thanks to NetRube.
  • +
  • [#225] With ColdFusion, + the target directory is now being automatically created if needed when "quick uploading". + Thanks to sirmeili.
  • +
  • [#295] [#510] Corrected some + path resolution issues with the File Browser connector for ColdFusion.
  • +
  • [#239] The <xml> + tag will not anymore cause troubles.
  • +
  • [SF + BUG-1721787] If the editor is run from a virtual dir, the PHP connector will + detect that and avoid generating a wrong folder.
  • +
  • [#431] PHP: The + File Browser now displays an error message when it is not able to create the configured + target directory for files (instead of sending broken XML responses).
  • +
+

+ Version 2.4.2

+

+ Fixed Bugs:

+
    +
  • [#279] The UTF-8 + BOM was being included in the wrong files, affecting mainly PHP installations.
  • +
+

+ Version 2.4.1

+

+ New Features and Improvements:

+
    +
  • [#118] The SelectAll + command now is available in Source Mode.
  • +
  • The new open source FCKpackager sub-project is now available. It replaces the FCKeditor.Packager + software to compact the editor source.
  • +
  • With Firefox, if a paste execution is blocked by the browser security settings, + the new "Paste" popup is shown to the user to complete the pasting operation.
  • +
+

+ Fixed Bugs:

+
    +
  • Various fixes to the ColdFusion File Browser connector.
  • +
  • We are now pointing the download of ieSpell to their pages, instead to a direct + file download from one of their mirrors. This disables the ability of "click and + go" (which can still be achieved by pointing the download to a file in your server), + but removes any troubles with mirrors link changes (and they change it frequently).
  • +
  • The Word cleanup has been changed to remove "display:none" tags that may come from + Word.
  • +
  • [SF + BUG-1659613] The 2.4 version introduced a bug in the flash handling code that + generated out of memory errors in IE7.
  • +
  • [SF + BUG-1660456] The icons in context menus were draggable.
  • +
  • [SF + BUG-1653009] If the server is configured to process html files as asp then it + generated ASP error 0138.
  • +
  • [SF + BUG-1288609] The content of iframes is now preserved.
  • +
  • [SF + BUG-1245504] [SF + BUG-1652240] Flash files without the .swf extension weren't recognized upon + reload.
  • +
  • [SF + PATCH-1649753] Node selection for text didn't work in IE. Thanks to yurik dot + m.
  • +
  • [SF + BUG-1573191] The Html code inserted with FCK.InsertHtml didn't have the same + protection for special tags.
  • +
  • [#110] The OK + button in dialogs had its width set as an inline style.
  • +
  • [#113] [#94] [SF + BUG-1659270] ForcePasteAsPlainText didn't work in Firefox.
  • +
  • [#114] The correct + entity is now used to fill empty blocks when ProcessHTMLEntities is disabled.
  • +
  • [#90] The editor + was wrongly removing some <br> tags from the code.
  • +
  • [#139] The CTRL+F + and CTRL+S keystroke default behaviors are now preserved.
  • +
  • [#138] We are + not providing a CTRL + ALT combination in the default configuration file because + it may be incompatible with some keyboard layouts. So, the CTRL + ALT + S combination + has been changed to CTRL + SHIFT + S.
  • +
  • [#129] In IE, + it was not possible to paste if "Allow paste operation via script" was disabled + in the browser security settings.
  • +
  • [#112] The enter + key now behaves correctly on lists with Firefox, when the EnterMode is set to 'br'.
  • +
  • [#152] Invalid + self-closing tags are now being fixed before loading.
  • +
  • A few tags were being ignored to the check for required contents (not getting stripped + out, as expected). Fixed.
  • +
  • [#202] The HR + tag will not anymore break the contents loaded in the editor.
  • +
  • [#211] Some invalid + inputs, like "<p>" where making the caret disappear in Firefox.
  • +
  • [#99] The <div> + element is now considered a block container if EnterMode=p|br. It acts like a simple + block only if EnterMode=div.
  • +
  • Hidden fields will now show up as an icon in IE, instead of a normal text field. + They are also selectable and draggable, in all browsers.
  • +
  • [#213] Styles + are now preserved when hitting enter at the end of a paragraph.
  • +
  • [#77] If ShiftEnterMode + is set to a block tag (p or div), the desired block creation in now enforced, instead + of copying the current block (which is still the behavior of the simple enter).
  • +
  • [#209] Links and + images URLs will now be correctly preserved with Netscape 7.1.
  • +
  • [#165] The enter + key now honors the EnterMode settings when outdenting a list item.
  • +
  • [#190] Toolbars + may be wrongly positioned. Fixed.
  • +
  • [#254] The IgnoreEmptyParagraphValue + setting is now correctly handled in Firefox.
  • +
  • [#248] The behavior + of the backspace key has been fixed on some very specific cases.
  • +
+

+ Version 2.4

+

+ New Features and Improvements:

+
    +
  • [SF + Feature-1329273] [SF + Feature-1456005] [SF + BUG-1315002] [SF + BUG-1350180] [SF + BUG-1450689] [SF + BUG-1461033] [SF + BUG-1510111] [SF + BUG-1203560] [SF + BUG-1564838] The advance Enter Key Handler + is now being introduced. It gives you complete freedom to configure the editor to + generate <p>, <div> or <br> when the user uses + both the [Enter] and [Shift]+[Enter] keys. The new "EnterMode" and "ShiftEnterMode" + settings can be use to control its behavior. It also guarantees that all browsers + will generate the same output.
  • +
  • The new and powerful Keyboard Accelerator System is being introduced. + You can now precisely control the commands to execute when some key combinations + are activated by the user. It guarantees that all browsers will have the same behavior + regarding the shortcuts.
    + It also makes it possible to remove buttons from the toolbar and still invoke their + features by using the keyboard instead. +
    + It also blocks all default "CTRL based shortcuts" imposed by the browsers, so if + you don't want users to underline text, just remove the CTRL+U combination from + the keystrokes table. Take a look at the FCKConfig.Keystrokes setting in the fckconfig.js + file.
  • +
  • The new "ProtectedTags" configuration option is being introduced. + It will accept a list of tags (separated by a pipe "|"), which will have no effect + during editing, but will still be part of the document DOM. This can be used mainly + for non HTML standard, custom tags.
  • +
  • Dialog box commands can now open resizable dialogs (by setting oCommand.Resizable + = true).
  • +
  • Updated support for AFP. Thanks to Soenke Freitag.
  • +
  • New language file:
      +
    • Afrikaans (by Willem Petrus Botha).
    • +
    +
  • +
  • [SF + Patch-1456343] New sample file showing how to dynamically exchange a textarea + and an instance of FCKeditor. Thanks to Finn Hakansson
  • +
  • [SF + Patch-1496115] [SF + BUG-1588578] [SF + BUG-1376534] [SF + BUG-1343506] [SF + Feature-1211065] [SF + Feature-949144] The content of anchors are shown and preserved + on creation. *
  • +
  • [SF + Feature-1587175] Local links to an anchor are readjusted if the anchor changes.
  • +
  • [SF + Patch-1500040] New configuration values to specify the Id and Class for the + body element.
  • +
  • [SF + Patch-1577202] The links created with the popup option now are accessible even + if the user has JavaScript disabled.
  • +
  • [SF + Patch-1443472] [SF + BUG-1576488] [SF + BUG-1334305] [SF + BUG-1578312] The Paste from Word clean up function can be configured + with FCKConfig.CleanWordKeepsStructure to preserve the markup as much as possible. + Thanks Jean-Charles ROGEZ.
  • +
  • [SF + Patch-1472654] The server side script location for SpellerPages can now be set + in the configuration file, by using the SpellerPagesServerScript setting.
  • +
  • Attention: All connectors are now pointing by + default to the "/userfiles/" folder instead of "/UserFiles/" (case change). Also, + the inner folders for each type (file, image, flash and media) are all lower-cased + too.
  • +
  • Attention: The UseBROnCarriageReturn configuration + is not anymore valid. The EnterMode setting can now be used to precisely set the + enter key behavior.
  • +
+

+ Fixed Bugs:

+
    +
  • [SF + BUG-1444937] [SF + BUG-1274364] Shortcut keys are now undoable correctly.
  • +
  • [SF + BUG-1015230] Toolbar buttons now update their state on shortcut keys activation.
  • +
  • [SF + BUG-1485621] It is now possible to precisely control which shortcut keys can + be used.
  • +
  • [SF + BUG-1573714] [SF + BUG-1593323] Paste was not working in IE if both AutoDetectPasteFromWord + and ForcePasteAsPlainText settings were set to "false".
  • +
  • [SF + BUG-1578306] The context menu was wrongly positioned if the editing document + was set to render in strict mode. Thanks to Alfonso Martinez.
  • +
  • [SF + BUG-1567060] [SF + BUG-1565902] [SF + BUG-1440631] IE was getting locked on some specific cases. Fixed.
  • +
  • [SF + BUG-1582859] [SF + Patch-1579507] Firefox' spellchecker is now disabled during editing mode. + Thanks to Alfonso Martinez.
  • +
  • Fixed Safari and Opera detection system (for development purposes only).
  • +
  • Paste from Notepad was including font information in IE. Fixed.
  • +
  • [SF + BUG-1584092] When replacing text area, names with spaces are now accepted.
  • +
  • Depending on the implementation of toolbar combos (mainly for custom plugins) the + editor area was loosing the focus when clicking in the combo label. Fixed.
  • +
  • [SF + BUG-1596937] InsertHtml() was inserting the HTML outside the editor area on + some very specific cases.
  • +
  • [SF + BUG-1585548] On very specific, rare and strange cases, the XHTML processor was + not working properly in IE. Fixed.
  • +
  • [SF + BUG-1584951] [SF + BUG-1380598] [SF + BUG-1198139] [SF + BUG-1437318] In Firefox, the style selector will not anymore delete + the contents when removing styles on specific cases.
  • +
  • [SF + BUG-1515441] [SF + BUG-1451071] The "Insert/Edit Link" and "Select All" buttons are now working + properly when the editor is running on a IE Modal dialog.
  • +
  • On some very rare cases, IE was throwing a memory error when hiding the context + menus. Fixed.
  • +
  • [SF + BUG-1526154] [SF + BUG-1509208] With Firefox, <style> tags defined in the source are + now preserved.
  • +
  • [SF + BUG-1535946] The IE dialog system has been changed to better work with custom + dialogs.
  • +
  • [SF + BUG-1599520] The table dialog was producing empty tags when leaving some of + its fields empty.
  • +
  • [SF + BUG-1599545] HTML entities are now processed on attribute values too.
  • +
  • [SF + BUG-1598517] Meta tags are now protected from execution during editing (avoiding + the "redirect" meta to be activated).
  • +
  • [SF + BUG-1415601] Firefox internals: styleWithCSS is used instead of the deprecated + useCSS whenever possible.
  • +
  • All JavaScript Core extension function have been renamed to "PascalCase" (some were + in "camelCase"). This may have impact on plugins that use any of those functions.
  • +
  • [SF + BUG-1592311] Operations in the caption of tables are now working correctly in + both browsers.
  • +
  • Small interface fixes to the about box.
  • +
  • [SF + PATCH-1604576] [SF + BUG-1604301] Link creation failed in Firefox 3 alpha. Thanks to Arpad Borsos
  • +
  • [SF + BUG-1577247] Unneeded call to captureEvents and releaseEvents.
  • +
  • [SF + BUG-1610790] On some specific situations, the call to form.submit(), in form + were FCKeditor has been unloaded by code, was throwing the "Can't execute code from + a freed script" error.
  • +
  • [SF + BUG-1613167] If the configuration was missing the FCKConfig.AdditionalNumericEntities + entry an error appeared.
  • +
  • [SF + BUG-1590848] [SF + BUG-1626360] Cleaning of JavaScript strict warnings in the source code.
  • +
  • [SF + BUG-1559466] The ol/ul list property window always searched first for a UL element.
  • +
  • [SF + BUG-1516008] Class attribute in IE wasn't loaded in the image dialog.
  • +
  • The "OnAfterSetHTML" event is now fired when being/switching to Source View.
  • +
  • [SF + BUG-1631807] Elements' style properties are now forced to lowercase in IE.
  • +
  • The extensions "html", "htm" and "asis" have been added to the list of denied extensions + on upload.
  • +
  • Empty inline elements (like span and strong) will not be generated any more.
  • +
  • Some elements attributes (like hspace) where not being retrieved when set to "0".
  • +
  • [SF + BUG-1508341] Fix for the ColdFusion script file of SpellerPages.
  • +
+

+ * This version has been partially sponsored by Medical + Media Lab.

+

+ Version 2.3.3

+

+ New Features and Improvements:

+
    +
  • The project has been relicensed under the terms of the + GPL / LGPL / MPL licenses. This change will remove many licensing compatibility + issues with other open source licenses, making the editor even more "open" than + before.
  • +
  • Attention: The default directory in the distribution + package is now named "fckeditor" (in lowercase) instead of "FCKeditor".  This + change may impact installations on case sensitive OSs, like Linux.
  • +
  • Attention: The "Universal Keyboard" has been removed + from the package. The license of those files was unclear so they can't be included + alongside the rest of FCKeditor.
  • +
+

+ Version 2.3.2

+

+ New Features and Improvements:

+
    +
  • Users can now decide if the template dialog will replace the entire contents of + the editor or simply place the template in the cursor position. This feature can + be controlled by the "TemplateReplaceAll" and "TemplateReplaceCheckbox" configuration + options.
  • +
  • [SF + Patch-1237693] A new configuration option (ProcessNumericEntities) + is now available to tell the editor to convert non ASCII chars to their relative + numeric entity references. It is disabled by default.
  • +
  • The new "AdditionalNumericEntities" setting makes it possible to + define a set of characters to be transformed to their relative numeric entities. + This is useful when you don't want the code to have simple quotes ('), for example.
  • +
  • The Norwegian language file (no.js) has been duplicated to include the Norwegian + Bokmal (nb.js) in the supported interface languages. Thanks to Martin Kronstad. +
  • +
  • Two new patterns have been added to the Universal Keyboard: +
      +
    • Persian. Thanks to Pooyan Mahdavi
    • +
    • Portuguese. Thanks to Bo Brandt.
    • +
    +
  • +
  • [SF + Patch-1517322] It is now possible to define the start number on numbered lists. + Thanks to Marcel Bennett.
  • +
  • The Font Format combo will now reflect the EditorAreaCSS styles.
  • +
  • [SF + Patch-1461539] The File Browser connector can now optionally return a "url" + attribute for the files. Thanks to Pent.
  • +
  • [SF + BUG-1090851] The new "ToolbarComboPreviewCSS" configuration option has been + created, so it is possible to point the Style and Format toolbar combos to a different + CSS, avoiding conflicts with the editor area CSS.
  • +
  • [SF + Feature-1421309] [SF + BUG-1489402] It is now possible to configure the Quick Uploder target path + to consider the file type (ex: Image or File) in the target path for uploads.
  • +
  • The JavaScript integration file has two new things: +
      +
    • The "CreateHtml()" function in the FCKeditor object, used to retrieve the HTML of + an editor instance, instead of writing it directly to the page (as done by "Create()").
    • +
    • The global "FCKeditor_IsCompatibleBrowser()" function, which tells if the executing + browser is compatible with FCKeditor. This makes it possible to do any necessary + processing depending on the compatibility, without having to create and editor instance.
    • +
    +
  • +
+

+ Fixed Bugs:

+
    +
  • [SF + BUG-1525242] [SF + BUG-1500050] All event attributes (like onclick or onmouseover) are now + being protected before loading the editor. In this way, we avoid firing those events + during editing (IE issue) and they don't interfere in other specific processors + in the editor.
  • +
  • Small security fixes to the File Browser connectors.
  • +
  • [SF + BUG-1546226] Small fix to the ColdFusion CFC integration file.
  • +
  • [SF + Patch-1407500] The Word Cleanup function was breaking the HTML on pasting, on + very specific cases. Fixed, thanks to Frode E. Moe.
  • +
  • [SF + Patch-1551979] [SF + BUG-1418066] [SF + BUG-1439621] [SF + BUG-1501698] Make FCKeditor work with application/xhtml+xml. Thanks + to Arpad Borsos.
  • +
  • [SF + Patch-1547738] [SF + BUG-1550595] [SF + BUG-1540807] [SF + BUG-1510685] Fixed problem with panels wrongly positioned when the + editor is placed on absolute or relative positioned elements. Thanks to Filipe Martins.
  • +
  • [SF + Patch-1511294] Small fix for the File Browser compatibility with IE 5.5.
  • +
  • [SF + Patch-1503178] Small improvement to stop IE from loading smiley images when + one smiley is quickly selected from a huge list of smileys. Thanks to stuckhere.
  • +
  • [SF + BUG-1549112] The Replace dialog window now escapes regular expression specific + characters in the find and replace fields.
  • +
  • [SF + BUG-1548788] Updated the ieSpell download URL.
  • +
  • In FF, the editor was throwing an error when closing the window. Fixed.
  • +
  • [SF + BUG-1538509] The "type" attribute for text fields will always be set now.
  • +
  • [SF + BUG-1551734] The SetHTML function will now update the editing area height no + matter which editing mode is active.
  • +
  • [SF + BUG-1554141] [SF + BUG-1565562] [SF + BUG-1451056] [SF + BUG-1478408] [SF + BUG-1489322] [SF + BUG-1513667] [SF + BUG-1562134] The protection of URLs has been enhanced + and now it will not break URLs on very specific cases.
  • +
  • [SF + BUG-1545732] [SF + BUG-1490919] No security errors will be thrown when loading FCKeditor in + page inside a FRAME defined in a different domain.
  • +
  • [SF + BUG-1512817] [SF + BUG-1571345] Fixed the "undefined" addition to the content when ShowBorders + = false and FullPage = true in Firefox. Thanks to Brett.
  • +
  • [SF + BUG-1512798] BaseHref will now work well on FullPage, even if no <head> + is available.
  • +
  • [SF + BUG-1509923] The DocumentProcessor is now called when using InserHtml().
  • +
  • [SF + BUG-1505964] The DOCTYPE declaration is now preserved when working in FullPage.
  • +
  • [SF + BUG-1553727] The editor was throwing an error when inserting complex templates. + Fixed.
  • +
  • [SF + Patch-1564930] [SF + BUG-1562828] In IE, anchors where incorrectly copied when using the Paste + from Word button. Fixed, thanks to geirhelge.
  • +
  • [SF + BUG-1557709] [SF + BUG-1421810] The link dialog now validates Popup Window names.
  • +
  • [SF + BUG-1556878] Firefox was creating empty tags when deleting the selection in + some special cases.
  • +
  • The context menu for links is now correctly shown when right-clicking on floating + divs.
  • +
  • [SF + BUG-1084404] The XHTML processor now ignores empty span tags.
  • +
  • [SF + BUG-1221728] [SF + BUG-1174503] The <abbr> tag is not anymore getting broken by IE.
  • +
  • [SF + BUG-1182906] IE is not anymore messing up mailto links.
  • +
  • [SF + BUG-1386094] Fixed an issue when setting configuration options to empty ('') + by code.
  • +
  • [SF + BUG-1389435] Fixed an issue in some dialog boxes when handling numeric inputs.
  • +
  • [SF + BUG-1398829] Some links may got broken on very specific cases. Fixed.
  • +
  • [SF + BUG-1409969] <noscript> tags now remain untouched by the editor.
  • +
  • [SF + BUG-1433457] [SF + BUG-1513631] Empty "href" attributes in <a> or empty "src" in <img> + will now be correctly preserved.
  • +
  • [SF + BUG-1435195] Scrollbars are now visible in the File Browser (for custom implementations).
  • +
  • [SF + BUG-1438296] The "ForceSimpleAmpersand" setting is now being honored in all + tags.
  • +
  • If a popup blocker blocks context menu operations, the correct alert message is + displayed now, instead of a ugly JavaScript error.
  • +
  • [SF + BUG-1454116] The GetXHTML() function will not change the IsDirty() value of + the editor.
  • +
  • The spell check may not work correctly when using SpellerPages with ColdFusion. + Fixed.
  • +
  • [SF + BUG-1481861] HTML comments are now removed by the Word Cleanup System.
  • +
  • [SF + BUG-1489390] A few missing hard coded combo options used in some dialogs are + now localizable.
  • +
  • [SF + BUG-1505448] The Form dialog now retrieves the value of the "action" attribute + exactly as defined in the source.
  • +
  • [SF + Patch-1517322] Solved an issue when the toolbar has buttons with simple icons + (usually used by plugins) mixed with icons coming from a strip (the default toolbar + buttons).
  • +
  • [SF + Patch-1575261] Some fields in the Table and Cell Properties dialogs were being + cut. Fixed.
  • +
  • Fixed a startup compatibility issue with Firefox 1.0.4.
  • +
+

+ Version 2.3.1

+

+ Fixed Bugs:

+
    +
  • [SF + BUG-1506126] Fixed the Catalan language file, which had been published with + problems in accented letters.
  • +
  • More performance improvements in the default File Browser.
  • +
  • [SF + BUG-1506701] Fixed compatibility issues with IE 5.5.
  • +
  • [SF + BUG-1509073] Fixed the "Image Properties" dialog window, which was making invalid + calls to the "editor/dialog/" directory, generating error 400 entries in the web + server log.
  • +
  • [SF + BUG-1507294] [SF + BUG-1507953] The editing area was getting a fixed size when using the "SetHTML" + API command or even when switching back from the source view. Fixed.
  • +
  • [SF + BUG-1507755] Fixed a conflict between the "DisableObjectResizing" and "ShowBorders" + configuration options over IE.
  • +
  • Opera 9 tries to "mimic" Gecko in the browser detection system of FCKeditor. As + this browser is not "yet" supported, the editor was broken on it. It has been fixed, + and now a textarea is displayed, as in any other unsupported browser. Support for + Opera is still experimental and can be activated by setting the property "EnableOpera" + to true when creating an instance of the editor with the JavaScript integration + files.
  • +
  • With Opera 9, the toolbar was jumping on buttons rollover.
  • +
  • [SF + BUG-1509479] The iframes used in Firefox for all editor panels (dropdown combos, + context menu, etc...) are now being placed right before the main iframe that holds + the editor. In this way, if the editor container element is removed from the DOM + (by DHTML) they are removed together with it.
  • +
  • [SF + BUG-1271070] [SF + BUG-1411430] The editor API now works well on DHTML pages that create and + remove instances of FCKeditor dynamically.
  • +
  • A second call to a page with the editor was not working correctly with Firefox 1.0.x. + Fixed.
  • +
  • [SF + BUG-1511460] Small correction to the <script> protected source regex. + Thanks to Randall Severy.
  • +
  • [SF + BUG-1521754] Small fix to the paths of the internal CSS files used by FCKeditor. + Thanks to johnw_ceb.
  • +
  • [SF + BUG-1511442] The <base> tag is now correctly handled in IE, no matter + its position in the source code.
  • +
  • [SF + BUG-1507773] The "Lock" and "Reset" buttons in the Image Properties dialog window + are not anymore jumping with Firefox 1.5.
  • +
+

+ Version 2.3

+

+ New Features and Improvements:

+
    +
  • The Toolbar Sharing system has been completed. See sample10.html + and sample11.html.*
  • +
  • [SF + Patch-1407500] Small enhancement to the Find and Replace dialog windows.
  • +
+

+ Fixed Bugs:

+
    +
  • Small security fixes.
  • +
  • The context menu system has been optimized. Nested menus now open "onmouseover". +
  • +
  • An error in the image preloader system was making the toolbar strip being downloaded + once for each button on slow connections. Some enhancements have also been made + so now the smaple05.html is loading fast for all skins.
  • +
  • Fixed many memory leak issues with IE.
  • +
  • [SF + BUG-1489768] The panels (context menus, toolbar combos and color selectors), + where being displayed in the wrong position if the contents of the editor, or its + containing window were scrolled down.
  • +
  • [SF + BUG-1493176] Using ASP, the connector was not working on servers with buffer + disable by default.
  • +
  • [SF + BUG-1491784] Language files have been updated to not include html entities.
  • +
  • [SF + BUG-1490259] No more security warning on IE over HTTPS.
  • +
  • [SF + BUG-1493173] [SF + BUG-1499708] We now assume that, if a user is in source editing, he/she + wants to control the HTML, so the editor doesn't make changes to it when posting + the form being in source view or when calling the GetXHTML function in the API. +
  • +
  • [SF + BUG-1490610] The FitWindow is now working on elements set with relative position.
  • +
  • [SF + BUG-1493438] The "Word Wrap" combo in the cell properties dialog now accepts + only Yes/No (no more <Not Set> value).
  • +
  • The context menu is now being hidden when a nested menu option is selected.
  • +
  • Table cell context menu operations are now working correctly.
  • +
  • [SF + BUG-1494549] The code formatter was having problems with dollar signs inside + <pre> tags.
  • +
  • [SF + Patch-1459740] The "src" element of images can now be set by styles definitions. + Thanks to joelwreed.
  • +
  • [SF + Patch-1437052] [SF + Patch-1436166] [SF + Patch-1352385] Small fix to the FCK.InsertHtml, FCKTools.AppendStyleSheet + and FCKSelection.SelectNode functions over IE. Thanks to Alfonso Martinez.
  • +
  • [SF + Patch-1349765] Small fix to the FCKSelection.GetType over Firefox. Thanks to + Alfonso Martinez.
  • +
  • [SF + Patch-1495422] The editor now creates link based on the URL when no selection + is available. Thanks to Dominik Pesch.
  • +
  • [SF + Patch-1478859] On some circumstances, the Yahoo popup blocker was blocking the + File Browser window, giving no feedback to the user. Now an alert message is displayed.
  • +
  • When using the editor in a RTL localized interface, like Arabic, the toolbar combos + were not showing completely in the first click. Fixed.
  • +
  • [SF + BUG-1500212] All "_samples/html" samples are now working when loading directly + from the Windows Explorer. Thanks to Alfonso Martinez.
  • +
  • The "FitWindow" feature was breaking the editor under Firefox 1.0.x.
  • +
  • [SF + Patch-1500032] In Firefox, the caret position now follows the user clicks when + clicking in the white area bellow the editor contents. Thanks to Alfonso Martinez.
  • +
  • [SF + BUG-1499522] In Firefox, the link dialog window was loosing the focus (and quickly + reacquiring it) when opening. This behavior was blocking the dialog in some Linux + installations.
  • +
  • Drastically improved the loading performance of the file list in the default File + Browser.
  • +
  • [SF + BUG-1503059] The default "BasePath" for FCKeditor in all integration files has + been now unified to "/fckeditor/" (lower-case). This is the usual casing system + in case sensitive OSs like Linux.
  • +
  • The "DisableFFTableHandles" setting is now honored when switching the full screen + mode with FitWindow.
  • +
  • Some fixes has been applied to the cell merging in Firefox.
  • +
+

+ * This version has been partially sponsored by Footsteps + and Kentico.

+

+ Version 2.3 Beta

+

+ New Features and Improvements:

+
    +
  • Extremely Fast Loading! The editor now loads more than 3 + times faster than before, with no impact on its advanced features.
  • +
  • New toolbar system: +
      +
    • [SF + Feature-1454850] The toolbar will now load much faster. All + images have being merged in a single image file using a unique system available + only with FCKeditor.
    • +
    • The "Text Color" and "Background Color" commands buttons have + enhancements on the interface.
    • +
    • Attention: As a completely + new system has being developed. Skins created for versions prior this one will not + work. Skin styles definitions have being merged, added and removed. All skins have + been a little bit reviewed.
    • +
    • It is possible to detach the toolbar from an editor instance and + share it with other instances. In this way you may have only one toolbar (in the + top of the window, for example, that can be used by many editors (see + sample10.html). This feature is still under development (issues with IE + focus still to be solved).*
    • +
    +
  • +
  • New context menu system: +
      +
    • It uses the same (fast) loading system as the toolbar.
    • +
    • Sub-Menus are now available to group features (try the context menu over a table + cell).
    • +
    • It is now possible to create your own context menu entries by creating plugins. +
    • +
    +
  • +
  • New "FitWindow" toolbar button, based on the + plugin published by Paul Moers. Thanks Paul!
  • +
  • "Auto Grow" Plugin: automatically resizes the editor + until a maximum height, based on its contents size.**
  • +
  • [SF + Feature-1444943] Multiple CSS files can now be used in the + editing area. Just define FCKConfig.EditorAreaCSS as an array of strings (each one + is a path to a different css file). It works also as a simple string, as on prior + versions.
  • +
  • New language files:
      +
    • Bengali / Bangla (by Richard Walledge).
    • +
    • English (Canadian) (by Kevin Bennett).
    • +
    • Khmer (by Sengtha Chay).
    • +
    +
  • +
  • The source view is now available in the editing area on Gecko browsers. Previously + a popup was used for it (due to a Firefox bug).
  • +
  • As some people may prefer the popup way for source editing, a new configuration + option (SourcePopup) has being introduced.
  • +
  • The IEForceVScroll configuration option has been removed. The editor now automatically + shows the vertical scrollbar when needed (for XHTML doctypes).
  • +
  • The configuration file doesn't define a default DOCTYPE to be used now.
  • +
  • It is now possible to easily change the toolbar using the JavaScript API by just + calling <EditorInstance>.ToolbarSet.Load( '<ToolbarName>' ). See _testcases/010.html + for a sample.
  • +
  • The "OnBlur" and "OnFocus" JavaScript API events are now compatible + with all supported browsers.
  • +
  • Some few updates in the Lasso connector and uploader.
  • +
  • The GeckoUseSPAN setting is now set to "false" by default. In this way, the code + produced by the bold, italic and underline commands are the same on all browsers.
  • +
+

+ Fixed Bugs:

+
    +
  • Important security fixes have been applied to the File Manager, Uploader + and Connectors. Upgrade is highly recommended. Thanks to Alberto Moro, + Baudouin Lamourere and James Bercegay.
  • +
  • [SF + BUG-1399966] [SF + BUG-1249853] The "BaseHref" configuration is now working with + Firefox in both normal and full page modes.
  • +
  • [SF + BUG-1405263] A typo in the configuration file was impacting the Quick Upload + feature.
  • +
  • Nested <ul> and <ol> tags are now generating valid html.
  • +
  • The "wmode" and "quality" attributes are now preserved for Flash + embed tags, in case they are entered manually in the source view. Also, empty attributes + are removed from that tag.
  • +
  • Tables where not being created correctly on Opera.
  • +
  • The XHTML processor will ignore invalid tags with names ending with ":", + like http:.
  • +
  • On Firefox, the scrollbar is not anymore displayed on toolbar dropdown commands + when not needed.
  • +
  • Some small fixes have being done to the dropdown commands rendering for FF. +
  • +
  • The table dialog window has been a little bit enlarged to avoid contents being cropped + on some languages, like Russian.
  • +
  • [SF + BUG-1465203] The ieSpell download URL has been updated. The problem is that + they don't have a fixed URL for it, so let's hope the mirror will be up for it. +
  • +
  • [SF + BUG-1456332] Small fix in the Spanish language file.
  • +
  • [SF + BUG-1457078] The File Manager was generating 404 calls in the server.
  • +
  • [SF + BUG-1459846] Fixed a problem with the config file if PHP is set to parse .js + files.
  • +
  • [SF + BUG-1432120] The "UserFilesAbsolutePath" setting is not correctly + used in the PHP uploader.
  • +
  • [SF + BUG-1408869] The collapse handler is now rendering correctly in Firefox 1.5. +
  • +
  • [SF + BUG-1410082] [SF + BUG-1424240] The "moz-bindings.xml" file is now well formed.
  • +
  • [SF + BUG-1413980] All frameborder "yes/no" values have been changes to + "1/0".
  • +
  • [SF + BUG-1414101] The fake table borders are now showing correctly when running under + the "file://" protocol.
  • +
  • [SF + BUG-1414155] Small typo in the cell properties dialog window.
  • +
  • Fixed a problem in the File Manager. It was not working well with folder or file + names with apostrophes ('). Thanks to René de Jong.
  • +
  • Small "lenght" type corrected in the select dialog window. Thanks to Bernd Nussbaumer.
  • +
  • The about box is now showing correctly in Firefox 1.5.
  • +
  • [SF + Patch-1464020] [SF + BUG-1155793] The "Unlink" command is now working correctly under Firefox + if you don't have a complete link selection. Thanks to Johnny Egeland.
  • +
  • In the File Manager, it was not possible to upload files to folders with ampersands + in the name. Thanks to Mike Pone.
  • +
  • [SF + BUG-1178359] Elements from the toolbar are not anymore draggable in the editing + area.
  • +
  • [SF + BUG-1487544] Fixed a small issue in the code formatter for <br /> and + <hr /> tags.
  • +
  • The "Background Color" command now works correctly when the GeckoUseSPAN setting + is disabled (default).
  • +
  • Links are now rendered in blue with Firefox (they were black before). Actually, + an entry for it has been added to the editing area CSS, so you can customize with + the color you prefer.
  • +
+

+ * This version has been partially sponsored by Footsteps + and Kentico. +
+ ** This version has been partially sponsored by Nextide.

+

+ Version 2.2

+

+ New Features and Improvements:

+
    +
  • Let's welcome Wim Lemmens (didgiman). He's our new responsible for the ColdFusion + integration. In this version we are introducing his new files with the following + changes: +
      +
    • The "Uploader", used for quick uploads, is now available + natively for ColdFusion.
    • +
    • Small bugs have been corrected in the File Browser connector.
    • +
    • The samples now work as is, even if you don't install the editor in the "/FCKeditor" + directory.
    • +
    +
  • +
  • And a big welcome also to "Andrew Liu", our responsible for the + Python integration. This version is bringing native support for Python + , including the File Browser connector and Quick Upload.
  • +
  • The "IsDirty()" and "ResetIsDirty()" + functions have been added to the JavaScript API to check if the editor + content has been changed.*
  • +
  • New language files: +
      +
    • Hindi (by Utkarshraj Atmaram)
    • +
    • Latvian (by Janis Klavinš)
    • +
    +
  • +
  • For the interface, now we have complete RTL support also for + the drop-down toolbar commands, color selectors and context menu.
  • +
  • [SF + BUG-1325113] [SF + BUG-1277661] The new "Delete Table" command is available in the + Context Menu when right-clicking inside a table.
  • +
  • The "FCKConfig.DisableTableHandles" configuration option is now working + on Firefox 1.5.
  • +
  • The new "OnBlur" and "OnFocus" + events have been added to the JavaScript API (IE only). See "_samples/html/sample09.html" * +
  • +
  • Attention: The "GetHTML" + function has been deprecated. It now returns the same value as "GetXHTML". + The same is valid for the "EnableXHTML" and "EnableSourceXHTML" + that have no effects now. The editor now works with XHTML output only.
  • +
  • Attention: A new "PreserveSessionOnFileBrowser" + configuration option has been introduced. It makes it possible to set whenever is + needed to maintain the user session in the File Browser. It is disabled by default, + as it has very specific usage and may cause the File Browser to be blocked by popup + blockers. If you have custom File Browsers that depends on session information, + remember to activate it.
  • +
  • Attention: The "fun" + smileys set has been removed from the package. If you are using it, you must manually + copy it to newer installations and upgrades.
  • +
  • Attention: The "mcpuk" + file browser has been removed from the package. We have no ways to support it. There + were also some licensing issues with it. Its web site can still be found at + http://mcpuk.net/fbxp/.
  • +
  • It is now possible to set different CSS styles for the chars in the Special Chars + dialog window by adding the "SpecialCharsOut" and "SpecialCharsOver" + in the "fck_dialog.css" skin file.*
  • +
  • [SF + Patch-1268726] Added table "summary" support in the table dialog. + Thanks to Sebastien-Mahe.
  • +
  • [SF + Patch-1284380] It is now possible to define the icon of a FCKToolbarPanelButton + object without being tied to the skin path (just like FCKToolbarButton). Thanks + to Ian Sullivan.
  • +
  • [SF + Patch-1338610] [SF + Patch-1263009] New characters have been added to the "Special Characters" + dialog window. Thanks to Deian.
  • +
  • You can set the QueryString value "fckdebug=true" to activate "debug + mode" in the editor (showing the debug window), overriding the configurations. + The "AllowQueryStringDebug" configuration option is also available so + you can disable this feature.
  • +
+

+ Fixed Bugs:

+
    +
  • [SF + BUG-1363548] [SF + BUG-1364425] [SF + BUG-1335045] [SF + BUG-1289661] [SF + BUG-1225370] [SF + BUG-1156291] [SF + BUG-1165914] [SF + BUG-1111877] [SF + BUG-1092373] [SF + BUG-1101596] [SF + BUG-1246952] The URLs for links and + images are now correctly preserved as entered, no matter if you are using relative + or absolute paths.
  • +
  • [SF + BUG-1162809] [SF + BUG-1205638] The "Image" and "Flash" dialog windows + now loads the preview correctly if the "BaseHref" configuration option + is set.
  • +
  • [SF + BUG-1329807] The alert boxes are now showing correctly when doing cut/copy/paste + operations on Firefox installations when it is not possible to execute that operations + due to security settings.
  • +
  • A new "Panel" system (used in the drop-dowm toolbar commands, color selectors + and context menu) has been developed. The following bugs have been fixed with it: +
      +
    • [SF + BUG-1186927] On IE, sometimes the context menu was being partially hidden.* +
    • +
    • On Firefox, the context menu was flashing in the wrong position before showing. +
    • +
    • On Firefox 1.5, the Color Selector was not working.
    • +
    • On Firefox 1.5, the fonts in the panels were too big.
    • +
    • [SF + BUG-1076435] [SF + BUG-1200631] On Firefox, sometimes the context menu was being shown in the + wrong position.
    • +
    +
  • +
  • [SF + BUG-1364094] Font families were + not being rendered correctly on Firefox .
  • +
  • [SF + BUG-1315954] No error is thrown when pasting some case specific code from editor + to editor.
  • +
  • [SF + BUG-1341553] A small fix for a security alert in the File Browser has been + applied.
  • +
  • [SF + BUG-1370953] [SF + BUG-1339898] [SF + BUG-1323319] A message will be shown to the user (instead of a JS error) if + a "popup blocker" blocks the "Browser Server" button. Thanks + to Erwin Verdonk.
  • +
  • [SF + BUG-1370355] Anchor links that points to a single character anchor, like "#A", + are now correctly detected in the Link dialog window. Thanks to Ricky Casey.
  • +
  • [SF + BUG-1368998] Custom error processing has been added to the file upload on the + File Browser.
  • +
  • [SF + BUG-1367802] [SF + BUG-1207740] A message is shown to the user if a dialog box is blocked by + a popup blocker in Firefox.
  • +
  • [SF + BUG-1358891] [SF + BUG-1340960] The editor not works locally (without a web server) on directories + where the path contains spaces.
  • +
  • [SF + BUG-1357247] The editor now intercepts SHIFT + INS keystrokes when needed.
  • +
  • [SF + BUG-1328488] Attention: The Page + Break command now produces different tags to avoid XHTML compatibility + issues. Any Page Break previously applied to content produced with previous versions + of FCKeditor will not me rendered now, even if they will still be working correctly. +
  • +
  • It is now possible to allow cut/copy/past operations on Firefox using the user.js file.
  • +
  • [SF + BUG-1336792] A fix has been applied to the XHTML processor to allow tag names + with the "minus" char (-).
  • +
  • [SF + BUG-1339560] The editor now correctly removes the "selected" option + for checkboxes and radio buttons.
  • +
  • The Table dialog box now selects the table correctly when right-clicking on objects + (like images) placed inside the table.
  • +
  • Attention: A few changes have been + made in the skins. If you have a custom skin, it is recommended you to make a diff + of the fck_contextmenu.css file of the default skin with your implementation.
  • +
  • Mouse select (marking things in blue, like selecting text) has been disabled + on panels (drop-down menu commands, color selector and context menu) and toolbar, + for both IE and Firefox.
  • +
  • On Gecko, fake borders will not be applied to tables with the border attribute set + to more than 0, but placed inside tables with border set to 0.
  • +
  • [SF + BUG-1360717] A wrapping issue in the "Silver" skin has been corrected. + Thanks to Ricky Casey.
  • +
  • [SF + BUG-1251145] In IE, the focus is now maintained in the text when clicking in + the empty area following it.
  • +
  • [SF + BUG-1181386] [SF + BUG-1237791] The "Stylesheet Classes" field in the Link dialog + window in now applied correctly on IE. Thanks to Andrew Crowe.
  • +
  • The "Past from Word" dialog windows is now showing correctly on Firefox + on some languages.
  • +
  • [SF + BUG-1315008] [SF + BUG-1241992] IE, when selecting objects (like images) and hitting the "Backspace" + button, the browser's "back" will not get executed anymore and the object + will be correctly deleted.
  • +
  • The "AutoDetectPasteFromWord" is now working correctly in IE. Thanks to + Juan Ant. Gómez.
  • +
  • A small enhancement has been made in the Word pasting detection. Thanks to Juan + Ant. Gómez.
  • +
  • [SF + BUG-1090686] No more conflict with Firefox "Type-Ahead Find" feature. +
  • +
  • [SF + BUG-942653] [SF + BUG-1155856] The "width" and "height" of images sized + using the inline handlers are now correctly loaded in the image dialog box.
  • +
  • [SF + BUG-1209093] When "Full Page Editing" is active, in the "Document + Properties" dialog, the "Browse Server" button for the page background + is now correctly hidden if "ImageBrowser" is set to "false" + in the configurations file. Thanks to Richard.
  • +
  • [SF + BUG-1120266] [SF + BUG-1186196] The editor now retains the focus when selecting commands in + the toolbar.
  • +
  • [SF + BUG-1244480] The editor now will look first to linked fields "ids" + and second to "names".
  • +
  • [SF + BUG-1252905] The "InsertHtml" function now preserves URLs as entered. +
  • +
  • [SF + BUG-1266317] Toolbar commands are not anymore executed outside the editor.
  • +
  • [SF + BUG-1365664] The "wrap=virtual" attribute has been removed from the + integration files for validation purposes. No big impact.
  • +
  • [SF + BUG-972193] Now just one click is needed to active the cursor inside the editor. +
  • +
  • The hidden fields used by the editor are now protected from changes using the "Web + Developer Add-On > Forms > Display Forms Details" extension. Thanks to + Jean-Marie Griess.
  • +
  • On IE, the "Format" toolbar dropdown now reflects the current paragraph + type on IE. Because of a bug in the browser, it is quite dependent on the browser + language and the editor interface language (both must be the same). Also, as the + "Normal (DIV)" type is seen by IE as "Normal", to avoid confusion, + both types are ignored by this fix.
  • +
  • On some very rare cases, IE was loosing the "align" attribute for DIV + tags. Fixed.
  • +
  • [SF + BUG-1388799] The code formatter was removing spaces on the beginning of lines + inside PRE tags. Fixed.
  • +
  • [SF + BUG-1387135] No more "NaN" values in the image dialog, when changing + the sizes in some situations.
  • +
  • Corrected a small type in the table handler.
  • +
  • You can now set the "z-index" for floating panels (toolbar dropdowns, + color selectors, context menu) in Firefox, avoiding having them hidden under another + objects. By default it is set to 10,000. Use the FloatingPanelsZIndex configuration + option to change this value.
  • +
+

+ Special thanks to + Alfonso Martinez, who have provided many patches and suggestions for the + following features / fixes present in this version. I encourage all you to + donate to Alfonso, as a way to say thanks for his nice open source approach. + Thanks Alfonso!. Check out his contributions:

+
    +
  • [SF + BUG-1352539] [SF + BUG-1208348] With Firefox, no more "fake" selections are appearing + when inserting images, tables, special chars or when using the "insertHtml" + function.
  • +
  • [SF + Patch-1382588] The "FCKConfig.DisableImageHandles" configuration option + is not working on Firefox 1.5.
  • +
  • [SF + Patch-1368586] Some fixes have been applied to the Flash dialog box and the + Flash pre-processor.
  • +
  • [SF + Patch-1360253] [SF + BUG-1378782] [SF + BUG-1305899] [SF + BUG-1344738] [SF + BUG-1347808] On dialogs, some fields became impossible + to select or change when using Firefox. It has been fixed.
  • +
  • [SF + Patch-1357445] Add support for DIV in the Format drop-down combo for Firefox. +
  • +
  • [SF + BUG-1350465] [SF + BUG-1376175] The "Cell Properties" dialog now works correctly + when right-clicking in an object (image, for example) placed inside the cell itself. +
  • +
  • [SF + Patch-1349166] On IE, there is now support for namespaces on tags names.
  • +
  • [SF + Patch-1350552] Fix the display issue when applying styles on tables.
  • +
  • [SF + Patch-1352320 ] Fixed a wrong usage of the "parentElement" + property on Gecko.
  • +
  • [SF + Patch-1355007] The new "FCKDebug.OutputObject" function is available + to dump all object information in the debug window.
  • +
  • [SF + Patch-1329500] It is now possible to delete table columns when clicking on a + TH cell of the column.
  • +
  • [SF + Patch-1315351] It is now possible to pass the image width and height to the + "SetUrl" function of the Flash dialog box.
  • +
  • [SF + Patch-1327384] TH tags are now correctly handled by the source code formatter + and the "FillEmptyBlocks" configuration option.
  • +
  • [SF + Patch-1327406] Fake borders are now displayed for TH elements on tables with + border set to 0. Also, on Firefox, it will now work even if the border attribute + is not defined and the borders are not dotted.
  • +
  • Hidden fields now get rendered on Firefox.
  • +
  • The BasePath is now included in the debugger URL to avoid problems when calling + it from plugins.
  • +
+

+ * This version has been partially sponsored by + Alkacon Software.

+

+ Version 2.1.1

+

+ New Features and Improvements:

+
    +
  • The new "Insert Page Break" command (for printing) has + been introduced.*
  • +
  • The editor package now has a root directory called "FCKeditor".
  • +
+

+ Fixed Bugs:

+
    +
  • [SF + BUG-1326285] [SF + BUG-1316430] [SF + BUG-1323662] [SF + BUG-1326223] We are doing a little step back with this version. + The ENTER and BACKSPACE behavior changes for Firefox have been remove. It is a nice + feature, but we need much more testing on it. It introduced some bugs and so + its preferable to not have that feature, avoiding problems (even if that feature + was intended to solve some issues).
  • +
  • [SF + BUG-1275714] Comments in the beginning of the source are now preserved when + using the "undo" and "redo" commands.
  • +
  • The "undo" and "redo" commands now work for the Style command. +
  • +
  • An error in the execution of the pasting commands on Firefox has been fixed.
  • +
  • [SF + BUG-1326184] No strange (invalid) entities are created when using Firefox. Also, + the &nbsp; used by the FillEmptyBlocks setting is maintained even if you disable + the ProcessHTMLEntities setting.
  • +
+

+ * This version has been partially sponsored by + Acctive Software S.A..

+

+ Version 2.1

+

+ New Features and Improvements:

+
    +
  • [SF + BUG-1200328] The editor now offers a way to "protect" part of the + source to remain untouched while editing or changing views. Just use the "FCKConfig.ProtectedSource" + object to configure it and customize to your needs. It is based on regular expressions. + See fckconfig.js for some samples.
  • +
  • The editor now offers native support for Lasso. Thanks and welcome to + our new developer Jason Huck.
  • +
  • New language files are available: +
      +
    • Faraose (by Símin Lassaberg and Helgi Arnthorsson) +
    • +
    • Malay (by Fairul Izham Mohd Mokhlas)
    • +
    • Mongolian (by Lkamtseren Odonbaatar)
    • +
    • Vietnamese (by Phan Binh Giang)
    • +
    +
  • +
  • A new configurable ColdFusion connector is available. Thanks to Mark Woods. + Many enhancements has been introduced with it.
  • +
  • The PHP connector for the default File Browser now sorts the folders and files names. +
  • +
  • [SF + BUG-1289372] [SF + BUG-1282758] In the PHP connector it is now possible to set the absolute + (server) path to the User Files directory, avoiding problems with Virtual Directories, + Symbolic Links or Aliases. Take a look at the config.php file.
  • +
  • The ASP.Net uploader (for Quick Uploads) has been added to the package.
  • +
  • A new way to define simple "combo" toolbar items , like + Style and Font, has been introduced. Thanks to Steve Lineberry. See + sample06.html and the "simplecommands" plugin to fully understand + it.
  • +
  • A new test case has been added that shows how to set the editor background dynamically + without using a CSS.
  • +
  • [SF + BUG-1155906] [SF + BUG-1110116] [SF + BUG-1216332] The "AutoDetectPasteFromWord" configuration option + is back (IE only feature).
  • +
  • The new "OnAfterLinkedFieldUpdate" event has been introduced. If + is fired when the editor updates its hidden associated field.
  • +
  • Attention: The color of the right border of the toolbar (left on RTL interfaces) + has been moved from code to the CSS (TB_SideBorder class). Update your custom skins. +
  • +
  • A sample "htaccess.txt" file has been added to the editor's package + to show how to configure some Linux sites that could present problems on Firefox + with "Illegal characters" errors. Respectively the "" + chars.
  • +
  • With the JavaScript, ASP and PHP integration files, you can set the QueryString + value "fcksource=true" to load the editor using the source files (located + in the _source directory) instead of the compressed ones. Thanks to Kae Verens for + the suggestion.
  • +
  • [SF + Feature-1246623] The new configuration option "ForceStrongEm" has + been introduced so you can force the editor to convert all <B> and <I> + tags to <STRONG> and <EM> respectively.
  • +
  • A nice contribution has been done by Goss Interactive Ltd: +
      +
    • [SF + BUG-1246949] Implemented ENTER key and BACKSPACE key handlers for Gecko so that + P tags (or an appropriate block element) get inserted instead of BR tags when not + in the UseBROnCarriageReturn config mode. +
      + The ENTER key handling has been written to function much the same as the ENTER key + handling on IE : as soon as the ENTER key is pressed, existing content will be wrapped + with a suitable block element (P tag) as appropriate and a new block element (P + tag) will be started. +
      + The ENTER key handler also caters for pressing ENTER within empty list items - ENTER + in an empty item at the top of a list will remove that list item and start a new + P tag above the list; ENTER in an empty item at the bottom of a list will remove + that list item and start a new P tag below the list; ENTER in an empty item in the + middle of a list will remove that list item, split the list into two, and start + a new P tag between the two lists.
    • +
    • Any tables that are found to be incorrectly nested within a block element (P tag) + will be moved out of the block element when loaded into the editor. This is required + for the new ENTER/BACKSPACE key handlers and it also avoids non-compliant HTML.  +
    • +
    • The InsertOrderedList and InsertUnorderedList commands have been overridden on Gecko + to ensure that block elements (P tags) are placed around a list item's content when + it is moved out of the list due to clicking on the editor's list toolbar buttons + (when not in the UseBROnCarriageReturn config mode).
    • +
    +
  • +
+

+ Fixed Bugs:

+
    +
  • [SF + BUG-1253255] [SF + BUG-1265520] Due to changes on version 2.0, the anchor list was not anymore + visible in the link dialog window. It has been fixed.
  • +
  • [SF + BUG-1242979] [SF + BUG-1251354] [SF + BUG-1256178] [SF + BUG-1274841] [SF + BUG-1303949] Due to a bug on Firefox, some keys stopped working + on startup over Firefox. It has been fixed.
  • +
  • [SF + BUG-1251373 ] The above fix also has corrected some strange behaviors on + Firefox.
  • +
  • [SF + BUG-1144258] [SF + BUG-1092081] The File Browsers now run on the same server session used + in the page where the editor is placed in (IE issue). Thanks to Simone Chiaretta. +
  • +
  • [SF + BUG-1305619 ] No more repeated login dialogs when running the editor with Windows + Integrated Security with IIS.
  • +
  • [SF + Patch-1245304] The Test Case 004 is now working correctly. It has been changed + to set the editor hidden at startup.
  • +
  • [SF + BUG-1290610 ] Over HTTPS, there were some warnings when loading the Images, + Flash and Link dialogs. Fixed.
  • +
  • Due to Gecko bugs, two errors were thrown when loading the editor in a hidden div. + Workarounds have been introduced. In any case, the testcase 004 hack is needed when + showing the editor (as in a tabbed interface).
  • +
  • An invalid path in the dialogs CSS file has been corrected.
  • +
  • On IE, the Undo/Redo can now be controlled using the Ctrl+Z and Ctrl+Y shortcut + keys.
  • +
  • [SF + BUG-1295538 ] A few Undo/Redo fixes for IE have been done.
  • +
  • [SF + BUG-1247070] On Gecko, it is now possible to use the shortcut keys for Bold + (CTRL+B), Italic (CTRL+I) and Underline (CTRL+U), like in IE.
  • +
  • [SF + BUG-1274303] The "Insert Column" command is now working correctly + on TH cells. It also copies any attribute applied to the source cells.
  • +
  • [SF + Patch-1287070 ] In the Universal Keyboard, the Arabic keystrokes translator + is now working with Firefox. Thanks again to Abdul-Aziz Al-Oraij.
  • +
  • The editor now handles AJAX requests with HTTP status 304.
  • +
  • [SF + BUG-1157780] [SF + BUG-1229077] Weird comments are now handled correctly (ignored on some cases). +
  • +
  • [SF + BUG-1155774] A spelling error in the Bulleted List Properties dialog has been + corrected.
  • +
  • [SF + BUG-1272018] The ampersand character can now be added from the Special Chars + dialog.
  • +
  • [SF + BUG-1263161] A small fix has been applied to the sampleposteddata.php file. + Thanks to Mike Wallace.
  • +
  • [SF + BUG-1241504] The editor now looks also for the ID of the hidden linked field. +
  • +
  • The caption property on tables is now working on Gecko. Thanks to Helen Somers (Goss + Interactive Ltd).
  • +
  • [SF + BUG-1297431] With IE, the editor now works locally when its files are placed + in a directory path that contains spaces.
  • +
  • [SF + BUG-1279551] [SF + BUG-1242105] On IE, some features are dependant of ActiveX components (secure... + distributed with IE itself). Some security setting could avoid the usage of + those components and the editor would stop working. Now a message is shown, indicating + the use the minimum necessary settings need by the editor to run.
  • +
  • [SF + BUG-1298880] Firefox can't handle the STRONG and EM tags. Those tags are now + converted to B and I so it works accordingly.
  • +
  • [SF + BUG-1271723] On IE, it is now possible to select the text and work correctly + in the contents of absolute positioned/dimensioned divs.
  • +
  • On IE, there is no need to click twice in the editor to activate the cursor + in the editing area.
  • +
  • [SF + BUG-1221621] Many "warnings" in the Firefox console are not thrown + anymore.
  • +
  • [SF + BUG-1295526] While editing on "FullPage" mode the basehref is + now active for CSS "link" tags.
  • +
  • [SF + Patch-1222584] A small fix to the PHP connector has been applied.
  • +
  • [SF + Patch-1281313] A few small changes to avoid problems with Plone. Thanks to Jean-mat. +
  • +
  • [SF + BUG-1275911] A check for double dots sequences on directory names on creation + has been introduced to the PHP and ASP connectors.
  • +
+

+ Version 2.0

+

+ New Features and Improvements:

+
    +
  • The new "Flash" command is available. Now you can + easily handle Flash content, over IE and Gecko, including server browser integration + and context menu support. Due to limitations of the browsers, it is not possible + to see the preview of the movie while editing, so a nice "placeholder" + is used instead. *
  • +
  • A "Quick Upload " option is now available in the + link, image and flash dialog windows, so the user don't need to go (or have) the + File Browser for this operations. The ASP and PHP uploader are included. Take + a look at the configuration file.***
  • +
  • Added support for Active FoxPro Pages . Thanks to our new developer, + Sönke Freitag.
  • +
  • It is now possible to disable the size handles for images and tables + (IE only feature). Take a look at the DisableImageHandles and DisableTableHandles + configuration options.
  • +
  • The handles on form fields (small squares around them) and the inline editing + of its contents have been disabled. This makes it easier to users to use + the controls.
  • +
  • A much better support for Word pasting operations has been introduced. Now it uses + a dialog box, in this way we have better results and more control.**
  • +
  • [SF + Patch-1225372] A small change has been done to the PHP integration file. The + generic __construct constructor has been added for better PHP 5 sub-classing compatibility + (backward compatible). Thanks to Marcus Bointon.
  • +
+

+ Fixed Bugs:

+
    +
  • ATTENTION: Some security changes have been made to the connectors. Now you must + explicitly enable the connector you want to use. Please test your application before + deploying this update.
  • +
  • [SF + BUG-1211591] [SF + BUG-1204273] The connectors have been changed so it is not possible to use + ".." on directory names.
  • +
  • [SF + Patch-1219734] [SF + BUG-1219728] [SF + BUG-1208654] [SF + BUG-1205442] There was an error in the page unload on some cases + that has been fixed.
  • +
  • [SF + BUG-1209708] [SF + BUG-1214125] The undo on IE is now working correctly when the user starts + typing.
  • +
  • The preview now loads "Full Page" editing correctly. It also uses the + same XHTML code produced by the final output.
  • +
  • The "Templates" dialog was not working on some very specific (and strange) + occasions over IE.
  • +
  • [SF + BUG-1199631] [SF + BUG-1171944] A new option is available to avoid a bad IE behavior that shows + the horizontal scrollbar even when not needed. You can now force the vertical scrollbar + to be always visible. Just set the "IEForceVScroll" configuration option + to "true". Thanks to Grant Bartlett.
  • +
  • [SF + Patch-1212026] [SF + BUG-1228860] [SF + BUG-1211775] [SF + BUG-1199824] An error in the Packager has been corrected.
  • +
  • [SF + BUG-1163669] The XHTML processor now adds a space before the closing slash of + tags that don't have a closing tag, like <br />.
  • +
  • [SF + BUG-1213733] [SF + BUG-1216866] [SF + BUG-1209673] [SF + BUG-1155454] [SF + BUG-1187936 ] Now, on Gecko, the source is opened in a + dialog window to avoid fatal errors (Gecko bugs).
  • +
  • Some pages have been changed to avoid importing errors on Plone. Thanks to Arthur + Kalmenson.
  • +
  • [SF + BUG-1171606] There is a bug on IE that makes the editor to not work if + the instance name matches a meta tag name. Fixed.
  • +
  • On Firefox, the source code is now opened in a dialog box, to avoid error on pages + with more than one editor.
  • +
  • [SF + Patch-1225703] [SF + BUG-1214941] The "ForcePasteAsPlainText" configuration option + is now working correctly on Gecko browsers. Thanks to Manuel Polo.
  • +
  • [SF + BUG-1228836] The "Show Table Borders" feature is now working on Gecko + browsers.
  • +
  • [SF + Patch-1212529] [SF + BUG-1212517] The default File Browser now accepts connectors with querystring + parameters (with "?"). Thanks to Tomas Jucius.
  • +
  • [SF + BUG-1233318] A JavaScript error thrown when using the Print command has been + fixed.
  • +
  • [SF + BUG-1229696] A regular expression has been escaped to avoid problems when opening + the code in some editors. It has been moved to a dialog window.
  • +
  • [SF + BUG-1231978] [SF + BUG-1228939] The Preview window is now using the Content Type and Base href. +
  • +
  • [SF + BUG-1232056] The anchor icon is now working correctly on IE.
  • +
  • [SF + BUG-1202468] The anchor icon is now available on Gecko too.
  • +
  • [SF + BUG-1236279] A security warning has been corrected when using the File Browser + over HTTPS.
  • +
  • The ASP implementation now avoid errors when setting the editor value to null values. +
  • +
  • [SF + BUG-1237359] The trailing <BR> added by Gecko at the end of the source + is now removed.
  • +
  • [SF + BUG-1170828] No more &nbsp; is added to the source when using the "New + Page" button.
  • +
  • [SF + BUG-1165264] A new configuration option has been included to force the + editor to ignore empty paragraph values (<p>&nbsp;</p>), returning + empty ("").
  • +
  • No more &nbsp; is added when creating a table or adding columns, rows or cells. +
  • +
  • The <TD> tags are now included in the FillEmptyBlocks configuration handling. +
  • +
  • [SF + BUG-1224829] A small bug in the "Find" dialog has been fixed.
  • +
  • [SF + BUG-1221307] A small bug in the "Image" dialog has been fixed.
  • +
  • [SF + BUG-1219981] [SF + BUG-1155726] [SF + BUG-1178473] It is handling the <FORM>, <TEXTAREA> and <SELECT> + tags "name" attribute correctly. Thanks to thc33.
  • +
  • [SF + BUG-1205403] The checkbox and radio button values are now handled correctly + in their dialog windows. Thanks to thc33.
  • +
  • [SF + BUG-1236626] The toolbar now doesn't need to collapse when unloading the page + (IE only).
  • +
  • [SF + BUG-1212559] [SF + BUG-1017231] The "Save" button now calls the "onsubmit" + event before posting the form. The submit can be cancelled if the onsubmit returns + "false".
  • +
  • [SF + BUG-1215823] The editor now works correctly on Firefox if it values is set to + "<p></p>".
  • +
  • [SF + BUG-1217546] No error is thrown when "pasting as plain text" and no + text is available for pasting (as an image for example).
  • +
  • [SF + BUG-1207031] [SF + BUG-1223978] The context menu is now available in the source view.
  • +
  • [SF + BUG-1213871] Undo has been added to table creation and table operation commands. +
  • +
  • [SF + BUG-1205211] [SF + BUG-1229941] Small bug in the mcpuk file browser have been corrected.
  • +
+

+ * This version has been partially sponsored by + Infineon Technologies AG.
+ ** This version has been partially sponsored by + Visualsoft Web Solutions.
+ *** This version has been partially sponsored by + Web Crossing, Inc.

+

+ Version 2.0 FC (Final Candidate)

+

+ New Features and Improvements:

+
    +
  • A new tab called "Link" is available in the Image + Dialog window. In this way you can insert or modify the image link directly + from that dialog.*
  • +
  • The new "Templates" command is now available. Now the + user can select from a list of pre-build HTML and fill the editor with it. Take + a look at the "_docs" for more info.**
  • +
  • The mcpuk's File Browser for + PHP has been included in the package. He became the official developer of the File + Manager for FCKeditor, so we can expect good news in the future.
  • +
  • New configuration options are available to hide tabs from the + Image Dialog and Link Dialog windows: LinkDlgHideTarget, + LinkDlgHideAdvanced, ImageDlgHideLink and ImageDlgHideAdvanced.
  • +
  • [SF + BUG-1189442] [SF + BUG-1187164] [SF + BUG-1185905] It is now possible to configure the editor to not convert Greek + or special Latin letters to ther specific HTML entities. You + can also configure it to not convert any character at all. Take a look at the "ProcessHTMLEntities", + "IncludeLatinEntities" and "IncludeGreekEntities" configuration + options.
  • +
  • New language files are available: +
      +
    • Basque (by Ibon Igartua)
    • +
    • English (Australia / United Kingdom) (by Christopher Dawes)
    • +
    • Ukrainian (by Alexander Pervak)
    • +
    +
  • +
  • The version and date information have been removed from the files headers to avoid + unecessary diffs in source control systems when new versions are released (from + now on).
  • +
  • [SF + Patch-1159854] Ther HTML output rendered by the server side integration files + are now XHTML compatible.
  • +
  • [SF + BUG-1181823] It is now possible to set the desired DOCTYPE to use when edit + HTML fragments (not in Full Page mode).
  • +
  • There is now an optional way to implement different "mouse over" effects + to the buttons when they are "on" of "off".
  • +
+

+ Fixed Bugs:

+ +

+ * This version has been partially sponsored by the + Hamilton College.
+ ** This version has been partially sponsored by + Infineon Technologies AG.

+

+ Version 2.0 RC3 (Release Candidate 3)

+

+ New Features and Improvements:

+
    +
  • The editor now offers native Perl integration! Thanks and welcome + to Takashi Yamaguchi, our official Perl developer.
  • +
  • [SF + Feature-1026584] [SF + Feature-1112692] Formatting has been introduced to the + Source View. The output HTML can also be formatted. You can choose + to use spaces or tab for indentation. See the configuration file.
  • +
  • [SF + Feature-1031492] [SF + Feature-1004293] [SF + Feature-784281] It is now possible to edit full HTML pages + with the editor. Use the "FullPage" configuration setting to activate + it.
  • +
  • The new toolbar command, "Document Properties" is + available to edit document header info, title, colors, background, etc... Full page + editing must be enabled.
  • +
  • [SF + Feature-1151448] Spell Check is now available. You can use + ieSpell or Speller Pages right from FCKeditor. + More info about configuration can be found in the _docs folder.
  • +
  • [SF + Feature-1041686] [SF + Feature-1086386] [SF + Feature-1124602] New "Insert Anchor" command + has been introduced. (The anchor icon is visible only over IE for now).
  • +
  • [SF + Feature-1123816] It is now possible to configure the editor to show "fake" + table borders when the border size is set to zero. (It is working only + on IE for now).
  • +
  • Numbered and Bulleted lists can now be + configured . Just right click on then.
  • +
  • [SF + Feature-1088608] [SF + Feature-1144047] [SF + Feature-1149808] A new configuration setting is available, "BaseHref + ", to set the URL used to resolve relative links.
  • +
  • It is now possible to set the content language direction . + See the "FCKConfig.ContentLangDirection" configurations setting.
  • +
  • All Field Commands available on version 1.6 have been upgraded + and included in this version: form, checkbox, + radio button, text field, text area, + select field, button, image button + and hidden field .
  • +
  • Context menu options (right-click) has been added for: + anchors, select field, textarea, + checkbox, radio button, text field, + hidden field, textarea, button, + image button, form, bulleted list + and numbered list .
  • +
  • The "Universal Keyboard" has been converted from version + 1.6 to this one and it's now available.
  • +
  • It is now possible to configure the items to be shown in the + context menu . Just use the FCKConfig.ContextMenu option at fckconfig.js. +
  • +
  • A new configuration (FillEmptyBlocks) is available to force the editor to + automatically insert a &nbsp; on empty block elements (p, div, pre, + h1, etc...) to avoid differences from the editing and the final result. (Actually, + the editor automatically "grows" empty elements to make the user able + to enter text on it). Attention: the extra &nbsp; will be added when switching + from WYSIWYG to Source View, so the user may see an additional space on empty blocks. + (XHTML support must be enabled).
  • +
  • It is now possible to configure the toolbar to "break + " between two toolbar strips. Just insert a "/" between then. Take + a look at fckconfig.js for a sample.
  • +
  • New Language files are available: +
      +
    • Brazilian Portuguese (by Carlos Alberto Tomatis Loth)
    • +
    • Bulgarian (by Miroslav Ivanov)
    • +
    • Esperanto (by Tim Morley)
    • +
    • Galician (by Fernando Riveiro Lopez)
    • +
    • Japanese ( by Takashi Yamaguchi)
    • +
    • Persian (by Hamed Taj-Abadi)
    • +
    • Romanian (by Adrian Nicoara)
    • +
    • Slovak (by Gabriel Kiss)
    • +
    • Thai (by Audy Charin Arsakit)
    • +
    • Turkish (by Reha Biçer)
    • +
    • The Chinese Traditional has been set as the default (zn) instead of zn-tw.
    • +
    +
  • +
  • Warning: All toolbar image images have been changed. The "button." prefix + has been removed. If you have your custom skin, please rename your files.
  • +
  • A new plugin is available in the package: "Placeholders". + In this way you can insert non editable tags in your document to be processed on + server side (very specific usage).
  • +
  • The ASPX files are no longer available in this package. They have been moved to + the FCKeditor.Net package. In this way the ASP.Net integration is much better organized. +
  • +
  • The FCKeditor.Packager program is now part of the main package. It is not anymore distributed + separately.
  • +
  • The PHP connector now sets the uploaded file permissions (chmod) to 0777.
  • +
  • [SF + Patch-1090215] It's now possible to give back more info from your custom image + browser calling the SetUrl( url [, width] [, height] [, alt] ). Thanks to Ben Noblet. +
  • +
  • The package files now maintain their original "Last Modified" date, so + incremental FTP uploads can be used to update to new versions of the editor + (from now on).
  • +
  • The "Source" view now forces its contents to be written in "Left + to Right" direction even when the editor interface language is running a RTL + language (like Arabic, Hebrew or Persian).
  • +
+

+ Fixed Bugs:

+
    +
  • [SF + BUG-1124220] [SF + BUG-1119894] [SF + BUG-1090986] [SF + BUG-1100408] The editor now works correctly when starting with an + empty value and switching to the Source mode.
  • +
  • [SF + BUG-1119380] [SF + BUG-1115750] [SF + BUG-1101808] The problem with the scrollbar and the toolbar combos (Style, + Font, etc...) over Mac has been fixed.
  • +
  • [SF + BUG-1098460] [SF + BUG-1076544] [SF + BUG-1077845] [SF + BUG-1092395] A new upload class has been included for the ASP File + Manager Connector. It uses the "ADODB.Stream" object. Many thanks to "NetRube". +
  • +
  • I small correction has been made to the ColdFusion integration files. Thanks to + Hendrik Kramer.
  • +
  • There was a very specific problem when the editor was running over a FRAME executed + on another domain.
  • +
  • The performance problem on Gecko while typing quickly has been solved.
  • +
  • The <br type= "_moz">is not anymore shown on XHTML source.
  • +
  • It has been introduced a mechanism to avoid automatic contents duplication on very + specific occasions (bad formatted HTML).
  • +
  • [SF + BUG-1146407] [SF + BUG-1145800] [SF + BUG-1118803 ] Other issues in the XHTML processor have been solved. +
  • +
  • [SF + BUG-1143969] The editor now accepts the "accept-charset" attribute + in the FORM tag (IE specific bug).
  • +
  • [SF + BUG-1122742] [SF + BUG-1089548 ] Now, the contents of the SCRIPT and STYLE tags remain untouched. +
  • +
  • [SF + BUG-1114748] The PHP File Manager Connector now sets the new folders permissions + (chmod) to 0777 correctly.
  • +
  • The PHP File Manager Connector now has a configuration file (editor/filemanager/browser/default/connectors/php/config.php) + to set some security preferences.
  • +
  • The ASP File Manager Connector now has a configuration file (editor/filemanager/browser/default/connectors/asp/config.asp) + to set some security preferences.
  • +
  • A small bug in the toolbar rendering (strips auto position) has been corrected. +
  • +
  • [SF + BUG-1093732] [SF + BUG-1091377] [SF + BUG-1083044] [SF + BUG-1096307] The configurations are now encoded so a user can use + values that has special chars (&=/).
  • +
  • [SF + BUG-1103688] [SF + BUG-1092331] [SF + BUG-1088220] PHP samples now use PHP_SELF to automatically discover + the editor's base path.
  • +
  • Some small wrapping problems with some labels in the Image and Table dialog windows + have been fixed.
  • +
  • All .js files are now encoded in UTF-8 format with the BOM (byte order mask) to + avoid some errors on specific Linux installations.
  • +
  • [SF + BUG-1114449] The editor packager program has been modified so now it is possible + to use the source files to run the editor as described in the documentation. The + new packager must be downloaded.
  • +
  • A small problem with the editor focus while in source mode has been corrected. + Thanks to Eric (ric1607).
  • +
  • [SF + BUG-1108167] [SF + BUG-1085149] [SF + BUG-1151296] [SF + BUG-1082433] No more IFRAMEs without src attribute. Now it points + to a blank page located in the editor's package. In this way we avoid security warnings + when using the editor over HTTPS. Thanks to Guillermo Bozovich.
  • +
  • [SF + BUG-1117779] The editor now works well if you have more than one element named + "submit" on its form (even if it is not correct to have this situation). +
  • +
  • The XHTML processor was duplicating the text on some specific situation. It has + been fixed.
  • +
  • [SF + Patch-1090213] [SF + Patch-1098929] With ASP, the editor now works correctly on pages using "Option + Explicit". Thanks to Ben Noblet.
  • +
  • [SF + BUG-1100759] [SF + BUG-1029125] [SF + BUG-966130] The editor was not working with old IE 5.5 browsers. There + was a problem with the XML parser. It has been fixed.
  • +
  • The localization engine is now working correctly over IE 5.5 browsers.
  • +
  • Some commands where not working well over IE 5.5 (emoticons, image,...). It has + been fixed.
  • +
  • [SF + BUG-1146441] [SF + BUG-1149777] The editor now uses the TEXTAREA id in the ReplaceTextarea + function. If the id is now found, it uses the "name". The docs have been + updated.
  • +
  • [SF + BUG-1144297] Some corrections have been made to the Dutch language file. Thanks + to Erwin Dondorp.
  • +
  • [SF + BUG-1121365] [SF + BUG-1090102] [SF + BUG-1152171] [SF + BUG-1102907] There is no problem now to start the editor with values + like "<div></div>" or "<p></p>".
  • +
  • [SF + BUG-1114059] [SF + BUG-1041861] The click on the disabled options in the Context Menu has no + effects now.
  • +
  • [SF + BUG-1152617] [SF + BUG-1102441] [SF + BUG-1095312] Some problems when setting the editor source to very specific + values has been fixed.
  • +
  • [SF + BUG-1093514] [SF + BUG-1089204] [SF + BUG-1077609] The editor now runs correctly if called directly (locally) without + a server installation (just opening the HTML sample files).
  • +
  • [SF + BUG-1088248] The editor now uses a different method to load its contents. In + this way the URLs remain untouched.
  • +
  • The PHP integration file now detects Internet Explorer 5.5 correctly.
  • +
+

+ Version 2.0 RC2 (Release Candidate 2)

+
    +
  • [SF + Feature-1042034] [SF + Feature-1075961] [SF + Feature-1083200] A new dialog window for the table cell properties + is now available (right-click).
  • +
  • [SF + Feature-1042034] The new "Split Cell ", to split + a table cell in two columns, has been introduced (right-click).
  • +
  • [SF + Feature-1042034] The new "Merge Cells", to merge + table cells (in the same row), has been introduced (right-click).
  • +
  • The "fake" TAB key support (available by default over + Gecko browsers is now available over IE too. You can set the number of spaces to + add setting the FCKConfig.TabSpaces configuration setting. Set it to 0 (zero) to + disable this feature (IE).
  • +
  • It now possible to tell IE to send a <BR> when the user presses + the Enter key. Take a look at the FCKConfig.UseBROnCarriageReturn + configuration setting.
  • +
  • [SF + Feature-1085422] ColdFusion: The File Manager connector + is now available! (Thanks to Hendrik Kramer).
  • +
  • The editor is now available in 29 languages! The new language files + available are:  +
      +
    • [SF + Feature-1067775] Chinese Simplified and Traditional (Taiwan + and Hong Kong) (by NetRube).
    • +
    • Czech (by David Horák).
    • +
    • Danish (by Jesper Michelsen).
    • +
    • Dutch (by Bram Crins).
    • +
    • German (by Maik Unruh).
    • +
    • Portuguese (Portugal) (by Francisco Pereira).
    • +
    • Russian (by Andrey Grebnev).
    • +
    • Slovenian (by Boris Volaric).
    • +
    +
  • +
  • Updates to the French language files (by Hubert Garrido).
  • +
  • [SF + BUG-1085816] [SF + BUG-1083743] [SF + BUG-1078783] [SF + BUG-1077861] [SF + BUG-1037404] Many small bugs in the XHTML processor + has been corrected (workarounds to browser specific bugs). These are some things + to consider regarding the changes: +
      +
    • [SF + BUG-1083744] On Gecko browsers, any element attribute that the name starts with + "_moz" will be ignored.
    • +
    • [SF + BUG-1060073] The <STYLE> and <SCRIPT> elements contents will be + handled as is, without CDATA tag surrounding. This may break XHTML validation. In + any case the use of external files for scripts and styles is recommended (W3C recommendation).
    • +
    +
  • +
  • [SF + BUG-1088310] [SF + BUG-1078837] [SF + BUG-999792] URLs now remain untouched when initializing the editor or + switching from WYSYWYG to Source and vice versa.
  • +
  • [SF + BUG-1082323] The problem in the ASP and PHP connectors when handling non + "strange" chars in file names has been corrected.
  • +
  • [SF + BUG-1085034] [SF + BUG-1076796] Some bugs in the PHP connector have been corrected.
  • +
  • A problem with the "Format" command on IE browsers on languages different + of English has been solved. The negative side of this correction is that due to + a IE bad design it is not possible to update the "Format" combo while + moving throw the text (context sensitive).
  • +
  • On Gecko browsers, when selecting an image and executing the "New Page" + command, the image handles still appear, even if the image is not available anymore + (this is a Gecko bug). When clicking in a "phanton" randle, the browser + crashes. It doesn't happen (the crash) anymore.
  • +
  • [SF + BUG-1082197] On ASP, the bug in the browser detection system for Gecko browsers + has been corrected. Thanks to Alex Varga.
  • +
  • Again on ASP, the browser detection for IE had some problems on servers that use + comma for decimal separators on numbers. It has been corrected. Thanks to Agrotic. +
  • +
  • No error is thrown now when non existing language is configured in the + editor. The English language file is loaded in that case.
  • +
  • [SF + BUG-1077747] The missing images on the Office2003 and Silver skins are now included + in the package.
  • +
  • On some Gecko browsers, the dialog window was not loading correctly. I couldn't + reproduce the problem, but a fix has been applied based on users tests.
  • +
  • [SF + BUG-1004078] ColdFusion: The "config" structure/hash table with keys + and values is in ColdFusion not(!) case sensitive. All keys returned by ColdFusion + are in upper case format. Because the FCKeditor configuration keys must be case + sensitive, we had to match all structure/hash keys with a list of the correct configuration + names in mixed case. This has been added to the fckeditor.cfc and fckeditor.cfm. +
  • +
  • [SF + BUG-1075166] ColdFusion: The "fallback" variant of the texteditor + (<textarea>) has a bug in the fckeditor.cfm. This has been fixed.
  • +
  • A typo in the Polish language file has been corrected. Thanks to Pawel Tomicki. +
  • +
  • [SF + BUG-1086370] A small coding type in the Link dialog window has been corrected. +
  • +
+

+ Version 2.0 RC1 (Release Candidate 1)

+
    +
  • ASP support is now available (including the File Manager connector). +
  • +
  • PHP support is now available (including the File Manager connector). +
  • +
  • [SF + Feature-1063217] The new advanced Style command is available + in the toolbar: full preview, context sensitive, style definitions are loaded from + a XML file (see documentation for more instructions).
  • +
  • The Font Format, Font Name and Font Size + toolbar command now show a preview of the available options.
  • +
  • The new Find and Replace features has been introduced. +
  • +
  • A new Plug-in system has been developed. Now it is quite easy to + customize the editor to your needs. (Take a look at the html/sample06.html file). +
  • +
  • The editor now handles HTML entities in the right way (XHTML support + must be set to "true"). It handles all entities defined in the W3C XHTML + DTD file.
  • +
  • A new "_docs" folder has been introduced for the documentation. + It is not yet complete, but I hope the community will help us to fill it better. +
  • +
  • It is now possible (even if it is not recommended by the W3C) to force the use of + simple ampersands (&) on attributes (like the links href) instead of its entity + &amp;. Just set FCKConfig.ForceSimpleAmpersand = true in the configuration + file.
  • +
  • [SF + Feature-1026866] The "EditorAreaCSS" configuration + option has been introduced. In this way you can set the CSS to use in the editor + (editable area).
  • +
  • The editing area is not anymore clipped if the toolbar is too large and exceeds + the window width.
  • +
  • [SF + BUG-1064902] [SF + BUG-1033933] The editor interface is now completely localizable. + The version ships with 19 languages including: Arabic, Bosnian, Catalan, + English, Spanish, Estonian, Finnish, French, + Greek, Hebrew, Croatian, Italian, Korean, Lithuanian, + Norwegian, Polish, Serbian (Cyrillic), + Serbian (Latin) and Swedish.
  • +
  • [SF + BUG-1027858] Firefox 1.0 PR introduced a bug that made the editor + stop working on it. A workaround has been developed to fix the problem.
  • +
  • There was a positioning problem over IE with the color panel. It has been corrected. +
  • +
  • [SF + BUG-1049842] [SF + BUG-1033832] [SF + BUG-1028623] [SF + BUG-1026610] [SF + BUG-1064498] The combo commands in the toolbar were not opening + in the right way. It has been fixed.
  • +
  • [SF + BUG-1053399] [SF + BUG-965318] [SF + BUG-1018296] The toolbar buttons icons were not showing on some IE and + Firefox/Mac installations. It has been fixed.
  • +
  • [SF + BUG-1054621] Color pickers are now working with the "office2003" and + "silver" skins.
  • +
  • [SF + BUG-1054108] IE doesn’t recognize the "&apos;" entity for + apostrophes, so a workaround has been developed to replace it with "&#39;" + (its numeric entity representation).
  • +
  • [SF + BUG-983434] [SF + BUG-983398] [SF + BUG-1028103] [SF + BUG-1072496] The problem with elements with name "submit" + inside the editor's form has been solved.
  • +
  • [SF + BUG-1018743] The problem with Gecko when collapsing the toolbar while in source + mode has been fixed.
  • +
  • [SF + BUG-1065268] [SF + BUG-1034354] The XHTML processor now doesn’t use the minimized tag + syntax (like <br/>) for empty elements that are not marked as EMPTY in the + W3C XHTML DTD specifications.
  • +
  • [SF + BUG-1029654] [SF + BUG-1046500] Due to a bug on Gecko there was a problem when creating links. + It has been fixed.
  • +
  • [SF + BUG-1065973] [SF + BUG-999792] The editor now handles relative URLs in IE. In effect IE transform + all relative URLs to absolute links, pointing to the site the editor is running. + So now the editor removes the protocol and host part of the link if it matches the + running server.
  • +
  • [SF + BUG-1071824] The color dialog box bug has been fixed.
  • +
  • [SF + BUG-1052856] [SF + BUG-1046493] [SF + BUG-1023530] [SF + BUG-1025978] The editor now doesn’t throw an error if no selection + was made and the create link command is used.
  • +
  • [SF + BUG-1036756] The XHTML processor has been reviewed.
  • +
  • [SF + BUG-1029101] The Paste from Word feature is working correctly.
  • +
  • [SF + BUG-1034623] There is an IE bug when setting the editor value to "<p><hr></p>". + A workaround has been developed.
  • +
  • [SF + BUG-1052695] There are some rendering differences between Netscape and Mozilla. + (Actually that is a bug on both browsers). A workaround has been developed to solve + it.
  • +
  • [SF + BUG-1073053] [SF + BUG-1050394] The editor doesn’t throw errors when hidden.
  • +
  • [SF + BUG-1066321] Scrollbars should not appear on dialog boxes (at least for the + Image and Link ones).
  • +
  • [SF + BUG-1046490] Dialogs now are forced to show on foreground over Mac.
  • +
  • [SF + BUG-1073955] A small bug in the image dialog window has been corrected.
  • +
  • [SF + BUG-1049534] The Resources Browser window is now working well over Gecko browsers. +
  • +
  • [SF + BUG-1036675] The Resources Browser window now displays the server error on bad + installations.
  • +
+

+ Version 2.0 Beta 2

+
    +
  • There is a new configuration - "GeckoUseSPAN" - that + can be used to tell Gecko browsers to use <SPAN style...> or <B>, <I> + and <U> for the bold, italic and underline commands.
  • +
  • [SF + Feature-1002622] New Text Color and Background Color +  commands have been added to the editor.
  • +
  • On Gecko browsers, a message is shown when, because of security settings, the + user is not able to cut, copy or paste data from the clipboard using the + toolbar buttons or the context menu.
  • +
  • The new "Paste as Plain Text " command has been introduced. +
  • +
  • The new "Paste from Word " command has been introduced. +
  • +
  • A new configuration named "StartupFocus" can be used to tell the + editor to get the focus when the page is loaded.
  • +
  • All Java integration files has been moved to a new separated package. +
  • +
  • [SF + BUG-1016781] Table operations are now working when right click + inside a table. The following commands has been introduced: Insert Row, + Delete Row, Insert Column, Delete Column, + Insert Cell and Delete Cells .
  • +
  • [SF + BUG-965067] [SF + BUG-1010379] [SF + BUG-977713] XHTML support was not working with FireFox, blocking the + editor when submitting data. It has been fixed.
  • +
  • [SF + BUG-1007547 ] [SF + BUG-974595 ] The "FCKLang not defined" error when loading + has been fixed.
  • +
  • [SF + BUG-1021028] If the editor doesn't have the focus, some commands were been executed + outside the editor in the place where the focus is. It has been fixed.
  • +
  • [SF + BUG-981191] We are now using <!--- ---> for ColdFusion comments.
  • +
+

+ Version 2.0 Beta 1

+

+ This is the first beta of the 2.x series. It brings a lot of new and important things. + Beta versions will be released until all features available on version 1.x will + be introduced in the 2.0.
+
+ Note: As it is a beta, it is not yet completely developed. Future + versions can bring new features that can break backward compatibility with this + version. +

+
    +
  • Gecko browsers (Mozilla and Netscape) support. +
  • +
  • Quick startup response times.
  • +
  • Complete XHTML 1.0 support.
  • +
  • Advanced link dialog box: +
      +
    • Target selection.
    • +
    • Popup configurator.
    • +
    • E-Mail link.
    • +
    • Anchor selector.
    • +
    +
  • +
  • New File Manager.
  • +
  • New dialog box system, with tabbed dialogs support.
  • +
  • New context menus with icons.
  • +
  • New toolbar with "expand/collapse" feature.
  • +
  • Skins support.
  • +
  • Right to left languages support.
  • +
+

+ Version 1.6.1

+
    +
  • [SF + BUG-862364] [SF + BUG-812733] There was a problem when the user tried to delete the last row, + collumn or cell in a table. It has been corrected.*
  • +
  • New Estonian language file. Thanks to Kristjan Kivikangur
  • +
  • New Croatian language file. Thanks to Alex Varga.
  • +
  • Updated language file for Czech. Thanks to Plachow.
  • +
  • Updated language file for Chineze (zh-cn). Thanks to Yanglin.
  • +
  • Updated language file for Catalan. Thanks to Jordi Cerdan.
  • +
+

+ * This version has been partially sponsored by Genuitec, + LLC.

+

+ Version 1.6

+
    +
  • Context Menu support for form elements.*
  • +
  • New "Selection Field" command with advanced dialog box + for options definitions.*
  • +
  • New "Image Button" command is available.*
  • +
  • [SF + Feature-936196] Many form elements bugs has been fixed and + many improvements has been done.*
  • +
  • New Java Integration Module. There is a complete Java API and Tag + Library implementations. Take a look at the _jsp directory. Thanks to Simone Chiaretta + and Hao Jiang.
  • +
  • The Word Spell Checker can be used. To be able to run it, your + browser security configuration "Initialize and script ActiveX controls not + marked as safe" must be set to "Enable" or "Prompt". And + easier and more secure way to do that is to add your site in the list of trusted + sites. IeSpell can still be used. Take a look at the fck_config.js file for some + configuration options. Thanks to EdwardRF.
  • +
  • [SF + Feature-748807] [SF + Feature-801030] [SF + Feature-880684] New "Anchor" command, including + context menu support. Thanks to G.Meijer.
  • +
  • Special characters are replaced with their decimal HTML entities when the XHMTL + support is enabled (only over IE5.5+).
  • +
  • New Office 2003 Style toolbar icons are available. Just uncomment + the config.ToolbarImagesPath key in the fck_config.js file. Thanks to Abdul-Aziz + A. Al-Oraij. Attention: the default toolbar items have been moved + to the "images/toolbar/default" directory.
  • +
  • [SF + Patch-934566] Double click support for Images, Tables, Links, + Anchors and all Form elements. Thanks to Top Man.
  • +
  • New "New Page" command to start a typing from scratch. + Thanks to Abdul-Aziz A. Al-Oraij.
  • +
  • New "Replace" command. Thanks to Abdul-Aziz A. Al-Oraij. +
  • +
  • New "Advanced Font Style" command. Thanks to Abdul-Aziz + A. Al-Oraij.
  • +
  • [SF + Feature-738193] New "Save" command. It can be used + to simulate a save action, but in fact it just submits the form where the editor + is placed in. Thanks to Abdul-Aziz A. Al-Oraij.
  • +
  • New "Universal Keyboard" command. This 22 charsets are + available: Arabic, Belarusian, Bulgarian, Croatian, Czech, Danish, Finnish, French, + Greek, Hebrew, Hungarian, Diacritical, Macedonian, Norwegian, Polish, Russian, Serbian + (Cyrillic), Serbian (Latin), Slovak, Spanish, Ukrainian and Vietnamese. Includes + a keystroke listener to type Arabic on none Arabic OS or machine. Thanks to Abdul-Aziz + A. Al-Oraij.
  • +
  • [SF + Patch-935358] New "Preview" command. Context menu + option is included and can be deactivated throw the config.ShowPreviewContextMenu + configuration. Thanks to Ben Ramsey.
  • +
  • New "Table Auto Format" context menu command. Hack a + little the fck_config.js and the fck_editorarea.css files. Thanks to Alexandros + Lezos.
  • +
  • New "Bulleted List Properties " context menu to define + its type and class. Thanks to Alexandros Lezos.
  • +
  • The image dialog box has been a redesigned . Thanks + to Mark Fierling.
  • +
  • Images now always have the "alt" attribute set, even + when it's value is empty. Thanks to Andreas Barnet.
  • +
  • [SF + Patch-942250] You can set on fck_config.js to automatically clean Word + pasting operations without a user confirmation.
  • +
  • Forms element dialogs and other localization pending labels has been updated.
  • +
  • A new Lithuanian language file is available. Thanks to Tauras Paliulis. +
  • +
  • A new Hebrew language file is available. Thanks to Ophir Radnitz. +
  • +
  • A new Serbian language file is available. Thanks to Zoran Subic. +
  • +
  • Danish language file updates. Thanks to Flemming Jensen.
  • +
  • Catalan language file updates. Thanks to Jordi Cerdan.
  • +
  • [SF + Patch-936514] [SF + BUG-918716] [SF + BUG-931037] [SF + BUG-865864] [SF + BUG-915410] [SF + BUG-918716] Some languages files were not + saved on UTF-8 format causing some javascript errors on loading + the editor or making "undefined" to show on editor labels. This problem + was solved.
  • +
  • Updates on the testsubmit.php file. Thanks to Geat and Gabriel Schillaci
  • +
  • [SF + BUG-924620] There was a problem when setting a name to an editor instance when + the name is used by another tag. For example when using "description" + as the name in a page with the <META name="description"> tag.
  • +
  • [SF + BUG-935018] The "buletted" typo has been corrected.
  • +
  • [SF + BUG-902122] Wrong css and js file references have been corrected.
  • +
  • [SF + BUG-918942] All dialog boxes now accept Enter and Escape keys as Ok and Cancel + buttons.
  • +
+

+ * This version has been partially sponsored by Genuitec, + LLC.

+

+ Version 1.5

+
    +
  • [SF + Feature-913777] New Form Commands are now available! Special + thanks to G.Meijer.
  • +
  • [SF + Feature-861149] Print Command is now available!
  • +
  • [SF + BUG-743546] The XHTML content duplication problem has been + solved . Thanks to Paul Hutchison.
  • +
  • [SF + BUG-875853] The image dialog box now gives precedence for width + and height values set as styles. In this way a user can change the size of the image + directly inside the editor and the changes will be reflected in the dialog box. +
  • +
  • [SF + Feature-788368] The sample file upload manager for ASPX now + uses guids for the file name generation. In this way a support + XML file is not needed anymore.
  • +
  • It's possible now to programmatically change the Base Path of the + editor if it's installed in a directory different of "/FCKeditor/". Something + like this:
    + oFCKeditor.BasePath = '/FCKeditor/' ;
    + Take a look at the _test directory for samples.
  • +
  • There was a little bug in the TAB feature that moved the insertion point if there + were any object (images, tables) in the content. It has been fixed.
  • +
  • The problem with accented and international characters on the PHP + test page was solved.
  • +
  • A new Chinese (Taiwan) language file is available. Thanks to Nil. +
  • +
  • A new Slovenian language file is available. Thanks to Pavel Rotar. +
  • +
  • A new Catalan language file is available. Thanks to Jordi Cerdan. +
  • +
  • A new Arabic language file is available. Thanks to Abdul-Aziz A. + Al-Oraij.
  • +
  • Small corrections on the Norwegian language file.
  • +
  • A Java version for the test results (testsubmit.jsp) is now available. Thanks to + Pritpal Dhaliwal.
  • +
  • When using JavaScript to create a editor instance it's possible now to easily get + the editor's value calling oFCKeditor.GetValue() (eg.). Better JavaScript API interfaces + will be available on version 2.0.
  • +
  • If XHTML is enabled the editor cleans the HTML before showing it + on the Source View, so the exact result can be viewed by the user. This option can + be activated setting config.EnableSourceXHTML = true in the fck_config.js file. +
  • +
  • The JS integration object now escapes all configuration settings, + in this way a user can use reserved chars on it. For example: +
    + oFCKeditor.Config["ImageBrowserURL"] = '/imgs/browse.asp?filter=abc*.jpg&userid=1'; +
  • +
  • A minimal browse server sample is now available in ASP. Thanks to Andreas Barnet. +
  • +
+

+ Version 1.4

+
    +
  • ATTENTION: For PHP users: The editor was changed and now uses + htmlspecialchars instead of htmlentities when handling + the initial value. It should works well, but please make some tests before upgrading + definitively. If there is any problem just uncomment the line in the fckeditor.php + file (and send me a message!).
  • +
  • The editor is now integrated with ieSpell (http://www.iespell.com) + for Spell Checking. You can configure the download URL in then + fck_config.js file. Thanks to Sanjay Sharma. (ieSpell is free for personal use but + must be paid for commercial use)
  • +
  • Table and table cell dialogs has been changed. + Now you can select the class you want to be applied. Thanks to + Alexander Lezos.
  • +
  • [SF + Feature-865378]A new upload support is available for ASP. It + uses the /UserImages/ folder in the root of the web site as the files container + and a counter controlled by the upload.cnt file. Both must have write permissions + set to the IUSR_xxx user. Thanks to Trax and Juanjo.
  • +
  • [SF + Patch-798128] The user (programmer) can now define a custom separator + for the list items of a combo in the toolbar. Thanks to Wulff D. Heiss.
  • +
  • [SF + Feature-741963][SF + Feature-878941][SF + Patch-869389] A minimal support for a “fake” TAB is now available, + even if HTML has no support for TAB. Now when the user presses the TAB key a configurable + number of spaces (&nbsp;) is added. Take a look at config.TabSpaces on the fck_config.js + file. No action is performed if it is set to zero. The default value is 4. Thanks + to Phil Hassey.
  • +
  • [SF + BUG-782779][SF + BUG-790939] The problem with big images has been corrected. Thanks to Raver. +
  • +
  • [SF + BUG-862975] Now the editor does nothing if no image is selected in the image + dialog box and the OK button is hit.
  • +
  • [SF + BUG-851609] The problem with ASP and null values has been solved.
  • +
  • Norwegean language pack. Thanks to Martin Kronstad.
  • +
  • Hungarian language pack. Thanks to Balázs Szabó. +
  • +
  • Bosnian language pack. Thanks to Trax.
  • +
  • Japanese language pack. Thanks to Kato Yuichiro.
  • +
  • Updates on the Polish language pack. Thanks to Norbert Neubauer. +
  • +
  • The Chinese (Taiwan) (zh-tw) has been removed from the package + because it's corrupt. I'm sorry. I hope someone could send me a good version soon. +
  • +
+

+ Version 1.3.1

+
    +
  • It's now possible to configure the editor the insert a <BR> tag instead + of <P> when the user presses the <Enter> key. + Take a look at the fck_config.js configuration file for the "UseBROnCarriageReturn" + key. This option is disabled by default.
  • +
  • Icelandic language pack. Thanks to Andri Óskarsson.
  • +
  • [SF + BUG-853374] On IE 5.0 there was a little error introduced with version 1.3 on + initialization. It was corrected.
  • +
  • [SF + BUG-853372] On IE 5.0 there was a little error introduced with version 1.3 when + setting the focus in the editor. It was corrected.
  • +
  • Minor errors on the language file for english has been corrected. + Thanks to Anders Madsen.
  • +
  • Minor errors on the language file for danish has been corrected. + Thanks to Martin Johansen.
  • +
+

+ Version 1.3

+
    +
  • Language support for Danish, Polish, Simple Chinese, Slovak, Swedish and + Turkish.
  • +
  • Language updates for Romanian.
  • +
  • It's now possible to override any of the editor's configurations + (for now it's implemented just for JavaScript, ASPX and HTC modules). See _test/test.html + for a sample. I'm now waiting for the Community for the ASP, CFM and PHP versions. +
  • +
  • A new method is available for PHP users. It's called ReturnFCKeditor. + It works exactly like CreateFCKeditor, but it returns a string with the HTML + for the editor instead of output it (echo). This feature is useful for people who + are working with Smarty Templates or something like that. Thanks to Timothy J. Finucane. +
  • +
  • Many people have had problems with international characters over + PHP. I had also the same problem. PHP have strange problems with + character encoding. The code hasn't been changed but just saved again with Western + European encoding. Now it works well in my system.
    + Take a look also at the "default_charset" configuration option at the + php.ini file. It doesn't seem to be an editor's problem but a PHP issue.
  • +
  • The "testsubmit.php" file now strips the "Magic + Quotes " that are automatically added by PHP on form posts.
  • +
  • A new language integration module is available for ASP/Jscript. + Thanks to Dimiter Naydenov.
  • +
  • New configuration options are available to customize the + Target combo box in the Insert/Modify Link dialog box. + Now you can hide it, or set which options are available in the combo box. Take a + look at the fck_config.js file.
  • +
  • The Text as Plain Text toolbar icon has been changed + to avoid confusion with the Normal Paste or. Thanks to Kaupo Kalda. +
  • +
  • The file dhtmled.cab has been removed from the package. It's not + needed to the editor to work and caused some confusion for a few users.
  • +
  • The editor's content now doesn't loose the focus + when the user clicks with the mouse in a toolbar button.
  • +
  • On drag-and-drop operations the data to be inserted in the editor + is now converted to plain text when the "ForcePasteAsPlainText" + configuration is set to true.
  • +
  • The image browser sample in PHP now sorts the files + by name. Thanks to Sergey Lupashko.
  • +
  • Two new configuration options are available to turn on/off + by default the "Show Borders" and "Show + Details" commands.
  • +
  • Some characters have been removed from the "Insert + Special Chars" dialog box because they were causing encoding problems + in some languages. Thanks to Abomb Hua.
  • +
  • JSP versions of the image and file upload and browsing + features. Thanks to Simone Chiaretta.
  • +
+

+ Version 1.2.4

+
    +
  • Language support for Spanish, Finnish, Romanian and Korean.
  • +
  • Language updates for German.
  • +
  • New Zoom toolbar option. (Thanks + to "mtn_roadie")
  • +
+

+ Version 1.2.2

+
    +
  • Language support for French.
  • +
  • [SF + BUG-782779] Version 1.2 introduced a bug on the image dialog window: when changing + the image, no update was done. This bug is now fixed.
  • +
+

+ Version 1.2

+
    +
  • Enhancements to the Word cleaning feature (Thanks to Karl von Randow). +
  • +
  • The Table dialog box now handles the Style width and height set + in the table (Thanks to Roberto Arruda). There where many problems on prior version + when people changed manually the table's size, dragging the size handles, and then + it was not possible to set a new size using the table dialog box.
  • +
  • For the Image dialog box: +
      +
    • No image is shown in the preview pane if no image has been set.
    • +
    • If no HSpace is set in the image a "-1" value was shown in the dialog + box. Now, nothing is shown if the value is negative.
    • +
    +
  • +
  • [SF + BUG-739630] Image with link lost the link when changing its properties. The + problem is solved.
  • +
  • Due to some problems in the XHTML cleaning (content duplication when the source + HTML is dirty and malformed), the XHTML support is turned off by default + from this version. You can still change this behavior and turn it on in the configuration + file.
  • +
  • Some little updates on the English language file.
  • +
  • A few addition of missing entries on all languages files (translations for these + changes are pending).
  • +
  • Language files has been added for the following languages: +
      +
    • Brazilian Portuguese (pt-br)
    • +
    • Czech (cz)
    • +
    • Dutch (nl)
    • +
    • Russian (ru)
    • +
    • Chinese (Taiwan) (zh-tw)
    • +
    • Greek (gr)
    • +
    • German (de)
    • +
    +
  • +
+

+ Version 1.1

+
    +
  • The "Multi Language" system is now available. This version + ships with English and Italian versions completed. Other languages will be available + soon. The editor automatically detects the client language and sets all labels, + tooltips and dialog boxes to it, if available. The auto detection and the default + language can be set in the fck_config.file.
  • +
  • Two files can now be created to isolate customizations code from the original source + code of the editor: fckeditor.config.js and fckeditor.custom.js. + Create these files in the root folder of your web site, if needed. The first one + can be used to add or override configurations set on fck_config.js. The second one + is used for custom actions and behaviors.
  • +
  • A problem with relative links and images like "/test/test.doc" has been + solved. In prior versions, only with XHTML support enabled, the URL was changed + to something like "http://www.mysite.xxx/test/test.doc" (The domain was + automatically added). Now the XHTML cleaning procedure gets the URLs exactly how + they are defined in the editor’s HTML.
  • +
  • [SF + BUG-742168] Mouse drag and drop from toolbar buttons has been disabled.
  • +
  • [SF + BUG-768210] HTML entities, like &lt;, were not load correctly. + The problem is solved.
  • +
  • [SF + BUG-748812] The link dialog window doesn't open when the link button is grayed. +
  • +
+

+ Version 1.0

+
    +
  • Three new options are available in the configuration file to set what file types + are allowed / denied to be uploaded from the "Insert Link" and "Insert + Image" dialog boxes.
  • +
  • Upload options, for links and images, are automatically hidden on IE 5.0 browsers + (it's not compatible).
  • +
  • [SF BUG-734894] Fixed a problem on XHTML cleaning: the value on INPUT fields were + lost.
  • +
  • [SF BUG-713797] Fixed some image dialog errors when trying to set image properties + when no image is available.
  • +
  • [SF BUG-736414] Developed a workaround for a DHTML control bug when loading in the + editor some HTML started with <p><hr></p>.
  • +
  • [SF BUG-737143] Paste from Word cleaning changed to solve some IE 5.0 errors. This + feature is still not available over IE 5.0.
  • +
  • [SF BUG-737233] CSS mappings are now OK on the PHP image browser module.
  • +
  • [SF BUG-737495] The image preview in the image dialog box is now working correctly. +
  • +
  • [SF BUG-737532] The editor automatically switches to WYSIWYG mode when the form + is posted.
  • +
  • [SF BUG-739571] The editor is now working well over Opera (as for Netscape, a TEXTAREA + is shown).
  • +
+

+ Version 1.0 Final Candidate

+
    +
  • A new dialog box for the "Link" command is available. Now you can upload + and browse the server exactly like the image dialog box. It's also possible to define + the link title and target window (_blank, _self, _parent and _top). As with the + image dialog box, a sample (and simple) file server browser is available.
  • +
  • A new configuration option is available to force every paste action to be handled + as plain text. See "config.ForcePasteAsPlainText" in fck_config.js.
  • +
  • A new Toolbar button is available: "Paste from Word". It automatically + cleans the clipboard content before pasting (removesWord styles, classes, xml stuff, + etc...). This command is available for IE 5.5 and more. For IE 5.0 users, a message + is displayed advising that the text will not be cleaned before pasting.
  • +
  • The editor automatically detects Word clipboard data on pasting operations and asks + the user to clean it before pasting. This option is turned on by default but it + can be configured. See "config.AutoDetectPasteFromWord" in fck_config.js. +
  • +
  • Table properties are now available in cells' right click context menu.
  • +
  • It's now possible to edit cells advanced properties from it's right click context + menu.
  • +
+

+ Version 1.0 Release Candidate 1 (RC1)

+
    +
  • Some performance improvements.
  • +
  • The file dhtmled.cab has been added to the package for clients ho needs to install + the Microsoft DHTML Editor component.
  • +
  • [SF BUG-713952] The format command options are localized, so it depends on the IE + language to work. Until version 0.9.5 it was working only over English IE browsers. + Now the options are load dynamically on the client using the client's language. +
  • +
  • [SF BUG-712103] The style command is localized, so it depends on the IE language + to work. Until version 0.9.5 it was working only over English IE browsers. Now it + configures itself using the client's language.
  • +
  • [SF BUG-726137] On version 0.9.5, some commands (special chars, image, emoticons, + ...) remove the next available character before inserting the required content even + if no selection was made in the editor. Now the editor replaces only the selected + content (if available).
  • +
+

+ Version 0.9.5 beta

+
    +
  • XHTML support is now available! It can be enabled/disabled in the fck_config.js + file.
  • +
  • "Show Table Borders" option: show borders for tables with borders size + set to zero.
  • +
  • "Show Details" option: show hidden elements (comments, scripts, paragraphs, + line breaks)
  • +
  • IE behavior integration module. Thanks to Daniel Shryock.
  • +
  • "Find" option: to find text in the document.
  • +
  • More performance enhancements.
  • +
  • New testsubmit.php file. Thansk to Jim Michaels.
  • +
  • Two initial PHP upload manager implementations (not working yet). Thanks to Frederic + Tyndiuk and Christian Liljedahl.
  • +
  • Initial PHP image browser implementation (not working yet). Thanks to Frederic Tyndiuk. +
  • +
  • Initial CFM upload manager implementation. Thanks to John Watson.
  • +
+

+ Version 0.9.4 beta

+
    +
  • ColdFusion module integration is now available! Thanks to John Watson.
  • +
  • "Insert Smiley" toolbar option! Thanks to Fredox. Take a look at fck_config.js + for configuration options.
  • +
  • "Paste as plain text" toolbar option!
  • +
  • Right click support for links (edit / remove).
  • +
  • Buttons now are shown in gray when disabled.
  • +
  • Buttons are shown just when the image is downloaded (no more "red x" while + waiting for it).
  • +
  • The toolbar background color can be set with a CSS style (see fck_editor.css).
  • +
  • Toolbar images have been reviewed: +
      +
    • Now they are transparent.
    • +
    • No more over...gif for every button (so the editor loads quicker).
    • +
    • Buttons states are controlled with CSS styles. (see fck_editor.css).
    • +
    +
  • +
  • Internet Explorer 5.0 compatibility, except for the image uploading popup.
  • +
  • Optimizations when loading the editor.
  • +
  • [SF BUG-709544] - Toolbar buttons wait for the images to be downloaded to start + watching and responding the user actions (turn buttons on/off when the user changes + position inside the editor).
  • +
  • JavaScript integration is now Object Oriented. CreateFCKeditor function is not available + anymore. Take a look in test.html.
  • +
  • Two new configuration options, ImageBrowser and ImageUpload, are available to turn + on and off the image upload and image browsing options in the Image dialog box. + This options can be hidden for a specific editor instance throw specific URL parameter + in the editor’s IFRAME (upload=true/false&browse=true/false). All specific + language integration modules handle this option. For sample see the _test directory. +
  • +
+ + diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckcontextmenu.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckcontextmenu.js new file mode 100644 index 0000000000..1c2354c353 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckcontextmenu.js @@ -0,0 +1,209 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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.SkinPath + 'fck_editor.css' ) ; + 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 ) ; + } +} + +FCKContextMenu.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled ) +{ + var oItem = this._MenuBlock.AddItem( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled) ; + this._Redraw = true ; + return oItem ; +} + +FCKContextMenu.prototype.AddSeparator = function() +{ + this._MenuBlock.AddSeparator() ; + this._Redraw = true ; +} + +FCKContextMenu.prototype.RemoveAllItems = function() +{ + this._MenuBlock.RemoveAllItems() ; + this._Redraw = true ; +} + +FCKContextMenu.prototype.AttachToElement = function( element ) +{ + if ( FCKBrowserInfo.IsIE ) + FCKTools.AddEventListenerEx( element, 'contextmenu', FCKContextMenu_AttachedElement_OnContextMenu, this ) ; + else + element._FCKContextMenu = this ; +} + +function FCKContextMenu_Document_OnContextMenu( e ) +{ + 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 ; + + 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 = e.target.ownerDocument ; + 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 ) +{ + 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 ; + } + } +} + +function FCKContextMenu_AttachedElement_OnContextMenu( ev, fckContextMenu, el ) +{ + if ( fckContextMenu.CtrlDisable && ( ev.ctrlKey || ev.metaKey ) ) + 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 ) ; +} diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckdataprocessor.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckdataprocessor.js new file mode 100644 index 0000000000..87c40a189e --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckdataprocessor.js @@ -0,0 +1,119 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 to , including , 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 tag is available. + if ( !FCKRegexLib.HasBodyTag.test( data ) ) + data = '' + data + '' ; + + // Check if the tag is available. + if ( !FCKRegexLib.HtmlOpener.test( data ) ) + data = '' + data + '' ; + + // Check if the tag is available. + if ( !FCKRegexLib.HeadOpener.test( data ) ) + data = data.replace( FCKRegexLib.HtmlOpener, '$&' ) ; + + return data ; + } + else + { + var html = + FCKConfig.DocType + + ' 0 && !FCKRegexLib.Html4DocType.test( FCKConfig.DocType ) ) + html += ' style="overflow-y: scroll"' ; + + html += '>' + + '' + + data + + '' ; + + 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 ; + } +} ; \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js new file mode 100644 index 0000000000..f7c7b1b247 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js @@ -0,0 +1,46 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 ) ; + }, + + InsertAfterNode : function( existingNode ) + { + FCKDomTools.InsertAfterNode( existingNode, this.RootNode ) ; + } +} \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js new file mode 100644 index 0000000000..3ea539f0c9 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js @@ -0,0 +1,58 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 ) ) ; + } +} ; \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckdomrange.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckdomrange.js new file mode 100644 index 0000000000..f82247acd1 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckdomrange.js @@ -0,0 +1,905 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 eEnd = innerRange.endContainer ; + + 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 ( 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 ; + } + }, + + CheckIsCollapsed : function() + { + if ( this._Range ) + return this._Range.collapsed ; + }, + + 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 "

Text

", the start editing point + // is "

^ Text

" (inside ). + MoveToElementEditStart : function( targetElement ) + { + var child ; + + while ( ( child = targetElement.firstChild ) && child.nodeType == 1 && FCKListsLib.EmptyElements[ child.nodeName.toLowerCase() ] == null ) + targetElement = child ; + + this.MoveToElementStart( targetElement ) ; + }, + + 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
, 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
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 tags + // in the range boundaries. The advantage of it is that it is possible to + // handle DOM mutations when moving back to the bookmark. + // Attention: the inclusion of nodes in the DOM is a design choice and + // should not be changed as there are other points in the code that may be + // using those nodes to perform operations. See GetBookmarkNode. + // For performance, includeNodes=true if intended to SelectBookmark. + CreateBookmark : function( includeNodes ) + { + // Create the bookmark info (random IDs). + var oBookmark = + { + StartId : (new Date()).valueOf() + Math.floor(Math.random()*1000) + 'S', + EndId : (new Date()).valueOf() + Math.floor(Math.random()*1000) + 'E' + } ; + + var oDoc = this.Window.document ; + var eStartSpan ; + var eEndSpan ; + var oClone ; + + // For collapsed ranges, add just the start marker. + if ( !this.CheckIsCollapsed() ) + { + eEndSpan = oDoc.createElement( 'span' ) ; + eEndSpan.style.display = 'none' ; + eEndSpan.id = oBookmark.EndId ; + eEndSpan.setAttribute( '_fck_bookmark', true ) ; + + // For IE, it must have something inside, otherwise it may be + // removed during DOM operations. +// if ( FCKBrowserInfo.IsIE ) + eEndSpan.innerHTML = ' ' ; + + oClone = this.Clone() ; + oClone.Collapse( false ) ; + oClone.InsertNode( eEndSpan ) ; + } + + eStartSpan = oDoc.createElement( 'span' ) ; + eStartSpan.style.display = 'none' ; + eStartSpan.id = oBookmark.StartId ; + eStartSpan.setAttribute( '_fck_bookmark', true ) ; + + // For IE, it must have something inside, otherwise it may be removed + // during DOM operations. +// if ( FCKBrowserInfo.IsIE ) + eStartSpan.innerHTML = ' ' ; + + oClone = this.Clone() ; + oClone.Collapse( true ) ; + oClone.InsertNode( eStartSpan ) ; + + if ( includeNodes ) + { + oBookmark.StartNode = eStartSpan ; + oBookmark.EndNode = eEndSpan ; + } + + // Update the range position. + if ( eEndSpan ) + { + this.SetStart( eStartSpan, 4 ) ; + this.SetEnd( eEndSpan, 3 ) ; + } + else + this.MoveToPosition( eStartSpan, 4 ) ; + + return oBookmark ; + }, + + // This one should be a part of a hypothetic "bookmark" object. + GetBookmarkNode : function( bookmark, start ) + { + var doc = this.Window.document ; + + if ( start ) + return bookmark.StartNode || doc.getElementById( bookmark.StartId ) ; + else + return bookmark.EndNode || doc.getElementById( bookmark.EndId ) ; + }, + + MoveToBookmark : function( bookmark, preserveBookmark ) + { + var eStartSpan = this.GetBookmarkNode( bookmark, true ) ; + var eEndSpan = this.GetBookmarkNode( bookmark, false ) ; + + this.SetStart( eStartSpan, 3 ) ; + + if ( !preserveBookmark ) + FCKDomTools.RemoveNode( eStartSpan ) ; + + // If collapsed, the end span will not be available. + if ( eEndSpan ) + { + this.SetEnd( eEndSpan, 3 ) ; + + if ( !preserveBookmark ) + FCKDomTools.RemoveNode( eEndSpan ) ; + } + else + this.Collapse( true ) ; + + this._UpdateElementInfo() ; + }, + + // Non-intrusive bookmark algorithm + CreateBookmark2 : function() + { + // If there is no range then get out of here. + // It happens on initial load in Safari #962 and if the editor it's hidden also in Firefox + if ( ! this._Range ) + return { "Start" : 0, "End" : 0 } ; + + // First, we record down the offset values + var bookmark = + { + "Start" : [ this._Range.startOffset ], + "End" : [ this._Range.endOffset ] + } ; + // Since we're treating the document tree as normalized, we need to backtrack the text lengths + // of previous text nodes into the offset value. + var curStart = this._Range.startContainer.previousSibling ; + var curEnd = this._Range.endContainer.previousSibling ; + + // Also note that the node that we use for "address base" would change during backtracking. + var addrStart = this._Range.startContainer ; + var addrEnd = this._Range.endContainer ; + while ( curStart && curStart.nodeType == 3 ) + { + bookmark.Start[0] += curStart.length ; + addrStart = curStart ; + curStart = curStart.previousSibling ; + } + while ( curEnd && curEnd.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 ^contents + * 2 = Before End contents^ + * 3 = Before Start ^contents + * 4 = After End contents^ + */ + SetStart : function( targetElement, position, noInfoUpdate ) + { + var oRange = this._Range ; + if ( !oRange ) + oRange = this._Range = this.CreateRange() ; + + switch( position ) + { + case 1 : // After Start ^contents + oRange.setStart( targetElement, 0 ) ; + break ; + + case 2 : // Before End contents^ + oRange.setStart( targetElement, targetElement.childNodes.length ) ; + break ; + + case 3 : // Before Start ^contents + oRange.setStartBefore( targetElement ) ; + break ; + + case 4 : // After End contents^ + 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 ^contents + * 2 = Before End contents^ + * 3 = Before Start ^contents + * 4 = After End contents^ + */ + SetEnd : function( targetElement, position, noInfoUpdate ) + { + var oRange = this._Range ; + if ( !oRange ) + oRange = this._Range = this.CreateRange() ; + + switch( position ) + { + case 1 : // After Start ^contents + oRange.setEnd( targetElement, 0 ) ; + break ; + + case 2 : // Before End contents^ + oRange.setEnd( targetElement, targetElement.childNodes.length ) ; + break ; + + case 3 : // Before Start ^contents + oRange.setEndBefore( targetElement ) ; + break ; + + case 4 : // After End contents^ + 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 [Some sample text]. + // After => Some [Some sample text]. + 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
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 preceeds 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() + { + 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 ( FCKConfig.EnterMode != 'br' ) + { + if ( !eStartBlock ) + { + eStartBlock = this.FixBlock( true ) ; + eEndBlock = this.EndBlock ; // FixBlock may have fixed the EndBlock too. + } + + if ( !eEndBlock ) + eEndBlock = this.FixBlock( false ) ; + } + + // 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
. + // Note: bogus
added under
    or
      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 ) + { + // 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( FCKConfig.EnterMode ) ; + + // Move the contents of the temporary range to the fixed block. + this.ExtractContents().AppendTo( oFixedBlock ) ; + FCKDomTools.TrimNode( 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 ; + } +} ; diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckdomrange_gecko.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckdomrange_gecko.js new file mode 100644 index 0000000000..a7a7d7d468 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckdomrange_gecko.js @@ -0,0 +1,104 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 ) ; +} \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckdomrange_ie.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckdomrange_ie.js new file mode 100644 index 0000000000..ed4aada7cb --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckdomrange_ie.js @@ -0,0 +1,199 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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   before the selection. + // This is needed to avoid IE destroying selections inside empty + // inline elements, like (#253). + // It is also needed when placing the selection right after an inline + // element to avoid the selection moving inside of it. + dummySpan = this.Window.document.createElement( 'span' ) ; + dummySpan.innerHTML = '' ; // Zero Width No-Break Space (U+FEFF). See #1359. + eStartMarker.parentNode.insertBefore( dummySpan, eStartMarker ) ; + + if ( bIsStartMakerAlone ) + { + // To expand empty blocks or line spaces after
      , we need + // instead to have any char, which will be later deleted using the + // selection. + // \ufeff = Zero Width No-Break Space (U+FEFF). See #1359. + eStartMarker.parentNode.insertBefore( this.Window.document.createTextNode( '\ufeff' ), eStartMarker ) ; + } + } + + if ( !this._Range ) + this._Range = this.CreateRange() ; + + // Remove the markers (reset the position, because of the changes in the DOM tree). + this._Range.setStartBefore( eStartMarker ) ; + eStartMarker.parentNode.removeChild( eStartMarker ) ; + + if ( bIsCollapsed ) + { + if ( bIsStartMakerAlone ) + { + // Move the selection start to include the temporary  . + oIERange.moveStart( 'character', -1 ) ; + + oIERange.select() ; + + // Remove our temporary stuff. + this.Window.document.selection.clear() ; + } + else + oIERange.select() ; + + FCKDomTools.RemoveNode( dummySpan ) ; + } + else + { + this._Range.setEndBefore( eEndMarker ) ; + eEndMarker.parentNode.removeChild( eEndMarker ) ; + oIERange.select() ; + } +} + +FCKDomRange.prototype._GetSelectionMarkerTag = function( toStart ) +{ + var doc = this.Window.document ; + var selection = doc.selection ; + + // Get a range for the start boundary. + var oRange ; + + // IE may throw an "unspecified error" on some cases (it happened when + // loading _samples/default.html), so try/catch. + try + { + oRange = selection.createRange() ; + } + catch (e) + { + return null ; + } + + // IE might take the range object to the main window instead of inside the editor iframe window. + // This is known to happen when the editor window has not been selected before (See #933). + // We need to avoid that. + if ( oRange.parentElement().document != doc ) + return null ; + + oRange.collapse( toStart === true ) ; + + // Paste a marker element at the collapsed range and get it from the DOM. + var sMarkerId = 'fck_dom_range_temp_' + (new Date()).valueOf() + '_' + Math.floor(Math.random()*1000) ; + oRange.pasteHTML( '' ) ; + + return doc.getElementById( sMarkerId ) ; +} diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckdomrangeiterator.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckdomrangeiterator.js new file mode 100644 index 0000000000..bea3ae6b9e --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckdomrangeiterator.js @@ -0,0 +1,312 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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
      elements must be used as paragraph boundaries. + */ + this.ForceBrBreak = false ; + + /** + * Guarantees that the iterator will always return "real" block elements. + * If "false", elements like
    1. , and 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 ; + + 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 ] ) + { + //
      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 ; + } + + closeRange = true ; + } + else + { + // If we have child nodes, let's check them. + if ( currentNode.firstChild ) + { + // If we don't have a range yet, let's start it. + if ( !range ) + { + range = new FCKDomRange( this.Range.Window ) ; + range.SetStart( currentNode, 3, true ) ; + } + + currentNode = currentNode.firstChild ; + continue ; + } + includeNode = true ; + } + } + else if ( currentNode.nodeType == 3 ) + { + // Ignore normal whitespaces (i.e. not including   or + // other unicode whitespaces) before/after a block node. + if ( /^[\r\n\t ]+$/.test( currentNode.nodeValue ) ) + includeNode = false ; + } + + // The current node is good to be part of the range and we are + // starting a new range, initialize it first. + if ( includeNode && !range ) + { + range = new FCKDomRange( this.Range.Window ) ; + range.SetStart( currentNode, 3, true ) ; + } + + // The last node has been found. + isLast = ( ( !closeRange || includeNode ) && currentNode == lastNode ) ; +// isLast = ( currentNode == lastNode && ( currentNode.nodeType != 1 || currentNode.childNodes.length == 0 ) ) ; + + // If we are in an element boundary, let's check if it is time + // to close the range, otherwise we include the parent within it. + if ( range && !closeRange ) + { + while ( !currentNode.nextSibling && !isLast ) + { + var parentNode = currentNode.parentNode ; + + if ( boundarySet[ parentNode.nodeName.toLowerCase() ] ) + { + closeRange = true ; + isLast = isLast || ( parentNode == lastNode ) ; + break ; + } + + currentNode = parentNode ; + 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 ; + FCKDebug.Output( 'removePreviousBr=' + removePreviousBr + ',removeLastBr=' + removeLastBr ) ; + + // 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
    2. child (nested + // lists) or the next sibling
    3. . + + 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. + this._NextNode = ( isLast || block == lastNode ) ? null : FCKDomTools.GetNextSourceNode( block, true, null, lastNode ) ; + + return block ; + } +} ; diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckeditingarea.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckeditingarea.js new file mode 100644 index 0000000000..960a61ebb6 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckeditingarea.js @@ -0,0 +1,342 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 tag. + */ +FCKEditingArea.prototype.Start = function( html, secondCall ) +{ + var eTargetElement = this.TargetElement ; + var oTargetDocument = FCKTools.GetElementDocument( eTargetElement ) ; + + // Remove all child nodes from the target. + var oChild ; + while( ( oChild = eTargetElement.firstChild ) ) // Only one "=". + { + // Set innerHTML = '' to avoid memory leak. + if ( oChild.contentWindow ) + oChild.contentWindow.document.body.innerHTML = '' ; + + eTargetElement.removeChild( oChild ) ; + } + + if ( this.Mode == FCK_EDITMODE_WYSIWYG ) + { + // Create the editing area IFRAME. + var oIFrame = this.IFrame = oTargetDocument.createElement( 'iframe' ) ; + + // Firefox will render the tables inside the body in Quirks mode if the + // source of the iframe is set to javascript. see #515 + if ( !FCKBrowserInfo.IsGecko ) + oIFrame.src = 'javascript:void(0)' ; + + oIFrame.frameBorder = 0 ; + oIFrame.width = oIFrame.height = '100%' ; + + // Append the new IFRAME to the target. + eTargetElement.appendChild( oIFrame ) ; + + // IE has a bug with the tag... it must have a closer, + // otherwise the all successive tags will be set as children nodes of the . + if ( FCKBrowserInfo.IsIE ) + html = html.replace( /(]*?)\s*\/?>(?!\s*<\/base>)/gi, '$1>' ) ; + 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 tag, inclusive. + ' ' + + oMatchAfter[1] ; // This is the HTML from the 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 = '
      ' ; + + this._BodyHTML = sBody ; + + } + else + this._BodyHTML = html ; // Invalid HTML input. + } + + // Get the window and document objects used to interact with the newly created IFRAME. + this.Window = oIFrame.contentWindow ; + + // IE: Avoid JavaScript errors thrown by the editing are source (like tags events). + // TODO: This error handler is not being fired. + // this.Window.onerror = function() { alert( 'Error!' ) ; return true ; } + + var oDoc = this.Document = this.Window.document ; + + oDoc.open() ; + oDoc.write( html ) ; + oDoc.close() ; + + // 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 ; + } + + 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!!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 ; + + 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 ; + this._BodyHTML = null ; + } + + oDoc.designMode = 'on' ; + + // Tell Gecko to use or not the tag for the bold, italic and underline. + try + { + oDoc.execCommand( 'styleWithCSS', false, FCKConfig.GeckoUseSPAN ) ; + } + catch (e) + { + // As evidenced here, useCSS is deprecated in favor of styleWithCSS: + // http://www.mozilla.org/editor/midas-spec.html + oDoc.execCommand( 'useCSS', false, !FCKConfig.GeckoUseSPAN ) ; + } + + // Analyzing Firefox 1.5 source code, it seams that there is support for a + // "insertBrOnReturn" command. Applying it gives no error, but it doesn't + // gives the same behavior that you have with IE. It works only if you are + // already inside a paragraph and it doesn't render correctly in the first enter. + // oDoc.execCommand( 'insertBrOnReturn', false, false ) ; + + // Tell Gecko (Firefox 1.5+) to enable or not live resizing of objects (by Alfonso Martinez) + oDoc.execCommand( 'enableObjectResizing', false, !FCKConfig.DisableObjectResizing ) ; + + // Disable the standard table editing features of Firefox. + oDoc.execCommand( 'enableInlineTableEditing', false, !FCKConfig.DisableFFTableHandles ) ; + } + catch (e) + { + // 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 ) + { + // The following check is important to avoid IE entering in a focus loop. Ref: + // http://sourceforge.net/tracker/index.php?func=detail&aid=1567060&group_id=75348&atid=543653 + if ( FCKBrowserInfo.IsIE && this.Document.hasFocus() ) + this._EnsureFocusIE() ; + + this.Window.focus() ; + + // In IE it can happen that the document is in theory focused but the active element is outside it + if ( FCKBrowserInfo.IsIE ) + this._EnsureFocusIE() ; + } + else + { + var oDoc = FCKTools.GetElementDocument( this.Textarea ) ; + if ( (!oDoc.hasFocus || oDoc.hasFocus() ) && oDoc.activeElement == this.Textarea ) + return ; + + this.Textarea.focus() ; + } + } + catch(e) {} +} + +FCKEditingArea.prototype._EnsureFocusIE = function() +{ + // In IE it can happen that the document is in theory focused but the active element is outside it + this.Document.body.setActive() ; + + // 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 ; + } + + range.moveEnd( "character", 1 ) ; + range.select() ; + + if ( range.boundingWidth > 0 ) + { + range.moveEnd( "character", -1 ) ; + 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 ; + } +} diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckelementpath.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckelementpath.js new file mode 100644 index 0000000000..a0f1b4101f --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckelementpath.js @@ -0,0 +1,70 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 ( !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). + if ( !eBlock && sElementName == 'div' ) + eBlock = e ; + else + eBlockLimit = e ; + } + } + + aElements.push( e ) ; + + if ( sElementName == 'body' ) + break ; + } + e = e.parentNode ; + } + + this.Block = eBlock ; + this.BlockLimit = eBlockLimit ; + this.Elements = aElements ; +} + + diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckenterkey.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckenterkey.js new file mode 100644 index 0000000000..200f667d86 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckenterkey.js @@ -0,0 +1,650 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 keystroke. + * May be "p", "div", "br". Default is "p". + * @shiftEnterMode : the behavior for the + 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' ], + [ 9 , 'Tab' ], + [ 8 , 'Backspace' ], + [ CTRL + 8 , 'CtrlBackspace' ], + [ 46 , 'Delete' ] + ] ) ; + + if ( tabSpaces > 0 ) + { + this.TabText = '' ; + while ( tabSpaces-- > 0 ) + this.TabText += '\xa0' ; + } + + 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 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 + key behavior. + */ +FCKEnterKey.prototype.DoShiftEnter = function() +{ + return this.DoEnter( this.ShiftEnterMode, true ) ; +} + +/* + * Executes the 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 ; + } + + 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 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 has the same effect as the , so we have the same + // results if we just move to the next block and apply the same 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 key behavior. + */ +FCKEnterKey.prototype.DoTab = function() +{ + var oRange = new FCKDomRange( this.Window ); + oRange.MoveToSelection() ; + + // If the user pressed 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() ; + + // FCKDebug.OutputObject( oSplitInfo ) ; + + if ( oSplitInfo ) + { + // Get the current blocks. + var ePreviousBlock = oSplitInfo.PreviousBlock ; + var eNextBlock = oSplitInfo.NextBlock ; + + var bIsStartOfBlock = oSplitInfo.WasStartOfBlock ; + var bIsEndOfBlock = oSplitInfo.WasEndOfBlock ; + + // 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 ( !oSplitInfo.WasStartOfBlock && !oSplitInfo.WasEndOfBlock ) + { + // If the next block is an
    4. 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( eNextBlock.ownerDocument.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 ) + { + var eFocusElement = eNewBlock ; + 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() ] ) + eFocusElement = eFocusElement.appendChild( FCKDomTools.CloneElement( 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.MoveToNodeContents( eNewBlock ) ; + oRange.Select() ; + } + + // Move the selection to the new block. + oRange.MoveToElementEditStart( bIsStartOfBlock && !bIsEndOfBlock ? eNextBlock : eNewBlock ) ; + } + + if ( FCKBrowserInfo.IsSafari ) + FCKDomTools.ScrollIntoView( eNextBlock || eNewBlock, false ) ; + else if ( FCKBrowserInfo.IsGeckoLike ) + ( eNextBlock || eNewBlock ).scrollIntoView( 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 ) ; + + if ( FCKBrowserInfo.IsSafari ) + FCKDomTools.ScrollIntoView( dummy, false ) ; + else + dummy.scrollIntoView( 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() ; +} diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckevents.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckevents.js new file mode 100644 index 0000000000..1dfeefe3ec --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckevents.js @@ -0,0 +1,71 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 ; +} diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckicon.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckicon.js new file mode 100644 index 0000000000..a8205e65cf --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckicon.js @@ -0,0 +1,103 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 == + * + * FCKIcon Class: renders an icon from a single image, a strip or even a + * spacer. + */ + +var FCKIcon = function( iconPathOrStripInfoArray ) +{ + var sTypeOf = iconPathOrStripInfoArray ? typeof( iconPathOrStripInfoArray ) : 'undefined' ; + switch ( sTypeOf ) + { + case 'number' : + this.Path = FCKConfig.SkinPath + 'fck_strip.gif' ; + this.Size = 16 ; + this.Position = iconPathOrStripInfoArray ; + break ; + + case 'undefined' : + this.Path = FCK_SPACER_PATH ; + break ; + + case 'string' : + this.Path = iconPathOrStripInfoArray ; + break ; + + default : + // It is an array in the format [ StripFilePath, IconSize, IconPosition ] + this.Path = iconPathOrStripInfoArray[0] ; + this.Size = iconPathOrStripInfoArray[1] ; + this.Position = iconPathOrStripInfoArray[2] ; + } +} + +FCKIcon.prototype.CreateIconElement = function( document ) +{ + var eIcon, eIconImage ; + + if ( this.Position ) // It is using an icons strip image. + { + var sPos = '-' + ( ( this.Position - 1 ) * this.Size ) + 'px' ; + + if ( FCKBrowserInfo.IsIE ) + { + //
      + + eIcon = document.createElement( 'DIV' ) ; + + eIconImage = eIcon.appendChild( document.createElement( 'IMG' ) ) ; + eIconImage.src = this.Path ; + eIconImage.style.top = sPos ; + } + else + { + // + + eIcon = document.createElement( 'IMG' ) ; + eIcon.src = FCK_SPACER_PATH ; + eIcon.style.backgroundPosition = '0px ' + sPos ; + eIcon.style.backgroundImage = 'url("' + this.Path + '")' ; + } + } + else // It is using a single icon image. + { + if ( FCKBrowserInfo.IsIE ) + { + // IE makes the button 1px higher if using the directly, so we + // are changing to the
      system to clip the image correctly. + eIcon = document.createElement( 'DIV' ) ; + + eIconImage = eIcon.appendChild( document.createElement( 'IMG' ) ) ; + eIconImage.src = this.Path ? this.Path : FCK_SPACER_PATH ; + } + else + { + // This is not working well with IE. See notes above. + // + eIcon = document.createElement( 'IMG' ) ; + eIcon.src = this.Path ? this.Path : FCK_SPACER_PATH ; + } + } + + eIcon.className = 'TB_Button_Image' ; + + return eIcon ; +} \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckiecleanup.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckiecleanup.js new file mode 100644 index 0000000000..c5a860cb25 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckiecleanup.js @@ -0,0 +1,68 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 == + * + * FCKIECleanup Class: a generic class used as a tool to remove IE leaks. + */ + +var FCKIECleanup = function( attachWindow ) +{ + // If the attachWindow already have a cleanup object, just use that one. + if ( attachWindow._FCKCleanupObj ) + this.Items = attachWindow._FCKCleanupObj.Items ; + else + { + this.Items = new Array() ; + + attachWindow._FCKCleanupObj = this ; + FCKTools.AddEventListenerEx( attachWindow, 'unload', FCKIECleanup_Cleanup ) ; +// attachWindow.attachEvent( 'onunload', FCKIECleanup_Cleanup ) ; + } +} + +FCKIECleanup.prototype.AddItem = function( dirtyItem, cleanupFunction ) +{ + this.Items.push( [ dirtyItem, cleanupFunction ] ) ; +} + +function FCKIECleanup_Cleanup() +{ + if ( !this._FCKCleanupObj || !window.FCKUnloadFlag ) + return ; + + var aItems = this._FCKCleanupObj.Items ; + + while ( aItems.length > 0 ) + { + + // It is important to remove from the end to the beginning (pop()), + // because of the order things get created in the editor. In the code, + // elements in deeper position in the DOM are placed at the end of the + // cleanup function, so we must cleanup then first, otherwise IE could + // throw some crazy memory errors (IE bug). + var oItem = aItems.pop() ; + if ( oItem ) + oItem[1].call( oItem[0] ) ; + } + + this._FCKCleanupObj = null ; + + if ( CollectGarbage ) + CollectGarbage() ; +} diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckimagepreloader.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckimagepreloader.js new file mode 100644 index 0000000000..da4c5adcc6 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckimagepreloader.js @@ -0,0 +1,64 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 == + * + * Preload a list of images, firing an event when complete. + */ + +var FCKImagePreloader = function() +{ + this._Images = new Array() ; +} + +FCKImagePreloader.prototype = +{ + AddImages : function( images ) + { + if ( typeof( images ) == 'string' ) + images = images.split( ';' ) ; + + this._Images = this._Images.concat( images ) ; + }, + + Start : function() + { + var aImages = this._Images ; + this._PreloadCount = aImages.length ; + + for ( var i = 0 ; i < aImages.length ; i++ ) + { + var eImg = document.createElement( 'img' ) ; + FCKTools.AddEventListenerEx( eImg, 'load', _FCKImagePreloader_OnImage, this ) ; + FCKTools.AddEventListenerEx( eImg, 'error', _FCKImagePreloader_OnImage, this ) ; + eImg.src = aImages[i] ; + + _FCKImagePreloader_ImageCache.push( eImg ) ; + } + } +}; + +// All preloaded images must be placed in a global array, otherwise the preload +// magic will not happen. +var _FCKImagePreloader_ImageCache = new Array() ; + +function _FCKImagePreloader_OnImage( ev, imagePreloader ) +{ + if ( (--imagePreloader._PreloadCount) == 0 && imagePreloader.OnComplete ) + imagePreloader.OnComplete() ; +} \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckkeystrokehandler.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckkeystrokehandler.js new file mode 100644 index 0000000000..2757ea472e --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckkeystrokehandler.js @@ -0,0 +1,141 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 == + * + * Control keyboard keystroke combinations. + */ + +var FCKKeystrokeHandler = function( cancelCtrlDefaults ) +{ + this.Keystrokes = new Object() ; + this.CancelCtrlDefaults = ( cancelCtrlDefaults !== false ) ; +} + +/* + * Listen to keystroke events in an element or DOM document object. + * @target: The element or document to listen to keystroke events. + */ +FCKKeystrokeHandler.prototype.AttachToElement = function( target ) +{ + // For newer browsers, it is enough to listen to the keydown event only. + // Some browsers instead, don't cancel key events in the keydown, but in the + // keypress. So we must do a longer trip in those cases. + FCKTools.AddEventListenerEx( target, 'keydown', _FCKKeystrokeHandler_OnKeyDown, this ) ; + if ( FCKBrowserInfo.IsGecko10 || FCKBrowserInfo.IsOpera || ( FCKBrowserInfo.IsGecko && FCKBrowserInfo.IsMac ) ) + FCKTools.AddEventListenerEx( target, 'keypress', _FCKKeystrokeHandler_OnKeyPress, this ) ; +} + +/* + * Sets a list of keystrokes. It can receive either a single array or "n" + * arguments, each one being an array of 1 or 2 elemenst. The first element + * is the keystroke combination, and the second is the value to assign to it. + * If the second element is missing, the keystroke definition is removed. + */ +FCKKeystrokeHandler.prototype.SetKeystrokes = function() +{ + // Look through the arguments. + for ( var i = 0 ; i < arguments.length ; i++ ) + { + var keyDef = arguments[i] ; + + // If the configuration for the keystrokes is missing some element or has any extra comma + // this item won't be valid, so skip it and keep on processing. + if ( !keyDef ) + continue ; + + if ( typeof( keyDef[0] ) == 'object' ) // It is an array with arrays defining the keystrokes. + this.SetKeystrokes.apply( this, keyDef ) ; + else + { + if ( keyDef.length == 1 ) // If it has only one element, remove the keystroke. + delete this.Keystrokes[ keyDef[0] ] ; + else // Otherwise add it. + this.Keystrokes[ keyDef[0] ] = keyDef[1] === true ? true : keyDef ; + } + } +} + +function _FCKKeystrokeHandler_OnKeyDown( ev, keystrokeHandler ) +{ + // Get the key code. + var keystroke = ev.keyCode || ev.which ; + + // Combine it with the CTRL, SHIFT and ALT states. + var keyModifiers = 0 ; + + if ( ev.ctrlKey || ev.metaKey ) + keyModifiers += CTRL ; + + if ( ev.shiftKey ) + keyModifiers += SHIFT ; + + if ( ev.altKey ) + keyModifiers += ALT ; + + var keyCombination = keystroke + keyModifiers ; + + var cancelIt = keystrokeHandler._CancelIt = false ; + + // Look for its definition availability. + var keystrokeValue = keystrokeHandler.Keystrokes[ keyCombination ] ; + +// FCKDebug.Output( 'KeyDown: ' + keyCombination + ' - Value: ' + keystrokeValue ) ; + + // If the keystroke is defined + if ( keystrokeValue ) + { + // If the keystroke has been explicitly set to "true" OR calling the + // "OnKeystroke" event, it doesn't return "true", the default behavior + // must be preserved. + if ( keystrokeValue === true || !( keystrokeHandler.OnKeystroke && keystrokeHandler.OnKeystroke.apply( keystrokeHandler, keystrokeValue ) ) ) + return true ; + + cancelIt = true ; + } + + // By default, it will cancel all combinations with the CTRL key only (except positioning keys). + if ( cancelIt || ( keystrokeHandler.CancelCtrlDefaults && keyModifiers == CTRL && ( keystroke < 33 || keystroke > 40 ) ) ) + { + keystrokeHandler._CancelIt = true ; + + if ( ev.preventDefault ) + return ev.preventDefault() ; + + ev.returnValue = false ; + ev.cancelBubble = true ; + return false ; + } + + return true ; +} + +function _FCKKeystrokeHandler_OnKeyPress( ev, keystrokeHandler ) +{ + if ( keystrokeHandler._CancelIt ) + { +// FCKDebug.Output( 'KeyPress Cancel', 'Red') ; + + if ( ev.preventDefault ) + return ev.preventDefault() ; + + return false ; + } + + return true ; +} diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckmenublock.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckmenublock.js new file mode 100644 index 0000000000..ccf583ac17 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckmenublock.js @@ -0,0 +1,153 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 == + * + * Renders a list of menu items. + */ + +var FCKMenuBlock = function() +{ + this._Items = new Array() ; +} + + +FCKMenuBlock.prototype.Count = function() +{ + return this._Items.length ; +} + +FCKMenuBlock.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled ) +{ + var oItem = new FCKMenuItem( this, name, label, iconPathOrStripInfoArrayOrIndex, isDisabled ) ; + + oItem.OnClick = FCKTools.CreateEventListener( FCKMenuBlock_Item_OnClick, this ) ; + oItem.OnActivate = FCKTools.CreateEventListener( FCKMenuBlock_Item_OnActivate, this ) ; + + this._Items.push( oItem ) ; + + return oItem ; +} + +FCKMenuBlock.prototype.AddSeparator = function() +{ + this._Items.push( new FCKMenuSeparator() ) ; +} + +FCKMenuBlock.prototype.RemoveAllItems = function() +{ + this._Items = new Array() ; + + var eItemsTable = this._ItemsTable ; + if ( eItemsTable ) + { + while ( eItemsTable.rows.length > 0 ) + eItemsTable.deleteRow( 0 ) ; + } +} + +FCKMenuBlock.prototype.Create = function( parentElement ) +{ + if ( !this._ItemsTable ) + { + if ( FCK.IECleanup ) + FCK.IECleanup.AddItem( this, FCKMenuBlock_Cleanup ) ; + + this._Window = FCKTools.GetElementWindow( parentElement ) ; + + var oDoc = FCKTools.GetElementDocument( parentElement ) ; + + var eTable = parentElement.appendChild( oDoc.createElement( 'table' ) ) ; + eTable.cellPadding = 0 ; + eTable.cellSpacing = 0 ; + + FCKTools.DisableSelection( eTable ) ; + + var oMainElement = eTable.insertRow(-1).insertCell(-1) ; + oMainElement.className = 'MN_Menu' ; + + var eItemsTable = this._ItemsTable = oMainElement.appendChild( oDoc.createElement( 'table' ) ) ; + eItemsTable.cellPadding = 0 ; + eItemsTable.cellSpacing = 0 ; + } + + for ( var i = 0 ; i < this._Items.length ; i++ ) + this._Items[i].Create( this._ItemsTable ) ; +} + +/* Events */ + +function FCKMenuBlock_Item_OnClick( clickedItem, menuBlock ) +{ + if ( menuBlock.Hide ) + menuBlock.Hide() ; + + FCKTools.RunFunction( menuBlock.OnClick, menuBlock, [ clickedItem ] ) ; +} + +function FCKMenuBlock_Item_OnActivate( menuBlock ) +{ + var oActiveItem = menuBlock._ActiveItem ; + + if ( oActiveItem && oActiveItem != this ) + { + // Set the focus to this menu block window (to fire OnBlur on opened panels). + if ( !FCKBrowserInfo.IsIE && oActiveItem.HasSubMenu && !this.HasSubMenu ) + { + menuBlock._Window.focus() ; + + // Due to the event model provided by Opera, we need to set + // HasFocus here as the above focus() call will not fire the focus + // event in the panel immediately (#1200). + menuBlock.Panel.HasFocus = true ; + } + + oActiveItem.Deactivate() ; + } + + menuBlock._ActiveItem = this ; +} + +function FCKMenuBlock_Cleanup() +{ + this._Window = null ; + this._ItemsTable = null ; +} + +// ################# // + +var FCKMenuSeparator = function() +{} + +FCKMenuSeparator.prototype.Create = function( parentTable ) +{ + var oDoc = FCKTools.GetElementDocument( parentTable ) ; + + var r = parentTable.insertRow(-1) ; + + var eCell = r.insertCell(-1) ; + eCell.className = 'MN_Separator MN_Icon' ; + + eCell = r.insertCell(-1) ; + eCell.className = 'MN_Separator' ; + eCell.appendChild( oDoc.createElement( 'DIV' ) ).className = 'MN_Separator_Line' ; + + eCell = r.insertCell(-1) ; + eCell.className = 'MN_Separator' ; + eCell.appendChild( oDoc.createElement( 'DIV' ) ).className = 'MN_Separator_Line' ; +} \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckmenublockpanel.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckmenublockpanel.js new file mode 100644 index 0000000000..45cbcc07cb --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckmenublockpanel.js @@ -0,0 +1,54 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 is a menu block that behaves like a panel. It's a mix of the + * FCKMenuBlock and FCKPanel classes. + */ + +var FCKMenuBlockPanel = function() +{ + // Call the "base" constructor. + FCKMenuBlock.call( this ) ; +} + +FCKMenuBlockPanel.prototype = new FCKMenuBlock() ; + + +// Override the create method. +FCKMenuBlockPanel.prototype.Create = function() +{ + var oPanel = this.Panel = ( this.Parent && this.Parent.Panel ? this.Parent.Panel.CreateChildPanel() : new FCKPanel() ) ; + oPanel.AppendStyleSheet( FCKConfig.SkinPath + 'fck_editor.css' ) ; + + // Call the "base" implementation. + FCKMenuBlock.prototype.Create.call( this, oPanel.MainNode ) ; +} + +FCKMenuBlockPanel.prototype.Show = function( x, y, relElement ) +{ + if ( !this.Panel.CheckIsOpened() ) + this.Panel.Show( x, y, relElement ) ; +} + +FCKMenuBlockPanel.prototype.Hide = function() +{ + if ( this.Panel.CheckIsOpened() ) + this.Panel.Hide() ; +} \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckmenuitem.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckmenuitem.js new file mode 100644 index 0000000000..7319efa1c9 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckmenuitem.js @@ -0,0 +1,160 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 == + * + * Defines and renders a menu items in a menu block. + */ + +var FCKMenuItem = function( parentMenuBlock, name, label, iconPathOrStripInfoArray, isDisabled ) +{ + this.Name = name ; + this.Label = label || name ; + this.IsDisabled = isDisabled ; + + this.Icon = new FCKIcon( iconPathOrStripInfoArray ) ; + + this.SubMenu = new FCKMenuBlockPanel() ; + this.SubMenu.Parent = parentMenuBlock ; + this.SubMenu.OnClick = FCKTools.CreateEventListener( FCKMenuItem_SubMenu_OnClick, this ) ; + + if ( FCK.IECleanup ) + FCK.IECleanup.AddItem( this, FCKMenuItem_Cleanup ) ; +} + + +FCKMenuItem.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled ) +{ + this.HasSubMenu = true ; + return this.SubMenu.AddItem( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled ) ; +} + +FCKMenuItem.prototype.AddSeparator = function() +{ + this.SubMenu.AddSeparator() ; +} + +FCKMenuItem.prototype.Create = function( parentTable ) +{ + var bHasSubMenu = this.HasSubMenu ; + + var oDoc = FCKTools.GetElementDocument( parentTable ) ; + + // Add a row in the table to hold the menu item. + var r = this.MainElement = parentTable.insertRow(-1) ; + r.className = this.IsDisabled ? 'MN_Item_Disabled' : 'MN_Item' ; + + // Set the row behavior. + if ( !this.IsDisabled ) + { + FCKTools.AddEventListenerEx( r, 'mouseover', FCKMenuItem_OnMouseOver, [ this ] ) ; + FCKTools.AddEventListenerEx( r, 'click', FCKMenuItem_OnClick, [ this ] ) ; + + if ( !bHasSubMenu ) + FCKTools.AddEventListenerEx( r, 'mouseout', FCKMenuItem_OnMouseOut, [ this ] ) ; + } + + // Create the icon cell. + var eCell = r.insertCell(-1) ; + eCell.className = 'MN_Icon' ; + eCell.appendChild( this.Icon.CreateIconElement( oDoc ) ) ; + + // Create the label cell. + eCell = r.insertCell(-1) ; + eCell.className = 'MN_Label' ; + eCell.noWrap = true ; + eCell.appendChild( oDoc.createTextNode( this.Label ) ) ; + + // Create the arrow cell and setup the sub menu panel (if needed). + eCell = r.insertCell(-1) ; + if ( bHasSubMenu ) + { + eCell.className = 'MN_Arrow' ; + + // The arrow is a fixed size image. + var eArrowImg = eCell.appendChild( oDoc.createElement( 'IMG' ) ) ; + eArrowImg.src = FCK_IMAGES_PATH + 'arrow_' + FCKLang.Dir + '.gif' ; + eArrowImg.width = 4 ; + eArrowImg.height = 7 ; + + this.SubMenu.Create() ; + this.SubMenu.Panel.OnHide = FCKTools.CreateEventListener( FCKMenuItem_SubMenu_OnHide, this ) ; + } +} + +FCKMenuItem.prototype.Activate = function() +{ + this.MainElement.className = 'MN_Item_Over' ; + + if ( this.HasSubMenu ) + { + // Show the child menu block. The ( +2, -2 ) correction is done because + // of the padding in the skin. It is not a good solution because one + // could change the skin and so the final result would not be accurate. + // For now it is ok because we are controlling the skin. + this.SubMenu.Show( this.MainElement.offsetWidth + 2, -2, this.MainElement ) ; + } + + FCKTools.RunFunction( this.OnActivate, this ) ; +} + +FCKMenuItem.prototype.Deactivate = function() +{ + this.MainElement.className = 'MN_Item' ; + + if ( this.HasSubMenu ) + this.SubMenu.Hide() ; +} + +/* Events */ + +function FCKMenuItem_SubMenu_OnClick( clickedItem, listeningItem ) +{ + FCKTools.RunFunction( listeningItem.OnClick, listeningItem, [ clickedItem ] ) ; +} + +function FCKMenuItem_SubMenu_OnHide( menuItem ) +{ + menuItem.Deactivate() ; +} + +function FCKMenuItem_OnClick( ev, menuItem ) +{ + if ( menuItem.HasSubMenu ) + menuItem.Activate() ; + else + { + menuItem.Deactivate() ; + FCKTools.RunFunction( menuItem.OnClick, menuItem, [ menuItem ] ) ; + } +} + +function FCKMenuItem_OnMouseOver( ev, menuItem ) +{ + menuItem.Activate() ; +} + +function FCKMenuItem_OnMouseOut( ev, menuItem ) +{ + menuItem.Deactivate() ; +} + +function FCKMenuItem_Cleanup() +{ + this.MainElement = null ; +} \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckpanel.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckpanel.js new file mode 100644 index 0000000000..901e536ae1 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckpanel.js @@ -0,0 +1,359 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 == + * + * Component that creates floating panels. It is used by many + * other components, like the toolbar items, context menu, etc... + */ + +var FCKPanel = function( parentWindow ) +{ + this.IsRTL = ( FCKLang.Dir == 'rtl' ) ; + this.IsContextMenu = false ; + this._LockCounter = 0 ; + + this._Window = parentWindow || window ; + + var oDocument ; + + if ( FCKBrowserInfo.IsIE ) + { + // Create the Popup that will hold the panel. + this._Popup = this._Window.createPopup() ; + oDocument = this.Document = this._Popup.document ; + + FCK.IECleanup.AddItem( this, FCKPanel_Cleanup ) ; + } + else + { + var oIFrame = this._IFrame = this._Window.document.createElement('iframe') ; + oIFrame.src = 'javascript:void(0)' ; + oIFrame.allowTransparency = true ; + oIFrame.frameBorder = '0' ; + oIFrame.scrolling = 'no' ; + oIFrame.width = oIFrame.height = 0 ; + FCKDomTools.SetElementStyles( oIFrame, + { + position : 'absolute', + zIndex : FCKConfig.FloatingPanelsZIndex + } ) ; + + if ( this._Window == window.parent && window.frameElement ) + { + var scrollPos = null ; + if ( FCKBrowserInfo.IsGecko && FCK && FCK.EditorDocument ) + scrollPos = [ FCK.EditorDocument.body.scrollLeft, FCK.EditorDocument.body.scrollTop ] ; + window.frameElement.parentNode.insertBefore( oIFrame, window.frameElement ) ; + if ( scrollPos ) + { + var restoreFunc = function() + { + FCK.EditorDocument.body.scrollLeft = scrollPos[0] ; + FCK.EditorDocument.body.scrollTop = scrollPos[1] ; + } + setTimeout( restoreFunc, 500 ) ; + } + } + else + this._Window.document.body.appendChild( oIFrame ) ; + + var oIFrameWindow = oIFrame.contentWindow ; + + oDocument = this.Document = oIFrameWindow.document ; + + // Workaround for Safari 12256. Ticket #63 + var sBase = '' ; + if ( FCKBrowserInfo.IsSafari ) + sBase = '' ; + + // Initialize the IFRAME document body. + oDocument.open() ; + oDocument.write( '' + sBase + '<\/head><\/body><\/html>' ) ; + oDocument.close() ; + + FCKTools.AddEventListenerEx( oIFrameWindow, 'focus', FCKPanel_Window_OnFocus, this ) ; + FCKTools.AddEventListenerEx( oIFrameWindow, 'blur', FCKPanel_Window_OnBlur, this ) ; + } + + oDocument.dir = FCKLang.Dir ; + + FCKTools.AddEventListener( oDocument, 'contextmenu', FCKTools.CancelEvent ) ; + + + // Create the main DIV that is used as the panel base. + this.MainNode = oDocument.body.appendChild( oDocument.createElement('DIV') ) ; + + // The "float" property must be set so Firefox calculates the size correctly. + this.MainNode.style.cssFloat = this.IsRTL ? 'right' : 'left' ; +} + + +FCKPanel.prototype.AppendStyleSheet = function( styleSheet ) +{ + FCKTools.AppendStyleSheet( this.Document, styleSheet ) ; +} + +FCKPanel.prototype.Preload = function( x, y, relElement ) +{ + // The offsetWidth and offsetHeight properties are not available if the + // element is not visible. So we must "show" the popup with no size to + // be able to use that values in the second call (IE only). + if ( this._Popup ) + this._Popup.show( x, y, 0, 0, relElement ) ; +} + +FCKPanel.prototype.Show = function( x, y, relElement, width, height ) +{ + var iMainWidth ; + var eMainNode = this.MainNode ; + + if ( this._Popup ) + { + // The offsetWidth and offsetHeight properties are not available if the + // element is not visible. So we must "show" the popup with no size to + // be able to use that values in the second call. + this._Popup.show( x, y, 0, 0, relElement ) ; + + // The following lines must be place after the above "show", otherwise it + // doesn't has the desired effect. + FCKDomTools.SetElementStyles( eMainNode, + { + width : width ? width + 'px' : '', + height : height ? height + 'px' : '' + } ) ; + + iMainWidth = eMainNode.offsetWidth ; + + if ( this.IsRTL ) + { + if ( this.IsContextMenu ) + x = x - iMainWidth + 1 ; + else if ( relElement ) + x = ( x * -1 ) + relElement.offsetWidth - iMainWidth ; + } + + // Second call: Show the Popup at the specified location, with the correct size. + this._Popup.show( x, y, iMainWidth, eMainNode.offsetHeight, relElement ) ; + + if ( this.OnHide ) + { + if ( this._Timer ) + CheckPopupOnHide.call( this, true ) ; + + this._Timer = FCKTools.SetInterval( CheckPopupOnHide, 100, this ) ; + } + } + else + { + // Do not fire OnBlur while the panel is opened. + if ( typeof( FCK.ToolbarSet.CurrentInstance.FocusManager ) != 'undefined' ) + FCK.ToolbarSet.CurrentInstance.FocusManager.Lock() ; + + if ( this.ParentPanel ) + { + this.ParentPanel.Lock() ; + + // Due to a bug on FF3, we must ensure that the parent panel will + // blur (#1584). + FCKPanel_Window_OnBlur( null, this.ParentPanel ) ; + } + + // Be sure we'll not have more than one Panel opened at the same time. + if ( FCKPanel._OpenedPanel ) + FCKPanel._OpenedPanel.Hide() ; + + FCKDomTools.SetElementStyles( eMainNode, + { + width : width ? width + 'px' : '', + height : height ? height + 'px' : '' + } ) ; + + iMainWidth = eMainNode.offsetWidth ; + + if ( !width ) this._IFrame.width = 1 ; + if ( !height ) this._IFrame.height = 1 ; + + // This is weird... but with Firefox, we must get the offsetWidth before + // setting the _IFrame size (which returns "0"), and then after that, + // to return the correct width. Remove the first step and it will not + // work when the editor is in RTL. + // + // The "|| eMainNode.firstChild.offsetWidth" part has been added + // for Opera compatibility (see #570). + iMainWidth = eMainNode.offsetWidth || eMainNode.firstChild.offsetWidth ; + + // Base the popup coordinates upon the coordinates of relElement. + var oPos = FCKTools.GetDocumentPosition( this._Window, + relElement.nodeType == 9 ? + ( FCKTools.IsStrictMode( relElement ) ? relElement.documentElement : relElement.body ) : + relElement ) ; + + // Minus the offsets provided by any positioned parent element of the panel iframe. + var positionedAncestor = FCKDomTools.GetPositionedAncestor( FCKTools.GetElementWindow( this._IFrame ), this._IFrame.parentNode ) ; + if ( positionedAncestor ) + { + var nPos = FCKTools.GetDocumentPosition( FCKTools.GetElementWindow( positionedAncestor ), positionedAncestor ) ; + oPos.x -= nPos.x ; + oPos.y -= nPos.y ; + } + + if ( this.IsRTL && !this.IsContextMenu ) + x = ( x * -1 ) ; + + x += oPos.x ; + y += oPos.y ; + + if ( this.IsRTL ) + { + if ( this.IsContextMenu ) + x = x - iMainWidth + 1 ; + else if ( relElement ) + x = x + relElement.offsetWidth - iMainWidth ; + } + else + { + var oViewPaneSize = FCKTools.GetViewPaneSize( this._Window ) ; + var oScrollPosition = FCKTools.GetScrollPosition( this._Window ) ; + + var iViewPaneHeight = oViewPaneSize.Height + oScrollPosition.Y ; + var iViewPaneWidth = oViewPaneSize.Width + oScrollPosition.X ; + + if ( ( x + iMainWidth ) > iViewPaneWidth ) + x -= x + iMainWidth - iViewPaneWidth ; + + if ( ( y + eMainNode.offsetHeight ) > iViewPaneHeight ) + y -= y + eMainNode.offsetHeight - iViewPaneHeight ; + } + + if ( x < 0 ) + x = 0 ; + + // Set the context menu DIV in the specified location. + FCKDomTools.SetElementStyles( this._IFrame, + { + left : x + 'px', + top : y + 'px' + } ) ; + + var iWidth = iMainWidth ; + var iHeight = eMainNode.offsetHeight ; + + this._IFrame.width = iWidth ; + this._IFrame.height = iHeight ; + + // Move the focus to the IFRAME so we catch the "onblur". + this._IFrame.contentWindow.focus() ; + + FCKPanel._OpenedPanel = this ; + } + + this._IsOpened = true ; + + FCKTools.RunFunction( this.OnShow, this ) ; +} + +FCKPanel.prototype.Hide = function( ignoreOnHide ) +{ + if ( this._Popup ) + this._Popup.hide() ; + else + { + if ( !this._IsOpened || this._LockCounter > 0 ) + return ; + + // Enable the editor to fire the "OnBlur". + if ( typeof( FCKFocusManager ) != 'undefined' ) + FCKFocusManager.Unlock() ; + + // It is better to set the sizes to 0, otherwise Firefox would have + // rendering problems. + this._IFrame.width = this._IFrame.height = 0 ; + + this._IsOpened = false ; + + if ( this.ParentPanel ) + this.ParentPanel.Unlock() ; + + if ( !ignoreOnHide ) + FCKTools.RunFunction( this.OnHide, this ) ; + } +} + +FCKPanel.prototype.CheckIsOpened = function() +{ + if ( this._Popup ) + return this._Popup.isOpen ; + else + return this._IsOpened ; +} + +FCKPanel.prototype.CreateChildPanel = function() +{ + var oWindow = this._Popup ? FCKTools.GetDocumentWindow( this.Document ) : this._Window ; + + var oChildPanel = new FCKPanel( oWindow ) ; + oChildPanel.ParentPanel = this ; + + return oChildPanel ; +} + +FCKPanel.prototype.Lock = function() +{ + this._LockCounter++ ; +} + +FCKPanel.prototype.Unlock = function() +{ + if ( --this._LockCounter == 0 && !this.HasFocus ) + this.Hide() ; +} + +/* Events */ + +function FCKPanel_Window_OnFocus( e, panel ) +{ + panel.HasFocus = true ; +} + +function FCKPanel_Window_OnBlur( e, panel ) +{ + panel.HasFocus = false ; + + if ( panel._LockCounter == 0 ) + FCKTools.RunFunction( panel.Hide, panel ) ; +} + +function CheckPopupOnHide( forceHide ) +{ + if ( forceHide || !this._Popup.isOpen ) + { + window.clearInterval( this._Timer ) ; + this._Timer = null ; + + FCKTools.RunFunction( this.OnHide, this ) ; + } +} + +function FCKPanel_Cleanup() +{ + this._Popup = null ; + this._Window = null ; + this.Document = null ; + this.MainNode = null ; +} diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckplugin.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckplugin.js new file mode 100644 index 0000000000..a0df44e915 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckplugin.js @@ -0,0 +1,56 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 == + * + * FCKPlugin Class: Represents a single plugin. + */ + +var FCKPlugin = function( name, availableLangs, basePath ) +{ + this.Name = name ; + this.BasePath = basePath ? basePath : FCKConfig.PluginsPath ; + this.Path = this.BasePath + name + '/' ; + + if ( !availableLangs || availableLangs.length == 0 ) + this.AvailableLangs = new Array() ; + else + this.AvailableLangs = availableLangs.split(',') ; +} + +FCKPlugin.prototype.Load = function() +{ + // Load the language file, if defined. + if ( this.AvailableLangs.length > 0 ) + { + var sLang ; + + // Check if the plugin has the language file for the active language. + if ( this.AvailableLangs.IndexOf( FCKLanguageManager.ActiveLanguage.Code ) >= 0 ) + sLang = FCKLanguageManager.ActiveLanguage.Code ; + else + // Load the default language file (first one) if the current one is not available. + sLang = this.AvailableLangs[0] ; + + // Add the main plugin script. + LoadScript( this.Path + 'lang/' + sLang + '.js' ) ; + } + + // Add the main plugin script. + LoadScript( this.Path + 'fckplugin.js' ) ; +} \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckspecialcombo.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckspecialcombo.js new file mode 100644 index 0000000000..04d4ad4cf7 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckspecialcombo.js @@ -0,0 +1,376 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 == + * + * FCKSpecialCombo Class: represents a special combo. + */ + +var FCKSpecialCombo = function( caption, fieldWidth, panelWidth, panelMaxHeight, parentWindow ) +{ + // Default properties values. + this.FieldWidth = fieldWidth || 100 ; + this.PanelWidth = panelWidth || 150 ; + this.PanelMaxHeight = panelMaxHeight || 150 ; + this.Label = ' ' ; + this.Caption = caption ; + this.Tooltip = caption ; + this.Style = FCK_TOOLBARITEM_ICONTEXT ; + + this.Enabled = true ; + + this.Items = new Object() ; + + this._Panel = new FCKPanel( parentWindow || window ) ; + this._Panel.AppendStyleSheet( FCKConfig.SkinPath + 'fck_editor.css' ) ; + this._PanelBox = this._Panel.MainNode.appendChild( this._Panel.Document.createElement( 'DIV' ) ) ; + this._PanelBox.className = 'SC_Panel' ; + this._PanelBox.style.width = this.PanelWidth + 'px' ; + + this._PanelBox.innerHTML = '
      ' ; + + this._ItemsHolderEl = this._PanelBox.getElementsByTagName('TD')[0] ; + + if ( FCK.IECleanup ) + FCK.IECleanup.AddItem( this, FCKSpecialCombo_Cleanup ) ; + +// this._Panel.StyleSheet = FCKConfig.SkinPath + 'fck_contextmenu.css' ; +// this._Panel.Create() ; +// this._Panel.PanelDiv.className += ' SC_Panel' ; +// this._Panel.PanelDiv.innerHTML = '
      ' ; +// this._ItemsHolderEl = this._Panel.PanelDiv.getElementsByTagName('TD')[0] ; +} + +function FCKSpecialCombo_ItemOnMouseOver() +{ + this.className += ' SC_ItemOver' ; +} + +function FCKSpecialCombo_ItemOnMouseOut() +{ + this.className = this.originalClass ; +} + +function FCKSpecialCombo_ItemOnClick( ev, specialCombo, itemId ) +{ + this.className = this.originalClass ; + + specialCombo._Panel.Hide() ; + + specialCombo.SetLabel( this.FCKItemLabel ) ; + + if ( typeof( specialCombo.OnSelect ) == 'function' ) + specialCombo.OnSelect( itemId, this ) ; +} + +FCKSpecialCombo.prototype.ClearItems = function () +{ + if ( this.Items ) + this.Items = {} ; + + var itemsholder = this._ItemsHolderEl ; + while ( itemsholder.firstChild ) + itemsholder.removeChild( itemsholder.firstChild ) ; +} + +FCKSpecialCombo.prototype.AddItem = function( id, html, label, bgColor ) +{ + //
      Bold 1
      + var oDiv = this._ItemsHolderEl.appendChild( this._Panel.Document.createElement( 'DIV' ) ) ; + oDiv.className = oDiv.originalClass = 'SC_Item' ; + oDiv.innerHTML = html ; + oDiv.FCKItemLabel = label || id ; + oDiv.Selected = false ; + + // In IE, the width must be set so the borders are shown correctly when the content overflows. + if ( FCKBrowserInfo.IsIE ) + oDiv.style.width = '100%' ; + + if ( bgColor ) + oDiv.style.backgroundColor = bgColor ; + + FCKTools.AddEventListenerEx( oDiv, 'mouseover', FCKSpecialCombo_ItemOnMouseOver ) ; + FCKTools.AddEventListenerEx( oDiv, 'mouseout', FCKSpecialCombo_ItemOnMouseOut ) ; + FCKTools.AddEventListenerEx( oDiv, 'click', FCKSpecialCombo_ItemOnClick, [ this, id ] ) ; + + this.Items[ id.toString().toLowerCase() ] = oDiv ; + + return oDiv ; +} + +FCKSpecialCombo.prototype.SelectItem = function( item ) +{ + if ( typeof item == 'string' ) + item = this.Items[ item.toString().toLowerCase() ] ; + + if ( item ) + { + item.className = item.originalClass = 'SC_ItemSelected' ; + item.Selected = true ; + } +} + +FCKSpecialCombo.prototype.SelectItemByLabel = function( itemLabel, setLabel ) +{ + for ( var id in this.Items ) + { + var oDiv = this.Items[id] ; + + if ( oDiv.FCKItemLabel == itemLabel ) + { + oDiv.className = oDiv.originalClass = 'SC_ItemSelected' ; + oDiv.Selected = true ; + + if ( setLabel ) + this.SetLabel( itemLabel ) ; + } + } +} + +FCKSpecialCombo.prototype.DeselectAll = function( clearLabel ) +{ + for ( var i in this.Items ) + { + if ( !this.Items[i] ) continue; + this.Items[i].className = this.Items[i].originalClass = 'SC_Item' ; + this.Items[i].Selected = false ; + } + + if ( clearLabel ) + this.SetLabel( '' ) ; +} + +FCKSpecialCombo.prototype.SetLabelById = function( id ) +{ + id = id ? id.toString().toLowerCase() : '' ; + + var oDiv = this.Items[ id ] ; + this.SetLabel( oDiv ? oDiv.FCKItemLabel : '' ) ; +} + +FCKSpecialCombo.prototype.SetLabel = function( text ) +{ + text = ( !text || text.length == 0 ) ? ' ' : text ; + + if ( text == this.Label ) + return ; + + this.Label = text ; + + var labelEl = this._LabelEl ; + if ( labelEl ) + { + labelEl.innerHTML = text ; + + // It may happen that the label is some HTML, including tags. This + // would be a problem because when the user click on those tags, the + // combo will get the selection from the editing area. So we must + // disable any kind of selection here. + FCKTools.DisableSelection( labelEl ) ; + } +} + +FCKSpecialCombo.prototype.SetEnabled = function( isEnabled ) +{ + this.Enabled = isEnabled ; + + // In IE it can happen when the page is reloaded that _OuterTable is null, so check its existence + if ( this._OuterTable ) + this._OuterTable.className = isEnabled ? '' : 'SC_FieldDisabled' ; +} + +FCKSpecialCombo.prototype.Create = function( targetElement ) +{ + var oDoc = FCKTools.GetElementDocument( targetElement ) ; + var eOuterTable = this._OuterTable = targetElement.appendChild( oDoc.createElement( 'TABLE' ) ) ; + eOuterTable.cellPadding = 0 ; + eOuterTable.cellSpacing = 0 ; + + eOuterTable.insertRow(-1) ; + + var sClass ; + var bShowLabel ; + + switch ( this.Style ) + { + case FCK_TOOLBARITEM_ONLYICON : + sClass = 'TB_ButtonType_Icon' ; + bShowLabel = false; + break ; + case FCK_TOOLBARITEM_ONLYTEXT : + sClass = 'TB_ButtonType_Text' ; + bShowLabel = false; + break ; + case FCK_TOOLBARITEM_ICONTEXT : + bShowLabel = true; + break ; + } + + if ( this.Caption && this.Caption.length > 0 && bShowLabel ) + { + var oCaptionCell = eOuterTable.rows[0].insertCell(-1) ; + oCaptionCell.innerHTML = this.Caption ; + oCaptionCell.className = 'SC_FieldCaption' ; + } + + // Create the main DIV element. + var oField = FCKTools.AppendElement( eOuterTable.rows[0].insertCell(-1), 'div' ) ; + if ( bShowLabel ) + { + oField.className = 'SC_Field' ; + oField.style.width = this.FieldWidth + 'px' ; + oField.innerHTML = '
       
      ' ; + + this._LabelEl = oField.getElementsByTagName('label')[0] ; // Memory Leak + this._LabelEl.innerHTML = this.Label ; + } + else + { + oField.className = 'TB_Button_Off' ; + //oField.innerHTML = '' + this.Caption + '
       
      ' ; + //oField.innerHTML = '
       
      ' ; + + // Gets the correct CSS class to use for the specified style (param). + oField.innerHTML = '' + + '' + + //'' + + '' + + '' + + '' + + '' + + '' + + '' + + '
      ' + this.Caption + '
      ' ; + } + + + // Events Handlers + + FCKTools.AddEventListenerEx( oField, 'mouseover', FCKSpecialCombo_OnMouseOver, this ) ; + FCKTools.AddEventListenerEx( oField, 'mouseout', FCKSpecialCombo_OnMouseOut, this ) ; + FCKTools.AddEventListenerEx( oField, 'click', FCKSpecialCombo_OnClick, this ) ; + + FCKTools.DisableSelection( this._Panel.Document.body ) ; +} + +function FCKSpecialCombo_Cleanup() +{ + this._LabelEl = null ; + this._OuterTable = null ; + this._ItemsHolderEl = null ; + this._PanelBox = null ; + + if ( this.Items ) + { + for ( var key in this.Items ) + this.Items[key] = null ; + } +} + +function FCKSpecialCombo_OnMouseOver( ev, specialCombo ) +{ + if ( specialCombo.Enabled ) + { + switch ( specialCombo.Style ) + { + case FCK_TOOLBARITEM_ONLYICON : + this.className = 'TB_Button_On_Over'; + break ; + case FCK_TOOLBARITEM_ONLYTEXT : + this.className = 'TB_Button_On_Over'; + break ; + case FCK_TOOLBARITEM_ICONTEXT : + this.className = 'SC_Field SC_FieldOver' ; + break ; + } + } +} + +function FCKSpecialCombo_OnMouseOut( ev, specialCombo ) +{ + switch ( specialCombo.Style ) + { + case FCK_TOOLBARITEM_ONLYICON : + this.className = 'TB_Button_Off'; + break ; + case FCK_TOOLBARITEM_ONLYTEXT : + this.className = 'TB_Button_Off'; + break ; + case FCK_TOOLBARITEM_ICONTEXT : + this.className='SC_Field' ; + break ; + } +} + +function FCKSpecialCombo_OnClick( e, specialCombo ) +{ + // For Mozilla we must stop the event propagation to avoid it hiding + // the panel because of a click outside of it. +// if ( e ) +// { +// e.stopPropagation() ; +// FCKPanelEventHandlers.OnDocumentClick( e ) ; +// } + + if ( specialCombo.Enabled ) + { + var oPanel = specialCombo._Panel ; + var oPanelBox = specialCombo._PanelBox ; + var oItemsHolder = specialCombo._ItemsHolderEl ; + var iMaxHeight = specialCombo.PanelMaxHeight ; + + if ( specialCombo.OnBeforeClick ) + specialCombo.OnBeforeClick( specialCombo ) ; + + // This is a tricky thing. We must call the "Load" function, otherwise + // it will not be possible to retrieve "oItemsHolder.offsetHeight" (IE only). + if ( FCKBrowserInfo.IsIE ) + oPanel.Preload( 0, this.offsetHeight, this ) ; + + if ( oItemsHolder.offsetHeight > iMaxHeight ) +// { + oPanelBox.style.height = iMaxHeight + 'px' ; + +// if ( FCKBrowserInfo.IsGecko ) +// oPanelBox.style.overflow = '-moz-scrollbars-vertical' ; +// } + else + oPanelBox.style.height = '' ; + +// oPanel.PanelDiv.style.width = specialCombo.PanelWidth + 'px' ; + + oPanel.Show( 0, this.offsetHeight, this ) ; + } + +// return false ; +} + +/* +Sample Combo Field HTML output: + +
      + + + + + + + +
       
      +
      +*/ diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckstyle.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckstyle.js new file mode 100644 index 0000000000..92c943e20a --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckstyle.js @@ -0,0 +1,1280 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 == + * + * FCKStyle Class: contains a style definition, and all methods to work with + * the style in a document. + */ + +/** + * @param {Object} styleDesc A "style descriptor" object, containing the raw + * style definition in the following format: + * '" ; + + return sTags ; +} + +function _FCK_KeystrokeHandler_OnKeystroke( keystroke, keystrokeValue ) +{ + if ( FCK.Status != FCK_STATUS_COMPLETE ) + return false ; + + if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG ) + { + switch ( keystrokeValue ) + { + case 'Paste' : + return !FCK.Paste() ; + + case 'Cut' : + FCKUndo.SaveUndoStep() ; + return false ; + } + } + else + { + // In source mode, some actions must have their default behavior. + if ( keystrokeValue.Equals( 'Paste', 'Undo', 'Redo', 'SelectAll', 'Cut' ) ) + return false ; + } + + // The return value indicates if the default behavior of the keystroke must + // be cancelled. Let's do that only if the Execute() call explicitly returns "false". + var oCommand = FCK.Commands.GetCommand( keystrokeValue ) ; + return ( oCommand.Execute.apply( oCommand, FCKTools.ArgumentsToArray( arguments, 2 ) ) !== false ) ; +} + +// Set the FCK.LinkedField reference to the field that will be used to post the +// editor data. +(function() +{ + // There is a bug on IE... getElementById returns any META tag that has the + // name set to the ID you are looking for. So the best way in to get the array + // by names and look for the correct one. + // As ASP.Net generates a ID that is different from the Name, we must also + // look for the field based on the ID (the first one is the ID). + + var oDocument = window.parent.document ; + + // Try to get the field using the ID. + var eLinkedField = oDocument.getElementById( FCK.Name ) ; + + var i = 0; + while ( eLinkedField || i == 0 ) + { + if ( eLinkedField && eLinkedField.tagName.toLowerCase().Equals( 'input', 'textarea' ) ) + { + FCK.LinkedField = eLinkedField ; + break ; + } + + eLinkedField = oDocument.getElementsByName( FCK.Name )[i++] ; + } +})() ; + +var FCKTempBin = +{ + Elements : new Array(), + + AddElement : function( element ) + { + var iIndex = this.Elements.length ; + this.Elements[ iIndex ] = element ; + return iIndex ; + }, + + RemoveElement : function( index ) + { + var e = this.Elements[ index ] ; + this.Elements[ index ] = null ; + return e ; + }, + + Reset : function() + { + var i = 0 ; + while ( i < this.Elements.length ) + this.Elements[ i++ ] = null ; + this.Elements.length = 0 ; + } +} ; + + + +// # Focus Manager: Manages the focus in the editor. +var FCKFocusManager = FCK.FocusManager = +{ + IsLocked : false, + + AddWindow : function( win, sendToEditingArea ) + { + var oTarget ; + + if ( FCKBrowserInfo.IsIE ) + oTarget = win.nodeType == 1 ? win : win.frameElement ? win.frameElement : win.document ; + else if ( FCKBrowserInfo.IsSafari ) + oTarget = win ; + else + oTarget = win.document ; + + FCKTools.AddEventListener( oTarget, 'blur', FCKFocusManager_Win_OnBlur ) ; + FCKTools.AddEventListener( oTarget, 'focus', sendToEditingArea ? FCKFocusManager_Win_OnFocus_Area : FCKFocusManager_Win_OnFocus ) ; + }, + + RemoveWindow : function( win ) + { + if ( FCKBrowserInfo.IsIE ) + oTarget = win.nodeType == 1 ? win : win.frameElement ? win.frameElement : win.document ; + else + oTarget = win.document ; + + FCKTools.RemoveEventListener( oTarget, 'blur', FCKFocusManager_Win_OnBlur ) ; + FCKTools.RemoveEventListener( oTarget, 'focus', FCKFocusManager_Win_OnFocus_Area ) ; + FCKTools.RemoveEventListener( oTarget, 'focus', FCKFocusManager_Win_OnFocus ) ; + }, + + Lock : function() + { + this.IsLocked = true ; + }, + + Unlock : function() + { + if ( this._HasPendingBlur ) + FCKFocusManager._Timer = window.setTimeout( FCKFocusManager_FireOnBlur, 100 ) ; + + this.IsLocked = false ; + }, + + _ResetTimer : function() + { + this._HasPendingBlur = false ; + + if ( this._Timer ) + { + window.clearTimeout( this._Timer ) ; + delete this._Timer ; + } + } +} ; + +function FCKFocusManager_Win_OnBlur() +{ + if ( typeof(FCK) != 'undefined' && FCK.HasFocus ) + { + FCKFocusManager._ResetTimer() ; + FCKFocusManager._Timer = window.setTimeout( FCKFocusManager_FireOnBlur, 100 ) ; + } +} + +function FCKFocusManager_FireOnBlur() +{ + if ( FCKFocusManager.IsLocked ) + FCKFocusManager._HasPendingBlur = true ; + else + { + FCK.HasFocus = false ; + FCK.Events.FireEvent( "OnBlur" ) ; + } +} + +function FCKFocusManager_Win_OnFocus_Area() +{ + FCK.Focus() ; + FCKFocusManager_Win_OnFocus() ; +} + +function FCKFocusManager_Win_OnFocus() +{ + FCKFocusManager._ResetTimer() ; + + if ( !FCK.HasFocus && !FCKFocusManager.IsLocked ) + { + FCK.HasFocus = true ; + FCK.Events.FireEvent( "OnFocus" ) ; + } +} + diff --git a/phpgwapi/js/fckeditor/editor/_source/internals/fck_contextmenu.js b/phpgwapi/js/fckeditor/editor/_source/internals/fck_contextmenu.js new file mode 100644 index 0000000000..219e122ec2 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/internals/fck_contextmenu.js @@ -0,0 +1,325 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 == + * + * Defines the FCK.ContextMenu object that is responsible for all + * Context Menu operations in the editing area. + */ + +FCK.ContextMenu = new Object() ; +FCK.ContextMenu.Listeners = new Array() ; + +FCK.ContextMenu.RegisterListener = function( listener ) +{ + if ( listener ) + this.Listeners.push( listener ) ; +} + +function FCK_ContextMenu_Init() +{ + var oInnerContextMenu = FCK.ContextMenu._InnerContextMenu = new FCKContextMenu( FCKBrowserInfo.IsIE ? window : window.parent, FCKLang.Dir ) ; + oInnerContextMenu.CtrlDisable = FCKConfig.BrowserContextMenuOnCtrl ; + oInnerContextMenu.OnBeforeOpen = FCK_ContextMenu_OnBeforeOpen ; + oInnerContextMenu.OnItemClick = FCK_ContextMenu_OnItemClick ; + + // Get the registering function. + var oMenu = FCK.ContextMenu ; + + // Register all configured context menu listeners. + for ( var i = 0 ; i < FCKConfig.ContextMenu.length ; i++ ) + oMenu.RegisterListener( FCK_ContextMenu_GetListener( FCKConfig.ContextMenu[i] ) ) ; +} + +function FCK_ContextMenu_GetListener( listenerName ) +{ + switch ( listenerName ) + { + case 'Generic' : + return { + AddItems : function( menu, tag, tagName ) + { + menu.AddItem( 'Cut' , FCKLang.Cut , 7, FCKCommands.GetCommand( 'Cut' ).GetState() == FCK_TRISTATE_DISABLED ) ; + menu.AddItem( 'Copy' , FCKLang.Copy , 8, FCKCommands.GetCommand( 'Copy' ).GetState() == FCK_TRISTATE_DISABLED ) ; + menu.AddItem( 'Paste' , FCKLang.Paste , 9, FCKCommands.GetCommand( 'Paste' ).GetState() == FCK_TRISTATE_DISABLED ) ; + }} ; + + case 'Table' : + return { + AddItems : function( menu, tag, tagName ) + { + var bIsTable = ( tagName == 'TABLE' ) ; + var bIsCell = ( !bIsTable && FCKSelection.HasAncestorNode( 'TABLE' ) ) ; + + if ( bIsCell ) + { + menu.AddSeparator() ; + var oItem = menu.AddItem( 'Cell' , FCKLang.CellCM ) ; + oItem.AddItem( 'TableInsertCellBefore' , FCKLang.InsertCellBefore, 69 ) ; + oItem.AddItem( 'TableInsertCellAfter' , FCKLang.InsertCellAfter, 58 ) ; + oItem.AddItem( 'TableDeleteCells' , FCKLang.DeleteCells, 59 ) ; + if ( FCKBrowserInfo.IsGecko ) + oItem.AddItem( 'TableMergeCells' , FCKLang.MergeCells, 60, + FCKCommands.GetCommand( 'TableMergeCells' ).GetState() == FCK_TRISTATE_DISABLED ) ; + else + { + oItem.AddItem( 'TableMergeRight' , FCKLang.MergeRight, 60, + FCKCommands.GetCommand( 'TableMergeRight' ).GetState() == FCK_TRISTATE_DISABLED ) ; + oItem.AddItem( 'TableMergeDown' , FCKLang.MergeDown, 60, + FCKCommands.GetCommand( 'TableMergeDown' ).GetState() == FCK_TRISTATE_DISABLED ) ; + } + oItem.AddItem( 'TableHorizontalSplitCell' , FCKLang.HorizontalSplitCell, 61, + FCKCommands.GetCommand( 'TableHorizontalSplitCell' ).GetState() == FCK_TRISTATE_DISABLED ) ; + oItem.AddItem( 'TableVerticalSplitCell' , FCKLang.VerticalSplitCell, 61, + FCKCommands.GetCommand( 'TableVerticalSplitCell' ).GetState() == FCK_TRISTATE_DISABLED ) ; + oItem.AddSeparator() ; + oItem.AddItem( 'TableCellProp' , FCKLang.CellProperties, 57, + FCKCommands.GetCommand( 'TableCellProp' ).GetState() == FCK_TRISTATE_DISABLED ) ; + + menu.AddSeparator() ; + oItem = menu.AddItem( 'Row' , FCKLang.RowCM ) ; + oItem.AddItem( 'TableInsertRowBefore' , FCKLang.InsertRowBefore, 70 ) ; + oItem.AddItem( 'TableInsertRowAfter' , FCKLang.InsertRowAfter, 62 ) ; + oItem.AddItem( 'TableDeleteRows' , FCKLang.DeleteRows, 63 ) ; + + menu.AddSeparator() ; + oItem = menu.AddItem( 'Column' , FCKLang.ColumnCM ) ; + oItem.AddItem( 'TableInsertColumnBefore', FCKLang.InsertColumnBefore, 71 ) ; + oItem.AddItem( 'TableInsertColumnAfter' , FCKLang.InsertColumnAfter, 64 ) ; + oItem.AddItem( 'TableDeleteColumns' , FCKLang.DeleteColumns, 65 ) ; + } + + if ( bIsTable || bIsCell ) + { + menu.AddSeparator() ; + menu.AddItem( 'TableDelete' , FCKLang.TableDelete ) ; + menu.AddItem( 'TableProp' , FCKLang.TableProperties, 39 ) ; + } + }} ; + + case 'Link' : + return { + AddItems : function( menu, tag, tagName ) + { + var bInsideLink = ( tagName == 'A' || FCKSelection.HasAncestorNode( 'A' ) ) ; + + if ( bInsideLink || FCK.GetNamedCommandState( 'Unlink' ) != FCK_TRISTATE_DISABLED ) + { + // Go up to the anchor to test its properties + var oLink = FCKSelection.MoveToAncestorNode( 'A' ) ; + var bIsAnchor = ( oLink && oLink.name.length > 0 && oLink.href.length == 0 ) ; + // If it isn't a link then don't add the Link context menu + if ( bIsAnchor ) + return ; + + menu.AddSeparator() ; + if ( bInsideLink ) + menu.AddItem( 'Link', FCKLang.EditLink , 34 ) ; + menu.AddItem( 'Unlink' , FCKLang.RemoveLink , 35 ) ; + } + }} ; + + case 'Image' : + return { + AddItems : function( menu, tag, tagName ) + { + if ( tagName == 'IMG' && !tag.getAttribute( '_fckfakelement' ) ) + { + menu.AddSeparator() ; + menu.AddItem( 'Image', FCKLang.ImageProperties, 37 ) ; + } + }} ; + + case 'Anchor' : + return { + AddItems : function( menu, tag, tagName ) + { + // Go up to the anchor to test its properties + var oLink = FCKSelection.MoveToAncestorNode( 'A' ) ; + var bIsAnchor = ( oLink && oLink.name.length > 0 ) ; + + if ( bIsAnchor || ( tagName == 'IMG' && tag.getAttribute( '_fckanchor' ) ) ) + { + menu.AddSeparator() ; + menu.AddItem( 'Anchor', FCKLang.AnchorProp, 36 ) ; + menu.AddItem( 'AnchorDelete', FCKLang.AnchorDelete ) ; + } + }} ; + + case 'Flash' : + return { + AddItems : function( menu, tag, tagName ) + { + if ( tagName == 'IMG' && tag.getAttribute( '_fckflash' ) ) + { + menu.AddSeparator() ; + menu.AddItem( 'Flash', FCKLang.FlashProperties, 38 ) ; + } + }} ; + + case 'Form' : + return { + AddItems : function( menu, tag, tagName ) + { + if ( FCKSelection.HasAncestorNode('FORM') ) + { + menu.AddSeparator() ; + menu.AddItem( 'Form', FCKLang.FormProp, 48 ) ; + } + }} ; + + case 'Checkbox' : + return { + AddItems : function( menu, tag, tagName ) + { + if ( tagName == 'INPUT' && tag.type == 'checkbox' ) + { + menu.AddSeparator() ; + menu.AddItem( 'Checkbox', FCKLang.CheckboxProp, 49 ) ; + } + }} ; + + case 'Radio' : + return { + AddItems : function( menu, tag, tagName ) + { + if ( tagName == 'INPUT' && tag.type == 'radio' ) + { + menu.AddSeparator() ; + menu.AddItem( 'Radio', FCKLang.RadioButtonProp, 50 ) ; + } + }} ; + + case 'TextField' : + return { + AddItems : function( menu, tag, tagName ) + { + if ( tagName == 'INPUT' && ( tag.type == 'text' || tag.type == 'password' ) ) + { + menu.AddSeparator() ; + menu.AddItem( 'TextField', FCKLang.TextFieldProp, 51 ) ; + } + }} ; + + case 'HiddenField' : + return { + AddItems : function( menu, tag, tagName ) + { + if ( tagName == 'IMG' && tag.getAttribute( '_fckinputhidden' ) ) + { + menu.AddSeparator() ; + menu.AddItem( 'HiddenField', FCKLang.HiddenFieldProp, 56 ) ; + } + }} ; + + case 'ImageButton' : + return { + AddItems : function( menu, tag, tagName ) + { + if ( tagName == 'INPUT' && tag.type == 'image' ) + { + menu.AddSeparator() ; + menu.AddItem( 'ImageButton', FCKLang.ImageButtonProp, 55 ) ; + } + }} ; + + case 'Button' : + return { + AddItems : function( menu, tag, tagName ) + { + if ( tagName == 'INPUT' && ( tag.type == 'button' || tag.type == 'submit' || tag.type == 'reset' ) ) + { + menu.AddSeparator() ; + menu.AddItem( 'Button', FCKLang.ButtonProp, 54 ) ; + } + }} ; + + case 'Select' : + return { + AddItems : function( menu, tag, tagName ) + { + if ( tagName == 'SELECT' ) + { + menu.AddSeparator() ; + menu.AddItem( 'Select', FCKLang.SelectionFieldProp, 53 ) ; + } + }} ; + + case 'Textarea' : + return { + AddItems : function( menu, tag, tagName ) + { + if ( tagName == 'TEXTAREA' ) + { + menu.AddSeparator() ; + menu.AddItem( 'Textarea', FCKLang.TextareaProp, 52 ) ; + } + }} ; + + case 'BulletedList' : + return { + AddItems : function( menu, tag, tagName ) + { + if ( FCKSelection.HasAncestorNode('UL') ) + { + menu.AddSeparator() ; + menu.AddItem( 'BulletedList', FCKLang.BulletedListProp, 27 ) ; + } + }} ; + + case 'NumberedList' : + return { + AddItems : function( menu, tag, tagName ) + { + if ( FCKSelection.HasAncestorNode('OL') ) + { + menu.AddSeparator() ; + menu.AddItem( 'NumberedList', FCKLang.NumberedListProp, 26 ) ; + } + }} ; + } + return null ; +} + +function FCK_ContextMenu_OnBeforeOpen() +{ + // Update the UI. + FCK.Events.FireEvent( 'OnSelectionChange' ) ; + + // Get the actual selected tag (if any). + var oTag, sTagName ; + + // The extra () is to avoid a warning with strict error checking. This is ok. + if ( (oTag = FCKSelection.GetSelectedElement()) ) + sTagName = oTag.tagName ; + + // Cleanup the current menu items. + var oMenu = FCK.ContextMenu._InnerContextMenu ; + oMenu.RemoveAllItems() ; + + // Loop through the listeners. + var aListeners = FCK.ContextMenu.Listeners ; + for ( var i = 0 ; i < aListeners.length ; i++ ) + aListeners[i].AddItems( oMenu, oTag, sTagName ) ; +} + +function FCK_ContextMenu_OnItemClick( item ) +{ + FCK.Focus() ; + FCKCommands.GetCommand( item.Name ).Execute() ; +} diff --git a/phpgwapi/js/fckeditor/editor/_source/internals/fck_gecko.js b/phpgwapi/js/fckeditor/editor/_source/internals/fck_gecko.js new file mode 100644 index 0000000000..ecaf37de99 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/internals/fck_gecko.js @@ -0,0 +1,465 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 == + * + * Creation and initialization of the "FCK" object. This is the main + * object that represents an editor instance. + * (Gecko specific implementations) + */ + +FCK.Description = "FCKeditor for Gecko Browsers" ; + +FCK.InitializeBehaviors = function() +{ + // When calling "SetData", the editing area IFRAME gets a fixed height. So we must recalculate it. + if ( FCKBrowserInfo.IsGecko ) // Not for Safari/Opera. + Window_OnResize() ; + + FCKFocusManager.AddWindow( this.EditorWindow ) ; + + this.ExecOnSelectionChange = function() + { + FCK.Events.FireEvent( "OnSelectionChange" ) ; + } + + this._ExecDrop = function( evt ) + { + if ( FCK.MouseDownFlag ) + { + FCK.MouseDownFlag = false ; + return ; + } + if ( FCKConfig.ForcePasteAsPlainText ) + { + if ( evt.dataTransfer ) + { + var text = evt.dataTransfer.getData( 'Text' ) ; + text = FCKTools.HTMLEncode( text ) ; + text = FCKTools.ProcessLineBreaks( window, FCKConfig, text ) ; + FCK.InsertHtml( text ) ; + } + else if ( FCKConfig.ShowDropDialog ) + FCK.PasteAsPlainText() ; + } + else if ( FCKConfig.ShowDropDialog ) + FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.Paste, 'dialog/fck_paste.html', 400, 330, 'Security' ) ; + evt.preventDefault() ; + evt.stopPropagation() ; + } + + this._ExecCheckCaret = function( evt ) + { + if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG ) + return ; + + if ( evt.type == 'keypress' ) + { + var keyCode = evt.keyCode ; + // ignore if positioning key is not pressed. + // left or up arrow keys need to be processed as well, since links can be expanded in Gecko's editor + // when the caret moved left or up from another block element below. + if ( keyCode < 33 || keyCode > 40 ) + return ; + } + + var blockEmptyStop = function( node ) + { + if ( node.nodeType != 1 ) + return false ; + var tag = node.tagName.toLowerCase() ; + return ( FCKListsLib.BlockElements[tag] || FCKListsLib.EmptyElements[tag] ) ; + } + + var moveCursor = function() + { + var selection = FCK.EditorWindow.getSelection() ; + var range = selection.getRangeAt(0) ; + if ( ! range || ! range.collapsed ) + return ; + + var node = range.endContainer ; + + // only perform the patched behavior if we're at the end of a text node. + if ( node.nodeType != 3 ) + return ; + + if ( node.nodeValue.length != range.endOffset ) + return ; + + // only perform the patched behavior if we're in an tag, or the End key is pressed. + var parentTag = node.parentNode.tagName.toLowerCase() ; + if ( ! ( parentTag == 'a' || + ( ! ( FCKListsLib.BlockElements[parentTag] || FCKListsLib.NonEmptyBlockElements[parentTag] ) + && keyCode == 35 ) ) ) + return ; + + // our caret has moved to just after the last character of a text node under an unknown tag, how to proceed? + // first, see if there are other text nodes by DFS walking from this text node. + // - if the DFS has scanned all nodes under my parent, then go the next step. + // - if there is a text node after me but still under my parent, then do nothing and return. + var nextTextNode = FCKTools.GetNextTextNode( node, node.parentNode, blockEmptyStop ) ; + if ( nextTextNode ) + return ; + + // we're pretty sure we need to move the caret forcefully from here. + range = FCK.EditorDocument.createRange() ; + + nextTextNode = FCKTools.GetNextTextNode( node, node.parentNode.parentNode, blockEmptyStop ) ; + if ( nextTextNode ) + { + // Opera thinks the dummy empty text node we append beyond the end of nodes occupies a caret + // position. So if the user presses the left key and we reset the caret position here, the user + // wouldn't be able to go back. + if ( FCKBrowserInfo.IsOpera && keyCode == 37 ) + return ; + + // now we want to get out of our current parent node, adopt the next parent, and move the caret to + // the appropriate text node under our new parent. + // our new parent might be our current parent's siblings if we are lucky. + range.setStart( nextTextNode, 0 ) ; + range.setEnd( nextTextNode, 0 ) ; + } + else + { + // no suitable next siblings under our grandparent! what to do next? + while ( node.parentNode + && node.parentNode != FCK.EditorDocument.body + && node.parentNode != FCK.EditorDocument.documentElement + && node == node.parentNode.lastChild + && ( ! FCKListsLib.BlockElements[node.parentNode.tagName.toLowerCase()] + && ! FCKListsLib.NonEmptyBlockElements[node.parentNode.tagName.toLowerCase()] ) ) + node = node.parentNode ; + + + if ( FCKListsLib.BlockElements[ parentTag ] + || FCKListsLib.EmptyElements[ parentTag ] + || node == FCK.EditorDocument.body ) + { + // if our parent is a block node, move to the end of our parent. + range.setStart( node, node.childNodes.length ) ; + range.setEnd( node, node.childNodes.length ) ; + } + else + { + // things are a little bit more interesting if our parent is not a block node + // due to the weired ways how Gecko's caret acts... + var stopNode = node.nextSibling ; + + // find out the next block/empty element at our grandparent, we'll + // move the caret just before it. + while ( stopNode ) + { + if ( stopNode.nodeType != 1 ) + { + stopNode = stopNode.nextSibling ; + continue ; + } + + var stopTag = stopNode.tagName.toLowerCase() ; + if ( FCKListsLib.BlockElements[stopTag] || FCKListsLib.EmptyElements[stopTag] + || FCKListsLib.NonEmptyBlockElements[stopTag] ) + break ; + stopNode = stopNode.nextSibling ; + } + + // note that the dummy marker below is NEEDED, otherwise the caret's behavior will + // be broken in Gecko. + var marker = FCK.EditorDocument.createTextNode( '' ) ; + if ( stopNode ) + node.parentNode.insertBefore( marker, stopNode ) ; + else + node.parentNode.appendChild( marker ) ; + range.setStart( marker, 0 ) ; + range.setEnd( marker, 0 ) ; + } + } + + selection.removeAllRanges() ; + selection.addRange( range ) ; + FCK.Events.FireEvent( "OnSelectionChange" ) ; + } + + setTimeout( moveCursor, 1 ) ; + } + + this.ExecOnSelectionChangeTimer = function() + { + if ( FCK.LastOnChangeTimer ) + window.clearTimeout( FCK.LastOnChangeTimer ) ; + + FCK.LastOnChangeTimer = window.setTimeout( FCK.ExecOnSelectionChange, 100 ) ; + } + + this.EditorDocument.addEventListener( 'mouseup', this.ExecOnSelectionChange, false ) ; + + // On Gecko, firing the "OnSelectionChange" event on every key press started to be too much + // slow. So, a timer has been implemented to solve performance issues when typing to quickly. + this.EditorDocument.addEventListener( 'keyup', this.ExecOnSelectionChangeTimer, false ) ; + + this._DblClickListener = function( e ) + { + FCK.OnDoubleClick( e.target ) ; + e.stopPropagation() ; + } + this.EditorDocument.addEventListener( 'dblclick', this._DblClickListener, true ) ; + + // Record changes for the undo system when there are key down events. + this.EditorDocument.addEventListener( 'keydown', this._KeyDownListener, false ) ; + + // Hooks for data object drops + if ( FCKBrowserInfo.IsGecko ) + { + this.EditorWindow.addEventListener( 'dragdrop', this._ExecDrop, true ) ; + } + else if ( FCKBrowserInfo.IsSafari ) + { + var cancelHandler = function( evt ){ if ( ! FCK.MouseDownFlag ) evt.returnValue = false ; } + this.EditorDocument.addEventListener( 'dragenter', cancelHandler, true ) ; + this.EditorDocument.addEventListener( 'dragover', cancelHandler, true ) ; + this.EditorDocument.addEventListener( 'drop', this._ExecDrop, true ) ; + this.EditorDocument.addEventListener( 'mousedown', + function( ev ) + { + var element = ev.srcElement ; + + if ( element.nodeName.IEquals( 'IMG', 'HR', 'INPUT', 'TEXTAREA', 'SELECT' ) ) + { + FCKSelection.SelectNode( element ) ; + } + }, true ) ; + + this.EditorDocument.addEventListener( 'mouseup', + function( ev ) + { + if ( ev.srcElement.nodeName.IEquals( 'INPUT', 'TEXTAREA', 'SELECT' ) ) + ev.preventDefault() + }, true ) ; + + this.EditorDocument.addEventListener( 'click', + function( ev ) + { + if ( ev.srcElement.nodeName.IEquals( 'INPUT', 'TEXTAREA', 'SELECT' ) ) + ev.preventDefault() + }, true ) ; + } + + // Kludge for buggy Gecko caret positioning logic (Bug #393 and #1056) + if ( FCKBrowserInfo.IsGecko || FCKBrowserInfo.IsOpera ) + { + this.EditorDocument.addEventListener( 'keypress', this._ExecCheckCaret, false ) ; + this.EditorDocument.addEventListener( 'click', this._ExecCheckCaret, false ) ; + } + + // Reset the context menu. + FCK.ContextMenu._InnerContextMenu.SetMouseClickWindow( FCK.EditorWindow ) ; + FCK.ContextMenu._InnerContextMenu.AttachToElement( FCK.EditorDocument ) ; +} + +FCK.MakeEditable = function() +{ + this.EditingArea.MakeEditable() ; +} + +// Disable the context menu in the editor (outside the editing area). +function Document_OnContextMenu( e ) +{ + if ( !e.target._FCKShowContextMenu ) + e.preventDefault() ; +} +document.oncontextmenu = Document_OnContextMenu ; + +// GetNamedCommandState overload for Gecko. +FCK._BaseGetNamedCommandState = FCK.GetNamedCommandState ; +FCK.GetNamedCommandState = function( commandName ) +{ + switch ( commandName ) + { + case 'Unlink' : + return FCKSelection.HasAncestorNode('A') ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ; + default : + return FCK._BaseGetNamedCommandState( commandName ) ; + } +} + +// Named commands to be handled by this browsers specific implementation. +FCK.RedirectNamedCommands = +{ + Print : true, + Paste : true, + + Cut : true, + Copy : true +} ; + +// ExecuteNamedCommand overload for Gecko. +FCK.ExecuteRedirectedNamedCommand = function( commandName, commandParameter ) +{ + switch ( commandName ) + { + case 'Print' : + FCK.EditorWindow.print() ; + break ; + case 'Paste' : + try + { + // Force the paste dialog for Safari (#50). + if ( FCKBrowserInfo.IsSafari ) + throw '' ; + + if ( FCK.Paste() ) + FCK.ExecuteNamedCommand( 'Paste', null, true ) ; + } + catch (e) { FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.Paste, 'dialog/fck_paste.html', 400, 330, 'Security' ) ; } + break ; + case 'Cut' : + try { FCK.ExecuteNamedCommand( 'Cut', null, true ) ; } + catch (e) { alert(FCKLang.PasteErrorCut) ; } + break ; + case 'Copy' : + try { FCK.ExecuteNamedCommand( 'Copy', null, true ) ; } + catch (e) { alert(FCKLang.PasteErrorCopy) ; } + break ; + default : + FCK.ExecuteNamedCommand( commandName, commandParameter ) ; + } +} + +FCK._ExecPaste = function() +{ + // Save a snapshot for undo before actually paste the text + FCKUndo.SaveUndoStep() ; + + if ( FCKConfig.ForcePasteAsPlainText ) + { + FCK.PasteAsPlainText() ; + return false ; + } + + /* For now, the AutoDetectPasteFromWord feature is IE only. */ + return true ; +} + +//** +// FCK.InsertHtml: Inserts HTML at the current cursor location. Deletes the +// selected content if any. +FCK.InsertHtml = function( html ) +{ + html = FCKConfig.ProtectedSource.Protect( html ) ; + html = FCK.ProtectEvents( html ) ; + html = FCK.ProtectUrls( html ) ; + html = FCK.ProtectTags( html ) ; + + // Save an undo snapshot first. + FCKUndo.SaveUndoStep() ; + + // Insert the HTML code. + this.EditorDocument.execCommand( 'inserthtml', false, html ) ; + this.Focus() ; + + // For some strange reason the SaveUndoStep() call doesn't activate the undo button at the first InsertHtml() call. + this.Events.FireEvent( "OnSelectionChange" ) ; +} + +FCK.PasteAsPlainText = function() +{ + // TODO: Implement the "Paste as Plain Text" code. + + // If the function is called immediately Firefox 2 does automatically paste the contents as soon as the new dialog is created + // so we run it in a Timeout and the paste event can be cancelled + FCKTools.RunFunction( FCKDialog.OpenDialog, FCKDialog, ['FCKDialog_Paste', FCKLang.PasteAsText, 'dialog/fck_paste.html', 400, 330, 'PlainText'] ) ; + +/* + var sText = FCKTools.HTMLEncode( clipboardData.getData("Text") ) ; + sText = sText.replace( /\n/g, '
      ' ) ; + this.InsertHtml( sText ) ; +*/ +} +/* +FCK.PasteFromWord = function() +{ + // TODO: Implement the "Paste as Plain Text" code. + + FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.PasteFromWord, 'dialog/fck_paste.html', 400, 330, 'Word' ) ; + +// FCK.CleanAndPaste( FCK.GetClipboardHTML() ) ; +} +*/ +FCK.GetClipboardHTML = function() +{ + return '' ; +} + +FCK.CreateLink = function( url, noUndo ) +{ + // Creates the array that will be returned. It contains one or more created links (see #220). + var aCreatedLinks = new Array() ; + + FCK.ExecuteNamedCommand( 'Unlink', null, false, !!noUndo ) ; + + if ( url.length > 0 ) + { + // Generate a temporary name for the link. + var sTempUrl = 'javascript:void(0);/*' + ( new Date().getTime() ) + '*/' ; + + // Use the internal "CreateLink" command to create the link. + FCK.ExecuteNamedCommand( 'CreateLink', sTempUrl, false, !!noUndo ) ; + + // Retrieve the just created links using XPath. + var oLinksInteractor = this.EditorDocument.evaluate("//a[@href='" + sTempUrl + "']", this.EditorDocument.body, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null) ; + + // Add all links to the returning array. + for ( var i = 0 ; i < oLinksInteractor.snapshotLength ; i++ ) + { + var oLink = oLinksInteractor.snapshotItem( i ) ; + oLink.href = url ; + + // It may happen that the browser (aka Safari) decides to use the + // URL as the link content to not leave it empty. In this case, + // let's reset it. + if ( sTempUrl == oLink.innerHTML ) + oLink.innerHTML = '' ; + + aCreatedLinks.push( oLink ) ; + } + } + + return aCreatedLinks ; +} + +FCK._FillEmptyBlock = function( emptyBlockNode ) +{ + if ( ! emptyBlockNode || emptyBlockNode.nodeType != 1 ) + return ; + var nodeTag = emptyBlockNode.tagName.toLowerCase() ; + if ( nodeTag != 'p' && nodeTag != 'div' ) + return ; + if ( emptyBlockNode.firstChild ) + return ; + FCKTools.AppendBogusBr( emptyBlockNode ) ; +} + +FCK._ExecCheckEmptyBlock = function() +{ + FCK._FillEmptyBlock( FCK.EditorDocument.body.firstChild ) ; + var sel = FCK.EditorWindow.getSelection() ; + if ( !sel || sel.rangeCount < 1 ) + return ; + var range = sel.getRangeAt( 0 ); + FCK._FillEmptyBlock( range.startContainer ) ; +} diff --git a/phpgwapi/js/fckeditor/editor/_source/internals/fck_ie.js b/phpgwapi/js/fckeditor/editor/_source/internals/fck_ie.js new file mode 100644 index 0000000000..5553275b91 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/internals/fck_ie.js @@ -0,0 +1,435 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 == + * + * Creation and initialization of the "FCK" object. This is the main + * object that represents an editor instance. + * (IE specific implementations) + */ + +FCK.Description = "FCKeditor for Internet Explorer 5.5+" ; + +FCK._GetBehaviorsStyle = function() +{ + if ( !FCK._BehaviorsStyle ) + { + var sBasePath = FCKConfig.FullBasePath ; + var sTableBehavior = '' ; + var sStyle ; + + // The behaviors should be pointed using the FullBasePath to avoid security + // errors when using a different BaseHref. + sStyle = '' ; + FCK._BehaviorsStyle = sStyle ; + } + + return FCK._BehaviorsStyle ; +} + +function Doc_OnMouseUp() +{ + if ( FCK.EditorWindow.event.srcElement.tagName == 'HTML' ) + { + FCK.Focus() ; + FCK.EditorWindow.event.cancelBubble = true ; + FCK.EditorWindow.event.returnValue = false ; + } +} + +function Doc_OnPaste() +{ + var body = FCK.EditorDocument.body ; + + body.detachEvent( 'onpaste', Doc_OnPaste ) ; + + var ret = FCK.Paste( !FCKConfig.ForcePasteAsPlainText && !FCKConfig.AutoDetectPasteFromWord ) ; + + body.attachEvent( 'onpaste', Doc_OnPaste ) ; + + return ret ; +} + +function Doc_OnDblClick() +{ + FCK.OnDoubleClick( FCK.EditorWindow.event.srcElement ) ; + FCK.EditorWindow.event.cancelBubble = true ; +} + +function Doc_OnSelectionChange() +{ + // Don't fire the event if no document is loaded. + if ( FCK.EditorDocument ) + FCK.Events.FireEvent( "OnSelectionChange" ) ; +} + +function Doc_OnDrop() +{ + if ( FCK.MouseDownFlag ) + { + FCK.MouseDownFlag = false ; + return ; + } + var evt = FCK.EditorWindow.event ; + if ( FCKConfig.ForcePasteAsPlainText ) + { + if ( FCK._CheckIsPastingEnabled() || FCKConfig.ShowDropDialog ) + FCK.PasteAsPlainText( evt.dataTransfer.getData( 'Text' ) ) ; + } + else + { + if ( FCKConfig.ShowDropDialog ) + FCKTools.RunFunction( FCKDialog.OpenDialog, + FCKDialog, ['FCKDialog_Paste', FCKLang.Paste, 'dialog/fck_paste.html', 400, 330, 'Security'] ) ; + } + evt.returnValue = false ; + evt.cancelBubble = true ; +} + +FCK.InitializeBehaviors = function( dontReturn ) +{ + // Set the focus to the editable area when clicking in the document area. + // TODO: The cursor must be positioned at the end. + this.EditorDocument.attachEvent( 'onmouseup', Doc_OnMouseUp ) ; + + // Intercept pasting operations + this.EditorDocument.body.attachEvent( 'onpaste', Doc_OnPaste ) ; + + // Intercept drop operations + this.EditorDocument.body.attachEvent( 'ondrop', Doc_OnDrop ) ; + + // Reset the context menu. + FCK.ContextMenu._InnerContextMenu.AttachToElement( FCK.EditorDocument.body ) ; + + this.EditorDocument.attachEvent("onkeydown", FCK._KeyDownListener ) ; + + this.EditorDocument.attachEvent("ondblclick", Doc_OnDblClick ) ; + + // Catch cursor selection changes. + this.EditorDocument.attachEvent("onselectionchange", Doc_OnSelectionChange ) ; +} + +FCK.InsertHtml = function( html ) +{ + html = FCKConfig.ProtectedSource.Protect( html ) ; + html = FCK.ProtectEvents( html ) ; + html = FCK.ProtectUrls( html ) ; + html = FCK.ProtectTags( html ) ; + +// FCK.Focus() ; + FCK.EditorWindow.focus() ; + + FCKUndo.SaveUndoStep() ; + + // Gets the actual selection. + var oSel = FCK.EditorDocument.selection ; + + // Deletes the actual selection contents. + if ( oSel.type.toLowerCase() == 'control' ) + oSel.clear() ; + + // Using the following trick, any comment in the beginning of the HTML will + // be preserved. + html = ' ' + html ; + + // Insert the HTML. + oSel.createRange().pasteHTML( html ) ; + + // Remove the fake node + FCK.EditorDocument.getElementById('__fakeFCKRemove__').removeNode( true ) ; + + FCKDocumentProcessor.Process( FCK.EditorDocument ) ; + + // For some strange reason the SaveUndoStep() call doesn't activate the undo button at the first InsertHtml() call. + this.Events.FireEvent( "OnSelectionChange" ) ; +} + +FCK.SetInnerHtml = function( html ) // IE Only +{ + var oDoc = FCK.EditorDocument ; + // Using the following trick, any comment in the beginning of the HTML will + // be preserved. + oDoc.body.innerHTML = '
       
      ' + html ; + oDoc.getElementById('__fakeFCKRemove__').removeNode( true ) ; +} + +function FCK_PreloadImages() +{ + var oPreloader = new FCKImagePreloader() ; + + // Add the configured images. + oPreloader.AddImages( FCKConfig.PreloadImages ) ; + + // Add the skin icons strip. + oPreloader.AddImages( FCKConfig.SkinPath + 'fck_strip.gif' ) ; + + oPreloader.OnComplete = LoadToolbarSetup ; + oPreloader.Start() ; +} + +// Disable the context menu in the editor (outside the editing area). +function Document_OnContextMenu() +{ + return ( event.srcElement._FCKShowContextMenu == true ) ; +} +document.oncontextmenu = Document_OnContextMenu ; + +function FCK_Cleanup() +{ + this.LinkedField = null ; + this.EditorWindow = null ; + this.EditorDocument = null ; +} + +FCK._ExecPaste = function() +{ + // As we call ExecuteNamedCommand('Paste'), it would enter in a loop. So, let's use a semaphore. + if ( FCK._PasteIsRunning ) + return true ; + + if ( FCKConfig.ForcePasteAsPlainText ) + { + FCK.PasteAsPlainText() ; + return false ; + } + + var sHTML = FCK._CheckIsPastingEnabled( true ) ; + + if ( sHTML === false ) + FCKTools.RunFunction( FCKDialog.OpenDialog, FCKDialog, ['FCKDialog_Paste', FCKLang.Paste, 'dialog/fck_paste.html', 400, 330, 'Security'] ) ; + else + { + if ( FCKConfig.AutoDetectPasteFromWord && sHTML.length > 0 ) + { + var re = /<\w[^>]*(( class="?MsoNormal"?)|(="mso-))/gi ; + if ( re.test( sHTML ) ) + { + if ( confirm( FCKLang.PasteWordConfirm ) ) + { + FCK.PasteFromWord() ; + return false ; + } + } + } + + // Instead of inserting the retrieved HTML, let's leave the OS work for us, + // by calling FCK.ExecuteNamedCommand( 'Paste' ). It could give better results. + + // Enable the semaphore to avoid a loop. + FCK._PasteIsRunning = true ; + + FCK.ExecuteNamedCommand( 'Paste' ) ; + + // Removes the semaphore. + delete FCK._PasteIsRunning ; + } + + // Let's always make a custom implementation (return false), otherwise + // the new Keyboard Handler may conflict with this code, and the CTRL+V code + // could result in a simple "V" being pasted. + return false ; +} + +FCK.PasteAsPlainText = function( forceText ) +{ + if ( !FCK._CheckIsPastingEnabled() ) + { + FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.PasteAsText, 'dialog/fck_paste.html', 400, 330, 'PlainText' ) ; + return ; + } + + // Get the data available in the clipboard in text format. + var sText = null ; + if ( ! forceText ) + sText = clipboardData.getData("Text") ; + else + sText = forceText ; + + if ( sText && sText.length > 0 ) + { + // Replace the carriage returns with
      + sText = FCKTools.HTMLEncode( sText ) ; + sText = FCKTools.ProcessLineBreaks( window, FCKConfig, sText ) ; + + var closeTagIndex = sText.search( '

      ' ) ; + var startTagIndex = sText.search( '

      ' ) ; + + if ( ( closeTagIndex != -1 && startTagIndex != -1 && closeTagIndex < startTagIndex ) + || ( closeTagIndex != -1 && startTagIndex == -1 ) ) + { + var prefix = sText.substr( 0, closeTagIndex ) ; + sText = sText.substr( closeTagIndex + 4 ) ; + this.InsertHtml( prefix ) ; + } + + // Insert the resulting data in the editor. + FCKUndo.SaveLocked = true ; + this.InsertHtml( sText ) ; + FCKUndo.SaveLocked = false ; + } +} + +FCK._CheckIsPastingEnabled = function( returnContents ) +{ + // The following seams to be the only reliable way to check is script + // pasting operations are enabled in the security settings of IE6 and IE7. + // It adds a little bit of overhead to the check, but so far that's the + // only way, mainly because of IE7. + + FCK._PasteIsEnabled = false ; + + document.body.attachEvent( 'onpaste', FCK_CheckPasting_Listener ) ; + + // The execCommand in GetClipboardHTML will fire the "onpaste", only if the + // security settings are enabled. + var oReturn = FCK.GetClipboardHTML() ; + + document.body.detachEvent( 'onpaste', FCK_CheckPasting_Listener ) ; + + if ( FCK._PasteIsEnabled ) + { + if ( !returnContents ) + oReturn = true ; + } + else + oReturn = false ; + + delete FCK._PasteIsEnabled ; + + return oReturn ; +} + +function FCK_CheckPasting_Listener() +{ + FCK._PasteIsEnabled = true ; +} + +FCK.GetClipboardHTML = function() +{ + var oDiv = document.getElementById( '___FCKHiddenDiv' ) ; + + if ( !oDiv ) + { + oDiv = document.createElement( 'DIV' ) ; + oDiv.id = '___FCKHiddenDiv' ; + + var oDivStyle = oDiv.style ; + oDivStyle.position = 'absolute' ; + oDivStyle.visibility = oDivStyle.overflow = 'hidden' ; + oDivStyle.width = oDivStyle.height = 1 ; + + document.body.appendChild( oDiv ) ; + } + + oDiv.innerHTML = '' ; + + var oTextRange = document.body.createTextRange() ; + oTextRange.moveToElementText( oDiv ) ; + oTextRange.execCommand( 'Paste' ) ; + + var sData = oDiv.innerHTML ; + oDiv.innerHTML = '' ; + + return sData ; +} + +FCK.CreateLink = function( url, noUndo ) +{ + // Creates the array that will be returned. It contains one or more created links (see #220). + var aCreatedLinks = new Array() ; + + // Remove any existing link in the selection. + FCK.ExecuteNamedCommand( 'Unlink', null, false, !!noUndo ) ; + + if ( url.length > 0 ) + { + // If there are several images, and you try to link each one, all the images get inside the link: + // -> -> due to the call to 'CreateLink' (bug in IE) + if (FCKSelection.GetType() == 'Control') + { + // Create a link + var oLink = this.EditorDocument.createElement( 'A' ) ; + oLink.href = url ; + + // Get the selected object + var oControl = FCKSelection.GetSelectedElement() ; + // Put the link just before the object + oControl.parentNode.insertBefore(oLink, oControl) ; + // Move the object inside the link + oControl.parentNode.removeChild( oControl ) ; + oLink.appendChild( oControl ) ; + + return [ oLink ] ; + } + + // Generate a temporary name for the link. + var sTempUrl = 'javascript:void(0);/*' + ( new Date().getTime() ) + '*/' ; + + // Use the internal "CreateLink" command to create the link. + FCK.ExecuteNamedCommand( 'CreateLink', sTempUrl, false, !!noUndo ) ; + + // Look for the just create link. + var oLinks = this.EditorDocument.links ; + + for ( i = 0 ; i < oLinks.length ; i++ ) + { + var oLink = oLinks[i] ; + + // Check it this a newly created link. + // getAttribute must be used. oLink.url may cause problems with IE7 (#555). + if ( oLink.getAttribute( 'href', 2 ) == sTempUrl ) + { + var sInnerHtml = oLink.innerHTML ; // Save the innerHTML (IE changes it if it is like an URL). + oLink.href = url ; + oLink.innerHTML = sInnerHtml ; // Restore the innerHTML. + + // If the last child is a
      move it outside the link or it + // will be too easy to select this link again #388. + var oLastChild = oLink.lastChild ; + if ( oLastChild && oLastChild.nodeName == 'BR' ) + { + // Move the BR after the link. + FCKDomTools.InsertAfterNode( oLink, oLink.removeChild( oLastChild ) ) ; + } + + aCreatedLinks.push( oLink ) ; + } + } + } + + return aCreatedLinks ; +} diff --git a/phpgwapi/js/fckeditor/editor/_source/internals/fckbrowserinfo.js b/phpgwapi/js/fckeditor/editor/_source/internals/fckbrowserinfo.js new file mode 100644 index 0000000000..ef21a24789 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/internals/fckbrowserinfo.js @@ -0,0 +1,59 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 == + * + * Contains browser detection information. + */ + +var s = navigator.userAgent.toLowerCase() ; + +var FCKBrowserInfo = +{ + IsIE : /*@cc_on!@*/false, + IsIE7 : /*@cc_on!@*/false && s.Contains('msie 7'), + IsGecko : s.Contains('gecko/'), + IsSafari : s.Contains(' applewebkit/'), // Read "IsWebKit" + IsOpera : !!window.opera, + IsMac : s.Contains('macintosh') +} ; + +// Completes the browser info with further Gecko information. +(function( browserInfo ) +{ + browserInfo.IsGeckoLike = ( browserInfo.IsGecko || browserInfo.IsSafari || browserInfo.IsOpera ) ; + + if ( browserInfo.IsGecko ) + { + var geckoVersion = s.match( /gecko\/(\d+)/ )[1] ; + + // Actually "10" refers to Gecko versions before Firefox 1.5, when + // Gecko 1.8 (build 20051111) has been released. + + // Some browser (like Mozilla 1.7.13) may have a Gecko build greater + // than 20051111, so we must also check for the revision number not to + // be 1.7 (we are assuming that rv < 1.7 will not have build > 20051111). + + // TODO: Future versions may consider the rv number only, but it is + // still to check that all Gecko based browser present the rv number. + browserInfo.IsGecko10 = ( ( geckoVersion < 20051111 ) || ( /rv:1\.7/.test(s) ) ) ; + browserInfo.IsGecko19 = /rv:1\.9/.test(s) ; + } + else + browserInfo.IsGecko10 = false ; +})(FCKBrowserInfo) ; diff --git a/phpgwapi/js/fckeditor/editor/_source/internals/fckcodeformatter.js b/phpgwapi/js/fckeditor/editor/_source/internals/fckcodeformatter.js new file mode 100644 index 0000000000..a50d767ece --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/internals/fckcodeformatter.js @@ -0,0 +1,100 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 == + * + * Format the HTML. + */ + +var FCKCodeFormatter = new Object() ; + +FCKCodeFormatter.Init = function() +{ + var oRegex = this.Regex = new Object() ; + + // Regex for line breaks. + oRegex.BlocksOpener = /\<(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi ; + oRegex.BlocksCloser = /\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi ; + + oRegex.NewLineTags = /\<(BR|HR)[^\>]*\>/gi ; + + oRegex.MainTags = /\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi ; + + oRegex.LineSplitter = /\s*\n+\s*/g ; + + // Regex for indentation. + oRegex.IncreaseIndent = /^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \/\>]/i ; + oRegex.DecreaseIndent = /^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \>]/i ; + oRegex.FormatIndentatorRemove = new RegExp( '^' + FCKConfig.FormatIndentator ) ; + + oRegex.ProtectedTags = /(]*>)([\s\S]*?)(<\/PRE>)/gi ; +} + +FCKCodeFormatter._ProtectData = function( outer, opener, data, closer ) +{ + return opener + '___FCKpd___' + FCKCodeFormatter.ProtectedData.AddItem( data ) + closer ; +} + +FCKCodeFormatter.Format = function( html ) +{ + if ( !this.Regex ) + this.Init() ; + + // Protected content that remain untouched during the + // process go in the following array. + FCKCodeFormatter.ProtectedData = new Array() ; + + var sFormatted = html.replace( this.Regex.ProtectedTags, FCKCodeFormatter._ProtectData ) ; + + // Line breaks. + sFormatted = sFormatted.replace( this.Regex.BlocksOpener, '\n$&' ) ; + sFormatted = sFormatted.replace( this.Regex.BlocksCloser, '$&\n' ) ; + sFormatted = sFormatted.replace( this.Regex.NewLineTags, '$&\n' ) ; + sFormatted = sFormatted.replace( this.Regex.MainTags, '\n$&\n' ) ; + + // Indentation. + var sIndentation = '' ; + + var asLines = sFormatted.split( this.Regex.LineSplitter ) ; + sFormatted = '' ; + + for ( var i = 0 ; i < asLines.length ; i++ ) + { + var sLine = asLines[i] ; + + if ( sLine.length == 0 ) + continue ; + + if ( this.Regex.DecreaseIndent.test( sLine ) ) + sIndentation = sIndentation.replace( this.Regex.FormatIndentatorRemove, '' ) ; + + sFormatted += sIndentation + sLine + '\n' ; + + if ( this.Regex.IncreaseIndent.test( sLine ) ) + sIndentation += FCKConfig.FormatIndentator ; + } + + // Now we put back the protected data. + for ( var j = 0 ; j < FCKCodeFormatter.ProtectedData.length ; j++ ) + { + var oRegex = new RegExp( '___FCKpd___' + j ) ; + sFormatted = sFormatted.replace( oRegex, FCKCodeFormatter.ProtectedData[j].replace( /\$/g, '$$$$' ) ) ; + } + + return sFormatted.Trim() ; +} \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/_source/internals/fckcommands.js b/phpgwapi/js/fckeditor/editor/_source/internals/fckcommands.js new file mode 100644 index 0000000000..1000e4a99f --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/internals/fckcommands.js @@ -0,0 +1,167 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 == + * + * Define all commands available in the editor. + */ + +var FCKCommands = FCK.Commands = new Object() ; +FCKCommands.LoadedCommands = new Object() ; + +FCKCommands.RegisterCommand = function( commandName, command ) +{ + this.LoadedCommands[ commandName ] = command ; +} + +FCKCommands.GetCommand = function( commandName ) +{ + var oCommand = FCKCommands.LoadedCommands[ commandName ] ; + + if ( oCommand ) + return oCommand ; + + switch ( commandName ) + { + case 'Bold' : + case 'Italic' : + case 'Underline' : + case 'StrikeThrough': + case 'Subscript' : + case 'Superscript' : oCommand = new FCKCoreStyleCommand( commandName ) ; break ; + + case 'RemoveFormat' : oCommand = new FCKRemoveFormatCommand() ; break ; + + case 'DocProps' : oCommand = new FCKDialogCommand( 'DocProps' , FCKLang.DocProps , 'dialog/fck_docprops.html' , 400, 390, FCKCommands.GetFullPageState ) ; break ; + case 'Templates' : oCommand = new FCKDialogCommand( 'Templates' , FCKLang.DlgTemplatesTitle , 'dialog/fck_template.html' , 380, 450 ) ; break ; + case 'Link' : oCommand = new FCKDialogCommand( 'Link' , FCKLang.DlgLnkWindowTitle , 'dialog/fck_link.html' , 400, 330 ) ; break ; + case 'Unlink' : oCommand = new FCKUnlinkCommand() ; break ; + case 'Anchor' : oCommand = new FCKDialogCommand( 'Anchor' , FCKLang.DlgAnchorTitle , 'dialog/fck_anchor.html' , 370, 170 ) ; break ; + case 'AnchorDelete' : oCommand = new FCKAnchorDeleteCommand() ; break ; + case 'BulletedList' : oCommand = new FCKDialogCommand( 'BulletedList', FCKLang.BulletedListProp , 'dialog/fck_listprop.html?UL' , 370, 170 ) ; break ; + case 'NumberedList' : oCommand = new FCKDialogCommand( 'NumberedList', FCKLang.NumberedListProp , 'dialog/fck_listprop.html?OL' , 370, 170 ) ; break ; + case 'About' : oCommand = new FCKDialogCommand( 'About' , FCKLang.About , 'dialog/fck_about.html' , 400, 330 ) ; break ; + + case 'Find' : oCommand = new FCKDialogCommand( 'Find' , FCKLang.DlgFindAndReplaceTitle , 'dialog/fck_replace.html' , 340, 250 ) ; break ; + case 'Replace' : oCommand = new FCKDialogCommand( 'Replace' , FCKLang.DlgFindAndReplaceTitle , 'dialog/fck_replace.html' , 340, 250 ) ; break ; + + case 'Image' : oCommand = new FCKDialogCommand( 'Image' , FCKLang.DlgImgTitle , 'dialog/fck_image.html' , 450, 400 ) ; break ; + case 'Flash' : oCommand = new FCKDialogCommand( 'Flash' , FCKLang.DlgFlashTitle , 'dialog/fck_flash.html' , 450, 400 ) ; break ; + case 'SpecialChar' : oCommand = new FCKDialogCommand( 'SpecialChar', FCKLang.DlgSpecialCharTitle , 'dialog/fck_specialchar.html' , 400, 320 ) ; break ; + case 'Smiley' : oCommand = new FCKDialogCommand( 'Smiley' , FCKLang.DlgSmileyTitle , 'dialog/fck_smiley.html' , FCKConfig.SmileyWindowWidth, FCKConfig.SmileyWindowHeight ) ; break ; + case 'Table' : oCommand = new FCKDialogCommand( 'Table' , FCKLang.DlgTableTitle , 'dialog/fck_table.html' , 480, 250 ) ; break ; + case 'TableProp' : oCommand = new FCKDialogCommand( 'Table' , FCKLang.DlgTableTitle , 'dialog/fck_table.html?Parent', 480, 250 ) ; break ; + case 'TableCellProp': oCommand = new FCKDialogCommand( 'TableCell' , FCKLang.DlgCellTitle , 'dialog/fck_tablecell.html' , 550, 250 ) ; break ; + + case 'Style' : oCommand = new FCKStyleCommand() ; break ; + + case 'FontName' : oCommand = new FCKFontNameCommand() ; break ; + case 'FontSize' : oCommand = new FCKFontSizeCommand() ; break ; + case 'FontFormat' : oCommand = new FCKFormatBlockCommand() ; break ; + + case 'Source' : oCommand = new FCKSourceCommand() ; break ; + case 'Preview' : oCommand = new FCKPreviewCommand() ; break ; + case 'Save' : oCommand = new FCKSaveCommand() ; break ; + case 'NewPage' : oCommand = new FCKNewPageCommand() ; break ; + case 'PageBreak' : oCommand = new FCKPageBreakCommand() ; break ; + case 'Rule' : oCommand = new FCKRuleCommand() ; break ; + + case 'TextColor' : oCommand = new FCKTextColorCommand('ForeColor') ; break ; + case 'BGColor' : oCommand = new FCKTextColorCommand('BackColor') ; break ; + + case 'Paste' : oCommand = new FCKPasteCommand() ; break ; + case 'PasteText' : oCommand = new FCKPastePlainTextCommand() ; break ; + case 'PasteWord' : oCommand = new FCKPasteWordCommand() ; break ; + + case 'JustifyLeft' : oCommand = new FCKJustifyCommand( 'left' ) ; break ; + case 'JustifyCenter' : oCommand = new FCKJustifyCommand( 'center' ) ; break ; + case 'JustifyRight' : oCommand = new FCKJustifyCommand( 'right' ) ; break ; + case 'JustifyFull' : oCommand = new FCKJustifyCommand( 'justify' ) ; break ; + case 'Indent' : oCommand = new FCKIndentCommand( 'indent', FCKConfig.IndentLength ) ; break ; + case 'Outdent' : oCommand = new FCKIndentCommand( 'outdent', FCKConfig.IndentLength * -1 ) ; break ; + case 'Blockquote' : oCommand = new FCKBlockQuoteCommand() ; break ; + + case 'TableInsertRowAfter' : oCommand = new FCKTableCommand('TableInsertRowAfter') ; break ; + case 'TableInsertRowBefore' : oCommand = new FCKTableCommand('TableInsertRowBefore') ; break ; + case 'TableDeleteRows' : oCommand = new FCKTableCommand('TableDeleteRows') ; break ; + case 'TableInsertColumnAfter' : oCommand = new FCKTableCommand('TableInsertColumnAfter') ; break ; + case 'TableInsertColumnBefore' : oCommand = new FCKTableCommand('TableInsertColumnBefore') ; break ; + case 'TableDeleteColumns' : oCommand = new FCKTableCommand('TableDeleteColumns') ; break ; + case 'TableInsertCellAfter' : oCommand = new FCKTableCommand('TableInsertCellAfter') ; break ; + case 'TableInsertCellBefore' : oCommand = new FCKTableCommand('TableInsertCellBefore') ; break ; + case 'TableDeleteCells' : oCommand = new FCKTableCommand('TableDeleteCells') ; break ; + case 'TableMergeCells' : oCommand = new FCKTableCommand('TableMergeCells') ; break ; + case 'TableMergeRight' : oCommand = new FCKTableCommand('TableMergeRight') ; break ; + case 'TableMergeDown' : oCommand = new FCKTableCommand('TableMergeDown') ; break ; + case 'TableHorizontalSplitCell' : oCommand = new FCKTableCommand('TableHorizontalSplitCell') ; break ; + case 'TableVerticalSplitCell' : oCommand = new FCKTableCommand('TableVerticalSplitCell') ; break ; + case 'TableDelete' : oCommand = new FCKTableCommand('TableDelete') ; break ; + + case 'Form' : oCommand = new FCKDialogCommand( 'Form' , FCKLang.Form , 'dialog/fck_form.html' , 380, 230 ) ; break ; + case 'Checkbox' : oCommand = new FCKDialogCommand( 'Checkbox' , FCKLang.Checkbox , 'dialog/fck_checkbox.html' , 380, 230 ) ; break ; + case 'Radio' : oCommand = new FCKDialogCommand( 'Radio' , FCKLang.RadioButton , 'dialog/fck_radiobutton.html' , 380, 230 ) ; break ; + case 'TextField' : oCommand = new FCKDialogCommand( 'TextField' , FCKLang.TextField , 'dialog/fck_textfield.html' , 380, 230 ) ; break ; + case 'Textarea' : oCommand = new FCKDialogCommand( 'Textarea' , FCKLang.Textarea , 'dialog/fck_textarea.html' , 380, 230 ) ; break ; + case 'HiddenField' : oCommand = new FCKDialogCommand( 'HiddenField', FCKLang.HiddenField , 'dialog/fck_hiddenfield.html' , 380, 230 ) ; break ; + case 'Button' : oCommand = new FCKDialogCommand( 'Button' , FCKLang.Button , 'dialog/fck_button.html' , 380, 230 ) ; break ; + case 'Select' : oCommand = new FCKDialogCommand( 'Select' , FCKLang.SelectionField, 'dialog/fck_select.html' , 400, 380 ) ; break ; + case 'ImageButton' : oCommand = new FCKDialogCommand( 'ImageButton', FCKLang.ImageButton , 'dialog/fck_image.html?ImageButton', 450, 400 ) ; break ; + + case 'SpellCheck' : oCommand = new FCKSpellCheckCommand() ; break ; + case 'FitWindow' : oCommand = new FCKFitWindow() ; break ; + + case 'Undo' : oCommand = new FCKUndoCommand() ; break ; + case 'Redo' : oCommand = new FCKRedoCommand() ; break ; + case 'Copy' : oCommand = new FCKCopyCommand() ; break ; + + case 'SelectAll' : oCommand = new FCKSelectAllCommand() ; break ; + case 'InsertOrderedList' : oCommand = new FCKListCommand( 'insertorderedlist', 'ol' ) ; break ; + case 'InsertUnorderedList' : oCommand = new FCKListCommand( 'insertunorderedlist', 'ul' ) ; break ; + case 'ShowBlocks' : oCommand = new FCKShowBlockCommand( 'ShowBlocks', FCKConfig.StartupShowBlocks ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF ) ; break ; + + // Generic Undefined command (usually used when a command is under development). + case 'Undefined' : oCommand = new FCKUndefinedCommand() ; break ; + + // By default we assume that it is a named command. + default: + if ( FCKRegexLib.NamedCommands.test( commandName ) ) + oCommand = new FCKNamedCommand( commandName ) ; + else + { + alert( FCKLang.UnknownCommand.replace( /%1/g, commandName ) ) ; + return null ; + } + } + + FCKCommands.LoadedCommands[ commandName ] = oCommand ; + + return oCommand ; +} + +// Gets the state of the "Document Properties" button. It must be enabled only +// when "Full Page" editing is available. +FCKCommands.GetFullPageState = function() +{ + return FCKConfig.FullPage ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ; +} + + +FCKCommands.GetBooleanState = function( isDisabled ) +{ + return isDisabled ? FCK_TRISTATE_DISABLED : FCK_TRISTATE_OFF ; +} diff --git a/phpgwapi/js/fckeditor/editor/_source/internals/fckconfig.js b/phpgwapi/js/fckeditor/editor/_source/internals/fckconfig.js new file mode 100644 index 0000000000..9a0f37529e --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/internals/fckconfig.js @@ -0,0 +1,239 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2007 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 == + * + * Creates and initializes the FCKConfig object. + */ + +var FCKConfig = FCK.Config = new Object() ; + +/* + For the next major version (probably 3.0) we should move all this stuff to + another dedicated object and leave FCKConfig as a holder object for settings only). +*/ + +// Editor Base Path +if ( document.location.protocol == 'file:' ) +{ + FCKConfig.BasePath = decodeURIComponent( document.location.pathname.substr(1) ) ; + FCKConfig.BasePath = FCKConfig.BasePath.replace( /\\/gi, '/' ) ; + + // The way to address local files is different according to the OS. + // In Windows it is file:// but in MacOs it is file:/// so let's get it automatically + var sFullProtocol = document.location.href.match( /^(file\:\/{2,3})/ )[1] ; + // #945 Opera does strange things with files loaded from the disk, and it fails in Mac to load xml files + if ( FCKBrowserInfo.IsOpera ) + sFullProtocol += 'localhost/' ; + + FCKConfig.BasePath = sFullProtocol + FCKConfig.BasePath.substring( 0, FCKConfig.BasePath.lastIndexOf( '/' ) + 1) ; + FCKConfig.FullBasePath = FCKConfig.BasePath ; +} +else +{ + FCKConfig.BasePath = document.location.pathname.substring( 0, document.location.pathname.lastIndexOf( '/' ) + 1) ; + FCKConfig.FullBasePath = document.location.protocol + '//' + document.location.host + FCKConfig.BasePath ; +} + +FCKConfig.EditorPath = FCKConfig.BasePath.replace( /editor\/$/, '' ) ; + +// There is a bug in Gecko. If the editor is hidden on startup, an error is +// thrown when trying to get the screen dimensions. +try +{ + FCKConfig.ScreenWidth = screen.width ; + FCKConfig.ScreenHeight = screen.height ; +} +catch (e) +{ + FCKConfig.ScreenWidth = 800 ; + FCKConfig.ScreenHeight = 600 ; +} + +// Override the actual configuration values with the values passed throw the +// hidden field "___Config". +FCKConfig.ProcessHiddenField = function() +{ + this.PageConfig = new Object() ; + + // Get the hidden field. + var oConfigField = window.parent.document.getElementById( FCK.Name + '___Config' ) ; + + // Do nothing if the config field was not defined. + if ( ! oConfigField ) return ; + + var aCouples = oConfigField.value.split('&') ; + + for ( var i = 0 ; i < aCouples.length ; i++ ) + { + if ( aCouples[i].length == 0 ) + continue ; + + var aConfig = aCouples[i].split( '=' ) ; + var sKey = decodeURIComponent( aConfig[0] ) ; + var sVal = decodeURIComponent( aConfig[1] ) ; + + if ( sKey == 'CustomConfigurationsPath' ) // The Custom Config File path must be loaded immediately. + FCKConfig[ sKey ] = sVal ; + + else if ( sVal.toLowerCase() == "true" ) // If it is a boolean TRUE. + this.PageConfig[ sKey ] = true ; + + else if ( sVal.toLowerCase() == "false" ) // If it is a boolean FALSE. + this.PageConfig[ sKey ] = false ; + + else if ( sVal.length > 0 && !isNaN( sVal ) ) // If it is a number. + this.PageConfig[ sKey ] = parseInt( sVal, 10 ) ; + + else // In any other case it is a string. + this.PageConfig[ sKey ] = sVal ; + } +} + +function FCKConfig_LoadPageConfig() +{ + var oPageConfig = FCKConfig.PageConfig ; + for ( var sKey in oPageConfig ) + FCKConfig[ sKey ] = oPageConfig[ sKey ] ; +} + +function FCKConfig_PreProcess() +{ + var oConfig = FCKConfig ; + + // Force debug mode if fckdebug=true in the QueryString (main page). + if ( oConfig.AllowQueryStringDebug ) + { + try + { + if ( (/fckdebug=true/i).test( window.top.location.search ) ) + oConfig.Debug = true ; + } + catch (e) { /* Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error). */ } + } + + // Certifies that the "PluginsPath" configuration ends with a slash. + if ( !oConfig.PluginsPath.EndsWith('/') ) + oConfig.PluginsPath += '/' ; + + // EditorAreaCSS accepts a single path string, a list of paths separated by + // a comma or and array of paths. + // In the string cases, transform it in an array. + if ( typeof( oConfig.EditorAreaCSS ) == 'string' ) + oConfig.EditorAreaCSS = oConfig.EditorAreaCSS.split(',') ; + + var sComboPreviewCSS = oConfig.ToolbarComboPreviewCSS ; + if ( !sComboPreviewCSS || sComboPreviewCSS.length == 0 ) + oConfig.ToolbarComboPreviewCSS = oConfig.EditorAreaCSS ; + else if ( typeof( sComboPreviewCSS ) == 'string' ) + oConfig.ToolbarComboPreviewCSS = [ sComboPreviewCSS ] ; +} + +// Define toolbar sets collection. +FCKConfig.ToolbarSets = new Object() ; + +// Defines the plugins collection. +FCKConfig.Plugins = new Object() ; +FCKConfig.Plugins.Items = new Array() ; + +FCKConfig.Plugins.Add = function( name, langs, path ) +{ + FCKConfig.Plugins.Items.AddItem( [name, langs, path] ) ; +} + +// FCKConfig.ProtectedSource: object that holds a collection of Regular +// Expressions that defined parts of the raw HTML that must remain untouched +// like custom tags, scripts, server side code, etc... +FCKConfig.ProtectedSource = new Object() ; + +// Generates a string used to identify and locate the Protected Tags comments. +FCKConfig.ProtectedSource._CodeTag = (new Date()).valueOf() ; + +// Initialize the regex array with the default ones. +FCKConfig.ProtectedSource.RegexEntries = [ + // First of any other protection, we must protect all comments to avoid + // loosing them (of course, IE related). + //g , + + // Script tags will also be forced to be protected, otherwise IE will execute them. + //gi, + + //