diff --git a/admin/templates/default/config.tpl b/admin/templates/default/config.tpl index 032d6638f9..37977a0ee7 100644 --- a/admin/templates/default/config.tpl +++ b/admin/templates/default/config.tpl @@ -109,6 +109,23 @@ + + {lang_Enable_the_spellcheck_in_the_ritch_text_editor_?}: + + + + + + + {lang_Complete_path_to_aspell_program}: + + + + +  {lang_security} diff --git a/phpgwapi/inc/class.html.inc.php b/phpgwapi/inc/class.html.inc.php index 9dab4e5c3a..65bc333720 100644 --- a/phpgwapi/inc/class.html.inc.php +++ b/phpgwapi/inc/class.html.inc.php @@ -422,15 +422,10 @@ class html */ function htmlarea_availible() { - switch($this->user_agent) - { - case 'msie': - return $this->ua_version >= 5.5; - case 'mozilla': - return $this->ua_version >= 1.3; - default: - return False; - } + require_once(EGW_INCLUDE_ROOT.'/phpgwapi/js/fckeditor/fckeditor.php'); + + // use FCKeditor's own check + return FCKeditor_IsCompatibleBrowser(); } /** @@ -451,7 +446,7 @@ class html * this function is a wrapper for fckEditor to create some reuseable layouts * * @param string $_name name and id of the input-field - * @param string $_content of the tinymce (will be run through htmlspecialchars !!!), default '' + * @param string $_content of the tinymce (will be run through htmlspecialchars !!!), default '' * @param string $_mode display mode of the tinymce editor can be: simple, extended or advanced * @param array $_options (toolbar_expanded true/false) * @param string $_height='400px' @@ -459,7 +454,7 @@ class html * @param string $base_href='' if passed activates the browser for image at absolute path passed * @return string the necessary html for the textarea */ - function fckEditor($_name, $_content, $_mode, $_options=array('toolbar_expanded' =>'true'), $_height='400px', $_width='100%',$_base_href='') + function fckEditor($_name, $_content, $_mode, $_options=array('toolbar_expanded' =>'true'), $_height='400px', $_width='100%',$_base_href='') { if (!$this->htmlarea_availible() || $_mode == 'ascii') { @@ -469,20 +464,25 @@ class html $oFCKeditor = new FCKeditor($_name) ; $oFCKeditor->BasePath = $GLOBALS['egw_info']['server']['webserver_url'].'/phpgwapi/js/fckeditor/' ; + $oFCKeditor->Config['CustomConfigurationsPath'] = $oFCKeditor->BasePath . 'fckeditor.egwconfig.js' ; $oFCKeditor->Value = $_content; $oFCKeditor->Width = str_replace('px','',$_width); // FCK adds px if width contains no % $oFCKeditor->Height = str_replace('px','',$_height); - + // by default switch all browsers and uploads off $oFCKeditor->Config['LinkBrowser'] = $oFCKeditor->Config['LinkUpload'] = false; $oFCKeditor->Config['FlashBrowser'] = $oFCKeditor->Config['FlashUpload'] = false; $oFCKeditor->Config['ImageBrowser'] = $oFCKeditor->Config['ImageUpload'] = false; - + // Activate the image browser+upload, if $_base_href exists and is browsable by the webserver if ($_base_href && is_dir($_SERVER['DOCUMENT_ROOT'].$_base_href) && file_exists($_SERVER['DOCUMENT_ROOT'].$_base_href.'/.')) { // Only images for now - $oFCKeditor->Config['ImageBrowserURL'] = $oFCKeditor->BasePath.'editor/filemanager/browser/default/browser.html?ServerPath='.$_base_href.'&Type=images&Connector=connectors/php/connector.php'; + if (substr($_base_href,-1) != '/') $_base_href .= '/' ; + // store the path and application in the session, to make sure it can't be called with arbitrary pathes + $GLOBALS['egw']->session->appsession($_base_href,'FCKeditor',$GLOBALS['egw_info']['flags']['currentapp']); + + $oFCKeditor->Config['ImageBrowserURL'] = $oFCKeditor->BasePath.'editor/filemanager/browser/default/browser.html?ServerPath='.$_base_href.'&Type=Image&Connector='.$oFCKeditor->BasePath.'editor/filemanager/connectors/php/connector.php'; $oFCKeditor->Config['ImageBrowser'] = true; $oFCKeditor->Config['ImageUpload'] = is_writable($_SERVER['DOCUMENT_ROOT'].$_base_href); } @@ -493,21 +493,51 @@ class html } // switching the encoding as html entities off, as we correctly handle charsets and it messes up the wiki totally $oFCKeditor->Config['ProcessHTMLEntities'] = false; - + // Now setting the admin settings + $spell = ''; + if (isset($GLOBALS['egw_info']['server']['enabled_spellcheck'])) + { + $spell = '_spellcheck'; + $oFCKeditor->Config['SpellChecker'] = 'SpellerPages'; + $oFCKeditor->Config['SpellerPagesServerScript'] = 'server-scripts/spellchecker.php?enabled=1'; + if (isset($GLOBALS['egw_info']['server']['aspell_path'])) + { + $oFCKeditor->Config['SpellerPagesServerScript'] .= '&aspell_path='.$GLOBALS['egw_info']['server']['aspell_path']; + } + if (isset($GLOBALS['egw_info']['user']['preferences']['common']['spellchecker_lang'])) + { + $oFCKeditor->Config['SpellerPagesServerScript'] .= '&spellchecker_lang='.$GLOBALS['egw_info']['user']['preferences']['common']['spellchecker_lang']; + } + else + { + $oFCKeditor->Config['SpellerPagesServerScript'] .= '&spellchecker_lang='.$GLOBALS['egw_info']['user']['preferences']['common']['lang']; + } + $oFCKeditor->Config['FirefoxSpellChecker'] = false; + } + // Now setting the user preferences + if (isset($GLOBALS['egw_info']['user']['preferences']['common']['rte_enter_mode'])) + { + $oFCKeditor->Config['EnterMode'] = $GLOBALS['egw_info']['user']['preferences']['common']['rte_enter_mode']; + } + if (isset($GLOBALS['egw_info']['user']['preferences']['common']['rte_skin'])) + { + $oFCKeditor->Config['SkinPath'] = $oFCKeditor->BasePath.'editor/skins/'.$GLOBALS['egw_info']['user']['preferences']['common']['rte_skin'].'/'; + } + switch($_mode) { case 'simple': - $oFCKeditor->ToolbarSet = 'egw_simple'; + $oFCKeditor->ToolbarSet = 'egw_simple'.$spell; $oFCKeditor->Config['ContextMenu'] = false; break; default: case 'extended': - $oFCKeditor->ToolbarSet = 'egw_extended'; + $oFCKeditor->ToolbarSet = 'egw_extended'.$spell; break; case 'advanced': - $oFCKeditor->ToolbarSet = 'egw_advanced'; - break; + $oFCKeditor->ToolbarSet = 'egw_advanced'.$spell; + break; } return $oFCKeditor->CreateHTML(); } @@ -524,7 +554,7 @@ class html * @param string $base_href='' * @return string the necessary html for the textarea */ - function fckEditorQuick($_name, $_mode, $_content='', $_height='400px', $_width='100%') + function fckEditorQuick($_name, $_mode, $_content='', $_height='400px', $_width='100%') { include_once(EGW_INCLUDE_ROOT."/phpgwapi/js/fckeditor/fckeditor.php"); @@ -545,7 +575,7 @@ class html } } - + /** * represents html's input tag * @@ -864,7 +894,7 @@ class html { $path = EGW_SERVER_ROOT.$url; } - + if (is_null($path) || !@is_readable($path)) { // if the image-name is a percentage, use a progressbar @@ -911,10 +941,10 @@ class html $vars = $url; $url = '/index.php'; } - elseif (strpos($url,'/')===false && - count(explode('.',$url)) >= 3 && - !(strpos($url,'mailto:')!==false || - strpos($url,'://')!==false || + elseif (strpos($url,'/')===false && + count(explode('.',$url)) >= 3 && + !(strpos($url,'mailto:')!==false || + strpos($url,'://')!==false || strpos($url,'javascript:')!==false)) { $url = "/index.php?menuaction=$url"; @@ -1063,7 +1093,7 @@ class html } return $html; } - + /** * tree widget using dhtmlXtree * @@ -1109,7 +1139,7 @@ class html $html .= "tree.enableCheckBoxes(1);\n"; $html .= "tree.setOnCheckHandler('$_onCheckHandler');\n"; } - + $top = 0; if ($_topFolder) { @@ -1126,7 +1156,7 @@ class html else { $label = $_topFolder; - } + } $html .= "\ntree.insertNewItem(0,'$top','".addslashes($label)."',$_onNodeSelect,'$topImage','$topImage','$topImage','CHILD,TOP');\n"; if (is_array($_topFolder) && isset($_topFolder['title'])) @@ -1150,15 +1180,15 @@ class html // evtl. remove leading delimiter if ($path{0} == $delimiter) $path = substr($path,1); $folderParts = explode($delimiter,$path); - + //get rightmost folderpart $label = array_pop($folderParts); if (isset($data['label'])) $label = $data['label']; - + // the rest of the array is the name of the parent $parentName = implode((array)$folderParts,$delimiter); if(empty($parentName)) $parentName = $top; - + $entryOptions = 'CHILD,CHECKED'; // highlight currently item if ($_selected === $path) @@ -1179,17 +1209,17 @@ class html $html .= "tree.closeAllItems(0);\n"; $html .= "tree.openItem('".($_selected ? addslashes($_selected) : $top)."');\n"; $html .= "\n"; - + return $html; } - + /** * html-class singleton, return a referenze to the global instanciated html object in $GLOBALS['egw']->html * * Please use that static method in all new code, instead of instanciating an own html object: * $my_html =& html::singleton(); - * - * @static + * + * @static * @return html */ function &singleton() diff --git a/phpgwapi/js/fckeditor/_documentation.html b/phpgwapi/js/fckeditor/_documentation.html index 4e453bf23b..2bfcc251f4 100644 --- a/phpgwapi/js/fckeditor/_documentation.html +++ b/phpgwapi/js/fckeditor/_documentation.html @@ -1,7 +1,7 @@ - + + + + FCKeditor - Adobe AIR Sample + + + + + + + +

+ FCKeditor - Adobe AIR Sample +

+
+ This sample loads FCKeditor with full features enabled. +
+
+ + + diff --git a/phpgwapi/js/fckeditor/_samples/adobeair/sample01_cert.pfx b/phpgwapi/js/fckeditor/_samples/adobeair/sample01_cert.pfx new file mode 100644 index 0000000000..ba81d1ecd1 Binary files /dev/null and b/phpgwapi/js/fckeditor/_samples/adobeair/sample01_cert.pfx differ diff --git a/phpgwapi/js/fckeditor/_samples/afp/fck.afpa b/phpgwapi/js/fckeditor/_samples/afp/fck.afpa index e88a492fef..99d03062f9 100644 --- a/phpgwapi/js/fckeditor/_samples/afp/fck.afpa +++ b/phpgwapi/js/fckeditor/_samples/afp/fck.afpa @@ -1 +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 index 401ee905a9..f1015416b8 100644 --- a/phpgwapi/js/fckeditor/_samples/afp/fck.afpa.code +++ b/phpgwapi/js/fckeditor/_samples/afp/fck.afpa.code @@ -1,5 +1,5 @@ * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -163,4 +163,3 @@ RETURN (tcString) ENDDEFINE - diff --git a/phpgwapi/js/fckeditor/_samples/afp/sample01.afp b/phpgwapi/js/fckeditor/_samples/afp/sample01.afp index 6b770b3f35..2450e0db49 100644 --- a/phpgwapi/js/fckeditor/_samples/afp/sample01.afp +++ b/phpgwapi/js/fckeditor/_samples/afp/sample01.afp @@ -1,6 +1,6 @@ <% * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -38,7 +38,7 @@ sBasePath="../../../fckeditor/" && Change this to your local path - lcText=[This is some sample text. You are using ] + lcText=[

This is some sample text. You are using ] lcText=lcText+[FCKeditor.] oFCKeditor = CREATEOBJECT("FCKeditor") diff --git a/phpgwapi/js/fckeditor/_samples/afp/sample02.afp b/phpgwapi/js/fckeditor/_samples/afp/sample02.afp index cbf8dc8068..e1baf72efe 100644 --- a/phpgwapi/js/fckeditor/_samples/afp/sample02.afp +++ b/phpgwapi/js/fckeditor/_samples/afp/sample02.afp @@ -1,6 +1,6 @@ <% * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -17,7 +17,7 @@ * 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) * %> @@ -97,7 +97,7 @@ oFCKeditor.aconfig[2,2]=lcLanguage ENDIF - lcText=[This is some sample text. You are using ] + lcText=[

This is some sample text. You are using ] lcText=lcText+[FCKeditor.] oFCKeditor.BasePath = sBasePath diff --git a/phpgwapi/js/fckeditor/_samples/afp/sample03.afp b/phpgwapi/js/fckeditor/_samples/afp/sample03.afp index 3d7fd17a8a..a219e74a03 100644 --- a/phpgwapi/js/fckeditor/_samples/afp/sample03.afp +++ b/phpgwapi/js/fckeditor/_samples/afp/sample03.afp @@ -1,6 +1,6 @@ <% * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -75,7 +75,7 @@ oFCKeditor.ToolbarSet=lcToolbar ENDIF - lcText=[This is some sample text. You are using ] + lcText=[

This is some sample text. You are using ] lcText=lcText+[FCKeditor.] oFCKeditor.BasePath = sBasePath diff --git a/phpgwapi/js/fckeditor/_samples/afp/sample04.afp b/phpgwapi/js/fckeditor/_samples/afp/sample04.afp index fb878b872d..a9d62d755a 100644 --- a/phpgwapi/js/fckeditor/_samples/afp/sample04.afp +++ b/phpgwapi/js/fckeditor/_samples/afp/sample04.afp @@ -1,6 +1,6 @@ <% * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -82,7 +82,7 @@ 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=[

This is some sample text. You are using ] lcText=lcText+[FCKeditor.] oFCKeditor.BasePath = sBasePath diff --git a/phpgwapi/js/fckeditor/_samples/afp/sampleposteddata.afp b/phpgwapi/js/fckeditor/_samples/afp/sampleposteddata.afp index c3464f6106..368d778fbd 100644 --- a/phpgwapi/js/fckeditor/_samples/afp/sampleposteddata.afp +++ b/phpgwapi/js/fckeditor/_samples/afp/sampleposteddata.afp @@ -1,6 +1,6 @@ <% * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * diff --git a/phpgwapi/js/fckeditor/_samples/asp/sample01.asp b/phpgwapi/js/fckeditor/_samples/asp/sample01.asp index e3026bc00f..533e91ce2c 100644 --- a/phpgwapi/js/fckeditor/_samples/asp/sample01.asp +++ b/phpgwapi/js/fckeditor/_samples/asp/sample01.asp @@ -2,7 +2,7 @@ <% Option Explicit %> + + +
-
+


- - - - -
- - - - - - - - - - - - - - - -
Dump of FORM Variables
FieldNames#FORM.fieldNames#
#key##HTMLEditFormat(evaluate("FORM.#key#"))#
-
-
- - \ 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..48287412bc --- /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. +
+ + +
+ +
+ + + +
+ diff --git a/phpgwapi/js/fckeditor/_samples/cfm/sample02.cfm b/phpgwapi/js/fckeditor/_samples/cfm/sample02.cfm new file mode 100644 index 0000000000..26c70c19c3 --- /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:  + + +
+
+
+ + + + + + + + + + + + + + + + +
+ + + + +
+ diff --git a/phpgwapi/js/fckeditor/_samples/cfm/sample02_mx.cfm b/phpgwapi/js/fckeditor/_samples/cfm/sample02_mx.cfm index 746a34d2ed..51afccc028 100644 --- a/phpgwapi/js/fckeditor/_samples/cfm/sample02_mx.cfm +++ b/phpgwapi/js/fckeditor/_samples/cfm/sample02_mx.cfm @@ -1,7 +1,7 @@ - + - - @@ -49,45 +30,85 @@ +

FCKeditor - ColdFusion Component (CFC) - Sample 2

- -This sample displays a normal HTML form with a FCKeditor with full features enabled; invoked by a ColdFusion Component. +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.
- - - // 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.width = "100%"; - fckEditor.height = 300; - fckEditor.create(); // create the editor. - - -
- -
+ + + + + +
+ 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 ) ; - - - - - \ No newline at end of file + 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. +
+ +
+ + + + +
+ diff --git a/phpgwapi/js/fckeditor/_samples/cfm/sample03.cfm b/phpgwapi/js/fckeditor/_samples/cfm/sample03.cfm new file mode 100644 index 0000000000..758b48c50d --- /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:  + + +
+
+
+ + + + + + + + + + + + + + +
+ + + + +
+ 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..1ad28afe4f --- /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. +
+ +
+ + + + +
+ diff --git a/phpgwapi/js/fckeditor/_samples/cfm/sample04.cfm b/phpgwapi/js/fckeditor/_samples/cfm/sample04.cfm new file mode 100644 index 0000000000..fa0f643d68 --- /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:  + + +
+
+
+ + + + + + + + + + + + + +
+ + + + +
+ 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..ac5eb2c464 --- /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. +
+ +
+ + + + +
+ diff --git a/phpgwapi/js/fckeditor/_samples/cfm/sampleposteddata.cfm b/phpgwapi/js/fckeditor/_samples/cfm/sampleposteddata.cfm new file mode 100644 index 0000000000..a71e37ba8b --- /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 index bcd04cec9e..23f734fe10 100644 --- a/phpgwapi/js/fckeditor/_samples/default.html +++ b/phpgwapi/js/fckeditor/_samples/default.html @@ -1,7 +1,8 @@ - + diff --git a/phpgwapi/js/fckeditor/_samples/html/sample02.html b/phpgwapi/js/fckeditor/_samples/html/sample02.html index 09b236f650..94b2ded029 100644 --- a/phpgwapi/js/fckeditor/_samples/html/sample02.html +++ b/phpgwapi/js/fckeditor/_samples/html/sample02.html @@ -1,7 +1,7 @@ - + diff --git a/phpgwapi/js/fckeditor/_samples/html/sample04.html b/phpgwapi/js/fckeditor/_samples/html/sample04.html index 4325bc8146..59e7f019fd 100644 --- a/phpgwapi/js/fckeditor/_samples/html/sample04.html +++ b/phpgwapi/js/fckeditor/_samples/html/sample04.html @@ -1,7 +1,7 @@ - + diff --git a/phpgwapi/js/fckeditor/_samples/html/sample05.html b/phpgwapi/js/fckeditor/_samples/html/sample05.html index 7b8302c29d..d2c8a772dc 100644 --- a/phpgwapi/js/fckeditor/_samples/html/sample05.html +++ b/phpgwapi/js/fckeditor/_samples/html/sample05.html @@ -1,7 +1,7 @@ - + diff --git a/phpgwapi/js/fckeditor/_samples/html/sample06.config.js b/phpgwapi/js/fckeditor/_samples/html/sample06.config.js index d8ae940809..9edada5e67 100644 --- a/phpgwapi/js/fckeditor/_samples/html/sample06.config.js +++ b/phpgwapi/js/fckeditor/_samples/html/sample06.config.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -26,7 +26,7 @@ FCKConfig.ToolbarSets['PluginTest'] = [ ['SourceSimple'], ['My_Find','My_Replace','-','Placeholder'], ['StyleSimple','FontFormatSimple','FontNameSimple','FontSizeSimple'], - ['Table','-','TableInsertRow','TableDeleteRows','TableInsertColumn','TableDeleteColumns','TableInsertCell','TableDeleteCells','TableMergeCells','TableSplitCell'], + ['Table','-','TableInsertRowAfter','TableDeleteRows','TableInsertColumnAfter','TableDeleteColumns','TableInsertCellAfter','TableDeleteCells','TableMergeCells','TableHorizontalSplitCell','TableCellProp'], ['Bold','Italic','-','OrderedList','UnorderedList','-','Link','Unlink'], '/', ['My_BigStyle','-','Smiley','-','About'] @@ -39,11 +39,11 @@ FCKConfig.PluginsPath = FCKConfig.BasePath.substr(0, FCKConfig.BasePath.length - // 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( 'findreplace', 'en,fr,it' ) ; FCKConfig.Plugins.Add( 'samples' ) ; // If you want to use plugins found on other directories, just use the third parameter. var sOtherPluginPath = FCKConfig.BasePath.substr(0, FCKConfig.BasePath.length - 7) + 'editor/plugins/' ; -FCKConfig.Plugins.Add( 'placeholder', 'en,it,de,fr', sOtherPluginPath ) ; +FCKConfig.Plugins.Add( 'placeholder', 'de,en,es,fr,it,pl', 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 index 0761f0aaa3..69966de380 100644 --- a/phpgwapi/js/fckeditor/_samples/html/sample06.html +++ b/phpgwapi/js/fckeditor/_samples/html/sample06.html @@ -1,7 +1,7 @@ - + diff --git a/phpgwapi/js/fckeditor/_samples/html/sample07.html b/phpgwapi/js/fckeditor/_samples/html/sample07.html index 86992d9bd4..3ddaafd317 100644 --- a/phpgwapi/js/fckeditor/_samples/html/sample07.html +++ b/phpgwapi/js/fckeditor/_samples/html/sample07.html @@ -1,7 +1,7 @@ - + diff --git a/phpgwapi/js/fckeditor/_samples/html/sample08.html b/phpgwapi/js/fckeditor/_samples/html/sample08.html index e55eb09ccd..9663cb453d 100644 --- a/phpgwapi/js/fckeditor/_samples/html/sample08.html +++ b/phpgwapi/js/fckeditor/_samples/html/sample08.html @@ -1,7 +1,7 @@ - + @@ -154,11 +154,11 @@ function ResetIsDirty() // Automatically calculates the editor base path based on the _samples directory. // This is usefull only for these samples. A real application should use something like this: // oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value. -var sBasePath = document.location.pathname.substring(0,document.location.pathname.lastIndexOf('_samples')) ; +var sBasePath = document.location.href.substring(0,document.location.href.lastIndexOf('_samples')) ; var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ; oFCKeditor.BasePath = sBasePath ; -oFCKeditor.Value = 'This is some sample text. You are using FCKeditor.' ; +oFCKeditor.Value = '

This is some sample text<\/strong>. You are using FCKeditor<\/a>.<\/p>' ; oFCKeditor.Create() ; //--> diff --git a/phpgwapi/js/fckeditor/_samples/html/sample09.html b/phpgwapi/js/fckeditor/_samples/html/sample09.html index 9f21bdfd0f..a43baf4e16 100644 --- a/phpgwapi/js/fckeditor/_samples/html/sample09.html +++ b/phpgwapi/js/fckeditor/_samples/html/sample09.html @@ -1,7 +1,7 @@ - + @@ -89,7 +89,7 @@ oFCKeditor = new FCKeditor( 'FCKeditor_Default' ) ; oFCKeditor.Config['ToolbarStartExpanded'] = false ; oFCKeditor.BasePath = sBasePath ; -oFCKeditor.Value = 'This is some sample text. You are using FCKeditor.' ; +oFCKeditor.Value = '

This is some sample text<\/strong>. You are using FCKeditor<\/a>.<\/p>' ; oFCKeditor.Create() ; //--> diff --git a/phpgwapi/js/fckeditor/_samples/html/sample10.html b/phpgwapi/js/fckeditor/_samples/html/sample10.html index 43dfedbd31..1f54ab30ca 100644 --- a/phpgwapi/js/fckeditor/_samples/html/sample10.html +++ b/phpgwapi/js/fckeditor/_samples/html/sample10.html @@ -1,7 +1,7 @@ - + @@ -68,7 +68,7 @@ oFCKeditor = new FCKeditor( 'FCKeditor_2' ) ; oFCKeditor.BasePath = sBasePath ; oFCKeditor.Height = 100 ; oFCKeditor.Config[ 'ToolbarLocation' ] = 'Out:xToolbar' ; -oFCKeditor.Value = 'This is some sample text. You are using FCKeditor.' ; +oFCKeditor.Value = '

This is some sample text<\/strong>. You are using FCKeditor<\/a>.<\/p>' ; oFCKeditor.Create() ; //--> diff --git a/phpgwapi/js/fckeditor/_samples/html/sample11.html b/phpgwapi/js/fckeditor/_samples/html/sample11.html index d8a4de0857..1934366bcf 100644 --- a/phpgwapi/js/fckeditor/_samples/html/sample11.html +++ b/phpgwapi/js/fckeditor/_samples/html/sample11.html @@ -1,7 +1,7 @@ - + @@ -58,7 +58,7 @@ oFCKeditor = new FCKeditor( 'FCKeditor_2' ) ; oFCKeditor.BasePath = sBasePath ; oFCKeditor.Height = 100 ; oFCKeditor.Config[ 'ToolbarLocation' ] = 'Out:parent(xToolbar)' ; -oFCKeditor.Value = 'This is some sample text. You are using FCKeditor.' ; +oFCKeditor.Value = '

This is some sample text<\/strong>. You are using FCKeditor<\/a>.<\/p>' ; oFCKeditor.Create() ; //--> diff --git a/phpgwapi/js/fckeditor/_samples/html/sample12.html b/phpgwapi/js/fckeditor/_samples/html/sample12.html index 044022e413..48a40f1466 100644 --- a/phpgwapi/js/fckeditor/_samples/html/sample12.html +++ b/phpgwapi/js/fckeditor/_samples/html/sample12.html @@ -1,7 +1,7 @@ - + @@ -82,7 +82,7 @@ function ChangeMode() // Automatically calculates the editor base path based on the _samples directory. // This is usefull only for these samples. A real application should use something like this: // oFCKeditor.BasePath = '/fckeditor/' ; // '/fckeditor/' is the default value. -var sBasePath = document.location.pathname.substring(0,document.location.pathname.lastIndexOf('_samples')) ; +var sBasePath = document.location.href.substring(0,document.location.href.lastIndexOf('_samples')) ; // The following are the default configurations for the Enter and Shift+Enter modes. var sEnterMode = 'p' ; @@ -103,10 +103,7 @@ if ( document.location.search.length > 1 ) // Create the FCKeditor instance. var oFCKeditor = new FCKeditor( 'FCKeditor1' ) ; oFCKeditor.BasePath = sBasePath ; -oFCKeditor.Value = 'This is some sample text. You are using FCKeditor.' ; - -// Enable the Enter Key Handler. This feature will not be available in the release version. -oFCKeditor.Config["DisableEnterKeyHandler"] = false ; +oFCKeditor.Value = 'This is some sample text<\/strong>. You are using FCKeditor<\/a>.' ; // Set the configuration options for the Enter Key mode. oFCKeditor.Config["EnterMode"] = sEnterMode ; diff --git a/phpgwapi/js/fckeditor/_samples/html/sample13.html b/phpgwapi/js/fckeditor/_samples/html/sample13.html index 6de3162b3c..e7e1105c6b 100644 --- a/phpgwapi/js/fckeditor/_samples/html/sample13.html +++ b/phpgwapi/js/fckeditor/_samples/html/sample13.html @@ -1,7 +1,7 @@ - + - +

- +
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..a5dd12dd0c --- /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-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Configuration settings used by the XHTML 1.1 sample page (sample14.html). + */ + +// Our intention is force all formatting features to use CSS classes or +// semantic aware elements. + +// Load our custom CSS files for this sample. +// We are using "BasePath" just for this sample convenience. In normal +// situations it would be just pointed to the file directly, +// like "/css/myfile.css". +FCKConfig.EditorAreaCSS = FCKConfig.BasePath + '../_samples/html/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..c5833ae28e --- /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..cb64d5b431 --- /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-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Styles used by the XHTML 1.1 sample page (sample14.html). + */ + +/** + * Basic definitions for the editing area. + */ +body +{ + background-color: #ffffff; + padding: 5px 5px 5px 5px; + margin: 0px; +} + +body, td +{ + font-family: Arial, Verdana, sans-serif; + font-size: 12px; +} + +a[href] +{ + color: #0000FF !important; /* For Firefox... mark as important, otherwise it becomes black */ +} + +/** + * Core styles. + */ + +.Bold +{ + font-weight: bold; +} + +.Italic +{ + font-style: italic; +} + +.Underline +{ + text-decoration: underline; +} + +.StrikeThrough +{ + text-decoration: line-through; +} + +.Subscript +{ + vertical-align: sub; + font-size: smaller; +} + +.Superscript +{ + vertical-align: super; + font-size: smaller; +} + +/** + * Font faces. + */ + +.FontComic +{ + font-family: 'Comic Sans MS'; +} + +.FontCourier +{ + font-family: 'Courier New'; +} + +.FontTimes +{ + font-family: 'Times New Roman'; +} + +/** + * Font sizes. + */ + +.FontSmaller +{ + font-size: smaller; +} + +.FontLarger +{ + font-size: larger; +} + +.FontSmall +{ + font-size: 8pt; +} + +.FontBig +{ + font-size: 14pt; +} + +.FontDouble +{ + font-size: 200%; +} + +/** + * Font colors. + */ +.FontColor1 +{ + color: #ff9900; +} + +.FontColor2 +{ + color: #0066cc; +} + +.FontColor3 +{ + color: #ff0000; +} + +.FontColor1BG +{ + background-color: #ff9900; +} + +.FontColor2BG +{ + background-color: #0066cc; +} + +.FontColor3BG +{ + background-color: #ff0000; +} + +/** + * Indentation. + */ + +.Indent1 +{ + margin-left: 40px; +} + +.Indent2 +{ + margin-left: 80px; +} + +.Indent3 +{ + margin-left: 120px; +} + +/** + * Alignment. + */ + +.JustifyLeft +{ + text-align: left; +} + +.JustifyRight +{ + text-align: right; +} + +.JustifyCenter +{ + text-align: center; +} + +.JustifyFull +{ + text-align: justify; +} + +/** + * Other. + */ + +code +{ + font-family: courier, monospace; + background-color: #eeeeee; + padding-left: 1px; + padding-right: 1px; + border: #c0c0c0 1px solid; +} + +kbd +{ + padding: 0px 1px 0px 1px; + border-width: 1px 2px 2px 1px; + border-style: solid; +} + +blockquote +{ + color: #808080; +} diff --git a/phpgwapi/js/fckeditor/_samples/html/sampleposteddata.asp b/phpgwapi/js/fckeditor/_samples/html/sampleposteddata.asp index 09798415e0..26eaed03ba 100644 --- a/phpgwapi/js/fckeditor/_samples/html/sampleposteddata.asp +++ b/phpgwapi/js/fckeditor/_samples/html/sampleposteddata.asp @@ -1,7 +1,7 @@  - + FCKeditor - Sample Selection - - - + + + - +
@@ -62,55 +63,49 @@ function OpenSample( sample ) - - + + - - + - - + - - + - - + - - + - - + diff --git a/phpgwapi/js/fckeditor/_upgrade.html b/phpgwapi/js/fckeditor/_upgrade.html index 9ee1e1f217..d38e3a9d65 100644 --- a/phpgwapi/js/fckeditor/_upgrade.html +++ b/phpgwapi/js/fckeditor/_upgrade.html @@ -1,7 +1,7 @@ - + - FCKeditor - What's New? + FCKeditor ChangeLog - What's New? +

+ FCKeditor ChangeLog - What's New?

- Version 2.4.1 (SVN)

+ Version 2.6 +

+ No changes. The stabilization of the 2.6 RC was completed successfully, as expected.

+

+ Version 2.6 RC

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.
  • +
  • [#2017] The FCKeditorAPI.Instances + object can now be used to access all FCKeditor instances available in the page.
  • +
  • [#1980] Attention: By default, the editor now produces <strong> + and <em> instead of <b> and <i>.

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).
    • -
    +
  • [#1924] The dialog + close button is now correctly positioned in IE in RTL languages.
  • +
  • [#1933] Placeholder + dialog will now display the placeholder value correctly in IE.
  • +
  • [#957] Pressing + Enter or typing after a placeholder with the placeholder plugin will no longer generate + colored text.
  • +
  • [#1952] Fixed + an issue in FCKTools.FixCssUrls that, other than wrong, was breaking Opera.
  • +
  • [#1695] Removed + Ctrl-Tab hotkey for Source mode and allowed Ctrl-T to work in Firefox.
  • +
  • [#1666] Fixed + permission denied errors during opening popup menus in IE6 under domain relaxation + mode.
  • +
  • [#1934] Fixed + JavaScript errors when calling Selection.EnsureSelection() in dialogs.
  • +
  • [#1920] Fixed + SSL warning message when opening image and flash dialogs under HTTPS in IE6.
  • +
  • [#1955] [#1981] [#1985] [#1989] + Fixed XHTML source formatting errors in non-IE browsers.
  • +
  • [#2000] The # + character is now properly encoded in file names returned by the File Browser.
  • +
  • [#1945] New folders + and file names are now properly sanitized against control characters.
  • +
  • [#1944] Backslash + character is now disallowed in current folder path.
  • +
  • [#1055] Added + logic to override JavaScript errors occurring inside the editing frame due to user + added JavaScript code.
  • +
  • [#1647] Hitting + ENTER on list items containing block elements will now create new list item elements, + instead of adding further blocks to the same list item.
  • +
  • [#1411] Label + only combos now get properly grayed out when moving to source view.
  • +
  • [#2009] Fixed + an important bug regarding styles removal on styled text boundaries, introduced + with the 2.6 Beta 1.
  • +
  • [#2011] Internal + CSS <style> tags where being outputted when FullPage=true.
  • +
  • [#2016] The Link + dialog now properly selects the first field when opening it to modify mailto or + anchor links. This problem was also throwing an error in IE.
  • +
  • [#2021] The caret + will no longer remain behind in the editing area when the placeholder dialog is + opened.
  • +
  • [#2024] Fixed + JavaScript error in IE when the user tries to open dialogs in Source mode.
  • +
  • [#1853] Setting + ShiftEnterMode to p or div now works correctly when EnterMode is br.
  • +
  • [#1838] Fixed + the issue where context menus sometimes don't disappear after selecting an option.
  • -
  • [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.
  • +
  • [#2028] Fixed + JavaScript error when EnterMode=br and user tries to insert a page break.
  • +
  • [#2002] Fixed + the issue where the maximize editor button does not vertically expand the editing + area in Firefox.
  • +
  • [#1842] PHP integration: + fixed filename encoding problems in file browser.
  • +
  • [#1832] Calling + FCK.InsertHtml() in non-IE browsers would now activate the document processor as + expected.
  • +
  • [#1998] The native + XMLHttpRequest class is now used in IE, whenever it is available.
  • +
  • [#1792] In IE, + the browser was able to enter in an infinite loop when working with multiple editors + in the same page.
  • +
  • [#1948] Some + CSS rules are reset to dialog elements to avoid conflict with the page CSS.
  • +
  • [#1965] IE was + having problems with SpellerPages, causing some errors to be thrown when completing + the spell checking in some situations.
  • +
  • [#2042] The FitWindow + command was throwing an error if executed in an editor where its relative button + is not present in the toolbar.
  • +
  • [#922] Implemented + a generic document processor for <OBJECT> and <EMBED> tags.
  • +
  • [#1831] Fixed + the issue where the placeholder icon for <EMBED> tags does not always show + up in IE7.
  • +
  • [#2049] Fixed + a deleted cursor CSS attribute in the minified CSS inside fck_dialog_common.js.
  • +
  • [#1806] In IE, + the caret will not any more move to the previous line when selecting a Format style + inside an empty paragraph.
  • +
  • [#1990] In IE, + dialogs using API calls which deals with the selection, like InsertHtml now can + be sure the selection will be placed in the correct position.
  • +
  • [#1997] With + IE, the first character of table captions where being lost on table creation.
  • +
  • The selection and cursor position was not being properly handled when creating some + elements like forms and tables.
  • +
  • [#662] In the + Perl sample files, the GetServerPath function will now calculate the path properly.
  • +
+

+ Version 2.6 Beta 1

+

+ New Features and Improvements:

+
    +
  • [#35] New + (and cool!) floating dialog system, avoiding problems with popup blockers + and enhancing the editor usability.
  • +
  • [#1886] + Adobe AIR compatibility.
  • +
  • [#123] Full support + for document.domain with automatic domain detection.
  • +
  • [#1622] New + inline CSS cache feature, making it possible to avoid downloading the CSS + files for the editing area and skins. For that, it is enough to set the EditorAreaCSS, + SkinEditorCSS and SkinDialogCSS to string values in the format "/absolute/path/for/urls/|<minified + CSS styles". All internal CSS links are already using this feature.
  • +
  • New language file for Canadian French.

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 +
  • [#1643] Resolved + several "strict warning" messages in Firefox when running FCKeditor.
  • +
  • [#1522] The ENTER + key will now work properly in IE with the cursor at the start of a formatted block.
  • +
  • [#1503] It's + possible to define in the Styles that a Style (with an empty class) must be shown + selected only when no class is present in the current element, and selecting that + item will clear the current class (it does apply to any attribute, not only classes).
  • +
  • [#191] The scrollbars + are now being properly shown in Firefox Mac when placing FCKeditor inside a hidden + div.
  • +
  • [#503] Orphaned + <li> elements now get properly enclosed in a <ul> on output.
  • +
  • [#309] The ENTER + key will not any more break <button> elements at the beginning of paragraphs.
  • +
  • [#1654] The editor + was not loading on a specific unknown situation. The breaking point has been removed.
  • +
  • [#1707] The editor + no longer hangs when operating on documents imported from Microsoft Word.
  • +
  • [#1514] Floating + panels attached to a shared toolbar among multiple FCKeditor instances are no longer + misplaced when the editing areas are absolutely or relatively positioned.
  • +
  • [#1715] The ShowDropDialog + is now enforced only when ForcePasteAsPlainText = true.
  • +
  • [#1336] Sometimes + the autogrow plugin didn't work properly in Firefox.
  • +
  • [#1728] External + toolbars are now properly sized in Opera.
  • +
  • [#1782] Clicking + on radio buttons or checkboxes in the editor in IE will no longer cause lockups + in IE.
  • +
  • [#805] The FCKConfig.Keystrokes + commands where executed even if the command itself was disabled.
  • +
  • [#982] The button + to empty the box in the "Paste from Word" has been removed as it leads to confusion + for some users.
  • +
  • [#1682] Editing + control elements in Firefox, Opera and Safari now works properly.
  • +
  • [#1613] The editor + was surrounded by a <div> element that wasn't really needed.
  • +
  • [#676] If a form + control was moved in IE after creating it, then it did lose its name.
  • +
  • [#738] It wasn't + possible to change the type of an existing button.
  • +
  • [#1854] Indentation + now works inside table cells.
  • +
  • [#1717] The editor + was entering on looping on some specific cases when dealing with invalid source + markup.
  • +
  • [#1530] Pasting + text into the "Find what" fields in the Find and Replace dialog would now activate + the find and replace buttons.
  • +
  • [#1828] The Find/Replace + dialog will no longer display wrong starting positions for the match when there + are multiple and identical characters preceding the character at the real starting + point of the match.
  • +
  • [#1878] Fixed + a JavaScript error which occurs in the Find/Replace dialog when the user presses + "Find" or "Replace" after the "No match found" message has appeared.
  • +
  • [#1355] Line + breaks and spaces are now conserved when converting to and from the "Formatted" + format.
  • +
  • [#1670] Improved + the background color behind smiley icons and special characters in their corresponding 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.
  • +
  • [#1693] Custom + error messages are now properly displayed in the file browser.
  • +
  • [#970] The text + and value fields in the selection box dialog will no longer extend beyond the dialog + limits when the user inputs a very long text or value for one of the selection options.
  • +
  • [#479] Fixed the + issue where pressing Enter in an <o:p> tag in IE does not generate line breaks.
  • +
  • [#481] Fixed the + issue where the image preview in image dialog sometimes doesn't display after selecting + the image from server browser.
  • +
  • [#1488] PHP integration: + the FCKeditor class is now more PHP5/6 friendly ("public" keyword is used instead + of depreciated "var").
  • +
  • [#1815] PHP integration: + removed closing tag: "?>", so no additional whitespace added when files are included.
  • +
  • [#1906] PHP file + browser: fixed problems with DetectHtml() function when open_basedir was set.
  • +
  • [#1871] PHP file + browser: permissions applied with the chmod command are now configurable.
  • +
  • [#1872] Perl + file browser: permissions applied with the chmod command are now configurable.
  • +
  • [#1873] Python + file browser: permissions applied with the chmod command are now configurable.
  • +
  • [#1572] ColdFusion + integration: fixed issues with setting the editor height.
  • +
  • [#1692] ColdFusion + file browser: it is possible now to define TempDirectory to avoid issues with GetTempdirectory() + returning an empty string.
  • +
  • [#1379] ColdFusion + file browser: resolved issues with OnRequestEnd.cfm breaking the file browser.
  • +
  • [#1509] InsertHtml() + in IE will no longer turn the preceding normal whitespace into &nbsp;.
  • +
  • [#958] The AddItem + method now has an additional fifth parameter "customData" that will be sent to the + Execute method of the command for that menu item, allowing a single command to be + used for different menu items..
  • +
  • [#1502] The RemoveFormat + command now also removes the attributes from the cleaned text. The list of attributes + is configurable with FCKConfig.RemoveAttributes.
  • +
  • [#1596] On Safari, + dialogs have now right-to-left layout when it runs a RTL language, like Arabic.
  • +
  • [#1344] Added + warning message on Copy and Cut operation failure on IE due to paste permission + settings.
  • +
  • [#1868] Links + to file browser has been changed to avoid requests containing double dots.
  • +
  • [#1229] Converting + multiple contiguous paragraphs to Formatted will now be merged into a single <PRE> + block.
  • +
  • [#1627] Samples + failed to load from local filesystem in IE7.

- * 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. + See previous versions history

-
    -
  • 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/_whatsnew_history.html b/phpgwapi/js/fckeditor/_whatsnew_history.html new file mode 100644 index 0000000000..8f44e0ea45 --- /dev/null +++ b/phpgwapi/js/fckeditor/_whatsnew_history.html @@ -0,0 +1,3373 @@ + + + + + FCKeditor ChangeLog - What's New? + + + + +

+ FCKeditor ChangeLog - What's New?

+

+ Version 2.5.1

+

+ New Features and Improvements:

+
    +
  • FCKeditor.Net 2.5 compatibility.
  • +
  • JavaScript integration file: +
      +
    • The new "FCKeditor.ReplaceAllTextareas" function is being introduced, + making it possible to replace many (or unknown) <textarea> elements in a single + call. The replacement can be also filtered by CSS class name, or by a custom function + evaluator.
    • +
    • It is now possible to set the default BasePath for all editor instances by setting + FCKeditor.BasePath. This is extremely useful when working with + the ReplaceAllTextareas function.
    • +
    +
  • +
+

+ Fixed Bugs:

+
    +
  • [#339] [#681] The SpellerPages + spell checker will now completely ignore the presence of HTML tags in the text. +
  • +
  • [#1643] Resolved + several "strict warning" messages in Firefox when running FCKeditor.
  • +
  • [#1603] Certain + specific markup was making FCKeditor entering in a loop, blocking its execution. +
  • +
  • [#1664] The ENTER + key will not any more swap the order of the tags when hit at the end of paragraphs. +
  • +
+

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

+

+ 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 index 2d30eefdd2..d7daefbf1c 100644 --- a/phpgwapi/js/fckeditor/editor/_source/classes/fckcontextmenu.js +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckcontextmenu.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -23,8 +23,10 @@ var FCKContextMenu = function( parentWindow, langDir ) { - var oPanel = this._Panel = new FCKPanel( parentWindow, true ) ; - oPanel.AppendStyleSheet( FCKConfig.SkinPath + 'fck_editor.css' ) ; + this.CtrlDisable = false ; + + var oPanel = this._Panel = new FCKPanel( parentWindow ) ; + oPanel.AppendStyleSheet( FCKConfig.SkinEditorCSS ) ; oPanel.IsContextMenu = true ; // The FCKTools.DisableSelection doesn't seems to work to avoid dragging of the icons in Mozilla @@ -45,13 +47,22 @@ 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 ) +/** + The customData parameter is just a value that will be send to the command that is executed, + so it's possible to reuse the same command for several items just by assigning different data for each one. +*/ +FCKContextMenu.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) { - var oItem = this._MenuBlock.AddItem( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled) ; + var oItem = this._MenuBlock.AddItem( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) ; this._Redraw = true ; return oItem ; } @@ -74,8 +85,6 @@ FCKContextMenu.prototype.AttachToElement = function( element ) FCKTools.AddEventListenerEx( element, 'contextmenu', FCKContextMenu_AttachedElement_OnContextMenu, this ) ; else element._FCKContextMenu = this ; - -// element.onmouseup = FCKContextMenu_AttachedElement_OnMouseUp ; } function FCKContextMenu_Document_OnContextMenu( e ) @@ -86,19 +95,77 @@ function FCKContextMenu_Document_OnContextMenu( e ) { 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 = FCKTools.GetElementDocument( e.target ) ; + overrideButton = FCKContextMenu_OverrideButton = doc.createElement('input') ; + overrideButton.type = 'button' ; + var buttonHolder = doc.createElement('p') ; + doc.body.appendChild( buttonHolder ) ; + buttonHolder.appendChild( overrideButton ) ; + } + + overrideButton.style.cssText = 'position:absolute;top:' + ( e.clientY - 2 ) + + 'px;left:' + ( e.clientX - 2 ) + + 'px;width:5px;height:5px;opacity:0.01' ; + } + el = el.parentNode ; + } + return false ; +} + +function FCKContextMenu_Document_OnMouseUp( e ) +{ + var overrideButton = FCKContextMenu_OverrideButton ; + + if ( overrideButton ) + { + var parent = overrideButton.parentNode ; + parent.parentNode.removeChild( parent ) ; + FCKContextMenu_OverrideButton = undefined ; + + if( e && e.button == 2 ) + { + FCKContextMenu_Document_OnContextMenu( e ) ; + return false ; + } + } + return true ; } function FCKContextMenu_AttachedElement_OnContextMenu( ev, fckContextMenu, el ) { -// var iButton = e ? e.which - 1 : event.button ; - -// if ( iButton != 2 ) -// return ; + if ( fckContextMenu.CtrlDisable && ( ev.ctrlKey || ev.metaKey ) ) + return true ; var eTarget = el || this ; @@ -113,16 +180,29 @@ function FCKContextMenu_AttachedElement_OnContextMenu( ev, fckContextMenu, el ) 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 ) ; - fckContextMenu._Panel.Show( - ev.pageX || ev.screenX, - ev.pageY || ev.screenY, - ev.currentTarget || null - ) ; + 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 ; } @@ -131,4 +211,4 @@ function FCKContextMenu_MenuBlock_OnClick( menuItem, contextMenu ) { contextMenu._Panel.Hide() ; FCKTools.RunFunction( contextMenu.OnItemClick, contextMenu, menuItem ) ; -} \ No newline at end of file +} 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..c8726c570a --- /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-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * The Data Processor is responsible for transforming the input and output data + * in the editor. For more info: + * http://dev.fckeditor.net/wiki/Components/DataProcessor + * + * The default implementation offers the base XHTML compatibility features of + * FCKeditor. Further Data Processors may be implemented for other purposes. + * + */ + +var FCKDataProcessor = function() +{} + +FCKDataProcessor.prototype = +{ + /* + * Returns a string representing the HTML format of "data". The returned + * value will be loaded in the editor. + * The HTML must be from 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 ; + } +} ; diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js index f7c7b1b247..a25eacb087 100644 --- a/phpgwapi/js/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckdocumentfragment_gecko.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -43,4 +43,4 @@ FCKDocumentFragment.prototype = { 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 index 3ea539f0c9..4a50cf4410 100644 --- a/phpgwapi/js/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckdocumentfragment_ie.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -55,4 +55,4 @@ FCKDocumentFragment.prototype = 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 index 0471336cc3..09aab32821 100644 --- a/phpgwapi/js/fckeditor/editor/_source/classes/fckdomrange.js +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckdomrange.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -19,12 +19,13 @@ * == END LICENSE == * * Class for working with a selection range, much like the W3C DOM Range, but - * it is not intented to be an implementation of the W3C interface. + * it is not intended to be an implementation of the W3C interface. */ var FCKDomRange = function( sourceWindow ) { this.Window = sourceWindow ; + this._Cache = {} ; } FCKDomRange.prototype = @@ -32,24 +33,47 @@ FCKDomRange.prototype = _UpdateElementInfo : function() { - if ( !this._Range ) + var innerRange = this._Range ; + + if ( !innerRange ) this.Release( true ) ; else { - var eStart = this._Range.startContainer ; - var eEnd = this._Range.endContainer ; + // For text nodes, the node itself is the StartNode. + var eStart = innerRange.startContainer ; + var eEnd = innerRange.endContainer ; var oElementPath = new FCKElementPath( eStart ) ; - this.StartContainer = oElementPath.LastElement ; + 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 ) ; - this.EndContainer = oElementPath.LastElement ; + + // 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() @@ -74,12 +98,15 @@ FCKDomRange.prototype = this._UpdateElementInfo() ; return docFrag ; } + return null ; }, CheckIsCollapsed : function() { if ( this._Range ) return this._Range.collapsed ; + + return false ; }, Collapse : function( toStart ) @@ -121,12 +148,20 @@ FCKDomRange.prototype = // is "

^ Text

" (inside ). MoveToElementEditStart : function( targetElement ) { - var child ; + var editableElement ; - while ( ( child = targetElement.firstChild ) && child.nodeType == 1 && FCKListsLib.EmptyElements[ child.nodeName.toLowerCase() ] == null ) - targetElement = child ; + while ( targetElement && targetElement.nodeType == 1 ) + { + if ( FCKDomTools.CheckIsEditable( targetElement ) ) + editableElement = targetElement ; + else if ( editableElement ) + break ; // If we already found an editable element, stop the loop. - this.MoveToElementStart( targetElement ) ; + targetElement = targetElement.firstChild ; + } + + if ( editableElement ) + this.MoveToElementStart( editableElement ) ; }, InsertNode : function( node ) @@ -135,7 +170,7 @@ FCKDomRange.prototype = this._Range.insertNode( node ) ; }, - CheckIsEmpty : function( ignoreEndBRs ) + CheckIsEmpty : function() { if ( this.CheckIsCollapsed() ) return true ; @@ -144,124 +179,250 @@ FCKDomRange.prototype = var eToolDiv = this.Window.document.createElement( 'div' ) ; this._Range.cloneContents().AppendTo( eToolDiv ) ; - FCKDomTools.TrimNode( eToolDiv, ignoreEndBRs ) ; + 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() { - // Create a clone of the current range. - var oTestRange = this.Clone() ; + var cache = this._Cache ; + var bIsStartOfBlock = cache.IsStartOfBlock ; - // Collapse it to its start point. - oTestRange.Collapse( true ) ; + if ( bIsStartOfBlock != undefined ) + return bIsStartOfBlock ; - // Move the start boundary to the start of the block. - oTestRange.SetStart( oTestRange.StartBlock || oTestRange.StartBlockLimit, 1 ) ; + // Take the block reference. + var block = this.StartBlock || this.StartBlockLimit ; - var bIsStartOfBlock = oTestRange.CheckIsEmpty() ; + var container = this._Range.startContainer ; + var offset = this._Range.startOffset ; + var currentNode ; - oTestRange.Release() ; + 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() ; - return bIsStartOfBlock ; + // 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 ) { - // Create a clone of the current range. - var oTestRange = this.Clone() ; + var isEndOfBlock = this._Cache.IsEndOfBlock ; - // Collapse it to its end point. - oTestRange.Collapse( false ) ; + if ( isEndOfBlock != undefined ) + return isEndOfBlock ; - // Move the end boundary to the end of the block. - oTestRange.SetEnd( oTestRange.EndBlock || oTestRange.EndBlockLimit, 2 ) ; + // Take the block reference. + var block = this.EndBlock || this.EndBlockLimit ; - var bIsEndOfBlock = oTestRange.CheckIsCollapsed() ; - - if ( !bIsEndOfBlock ) + 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 ) { - // Inserts the contents of the range in a div tag. - var eToolDiv = this.Window.document.createElement( 'div' ) ; - oTestRange._Range.cloneContents().AppendTo( eToolDiv ) ; - FCKDomTools.TrimNode( eToolDiv, true ) ; - - // Find out if we are in an empty tree of inline elements, like - bIsEndOfBlock = true ; - var eLastChild = eToolDiv ; - while ( ( eLastChild = eLastChild.lastChild ) ) + var textValue = container.nodeValue ; + if ( offset < textValue.length ) { - // Check the following: - // 1. Is there more than one node in the parents children? - // 2. Is the node not an element node? - // 3. Is it not a inline element. - if ( eLastChild.previousSibling || eLastChild.nodeType != 1 || FCKListsLib.InlineChildReqElements[ eLastChild.nodeName.toLowerCase() ] == null ) - { - // So we are not in the end of the range. - bIsEndOfBlock = false ; - break ; - } + 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 ; } } - - oTestRange.Release() ; + 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 bIsEndOfBlock ; + return this._Cache.IsEndOfBlock = true ; }, - CreateBookmark : function() + // 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 : 'fck_dom_range_start_' + (new Date()).valueOf() + '_' + Math.floor(Math.random()*1000), - EndId : 'fck_dom_range_end_' + (new Date()).valueOf() + '_' + Math.floor(Math.random()*1000) + 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 eSpan ; + var eStartSpan ; + var eEndSpan ; var oClone ; // For collapsed ranges, add just the start marker. if ( !this.CheckIsCollapsed() ) { - eSpan = oDoc.createElement( 'span' ) ; - eSpan.id = oBookmark.EndId ; - eSpan.innerHTML = ' ' ; // For IE, it must have something inside, otherwise it may be removed during operations. + 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( eSpan ) ; + oClone.InsertNode( eEndSpan ) ; } - eSpan = oDoc.createElement( 'span' ) ; - eSpan.id = oBookmark.StartId ; - eSpan.innerHTML = ' ' ; // For IE, it must have something inside, otherwise it may be removed during operations. + 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( eSpan ) ; + 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 oDoc = this.Window.document ; - - var eStartSpan = oDoc.getElementById( bookmark.StartId ) ; - var eEndSpan = oDoc.getElementById( bookmark.EndId ) ; + var eStartSpan = this.GetBookmarkNode( bookmark, true ) ; + var eEndSpan = this.GetBookmarkNode( bookmark, false ) ; this.SetStart( eStartSpan, 3 ) ; if ( !preserveBookmark ) FCKDomTools.RemoveNode( eStartSpan ) ; - // If collapsed, the start span will not be available. + // If collapsed, the end span will not be available. if ( eEndSpan ) { this.SetEnd( eEndSpan, 3 ) ; @@ -271,6 +432,113 @@ FCKDomRange.prototype = } 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 ) ; }, /* @@ -282,7 +550,7 @@ FCKDomRange.prototype = * 3 = Before Start ^contents * 4 = After End contents^ */ - SetStart : function( targetElement, position ) + SetStart : function( targetElement, position, noInfoUpdate ) { var oRange = this._Range ; if ( !oRange ) @@ -305,7 +573,9 @@ FCKDomRange.prototype = case 4 : // After End contents^ oRange.setStartAfter( targetElement ) ; } - this._UpdateElementInfo() ; + + if ( !noInfoUpdate ) + this._UpdateElementInfo() ; }, /* @@ -317,7 +587,7 @@ FCKDomRange.prototype = * 3 = Before Start ^contents * 4 = After End contents^ */ - SetEnd : function( targetElement, position ) + SetEnd : function( targetElement, position, noInfoUpdate ) { var oRange = this._Range ; if ( !oRange ) @@ -340,7 +610,9 @@ FCKDomRange.prototype = case 4 : // After End contents^ oRange.setEndAfter( targetElement ) ; } - this._UpdateElementInfo() ; + + if ( !noInfoUpdate ) + this._UpdateElementInfo() ; }, Expand : function( unit ) @@ -349,53 +621,95 @@ FCKDomRange.prototype = 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' : - if ( this.StartBlock ) + 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 current child node for the range (in the offset). - // If the offset node is not available, the the first one. + // If it is an element, get the node right before of it (in source order). if ( oNode.nodeType == 1 ) { - if ( !( oNode = oNode.childNodes[ this._Range.startOffset ] ) ) - oNode = oNode.firstChild ; + var lastNode = oNode.childNodes[ this._Range.startOffset ] ; + if ( lastNode ) + oNode = FCKDomTools.GetPreviousSourceNode( lastNode, true ) ; + else + oNode = oNode.lastChild || oNode ; } - // Not able to defined the current position. - if ( !oNode ) - return ; - // We must look for the left boundary, relative to the range // start, which is limited by a block element. - while ( true ) + while ( oNode + && ( oNode.nodeType != 1 + || ( oNode != this.StartBlockLimit + && !boundarySet[ oNode.nodeName.toLowerCase() ] ) ) ) { - oSibling = oNode.previousSibling ; - - if ( !oSibling ) - { - // Continue if we are not yet in the block limit (inside a , for example). - if ( oNode.parentNode != this.StartBlockLimit ) - oNode = oNode.parentNode ; - else - break ; - } - else if ( oSibling.nodeType != 1 || !(/^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DT|DE)$/).test( oSibling.nodeName.toUpperCase() ) ) - { - // Continue if the sibling is not a block tag. - oNode = oSibling ; - } - else - break ; + this._Range.setStartBefore( oNode ) ; + oNode = oNode.previousSibling || oNode.parentNode ; } - - this._Range.setStartBefore( oNode ) ; } - if ( this.EndBlock ) + if ( this.EndBlock && FCKConfig.EnterMode != 'br' && unit == 'block_contents' && this.EndBlock.nodeName.toLowerCase() != 'li' ) this.SetEnd( this.EndBlock, 2 ) ; else { @@ -403,50 +717,202 @@ FCKDomRange.prototype = if ( oNode.nodeType == 1 ) oNode = oNode.childNodes[ this._Range.endOffset ] || oNode.lastChild ; - if ( !oNode ) - return ; - // We must look for the right boundary, relative to the range // end, which is limited by a block element. - while ( true ) + while ( oNode + && ( oNode.nodeType != 1 + || ( oNode != this.StartBlockLimit + && !boundarySet[ oNode.nodeName.toLowerCase() ] ) ) ) { - oSibling = oNode.nextSibling ; - - if ( !oSibling ) - { - // Continue if we are not yet in the block limit (inide a , for example). - if ( oNode.parentNode != this.EndBlockLimit ) - oNode = oNode.parentNode ; - else - break ; - } - else if ( oSibling.nodeType != 1 || !(/^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DT|DE)$/).test( oSibling.nodeName.toUpperCase() ) ) - { - // Continue if the sibling is not a block tag. - oNode = oSibling ; - } - else - break ; + this._Range.setEndAfter( oNode ) ; + oNode = oNode.nextSibling || oNode.parentNode ; } - this._Range.setEndAfter( oNode ) ; + // 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 follows the + * range after the split. + * - WasStartOfBlock : a boolean indicating that the range was + * originaly at the start of the block. + * - WasEndOfBlock : a boolean indicating that the range was originaly + * at the end of the block. + * + * If the range was originaly at the start of the block, no split will happen + * and the PreviousBlock value will be null. The same is valid for the + * NextBlock value if the range was at the end of the block. + */ + SplitBlock : function( forceBlockTag ) + { + var blockTag = forceBlockTag || FCKConfig.EnterMode ; + + if ( !this._Range ) + this.MoveToSelection() ; + + // The range boundaries must be in the same "block limit" element. + if ( this.StartBlockLimit == this.EndBlockLimit ) + { + // Get the current blocks. + var eStartBlock = this.StartBlock ; + var eEndBlock = this.EndBlock ; + var oElementPath = null ; + + if ( blockTag != 'br' ) + { + if ( !eStartBlock ) + { + eStartBlock = this.FixBlock( true, blockTag ) ; + eEndBlock = this.EndBlock ; // FixBlock may have fixed the EndBlock too. + } + + if ( !eEndBlock ) + eEndBlock = this.FixBlock( false, blockTag ) ; + } + + // Get the range position. + var bIsStartOfBlock = ( eStartBlock != null && this.CheckStartOfBlock() ) ; + var bIsEndOfBlock = ( eEndBlock != null && this.CheckEndOfBlock() ) ; + + // Delete the current contents. + if ( !this.CheckIsEmpty() ) + this.DeleteContents() ; + + if ( eStartBlock && eEndBlock && eStartBlock == eEndBlock ) + { + if ( bIsEndOfBlock ) + { + oElementPath = new FCKElementPath( this.StartContainer ) ; + this.MoveToPosition( eEndBlock, 4 ) ; + eEndBlock = null ; + } + else if ( bIsStartOfBlock ) + { + oElementPath = new FCKElementPath( this.StartContainer ) ; + this.MoveToPosition( eStartBlock, 3 ) ; + eStartBlock = null ; + } + else + { + // Extract the contents of the block from the selection point to the end of its contents. + this.SetEnd( eStartBlock, 2 ) ; + var eDocFrag = this.ExtractContents() ; + + // Duplicate the block element after it. + eEndBlock = eStartBlock.cloneNode( false ) ; + eEndBlock.removeAttribute( 'id', false ) ; + + // Place the extracted contents in the duplicated block. + eDocFrag.AppendTo( eEndBlock ) ; + + FCKDomTools.InsertAfterNode( eStartBlock, eEndBlock ) ; + + this.MoveToPosition( eStartBlock, 4 ) ; + + // In Gecko, the last child node must be a bogus
. + // 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, blockTag ) + { + // Bookmark the range so we can restore it later. + var oBookmark = this.CreateBookmark() ; + + // Collapse the range to the requested ending boundary. + this.Collapse( isStart ) ; + + // Expands it to the block contents. + this.Expand( 'block_contents' ) ; + + // Create the fixed block. + var oFixedBlock = this.Window.document.createElement( blockTag ) ; + + // Move the contents of the temporary range to the fixed block. + this.ExtractContents().AppendTo( oFixedBlock ) ; + FCKDomTools.TrimNode( oFixedBlock ) ; + + // 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 ; } -} ; \ No newline at end of file +} ; diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckdomrange_gecko.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckdomrange_gecko.js index d77520dc9b..ddffb1301c 100644 --- a/phpgwapi/js/fckeditor/editor/_source/classes/fckdomrange_gecko.js +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckdomrange_gecko.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -19,7 +19,7 @@ * == END LICENSE == * * Class for working with a selection range, much like the W3C DOM Range, but - * it is not intented to be an implementation of the W3C interface. + * it is not intended to be an implementation of the W3C interface. * (Gecko Implementation) */ @@ -29,11 +29,14 @@ FCKDomRange.prototype.MoveToSelection = function() var oSel = this.Window.getSelection() ; - if ( oSel.rangeCount == 1 ) + 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() @@ -41,8 +44,15 @@ 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( oRange.startContainer, oRange.startOffset ) ; + oDocRange.setStart( startContainer, oRange.startOffset ) ; try { @@ -51,7 +61,7 @@ FCKDomRange.prototype.Select = function() catch ( e ) { // There is a bug in Firefox implementation (it would be too easy - // otherwhise). The new start can't be after the end (W3C says it can). + // 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' ) ) { @@ -69,3 +79,26 @@ FCKDomRange.prototype.Select = function() 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 ) ; +} diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckdomrange_ie.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckdomrange_ie.js index 8fd779df20..3ebe2b9a34 100644 --- a/phpgwapi/js/fckeditor/editor/_source/classes/fckdomrange_ie.js +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckdomrange_ie.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -19,7 +19,7 @@ * == END LICENSE == * * Class for working with a selection range, much like the W3C DOM Range, but - * it is not intented to be an implementation of the W3C interface. + * it is not intended to be an implementation of the W3C interface. * (IE Implementation) */ @@ -33,15 +33,23 @@ FCKDomRange.prototype.MoveToSelection = function() 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. - eMarker = this._GetSelectionMarkerTag( true ) ; - this._Range.setStart( eMarker.parentNode, FCKDomTools.GetIndexOf( eMarker ) ) ; - eMarker.parentNode.removeChild( eMarker ) ; + this._Range.setStart( eMarkerStart.parentNode, FCKDomTools.GetIndexOf( eMarkerStart ) ) ; + eMarkerStart.parentNode.removeChild( eMarkerStart ) ; // Set the end boundary. - var eMarker = this._GetSelectionMarkerTag( false ) ; - this._Range.setEnd( eMarker.parentNode, FCKDomTools.GetIndexOf( eMarker ) ) ; - eMarker.parentNode.removeChild( eMarker ) ; + this._Range.setEnd( eMarkerEnd.parentNode, FCKDomTools.GetIndexOf( eMarkerEnd ) ) ; + eMarkerEnd.parentNode.removeChild( eMarkerEnd ) ; this._UpdateElementInfo() ; } @@ -58,92 +66,134 @@ FCKDomRange.prototype.MoveToSelection = function() } } -FCKDomRange.prototype.Select = function() +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 ) { - var bIsCollapsed = this.CheckIsCollapsed() ; + // Create a tool range for the end. + var oIERangeEnd = this.Window.document.body.createTextRange() ; - // Create marker tags for the start and end boundaries. - var eStartMarker = this._GetRangeMarkerTag( true ) ; + // Position the tool range at the end. + oIERangeEnd.moveToElementText( eEndMarker ) ; - if ( !bIsCollapsed ) - var eEndMarker = this._GetRangeMarkerTag( false ) ; + // 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 ; - // Create the main range which will be used for the selection. - var oIERange = this.Window.document.body.createTextRange() ; + // 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 ) ; - // Position the range at the start boundary. - oIERange.moveToElementText( eStartMarker ) ; - oIERange.moveStart( 'character', 1 ) ; - - if ( !bIsCollapsed ) + if ( bIsStartMakerAlone ) { - // 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 ) ; + // 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 ) ; } + } - // Remove the markers (reset the position, because of the changes in the DOM tree). - this._Range.setStartBefore( eStartMarker ) ; - eStartMarker.parentNode.removeChild( eStartMarker ) ; + if ( !this._Range ) + this._Range = this.CreateRange() ; - if ( bIsCollapsed ) + // 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 ) { - // The following trick is needed so IE makes collapsed selections - // inside empty blocks visible (expands the block). - try - { - oIERange.pasteHTML(' ') ; - oIERange.moveStart( 'character', -1 ) ; - } - catch (e){} + // Move the selection start to include the temporary . + oIERange.moveStart( 'character', -1 ) ; + oIERange.select() ; - oIERange.pasteHTML('') ; + + // Remove our temporary stuff. + this.Window.document.selection.clear() ; } else - { - this._Range.setEndBefore( eEndMarker ) ; - eEndMarker.parentNode.removeChild( eEndMarker ) ; 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 = this.Window.document.selection.createRange() ; + 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 this.Window.document.getElementById( sMarkerId ) ; + + return doc.getElementById( sMarkerId ) ; } - -FCKDomRange.prototype._GetRangeMarkerTag = function( toStart ) -{ - // Get a range for the start boundary. - var oRange = this._Range ; - - // insertNode() will add the node at the beginning of the Range, updating - // the endOffset if necessary. So, we can work with the current range in this case. - if ( !toStart ) - { - oRange = oRange.cloneRange() ; - oRange.collapse( toStart === true ) ; - } - - var eSpan = this.Window.document.createElement( 'span' ) ; - eSpan.innerHTML = ' ' ; - oRange.insertNode( eSpan ) ; - - return eSpan ; -} \ No newline at end of file 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..697c0c1b98 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckdomrangeiterator.js @@ -0,0 +1,327 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * This class can be used to interate through nodes inside a range. + * + * During interation, the provided range can become invalid, due to document + * mutations, so CreateBookmark() used to restore it after processing, if + * needed. + */ + +var FCKDomRangeIterator = function( range ) +{ + /** + * The FCKDomRange object that marks the interation boundaries. + */ + this.Range = range ; + + /** + * Indicates that
      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 ; + + this._NextNode = null ; + + while ( currentNode ) + { + // closeRange indicates that a paragraph boundary has been found, + // so the range can be closed. + var closeRange = false ; + + // includeNode indicates that the current node is good to be part + // of the range. By default, any non-element node is ok for it. + var includeNode = ( currentNode.nodeType != 1 ) ; + + var continueFromSibling = false ; + + // If it is an element node, let's check if it can be part of the + // range. + if ( !includeNode ) + { + var nodeName = currentNode.nodeName.toLowerCase() ; + + if ( boundarySet[ nodeName ] && ( !FCKBrowserInfo.IsIE || currentNode.scopeName == 'HTML' ) ) + { + //
boundaries must be part of the range. It will + // happen only if ForceBrBreak. + if ( nodeName == 'br' ) + includeNode = true ; + else if ( !range && currentNode.childNodes.length == 0 && nodeName != 'hr' ) + { + // If we have found an empty block, and haven't started + // the range yet, it means we must return this block. + block = currentNode ; + isLast = currentNode == lastNode ; + break ; + } + + // The range must finish right before the boundary, + // including possibly skipped empty spaces. (#1603) + if ( range ) + { + range.SetEnd( currentNode, 3, true ) ; + + // The found boundary must be set as the next one at this + // point. (#1717) + if ( nodeName != 'br' ) + this._NextNode = currentNode ; + } + + closeRange = true ; + } + else + { + // If we have child nodes, let's check them. + if ( currentNode.firstChild ) + { + // If we don't have a range yet, let's start it. + if ( !range ) + { + range = new FCKDomRange( this.Range.Window ) ; + range.SetStart( currentNode, 3, true ) ; + } + + currentNode = currentNode.firstChild ; + continue ; + } + includeNode = true ; + } + } + else if ( currentNode.nodeType == 3 ) + { + // Ignore normal whitespaces (i.e. not including   or + // other unicode whitespaces) before/after a block node. + if ( /^[\r\n\t ]+$/.test( currentNode.nodeValue ) ) + includeNode = false ; + } + + // The current node is good to be part of the range and we are + // starting a new range, initialize it first. + if ( includeNode && !range ) + { + range = new FCKDomRange( this.Range.Window ) ; + range.SetStart( currentNode, 3, true ) ; + } + + // The last node has been found. + isLast = ( ( !closeRange || includeNode ) && currentNode == lastNode ) ; +// isLast = ( currentNode == lastNode && ( currentNode.nodeType != 1 || currentNode.childNodes.length == 0 ) ) ; + + // If we are in an element boundary, let's check if it is time + // to close the range, otherwise we include the parent within it. + if ( range && !closeRange ) + { + while ( !currentNode.nextSibling && !isLast ) + { + var parentNode = currentNode.parentNode ; + + if ( boundarySet[ parentNode.nodeName.toLowerCase() ] ) + { + closeRange = true ; + isLast = isLast || ( parentNode == lastNode ) ; + break ; + } + + currentNode = parentNode ; + includeNode = true ; + isLast = ( currentNode == lastNode ) ; + continueFromSibling = true ; + } + } + + // Now finally include the node. + if ( includeNode ) + range.SetEnd( currentNode, 4, true ) ; + + // We have found a block boundary. Let's close the range and move out of the + // loop. + if ( ( closeRange || isLast ) && range ) + { + range._UpdateElementInfo() ; + + if ( range.StartNode == range.EndNode + && range.StartNode.parentNode == range.StartBlockLimit + && range.StartNode.getAttribute && range.StartNode.getAttribute( '_fck_bookmark' ) ) + range = null ; + else + break ; + } + + if ( isLast ) + break ; + + currentNode = FCKDomTools.GetNextSourceNode( currentNode, continueFromSibling, null, lastNode ) ; + } + + // Now, based on the processed range, look for (or create) the block to be returned. + if ( !block ) + { + // If no range has been found, this is the end. + if ( !range ) + { + this._NextNode = null ; + return null ; + } + + block = range.StartBlock ; + + if ( !block + && !this.EnforceRealBlocks + && range.StartBlockLimit.nodeName.IEquals( 'DIV', 'TH', 'TD' ) + && range.CheckStartOfBlock() + && range.CheckEndOfBlock() ) + { + block = range.StartBlockLimit ; + } + else if ( !block || ( this.EnforceRealBlocks && block.nodeName.toLowerCase() == 'li' ) ) + { + // Create the fixed block. + block = this.Range.Window.document.createElement( FCKConfig.EnterMode == 'p' ? 'p' : 'div' ) ; + + // Move the contents of the temporary range to the fixed block. + range.ExtractContents().AppendTo( block ) ; + FCKDomTools.TrimNode( block ) ; + + // Insert the fixed block into the DOM. + range.InsertNode( block ) ; + + removePreviousBr = true ; + removeLastBr = true ; + } + else if ( block.nodeName.toLowerCase() != 'li' ) + { + // If the range doesn't includes the entire contents of the + // block, we must split it, isolating the range in a dedicated + // block. + if ( !range.CheckStartOfBlock() || !range.CheckEndOfBlock() ) + { + // The resulting block will be a clone of the current one. + block = block.cloneNode( false ) ; + + // Extract the range contents, moving it to the new block. + range.ExtractContents().AppendTo( block ) ; + FCKDomTools.TrimNode( block ) ; + + // Split the block. At this point, the range will be in the + // right position for our intents. + var splitInfo = range.SplitBlock() ; + + removePreviousBr = !splitInfo.WasStartOfBlock ; + removeLastBr = !splitInfo.WasEndOfBlock ; + + // Insert the new block into the DOM. + range.InsertNode( block ) ; + } + } + else if ( !isLast ) + { + // LIs are returned as is, with all their children (due to the + // nested lists). But, the next node is the node right after + // the current range, which could be an
  • child (nested + // lists) or the next sibling
  • . + + this._NextNode = block == lastNode ? null : FCKDomTools.GetNextSourceNode( range.EndNode, true, null, lastNode ) ; + return block ; + } + } + + if ( removePreviousBr ) + { + var previousSibling = block.previousSibling ; + if ( previousSibling && previousSibling.nodeType == 1 ) + { + if ( previousSibling.nodeName.toLowerCase() == 'br' ) + previousSibling.parentNode.removeChild( previousSibling ) ; + else if ( previousSibling.lastChild && previousSibling.lastChild.nodeName.IEquals( 'br' ) ) + previousSibling.removeChild( previousSibling.lastChild ) ; + } + } + + if ( removeLastBr ) + { + var lastChild = block.lastChild ; + if ( lastChild && lastChild.nodeType == 1 && lastChild.nodeName.toLowerCase() == 'br' ) + block.removeChild( lastChild ) ; + } + + // Get a reference for the next element. This is important because the + // above block can be removed or changed, so we can rely on it for the + // next interation. + if ( !this._NextNode ) + this._NextNode = ( isLast || block == lastNode ) ? null : FCKDomTools.GetNextSourceNode( block, true, null, lastNode ) ; + + return block ; + } +} ; diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckeditingarea.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckeditingarea.js index 4d2ee09782..6998bbe229 100644 --- a/phpgwapi/js/fckeditor/editor/_source/classes/fckeditingarea.js +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckeditingarea.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -44,49 +44,82 @@ FCKEditingArea.prototype.Start = function( html, secondCall ) var oTargetDocument = FCKTools.GetElementDocument( eTargetElement ) ; // Remove all child nodes from the target. - while( eTargetElement.childNodes.length > 0 ) - eTargetElement.removeChild( eTargetElement.childNodes[0] ) ; + while( eTargetElement.firstChild ) + eTargetElement.removeChild( eTargetElement.firstChild ) ; if ( this.Mode == FCK_EDITMODE_WYSIWYG ) { - // Create the editing area IFRAME. - var oIFrame = this.IFrame = oTargetDocument.createElement( 'iframe' ) ; - oIFrame.src = 'javascript:void(0)' ; - oIFrame.frameBorder = 0 ; - oIFrame.width = oIFrame.height = '100%' ; - - // Append the new IFRAME to the target. - eTargetElement.appendChild( oIFrame ) ; + // For FF, document.domain must be set only when different, otherwhise + // we'll strangely have "Permission denied" issues. + if ( FCK_IS_CUSTOM_DOMAIN ) + html = '' + html ; // IE has a bug with the tag... it must have a closer, - // otherwise the all sucessive tags will be set as children nodes of the . + // 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 ) { - // If nothing in the body, place a BOGUS tag so the cursor will appear. - if ( FCKBrowserInfo.IsGecko ) - html = html.replace( /(]*>)\s*(<\/body>)/i, '$1' + GECKO_BOGUS + '$2' ) ; - // 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 oMatch = html.match( FCKRegexLib.BodyContents ) ; + var oMatchBefore = html.match( FCKRegexLib.BeforeBody ) ; + var oMatchAfter = html.match( FCKRegexLib.AfterBody ) ; - if ( oMatch ) + if ( oMatchBefore && oMatchAfter ) { - html = - oMatch[1] + // This is the HTML until the tag, inclusive. - ' ' + - oMatch[3] ; // This is the HTML from the tag, inclusive. + 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 ; - this._BodyHTML = oMatch[2] ; // This is the BODY tag contents. } else this._BodyHTML = html ; // Invalid HTML input. } + // Create the editing area IFRAME. + var oIFrame = this.IFrame = oTargetDocument.createElement( 'iframe' ) ; + + // IE: Avoid JavaScript errors thrown by the editing are source (like tags events). + // See #1055. + var sOverrideError = '' ; + + oIFrame.frameBorder = 0 ; + oIFrame.width = oIFrame.height = '100%' ; + + if ( FCK_IS_CUSTOM_DOMAIN && FCKBrowserInfo.IsIE ) + { + window._FCKHtmlToLoad = sOverrideError + html ; + oIFrame.src = 'javascript:void( (function(){' + + 'document.open() ;' + + 'document.domain="' + document.domain + '" ;' + + 'document.write( window.parent._FCKHtmlToLoad );' + + 'document.close() ;' + + 'window.parent._FCKHtmlToLoad = null ;' + + '})() )' ; + } + else if ( !FCKBrowserInfo.IsGecko ) + { + // Firefox will render the tables inside the body in Quirks mode if the + // source of the iframe is set to javascript. see #515 + oIFrame.src = 'javascript:void(0)' ; + } + + // Append the new IFRAME to the target. For IE, it must be done after + // setting the "src", to avoid the "secure/unsecure" message under HTTPS. + eTargetElement.appendChild( oIFrame ) ; + // Get the window and document objects used to interact with the newly created IFRAME. this.Window = oIFrame.contentWindow ; @@ -94,38 +127,69 @@ FCKEditingArea.prototype.Start = function( html, secondCall ) // TODO: This error handler is not being fired. // this.Window.onerror = function() { alert( 'Error!' ) ; return true ; } - var oDoc = this.Document = this.Window.document ; + if ( !FCK_IS_CUSTOM_DOMAIN || !FCKBrowserInfo.IsIE ) + { + var oDoc = this.Window.document ; - oDoc.open() ; - oDoc.write( html ) ; - oDoc.close() ; + oDoc.open() ; + oDoc.write( sOverrideError + html ) ; + oDoc.close() ; + } + + if ( FCKBrowserInfo.IsAIR ) + FCKAdobeAIR.EditingArea_Start( oDoc, html ) ; // Firefox 1.0.x is buggy... ohh yes... so let's do it two times and it - // will magicaly work. + // 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 ) ; + if ( oIFrame.readyState && oIFrame.readyState != 'completed' ) + { + var editArea = this ; + ( oIFrame.onreadystatechange = function() + { + if ( oIFrame.readyState == 'complete' ) + { + oIFrame.onreadystatechange = null ; + editArea.Window._FCKEditingArea = editArea ; + FCKEditingArea_CompleteStart.call( editArea.Window ) ; + } + // It happened that IE changed the state to "complete" after the + // "if" and before the "onreadystatechange" assignement, making we + // lost the event call, so we do a manual call just to be sure. + } )() ; + } else - FCKEditingArea_CompleteStart.call( this.Window ) ; + { + 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' ; - eTextarea.style.width = eTextarea.style.height = '100%' ; - eTextarea.style.border = 'none' ; + FCKDomTools.SetElementStyles( eTextarea, + { + width : '100%', + height : '100%', + border : 'none', + resize : 'none', + outline : 'none' + } ) ; eTargetElement.appendChild( eTextarea ) ; eTextarea.value = html ; @@ -138,7 +202,7 @@ FCKEditingArea.prototype.Start = function( html, secondCall ) // "this" here is FCKEditingArea.Window function FCKEditingArea_CompleteStart() { - // Of Firefox, the DOM takes a little to become available. So we must wait for it in a loop. + // 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 ) ; @@ -146,6 +210,10 @@ function FCKEditingArea_CompleteStart() } var oEditorArea = this._FCKEditingArea ; + + // Save this reference to be re-used later. + oEditorArea.Document = oEditorArea.Window.document ; + oEditorArea.MakeEditable() ; // Fire the "OnLoad" event. @@ -158,7 +226,10 @@ FCKEditingArea.prototype.MakeEditable = function() 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 ) ; @@ -180,51 +251,58 @@ FCKEditingArea.prototype.MakeEditable = function() 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 ) ; - } - - // Analysing Firefox 1.5 source code, it seams that there is support for a - // "insertBrOnReturn" command. Applying it gives no error, but it doesn't - // gives the same behavior that you have with IE. It works only if you are - // already inside a paragraph and it doesn't render correctly in the first enter. - // oDoc.execCommand( 'insertBrOnReturn', false, false ) ; - // Tell Gecko (Firefox 1.5+) to enable or not live resizing of objects (by Alfonso Martinez) oDoc.execCommand( 'enableObjectResizing', false, !FCKConfig.DisableObjectResizing ) ; // Disable the standard table editing features of Firefox. oDoc.execCommand( 'enableInlineTableEditing', false, !FCKConfig.DisableFFTableHandles ) ; } - catch (e) {} + 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() ) - return ; - - if ( FCKBrowserInfo.IsSafari ) - this.IFrame.focus() ; + if ( FCKBrowserInfo.IsIE ) + this._FocusIE() ; else - { this.Window.focus() ; - } } else { @@ -238,8 +316,39 @@ FCKEditingArea.prototype.Focus = function() catch(e) {} } +FCKEditingArea.prototype._FocusIE = function() +{ + // In IE it can happen that the document is in theory focused but the + // active element is outside of it. + this.Document.body.setActive() ; + + this.Window.focus() ; + + // Kludge for #141... yet more code to workaround IE bugs + var range = this.Document.selection.createRange() ; + + var parentNode = range.parentElement() ; + var parentTag = parentNode.nodeName.toLowerCase() ; + + // Only apply the fix when in a block, and the block is empty. + if ( parentNode.childNodes.length > 0 || + !( FCKListsLib.BlockElements[parentTag] || + FCKListsLib.NonEmptyBlockElements[parentTag] ) ) + { + return ; + } + + // Force the selection to happen, in this way we guarantee the focus will + // be there. + range = new FCKDomRange( this.Window ) ; + range.MoveToElementEditStart( parentNode ) ; + range.Select() ; +} + function FCKEditingArea_Cleanup() { + if ( this.Document ) + this.Document.body.innerHTML = "" ; this.TargetElement = null ; this.IFrame = null ; this.Document = null ; diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckelementpath.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckelementpath.js index d5ff6519fa..2bf4eb3e9e 100644 --- a/phpgwapi/js/fckeditor/editor/_source/classes/fckelementpath.js +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckelementpath.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -18,12 +18,10 @@ * * == END LICENSE == * - * Manages the DOM anscensors element list of a specific DOM node + * Manages the DOM ascensors element list of a specific DOM node * (limited to body, inclusive). */ -// TODO: Implement IE cleanup. - var FCKElementPath = function( lastNode ) { var eBlock = null ; @@ -40,6 +38,8 @@ var FCKElementPath = function( lastNode ) this.LastElement = e ; var sElementName = e.nodeName.toLowerCase() ; + if ( FCKBrowserInfo.IsIE && e.scopeName != 'HTML' ) + sElementName = e.scopeName.toLowerCase() + ':' + sElementName ; if ( !eBlockLimit ) { @@ -47,7 +47,14 @@ var FCKElementPath = function( lastNode ) eBlock = e ; if ( FCKListsLib.PathBlockLimitElements[ sElementName ] != null ) - eBlockLimit = e ; + { + // DIV is considered the Block, if no block is available (#525) + // and if it doesn't contain other blocks. + if ( !eBlock && sElementName == 'div' && !FCKElementPath._CheckHasBlock( e ) ) + eBlock = e ; + else + eBlockLimit = e ; + } } aElements.push( e ) ; @@ -63,4 +70,20 @@ var FCKElementPath = function( lastNode ) this.Elements = aElements ; } +/** + * Check if an element contains any block element. + */ +FCKElementPath._CheckHasBlock = function( element ) +{ + var childNodes = element.childNodes ; + for ( var i = 0, count = childNodes.length ; i < count ; i++ ) + { + var child = childNodes[i] ; + + if ( child.nodeType == 1 && FCKListsLib.BlockElements[ child.nodeName.toLowerCase() ] ) + return true ; + } + + return false ; +} diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckenterkey.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckenterkey.js index eaed75867a..0c8badc88d 100644 --- a/phpgwapi/js/fckeditor/editor/_source/classes/fckenterkey.js +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckenterkey.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -29,7 +29,7 @@ * @shiftEnterMode : the behavior for the + keystroke. * May be "p", "div", "br". Defaults to "br". */ -var FCKEnterKey = function( targetWindow, enterMode, shiftEnterMode ) +var FCKEnterKey = function( targetWindow, enterMode, shiftEnterMode, tabSpaces ) { this.Window = targetWindow ; this.EnterMode = enterMode || 'p' ; @@ -43,10 +43,19 @@ var FCKEnterKey = function( targetWindow, enterMode, shiftEnterMode ) 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 ) ; } @@ -62,17 +71,21 @@ function FCKEnterKey_OnKeystroke( keyCombination, 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) @@ -89,11 +102,16 @@ function FCKEnterKey_OnKeystroke( keyCombination, keystrokeValue ) */ 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' ) + if ( sMode == 'br' || parentPath.Block && parentPath.Block.tagName.toLowerCase() == 'pre' ) return this._ExecuteEnterBr() ; else return this._ExecuteEnterBlock( sMode ) ; @@ -118,8 +136,32 @@ FCKEnterKey.prototype.DoBackspace = function() var oRange = new FCKDomRange( this.Window ) ; oRange.MoveToSelection() ; - if ( !oRange.CheckIsCollapsed() ) + // 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 ; @@ -127,7 +169,7 @@ FCKEnterKey.prototype.DoBackspace = function() // The selection boundaries must be in the same "block limit" element if ( oRange.StartBlockLimit == oRange.EndBlockLimit && oStartBlock && oEndBlock ) { - if ( !oRange.CheckIsCollapsed() ) + if ( !isCollapsed ) { var bEndOfBlock = oRange.CheckEndOfBlock() ; @@ -155,9 +197,10 @@ FCKEnterKey.prototype.DoBackspace = function() bCustom = this._ExecuteBackspace( oRange, ePrevious, oCurrentBlock ) ; } - else if ( FCKBrowserInfo.IsGecko ) + else if ( FCKBrowserInfo.IsGeckoLike ) { - // Firefox looses the selection when executing CheckStartOfBlock, so we must reselect. + // Firefox and Opera (#1095) loose the selection when executing + // CheckStartOfBlock, so we must reselect. oRange.Select() ; } } @@ -166,12 +209,25 @@ FCKEnterKey.prototype.DoBackspace = function() 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.nodeName.IEquals( 'LI' ) && currentBlock.parentNode.parentNode.nodeName.IEquals( 'LI' ) ) + if ( !previous && currentBlock && currentBlock.nodeName.IEquals( 'LI' ) && currentBlock.parentNode.parentNode.nodeName.IEquals( 'LI' ) ) { this._OutdentWithSelection( currentBlock, range ) ; return true ; @@ -220,24 +276,26 @@ FCKEnterKey.prototype._ExecuteBackspace = function( range, previous, currentBloc } // Cleanup the previous and the current elements. - FCKDomTools.TrimNode( currentBlock ) ; - FCKDomTools.TrimNode( previous ) ; + 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 ) ; + range.SetStart( previous, 2, true ) ; range.Collapse( true ) ; - var oBookmark = range.CreateBookmark() ; + var oBookmark = range.CreateBookmark( true ) ; // Move the contents of the block to the previous element and delete it. - FCKDomTools.MoveChildren( currentBlock, previous ) ; + // 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.MoveToBookmark( oBookmark ) ; - range.Select() ; + range.SelectBookmark( oBookmark ) ; bCustom = true ; } @@ -251,6 +309,10 @@ FCKEnterKey.prototype._ExecuteBackspace = function( range, previous, currentBloc */ 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. @@ -260,12 +322,30 @@ FCKEnterKey.prototype.DoDelete = function() 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.IsGecko ) ) + 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'] ) ; + 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 ) ; } @@ -274,145 +354,161 @@ FCKEnterKey.prototype.DoDelete = function() 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 ) ; - // If we don't have a range, move it to the selection. - if ( !range ) - oRange.MoveToSelection() ; + var oSplitInfo = oRange.SplitBlock( blockTag ) ; - // The selection boundaries must be in the same "block limit" element. - if ( oRange.StartBlockLimit == oRange.EndBlockLimit ) + if ( oSplitInfo ) { - // If the StartBlock or EndBlock are not available (for text without a - // block tag), we must fix them, by moving the text to a block. - if ( !oRange.StartBlock ) - this._FixBlock( oRange, true, blockTag ) ; - - if ( !oRange.EndBlock ) - this._FixBlock( oRange, false, blockTag ) ; - // Get the current blocks. - var eStartBlock = oRange.StartBlock ; - var eEndBlock = oRange.EndBlock ; + var ePreviousBlock = oSplitInfo.PreviousBlock ; + var eNextBlock = oSplitInfo.NextBlock ; - // Delete the current selection. - if ( !oRange.CheckIsEmpty() ) - oRange.DeleteContents() ; + var bIsStartOfBlock = oSplitInfo.WasStartOfBlock ; + var bIsEndOfBlock = oSplitInfo.WasEndOfBlock ; - // If the selection boundaries are in the same block element - if ( eStartBlock == eEndBlock ) + // If there is one block under a list item, modify the split so that the list item gets split as well. (Bug #1647) + if ( eNextBlock ) { - var eNewBlock ; - - var bIsStartOfBlock = oRange.CheckStartOfBlock() ; - var bIsEndOfBlock = oRange.CheckEndOfBlock() ; - - if ( bIsStartOfBlock && !bIsEndOfBlock ) + if ( eNextBlock.parentNode.nodeName.IEquals( 'li' ) ) { - eNewBlock = eStartBlock.cloneNode(false) ; - - if ( FCKBrowserInfo.IsGeckoLike ) - eNewBlock.innerHTML = GECKO_BOGUS ; - - // Place the new block before the current block element. - eStartBlock.parentNode.insertBefore( eNewBlock, eStartBlock ) ; - - // 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( eStartBlock ) ; + FCKDomTools.BreakParent( eNextBlock, eNextBlock.parentNode ) ; + FCKDomTools.MoveNode( eNextBlock, eNextBlock.nextSibling, true ) ; } - else - { - // Check if the selection is at the end of the block. - if ( bIsEndOfBlock ) - { - var sStartBlockTag = eStartBlock.tagName.toUpperCase() ; + } + else if ( ePreviousBlock && ePreviousBlock.parentNode.nodeName.IEquals( 'li' ) ) + { + FCKDomTools.BreakParent( ePreviousBlock, ePreviousBlock.parentNode ) ; + oRange.MoveToElementEditStart( ePreviousBlock.nextSibling ); + FCKDomTools.MoveNode( ePreviousBlock, ePreviousBlock.previousSibling ) ; + } - // If the entire block is selected, and we are in a LI, let's decrease its indentation. - if ( bIsStartOfBlock && sStartBlockTag == 'LI' ) - { - this._OutdentWithSelection( eStartBlock, oRange ) ; - oRange.Release() ; - return true ; - } - else - { - // If is a header tag, or we are in a Shift+Enter (#77), - // create a new block element. - if ( (/^H[1-6]$/).test( sStartBlockTag ) || this._HasShift ) - eNewBlock = this.Window.document.createElement( blockTag ) ; - // Otherwise, duplicate the current block. - else - { - eNewBlock = eStartBlock.cloneNode(false) ; - this._RecreateEndingTree( eStartBlock, eNewBlock ) ; - } - - if ( FCKBrowserInfo.IsGeckoLike ) - { - eNewBlock.innerHTML = GECKO_BOGUS ; - - // If the entire block is selected, let's add a bogus in the start block. - if ( bIsStartOfBlock ) - eStartBlock.innerHTML = GECKO_BOGUS ; - } - } - } - else - { - // Extract the contents of the block from the selection point to the end of its contents. - oRange.SetEnd( eStartBlock, 2 ) ; - var eDocFrag = oRange.ExtractContents() ; - - // Duplicate the block element after it. - eNewBlock = eStartBlock.cloneNode(false) ; - - // It could be that we are in a LI with a child UL/OL. Insert a bogus to give us space to type. - FCKDomTools.TrimNode( eDocFrag.RootNode ) ; - if ( eDocFrag.RootNode.firstChild.nodeType == 1 && eDocFrag.RootNode.firstChild.tagName.toUpperCase().Equals( 'UL', 'OL' ) ) - eNewBlock.innerHTML = GECKO_BOGUS ; - - // Place the extracted contents in the duplicated block. - eDocFrag.AppendTo( eNewBlock ) ; - - if ( FCKBrowserInfo.IsGecko ) - { - // In Gecko, the last child node must be a bogus
    . - this._AppendBogusBr( eStartBlock ) ; - this._AppendBogusBr( eNewBlock ) ; - } - } - - if ( eNewBlock ) - { - FCKDomTools.InsertAfterNode( eStartBlock, eNewBlock ) ; - - // Move the selection to the new block. - oRange.MoveToElementEditStart( eNewBlock ) ; - - if ( FCKBrowserInfo.IsGecko ) - eNewBlock.scrollIntoView( false ) ; - } - } + // If we have both the previous and next blocks, it means that the + // boundaries were on separated blocks, or none of them where on the + // block limits (start/end). + if ( !bIsStartOfBlock && !bIsEndOfBlock ) + { + // If the next block is an
  • with another list tree as the first child + // We'll need to append a placeholder or the list item wouldn't be editable. (Bug #1420) + if ( eNextBlock.nodeName.IEquals( 'li' ) && eNextBlock.firstChild + && eNextBlock.firstChild.nodeName.IEquals( ['ul', 'ol'] ) ) + eNextBlock.insertBefore( FCKTools.GetElementDocument( eNextBlock ).createTextNode( '\xa0' ), eNextBlock.firstChild ) ; + // Move the selection to the end block. + if ( eNextBlock ) + oRange.MoveToElementEditStart( eNextBlock ) ; } else { - // Move the selection to the end block. - oRange.MoveToElementEditStart( eEndBlock ) ; + if ( bIsStartOfBlock && bIsEndOfBlock && ePreviousBlock.tagName.toUpperCase() == 'LI' ) + { + oRange.MoveToElementStart( ePreviousBlock ) ; + this._OutdentWithSelection( ePreviousBlock, oRange ) ; + oRange.Release() ; + return true ; + } + + var eNewBlock ; + + if ( ePreviousBlock ) + { + var sPreviousBlockTag = ePreviousBlock.tagName.toUpperCase() ; + + // If is a header tag, or we are in a Shift+Enter (#77), + // create a new block element (later in the code). + if ( !this._HasShift && !(/^H[1-6]$/).test( sPreviousBlockTag ) ) + { + // Otherwise, duplicate the previous block. + eNewBlock = FCKDomTools.CloneElement( ePreviousBlock ) ; + } + } + else if ( eNextBlock ) + eNewBlock = FCKDomTools.CloneElement( eNextBlock ) ; + + if ( !eNewBlock ) + eNewBlock = this.Window.document.createElement( blockTag ) ; + + // Recreate the inline elements tree, which was available + // before the hitting enter, so the same styles will be + // available in the new block. + var elementPath = oSplitInfo.ElementPath ; + if ( elementPath ) + { + for ( var i = 0, len = elementPath.Elements.length ; i < len ; i++ ) + { + var element = elementPath.Elements[i] ; + + if ( element == elementPath.Block || element == elementPath.BlockLimit ) + break ; + + if ( FCKListsLib.InlineChildReqElements[ element.nodeName.toLowerCase() ] ) + { + element = FCKDomTools.CloneElement( element ) ; + FCKDomTools.MoveChildren( eNewBlock, element ) ; + eNewBlock.appendChild( element ) ; + } + } + } + + if ( FCKBrowserInfo.IsGeckoLike ) + FCKTools.AppendBogusBr( eNewBlock ) ; + + oRange.InsertNode( eNewBlock ) ; + + // This is tricky, but to make the new block visible correctly + // we must select it. + if ( FCKBrowserInfo.IsIE ) + { + // Move the selection to the new block. + oRange.MoveToElementEditStart( eNewBlock ) ; + oRange.Select() ; + } + + // Move the selection to the new block. + oRange.MoveToElementEditStart( bIsStartOfBlock && !bIsEndOfBlock ? eNextBlock : eNewBlock ) ; } + if ( FCKBrowserInfo.IsSafari ) + FCKDomTools.ScrollIntoView( eNextBlock || eNewBlock, false ) ; + else if ( FCKBrowserInfo.IsGeckoLike ) + ( eNextBlock || eNewBlock ).scrollIntoView( false ) ; + oRange.Select() ; } @@ -442,6 +538,7 @@ FCKEnterKey.prototype._ExecuteEnterBr = function( blockTag ) var sStartBlockTag = oRange.StartBlock ? oRange.StartBlock.tagName.toUpperCase() : '' ; var bHasShift = this._HasShift ; + var bIsPre = false ; if ( !bHasShift && sStartBlockTag == 'LI' ) return this._ExecuteEnterBlock( null, oRange ) ; @@ -449,8 +546,6 @@ FCKEnterKey.prototype._ExecuteEnterBr = function( blockTag ) // If we are at the end of a header block. if ( !bHasShift && bIsEndOfBlock && (/^H[1-6]$/).test( sStartBlockTag ) ) { - FCKDebug.Output( 'BR - Header' ) ; - // Insert a BR after the current paragraph. FCKDomTools.InsertAfterNode( oRange.StartBlock, this.Window.document.createElement( 'br' ) ) ; @@ -463,31 +558,51 @@ FCKEnterKey.prototype._ExecuteEnterBr = function( blockTag ) } else { - FCKDebug.Output( 'BR - No Header' ) ; + var eLineBreak ; + bIsPre = sStartBlockTag.IEquals( 'pre' ) ; + if ( bIsPre ) + eLineBreak = this.Window.document.createTextNode( FCKBrowserInfo.IsIE ? '\r' : '\n' ) ; + else + eLineBreak = this.Window.document.createElement( 'br' ) ; - var eBr = this.Window.document.createElement( 'br' ) ; - - oRange.InsertNode( eBr ) ; + oRange.InsertNode( eLineBreak ) ; // The space is required by Gecko only to make the cursor blink. if ( FCKBrowserInfo.IsGecko ) - FCKDomTools.InsertAfterNode( eBr, this.Window.document.createTextNode( '' ) ) ; + 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.IsGecko ) - this._AppendBogusBr( eBr.parentNode ) ; + if ( bIsEndOfBlock && FCKBrowserInfo.IsGeckoLike ) + FCKTools.AppendBogusBr( eLineBreak.parentNode ) ; if ( FCKBrowserInfo.IsIE ) - oRange.SetStart( eBr, 4 ) ; + oRange.SetStart( eLineBreak, 4 ) ; else - oRange.SetStart( eBr.nextSibling, 1 ) ; + 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() ; + oRange.Select( bIsPre ) ; } // Release the resources used by the range. @@ -496,55 +611,7 @@ FCKEnterKey.prototype._ExecuteEnterBr = function( blockTag ) return true ; } -// Transform a block without a block tag in a valid block (orphan text in the body or td, usually). -FCKEnterKey.prototype._FixBlock = function( range, isStart, blockTag ) -{ - // Bookmark the range so we can restore it later. - var oBookmark = range.CreateBookmark() ; - - // Collapse the range to the requested ending boundary. - range.Collapse( isStart ) ; - - // Expands it to the block contents. - range.Expand( 'block_contents' ) ; - - // Create the fixed block. - var oFixedBlock = this.Window.document.createElement( blockTag ) ; - - // Move the contents of the temporary range to the fixed block. - range.ExtractContents().AppendTo( oFixedBlock ) ; - FCKDomTools.TrimNode( oFixedBlock ) ; - - // Insert the fixed block into the DOM. - range.InsertNode( oFixedBlock ) ; - - // Move the range back to the bookmarked place. - range.MoveToBookmark( oBookmark ) ; -} - -// Appends a bogus
    at the end of the element, if not yet available. -FCKEnterKey.prototype._AppendBogusBr = function( element ) -{ - var eLastChild = element.getElementsByTagName('br') ; - - if ( eLastChild ) - eLastChild = eLastChild[ eLastChild.legth - 1 ] ; - - if ( !eLastChild || eLastChild.getAttribute( 'type', 2 ) != '_moz' ) - element.appendChild( FCKTools.CreateBogusBR( this.Window.document ) ) ; -} - -// Recreate the elements tree at the end of the source block, at the beginning -// of the target block. Eg.: -// If source =

    Some sample text

    then target =

    -// If source =

    Some sample text

    then target =

    -FCKEnterKey.prototype._RecreateEndingTree = function( source, target ) -{ - while ( ( source = source.lastChild ) && source.nodeType == 1 && FCKListsLib.InlineChildReqElements[ source.nodeName.toLowerCase() ] != null ) - target = target.insertBefore( source.cloneNode( false ), target.firstChild ) ; -} - -// Outdents a LI, maintaining the seletion defined on a range. +// Outdents a LI, maintaining the selection defined on a range. FCKEnterKey.prototype._OutdentWithSelection = function( li, range ) { var oBookmark = range.CreateBookmark() ; @@ -553,4 +620,48 @@ FCKEnterKey.prototype._OutdentWithSelection = function( li, range ) range.MoveToBookmark( oBookmark ) ; range.Select() ; -} \ No newline at end of file +} + +// 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 index 45e84a8ae9..ef2e10f6e6 100644 --- a/phpgwapi/js/fckeditor/editor/_source/classes/fckevents.js +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckevents.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -34,7 +34,12 @@ FCKEvents.prototype.AttachEvent = function( eventName, functionPointer ) if ( !( aTargets = this._RegisteredEvents[ eventName ] ) ) this._RegisteredEvents[ eventName ] = [ functionPointer ] ; else - aTargets.push( functionPointer ) ; + { + // 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 ) @@ -46,7 +51,20 @@ FCKEvents.prototype.FireEvent = function( eventName, params ) if ( oCalls ) { for ( var i = 0 ; i < oCalls.length ; i++ ) - bReturnValue = ( oCalls[ i ]( this.Owner, params ) && bReturnValue ) ; + { + 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/fckhtmliterator.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckhtmliterator.js new file mode 100644 index 0000000000..bfe3c2c46a --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckhtmliterator.js @@ -0,0 +1,142 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * This class can be used to interate through nodes inside a range. + * + * During interation, the provided range can become invalid, due to document + * mutations, so CreateBookmark() used to restore it after processing, if + * needed. + */ + +var FCKHtmlIterator = function( source ) +{ + this._sourceHtml = source ; +} +FCKHtmlIterator.prototype = +{ + Next : function() + { + var sourceHtml = this._sourceHtml ; + if ( sourceHtml == null ) + return null ; + + var match = FCKRegexLib.HtmlTag.exec( sourceHtml ) ; + var isTag = false ; + var value = "" ; + if ( match ) + { + if ( match.index > 0 ) + { + value = sourceHtml.substr( 0, match.index ) ; + this._sourceHtml = sourceHtml.substr( match.index ) ; + } + else + { + isTag = true ; + value = match[0] ; + this._sourceHtml = sourceHtml.substr( match[0].length ) ; + } + } + else + { + value = sourceHtml ; + this._sourceHtml = null ; + } + return { 'isTag' : isTag, 'value' : value } ; + }, + + Each : function( func ) + { + var chunk ; + while ( ( chunk = this.Next() ) ) + func( chunk.isTag, chunk.value ) ; + } +} ; +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * This class can be used to interate through nodes inside a range. + * + * During interation, the provided range can become invalid, due to document + * mutations, so CreateBookmark() used to restore it after processing, if + * needed. + */ + +var FCKHtmlIterator = function( source ) +{ + this._sourceHtml = source ; +} +FCKHtmlIterator.prototype = +{ + Next : function() + { + var sourceHtml = this._sourceHtml ; + if ( sourceHtml == null ) + return null ; + + var match = FCKRegexLib.HtmlTag.exec( sourceHtml ) ; + var isTag = false ; + var value = "" ; + if ( match ) + { + if ( match.index > 0 ) + { + value = sourceHtml.substr( 0, match.index ) ; + this._sourceHtml = sourceHtml.substr( match.index ) ; + } + else + { + isTag = true ; + value = match[0] ; + this._sourceHtml = sourceHtml.substr( match[0].length ) ; + } + } + else + { + value = sourceHtml ; + this._sourceHtml = null ; + } + return { 'isTag' : isTag, 'value' : value } ; + }, + + Each : function( func ) + { + var chunk ; + while ( ( chunk = this.Next() ) ) + func( chunk.isTag, chunk.value ) ; + } +} ; diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckicon.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckicon.js index f053f9da61..89719f6e1d 100644 --- a/phpgwapi/js/fckeditor/editor/_source/classes/fckicon.js +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckicon.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -74,25 +74,30 @@ FCKIcon.prototype.CreateIconElement = function( document ) eIcon = document.createElement( 'IMG' ) ; eIcon.src = FCK_SPACER_PATH ; eIcon.style.backgroundPosition = '0px ' + sPos ; - eIcon.style.backgroundImage = 'url(' + this.Path + ')' ; + eIcon.style.backgroundImage = 'url("' + this.Path + '")' ; } } else // It is using a single icon image. { - // This is not working well with IE. See notes bellow. - // -// eIcon = document.createElement( 'IMG' ) ; -// eIcon.src = this.Path ? this.Path : FCK_SPACER_PATH ; + 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' ) ; - // 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 ; + 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 index 5468e1a295..414da9d897 100644 --- a/phpgwapi/js/fckeditor/editor/_source/classes/fckiecleanup.js +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckiecleanup.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -23,7 +23,7 @@ var FCKIECleanup = function( attachWindow ) { - // If the attachWindow already have a cleanup object, jusgt use that one. + // If the attachWindow already have a cleanup object, just use that one. if ( attachWindow._FCKCleanupObj ) this.Items = attachWindow._FCKCleanupObj.Items ; else @@ -43,7 +43,7 @@ FCKIECleanup.prototype.AddItem = function( dirtyItem, cleanupFunction ) function FCKIECleanup_Cleanup() { - if ( !this._FCKCleanupObj ) + if ( !this._FCKCleanupObj || !window.FCKUnloadFlag ) return ; var aItems = this._FCKCleanupObj.Items ; @@ -65,4 +65,4 @@ function FCKIECleanup_Cleanup() if ( CollectGarbage ) CollectGarbage() ; -} \ No newline at end of file +} diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckimagepreloader.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckimagepreloader.js index 3e35697c10..92fd305e39 100644 --- a/phpgwapi/js/fckeditor/editor/_source/classes/fckimagepreloader.js +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckimagepreloader.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -44,8 +44,8 @@ FCKImagePreloader.prototype = for ( var i = 0 ; i < aImages.length ; i++ ) { var eImg = document.createElement( 'img' ) ; - eImg.onload = eImg.onerror = _FCKImagePreloader_OnImage ; - eImg._FCKImagePreloader = this ; + FCKTools.AddEventListenerEx( eImg, 'load', _FCKImagePreloader_OnImage, this ) ; + FCKTools.AddEventListenerEx( eImg, 'error', _FCKImagePreloader_OnImage, this ) ; eImg.src = aImages[i] ; _FCKImagePreloader_ImageCache.push( eImg ) ; @@ -57,12 +57,8 @@ FCKImagePreloader.prototype = // magic will not happen. var _FCKImagePreloader_ImageCache = new Array() ; -function _FCKImagePreloader_OnImage() +function _FCKImagePreloader_OnImage( ev, imagePreloader ) { - var oImagePreloader = this._FCKImagePreloader ; - - if ( (--oImagePreloader._PreloadCount) == 0 && oImagePreloader.OnComplete ) - oImagePreloader.OnComplete() ; - - this._FCKImagePreloader = null ; -} \ No newline at end of file + if ( (--imagePreloader._PreloadCount) == 0 && imagePreloader.OnComplete ) + imagePreloader.OnComplete() ; +} diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckkeystrokehandler.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckkeystrokehandler.js index 334b476a54..31c341ba73 100644 --- a/phpgwapi/js/fckeditor/editor/_source/classes/fckkeystrokehandler.js +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckkeystrokehandler.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -54,11 +54,16 @@ FCKKeystrokeHandler.prototype.SetKeystrokes = function() { 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, removed the keystroke. + 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 ; @@ -95,7 +100,7 @@ function _FCKKeystrokeHandler_OnKeyDown( ev, keystrokeHandler ) // If the keystroke is defined if ( keystrokeValue ) { - // If the keystroke has been explicetly set to "true" OR calling the + // 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 ) ) ) @@ -133,4 +138,4 @@ function _FCKKeystrokeHandler_OnKeyPress( ev, keystrokeHandler ) } return true ; -} \ No newline at end of file +} diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckmenublock.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckmenublock.js index dba67e190f..1cd710dccc 100644 --- a/phpgwapi/js/fckeditor/editor/_source/classes/fckmenublock.js +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckmenublock.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -32,9 +32,9 @@ FCKMenuBlock.prototype.Count = function() return this._Items.length ; } -FCKMenuBlock.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled ) +FCKMenuBlock.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) { - var oItem = new FCKMenuItem( this, name, label, iconPathOrStripInfoArrayOrIndex, isDisabled ) ; + var oItem = new FCKMenuItem( this, name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) ; oItem.OnClick = FCKTools.CreateEventListener( FCKMenuBlock_Item_OnClick, this ) ; oItem.OnActivate = FCKTools.CreateEventListener( FCKMenuBlock_Item_OnActivate, this ) ; @@ -94,6 +94,9 @@ FCKMenuBlock.prototype.Create = function( parentElement ) function FCKMenuBlock_Item_OnClick( clickedItem, menuBlock ) { + if ( menuBlock.Hide ) + menuBlock.Hide() ; + FCKTools.RunFunction( menuBlock.OnClick, menuBlock, [ clickedItem ] ) ; } @@ -105,8 +108,15 @@ function FCKMenuBlock_Item_OnActivate( menuBlock ) { // 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() ; } @@ -140,4 +150,4 @@ FCKMenuSeparator.prototype.Create = function( parentTable ) 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 index 45cbcc07cb..9dbc4803be 100644 --- a/phpgwapi/js/fckeditor/editor/_source/classes/fckmenublockpanel.js +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckmenublockpanel.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -35,7 +35,7 @@ FCKMenuBlockPanel.prototype = new FCKMenuBlock() ; 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' ) ; + oPanel.AppendStyleSheet( FCKConfig.SkinEditorCSS ) ; // Call the "base" implementation. FCKMenuBlock.prototype.Create.call( this, oPanel.MainNode ) ; @@ -51,4 +51,4 @@ 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 index 7319efa1c9..038146d242 100644 --- a/phpgwapi/js/fckeditor/editor/_source/classes/fckmenuitem.js +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckmenuitem.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -21,7 +21,7 @@ * Defines and renders a menu items in a menu block. */ -var FCKMenuItem = function( parentMenuBlock, name, label, iconPathOrStripInfoArray, isDisabled ) +var FCKMenuItem = function( parentMenuBlock, name, label, iconPathOrStripInfoArray, isDisabled, customData ) { this.Name = name ; this.Label = label || name ; @@ -32,16 +32,17 @@ var FCKMenuItem = function( parentMenuBlock, name, label, iconPathOrStripInfoArr this.SubMenu = new FCKMenuBlockPanel() ; this.SubMenu.Parent = parentMenuBlock ; this.SubMenu.OnClick = FCKTools.CreateEventListener( FCKMenuItem_SubMenu_OnClick, this ) ; + this.CustomData = customData ; if ( FCK.IECleanup ) FCK.IECleanup.AddItem( this, FCKMenuItem_Cleanup ) ; } -FCKMenuItem.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled ) +FCKMenuItem.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) { this.HasSubMenu = true ; - return this.SubMenu.AddItem( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled ) ; + return this.SubMenu.AddItem( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled, customData ) ; } FCKMenuItem.prototype.AddSeparator = function() @@ -157,4 +158,4 @@ function FCKMenuItem_OnMouseOut( ev, menuItem ) 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 index 007f9d3ead..263dcf0523 100644 --- a/phpgwapi/js/fckeditor/editor/_source/classes/fckpanel.js +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckpanel.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -35,9 +35,32 @@ var FCKPanel = function( parentWindow ) if ( FCKBrowserInfo.IsIE ) { // Create the Popup that will hold the panel. + // The popup has to be created before playing with domain hacks, see #1666. this._Popup = this._Window.createPopup() ; + + // this._Window cannot be accessed while playing with domain hacks, but local variable is ok. + // See #1666. + var pDoc = this._Window.document ; + + // This is a trick to IE6 (not IE7). The original domain must be set + // before creating the popup, so we are able to take a refence to the + // document inside of it, and the set the proper domain for it. (#123) + if ( FCK_IS_CUSTOM_DOMAIN && !FCKBrowserInfo.IsIE7 ) + { + pDoc.domain = FCK_ORIGINAL_DOMAIN ; + document.domain = FCK_ORIGINAL_DOMAIN ; + } + oDocument = this.Document = this._Popup.document ; + // Set the proper domain inside the popup. + if ( FCK_IS_CUSTOM_DOMAIN ) + { + oDocument.domain = FCK_RUNTIME_DOMAIN ; + pDoc.domain = FCK_RUNTIME_DOMAIN ; + document.domain = FCK_RUNTIME_DOMAIN ; + } + FCK.IECleanup.AddItem( this, FCKPanel_Cleanup ) ; } else @@ -47,37 +70,45 @@ var FCKPanel = function( parentWindow ) oIFrame.allowTransparency = true ; oIFrame.frameBorder = '0' ; oIFrame.scrolling = 'no' ; - oIFrame.style.position = 'absolute'; - oIFrame.style.zIndex = FCKConfig.FloatingPanelsZIndex ; oIFrame.width = oIFrame.height = 0 ; + FCKDomTools.SetElementStyles( oIFrame, + { + position : 'absolute', + zIndex : FCKConfig.FloatingPanelsZIndex + } ) ; - if ( this._Window == window.parent && window.frameElement ) - window.frameElement.parentNode.insertBefore( oIFrame, window.frameElement ) ; - else - this._Window.document.body.appendChild( oIFrame ) ; + 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( '<\/body><\/html>' ) ; + oDocument.write( '' + sBase + '<\/head><\/body><\/html>' ) ; oDocument.close() ; + if( FCKBrowserInfo.IsAIR ) + FCKAdobeAIR.Panel_Contructor( oDocument, window.document.location ) ; + FCKTools.AddEventListenerEx( oIFrameWindow, 'focus', FCKPanel_Window_OnFocus, this ) ; FCKTools.AddEventListenerEx( oIFrameWindow, 'blur', FCKPanel_Window_OnBlur, this ) ; } oDocument.dir = FCKLang.Dir ; - oDocument.oncontextmenu = FCKTools.CancelEvent ; + 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 correcly. + // The "float" property must be set so Firefox calculates the size correctly. this.MainNode.style.cssFloat = this.IsRTL ? 'right' : 'left' ; } @@ -99,6 +130,7 @@ FCKPanel.prototype.Preload = function( x, y, relElement ) FCKPanel.prototype.Show = function( x, y, relElement, width, height ) { var iMainWidth ; + var eMainNode = this.MainNode ; if ( this._Popup ) { @@ -109,10 +141,13 @@ FCKPanel.prototype.Show = function( x, y, relElement, width, height ) // The following lines must be place after the above "show", otherwise it // doesn't has the desired effect. - this.MainNode.style.width = width ? width + 'px' : '' ; - this.MainNode.style.height = height ? height + 'px' : '' ; + FCKDomTools.SetElementStyles( eMainNode, + { + width : width ? width + 'px' : '', + height : height ? height + 'px' : '' + } ) ; - iMainWidth = this.MainNode.offsetWidth ; + iMainWidth = eMainNode.offsetWidth ; if ( this.IsRTL ) { @@ -123,7 +158,7 @@ FCKPanel.prototype.Show = function( x, y, relElement, width, height ) } // Second call: Show the Popup at the specified location, with the correct size. - this._Popup.show( x, y, iMainWidth, this.MainNode.offsetHeight, relElement ) ; + this._Popup.show( x, y, iMainWidth, eMainNode.offsetHeight, relElement ) ; if ( this.OnHide ) { @@ -136,16 +171,40 @@ FCKPanel.prototype.Show = function( x, y, relElement, width, height ) else { // Do not fire OnBlur while the panel is opened. - if ( typeof( FCKFocusManager ) != 'undefined' ) - FCKFocusManager.Lock() ; + if ( typeof( FCK.ToolbarSet.CurrentInstance.FocusManager ) != 'undefined' ) + FCK.ToolbarSet.CurrentInstance.FocusManager.Lock() ; if ( this.ParentPanel ) + { this.ParentPanel.Lock() ; - this.MainNode.style.width = width ? width + 'px' : '' ; - this.MainNode.style.height = height ? height + 'px' : '' ; + // Due to a bug on FF3, we must ensure that the parent panel will + // blur (#1584). + FCKPanel_Window_OnBlur( null, this.ParentPanel ) ; + } - iMainWidth = this.MainNode.offsetWidth ; + // Toggle the iframe scrolling attribute to prevent the panel + // scrollbars from disappearing in FF Mac. (#191) + if ( FCKBrowserInfo.IsGecko && FCKBrowserInfo.IsMac ) + { + this._IFrame.scrolling = '' ; + FCKTools.RunFunction( function(){ this._IFrame.scrolling = 'no'; }, this ) ; + } + + // Be sure we'll not have more than one Panel opened at the same time. + // Do not unlock focus manager here because we're displaying another floating panel + // instead of returning the editor to a "no panel" state (Bug #1514). + if ( FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'FCKPanel' )._OpenedPanel && + FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'FCKPanel' )._OpenedPanel != this ) + FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'FCKPanel' )._OpenedPanel.Hide( false, true ) ; + + 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 ; @@ -154,19 +213,31 @@ FCKPanel.prototype.Show = function( x, y, relElement, width, height ) // setting the _IFrame size (which returns "0"), and then after that, // to return the correct width. Remove the first step and it will not // work when the editor is in RTL. - iMainWidth = this.MainNode.offsetWidth ; + // + // The "|| eMainNode.firstChild.offsetWidth" part has been added + // for Opera compatibility (see #570). + iMainWidth = eMainNode.offsetWidth || eMainNode.firstChild.offsetWidth ; - var oPos = FCKTools.GetElementPosition( + // 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, - this._Window ) ; + relElement ) ; + + // Minus the offsets provided by any positioned parent element of the panel iframe. + var positionedAncestor = FCKDomTools.GetPositionedAncestor( 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 ; + x += oPos.x ; + y += oPos.y ; if ( this.IsRTL ) { @@ -186,43 +257,48 @@ FCKPanel.prototype.Show = function( x, y, relElement, width, height ) if ( ( x + iMainWidth ) > iViewPaneWidth ) x -= x + iMainWidth - iViewPaneWidth ; - if ( ( y + this.MainNode.offsetHeight ) > iViewPaneHeight ) - y -= y + this.MainNode.offsetHeight - iViewPaneHeight ; + if ( ( y + eMainNode.offsetHeight ) > iViewPaneHeight ) + y -= y + eMainNode.offsetHeight - iViewPaneHeight ; } - if ( x < 0 ) - x = 0 ; - // Set the context menu DIV in the specified location. - this._IFrame.style.left = x + 'px' ; - this._IFrame.style.top = y + 'px' ; - - var iWidth = iMainWidth ; - var iHeight = this.MainNode.offsetHeight ; - - this._IFrame.width = iWidth ; - this._IFrame.height = iHeight ; + FCKDomTools.SetElementStyles( this._IFrame, + { + left : x + 'px', + top : y + 'px' + } ) ; // Move the focus to the IFRAME so we catch the "onblur". this._IFrame.contentWindow.focus() ; - } + this._IsOpened = true ; - this._IsOpened = true ; + var me = this ; + this._resizeTimer = setTimeout( function() + { + var iWidth = eMainNode.offsetWidth || eMainNode.firstChild.offsetWidth ; + var iHeight = eMainNode.offsetHeight ; + me._IFrame.width = iWidth ; + me._IFrame.height = iHeight ; + + }, 0 ) ; + + FCK.ToolbarSet.CurrentInstance.GetInstanceObject( 'FCKPanel' )._OpenedPanel = this ; + } FCKTools.RunFunction( this.OnShow, this ) ; } -FCKPanel.prototype.Hide = function( ignoreOnHide ) +FCKPanel.prototype.Hide = function( ignoreOnHide, ignoreFocusManagerUnlock ) { if ( this._Popup ) this._Popup.hide() ; else { - if ( !this._IsOpened ) + if ( !this._IsOpened || this._LockCounter > 0 ) return ; // Enable the editor to fire the "OnBlur". - if ( typeof( FCKFocusManager ) != 'undefined' ) + if ( typeof( FCKFocusManager ) != 'undefined' && !ignoreFocusManagerUnlock ) FCKFocusManager.Unlock() ; // It is better to set the sizes to 0, otherwise Firefox would have @@ -231,6 +307,12 @@ FCKPanel.prototype.Hide = function( ignoreOnHide ) this._IsOpened = false ; + if ( this._resizeTimer ) + { + clearTimeout( this._resizeTimer ) ; + this._resizeTimer = null ; + } + if ( this.ParentPanel ) this.ParentPanel.Unlock() ; @@ -251,7 +333,7 @@ FCKPanel.prototype.CreateChildPanel = function() { var oWindow = this._Popup ? FCKTools.GetDocumentWindow( this.Document ) : this._Window ; - var oChildPanel = new FCKPanel( oWindow, true ) ; + var oChildPanel = new FCKPanel( oWindow ) ; oChildPanel.ParentPanel = this ; return oChildPanel ; @@ -300,4 +382,4 @@ function FCKPanel_Cleanup() this._Window = null ; this.Document = null ; this.MainNode = null ; -} \ No newline at end of file +} diff --git a/phpgwapi/js/fckeditor/editor/_source/classes/fckplugin.js b/phpgwapi/js/fckeditor/editor/_source/classes/fckplugin.js index a0df44e915..16300d1334 100644 --- a/phpgwapi/js/fckeditor/editor/_source/classes/fckplugin.js +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckplugin.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -53,4 +53,4 @@ FCKPlugin.prototype.Load = function() // 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 index 48e5942d2e..72263895ff 100644 --- a/phpgwapi/js/fckeditor/editor/_source/classes/fckspecialcombo.js +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckspecialcombo.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -36,8 +36,8 @@ var FCKSpecialCombo = function( caption, fieldWidth, panelWidth, panelMaxHeight, this.Items = new Object() ; - this._Panel = new FCKPanel( parentWindow || window, true ) ; - this._Panel.AppendStyleSheet( FCKConfig.SkinPath + 'fck_editor.css' ) ; + this._Panel = new FCKPanel( parentWindow || window ) ; + this._Panel.AppendStyleSheet( FCKConfig.SkinEditorCSS ) ; this._PanelBox = this._Panel.MainNode.appendChild( this._Panel.Document.createElement( 'DIV' ) ) ; this._PanelBox.className = 'SC_Panel' ; this._PanelBox.style.width = this.PanelWidth + 'px' ; @@ -66,16 +66,26 @@ function FCKSpecialCombo_ItemOnMouseOut() this.className = this.originalClass ; } -function FCKSpecialCombo_ItemOnClick() +function FCKSpecialCombo_ItemOnClick( ev, specialCombo, itemId ) { this.className = this.originalClass ; - this.FCKSpecialCombo._Panel.Hide() ; + specialCombo._Panel.Hide() ; - this.FCKSpecialCombo.SetLabel( this.FCKItemLabel ) ; + specialCombo.SetLabel( this.FCKItemLabel ) ; - if ( typeof( this.FCKSpecialCombo.OnSelect ) == 'function' ) - this.FCKSpecialCombo.OnSelect( this.FCKItemID, this ) ; + 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 ) @@ -84,9 +94,7 @@ FCKSpecialCombo.prototype.AddItem = function( id, html, label, bgColor ) var oDiv = this._ItemsHolderEl.appendChild( this._Panel.Document.createElement( 'DIV' ) ) ; oDiv.className = oDiv.originalClass = 'SC_Item' ; oDiv.innerHTML = html ; - oDiv.FCKItemID = id ; oDiv.FCKItemLabel = label || id ; - oDiv.FCKSpecialCombo = this ; oDiv.Selected = false ; // In IE, the width must be set so the borders are shown correctly when the content overflows. @@ -96,24 +104,24 @@ FCKSpecialCombo.prototype.AddItem = function( id, html, label, bgColor ) if ( bgColor ) oDiv.style.backgroundColor = bgColor ; - oDiv.onmouseover = FCKSpecialCombo_ItemOnMouseOver ; - oDiv.onmouseout = FCKSpecialCombo_ItemOnMouseOut ; - oDiv.onclick = FCKSpecialCombo_ItemOnClick ; + 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( itemId ) +FCKSpecialCombo.prototype.SelectItem = function( item ) { - itemId = itemId ? itemId.toString().toLowerCase() : '' ; + if ( typeof item == 'string' ) + item = this.Items[ item.toString().toLowerCase() ] ; - var oDiv = this.Items[ itemId ] ; - if ( oDiv ) + if ( item ) { - oDiv.className = oDiv.originalClass = 'SC_ItemSelected' ; - oDiv.Selected = true ; + item.className = item.originalClass = 'SC_ItemSelected' ; + item.Selected = true ; } } @@ -138,6 +146,7 @@ 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 ; } @@ -156,17 +165,23 @@ FCKSpecialCombo.prototype.SetLabelById = function( id ) FCKSpecialCombo.prototype.SetLabel = function( text ) { - this.Label = text.length == 0 ? ' ' : text ; + text = ( !text || text.length == 0 ) ? ' ' : text ; - if ( this._LabelEl ) + if ( text == this.Label ) + return ; + + this.Label = text ; + + var labelEl = this._LabelEl ; + if ( labelEl ) { - this._LabelEl.innerHTML = this.Label ; + 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( this._LabelEl ) ; + FCKTools.DisableSelection( labelEl ) ; } } @@ -174,7 +189,9 @@ FCKSpecialCombo.prototype.SetEnabled = function( isEnabled ) { this.Enabled = isEnabled ; - this._OuterTable.className = isEnabled ? '' : 'SC_FieldDisabled' ; + // 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 ) @@ -244,11 +261,9 @@ FCKSpecialCombo.prototype.Create = function( targetElement ) // Events Handlers - oField.SpecialCombo = this ; - - oField.onmouseover = FCKSpecialCombo_OnMouseOver ; - oField.onmouseout = FCKSpecialCombo_OnMouseOut ; - oField.onclick = FCKSpecialCombo_OnClick ; + 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 ) ; } @@ -267,28 +282,28 @@ function FCKSpecialCombo_Cleanup() } } -function FCKSpecialCombo_OnMouseOver() +function FCKSpecialCombo_OnMouseOver( ev, specialCombo ) { - if ( this.SpecialCombo.Enabled ) + if ( specialCombo.Enabled ) { - switch ( this.SpecialCombo.Style ) + 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 ; + 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() +function FCKSpecialCombo_OnMouseOut( ev, specialCombo ) { - switch ( this.SpecialCombo.Style ) + switch ( specialCombo.Style ) { case FCK_TOOLBARITEM_ONLYICON : this.className = 'TB_Button_Off'; @@ -302,7 +317,7 @@ function FCKSpecialCombo_OnMouseOut() } } -function FCKSpecialCombo_OnClick( e ) +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. @@ -312,17 +327,15 @@ function FCKSpecialCombo_OnClick( e ) // FCKPanelEventHandlers.OnDocumentClick( e ) ; // } - var oSpecialCombo = this.SpecialCombo ; - - if ( oSpecialCombo.Enabled ) + if ( specialCombo.Enabled ) { - var oPanel = oSpecialCombo._Panel ; - var oPanelBox = oSpecialCombo._PanelBox ; - var oItemsHolder = oSpecialCombo._ItemsHolderEl ; - var iMaxHeight = oSpecialCombo.PanelMaxHeight ; + var oPanel = specialCombo._Panel ; + var oPanelBox = specialCombo._PanelBox ; + var oItemsHolder = specialCombo._ItemsHolderEl ; + var iMaxHeight = specialCombo.PanelMaxHeight ; - if ( oSpecialCombo.OnBeforeClick ) - oSpecialCombo.OnBeforeClick( oSpecialCombo ) ; + 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). @@ -339,7 +352,7 @@ function FCKSpecialCombo_OnClick( e ) else oPanelBox.style.height = '' ; -// oPanel.PanelDiv.style.width = oSpecialCombo.PanelWidth + 'px' ; +// oPanel.PanelDiv.style.width = specialCombo.PanelWidth + 'px' ; oPanel.Show( 0, this.offsetHeight, this ) ; } @@ -360,4 +373,4 @@ Sample Combo Field HTML output:
  • -*/ \ No newline at end of file +*/ 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..4308df070d --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/_source/classes/fckstyle.js @@ -0,0 +1,1443 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * 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: + * ' + - - - - - - - - - - - -
    -   - - - - -
    -   -
    - -
    - - diff --git a/phpgwapi/js/fckeditor/editor/dialog/fck_flash.html b/phpgwapi/js/fckeditor/editor/dialog/fck_flash.html index a6b915db57..2b5adf4be8 100644 --- a/phpgwapi/js/fckeditor/editor/dialog/fck_flash.html +++ b/phpgwapi/js/fckeditor/editor/dialog/fck_flash.html @@ -1,7 +1,7 @@ - + /g, '' ) ; + html = html.replace(/<\!--.*?-->/g, '' ) ; html = html.replace( /<(U|I|STRIKE)> <\/\1>/g, ' ' ) ; @@ -196,14 +254,21 @@ function CleanWord( oNode, bIgnoreFont, bRemoveStyles ) // Remove "display:none" tags. html = html.replace( /<(\w+)[^>]*\sstyle="[^"]*DISPLAY\s?:\s?none(.*?)<\/\1>/ig, '' ) ; + // Remove language tags + html = html.replace( /<(\w[^>]*) language=([^ |>]*)([^>]*)/gi, "<$1$3") ; + + // Remove onmouseover and onmouseout events (from MS Word comments effect) + html = html.replace( /<(\w[^>]*) onmouseover="([^\"]*)"([^>]*)/gi, "<$1$3") ; + html = html.replace( /<(\w[^>]*) onmouseout="([^\"]*)"([^>]*)/gi, "<$1$3") ; + if ( FCKConfig.CleanWordKeepsStructure ) { // The original tag send from Word is something like this: html = html.replace( /]*)>/gi, '' ) ; // Word likes to insert extra tags, when using MSIE. (Wierd). - html = html.replace( /<(H\d)>]*>(.*?)<\/FONT><\/\1>/gi, '<$1>$2' ); - html = html.replace( /<(H\d)>(.*?)<\/EM><\/\1>/gi, '<$1>$2' ); + html = html.replace( /<(H\d)>]*>(.*?)<\/FONT><\/\1>/gi, '<$1>$2<\/$1>' ); + html = html.replace( /<(H\d)>(.*?)<\/EM><\/\1>/gi, '<$1>$2<\/$1>' ); } else { @@ -251,33 +316,22 @@ function CleanWord( oNode, bIgnoreFont, bRemoveStyles ) - + - - - - - - -
    - - -
    - - -
    - -
    + + + +
    + + + diff --git a/phpgwapi/js/fckeditor/editor/dialog/fck_radiobutton.html b/phpgwapi/js/fckeditor/editor/dialog/fck_radiobutton.html index c0414377cf..eb9aa5d103 100644 --- a/phpgwapi/js/fckeditor/editor/dialog/fck_radiobutton.html +++ b/phpgwapi/js/fckeditor/editor/dialog/fck_radiobutton.html @@ -1,7 +1,7 @@ - + + - - - - - - - - - - - - - - -
    - - - - - -
    - - - - - -
    -   -
    -   -
    + + diff --git a/phpgwapi/js/fckeditor/editor/dialog/fck_select.html b/phpgwapi/js/fckeditor/editor/dialog/fck_select.html index 59d57b2a6f..a1735a127a 100644 --- a/phpgwapi/js/fckeditor/editor/dialog/fck_select.html +++ b/phpgwapi/js/fckeditor/editor/dialog/fck_select.html @@ -1,7 +1,7 @@ - + - - - - - - - - - - - - + + + + + + + + - - function LastIndexOf(subs, str) - { - return Len(str) - Find(subs, Reverse(str)) + 1; - } - + + + - - - + - + - - - - - - + + + ]+>", " ", "all")> + + + - - - - - + - + + + + - - - - - - - - - + + + - - + + - - - - - + + + + - - - - - - - - + + + + + + + + + + + - + + - - - - - - + + - - - - - - - - + + + - - + - - + + - + + + @@ -172,3 +145,4 @@ wordWindowObj.writeBody(); + diff --git a/phpgwapi/js/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php b/phpgwapi/js/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php index 19ead6151a..9c747c9167 100644 --- a/phpgwapi/js/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php +++ b/phpgwapi/js/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php @@ -1,4 +1,4 @@ -]+>/", " ", $text ) ; + $lines = explode( "\n", $text ); fwrite ( $fh, "%\n" ); # exit terse mode fwrite ( $fh, "^$input_separator\n" ); @@ -193,4 +197,3 @@ wordWindowObj.writeBody(); - diff --git a/phpgwapi/js/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl b/phpgwapi/js/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl index 2be1b15469..fae010d9ba 100644 --- a/phpgwapi/js/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl +++ b/phpgwapi/js/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl @@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/perl use CGI qw/ :standard /; use File::Temp qw/ tempfile tempdir /; @@ -12,7 +12,7 @@ my @textinputs = param( 'textinputs[]' ); # array my $aspell_cmd = '"C:\Program Files\Aspell\bin\aspell.exe"'; # by FredCK (for Windows) my $lang = 'en_US'; # my $aspell_opts = "-a --lang=$lang --encoding=utf-8"; # by FredCK -my $aspell_opts = "-a --lang=$lang --encoding=utf-8 -H"; # by FredCK +my $aspell_opts = "-a --lang=$lang --encoding=utf-8 -H --rem-sgml-check=alt"; # by FredCK my $input_separator = "A"; # set the 'wordtext' JavaScript variable to the submitted text. @@ -58,6 +58,8 @@ sub printCheckerResults { # open temp file, add the submitted text. for( my $i = 0; $i <= $#textinputs; $i++ ) { $text = url_decode( $textinputs[$i] ); + # Strip all tags for the text. (by FredCK - #339 / #681) + $text =~ s/<[^>]+>/ /g; @lines = split( /\n/, $text ); print $fh "\%\n"; # exit terse mode print $fh "^$input_separator\n"; @@ -177,4 +179,3 @@ wordWindowObj.writeBody(); EOF - diff --git a/phpgwapi/js/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js b/phpgwapi/js/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js index b5e55b74b9..c85be9ab63 100644 --- a/phpgwapi/js/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js +++ b/phpgwapi/js/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js @@ -459,4 +459,3 @@ function _getFormInputs( inputPattern ) { } return inputs; } - diff --git a/phpgwapi/js/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html b/phpgwapi/js/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html index 759a55b0ca..cbcd7db79e 100644 --- a/phpgwapi/js/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html +++ b/phpgwapi/js/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html @@ -1,4 +1,4 @@ - + - - - - - - - - - - - - - - -
    + +
    +
    - -
    - - - - - -
      - -   - -
    -
    + + +
    +
    + + + + + +
      + +   + +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + + + - \ No newline at end of file + diff --git a/phpgwapi/js/fckeditor/editor/fckeditor.html b/phpgwapi/js/fckeditor/editor/fckeditor.html index 5abcf31a57..a1dc37441f 100644 --- a/phpgwapi/js/fckeditor/editor/fckeditor.html +++ b/phpgwapi/js/fckeditor/editor/fckeditor.html @@ -1,7 +1,7 @@ - + - + FCKeditor - - - + + + diff --git a/phpgwapi/js/fckeditor/editor/fckeditor.original.html b/phpgwapi/js/fckeditor/editor/fckeditor.original.html index 846eed991d..c8572d5872 100644 --- a/phpgwapi/js/fckeditor/editor/fckeditor.original.html +++ b/phpgwapi/js/fckeditor/editor/fckeditor.original.html @@ -1,7 +1,7 @@ - + - + FCKeditor - - + + diff --git a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/browser.css b/phpgwapi/js/fckeditor/editor/filemanager/browser/default/browser.css index fbcfb2a14d..0912fcee80 100644 --- a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/browser.css +++ b/phpgwapi/js/fckeditor/editor/filemanager/browser/default/browser.css @@ -1,6 +1,6 @@ -/* +/* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -46,6 +46,7 @@ body.FileArea { background-color: #ffffff; + margin: 10px; } body, td, input, select @@ -85,4 +86,4 @@ body, td, input, select .FolderListFolder img { background-image: url(images/Folder.gif); -} \ No newline at end of file +} diff --git a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/browser.html b/phpgwapi/js/fckeditor/editor/filemanager/browser/default/browser.html index 5862fa80ec..1de2fd8ff9 100644 --- a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/browser.html +++ b/phpgwapi/js/fckeditor/editor/filemanager/browser/default/browser.html @@ -1,7 +1,7 @@ - + -<% - -' SECURITY: You must explicitelly enable this "connector" (set it to "True"). -Dim ConfigIsEnabled -ConfigIsEnabled = False - -' Path to user files relative to the document root. -Dim ConfigUserFilesPath -ConfigUserFilesPath = "/userfiles/" - -Dim ConfigAllowedExtensions, ConfigDeniedExtensions -Set ConfigAllowedExtensions = CreateObject( "Scripting.Dictionary" ) -Set ConfigDeniedExtensions = CreateObject( "Scripting.Dictionary" ) - -ConfigAllowedExtensions.Add "File", "" -ConfigDeniedExtensions.Add "File", "html|htm|php|php2|php3|php4|php5|phtml|pwml|inc|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|com|dll|vbs|js|reg|cgi|htaccess|asis" - -ConfigAllowedExtensions.Add "Image", "jpg|gif|jpeg|png|bmp" -ConfigDeniedExtensions.Add "Image", "" - -ConfigAllowedExtensions.Add "Flash", "swf|fla" -ConfigDeniedExtensions.Add "Flash", "" - -ConfigAllowedExtensions.Add "Media", "swf|fla|jpg|gif|jpeg|png|avi|mpg|mpeg|mp(1-4)|wma|wmv|wav|mid|midi|rmi|rm|ram|rmvb|mov|qt" -ConfigDeniedExtensions.Add "Media", "" - -%> \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/asp/connector.asp b/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/asp/connector.asp deleted file mode 100644 index 69594dc3ca..0000000000 --- a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/asp/connector.asp +++ /dev/null @@ -1,124 +0,0 @@ -<%@ CodePage=65001 Language="VBScript"%> -<% -Option Explicit -Response.Buffer = True -%> - - - - - - - -<% - -If ( ConfigIsEnabled = False ) Then - SendError 1, "This connector is disabled. Please check the ""editor/filemanager/browser/default/connectors/asp/config.asp"" file" -End If - -' Get the "UserFiles" path. -Dim sUserFilesPath - -If ( Not IsEmpty( ConfigUserFilesPath ) ) Then - sUserFilesPath = ConfigUserFilesPath - - If ( Right( sUserFilesPath, 1 ) <> "/" ) Then - sUserFilesPath = sUserFilesPath & "/" - End If -Else - sUserFilesPath = "/userfiles/" -End If - -' Map the "UserFiles" path to a local directory. -Dim sUserFilesDirectory -sUserFilesDirectory = Server.MapPath( sUserFilesPath ) - -If ( Right( sUserFilesDirectory, 1 ) <> "\" ) Then - sUserFilesDirectory = sUserFilesDirectory & "\" -End If - -DoResponse - -Sub DoResponse() - Dim sCommand, sResourceType, sCurrentFolder - - ' Get the main request information. - sCommand = Request.QueryString("Command") - If ( sCommand = "" ) Then Exit Sub - - sResourceType = Request.QueryString("Type") - If ( sResourceType = "" ) Then Exit Sub - - sCurrentFolder = Request.QueryString("CurrentFolder") - If ( sCurrentFolder = "" ) Then Exit Sub - - ' Check if it is an allower resource type. - if ( Not IsAllowedType( sResourceType ) ) Then Exit Sub - - ' Check the current folder syntax (must begin and start with a slash). - If ( Right( sCurrentFolder, 1 ) <> "/" ) Then sCurrentFolder = sCurrentFolder & "/" - If ( Left( sCurrentFolder, 1 ) <> "/" ) Then sCurrentFolder = "/" & sCurrentFolder - - ' Check for invalid folder paths (..) - If ( InStr( 1, sCurrentFolder, ".." ) <> 0 OR InStr( 1, sResourceType, ".." ) <> 0 ) Then - SendError 102, "" - End If - - ' File Upload doesn't have to Return XML, so it must be intercepted before anything. - If ( sCommand = "FileUpload" ) Then - FileUpload sResourceType, sCurrentFolder - Exit Sub - End If - - SetXmlHeaders - - CreateXmlHeader sCommand, sResourceType, sCurrentFolder - - ' Execute the required command. - Select Case sCommand - Case "GetFolders" - GetFolders sResourceType, sCurrentFolder - Case "GetFoldersAndFiles" - GetFoldersAndFiles sResourceType, sCurrentFolder - Case "CreateFolder" - CreateFolder sResourceType, sCurrentFolder - End Select - - CreateXmlFooter - - Response.End -End Sub - -Function IsAllowedType( resourceType ) - Dim oRE - Set oRE = New RegExp - oRE.IgnoreCase = True - oRE.Global = True - oRE.Pattern = "^(File|Image|Flash|Media)$" - - IsAllowedType = oRE.Test( resourceType ) - - Set oRE = Nothing -End Function -%> \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/asp/io.asp b/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/asp/io.asp deleted file mode 100644 index 3b764c82e3..0000000000 --- a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/asp/io.asp +++ /dev/null @@ -1,89 +0,0 @@ - -<% -Function GetUrlFromPath( resourceType, folderPath ) - If resourceType = "" Then - GetUrlFromPath = RemoveFromEnd( sUserFilesPath, "/" ) & folderPath - Else - GetUrlFromPath = sUserFilesPath & LCase( resourceType ) & folderPath - End If -End Function - -Function RemoveExtension( fileName ) - RemoveExtension = Left( fileName, InStrRev( fileName, "." ) - 1 ) -End Function - -Function ServerMapFolder( resourceType, folderPath ) - ' Get the resource type directory. - Dim sResourceTypePath - sResourceTypePath = sUserFilesDirectory & LCase( resourceType ) & "\" - - ' Ensure that the directory exists. - CreateServerFolder sResourceTypePath - - ' Return the resource type directory combined with the required path. - ServerMapFolder = sResourceTypePath & RemoveFromStart( folderPath, "/" ) -End Function - -Sub CreateServerFolder( folderPath ) - Dim oFSO - Set oFSO = Server.CreateObject( "Scripting.FileSystemObject" ) - - Dim sParent - sParent = oFSO.GetParentFolderName( folderPath ) - - ' Check if the parent exists, or create it. - If ( NOT oFSO.FolderExists( sParent ) ) Then CreateServerFolder( sParent ) - - If ( oFSO.FolderExists( folderPath ) = False ) Then - oFSO.CreateFolder( folderPath ) - End If - - Set oFSO = Nothing -End Sub - -Function IsAllowedExt( extension, resourceType ) - Dim oRE - Set oRE = New RegExp - oRE.IgnoreCase = True - oRE.Global = True - - Dim sAllowed, sDenied - sAllowed = ConfigAllowedExtensions.Item( resourceType ) - sDenied = ConfigDeniedExtensions.Item( resourceType ) - - IsAllowedExt = True - - If sDenied <> "" Then - oRE.Pattern = sDenied - IsAllowedExt = Not oRE.Test( extension ) - End If - - If IsAllowedExt And sAllowed <> "" Then - oRE.Pattern = sAllowed - IsAllowedExt = oRE.Test( extension ) - End If - - Set oRE = Nothing -End Function -%> \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/cfm/config.cfm b/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/cfm/config.cfm deleted file mode 100644 index e1bab201d7..0000000000 --- a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/cfm/config.cfm +++ /dev/null @@ -1,99 +0,0 @@ - - - - config = structNew(); - - // SECURITY: You must explicitly enable this "connector". (Set enabled to "true") - config.enabled = false; - - config.userFilesPath = "/userfiles/"; - - config.serverPath = ""; // use this to force the server path if FCKeditor is not running directly off the root of the application or the FCKeditor directory in the URL is a virtual directory or a symbolic link / junction - - config.allowedExtensions = structNew(); - config.deniedExtensions = structNew(); - - // config.allowedExtensions["File"] = "doc,rtf,pdf,ppt,pps,xls,csv,vnd,zip"; - config.allowedExtensions["File"] = ""; - config.deniedExtensions["File"] = "html,htm,php,php2,php3,php4,php5,phtml,pwml,inc,asp,aspx,ascx,jsp,cfm,cfc,pl,bat,exe,com,dll,vbs,js,reg,cgi,htaccess,asis"; - - config.allowedExtensions["Image"] = "png,gif,jpg,jpeg,bmp"; - config.deniedExtensions["Image"] = ""; - - config.allowedExtensions["Flash"] = "swf,fla"; - config.deniedExtensions["Flash"] = ""; - - config.allowedExtensions["Media"] = "swf,fla,jpg,gif,jpeg,png,avi,mpg,mpeg,mp3,mp4,m4a,wma,wmv,wav,mid,midi,rmi,rm,ram,rmvb,mov,qt"; - config.deniedExtensions["Media"] = ""; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function structCopyKeys(stFrom, stTo) { - for ( key in stFrom ) { - if ( isStruct(stFrom[key]) ) { - structCopyKeys(stFrom[key],stTo[key]); - } else { - stTo[key] = stFrom[key]; - } - } - } - structCopyKeys(FCKeditor, config); - - - diff --git a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/php/config.php b/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/php/config.php deleted file mode 100644 index 4d2c2f29a9..0000000000 --- a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/php/config.php +++ /dev/null @@ -1,56 +0,0 @@ - diff --git a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/php/connector.php b/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/php/connector.php deleted file mode 100644 index df121ae2d4..0000000000 --- a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/php/connector.php +++ /dev/null @@ -1,113 +0,0 @@ - 0 ) -{ - $GLOBALS["UserFilesDirectory"] = $Config['UserFilesAbsolutePath'] ; - - if ( ! ereg( '/$', $GLOBALS["UserFilesDirectory"] ) ) - $GLOBALS["UserFilesDirectory"] .= '/' ; -} -else -{ - // Map the "UserFiles" path to a local directory. - $GLOBALS["UserFilesDirectory"] = GetRootPath() . $GLOBALS["UserFilesPath"] ; -} - -DoResponse() ; - -function DoResponse() -{ - if ( !isset( $_GET['Command'] ) || !isset( $_GET['Type'] ) || !isset( $_GET['CurrentFolder'] ) ) - return ; - - // Get the main request informaiton. - $sCommand = $_GET['Command'] ; - $sResourceType = $_GET['Type'] ; - $sCurrentFolder = $_GET['CurrentFolder'] ; - - // Check if it is an allowed type. - if ( !in_array( $sResourceType, array('File','images','Flash','Media') ) ) - return ; - - // Check the current folder syntax (must begin and start with a slash). - if ( ! ereg( '/$', $sCurrentFolder ) ) $sCurrentFolder .= '/' ; - if ( strpos( $sCurrentFolder, '/' ) !== 0 ) $sCurrentFolder = '/' . $sCurrentFolder ; - - // Check for invalid folder paths (..) - if ( strpos( $sCurrentFolder, '..' ) ) - SendError( 102, "" ) ; - - // File Upload doesn't have to Return XML, so it must be intercepted before anything. - if ( $sCommand == 'FileUpload' ) - { - FileUpload( $sResourceType, $sCurrentFolder ) ; - return ; - } - - CreateXmlHeader( $sCommand, $sResourceType, $sCurrentFolder ) ; - - // Execute the required command. - switch ( $sCommand ) - { - case 'GetFolders' : - GetFolders( $sResourceType, $sCurrentFolder ) ; - break ; - case 'GetFoldersAndFiles' : - GetFoldersAndFiles( $sResourceType, $sCurrentFolder ) ; - break ; - case 'CreateFolder' : - CreateFolder( $sResourceType, $sCurrentFolder ) ; - break ; - } - - CreateXmlFooter() ; - - exit ; -} -?> \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/php/io.php b/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/php/io.php deleted file mode 100644 index ab8f17141a..0000000000 --- a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/php/io.php +++ /dev/null @@ -1,106 +0,0 @@ - diff --git a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/php/util.php b/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/php/util.php deleted file mode 100644 index cd2faa0af5..0000000000 --- a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/php/util.php +++ /dev/null @@ -1,41 +0,0 @@ - \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/py/connector.py b/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/py/connector.py deleted file mode 100644 index 290489e2b7..0000000000 --- a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/py/connector.py +++ /dev/null @@ -1,785 +0,0 @@ -#!/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 == - -Connector for Python. - -Tested With: -Standard: - Python 2.3.3 -Zope: - Zope Version: (Zope 2.8.1-final, python 2.3.5, linux2) - Python Version: 2.3.5 (#4, Mar 10 2005, 01:40:25) - [GCC 3.3.3 20040412 (Red Hat Linux 3.3.3-7)] - System Platform: linux2 -""" - -""" -Author Notes (04 December 2005): -This module has gone through quite a few phases of change. Obviously, -I am only supporting that part of the code that I use. Initially -I had the upload directory as a part of zope (ie. uploading files -directly into Zope), before realising that there were too many -complex intricacies within Zope to deal with. Zope is one ugly piece -of code. So I decided to complement Zope by an Apache server (which -I had running anyway, and doing nothing). So I mapped all uploads -from an arbitrary server directory to an arbitrary web directory. -All the FCKeditor uploading occurred this way, and I didn't have to -stuff around with fiddling with Zope objects and the like (which are -terribly complex and something you don't want to do - trust me). - -Maybe a Zope expert can touch up the Zope components. In the end, -I had FCKeditor loaded in Zope (probably a bad idea as well), and -I replaced the connector.py with an alias to a server module. -Right now, all Zope components will simple remain as is because -I've had enough of Zope. - -See notes right at the end of this file for how I aliased out of Zope. - -Anyway, most of you probably wont use Zope, so things are pretty -simple in that regard. - -Typically, SERVER_DIR is the root of WEB_DIR (not necessarily). -Most definitely, SERVER_USERFILES_DIR points to WEB_USERFILES_DIR. -""" - -import cgi -import re -import os -import string - -""" -escape - -Converts the special characters '<', '>', and '&'. - -RFC 1866 specifies that these characters be represented -in HTML as < > and & respectively. In Python -1.5 we use the new string.replace() function for speed. -""" -def escape(text, replace=string.replace): - text = replace(text, '&', '&') # must be done 1st - text = replace(text, '<', '<') - text = replace(text, '>', '>') - text = replace(text, '"', '"') - return text - -""" -getFCKeditorConnector - -Creates a new instance of an FCKeditorConnector, and runs it -""" -def getFCKeditorConnector(context=None): - # Called from Zope. Passes the context through - connector = FCKeditorConnector(context=context) - return connector.run() - - -""" -FCKeditorRequest - -A wrapper around the request object -Can handle normal CGI request, or a Zope request -Extend as required -""" -class FCKeditorRequest(object): - def __init__(self, context=None): - if (context is not None): - r = context.REQUEST - else: - r = cgi.FieldStorage() - self.context = context - self.request = r - - def isZope(self): - if (self.context is not None): - return True - return False - - def has_key(self, key): - return self.request.has_key(key) - - def get(self, key, default=None): - value = None - if (self.isZope()): - value = self.request.get(key, default) - else: - if key in self.request.keys(): - value = self.request[key].value - else: - value = default - return value - -""" -FCKeditorConnector - -The connector class -""" -class FCKeditorConnector(object): - # Configuration for FCKEditor - # can point to another server here, if linked correctly - #WEB_HOST = "http://127.0.0.1/" - WEB_HOST = "" - SERVER_DIR = "/var/www/html/" - - WEB_USERFILES_FOLDER = WEB_HOST + "upload/" - SERVER_USERFILES_FOLDER = SERVER_DIR + "upload/" - - # Allow access (Zope) - __allow_access_to_unprotected_subobjects__ = 1 - # Class Attributes - parentFolderRe = re.compile("[\/][^\/]+[\/]?$") - - """ - Constructor - """ - def __init__(self, context=None): - # The given root path will NOT be shown to the user - # Only the userFilesPath will be shown - - # Instance Attributes - self.context = context - self.request = FCKeditorRequest(context=context) - self.rootPath = self.SERVER_DIR - self.userFilesFolder = self.SERVER_USERFILES_FOLDER - self.webUserFilesFolder = self.WEB_USERFILES_FOLDER - - # Enables / Disables the connector - self.enabled = False # Set to True to enable this connector - - # These are instance variables - self.zopeRootContext = None - self.zopeUploadContext = None - - # Copied from php module =) - self.allowedExtensions = { - "File": None, - "Image": None, - "Flash": None, - "Media": None - } - self.deniedExtensions = { - "File": [ "html","htm","php","php2","php3","php4","php5","phtml","pwml","inc","asp","aspx","ascx","jsp","cfm","cfc","pl","bat","exe","com","dll","vbs","js","reg","cgi","htaccess","asis" ], - "Image": [ "html","htm","php","php2","php3","php4","php5","phtml","pwml","inc","asp","aspx","ascx","jsp","cfm","cfc","pl","bat","exe","com","dll","vbs","js","reg","cgi","htaccess","asis" ], - "Flash": [ "html","htm","php","php2","php3","php4","php5","phtml","pwml","inc","asp","aspx","ascx","jsp","cfm","cfc","pl","bat","exe","com","dll","vbs","js","reg","cgi","htaccess","asis" ], - "Media": [ "html","htm","php","php2","php3","php4","php5","phtml","pwml","inc","asp","aspx","ascx","jsp","cfm","cfc","pl","bat","exe","com","dll","vbs","js","reg","cgi","htaccess","asis" ] - } - - """ - Zope specific functions - """ - def isZope(self): - # The context object is the zope object - if (self.context is not None): - return True - return False - - def getZopeRootContext(self): - if self.zopeRootContext is None: - self.zopeRootContext = self.context.getPhysicalRoot() - return self.zopeRootContext - - def getZopeUploadContext(self): - if self.zopeUploadContext is None: - folderNames = self.userFilesFolder.split("/") - c = self.getZopeRootContext() - for folderName in folderNames: - if (folderName <> ""): - c = c[folderName] - self.zopeUploadContext = c - return self.zopeUploadContext - - """ - Generic manipulation functions - """ - def getUserFilesFolder(self): - return self.userFilesFolder - - def getWebUserFilesFolder(self): - return self.webUserFilesFolder - - def getAllowedExtensions(self, resourceType): - return self.allowedExtensions[resourceType] - - def getDeniedExtensions(self, resourceType): - return self.deniedExtensions[resourceType] - - def removeFromStart(self, string, char): - return string.lstrip(char) - - def removeFromEnd(self, string, char): - return string.rstrip(char) - - def convertToXmlAttribute(self, value): - if (value is None): - value = "" - return escape(value) - - def convertToPath(self, path): - if (path[-1] <> "/"): - return path + "/" - else: - return path - - def getUrlFromPath(self, resourceType, path): - if (resourceType is None) or (resourceType == ''): - url = "%s%s" % ( - self.removeFromEnd(self.getUserFilesFolder(), '/'), - path - ) - else: - url = "%s%s%s" % ( - self.getUserFilesFolder(), - resourceType, - path - ) - return url - - def getWebUrlFromPath(self, resourceType, path): - if (resourceType is None) or (resourceType == ''): - url = "%s%s" % ( - self.removeFromEnd(self.getWebUserFilesFolder(), '/'), - path - ) - else: - url = "%s%s%s" % ( - self.getWebUserFilesFolder(), - resourceType, - path - ) - return url - - def removeExtension(self, fileName): - index = fileName.rindex(".") - newFileName = fileName[0:index] - return newFileName - - def getExtension(self, fileName): - index = fileName.rindex(".") + 1 - fileExtension = fileName[index:] - return fileExtension - - def getParentFolder(self, folderPath): - parentFolderPath = self.parentFolderRe.sub('', folderPath) - return parentFolderPath - - """ - serverMapFolder - - Purpose: works out the folder map on the server - """ - def serverMapFolder(self, resourceType, folderPath): - # Get the resource type directory - resourceTypeFolder = "%s%s/" % ( - self.getUserFilesFolder(), - resourceType - ) - # Ensure that the directory exists - self.createServerFolder(resourceTypeFolder) - - # Return the resource type directory combined with the - # required path - return "%s%s" % ( - resourceTypeFolder, - self.removeFromStart(folderPath, '/') - ) - - """ - createServerFolder - - Purpose: physically creates a folder on the server - """ - def createServerFolder(self, folderPath): - # Check if the parent exists - parentFolderPath = self.getParentFolder(folderPath) - if not(os.path.exists(parentFolderPath)): - errorMsg = self.createServerFolder(parentFolderPath) - if errorMsg is not None: - return errorMsg - # Check if this exists - if not(os.path.exists(folderPath)): - os.mkdir(folderPath) - os.chmod(folderPath, 0755) - errorMsg = None - else: - if os.path.isdir(folderPath): - errorMsg = None - else: - raise "createServerFolder: Non-folder of same name already exists" - return errorMsg - - - """ - getRootPath - - Purpose: returns the root path on the server - """ - def getRootPath(self): - return self.rootPath - - """ - setXmlHeaders - - Purpose: to prepare the headers for the xml to return - """ - def setXmlHeaders(self): - #now = self.context.BS_get_now() - #yesterday = now - 1 - self.setHeader("Content-Type", "text/xml") - #self.setHeader("Expires", yesterday) - #self.setHeader("Last-Modified", now) - #self.setHeader("Cache-Control", "no-store, no-cache, must-revalidate") - self.printHeaders() - return - - def setHeader(self, key, value): - if (self.isZope()): - self.context.REQUEST.RESPONSE.setHeader(key, value) - else: - print "%s: %s" % (key, value) - return - - def printHeaders(self): - # For non-Zope requests, we need to print an empty line - # to denote the end of headers - if (not(self.isZope())): - print "" - - """ - createXmlFooter - - Purpose: returns the xml header - """ - def createXmlHeader(self, command, resourceType, currentFolder): - self.setXmlHeaders() - s = "" - # Create the XML document header - s += """""" - # Create the main connector node - s += """""" % ( - command, - resourceType - ) - # Add the current folder node - s += """""" % ( - self.convertToXmlAttribute(currentFolder), - self.convertToXmlAttribute( - self.getWebUrlFromPath( - resourceType, - currentFolder - ) - ), - ) - return s - - """ - createXmlFooter - - Purpose: returns the xml footer - """ - def createXmlFooter(self): - s = """""" - return s - - """ - sendError - - Purpose: in the event of an error, return an xml based error - """ - def sendError(self, number, text): - self.setXmlHeaders() - s = "" - # Create the XML document header - s += """""" - s += """""" - s += """""" % (number, text) - s += """""" - return s - - """ - getFolders - - Purpose: command to recieve a list of folders - """ - def getFolders(self, resourceType, currentFolder): - if (self.isZope()): - return self.getZopeFolders(resourceType, currentFolder) - else: - return self.getNonZopeFolders(resourceType, currentFolder) - - def getZopeFolders(self, resourceType, currentFolder): - # Open the folders node - s = "" - s += """""" - zopeFolder = self.findZopeFolder(resourceType, currentFolder) - for (name, o) in zopeFolder.objectItems(["Folder"]): - s += """""" % ( - self.convertToXmlAttribute(name) - ) - # Close the folders node - s += """""" - return s - - def getNonZopeFolders(self, resourceType, currentFolder): - # Map the virtual path to our local server - serverPath = self.serverMapFolder(resourceType, currentFolder) - # Open the folders node - s = "" - s += """""" - for someObject in os.listdir(serverPath): - someObjectPath = os.path.join(serverPath, someObject) - if os.path.isdir(someObjectPath): - s += """""" % ( - self.convertToXmlAttribute(someObject) - ) - # Close the folders node - s += """""" - return s - - """ - getFoldersAndFiles - - Purpose: command to recieve a list of folders and files - """ - def getFoldersAndFiles(self, resourceType, currentFolder): - if (self.isZope()): - return self.getZopeFoldersAndFiles(resourceType, currentFolder) - else: - return self.getNonZopeFoldersAndFiles(resourceType, currentFolder) - - def getNonZopeFoldersAndFiles(self, resourceType, currentFolder): - # Map the virtual path to our local server - serverPath = self.serverMapFolder(resourceType, currentFolder) - # Open the folders / files node - folders = """""" - files = """""" - for someObject in os.listdir(serverPath): - someObjectPath = os.path.join(serverPath, someObject) - if os.path.isdir(someObjectPath): - folders += """""" % ( - self.convertToXmlAttribute(someObject) - ) - elif os.path.isfile(someObjectPath): - size = os.path.getsize(someObjectPath) - files += """""" % ( - self.convertToXmlAttribute(someObject), - os.path.getsize(someObjectPath) - ) - # Close the folders / files node - folders += """""" - files += """""" - # Return it - s = folders + files - return s - - def getZopeFoldersAndFiles(self, resourceType, currentFolder): - folders = self.getZopeFolders(resourceType, currentFolder) - files = self.getZopeFiles(resourceType, currentFolder) - s = folders + files - return s - - def getZopeFiles(self, resourceType, currentFolder): - # Open the files node - s = "" - s += """""" - zopeFolder = self.findZopeFolder(resourceType, currentFolder) - for (name, o) in zopeFolder.objectItems(["File","Image"]): - s += """""" % ( - self.convertToXmlAttribute(name), - ((o.get_size() / 1024) + 1) - ) - # Close the files node - s += """""" - return s - - def findZopeFolder(self, resourceType, folderName): - # returns the context of the resource / folder - zopeFolder = self.getZopeUploadContext() - folderName = self.removeFromStart(folderName, "/") - folderName = self.removeFromEnd(folderName, "/") - if (resourceType <> ""): - try: - zopeFolder = zopeFolder[resourceType] - except: - zopeFolder.manage_addProduct["OFSP"].manage_addFolder(id=resourceType, title=resourceType) - zopeFolder = zopeFolder[resourceType] - if (folderName <> ""): - folderNames = folderName.split("/") - for folderName in folderNames: - zopeFolder = zopeFolder[folderName] - return zopeFolder - - """ - createFolder - - Purpose: command to create a new folder - """ - def createFolder(self, resourceType, currentFolder): - if (self.isZope()): - return self.createZopeFolder(resourceType, currentFolder) - else: - return self.createNonZopeFolder(resourceType, currentFolder) - - def createZopeFolder(self, resourceType, currentFolder): - # Find out where we are - zopeFolder = self.findZopeFolder(resourceType, currentFolder) - errorNo = 0 - errorMsg = "" - if self.request.has_key("NewFolderName"): - newFolder = self.request.get("NewFolderName", None) - zopeFolder.manage_addProduct["OFSP"].manage_addFolder(id=newFolder, title=newFolder) - else: - errorNo = 102 - error = """""" % ( - errorNo, - self.convertToXmlAttribute(errorMsg) - ) - return error - - def createNonZopeFolder(self, resourceType, currentFolder): - errorNo = 0 - errorMsg = "" - if self.request.has_key("NewFolderName"): - newFolder = self.request.get("NewFolderName", None) - currentFolderPath = self.serverMapFolder( - resourceType, - currentFolder - ) - try: - newFolderPath = currentFolderPath + newFolder - errorMsg = self.createServerFolder(newFolderPath) - if (errorMsg is not None): - errorNo = 110 - except: - errorNo = 103 - else: - errorNo = 102 - error = """""" % ( - errorNo, - self.convertToXmlAttribute(errorMsg) - ) - return error - - """ - getFileName - - Purpose: helper function to extrapolate the filename - """ - def getFileName(self, filename): - for splitChar in ["/", "\\"]: - array = filename.split(splitChar) - if (len(array) > 1): - filename = array[-1] - return filename - - """ - fileUpload - - Purpose: command to upload files to server - """ - def fileUpload(self, resourceType, currentFolder): - if (self.isZope()): - return self.zopeFileUpload(resourceType, currentFolder) - else: - return self.nonZopeFileUpload(resourceType, currentFolder) - - def zopeFileUpload(self, resourceType, currentFolder, count=None): - zopeFolder = self.findZopeFolder(resourceType, currentFolder) - file = self.request.get("NewFile", None) - fileName = self.getFileName(file.filename) - fileNameOnly = self.removeExtension(fileName) - fileExtension = self.getExtension(fileName).lower() - if (count): - nid = "%s.%s.%s" % (fileNameOnly, count, fileExtension) - else: - nid = fileName - title = nid - try: - zopeFolder.manage_addProduct['OFSP'].manage_addFile( - id=nid, - title=title, - file=file.read() - ) - except: - if (count): - count += 1 - else: - count = 1 - self.zopeFileUpload(resourceType, currentFolder, count) - return - - def nonZopeFileUpload(self, resourceType, currentFolder): - errorNo = 0 - errorMsg = "" - if self.request.has_key("NewFile"): - # newFile has all the contents we need - newFile = self.request.get("NewFile", "") - # Get the file name - newFileName = newFile.filename - newFileNameOnly = self.removeExtension(newFileName) - newFileExtension = self.getExtension(newFileName).lower() - allowedExtensions = self.getAllowedExtensions(resourceType) - deniedExtensions = self.getDeniedExtensions(resourceType) - if (allowedExtensions is not None): - # Check for allowed - isAllowed = False - if (newFileExtension in allowedExtensions): - isAllowed = True - elif (deniedExtensions is not None): - # Check for denied - isAllowed = True - if (newFileExtension in deniedExtensions): - isAllowed = False - else: - # No extension limitations - isAllowed = True - - if (isAllowed): - if (self.isZope()): - # Upload into zope - self.zopeFileUpload(resourceType, currentFolder) - else: - # Upload to operating system - # Map the virtual path to the local server path - currentFolderPath = self.serverMapFolder( - resourceType, - currentFolder - ) - i = 0 - while (True): - newFilePath = "%s%s" % ( - currentFolderPath, - newFileName - ) - if os.path.exists(newFilePath): - i += 1 - newFilePath = "%s%s(%s).%s" % ( - currentFolderPath, - newFileNameOnly, - i, - newFileExtension - ) - errorNo = 201 - break - else: - fileHandle = open(newFilePath,'w') - linecount = 0 - while (1): - #line = newFile.file.readline() - line = newFile.readline() - if not line: break - fileHandle.write("%s" % line) - linecount += 1 - os.chmod(newFilePath, 0777) - break - else: - newFileName = "Extension not allowed" - errorNo = 203 - else: - newFileName = "No File" - errorNo = 202 - - string = """ - - """ % ( - errorNo, - newFileName.replace('"',"'") - ) - return string - - def run(self): - s = "" - try: - # Check if this is disabled - if not(self.enabled): - return self.sendError(1, "This connector is disabled. Please check the connector configurations and try again") - # Make sure we have valid inputs - if not( - (self.request.has_key("Command")) and - (self.request.has_key("Type")) and - (self.request.has_key("CurrentFolder")) - ): - return - # Get command - command = self.request.get("Command", None) - # Get resource type - resourceType = self.request.get("Type", None) - # folder syntax must start and end with "/" - currentFolder = self.request.get("CurrentFolder", None) - if (currentFolder[-1] <> "/"): - currentFolder += "/" - if (currentFolder[0] <> "/"): - currentFolder = "/" + currentFolder - # Check for invalid paths - if (".." in currentFolder): - return self.sendError(102, "") - # File upload doesn't have to return XML, so intercept - # her:e - if (command == "FileUpload"): - return self.fileUpload(resourceType, currentFolder) - # Begin XML - s += self.createXmlHeader(command, resourceType, currentFolder) - # Execute the command - if (command == "GetFolders"): - f = self.getFolders - elif (command == "GetFoldersAndFiles"): - f = self.getFoldersAndFiles - elif (command == "CreateFolder"): - f = self.createFolder - else: - f = None - if (f is not None): - s += f(resourceType, currentFolder) - s += self.createXmlFooter() - except Exception, e: - s = "ERROR: %s" % e - return s - -# Running from command line -if __name__ == '__main__': - # To test the output, uncomment the standard headers - #print "Content-Type: text/html" - #print "" - print getFCKeditorConnector() - -""" -Running from zope, you will need to modify this connector. -If you have uploaded the FCKeditor into Zope (like me), you need to -move this connector out of Zope, and replace the "connector" with an -alias as below. The key to it is to pass the Zope context in, as -we then have a like to the Zope context. - -## Script (Python) "connector.py" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=*args, **kws -##title=ALIAS -## -import Products.connector as connector -return connector.getFCKeditorConnector(context=context).run() -""" - - diff --git a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/frmactualfolder.html b/phpgwapi/js/fckeditor/editor/filemanager/browser/default/frmactualfolder.html index b5128d886e..661d03edb9 100644 --- a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/frmactualfolder.html +++ b/phpgwapi/js/fckeditor/editor/filemanager/browser/default/frmactualfolder.html @@ -1,7 +1,7 @@ - + + " - - Response.End + SendUploadResults sErrorNumber, sFileUrl, sFileName, "" End Sub -%> \ No newline at end of file + +%> diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/asp/config.asp b/phpgwapi/js/fckeditor/editor/filemanager/connectors/asp/config.asp new file mode 100644 index 0000000000..abc574a58b --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/asp/config.asp @@ -0,0 +1,128 @@ +<% + ' FCKeditor - The text editor for Internet - http://www.fckeditor.net + ' Copyright (C) 2003-2008 Frederico Caldeira Knabben + ' + ' == BEGIN LICENSE == + ' + ' Licensed under the terms of any of the following licenses at your + ' choice: + ' + ' - GNU General Public License Version 2 or later (the "GPL") + ' http://www.gnu.org/licenses/gpl.html + ' + ' - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + ' http://www.gnu.org/licenses/lgpl.html + ' + ' - Mozilla Public License Version 1.1 or later (the "MPL") + ' http://www.mozilla.org/MPL/MPL-1.1.html + ' + ' == END LICENSE == + ' + ' Configuration file for the File Manager Connector for ASP. +%> +<% + +' SECURITY: You must explicitly enable this "connector" (set it to "True"). +' WARNING: don't just set "ConfigIsEnabled = true", you must be sure that only +' authenticated users can access this file or use some kind of session checking. +Dim ConfigIsEnabled +ConfigIsEnabled = False + +' Path to user files relative to the document root. +' This setting is preserved only for backward compatibility. +' You should look at the settings for each resource type to get the full potential +Dim ConfigUserFilesPath +ConfigUserFilesPath = "/userfiles/" + +' Due to security issues with Apache modules, it is recommended to leave the +' following setting enabled. +Dim ConfigForceSingleExtension +ConfigForceSingleExtension = true + +' What the user can do with this connector +Dim ConfigAllowedCommands +ConfigAllowedCommands = "QuickUpload|FileUpload|GetFolders|GetFoldersAndFiles|CreateFolder" + +' Allowed Resource Types +Dim ConfigAllowedTypes +ConfigAllowedTypes = "File|Image|Flash|Media" + +' For security, HTML is allowed in the first Kb of data for files having the +' following extensions only. +Dim ConfigHtmlExtensions +ConfigHtmlExtensions = "html|htm|xml|xsd|txt|js" +' +' Configuration settings for each Resource Type +' +' - AllowedExtensions: the possible extensions that can be allowed. +' If it is empty then any file type can be uploaded. +' +' - DeniedExtensions: The extensions that won't be allowed. +' If it is empty then no restrictions are done here. +' +' For a file to be uploaded it has to fulfill both the AllowedExtensions +' and DeniedExtensions (that's it: not being denied) conditions. +' +' - FileTypesPath: the virtual folder relative to the document root where +' these resources will be located. +' Attention: It must start and end with a slash: '/' +' +' - FileTypesAbsolutePath: the physical path to the above folder. It must be +' an absolute path. +' If it's an empty string then it will be autocalculated. +' Useful if you are using a virtual directory, symbolic link or alias. +' Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'. +' Attention: The above 'FileTypesPath' must point to the same directory. +' Attention: It must end with a slash: '/' +' +' - QuickUploadPath: the virtual folder relative to the document root where +' these resources will be uploaded using the Upload tab in the resources +' dialogs. +' Attention: It must start and end with a slash: '/' +' +' - QuickUploadAbsolutePath: the physical path to the above folder. It must be +' an absolute path. +' If it's an empty string then it will be autocalculated. +' Useful if you are using a virtual directory, symbolic link or alias. +' Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'. +' Attention: The above 'QuickUploadPath' must point to the same directory. +' Attention: It must end with a slash: '/' +' + +Dim ConfigAllowedExtensions, ConfigDeniedExtensions, ConfigFileTypesPath, ConfigFileTypesAbsolutePath, ConfigQuickUploadPath, ConfigQuickUploadAbsolutePath +Set ConfigAllowedExtensions = CreateObject( "Scripting.Dictionary" ) +Set ConfigDeniedExtensions = CreateObject( "Scripting.Dictionary" ) +Set ConfigFileTypesPath = CreateObject( "Scripting.Dictionary" ) +Set ConfigFileTypesAbsolutePath = CreateObject( "Scripting.Dictionary" ) +Set ConfigQuickUploadPath = CreateObject( "Scripting.Dictionary" ) +Set ConfigQuickUploadAbsolutePath = CreateObject( "Scripting.Dictionary" ) + +ConfigAllowedExtensions.Add "File", "7z|aiff|asf|avi|bmp|csv|doc|fla|flv|gif|gz|gzip|jpeg|jpg|mid|mov|mp3|mp4|mpc|mpeg|mpg|ods|odt|pdf|png|ppt|pxd|qt|ram|rar|rm|rmi|rmvb|rtf|sdc|sitd|swf|sxc|sxw|tar|tgz|tif|tiff|txt|vsd|wav|wma|wmv|xls|xml|zip" +ConfigDeniedExtensions.Add "File", "" +ConfigFileTypesPath.Add "File", ConfigUserFilesPath & "file/" +ConfigFileTypesAbsolutePath.Add "File", "" +ConfigQuickUploadPath.Add "File", ConfigUserFilesPath +ConfigQuickUploadAbsolutePath.Add "File", "" + +ConfigAllowedExtensions.Add "Image", "bmp|gif|jpeg|jpg|png" +ConfigDeniedExtensions.Add "Image", "" +ConfigFileTypesPath.Add "Image", ConfigUserFilesPath & "image/" +ConfigFileTypesAbsolutePath.Add "Image", "" +ConfigQuickUploadPath.Add "Image", ConfigUserFilesPath +ConfigQuickUploadAbsolutePath.Add "Image", "" + +ConfigAllowedExtensions.Add "Flash", "swf|flv" +ConfigDeniedExtensions.Add "Flash", "" +ConfigFileTypesPath.Add "Flash", ConfigUserFilesPath & "flash/" +ConfigFileTypesAbsolutePath.Add "Flash", "" +ConfigQuickUploadPath.Add "Flash", ConfigUserFilesPath +ConfigQuickUploadAbsolutePath.Add "Flash", "" + +ConfigAllowedExtensions.Add "Media", "aiff|asf|avi|bmp|fla|flv|gif|jpeg|jpg|mid|mov|mp3|mp4|mpc|mpeg|mpg|png|qt|ram|rm|rmi|rmvb|swf|tif|tiff|wav|wma|wmv" +ConfigDeniedExtensions.Add "Media", "" +ConfigFileTypesPath.Add "Media", ConfigUserFilesPath & "media/" +ConfigFileTypesAbsolutePath.Add "Media", "" +ConfigQuickUploadPath.Add "Media", ConfigUserFilesPath +ConfigQuickUploadAbsolutePath.Add "Media", "" + +%> diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/asp/connector.asp b/phpgwapi/js/fckeditor/editor/filemanager/connectors/asp/connector.asp new file mode 100644 index 0000000000..dc113a90bd --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/asp/connector.asp @@ -0,0 +1,88 @@ +<%@ CodePage=65001 Language="VBScript"%> +<% +Option Explicit +Response.Buffer = True +%> +<% + ' FCKeditor - The text editor for Internet - http://www.fckeditor.net + ' Copyright (C) 2003-2008 Frederico Caldeira Knabben + ' + ' == BEGIN LICENSE == + ' + ' Licensed under the terms of any of the following licenses at your + ' choice: + ' + ' - GNU General Public License Version 2 or later (the "GPL") + ' http://www.gnu.org/licenses/gpl.html + ' + ' - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + ' http://www.gnu.org/licenses/lgpl.html + ' + ' - Mozilla Public License Version 1.1 or later (the "MPL") + ' http://www.mozilla.org/MPL/MPL-1.1.html + ' + ' == END LICENSE == + ' + ' This is the File Manager Connector for ASP. +%> + + + + + + +<% + +If ( ConfigIsEnabled = False ) Then + SendError 1, "This connector is disabled. Please check the ""editor/filemanager/connectors/asp/config.asp"" file" +End If + +DoResponse + +Sub DoResponse() + Dim sCommand, sResourceType, sCurrentFolder + + ' Get the main request information. + sCommand = Request.QueryString("Command") + + sResourceType = Request.QueryString("Type") + If ( sResourceType = "" ) Then sResourceType = "File" + + sCurrentFolder = GetCurrentFolder() + + ' Check if it is an allowed command + if ( Not IsAllowedCommand( sCommand ) ) then + SendError 1, "The """ & sCommand & """ command isn't allowed" + end if + + ' Check if it is an allowed resource type. + if ( Not IsAllowedType( sResourceType ) ) Then + SendError 1, "The """ & sResourceType & """ resource type isn't allowed" + end if + + ' File Upload doesn't have to Return XML, so it must be intercepted before anything. + If ( sCommand = "FileUpload" ) Then + FileUpload sResourceType, sCurrentFolder, sCommand + Exit Sub + End If + + SetXmlHeaders + + CreateXmlHeader sCommand, sResourceType, sCurrentFolder, GetUrlFromPath( sResourceType, sCurrentFolder, sCommand) + + ' Execute the required command. + Select Case sCommand + Case "GetFolders" + GetFolders sResourceType, sCurrentFolder + Case "GetFoldersAndFiles" + GetFoldersAndFiles sResourceType, sCurrentFolder + Case "CreateFolder" + CreateFolder sResourceType, sCurrentFolder + End Select + + CreateXmlFooter + + Response.End +End Sub + +%> diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/asp/io.asp b/phpgwapi/js/fckeditor/editor/filemanager/connectors/asp/io.asp new file mode 100644 index 0000000000..8d6aa88a26 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/asp/io.asp @@ -0,0 +1,254 @@ +<% + ' FCKeditor - The text editor for Internet - http://www.fckeditor.net + ' Copyright (C) 2003-2008 Frederico Caldeira Knabben + ' + ' == BEGIN LICENSE == + ' + ' Licensed under the terms of any of the following licenses at your + ' choice: + ' + ' - GNU General Public License Version 2 or later (the "GPL") + ' http://www.gnu.org/licenses/gpl.html + ' + ' - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + ' http://www.gnu.org/licenses/lgpl.html + ' + ' - Mozilla Public License Version 1.1 or later (the "MPL") + ' http://www.mozilla.org/MPL/MPL-1.1.html + ' + ' == END LICENSE == + ' + ' This file include IO specific functions used by the ASP Connector. +%> +<% +function CombinePaths( sBasePath, sFolder) + CombinePaths = RemoveFromEnd( sBasePath, "/" ) & "/" & RemoveFromStart( sFolder, "/" ) +end function + +Function GetResourceTypePath( resourceType, sCommand ) + if ( sCommand = "QuickUpload") then + GetResourceTypePath = ConfigQuickUploadPath.Item( resourceType ) + else + GetResourceTypePath = ConfigFileTypesPath.Item( resourceType ) + end if +end Function + +Function GetResourceTypeDirectory( resourceType, sCommand ) + if ( sCommand = "QuickUpload") then + + if ( ConfigQuickUploadAbsolutePath.Item( resourceType ) <> "" ) then + GetResourceTypeDirectory = ConfigQuickUploadAbsolutePath.Item( resourceType ) + else + ' Map the "UserFiles" path to a local directory. + GetResourceTypeDirectory = Server.MapPath( ConfigQuickUploadPath.Item( resourceType ) ) + end if + else + if ( ConfigFileTypesAbsolutePath.Item( resourceType ) <> "" ) then + GetResourceTypeDirectory = ConfigFileTypesAbsolutePath.Item( resourceType ) + else + ' Map the "UserFiles" path to a local directory. + GetResourceTypeDirectory = Server.MapPath( ConfigFileTypesPath.Item( resourceType ) ) + end if + end if +end Function + +Function GetUrlFromPath( resourceType, folderPath, sCommand ) + GetUrlFromPath = CombinePaths( GetResourceTypePath( resourceType, sCommand ), folderPath ) +End Function + +Function RemoveExtension( fileName ) + RemoveExtension = Left( fileName, InStrRev( fileName, "." ) - 1 ) +End Function + +Function ServerMapFolder( resourceType, folderPath, sCommand ) + Dim sResourceTypePath + ' Get the resource type directory. + sResourceTypePath = GetResourceTypeDirectory( resourceType, sCommand ) + + ' Ensure that the directory exists. + CreateServerFolder sResourceTypePath + + ' Return the resource type directory combined with the required path. + ServerMapFolder = CombinePaths( sResourceTypePath, folderPath ) +End Function + +Sub CreateServerFolder( folderPath ) + Dim oFSO + Set oFSO = Server.CreateObject( "Scripting.FileSystemObject" ) + + Dim sParent + sParent = oFSO.GetParentFolderName( folderPath ) + + ' Check if the parent exists, or create it. + If ( NOT oFSO.FolderExists( sParent ) ) Then CreateServerFolder( sParent ) + + If ( oFSO.FolderExists( folderPath ) = False ) Then + On Error resume next + oFSO.CreateFolder( folderPath ) + + if err.number<>0 then + dim sErrorNumber + Dim iErrNumber, sErrDescription + iErrNumber = err.number + sErrDescription = err.Description + + On Error Goto 0 + + Select Case iErrNumber + Case 52 + sErrorNumber = "102" ' Invalid Folder Name. + Case 70 + sErrorNumber = "103" ' Security Error. + Case 76 + sErrorNumber = "102" ' Path too long. + Case Else + sErrorNumber = "110" + End Select + + SendError sErrorNumber, "CreateServerFolder(" & folderPath & ") : " & sErrDescription + end if + + End If + + Set oFSO = Nothing +End Sub + +Function IsAllowedExt( extension, resourceType ) + Dim oRE + Set oRE = New RegExp + oRE.IgnoreCase = True + oRE.Global = True + + Dim sAllowed, sDenied + sAllowed = ConfigAllowedExtensions.Item( resourceType ) + sDenied = ConfigDeniedExtensions.Item( resourceType ) + + IsAllowedExt = True + + If sDenied <> "" Then + oRE.Pattern = sDenied + IsAllowedExt = Not oRE.Test( extension ) + End If + + If IsAllowedExt And sAllowed <> "" Then + oRE.Pattern = sAllowed + IsAllowedExt = oRE.Test( extension ) + End If + + Set oRE = Nothing +End Function + +Function IsAllowedType( resourceType ) + Dim oRE + Set oRE = New RegExp + oRE.IgnoreCase = True + oRE.Global = True + oRE.Pattern = "^(" & ConfigAllowedTypes & ")$" + + IsAllowedType = oRE.Test( resourceType ) + + Set oRE = Nothing +End Function + +Function IsAllowedCommand( sCommand ) + Dim oRE + Set oRE = New RegExp + oRE.IgnoreCase = True + oRE.Global = True + oRE.Pattern = "^(" & ConfigAllowedCommands & ")$" + + IsAllowedCommand = oRE.Test( sCommand ) + + Set oRE = Nothing +End Function + +function GetCurrentFolder() + dim sCurrentFolder + sCurrentFolder = Request.QueryString("CurrentFolder") + If ( sCurrentFolder = "" ) Then sCurrentFolder = "/" + + ' Check the current folder syntax (must begin and start with a slash). + If ( Right( sCurrentFolder, 1 ) <> "/" ) Then sCurrentFolder = sCurrentFolder & "/" + If ( Left( sCurrentFolder, 1 ) <> "/" ) Then sCurrentFolder = "/" & sCurrentFolder + + ' Check for invalid folder paths (..) + If ( InStr( 1, sCurrentFolder, ".." ) <> 0 OR InStr( 1, sCurrentFolder, "\" ) <> 0) Then + SendError 102, "" + End If + + GetCurrentFolder = sCurrentFolder +end function + +' Do a cleanup of the folder name to avoid possible problems +function SanitizeFolderName( sNewFolderName ) + Dim oRegex + Set oRegex = New RegExp + oRegex.Global = True + +' remove . \ / | : ? * " < > and control characters + oRegex.Pattern = "(\.|\\|\/|\||:|\?|\*|""|\<|\>|[\u0000-\u001F]|\u007F)" + SanitizeFolderName = oRegex.Replace( sNewFolderName, "_" ) + + Set oRegex = Nothing +end function + +' Do a cleanup of the file name to avoid possible problems +function SanitizeFileName( sNewFileName ) + Dim oRegex + Set oRegex = New RegExp + oRegex.Global = True + + if ( ConfigForceSingleExtension = True ) then + oRegex.Pattern = "\.(?![^.]*$)" + sNewFileName = oRegex.Replace( sNewFileName, "_" ) + end if + +' remove \ / | : ? * " < > and control characters + oRegex.Pattern = "(\\|\/|\||:|\?|\*|""|\<|\>|[\u0000-\u001F]|\u007F)" + SanitizeFileName = oRegex.Replace( sNewFileName, "_" ) + + Set oRegex = Nothing +end function + +' This is the function that sends the results of the uploading process. +Sub SendUploadResults( errorNumber, fileUrl, fileName, customMsg ) + Response.Clear + Response.Write "" + Response.End +End Sub + +%> diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/asp/upload.asp b/phpgwapi/js/fckeditor/editor/filemanager/connectors/asp/upload.asp new file mode 100644 index 0000000000..8fa11c2cee --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/asp/upload.asp @@ -0,0 +1,65 @@ +<%@ CodePage=65001 Language="VBScript"%> +<% +Option Explicit +Response.Buffer = True +%> +<% + ' FCKeditor - The text editor for Internet - http://www.fckeditor.net + ' Copyright (C) 2003-2008 Frederico Caldeira Knabben + ' + ' == BEGIN LICENSE == + ' + ' Licensed under the terms of any of the following licenses at your + ' choice: + ' + ' - GNU General Public License Version 2 or later (the "GPL") + ' http://www.gnu.org/licenses/gpl.html + ' + ' - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + ' http://www.gnu.org/licenses/lgpl.html + ' + ' - Mozilla Public License Version 1.1 or later (the "MPL") + ' http://www.mozilla.org/MPL/MPL-1.1.html + ' + ' == END LICENSE == + ' + ' This is the "File Uploader" for ASP. +%> + + + + + +<% + +Sub SendError( number, text ) + SendUploadResults number, "", "", text +End Sub + +' Check if this uploader has been enabled. +If ( ConfigIsEnabled = False ) Then + SendUploadResults "1", "", "", "This file uploader is disabled. Please check the ""editor/filemanager/connectors/asp/config.asp"" file" +End If + + Dim sCommand, sResourceType, sCurrentFolder + + sCommand = "QuickUpload" + + sResourceType = Request.QueryString("Type") + If ( sResourceType = "" ) Then sResourceType = "File" + + sCurrentFolder = GetCurrentFolder() + + ' Is Upload enabled? + if ( Not IsAllowedCommand( sCommand ) ) then + SendUploadResults "1", "", "", "The """ & sCommand & """ command isn't allowed" + end if + + ' Check if it is an allowed resource type. + if ( Not IsAllowedType( sResourceType ) ) Then + SendUploadResults "1", "", "", "The " & sResourceType & " resource type isn't allowed" + end if + + FileUpload sResourceType, sCurrentFolder, sCommand + +%> diff --git a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/asp/util.asp b/phpgwapi/js/fckeditor/editor/filemanager/connectors/asp/util.asp similarity index 50% rename from phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/asp/util.asp rename to phpgwapi/js/fckeditor/editor/filemanager/connectors/asp/util.asp index 70182b8f8f..ba414f5914 100644 --- a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/asp/util.asp +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/asp/util.asp @@ -1,25 +1,25 @@ - +<% + ' FCKeditor - The text editor for Internet - http://www.fckeditor.net + ' Copyright (C) 2003-2008 Frederico Caldeira Knabben + ' + ' == BEGIN LICENSE == + ' + ' Licensed under the terms of any of the following licenses at your + ' choice: + ' + ' - GNU General Public License Version 2 or later (the "GPL") + ' http://www.gnu.org/licenses/gpl.html + ' + ' - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + ' http://www.gnu.org/licenses/lgpl.html + ' + ' - Mozilla Public License Version 1.1 or later (the "MPL") + ' http://www.mozilla.org/MPL/MPL-1.1.html + ' + ' == END LICENSE == + ' + ' This file include generic functions used by the ASP Connector. +%> <% Function RemoveFromStart( sourceString, charToRemove ) Dim oRegex @@ -52,4 +52,4 @@ Function InArray( value, sourceArray ) InArray = False End Function -%> \ No newline at end of file +%> diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/aspx/config.ascx b/phpgwapi/js/fckeditor/editor/filemanager/connectors/aspx/config.ascx new file mode 100644 index 0000000000..fafd7d70ab --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/aspx/config.ascx @@ -0,0 +1,98 @@ +<%@ Control Language="C#" EnableViewState="false" AutoEventWireup="false" Inherits="FredCK.FCKeditorV2.FileBrowser.Config" %> +<%-- + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Configuration file for the File Browser Connector for ASP.NET. +--%> + diff --git a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx b/phpgwapi/js/fckeditor/editor/filemanager/connectors/aspx/connector.aspx similarity index 72% rename from phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx rename to phpgwapi/js/fckeditor/editor/filemanager/connectors/aspx/connector.aspx index 1ae6a454cd..8f27ade790 100644 --- a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/aspx/connector.aspx @@ -1,7 +1,8 @@ -<%@ Page language="c#" Inherits="FredCK.FCKeditorV2.FileBrowserConnector" AutoEventWireup="false" %> +<%@ Page Language="c#" Trace="false" Inherits="FredCK.FCKeditorV2.FileBrowser.Connector" AutoEventWireup="false" %> +<%@ Register Src="config.ascx" TagName="Config" TagPrefix="FCKeditor" %> <%-- * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -27,4 +28,5 @@ * * To download the FCKeditor.Net package, go to our official web site: * http://www.fckeditor.net ---%> \ No newline at end of file +--%> + diff --git a/phpgwapi/js/fckeditor/editor/filemanager/upload/aspx/upload.aspx b/phpgwapi/js/fckeditor/editor/filemanager/connectors/aspx/upload.aspx similarity index 71% rename from phpgwapi/js/fckeditor/editor/filemanager/upload/aspx/upload.aspx rename to phpgwapi/js/fckeditor/editor/filemanager/connectors/aspx/upload.aspx index ec4aa7a743..4c295cdc15 100644 --- a/phpgwapi/js/fckeditor/editor/filemanager/upload/aspx/upload.aspx +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/aspx/upload.aspx @@ -1,7 +1,8 @@ -<%@ Page language="c#" Inherits="FredCK.FCKeditorV2.Uploader" AutoEventWireup="false" %> +<%@ Page Language="c#" Trace="false" Inherits="FredCK.FCKeditorV2.FileBrowser.Uploader" AutoEventWireup="false" %> +<%@ Register Src="config.ascx" TagName="Config" TagPrefix="FCKeditor" %> <%-- * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -27,4 +28,5 @@ * * To download the FCKeditor.Net package, go to our official web site: * http://www.fckeditor.net ---%> \ No newline at end of file +--%> + diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/ImageObject.cfc b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/ImageObject.cfc new file mode 100644 index 0000000000..b9b919c770 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/ImageObject.cfc @@ -0,0 +1,273 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/cfm/connector.cfm b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf5_connector.cfm similarity index 58% rename from phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/cfm/connector.cfm rename to phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf5_connector.cfm index 86ae1bbb5b..ce21a3adc9 100644 --- a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/cfm/connector.cfm +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf5_connector.cfm @@ -1,7 +1,7 @@ - + + + + + +
    + + + + + - "> + "> - + "> + + + '> + + + + '> + - + - - - - + + + + + + + + + + + + + + + - - - + + + + + + - + - + + "> - - - - - - "> - - - + + @@ -134,106 +187,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - errorNumber = 0; - fileName = cffile.ClientFileName; - fileExt = cffile.ServerFileExt; - - // munge filename for html download. Only a-z, 0-9, _, - and . are allowed - if( reFind("[^A-Za-z0-9_\-\.]", fileName) ) { - fileName = reReplace(fileName, "[^A-Za-z0-9\-\.]", "_", "ALL"); - fileName = reReplace(fileName, "_{2,}", "_", "ALL"); - fileName = reReplace(fileName, "([^_]+)_+$", "\1", "ALL"); - fileName = reReplace(fileName, "$_([^_]+)$", "\1", "ALL"); - } - - // When the original filename already exists, add numbers (0), (1), (2), ... at the end of the filename. - if( compare( cffile.ServerFileName, fileName ) ) { - counter = 0; - tmpFileName = fileName; - while( fileExists("#currentFolderPath##fileName#.#fileExt#") ) { - counter = counter + 1; - fileName = tmpFileName & '(#counter#)'; - } - } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - @@ -338,21 +295,16 @@ - - - - - xmlHeader = ''; - xmlHeader = xmlHeader & ''; + xmlHeader = xmlHeader & ''; xmlFooter = ''; @@ -360,4 +312,4 @@ -#xmlHeader##xmlContent##xmlFooter# \ No newline at end of file +#xmlHeader##xmlContent##xmlFooter# diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf5_upload.cfm b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf5_upload.cfm new file mode 100644 index 0000000000..92cbf9e505 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf5_upload.cfm @@ -0,0 +1,328 @@ + + + + + + + + + + + + + function SendUploadResults(errorNumber, fileUrl, fileName, customMsg) + { + WriteOutput(''); + } + + + + + + + + + + + + + + + + + + + + + + + + userFilesPath = config.userFilesPath; + + if ( userFilesPath eq "" ) { + userFilesPath = "/userfiles/"; + } + + // make sure the user files path is correctly formatted + userFilesPath = replace(userFilesPath, "\", "/", "ALL"); + userFilesPath = replace(userFilesPath, '//', '/', 'ALL'); + if ( right(userFilesPath,1) NEQ "/" ) { + userFilesPath = userFilesPath & "/"; + } + if ( left(userFilesPath,1) NEQ "/" ) { + userFilesPath = "/" & userFilesPath; + } + + // make sure the current folder is correctly formatted + url.currentFolder = replace(url.currentFolder, "\", "/", "ALL"); + url.currentFolder = replace(url.currentFolder, '//', '/', 'ALL'); + if ( right(url.currentFolder,1) neq "/" ) { + url.currentFolder = url.currentFolder & "/"; + } + if ( left(url.currentFolder,1) neq "/" ) { + url.currentFolder = "/" & url.currentFolder; + } + + if (find("/",getBaseTemplatePath())) { + fs = "/"; + } else { + fs = "\"; + } + + // Get the base physical path to the web root for this application. The code to determine the path automatically assumes that + // the "FCKeditor" directory in the http request path is directly off the web root for the application and that it's not a + // virtual directory or a symbolic link / junction. Use the serverPath config setting to force a physical path if necessary. + if ( len(config.serverPath) ) { + serverPath = config.serverPath; + + if ( right(serverPath,1) neq fs ) { + serverPath = serverPath & fs; + } + } else { + serverPath = replaceNoCase(getBaseTemplatePath(),replace(cgi.script_name,"/",fs,"all"),"") & replace(userFilesPath,"/",fs,"all"); + } + + rootPath = left( serverPath, Len(serverPath) - Len(userFilesPath) ) ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + errorNumber = 0; + fileName = cffile.ClientFileName ; + fileExt = cffile.ServerFileExt ; + fileExisted = false ; + + // munge filename for html download. Only a-z, 0-9, _, - and . are allowed + if( reFind("[^A-Za-z0-9_\-\.]", fileName) ) { + fileName = reReplace(fileName, "[^A-Za-z0-9\-\.]", "_", "ALL"); + fileName = reReplace(fileName, "_{2,}", "_", "ALL"); + fileName = reReplace(fileName, "([^_]+)_+$", "\1", "ALL"); + fileName = reReplace(fileName, "$_([^_]+)$", "\1", "ALL"); + } + + // remove additional dots from file name + if( isDefined("Config.ForceSingleExtension") and Config.ForceSingleExtension ) + fileName = replace( fileName, '.', "_", "all" ) ; + + // When the original filename already exists, add numbers (0), (1), (2), ... at the end of the filename. + if( compare( cffile.ServerFileName, fileName ) ) { + counter = 0; + tmpFileName = fileName; + while( fileExists("#currentFolderPath##fileName#.#fileExt#") ) { + fileExisted = true ; + counter = counter + 1 ; + fileName = tmpFileName & '(#counter#)' ; + } + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf_basexml.cfm b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf_basexml.cfm new file mode 100644 index 0000000000..61a784cc95 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf_basexml.cfm @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf_commands.cfm b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf_commands.cfm new file mode 100644 index 0000000000..2a900ce1a3 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf_commands.cfm @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sFileExt = GetExtension( sFileName ) ; + sFilePart = RemoveExtension( sFileName ); + while( fileExists( sServerDir & sFileName ) ) + { + counter = counter + 1; + sFileName = sFilePart & '(#counter#).' & CFFILE.ClientFileExt; + errorNumber = 201; + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + while( i lte qDir.recordCount ) + { + if( compareNoCase( qDir.type[i], "FILE" ) and not listFind( ".,..", qDir.name[i] ) ) + { + folders = folders & '' ; + } + i = i + 1; + } + + #folders# + + + + + + + + + + + + + + + + while( i lte qDir.recordCount ) + { + if( not compareNoCase( qDir.type[i], "DIR" ) and not listFind( ".,..", qDir.name[i] ) ) + { + folders = folders & '' ; + } + else if( not compareNoCase( qDir.type[i], "FILE" ) ) + { + fileSizeKB = round(qDir.size[i] / 1024) ; + files = files & '' ; + } + i = i + 1 ; + } + + #folders# + #files# + + + + + + + + + + + + + + + + sNewFolderName = SanitizeFolderName( sNewFolderName ) ; + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf_connector.cfm b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf_connector.cfm new file mode 100644 index 0000000000..8bd1e75582 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf_connector.cfm @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf_io.cfm b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf_io.cfm new file mode 100644 index 0000000000..1287107b4a --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf_io.cfm @@ -0,0 +1,319 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +|[[:cntrl:]]+', "_", "all" )> + + + + + + + + + + var chunk = ""; + var fileReaderClass = ""; + var fileReader = ""; + var file = ""; + var done = false; + var counter = 0; + var byteArray = ""; + + if( not fileExists( ARGUMENTS.fileName ) ) + { + return "" ; + } + + if (REQUEST.CFVersion gte 8) + { + file = FileOpen( ARGUMENTS.fileName, "readbinary" ) ; + byteArray = FileRead( file, 1024 ) ; + chunk = toString( toBinary( toBase64( byteArray ) ) ) ; + FileClose( file ) ; + } + else + { + fileReaderClass = createObject("java", "java.io.FileInputStream"); + fileReader = fileReaderClass.init(fileName); + + while(not done) + { + char = fileReader.read(); + counter = counter + 1; + if ( char eq -1 or counter eq ARGUMENTS.bytes) + { + done = true; + } + else + { + chunk = chunk & chr(char) ; + } + } + } + + + + + + + + + + + + + + + + + + + + + + + + + + + +|[[:cntrl:]]+', "_", "all" )> + + + diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf_upload.cfm b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf_upload.cfm new file mode 100644 index 0000000000..9bef3c40a1 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf_upload.cfm @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf_util.cfm b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf_util.cfm new file mode 100644 index 0000000000..3b8b9b1178 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/cf_util.cfm @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > + + + + + + + + + + + + + + + diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/config.cfm b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/config.cfm new file mode 100644 index 0000000000..f4b9086166 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/config.cfm @@ -0,0 +1,189 @@ + + + + + Config = StructNew() ; + + // SECURITY: You must explicitly enable this "connector". (Set enabled to "true") + Config.Enabled = false ; + + + // Path to uploaded files relative to the document root. + Config.UserFilesPath = "/userfiles/" ; + + // Use this to force the server path if FCKeditor is not running directly off + // the root of the application or the FCKeditor directory in the URL is a virtual directory + // or a symbolic link / junction + // Example: C:\inetpub\wwwroot\myDocs\ + Config.ServerPath = "" ; + + // Due to security issues with Apache modules, it is recommended to leave the + // following setting enabled. + Config.ForceSingleExtension = true ; + + // Perform additional checks for image files - if set to true, validate image size + // (This feature works in MX 6.0 and above) + Config.SecureImageUploads = true; + + // What the user can do with this connector + Config.ConfigAllowedCommands = "QuickUpload,FileUpload,GetFolders,GetFoldersAndFiles,CreateFolder" ; + + //Allowed Resource Types + Config.ConfigAllowedTypes = "File,Image,Flash,Media" ; + + // For security, HTML is allowed in the first Kb of data for files having the + // following extensions only. + // (This feature works in MX 6.0 and above)) + Config.HtmlExtensions = "html,htm,xml,xsd,txt,js" ; + + //Due to known issues with GetTempDirectory function, it is + //recommended to set this vairiable to a valid directory + //instead of using the GetTempDirectory function + //(used by MX 6.0 and above) + Config.TempDirectory = GetTempDirectory(); + +// Configuration settings for each Resource Type +// +// - AllowedExtensions: the possible extensions that can be allowed. +// If it is empty then any file type can be uploaded. +// - DeniedExtensions: The extensions that won't be allowed. +// If it is empty then no restrictions are done here. +// +// For a file to be uploaded it has to fulfill both the AllowedExtensions +// and DeniedExtensions (that's it: not being denied) conditions. +// +// - FileTypesPath: the virtual folder relative to the document root where +// these resources will be located. +// Attention: It must start and end with a slash: '/' +// +// - FileTypesAbsolutePath: the physical path to the above folder. It must be +// an absolute path. +// If it's an empty string then it will be autocalculated. +// Usefull if you are using a virtual directory, symbolic link or alias. +// Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'. +// Attention: The above 'FileTypesPath' must point to the same directory. +// Attention: It must end with a slash: '/' +// +// +// - QuickUploadPath: the virtual folder relative to the document root where +// these resources will be uploaded using the Upload tab in the resources +// dialogs. +// Attention: It must start and end with a slash: '/' +// +// - QuickUploadAbsolutePath: the physical path to the above folder. It must be +// an absolute path. +// If it's an empty string then it will be autocalculated. +// Usefull if you are using a virtual directory, symbolic link or alias. +// Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'. +// Attention: The above 'QuickUploadPath' must point to the same directory. +// Attention: It must end with a slash: '/' + + Config.AllowedExtensions = StructNew() ; + Config.DeniedExtensions = StructNew() ; + Config.FileTypesPath = StructNew() ; + Config.FileTypesAbsolutePath = StructNew() ; + Config.QuickUploadPath = StructNew() ; + Config.QuickUploadAbsolutePath = StructNew() ; + + Config.AllowedExtensions["File"] = "7z,aiff,asf,avi,bmp,csv,doc,fla,flv,gif,gz,gzip,jpeg,jpg,mid,mov,mp3,mp4,mpc,mpeg,mpg,ods,odt,pdf,png,ppt,pxd,qt,ram,rar,rm,rmi,rmvb,rtf,sdc,sitd,swf,sxc,sxw,tar,tgz,tif,tiff,txt,vsd,wav,wma,wmv,xls,xml,zip" ; + Config.DeniedExtensions["File"] = "" ; + Config.FileTypesPath["File"] = Config.UserFilesPath & 'file/' ; + Config.FileTypesAbsolutePath["File"] = iif( Config.ServerPath eq "", de(""), de(Config.ServerPath & 'file/') ) ; + Config.QuickUploadPath["File"] = Config.FileTypesPath["File"] ; + Config.QuickUploadAbsolutePath["File"] = Config.FileTypesAbsolutePath["File"] ; + + Config.AllowedExtensions["Image"] = "bmp,gif,jpeg,jpg,png" ; + Config.DeniedExtensions["Image"] = "" ; + Config.FileTypesPath["Image"] = Config.UserFilesPath & 'image/' ; + Config.FileTypesAbsolutePath["Image"] = iif( Config.ServerPath eq "", de(""), de(Config.ServerPath & 'image/') ) ; + Config.QuickUploadPath["Image"] = Config.FileTypesPath["Image"] ; + Config.QuickUploadAbsolutePath["Image"] = Config.FileTypesAbsolutePath["Image"] ; + + Config.AllowedExtensions["Flash"] = "swf,flv" ; + Config.DeniedExtensions["Flash"] = "" ; + Config.FileTypesPath["Flash"] = Config.UserFilesPath & 'flash/' ; + Config.FileTypesAbsolutePath["Flash"] = iif( Config.ServerPath eq "", de(""), de(Config.ServerPath & 'flash/') ) ; + Config.QuickUploadPath["Flash"] = Config.FileTypesPath["Flash"] ; + Config.QuickUploadAbsolutePath["Flash"] = Config.FileTypesAbsolutePath["Flash"] ; + + Config.AllowedExtensions["Media"] = "aiff,asf,avi,bmp,fla,flv,gif,jpeg,jpg,mid,mov,mp3,mp4,mpc,mpeg,mpg,png,qt,ram,rm,rmi,rmvb,swf,tif,tiff,wav,wma,wmv" ; + Config.DeniedExtensions["Media"] = "" ; + Config.FileTypesPath["Media"] = Config.UserFilesPath & 'media/' ; + Config.FileTypesAbsolutePath["Media"] = iif( Config.ServerPath eq "", de(""), de(Config.ServerPath & 'media/') ) ; + Config.QuickUploadPath["Media"] = Config.FileTypesPath["Media"] ; + Config.QuickUploadAbsolutePath["Media"] = Config.FileTypesAbsolutePath["Media"] ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + function structCopyKeys(stFrom, stTo) { + for ( key in stFrom ) { + if ( isStruct(stFrom[key]) ) { + structCopyKeys(stFrom[key],stTo[key]); + } else { + stTo[key] = stFrom[key]; + } + } + } + structCopyKeys(FCKeditor, config); + + + diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/connector.cfm b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/connector.cfm new file mode 100644 index 0000000000..342e449c6b --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/connector.cfm @@ -0,0 +1,32 @@ + + + + + + + + + + diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/image.cfc b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/image.cfc new file mode 100644 index 0000000000..378c4b4b95 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/image.cfc @@ -0,0 +1,1324 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + paths = arrayNew(1); + paths[1] = expandPath("metadata-extractor-2.3.1.jar"); + loader = createObject("component", "javaloader.JavaLoader").init(paths); + + //at this stage we only have access to the class, but we don't have an instance + JpegMetadataReader = loader.create("com.drew.imaging.jpeg.JpegMetadataReader"); + + myMetaData = JpegMetadataReader.readMetadata(inFile); + directories = myMetaData.getDirectoryIterator(); + while (directories.hasNext()) { + currentDirectory = directories.next(); + tags = currentDirectory.getTagIterator(); + while (tags.hasNext()) { + currentTag = tags.next(); + if (currentTag.getTagName() DOES NOT CONTAIN "Unknown") { //leave out the junk data + queryAddRow(retQry); + querySetCell(retQry,"dirName",replace(currentTag.getDirectoryName(),' ','_','ALL')); + tagName = replace(currentTag.getTagName(),' ','','ALL'); + tagName = replace(tagName,'/','','ALL'); + querySetCell(retQry,"tagName",tagName); + querySetCell(retQry,"tagValue",currentTag.getDescription()); + } + } + } + return retQry; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + resizedImage = CreateObject("java", "java.awt.image.BufferedImage"); + at = CreateObject("java", "java.awt.geom.AffineTransform"); + op = CreateObject("java", "java.awt.image.AffineTransformOp"); + + w = img.getWidth(); + h = img.getHeight(); + + if (preserveAspect and cropToExact and newHeight gt 0 and newWidth gt 0) + { + if (w / h gt newWidth / newHeight){ + newWidth = 0; + } else if (w / h lt newWidth / newHeight){ + newHeight = 0; + } + } else if (preserveAspect and newHeight gt 0 and newWidth gt 0) { + if (w / h gt newWidth / newHeight){ + newHeight = 0; + } else if (w / h lt newWidth / newHeight){ + newWidth = 0; + } + } + if (newWidth gt 0 and newHeight eq 0) { + scale = newWidth / w; + w = newWidth; + h = round(h*scale); + } else if (newHeight gt 0 and newWidth eq 0) { + scale = newHeight / h; + h = newHeight; + w = round(w*scale); + } else if (newHeight gt 0 and newWidth gt 0) { + w = newWidth; + h = newHeight; + } else { + retVal = throw( retVal.errorMessage); + return retVal; + } + resizedImage.init(javacast("int",w),javacast("int",h),img.getType()); + + w = w / img.getWidth(); + h = h / img.getHeight(); + + + + op.init(at.getScaleInstance(javacast("double",w),javacast("double",h)), rh); + // resizedImage = op.createCompatibleDestImage(img, img.getColorModel()); + op.filter(img, resizedImage); + + imgInfo = getimageinfo(resizedImage, ""); + if (imgInfo.errorCode gt 0) + { + return imgInfo; + } + + cropOffsetX = max( Int( (imgInfo.width/2) - (newWidth/2) ), 0 ); + cropOffsetY = max( Int( (imgInfo.height/2) - (newHeight/2) ), 0 ); + // There is a chance that the image is exactly the correct + // width and height and don't need to be cropped + if + ( + preserveAspect and cropToExact + and + (imgInfo.width IS NOT specifiedWidth OR imgInfo.height IS NOT specifiedHeight) + ) + { + // Get the correct offset to get the center of the image + cropOffsetX = max( Int( (imgInfo.width/2) - (specifiedWidth/2) ), 0 ); + cropOffsetY = max( Int( (imgInfo.height/2) - (specifiedHeight/2) ), 0 ); + + cropImageResult = crop( resizedImage, "", "", cropOffsetX, cropOffsetY, specifiedWidth, specifiedHeight ); + if ( cropImageResult.errorCode GT 0) + { + return cropImageResult; + } else { + resizedImage = cropImageResult.img; + } + } + if (outputFile eq "") + { + retVal.img = resizedImage; + return retVal; + } else { + saveImage = writeImage(outputFile, resizedImage, jpegCompression); + if (saveImage.errorCode gt 0) + { + return saveImage; + } else { + return retVal; + } + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + if (fromX + newWidth gt img.getWidth() + OR + fromY + newHeight gt img.getHeight() + ) + { + retval = throw( "The cropped image dimensions go beyond the original image dimensions."); + return retVal; + } + croppedImage = img.getSubimage(javaCast("int", fromX), javaCast("int", fromY), javaCast("int", newWidth), javaCast("int", newHeight) ); + if (outputFile eq "") + { + retVal.img = croppedImage; + return retVal; + } else { + saveImage = writeImage(outputFile, croppedImage, jpegCompression); + if (saveImage.errorCode gt 0) + { + return saveImage; + } else { + return retVal; + } + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + rotatedImage = CreateObject("java", "java.awt.image.BufferedImage"); + at = CreateObject("java", "java.awt.geom.AffineTransform"); + op = CreateObject("java", "java.awt.image.AffineTransformOp"); + + iw = img.getWidth(); h = iw; + ih = img.getHeight(); w = ih; + + if(arguments.degrees eq 180) { w = iw; h = ih; } + + x = (w/2)-(iw/2); + y = (h/2)-(ih/2); + + rotatedImage.init(javacast("int",w),javacast("int",h),img.getType()); + + at.rotate(arguments.degrees * 0.0174532925,w/2,h/2); + at.translate(x,y); + op.init(at, rh); + + op.filter(img, rotatedImage); + + if (outputFile eq "") + { + retVal.img = rotatedImage; + return retVal; + } else { + saveImage = writeImage(outputFile, rotatedImage, jpegCompression); + if (saveImage.errorCode gt 0) + { + return saveImage; + } else { + return retVal; + } + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + if (outputFile eq "") + { + retVal = throw( "The convert method requires a valid output filename."); + return retVal; + } else { + saveImage = writeImage(outputFile, img, jpegCompression); + if (saveImage.errorCode gt 0) + { + return saveImage; + } else { + return retVal; + } + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /* + JPEG output method handles compression + */ + out = createObject("java", "java.io.BufferedOutputStream"); + fos = createObject("java", "java.io.FileOutputStream"); + fos.init(tempOutputFile); + out.init(fos); + JPEGCodec = createObject("java", "com.sun.image.codec.jpeg.JPEGCodec"); + encoder = JPEGCodec.createJPEGEncoder(out); + param = encoder.getDefaultJPEGEncodeParam(img); + param.setQuality(quality, false); + encoder.setJPEGEncodeParam(param); + encoder.encode(img); + out.close(); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + flippedImage = CreateObject("java", "java.awt.image.BufferedImage"); + at = CreateObject("java", "java.awt.geom.AffineTransform"); + op = CreateObject("java", "java.awt.image.AffineTransformOp"); + + flippedImage.init(img.getWidth(), img.getHeight(), img.getType()); + + if (direction eq "horizontal") { + at = at.getScaleInstance(-1, 1); + at.translate(-img.getWidth(), 0); + } else { + at = at.getScaleInstance(1,-1); + at.translate(0, -img.getHeight()); + } + op.init(at, rh); + op.filter(img, flippedImage); + + if (outputFile eq "") + { + retVal.img = flippedImage; + return retVal; + } else { + saveImage = writeImage(outputFile, flippedImage, jpegCompression); + if (saveImage.errorCode gt 0) + { + return saveImage; + } else { + return retVal; + } + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + // initialize the blur filter + variables.blurFilter.init(arguments.blurAmount); + // move the source image into the destination image + // so we can repeatedly blur it. + destImage = srcImage; + + for (i=1; i lte iterations; i=i+1) + { + // do the blur i times + destImage = variables.blurFilter.filter(destImage); + } + + + if (outputFile eq "") + { + // return the image object + retVal.img = destImage; + return retVal; + } else { + // write the image object to the specified file. + saveImage = writeImage(outputFile, destImage, jpegCompression); + if (saveImage.errorCode gt 0) + { + return saveImage; + } else { + return retVal; + } + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + // initialize the sharpen filter + variables.sharpenFilter.init(); + + destImage = variables.sharpenFilter.filter(srcImage); + + + if (outputFile eq "") + { + // return the image object + retVal.img = destImage; + return retVal; + } else { + // write the image object to the specified file. + saveImage = writeImage(outputFile, destImage, jpegCompression); + if (saveImage.errorCode gt 0) + { + return saveImage; + } else { + return retVal; + } + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + // initialize the posterize filter + variables.posterizeFilter.init(arguments.amount); + + destImage = variables.posterizeFilter.filter(srcImage); + + + if (outputFile eq "") + { + // return the image object + retVal.img = destImage; + return retVal; + } else { + // write the image object to the specified file. + saveImage = writeImage(outputFile, destImage, jpegCompression); + if (saveImage.errorCode gt 0) + { + return saveImage; + } else { + return retVal; + } + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + // load objects + bgImage = CreateObject("java", "java.awt.image.BufferedImage"); + fontImage = CreateObject("java", "java.awt.image.BufferedImage"); + overlayImage = CreateObject("java", "java.awt.image.BufferedImage"); + Color = CreateObject("java","java.awt.Color"); + font = createObject("java","java.awt.Font"); + font_stream = createObject("java","java.io.FileInputStream"); + ac = CreateObject("Java", "java.awt.AlphaComposite"); + + // set up basic needs + fontColor = Color.init(javacast("int", rgb.red), javacast("int", rgb.green), javacast("int", rgb.blue)); + + if (fontDetails.fontFile neq "") + { + font_stream.init(arguments.fontDetails.fontFile); + font = font.createFont(font.TRUETYPE_FONT, font_stream); + font = font.deriveFont(javacast("float",arguments.fontDetails.size)); + } else { + font.init(fontDetails.fontName, evaluate(fontDetails.style), fontDetails.size); + } + // get font metrics using a 1x1 bufferedImage + fontImage.init(1,1,img.getType()); + g2 = fontImage.createGraphics(); + g2.setRenderingHints(getRenderingHints()); + fc = g2.getFontRenderContext(); + bounds = font.getStringBounds(content,fc); + + g2 = img.createGraphics(); + g2.setRenderingHints(getRenderingHints()); + g2.setFont(font); + g2.setColor(fontColor); + // in case you want to change the alpha + // g2.setComposite(ac.getInstance(ac.SRC_OVER, 0.50)); + + // the location (arguments.fontDetails.size+y) doesn't really work + // the way I want it to. + g2.drawString(content,javacast("int",x),javacast("int",arguments.fontDetails.size+y)); + + if (outputFile eq "") + { + retVal.img = img; + return retVal; + } else { + saveImage = writeImage(outputFile, img, jpegCompression); + if (saveImage.errorCode gt 0) + { + return saveImage; + } else { + return retVal; + } + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + at = CreateObject("java", "java.awt.geom.AffineTransform"); + op = CreateObject("java", "java.awt.image.AffineTransformOp"); + ac = CreateObject("Java", "java.awt.AlphaComposite"); + gfx = originalImage.getGraphics(); + gfx.setComposite(ac.getInstance(ac.SRC_OVER, alpha)); + + at.init(); + // op.init(at,op.TYPE_BILINEAR); + op.init(at, rh); + + gfx.drawImage(wmImage, op, javaCast("int",arguments.placeAtX), javacast("int", arguments.placeAtY)); + + gfx.dispose(); + + if (outputFile eq "") + { + retVal.img = originalImage; + return retVal; + } else { + saveImage = writeImage(outputFile, originalImage, jpegCompression); + if (saveImage.errorCode gt 0) + { + return saveImage; + } else { + return retVal; + } + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + // convert the image to a specified BufferedImage type and return it + + var width = bImage.getWidth(); + var height = bImage.getHeight(); + var newImage = createObject("java","java.awt.image.BufferedImage").init(javacast("int",width), javacast("int",height), javacast("int",type)); + // int[] rgbArray = new int[width*height]; + var rgbArray = variables.arrObj.newInstance(variables.intClass, javacast("int",width*height)); + + bImage.getRGB( + javacast("int",0), + javacast("int",0), + javacast("int",width), + javacast("int",height), + rgbArray, + javacast("int",0), + javacast("int",width) + ); + newImage.setRGB( + javacast("int",0), + javacast("int",0), + javacast("int",width), + javacast("int",height), + rgbArray, + javacast("int",0), + javacast("int",width) + ); + return newImage; + + + + + diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/upload.cfm b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/upload.cfm new file mode 100644 index 0000000000..0da40ae70e --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/cfm/upload.cfm @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/lasso/config.lasso b/phpgwapi/js/fckeditor/editor/filemanager/connectors/lasso/config.lasso similarity index 67% rename from phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/lasso/config.lasso rename to phpgwapi/js/fckeditor/editor/filemanager/connectors/lasso/config.lasso index 15d8a51b87..da683cbe62 100644 --- a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/lasso/config.lasso +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/lasso/config.lasso @@ -1,7 +1,7 @@ -[//lasso +[//lasso /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -41,7 +41,7 @@ Set which file extensions are allowed and/or denied for each file type. */ var('config') = map( - 'Enabled' = true, + 'Enabled' = false, 'UserFilesPath' = '/userfiles/', 'Subdirectories' = map( 'File' = 'File/', @@ -50,16 +50,16 @@ 'Media' = 'Media/' ), 'AllowedExtensions' = map( - 'File' = array(), - 'Image' = array('jpg','gif','jpeg','png'), - 'Flash' = array('swf','fla'), - 'Media' = array('swf','fla','jpg','gif','jpeg','png','avi','mpg','mpeg') + 'File' = array('7z','aiff','asf','avi','bmp','csv','doc','fla','flv','gif','gz','gzip','jpeg','jpg','mid','mov','mp3','mp4','mpc','mpeg','mpg','ods','odt','pdf','png','ppt','pxd','qt','ram','rar','rm','rmi','rmvb','rtf','sdc','sitd','swf','sxc','sxw','tar','tgz','tif','tiff','txt','vsd','wav','wma','wmv','xls','xml','zip'), + 'Image' = array('bmp','gif','jpeg','jpg','png'), + 'Flash' = array('swf','flv'), + 'Media' = array('aiff','asf','avi','bmp','fla','flv','gif','jpeg','jpg','mid','mov','mp3','mp4','mpc','mpeg','mpg','png','qt','ram','rm','rmi','rmvb','swf','tif','tiff','wav','wma','wmv') ), 'DeniedExtensions' = map( - 'File' = array('html','htm','php','php2','php3','php4','php5','phtml','pwml','inc','asp','aspx','ascx','jsp','cfm','cfc','pl','bat','exe','com','dll','vbs','js','reg','cgi','lasso','lassoapp','htaccess','asis'), + 'File' = array(), 'Image' = array(), 'Flash' = array(), 'Media' = array() ) ); -] \ No newline at end of file +] diff --git a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/lasso/connector.lasso b/phpgwapi/js/fckeditor/editor/filemanager/connectors/lasso/connector.lasso similarity index 70% rename from phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/lasso/connector.lasso rename to phpgwapi/js/fckeditor/editor/filemanager/connectors/lasso/connector.lasso index f9a7f91fa6..96d0db0bcb 100644 --- a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/lasso/connector.lasso +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/lasso/connector.lasso @@ -1,7 +1,7 @@ -[//lasso +[//lasso /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -55,6 +55,65 @@ 'uploadResult' = '0' ); + /*..................................................................... + Custom tag sets the HTML response. + */ + + define_tag( + 'htmlreply', + -namespace='fck_', + -priority='replace', + -required='uploadResult', + -optional='NewFilePath', + -type='string', + -description='Sets the HTML response for the FCKEditor File Upload feature.' + ); + $__html_reply__ = '\ + + '; + else; + $__html_reply__ = $__html_reply__ + '\ + window.parent.OnUploadCompleted(' + $uploadResult + '); + + '; + /if; + /define_tag; + /*..................................................................... Calculate the path to the current folder. @@ -63,9 +122,21 @@ var('currentFolderURL' = $ServerPath + $config->find('Subdirectories')->find(action_param('Type')) - + action_param('CurrentFolder') + + $CurrentFolder ); + if($CurrentFolder->(Find: '..') || $CurrentFolder->(Find: '\\')); + if($Command == 'FileUpload'); + $responseType = 'html'; + $uploadResult = '102'; + fck_htmlreply( + -uploadResult=$uploadResult + ); + else; + $errorNumber = 102; + $commandData += '\n'; + /if; + else; /*..................................................................... Build the appropriate response per the 'Command' parameter. Wrap the @@ -110,6 +181,7 @@ Create a directory 'NewFolderName' within the 'Current Folder.' */ case('CreateFolder'); + $NewFolderName = (String_ReplaceRegExp: $NewFolderName, -find='\\.|\\\\|\\/|\\||\\:|\\?|\\*|"|<|>', -replace='_'); var('newFolder' = $currentFolderURL + $NewFolderName + '/'); file_create($newFolder); @@ -148,7 +220,11 @@ /*......................................................... Was a file actually uploaded? */ - file_uploads->size ? $NewFile = file_uploads->get(1) | $uploadResult = '202'; + if(file_uploads->size); + $NewFile = file_uploads->get(1); + else; + $uploadResult = '202'; + /if; if($uploadResult == '0'); /*..................................................... @@ -157,9 +233,11 @@ files. (Test.txt, Test(1).txt, Test(2).txt, etc.) */ $NewFileName = $NewFile->find('OrigName'); + $NewFileName = (String_ReplaceRegExp: $NewFileName, -find='\\\\|\\/|\\||\\:|\\?|\\*|"|<|>', -replace='_'); $OrigFilePath = $currentFolderURL + $NewFileName; $NewFilePath = $OrigFilePath; local('fileExtension') = '.' + $NewFile->find('OrigExtension'); + #fileExtension = (String_ReplaceRegExp: #fileExtension, -find='\\\\|\\/|\\||\\:|\\?|\\*|"|<|>', -replace='_'); local('shortFileName') = $NewFileName->removetrailing(#fileExtension)&; @@ -189,25 +267,19 @@ */ select(file_currenterror( -errorcode)); case(0); - $OrigFilePath != $NewFilePath ? $uploadResult = '201, \'' + $NewFilePath->split('/')->last + '\''; + $OrigFilePath != $NewFilePath ? $uploadResult = 201; case; - $uploadResult = '202'; + $uploadResult = file_currenterror( -errorcode); /select; /if; /if; - - - /*......................................................... - Set the HTML response. - */ - $__html_reply__ = '\ - - '; + fck_htmlreply( + -uploadResult=$uploadResult, + -NewFilePath=$NewFilePath + ); /select; /inline; - + /if; /*..................................................................... Send a custom header for xml responses. @@ -226,24 +298,25 @@ Keep-Alive: timeout=15, max=98 Connection: Keep-Alive Content-Type: text/xml; charset=utf-8 [//lasso - /header; +/header; - - /*................................................................. - Set the content type encoding for Lasso. - */ + /* + Set the content type encoding for Lasso. + */ content_type('text/xml; charset=utf-8'); - - /*................................................................. - Wrap the response as XML and output. - */ + /* + Wrap the response as XML and output. + */ $__html_reply__ = '\ - - -' + $commandData + ' - - '; +'; + + if($errorNumber != '102'); + $__html_reply__ += ''; + /if; + + $__html_reply__ += $commandData + ' +'; /if; ] diff --git a/phpgwapi/js/fckeditor/editor/filemanager/upload/lasso/upload.lasso b/phpgwapi/js/fckeditor/editor/filemanager/connectors/lasso/upload.lasso similarity index 82% rename from phpgwapi/js/fckeditor/editor/filemanager/upload/lasso/upload.lasso rename to phpgwapi/js/fckeditor/editor/filemanager/connectors/lasso/upload.lasso index 5b1c30d49b..2a41b7566c 100644 --- a/phpgwapi/js/fckeditor/editor/filemanager/upload/lasso/upload.lasso +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/lasso/upload.lasso @@ -1,7 +1,7 @@ -[//lasso +[//lasso /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -56,7 +56,6 @@ + action_param('CurrentFolder') ); - /*..................................................................... Custom tag sets the HTML response. */ @@ -77,6 +76,36 @@ ); $__html_reply__ = '\ '; exit ; } + 1; diff --git a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/perl/connector.cgi b/phpgwapi/js/fckeditor/editor/filemanager/connectors/perl/connector.cgi similarity index 89% rename from phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/perl/connector.cgi rename to phpgwapi/js/fckeditor/editor/filemanager/connectors/perl/connector.cgi index 5e36209a30..c4631573c7 100644 --- a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/perl/connector.cgi +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/perl/connector.cgi @@ -1,8 +1,8 @@ -#!/usr/bin/env perl +#!/usr/bin/env perl ##### # FCKeditor - The text editor for Internet - http://www.fckeditor.net -# Copyright (C) 2003-2007 Frederico Caldeira Knabben +# Copyright (C) 2003-2008 Frederico Caldeira Knabben # # == BEGIN LICENSE == # @@ -62,7 +62,7 @@ require 'upload_fck.pl'; ## # SECURITY: REMOVE/COMMENT THE FOLLOWING LINE TO ENABLE THIS CONNECTOR. ## -&SendError( 1, 'This connector is disabled. Please check the "editor/filemanager/browser/default/connectors/perl/connector.cgi" file' ) ; + &SendError( 1, 'This connector is disabled. Please check the "editor/filemanager/connectors/perl/connector.cgi" file' ) ; &read_input(); @@ -101,7 +101,7 @@ sub DoResponse } # Check for invalid folder paths (..) - if ( $sCurrentFolder =~ /\.\./ ) { + if ( $sCurrentFolder =~ /(?:\.\.|\\)/ ) { SendError( 102, "" ) ; } @@ -134,4 +134,3 @@ _HTML_HEAD_ exit ; } - diff --git a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/perl/io.pl b/phpgwapi/js/fckeditor/editor/filemanager/connectors/perl/io.pl similarity index 83% rename from phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/perl/io.pl rename to phpgwapi/js/fckeditor/editor/filemanager/connectors/perl/io.pl index b4e904301d..aa6cb367c4 100644 --- a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/perl/io.pl +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/perl/io.pl @@ -1,6 +1,6 @@ -##### +##### # FCKeditor - The text editor for Internet - http://www.fckeditor.net -# Copyright (C) 2003-2007 Frederico Caldeira Knabben +# Copyright (C) 2003-2008 Frederico Caldeira Knabben # # == BEGIN LICENSE == # @@ -87,9 +87,19 @@ sub CreateServerFolder } } if(!(-e $folderPath)) { - umask(000); - mkdir("$folderPath",0777); - chmod(0777,"$folderPath"); + if (defined $CHMOD_ON_FOLDER_CREATE && !$CHMOD_ON_FOLDER_CREATE) { + mkdir("$folderPath"); + } + else { + umask(000); + if (defined $CHMOD_ON_FOLDER_CREATE) { + mkdir("$folderPath",$CHMOD_ON_FOLDER_CREATE); + } + else { + mkdir("$folderPath",0777); + } + } + return(0); } else { return(1); diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/perl/upload.cgi b/phpgwapi/js/fckeditor/editor/filemanager/connectors/perl/upload.cgi new file mode 100644 index 0000000000..1efca61394 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/perl/upload.cgi @@ -0,0 +1,117 @@ +#!/usr/bin/env perl + +##### +# FCKeditor - The text editor for Internet - http://www.fckeditor.net +# Copyright (C) 2003-2008 Frederico Caldeira Knabben +# +# == BEGIN LICENSE == +# +# Licensed under the terms of any of the following licenses at your +# choice: +# +# - GNU General Public License Version 2 or later (the "GPL") +# http://www.gnu.org/licenses/gpl.html +# +# - GNU Lesser General Public License Version 2.1 or later (the "LGPL") +# http://www.gnu.org/licenses/lgpl.html +# +# - Mozilla Public License Version 1.1 or later (the "MPL") +# http://www.mozilla.org/MPL/MPL-1.1.html +# +# == END LICENSE == +# +# This is the File Manager Connector for Perl. +##### + +## +# ATTENTION: To enable this connector, look for the "SECURITY" comment in this file. +## + +## 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 'util.pl'; +require 'io.pl'; +require 'basexml.pl'; +require 'commands.pl'; +require 'upload_fck.pl'; + +## +# SECURITY: REMOVE/COMMENT THE FOLLOWING LINE TO ENABLE THIS CONNECTOR. +## + &SendUploadResults(1, '', '', 'This connector is disabled. Please check the "editor/filemanager/connectors/perl/upload.cgi" file' ) ; + + &read_input(); + + if($FORM{'ServerPath'} ne "") { + $GLOBALS{'UserFilesPath'} = $FORM{'ServerPath'}; + if(!($GLOBALS{'UserFilesPath'} =~ /\/$/)) { + $GLOBALS{'UserFilesPath'} .= '/' ; + } + } else { + $GLOBALS{'UserFilesPath'} = '/userfiles/'; + } + + # Map the "UserFiles" path to a local directory. + $rootpath = &GetRootPath(); + $GLOBALS{'UserFilesDirectory'} = $rootpath . $GLOBALS{'UserFilesPath'}; + + &DoResponse(); + +sub DoResponse +{ + # Get the main request information. + $sCommand = 'FileUpload'; #$FORM{'Command'}; + $sResourceType = $FORM{'Type'}; + $sCurrentFolder = $FORM{'CurrentFolder'}; + + if ($sResourceType eq '') { + $sResourceType = 'File' ; + } + if ($sCurrentFolder eq '') { + $sCurrentFolder = '/' ; + } + + # Check the current folder syntax (must begin and start with a slash). + if(!($sCurrentFolder =~ /\/$/)) { + $sCurrentFolder .= '/'; + } + if(!($sCurrentFolder =~ /^\//)) { + $sCurrentFolder = '/' . $sCurrentFolder; + } + + # Check for invalid folder paths (..) + if ( $sCurrentFolder =~ /(?:\.\.|\\)/ ) { + SendError( 102, "" ) ; + } + + # File Upload doesn't have to Return XML, so it must be intercepted before anything. + if($sCommand eq 'FileUpload') { + FileUpload($sResourceType,$sCurrentFolder); + return ; + } + +} diff --git a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/perl/upload_fck.pl b/phpgwapi/js/fckeditor/editor/filemanager/connectors/perl/upload_fck.pl similarity index 92% rename from phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/perl/upload_fck.pl rename to phpgwapi/js/fckeditor/editor/filemanager/connectors/perl/upload_fck.pl index 78590864f9..dad9bb8f83 100644 --- a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/perl/upload_fck.pl +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/perl/upload_fck.pl @@ -1,6 +1,6 @@ -##### +##### # FCKeditor - The text editor for Internet - http://www.fckeditor.net -# Copyright (C) 2003-2007 Frederico Caldeira Knabben +# Copyright (C) 2003-2008 Frederico Caldeira Knabben # # == BEGIN LICENSE == # @@ -28,6 +28,16 @@ $img_dir = './temp/'; # File size max(unit KB) $MAX_CONTENT_SIZE = 30000; +# After file is uploaded, sometimes it is required to change its permissions +# so that it was possible to access it at the later time. +# If possible, it is recommended to set more restrictive permissions, like 0755. +# Set to 0 to disable this feature. +$CHMOD_ON_UPLOAD = 0777; + +# See comments above. +# Used when creating folders that does not exist. +$CHMOD_ON_FOLDER_CREATE = 0755; + # Filelock (1=use,0=not use) $PM{'flock'} = '1'; @@ -124,9 +134,18 @@ eval("use File::Path;"); my ($FORM) = @_; - - mkdir($img_dir,0777); - chmod(0777,$img_dir); + if (defined $CHMOD_ON_FOLDER_CREATE && !$CHMOD_ON_FOLDER_CREATE) { + mkdir("$img_dir"); + } + else { + umask(000); + if (defined $CHMOD_ON_FOLDER_CREATE) { + mkdir("$img_dir",$CHMOD_ON_FOLDER_CREATE); + } + else { + mkdir("$img_dir",0777); + } + } undef $img_data_exists; undef @NEWFNAMES; diff --git a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/perl/util.pl b/phpgwapi/js/fckeditor/editor/filemanager/connectors/perl/util.pl similarity index 86% rename from phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/perl/util.pl rename to phpgwapi/js/fckeditor/editor/filemanager/connectors/perl/util.pl index 08bc5e5149..8d1220d6e2 100644 --- a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/perl/util.pl +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/perl/util.pl @@ -1,6 +1,6 @@ -##### +##### # FCKeditor - The text editor for Internet - http://www.fckeditor.net -# Copyright (C) 2003-2007 Frederico Caldeira Knabben +# Copyright (C) 2003-2008 Frederico Caldeira Knabben # # == BEGIN LICENSE == # @@ -57,4 +57,12 @@ sub specialchar_cnv return($ch); } +sub JS_cnv +{ + local($ch) = @_; + + $ch =~ s/\"/\\\"/g; #" + return($ch); +} + 1; diff --git a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/php/basexml.php b/phpgwapi/js/fckeditor/editor/filemanager/connectors/php/basexml.php similarity index 68% rename from phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/php/basexml.php rename to phpgwapi/js/fckeditor/editor/filemanager/connectors/php/basexml.php index 93943ee132..76b41581c2 100644 --- a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/php/basexml.php +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/php/basexml.php @@ -1,7 +1,7 @@ -' ; // Add the current folder node. - echo '' ; + echo '' ; + + $GLOBALS['HeaderSent'] = true ; } function CreateXmlFooter() @@ -63,13 +65,29 @@ function CreateXmlFooter() function SendError( $number, $text ) { - SetXmlHeaders() ; + if ( isset( $GLOBALS['HeaderSent'] ) && $GLOBALS['HeaderSent'] ) + { + SendErrorNode( $number, $text ) ; + CreateXmlFooter() ; + } + else + { + SetXmlHeaders() ; - // Create the XML document header - echo '' ; + // Create the XML document header + echo '' ; - echo '' ; + echo '' ; + SendErrorNode( $number, $text ) ; + + echo '' ; + } exit ; } -?> \ No newline at end of file + +function SendErrorNode( $number, $text ) +{ + echo '' ; +} +?> diff --git a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/php/commands.php b/phpgwapi/js/fckeditor/editor/filemanager/connectors/php/commands.php similarity index 63% rename from phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/php/commands.php rename to phpgwapi/js/fckeditor/editor/filemanager/connectors/php/commands.php index 4d530faa0d..382fc1970e 100644 --- a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/php/commands.php +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/php/commands.php @@ -1,7 +1,7 @@ -' ; else { - $iFileSize = filesize( $sServerDir . $sFile ) ; + $iFileSize = @filesize( $sServerDir . $sFile ) ; + if ( !$iFileSize ) { + $iFileSize = 0 ; + } if ( $iFileSize > 0 ) { $iFileSize = round( $iFileSize / 1024 ) ; @@ -103,19 +106,23 @@ function GetFoldersAndFiles( $resourceType, $currentFolder ) function CreateFolder( $resourceType, $currentFolder ) { + if (!isset($_GET)) { + global $_GET; + } $sErrorNumber = '0' ; $sErrorMsg = '' ; if ( isset( $_GET['NewFolderName'] ) ) { $sNewFolderName = $_GET['NewFolderName'] ; + $sNewFolderName = SanitizeFolderName( $sNewFolderName ) ; if ( strpos( $sNewFolderName, '..' ) !== FALSE ) $sErrorNumber = '102' ; // Invalid folder name. else { // Map the virtual path to the local server path of the current folder. - $sServerDir = ServerMapFolder( $resourceType, $currentFolder ) ; + $sServerDir = ServerMapFolder( $resourceType, $currentFolder, 'CreateFolder' ) ; if ( is_writable( $sServerDir ) ) { @@ -148,8 +155,11 @@ function CreateFolder( $resourceType, $currentFolder ) echo '' ; } -function FileUpload( $resourceType, $currentFolder ) +function FileUpload( $resourceType, $currentFolder, $sCommand ) { + if (!isset($_FILES)) { + global $_FILES; + } $sErrorNumber = '0' ; $sFileName = '' ; @@ -160,14 +170,11 @@ function FileUpload( $resourceType, $currentFolder ) $oFile = $_FILES['NewFile'] ; // Map the virtual path to the local server path. - $sServerDir = ServerMapFolder( $resourceType, $currentFolder ) ; + $sServerDir = ServerMapFolder( $resourceType, $currentFolder, $sCommand ) ; // Get the uploaded file name. $sFileName = $oFile['name'] ; - - // Replace dots in the name with underscores (only one dot can be there... security issue). - if ( $Config['ForceSingleExtension'] ) - $sFileName = preg_replace( '/\\.(?![^.]*$)/', '_', $sFileName ) ; + $sFileName = SanitizeFileName( $sFileName ) ; $sOriginalFileName = $sFileName ; @@ -175,10 +182,25 @@ function FileUpload( $resourceType, $currentFolder ) $sExtension = substr( $sFileName, ( strrpos($sFileName, '.') + 1 ) ) ; $sExtension = strtolower( $sExtension ) ; - $arAllowed = $Config['AllowedExtensions'][$resourceType] ; - $arDenied = $Config['DeniedExtensions'][$resourceType] ; + if ( isset( $Config['SecureImageUploads'] ) ) + { + if ( ( $isImageValid = IsImageValid( $oFile['tmp_name'], $sExtension ) ) === false ) + { + $sErrorNumber = '202' ; + } + } - if ( ( count($arAllowed) == 0 || in_array( $sExtension, $arAllowed ) ) && ( count($arDenied) == 0 || !in_array( $sExtension, $arDenied ) ) ) + if ( isset( $Config['HtmlExtensions'] ) ) + { + if ( !IsHtmlExtension( $sExtension, $Config['HtmlExtensions'] ) && + ( $detectHtml = DetectHtml( $oFile['tmp_name'] ) ) === true ) + { + $sErrorNumber = '202' ; + } + } + + // Check if it is an allowed extension. + if ( !$sErrorNumber && IsAllowedExt( $sExtension, $resourceType ) ) { $iCounter = 0 ; @@ -198,14 +220,41 @@ function FileUpload( $resourceType, $currentFolder ) if ( is_file( $sFilePath ) ) { + if ( isset( $Config['ChmodOnUpload'] ) && !$Config['ChmodOnUpload'] ) + { + break ; + } + + $permissions = 0777; + + if ( isset( $Config['ChmodOnUpload'] ) && $Config['ChmodOnUpload'] ) + { + $permissions = $Config['ChmodOnUpload'] ; + } + $oldumask = umask(0) ; - chmod( $sFilePath, 0777 ) ; + chmod( $sFilePath, $permissions ) ; umask( $oldumask ) ; } break ; } } + + if ( file_exists( $sFilePath ) ) + { + //previous checks failed, try once again + if ( isset( $isImageValid ) && $isImageValid === -1 && IsImageValid( $sFilePath, $sExtension ) === false ) + { + @unlink( $sFilePath ) ; + $sErrorNumber = '202' ; + } + else if ( isset( $detectHtml ) && $detectHtml === -1 && DetectHtml( $sFilePath ) === true ) + { + @unlink( $sFilePath ) ; + $sErrorNumber = '202' ; + } + } } else $sErrorNumber = '202' ; @@ -213,10 +262,12 @@ function FileUpload( $resourceType, $currentFolder ) else $sErrorNumber = '202' ; - echo '' ; + + $sFileUrl = CombinePaths( GetResourceTypePath( $resourceType, $sCommand ) , $currentFolder ) ; + $sFileUrl = CombinePaths( $sFileUrl, $sFileName ) ; + + SendUploadResults( $sErrorNumber, $sFileUrl, $sFileName ) ; exit ; } -?> \ No newline at end of file +?> diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/php/config.php b/phpgwapi/js/fckeditor/editor/filemanager/connectors/php/config.php new file mode 100644 index 0000000000..6ed4aa7759 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/php/config.php @@ -0,0 +1,172 @@ + array( + 'currentapp' => 'home', + 'noheader' => true, + 'autocreate_session_callback' => 'deny_no_egw_session', + ) +); +// will not continue, unless the header get's included and there is a valid eGW session +require('../../../../../../../header.inc.php'); + +if ($GLOBALS['egw']->session->session_flags == 'N' && // allow only non anonymous sessions, + ($app=$GLOBALS['egw']->session->appsession($_GET['ServerPath'],'FCKeditor')) && // check if path is stored in the session and + isset($GLOBALS['egw_info']['user']['apps'][$app])) // user has access to the stored application (as we can only check of home above) +{ + $Config['UserFilesPath'] = $_GET['ServerPath']; + $Config['Enabled'] = true; +} +else +// Path to user files relative to the document root. +$Config['UserFilesPath'] = '/userfiles/' ; + +// Fill the following value it you prefer to specify the absolute path for the +// user files directory. Useful if you are using a virtual directory, symbolic +// link or alias. Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'. +// Attention: The above 'UserFilesPath' must point to the same directory. +$Config['UserFilesAbsolutePath'] = '' ; + +// Due to security issues with Apache modules, it is recommended to leave the +// following setting enabled. +$Config['ForceSingleExtension'] = true ; + +// Perform additional checks for image files. +// If set to true, validate image size (using getimagesize). +$Config['SecureImageUploads'] = true; + +// What the user can do with this connector. +$Config['ConfigAllowedCommands'] = array('QuickUpload', 'FileUpload', 'GetFolders', 'GetFoldersAndFiles', 'CreateFolder') ; + +// Allowed Resource Types. +$Config['ConfigAllowedTypes'] = array('Image');//array('File', 'Image', 'Flash', 'Media') ; + +// For security, HTML is allowed in the first Kb of data for files having the +// following extensions only. +$Config['HtmlExtensions'] = array("html", "htm", "xml", "xsd", "txt", "js") ; + +// After file is uploaded, sometimes it is required to change its permissions +// so that it was possible to access it at the later time. +// If possible, it is recommended to set more restrictive permissions, like 0755. +// Set to 0 to disable this feature. +// Note: not needed on Windows-based servers. +$Config['ChmodOnUpload'] = 0777 ; + +// See comments above. +// Used when creating folders that does not exist. +$Config['ChmodOnFolderCreate'] = 0777 ; + +/* + Configuration settings for each Resource Type + + - AllowedExtensions: the possible extensions that can be allowed. + If it is empty then any file type can be uploaded. + - DeniedExtensions: The extensions that won't be allowed. + If it is empty then no restrictions are done here. + + For a file to be uploaded it has to fulfill both the AllowedExtensions + and DeniedExtensions (that's it: not being denied) conditions. + + - FileTypesPath: the virtual folder relative to the document root where + these resources will be located. + Attention: It must start and end with a slash: '/' + + - FileTypesAbsolutePath: the physical path to the above folder. It must be + an absolute path. + If it's an empty string then it will be autocalculated. + Useful if you are using a virtual directory, symbolic link or alias. + Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'. + Attention: The above 'FileTypesPath' must point to the same directory. + Attention: It must end with a slash: '/' + + - QuickUploadPath: the virtual folder relative to the document root where + these resources will be uploaded using the Upload tab in the resources + dialogs. + Attention: It must start and end with a slash: '/' + + - QuickUploadAbsolutePath: the physical path to the above folder. It must be + an absolute path. + If it's an empty string then it will be autocalculated. + Useful if you are using a virtual directory, symbolic link or alias. + Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'. + Attention: The above 'QuickUploadPath' must point to the same directory. + Attention: It must end with a slash: '/' + + NOTE: by default, QuickUploadPath and QuickUploadAbsolutePath point to + "userfiles" directory to maintain backwards compatibility with older versions of FCKeditor. + This is fine, but you in some cases you will be not able to browse uploaded files using file browser. + Example: if you click on "image button", select "Upload" tab and send image + to the server, image will appear in FCKeditor correctly, but because it is placed + directly in /userfiles/ directory, you'll be not able to see it in built-in file browser. + The more expected behaviour would be to send images directly to "image" subfolder. + To achieve that, simply change + $Config['QuickUploadPath']['Image'] = $Config['UserFilesPath'] ; + $Config['QuickUploadAbsolutePath']['Image'] = $Config['UserFilesAbsolutePath'] ; + into: + $Config['QuickUploadPath']['Image'] = $Config['FileTypesPath']['Image'] ; + $Config['QuickUploadAbsolutePath']['Image'] = $Config['FileTypesAbsolutePath']['Image'] ; + +*/ + +$Config['AllowedExtensions']['File'] = array('7z', 'aiff', 'asf', 'avi', 'bmp', 'csv', 'doc', 'fla', 'flv', 'gif', 'gz', 'gzip', 'jpeg', 'jpg', 'mid', 'mov', 'mp3', 'mp4', 'mpc', 'mpeg', 'mpg', 'ods', 'odt', 'pdf', 'png', 'ppt', 'pxd', 'qt', 'ram', 'rar', 'rm', 'rmi', 'rmvb', 'rtf', 'sdc', 'sitd', 'swf', 'sxc', 'sxw', 'tar', 'tgz', 'tif', 'tiff', 'txt', 'vsd', 'wav', 'wma', 'wmv', 'xls', 'xml', 'zip') ; +$Config['DeniedExtensions']['File'] = array() ; +$Config['FileTypesPath']['File'] = $Config['UserFilesPath'] . 'file/' ; +$Config['FileTypesAbsolutePath']['File']= ($Config['UserFilesAbsolutePath'] == '') ? '' : $Config['UserFilesAbsolutePath'].'file/' ; +$Config['QuickUploadPath']['File'] = $Config['UserFilesPath'] ; +$Config['QuickUploadAbsolutePath']['File']= $Config['UserFilesAbsolutePath'] ; + +$Config['AllowedExtensions']['Image'] = array('bmp','gif','jpeg','jpg','png') ; +$Config['DeniedExtensions']['Image'] = array() ; +$Config['FileTypesPath']['Image'] = $Config['UserFilesPath']; // . 'image/' ; +$Config['FileTypesAbsolutePath']['Image']= ($Config['UserFilesAbsolutePath'] == '') ? '' : $Config['UserFilesAbsolutePath'].'image/' ; +$Config['QuickUploadPath']['Image'] = $Config['UserFilesPath'] ; +$Config['QuickUploadAbsolutePath']['Image']= $Config['UserFilesAbsolutePath'] ; + +$Config['AllowedExtensions']['Flash'] = array('swf','flv') ; +$Config['DeniedExtensions']['Flash'] = array() ; +$Config['FileTypesPath']['Flash'] = $Config['UserFilesPath'] . 'flash/' ; +$Config['FileTypesAbsolutePath']['Flash']= ($Config['UserFilesAbsolutePath'] == '') ? '' : $Config['UserFilesAbsolutePath'].'flash/' ; +$Config['QuickUploadPath']['Flash'] = $Config['UserFilesPath'] ; +$Config['QuickUploadAbsolutePath']['Flash']= $Config['UserFilesAbsolutePath'] ; + +$Config['AllowedExtensions']['Media'] = array('aiff', 'asf', 'avi', 'bmp', 'fla', 'flv', 'gif', 'jpeg', 'jpg', 'mid', 'mov', 'mp3', 'mp4', 'mpc', 'mpeg', 'mpg', 'png', 'qt', 'ram', 'rm', 'rmi', 'rmvb', 'swf', 'tif', 'tiff', 'wav', 'wma', 'wmv') ; +$Config['DeniedExtensions']['Media'] = array() ; +$Config['FileTypesPath']['Media'] = $Config['UserFilesPath'] . 'media/' ; +$Config['FileTypesAbsolutePath']['Media']= ($Config['UserFilesAbsolutePath'] == '') ? '' : $Config['UserFilesAbsolutePath'].'media/' ; +$Config['QuickUploadPath']['Media'] = $Config['UserFilesPath'] ; +$Config['QuickUploadAbsolutePath']['Media']= $Config['UserFilesAbsolutePath'] ; + +?> diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/php/connector.php b/phpgwapi/js/fckeditor/editor/filemanager/connectors/php/connector.php new file mode 100644 index 0000000000..d6373ac94c --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/php/connector.php @@ -0,0 +1,87 @@ + diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/php/io.php b/phpgwapi/js/fckeditor/editor/filemanager/connectors/php/io.php new file mode 100644 index 0000000000..b6482820ba --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/php/io.php @@ -0,0 +1,320 @@ + 0 ) + return $Config['QuickUploadAbsolutePath'][$resourceType] ; + + // Map the "UserFiles" path to a local directory. + return Server_MapPath( $Config['QuickUploadPath'][$resourceType] ) ; + } + else + { + if ( strlen( $Config['FileTypesAbsolutePath'][$resourceType] ) > 0 ) + return $Config['FileTypesAbsolutePath'][$resourceType] ; + + // Map the "UserFiles" path to a local directory. + return Server_MapPath( $Config['FileTypesPath'][$resourceType] ) ; + } +} + +function GetUrlFromPath( $resourceType, $folderPath, $sCommand ) +{ + return CombinePaths( GetResourceTypePath( $resourceType, $sCommand ), $folderPath ) ; +} + +function RemoveExtension( $fileName ) +{ + return substr( $fileName, 0, strrpos( $fileName, '.' ) ) ; +} + +function ServerMapFolder( $resourceType, $folderPath, $sCommand ) +{ + // Get the resource type directory. + $sResourceTypePath = GetResourceTypeDirectory( $resourceType, $sCommand ) ; + + // Ensure that the directory exists. + $sErrorMsg = CreateServerFolder( $sResourceTypePath ) ; + if ( $sErrorMsg != '' ) + SendError( 1, "Error creating folder \"{$sResourceTypePath}\" ({$sErrorMsg})" ) ; + + // Return the resource type directory combined with the required path. + return CombinePaths( $sResourceTypePath , $folderPath ) ; +} + +function GetParentFolder( $folderPath ) +{ + $sPattern = "-[/\\\\][^/\\\\]+[/\\\\]?$-" ; + return preg_replace( $sPattern, '', $folderPath ) ; +} + +function CreateServerFolder( $folderPath, $lastFolder = null ) +{ + global $Config ; + $sParent = GetParentFolder( $folderPath ) ; + + // Ensure the folder path has no double-slashes, or mkdir may fail on certain platforms + while ( strpos($folderPath, '//') !== false ) + { + $folderPath = str_replace( '//', '/', $folderPath ) ; + } + + // Check if the parent exists, or create it. + if ( !file_exists( $sParent ) ) + { + //prevents agains infinite loop when we can't create root folder + if ( !is_null( $lastFolder ) && $lastFolder === $sParent) { + return "Can't create $folderPath directory" ; + } + + $sErrorMsg = CreateServerFolder( $sParent, $folderPath ) ; + if ( $sErrorMsg != '' ) + return $sErrorMsg ; + } + + if ( !file_exists( $folderPath ) ) + { + // Turn off all error reporting. + error_reporting( 0 ) ; + + $php_errormsg = '' ; + // Enable error tracking to catch the error. + ini_set( 'track_errors', '1' ) ; + + if ( isset( $Config['ChmodOnFolderCreate'] ) && !$Config['ChmodOnFolderCreate'] ) + { + mkdir( $folderPath ) ; + } + else + { + $permissions = 0777 ; + if ( isset( $Config['ChmodOnFolderCreate'] ) ) + { + $permissions = $Config['ChmodOnFolderCreate'] ; + } + // To create the folder with 0777 permissions, we need to set umask to zero. + $oldumask = umask(0) ; + mkdir( $folderPath, $permissions ) ; + umask( $oldumask ) ; + } + + $sErrorMsg = $php_errormsg ; + + // Restore the configurations. + ini_restore( 'track_errors' ) ; + ini_restore( 'error_reporting' ) ; + + return $sErrorMsg ; + } + else + return '' ; +} + +function GetRootPath() +{ + if (!isset($_SERVER)) { + global $_SERVER; + } + $sRealPath = realpath( './' ) ; + + $sSelfPath = $_SERVER['PHP_SELF'] ; + $sSelfPath = substr( $sSelfPath, 0, strrpos( $sSelfPath, '/' ) ) ; + + $sSelfPath = str_replace( '/', DIRECTORY_SEPARATOR, $sSelfPath ) ; + + $position = strpos( $sRealPath, $sSelfPath ) ; + + // This can check only that this script isn't run from a virtual dir + // But it avoids the problems that arise if it isn't checked + if ( $position === false || $position <> strlen( $sRealPath ) - strlen( $sSelfPath ) ) + SendError( 1, 'Sorry, can\'t map "UserFilesPath" to a physical path. You must set the "UserFilesAbsolutePath" value in "editor/filemanager/connectors/php/config.php".' ) ; + + return substr( $sRealPath, 0, $position ) ; +} + +// Emulate the asp Server.mapPath function. +// given an url path return the physical directory that it corresponds to +function Server_MapPath( $path ) +{ + // This function is available only for Apache + if ( function_exists( 'apache_lookup_uri' ) ) + { + $info = apache_lookup_uri( $path ) ; + return str_replace(array('/index.html','/index.php'),'',$info->filename) . $info->path_info ; + } + + // This isn't correct but for the moment there's no other solution + // If this script is under a virtual directory or symlink it will detect the problem and stop + return GetRootPath() . $path ; +} + +function IsAllowedExt( $sExtension, $resourceType ) +{ + global $Config ; + // Get the allowed and denied extensions arrays. + $arAllowed = $Config['AllowedExtensions'][$resourceType] ; + $arDenied = $Config['DeniedExtensions'][$resourceType] ; + + if ( count($arAllowed) > 0 && !in_array( $sExtension, $arAllowed ) ) + return false ; + + if ( count($arDenied) > 0 && in_array( $sExtension, $arDenied ) ) + return false ; + + return true ; +} + +function IsAllowedType( $resourceType ) +{ + global $Config ; + if ( !in_array( $resourceType, $Config['ConfigAllowedTypes'] ) ) + return false ; + + return true ; +} + +function IsAllowedCommand( $sCommand ) +{ + global $Config ; + + if ( !in_array( $sCommand, $Config['ConfigAllowedCommands'] ) ) + return false ; + + return true ; +} + +function GetCurrentFolder() +{ + if (!isset($_GET)) { + global $_GET; + } + $sCurrentFolder = isset( $_GET['CurrentFolder'] ) ? $_GET['CurrentFolder'] : '/' ; + + // Check the current folder syntax (must begin and start with a slash). + if ( !preg_match( '|/$|', $sCurrentFolder ) ) + $sCurrentFolder .= '/' ; + if ( strpos( $sCurrentFolder, '/' ) !== 0 ) + $sCurrentFolder = '/' . $sCurrentFolder ; + + // Ensure the folder path has no double-slashes + while ( strpos ($sCurrentFolder, '//') !== false ) { + $sCurrentFolder = str_replace ('//', '/', $sCurrentFolder) ; + } + + // Check for invalid folder paths (..) + if ( strpos( $sCurrentFolder, '..' ) || strpos( $sCurrentFolder, "\\" )) + SendError( 102, '' ) ; + + return $sCurrentFolder ; +} + +// Do a cleanup of the folder name to avoid possible problems +function SanitizeFolderName( $sNewFolderName ) +{ + $sNewFolderName = stripslashes( $sNewFolderName ) ; + + // Remove . \ / | : ? * " < > + $sNewFolderName = preg_replace( '/\\.|\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|[[:cntrl:]]/', '_', $sNewFolderName ) ; + + return $sNewFolderName ; +} + +// Do a cleanup of the file name to avoid possible problems +function SanitizeFileName( $sNewFileName ) +{ + global $Config ; + + $sNewFileName = stripslashes( $sNewFileName ) ; + + // Replace dots in the name with underscores (only one dot can be there... security issue). + if ( $Config['ForceSingleExtension'] ) + $sNewFileName = preg_replace( '/\\.(?![^.]*$)/', '_', $sNewFileName ) ; + + // Remove \ / | : ? * " < > + $sNewFileName = preg_replace( '/\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|[[:cntrl:]]/', '_', $sNewFileName ) ; + + return $sNewFileName ; +} + +// This is the function that sends the results of the uploading process. +function SendUploadResults( $errorNumber, $fileUrl = '', $fileName = '', $customMsg = '' ) +{ + echo << +(function() +{ + var d = document.domain ; + + while ( true ) + { + // Test if we can access a parent property. + try + { + var test = window.top.opener.document.domain ; + break ; + } + catch( e ) {} + + // Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ... + d = d.replace( /.*?(?:\.|$)/, '' ) ; + + if ( d.length == 0 ) + break ; // It was not able to detect the domain. + + try + { + document.domain = d ; + } + catch (e) + { + break ; + } + } +})() ; + +EOF; + $rpl = array( '\\' => '\\\\', '"' => '\\"' ) ; + echo 'window.parent.OnUploadCompleted(' . $errorNumber . ',"' . strtr( $fileUrl, $rpl ) . '","' . strtr( $fileName, $rpl ) . '", "' . strtr( $customMsg, $rpl ) . '") ;' ; + echo '' ; + exit ; +} + +?> diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/php/phpcompat.php b/phpgwapi/js/fckeditor/editor/filemanager/connectors/php/phpcompat.php new file mode 100644 index 0000000000..6fc89e5931 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/php/phpcompat.php @@ -0,0 +1,17 @@ + diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/php/util.php b/phpgwapi/js/fckeditor/editor/filemanager/connectors/php/util.php new file mode 100644 index 0000000000..30dc6c0466 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/php/util.php @@ -0,0 +1,220 @@ + $val ) + { + $lcaseHtmlExtensions[$key] = strtolower( $val ) ; + } + return in_array( $ext, $lcaseHtmlExtensions ) ; +} + +/** + * Detect HTML in the first KB to prevent against potential security issue with + * IE/Safari/Opera file type auto detection bug. + * Returns true if file contain insecure HTML code at the beginning. + * + * @param string $filePath absolute path to file + * @return boolean + */ +function DetectHtml( $filePath ) +{ + $fp = @fopen( $filePath, 'rb' ) ; + + //open_basedir restriction, see #1906 + if ( $fp === false || !flock( $fp, LOCK_SH ) ) + { + return -1 ; + } + + $chunk = fread( $fp, 1024 ) ; + flock( $fp, LOCK_UN ) ; + fclose( $fp ) ; + + $chunk = strtolower( $chunk ) ; + + if (!$chunk) + { + return false ; + } + + $chunk = trim( $chunk ) ; + + if ( preg_match( "/= 4.0.7 + if ( function_exists( 'version_compare' ) ) { + $sCurrentVersion = phpversion(); + if ( version_compare( $sCurrentVersion, "4.2.0" ) >= 0 ) { + $imageCheckExtensions[] = "tiff"; + $imageCheckExtensions[] = "tif"; + } + if ( version_compare( $sCurrentVersion, "4.3.0" ) >= 0 ) { + $imageCheckExtensions[] = "swc"; + } + if ( version_compare( $sCurrentVersion, "4.3.2" ) >= 0 ) { + $imageCheckExtensions[] = "jpc"; + $imageCheckExtensions[] = "jp2"; + $imageCheckExtensions[] = "jpx"; + $imageCheckExtensions[] = "jb2"; + $imageCheckExtensions[] = "xbm"; + $imageCheckExtensions[] = "wbmp"; + } + } + + if ( !in_array( $extension, $imageCheckExtensions ) ) { + return true; + } + + if ( @getimagesize( $filePath ) === false ) { + return false ; + } + + return true; +} + +?> diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/config.py b/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/config.py new file mode 100644 index 0000000000..094800dcb6 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/config.py @@ -0,0 +1,146 @@ +#!/usr/bin/env python +""" + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Configuration file for the File Manager Connector for Python +""" + +# INSTALLATION NOTE: You must set up your server environment accordingly to run +# python scripts. This connector requires Python 2.4 or greater. +# +# Supported operation modes: +# * WSGI (recommended): You'll need apache + mod_python + modpython_gateway +# or any web server capable of the WSGI python standard +# * Plain Old CGI: Any server capable of running standard python scripts +# (although mod_python is recommended for performance) +# This was the previous connector version operation mode +# +# If you're using Apache web server, replace the htaccess.txt to to .htaccess, +# and set the proper options and paths. +# For WSGI and mod_python, you may need to download modpython_gateway from: +# http://projects.amor.org/misc/svn/modpython_gateway.py and copy it in this +# directory. + + +# SECURITY: You must explicitly enable this "connector". (Set it to "True"). +# WARNING: don't just set "ConfigIsEnabled = True", you must be sure that only +# authenticated users can access this file or use some kind of session checking. +Enabled = False + +# Path to user files relative to the document root. +UserFilesPath = '/userfiles/' + +# Fill the following value it you prefer to specify the absolute path for the +# user files directory. Useful if you are using a virtual directory, symbolic +# link or alias. Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'. +# Attention: The above 'UserFilesPath' must point to the same directory. +# WARNING: GetRootPath may not work in virtual or mod_python configurations, and +# may not be thread safe. Use this configuration parameter instead. +UserFilesAbsolutePath = '' + +# Due to security issues with Apache modules, it is recommended to leave the +# following setting enabled. +ForceSingleExtension = True + +# What the user can do with this connector +ConfigAllowedCommands = [ 'QuickUpload', 'FileUpload', 'GetFolders', 'GetFoldersAndFiles', 'CreateFolder' ] + +# Allowed Resource Types +ConfigAllowedTypes = ['File', 'Image', 'Flash', 'Media'] + +# After file is uploaded, sometimes it is required to change its permissions +# so that it was possible to access it at the later time. +# If possible, it is recommended to set more restrictive permissions, like 0755. +# Set to 0 to disable this feature. +# Note: not needed on Windows-based servers. +ChmodOnUpload = 0755 + +# See comments above. +# Used when creating folders that does not exist. +ChmodOnFolderCreate = 0755 + +# Do not touch this 3 lines, see "Configuration settings for each Resource Type" +AllowedExtensions = {}; DeniedExtensions = {}; +FileTypesPath = {}; FileTypesAbsolutePath = {}; +QuickUploadPath = {}; QuickUploadAbsolutePath = {}; + +# Configuration settings for each Resource Type +# +# - AllowedExtensions: the possible extensions that can be allowed. +# If it is empty then any file type can be uploaded. +# - DeniedExtensions: The extensions that won't be allowed. +# If it is empty then no restrictions are done here. +# +# For a file to be uploaded it has to fulfill both the AllowedExtensions +# and DeniedExtensions (that's it: not being denied) conditions. +# +# - FileTypesPath: the virtual folder relative to the document root where +# these resources will be located. +# Attention: It must start and end with a slash: '/' +# +# - FileTypesAbsolutePath: the physical path to the above folder. It must be +# an absolute path. +# If it's an empty string then it will be autocalculated. +# Useful if you are using a virtual directory, symbolic link or alias. +# Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'. +# Attention: The above 'FileTypesPath' must point to the same directory. +# Attention: It must end with a slash: '/' +# +# +# - QuickUploadPath: the virtual folder relative to the document root where +# these resources will be uploaded using the Upload tab in the resources +# dialogs. +# Attention: It must start and end with a slash: '/' +# +# - QuickUploadAbsolutePath: the physical path to the above folder. It must be +# an absolute path. +# If it's an empty string then it will be autocalculated. +# Useful if you are using a virtual directory, symbolic link or alias. +# Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'. +# Attention: The above 'QuickUploadPath' must point to the same directory. +# Attention: It must end with a slash: '/' + +AllowedExtensions['File'] = ['7z','aiff','asf','avi','bmp','csv','doc','fla','flv','gif','gz','gzip','jpeg','jpg','mid','mov','mp3','mp4','mpc','mpeg','mpg','ods','odt','pdf','png','ppt','pxd','qt','ram','rar','rm','rmi','rmvb','rtf','sdc','sitd','swf','sxc','sxw','tar','tgz','tif','tiff','txt','vsd','wav','wma','wmv','xls','xml','zip'] +DeniedExtensions['File'] = [] +FileTypesPath['File'] = UserFilesPath + 'file/' +FileTypesAbsolutePath['File'] = (not UserFilesAbsolutePath == '') and (UserFilesAbsolutePath + 'file/') or '' +QuickUploadPath['File'] = FileTypesPath['File'] +QuickUploadAbsolutePath['File'] = FileTypesAbsolutePath['File'] + +AllowedExtensions['Image'] = ['bmp','gif','jpeg','jpg','png'] +DeniedExtensions['Image'] = [] +FileTypesPath['Image'] = UserFilesPath + 'image/' +FileTypesAbsolutePath['Image'] = (not UserFilesAbsolutePath == '') and UserFilesAbsolutePath + 'image/' or '' +QuickUploadPath['Image'] = FileTypesPath['Image'] +QuickUploadAbsolutePath['Image']= FileTypesAbsolutePath['Image'] + +AllowedExtensions['Flash'] = ['swf','flv'] +DeniedExtensions['Flash'] = [] +FileTypesPath['Flash'] = UserFilesPath + 'flash/' +FileTypesAbsolutePath['Flash'] = ( not UserFilesAbsolutePath == '') and UserFilesAbsolutePath + 'flash/' or '' +QuickUploadPath['Flash'] = FileTypesPath['Flash'] +QuickUploadAbsolutePath['Flash']= FileTypesAbsolutePath['Flash'] + +AllowedExtensions['Media'] = ['aiff','asf','avi','bmp','fla', 'flv','gif','jpeg','jpg','mid','mov','mp3','mp4','mpc','mpeg','mpg','png','qt','ram','rm','rmi','rmvb','swf','tif','tiff','wav','wma','wmv'] +DeniedExtensions['Media'] = [] +FileTypesPath['Media'] = UserFilesPath + 'media/' +FileTypesAbsolutePath['Media'] = ( not UserFilesAbsolutePath == '') and UserFilesAbsolutePath + 'media/' or '' +QuickUploadPath['Media'] = FileTypesPath['Media'] +QuickUploadAbsolutePath['Media']= FileTypesAbsolutePath['Media'] diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/connector.py b/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/connector.py new file mode 100644 index 0000000000..e3a4c20aa3 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/connector.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python + +""" +FCKeditor - The text editor for Internet - http://www.fckeditor.net +Copyright (C) 2003-2008 Frederico Caldeira Knabben + +== BEGIN LICENSE == + +Licensed under the terms of any of the following licenses at your +choice: + + - GNU General Public License Version 2 or later (the "GPL") + http://www.gnu.org/licenses/gpl.html + + - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + http://www.gnu.org/licenses/lgpl.html + + - Mozilla Public License Version 1.1 or later (the "MPL") + http://www.mozilla.org/MPL/MPL-1.1.html + +== END LICENSE == + +Connector for Python (CGI and WSGI). + +See config.py for configuration settings + +""" +import os + +from fckutil import * +from fckcommands import * # default command's implementation +from fckoutput import * # base http, xml and html output mixins +from fckconnector import FCKeditorConnectorBase # import base connector +import config as Config + +class FCKeditorConnector( FCKeditorConnectorBase, + GetFoldersCommandMixin, + GetFoldersAndFilesCommandMixin, + CreateFolderCommandMixin, + UploadFileCommandMixin, + BaseHttpMixin, BaseXmlMixin, BaseHtmlMixin ): + "The Standard connector class." + def doResponse(self): + "Main function. Process the request, set headers and return a string as response." + s = "" + # Check if this connector is disabled + if not(Config.Enabled): + return self.sendError(1, "This connector is disabled. Please check the connector configurations in \"editor/filemanager/connectors/py/config.py\" and try again.") + # Make sure we have valid inputs + for key in ("Command","Type","CurrentFolder"): + if not self.request.has_key (key): + return + # Get command, resource type and current folder + command = self.request.get("Command") + resourceType = self.request.get("Type") + currentFolder = getCurrentFolder(self.request.get("CurrentFolder")) + # Check for invalid paths + if currentFolder is None: + return self.sendError(102, "") + + # Check if it is an allowed command + if ( not command in Config.ConfigAllowedCommands ): + return self.sendError( 1, 'The %s command isn\'t allowed' % command ) + + if ( not resourceType in Config.ConfigAllowedTypes ): + return self.sendError( 1, 'Invalid type specified' ) + + # Setup paths + if command == "QuickUpload": + self.userFilesFolder = Config.QuickUploadAbsolutePath[resourceType] + self.webUserFilesFolder = Config.QuickUploadPath[resourceType] + else: + self.userFilesFolder = Config.FileTypesAbsolutePath[resourceType] + self.webUserFilesFolder = Config.FileTypesPath[resourceType] + + if not self.userFilesFolder: # no absolute path given (dangerous...) + self.userFilesFolder = mapServerPath(self.environ, + self.webUserFilesFolder) + # Ensure that the directory exists. + if not os.path.exists(self.userFilesFolder): + try: + self.createServerFoldercreateServerFolder( self.userFilesFolder ) + except: + return self.sendError(1, "This connector couldn\'t access to local user\'s files directories. Please check the UserFilesAbsolutePath in \"editor/filemanager/connectors/py/config.py\" and try again. ") + + # File upload doesn't have to return XML, so intercept here + if (command == "FileUpload"): + return self.uploadFile(resourceType, currentFolder) + + # Create Url + url = combinePaths( self.webUserFilesFolder, currentFolder ) + + # Begin XML + s += self.createXmlHeader(command, resourceType, currentFolder, url) + # Execute the command + selector = {"GetFolders": self.getFolders, + "GetFoldersAndFiles": self.getFoldersAndFiles, + "CreateFolder": self.createFolder, + } + s += selector[command](resourceType, currentFolder) + s += self.createXmlFooter() + return s + +# Running from command line (plain old CGI) +if __name__ == '__main__': + try: + # Create a Connector Instance + conn = FCKeditorConnector() + data = conn.doResponse() + for header in conn.headers: + print '%s: %s' % header + print + print data + except: + print "Content-Type: text/plain" + print + import cgi + cgi.print_exception() diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/fckcommands.py b/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/fckcommands.py new file mode 100644 index 0000000000..0f4f8eb33a --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/fckcommands.py @@ -0,0 +1,198 @@ +#!/usr/bin/env python + +""" +FCKeditor - The text editor for Internet - http://www.fckeditor.net +Copyright (C) 2003-2008 Frederico Caldeira Knabben + +== BEGIN LICENSE == + +Licensed under the terms of any of the following licenses at your +choice: + +- GNU General Public License Version 2 or later (the "GPL") +http://www.gnu.org/licenses/gpl.html + +- GNU Lesser General Public License Version 2.1 or later (the "LGPL") +http://www.gnu.org/licenses/lgpl.html + +- Mozilla Public License Version 1.1 or later (the "MPL") +http://www.mozilla.org/MPL/MPL-1.1.html + +== END LICENSE == + +Connector for Python (CGI and WSGI). + +""" + +import os +try: # Windows needs stdio set for binary mode for file upload to work. + import msvcrt + msvcrt.setmode (0, os.O_BINARY) # stdin = 0 + msvcrt.setmode (1, os.O_BINARY) # stdout = 1 +except ImportError: + pass + +from fckutil import * +from fckoutput import * +import config as Config + +class GetFoldersCommandMixin (object): + def getFolders(self, resourceType, currentFolder): + """ + Purpose: command to recieve a list of folders + """ + # Map the virtual path to our local server + serverPath = mapServerFolder(self.userFilesFolder,currentFolder) + s = """""" # Open the folders node + for someObject in os.listdir(serverPath): + someObjectPath = mapServerFolder(serverPath, someObject) + if os.path.isdir(someObjectPath): + s += """""" % ( + convertToXmlAttribute(someObject) + ) + s += """""" # Close the folders node + return s + +class GetFoldersAndFilesCommandMixin (object): + def getFoldersAndFiles(self, resourceType, currentFolder): + """ + Purpose: command to recieve a list of folders and files + """ + # Map the virtual path to our local server + serverPath = mapServerFolder(self.userFilesFolder,currentFolder) + # Open the folders / files node + folders = """""" + files = """""" + for someObject in os.listdir(serverPath): + someObjectPath = mapServerFolder(serverPath, someObject) + if os.path.isdir(someObjectPath): + folders += """""" % ( + convertToXmlAttribute(someObject) + ) + elif os.path.isfile(someObjectPath): + size = os.path.getsize(someObjectPath) + files += """""" % ( + convertToXmlAttribute(someObject), + os.path.getsize(someObjectPath) + ) + # Close the folders / files node + folders += """""" + files += """""" + return folders + files + +class CreateFolderCommandMixin (object): + def createFolder(self, resourceType, currentFolder): + """ + Purpose: command to create a new folder + """ + errorNo = 0; errorMsg =''; + if self.request.has_key("NewFolderName"): + newFolder = self.request.get("NewFolderName", None) + newFolder = sanitizeFolderName (newFolder) + try: + newFolderPath = mapServerFolder(self.userFilesFolder, combinePaths(currentFolder, newFolder)) + self.createServerFolder(newFolderPath) + except Exception, e: + errorMsg = str(e).decode('iso-8859-1').encode('utf-8') # warning with encodigns!!! + if hasattr(e,'errno'): + if e.errno==17: #file already exists + errorNo=0 + elif e.errno==13: # permission denied + errorNo = 103 + elif e.errno==36 or e.errno==2 or e.errno==22: # filename too long / no such file / invalid name + errorNo = 102 + else: + errorNo = 110 + else: + errorNo = 102 + return self.sendErrorNode ( errorNo, errorMsg ) + + def createServerFolder(self, folderPath): + "Purpose: physically creates a folder on the server" + # No need to check if the parent exists, just create all hierachy + + try: + permissions = Config.ChmodOnFolderCreate + if not permissions: + os.makedirs(folderPath) + except AttributeError: #ChmodOnFolderCreate undefined + permissions = 0755 + + if permissions: + oldumask = os.umask(0) + os.makedirs(folderPath,mode=0755) + os.umask( oldumask ) + +class UploadFileCommandMixin (object): + def uploadFile(self, resourceType, currentFolder): + """ + Purpose: command to upload files to server (same as FileUpload) + """ + errorNo = 0 + if self.request.has_key("NewFile"): + # newFile has all the contents we need + newFile = self.request.get("NewFile", "") + # Get the file name + newFileName = newFile.filename + newFileName = sanitizeFileName( newFileName ) + newFileNameOnly = removeExtension(newFileName) + newFileExtension = getExtension(newFileName).lower() + allowedExtensions = Config.AllowedExtensions[resourceType] + deniedExtensions = Config.DeniedExtensions[resourceType] + + if (allowedExtensions): + # Check for allowed + isAllowed = False + if (newFileExtension in allowedExtensions): + isAllowed = True + elif (deniedExtensions): + # Check for denied + isAllowed = True + if (newFileExtension in deniedExtensions): + isAllowed = False + else: + # No extension limitations + isAllowed = True + + if (isAllowed): + # Upload to operating system + # Map the virtual path to the local server path + currentFolderPath = mapServerFolder(self.userFilesFolder, currentFolder) + i = 0 + while (True): + newFilePath = os.path.join (currentFolderPath,newFileName) + if os.path.exists(newFilePath): + i += 1 + newFileName = "%s(%04d).%s" % ( + newFileNameOnly, i, newFileExtension + ) + errorNo= 201 # file renamed + else: + # Read file contents and write to the desired path (similar to php's move_uploaded_file) + fout = file(newFilePath, 'wb') + while (True): + chunk = newFile.file.read(100000) + if not chunk: break + fout.write (chunk) + fout.close() + + if os.path.exists ( newFilePath ): + doChmod = False + try: + doChmod = Config.ChmodOnUpload + permissions = Config.ChmodOnUpload + except AttributeError: #ChmodOnUpload undefined + doChmod = True + permissions = 0755 + if ( doChmod ): + oldumask = os.umask(0) + os.chmod( newFilePath, permissions ) + os.umask( oldumask ) + + newFileUrl = self.webUserFilesFolder + currentFolder + newFileName + + return self.sendUploadResults( errorNo , newFileUrl, newFileName ) + else: + return self.sendUploadResults( errorNo = 203, customMsg = "Extension not allowed" ) + else: + return self.sendUploadResults( errorNo = 202, customMsg = "No File" ) diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/fckconnector.py b/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/fckconnector.py new file mode 100644 index 0000000000..329aec941f --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/fckconnector.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python + +""" +FCKeditor - The text editor for Internet - http://www.fckeditor.net +Copyright (C) 2003-2008 Frederico Caldeira Knabben + +== BEGIN LICENSE == + +Licensed under the terms of any of the following licenses at your +choice: + +- GNU General Public License Version 2 or later (the "GPL") +http://www.gnu.org/licenses/gpl.html + +- GNU Lesser General Public License Version 2.1 or later (the "LGPL") +http://www.gnu.org/licenses/lgpl.html + +- Mozilla Public License Version 1.1 or later (the "MPL") +http://www.mozilla.org/MPL/MPL-1.1.html + +== END LICENSE == + +Base Connector for Python (CGI and WSGI). + +See config.py for configuration settings + +""" +import cgi, os + +from fckutil import * +from fckcommands import * # default command's implementation +from fckoutput import * # base http, xml and html output mixins +import config as Config + +class FCKeditorConnectorBase( object ): + "The base connector class. Subclass it to extend functionality (see Zope example)" + + def __init__(self, environ=None): + "Constructor: Here you should parse request fields, initialize variables, etc." + self.request = FCKeditorRequest(environ) # Parse request + self.headers = [] # Clean Headers + if environ: + self.environ = environ + else: + self.environ = os.environ + + # local functions + + def setHeader(self, key, value): + self.headers.append ((key, value)) + return + +class FCKeditorRequest(object): + "A wrapper around the request object" + def __init__(self, environ): + if environ: # WSGI + self.request = cgi.FieldStorage(fp=environ['wsgi.input'], + environ=environ, + keep_blank_values=1) + self.environ = environ + else: # plain old cgi + self.environ = os.environ + self.request = cgi.FieldStorage() + if 'REQUEST_METHOD' in self.environ and 'QUERY_STRING' in self.environ: + if self.environ['REQUEST_METHOD'].upper()=='POST': + # we are in a POST, but GET query_string exists + # cgi parses by default POST data, so parse GET QUERY_STRING too + self.get_request = cgi.FieldStorage(fp=None, + environ={ + 'REQUEST_METHOD':'GET', + 'QUERY_STRING':self.environ['QUERY_STRING'], + }, + ) + else: + self.get_request={} + + def has_key(self, key): + return self.request.has_key(key) or self.get_request.has_key(key) + + def get(self, key, default=None): + if key in self.request.keys(): + field = self.request[key] + elif key in self.get_request.keys(): + field = self.get_request[key] + else: + return default + if hasattr(field,"filename") and field.filename: #file upload, do not convert return value + return field + else: + return field.value diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/fckoutput.py b/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/fckoutput.py new file mode 100644 index 0000000000..2810bc7c87 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/fckoutput.py @@ -0,0 +1,142 @@ +#!/usr/bin/env python + +""" +FCKeditor - The text editor for Internet - http://www.fckeditor.net +Copyright (C) 2003-2008 Frederico Caldeira Knabben + +== BEGIN LICENSE == + +Licensed under the terms of any of the following licenses at your +choice: + +- GNU General Public License Version 2 or later (the "GPL") +http://www.gnu.org/licenses/gpl.html + +- GNU Lesser General Public License Version 2.1 or later (the "LGPL") +http://www.gnu.org/licenses/lgpl.html + +- Mozilla Public License Version 1.1 or later (the "MPL") +http://www.mozilla.org/MPL/MPL-1.1.html + +== END LICENSE == + +Connector for Python (CGI and WSGI). + +""" + +from time import gmtime, strftime +import string + +def escape(text, replace=string.replace): + """ + Converts the special characters '<', '>', and '&'. + + RFC 1866 specifies that these characters be represented + in HTML as < > and & respectively. In Python + 1.5 we use the new string.replace() function for speed. + """ + text = replace(text, '&', '&') # must be done 1st + text = replace(text, '<', '<') + text = replace(text, '>', '>') + text = replace(text, '"', '"') + return text + +def convertToXmlAttribute(value): + if (value is None): + value = "" + return escape(value) + +class BaseHttpMixin(object): + def setHttpHeaders(self, content_type='text/xml'): + "Purpose: to prepare the headers for the xml to return" + # Prevent the browser from caching the result. + # Date in the past + self.setHeader('Expires','Mon, 26 Jul 1997 05:00:00 GMT') + # always modified + self.setHeader('Last-Modified',strftime("%a, %d %b %Y %H:%M:%S GMT", gmtime())) + # HTTP/1.1 + self.setHeader('Cache-Control','no-store, no-cache, must-revalidate') + self.setHeader('Cache-Control','post-check=0, pre-check=0') + # HTTP/1.0 + self.setHeader('Pragma','no-cache') + + # Set the response format. + self.setHeader( 'Content-Type', content_type + '; charset=utf-8' ) + return + +class BaseXmlMixin(object): + def createXmlHeader(self, command, resourceType, currentFolder, url): + "Purpose: returns the xml header" + self.setHttpHeaders() + # Create the XML document header + s = """""" + # Create the main connector node + s += """""" % ( + command, + resourceType + ) + # Add the current folder node + s += """""" % ( + convertToXmlAttribute(currentFolder), + convertToXmlAttribute(url), + ) + return s + + def createXmlFooter(self): + "Purpose: returns the xml footer" + return """""" + + def sendError(self, number, text): + "Purpose: in the event of an error, return an xml based error" + self.setHttpHeaders() + return ("""""" + + """""" + + self.sendErrorNode (number, text) + + """""" ) + + def sendErrorNode(self, number, text): + return """""" % (number, convertToXmlAttribute(text)) + +class BaseHtmlMixin(object): + def sendUploadResults( self, errorNo = 0, fileUrl = '', fileName = '', customMsg = '' ): + self.setHttpHeaders("text/html") + "This is the function that sends the results of the uploading process" + return """""" % { + 'errorNumber': errorNo, + 'fileUrl': fileUrl.replace ('"', '\\"'), + 'fileName': fileName.replace ( '"', '\\"' ) , + 'customMsg': customMsg.replace ( '"', '\\"' ), + } diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/fckutil.py b/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/fckutil.py new file mode 100644 index 0000000000..eac508d468 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/fckutil.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python + +""" +FCKeditor - The text editor for Internet - http://www.fckeditor.net +Copyright (C) 2003-2008 Frederico Caldeira Knabben + +== BEGIN LICENSE == + +Licensed under the terms of any of the following licenses at your +choice: + +- GNU General Public License Version 2 or later (the "GPL") +http://www.gnu.org/licenses/gpl.html + +- GNU Lesser General Public License Version 2.1 or later (the "LGPL") +http://www.gnu.org/licenses/lgpl.html + +- Mozilla Public License Version 1.1 or later (the "MPL") +http://www.mozilla.org/MPL/MPL-1.1.html + +== END LICENSE == + +Utility functions for the File Manager Connector for Python + +""" + +import string, re +import os +import config as Config + +# Generic manipulation functions + +def removeExtension(fileName): + index = fileName.rindex(".") + newFileName = fileName[0:index] + return newFileName + +def getExtension(fileName): + index = fileName.rindex(".") + 1 + fileExtension = fileName[index:] + return fileExtension + +def removeFromStart(string, char): + return string.lstrip(char) + +def removeFromEnd(string, char): + return string.rstrip(char) + +# Path functions + +def combinePaths( basePath, folder ): + return removeFromEnd( basePath, '/' ) + '/' + removeFromStart( folder, '/' ) + +def getFileName(filename): + " Purpose: helper function to extrapolate the filename " + for splitChar in ["/", "\\"]: + array = filename.split(splitChar) + if (len(array) > 1): + filename = array[-1] + return filename + +def sanitizeFolderName( newFolderName ): + "Do a cleanup of the folder name to avoid possible problems" + # Remove . \ / | : ? * " < > and control characters + return re.sub( '(?u)\\.|\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|[^\u0000-\u001f\u007f-\u009f]', '_', newFolderName ) + +def sanitizeFileName( newFileName ): + "Do a cleanup of the file name to avoid possible problems" + # Replace dots in the name with underscores (only one dot can be there... security issue). + if ( Config.ForceSingleExtension ): # remove dots + newFileName = re.sub ( '/\\.(?![^.]*$)/', '_', newFileName ) ; + newFileName = newFileName.replace('\\','/') # convert windows to unix path + newFileName = os.path.basename (newFileName) # strip directories + # Remove \ / | : ? * + return re.sub ( '(?u)/\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|[^\u0000-\u001f\u007f-\u009f]/', '_', newFileName ) + +def getCurrentFolder(currentFolder): + if not currentFolder: + currentFolder = '/' + + # Check the current folder syntax (must begin and end with a slash). + if (currentFolder[-1] <> "/"): + currentFolder += "/" + if (currentFolder[0] <> "/"): + currentFolder = "/" + currentFolder + + # Ensure the folder path has no double-slashes + while '//' in currentFolder: + currentFolder = currentFolder.replace('//','/') + + # Check for invalid folder paths (..) + if '..' in currentFolder or '\\' in currentFolder: + return None + + return currentFolder + +def mapServerPath( environ, url): + " Emulate the asp Server.mapPath function. Given an url path return the physical directory that it corresponds to " + # This isn't correct but for the moment there's no other solution + # If this script is under a virtual directory or symlink it will detect the problem and stop + return combinePaths( getRootPath(environ), url ) + +def mapServerFolder(resourceTypePath, folderPath): + return combinePaths ( resourceTypePath , folderPath ) + +def getRootPath(environ): + "Purpose: returns the root path on the server" + # WARNING: this may not be thread safe, and doesn't work w/ VirtualServer/mod_python + # Use Config.UserFilesAbsolutePath instead + + if environ.has_key('DOCUMENT_ROOT'): + return environ['DOCUMENT_ROOT'] + else: + realPath = os.path.realpath( './' ) + selfPath = environ['SCRIPT_FILENAME'] + selfPath = selfPath [ : selfPath.rfind( '/' ) ] + selfPath = selfPath.replace( '/', os.path.sep) + + position = realPath.find(selfPath) + + # This can check only that this script isn't run from a virtual dir + # But it avoids the problems that arise if it isn't checked + raise realPath + if ( position < 0 or position <> len(realPath) - len(selfPath) or realPath[ : position ]==''): + raise Exception('Sorry, can\'t map "UserFilesPath" to a physical path. You must set the "UserFilesAbsolutePath" value in "editor/filemanager/connectors/py/config.py".') + return realPath[ : position ] diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/htaccess.txt b/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/htaccess.txt new file mode 100644 index 0000000000..82374196a9 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/htaccess.txt @@ -0,0 +1,23 @@ +# replace the name of this file to .htaccess (if using apache), +# and set the proper options and paths according your enviroment + +Allow from all + +# If using mod_python uncomment this: +PythonPath "[r'C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\fckeditor\editor\filemanager\connectors\py'] + sys.path" + + +# Recomended: WSGI application running with mod_python and modpython_gateway +SetHandler python-program +PythonHandler modpython_gateway::handler +PythonOption wsgi.application wsgi::App + + +# Emulated CGI with mod_python and cgihandler +#AddHandler mod_python .py +#PythonHandler mod_python.cgihandler + + +# Plain old CGI +#Options +ExecCGI +#AddHandler cgi-script py diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/upload.py b/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/upload.py new file mode 100644 index 0000000000..db5a5ab1a3 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/upload.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python + +""" +FCKeditor - The text editor for Internet - http://www.fckeditor.net +Copyright (C) 2003-2008 Frederico Caldeira Knabben + +== BEGIN LICENSE == + +Licensed under the terms of any of the following licenses at your +choice: + +- GNU General Public License Version 2 or later (the "GPL") +http://www.gnu.org/licenses/gpl.html + +- GNU Lesser General Public License Version 2.1 or later (the "LGPL") +http://www.gnu.org/licenses/lgpl.html + +- Mozilla Public License Version 1.1 or later (the "MPL") +http://www.mozilla.org/MPL/MPL-1.1.html + +== END LICENSE == + +This is the "File Uploader" for Python + +""" +import os + +from fckutil import * +from fckcommands import * # default command's implementation +from fckconnector import FCKeditorConnectorBase # import base connector +import config as Config + +class FCKeditorQuickUpload( FCKeditorConnectorBase, + UploadFileCommandMixin, + BaseHttpMixin, BaseHtmlMixin): + def doResponse(self): + "Main function. Process the request, set headers and return a string as response." + # Check if this connector is disabled + if not(Config.Enabled): + return self.sendUploadResults(1, "This file uploader is disabled. Please check the \"editor/filemanager/connectors/py/config.py\"") + command = 'QuickUpload' + # The file type (from the QueryString, by default 'File'). + resourceType = self.request.get('Type','File') + currentFolder = getCurrentFolder(self.request.get("CurrentFolder","")) + # Check for invalid paths + if currentFolder is None: + return self.sendUploadResults(102, '', '', "") + + # Check if it is an allowed command + if ( not command in Config.ConfigAllowedCommands ): + return self.sendUploadResults( 1, '', '', 'The %s command isn\'t allowed' % command ) + + if ( not resourceType in Config.ConfigAllowedTypes ): + return self.sendUploadResults( 1, '', '', 'Invalid type specified' ) + + # Setup paths + self.userFilesFolder = Config.QuickUploadAbsolutePath[resourceType] + self.webUserFilesFolder = Config.QuickUploadPath[resourceType] + if not self.userFilesFolder: # no absolute path given (dangerous...) + self.userFilesFolder = mapServerPath(self.environ, + self.webUserFilesFolder) + + # Ensure that the directory exists. + if not os.path.exists(self.userFilesFolder): + try: + self.createServerFoldercreateServerFolder( self.userFilesFolder ) + except: + return self.sendError(1, "This connector couldn\'t access to local user\'s files directories. Please check the UserFilesAbsolutePath in \"editor/filemanager/connectors/py/config.py\" and try again. ") + + # File upload doesn't have to return XML, so intercept here + return self.uploadFile(resourceType, currentFolder) + +# Running from command line (plain old CGI) +if __name__ == '__main__': + try: + # Create a Connector Instance + conn = FCKeditorQuickUpload() + data = conn.doResponse() + for header in conn.headers: + if not header is None: + print '%s: %s' % header + print + print data + except: + print "Content-Type: text/plain" + print + import cgi + cgi.print_exception() diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/wsgi.py b/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/wsgi.py new file mode 100644 index 0000000000..9b6c432043 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/wsgi.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python + +""" +FCKeditor - The text editor for Internet - http://www.fckeditor.net +Copyright (C) 2003-2008 Frederico Caldeira Knabben + +== BEGIN LICENSE == + +Licensed under the terms of any of the following licenses at your +choice: + + - GNU General Public License Version 2 or later (the "GPL") + http://www.gnu.org/licenses/gpl.html + + - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + http://www.gnu.org/licenses/lgpl.html + + - Mozilla Public License Version 1.1 or later (the "MPL") + http://www.mozilla.org/MPL/MPL-1.1.html + +== END LICENSE == + +Connector/QuickUpload for Python (WSGI wrapper). + +See config.py for configuration settings + +""" + +from connector import FCKeditorConnector +from upload import FCKeditorQuickUpload + +import cgitb +from cStringIO import StringIO + +# Running from WSGI capable server (recomended) +def App(environ, start_response): + "WSGI entry point. Run the connector" + if environ['SCRIPT_NAME'].endswith("connector.py"): + conn = FCKeditorConnector(environ) + elif environ['SCRIPT_NAME'].endswith("upload.py"): + conn = FCKeditorQuickUpload(environ) + else: + start_response ("200 Ok", [('Content-Type','text/html')]) + yield "Unknown page requested: " + yield environ['SCRIPT_NAME'] + return + try: + # run the connector + data = conn.doResponse() + # Start WSGI response: + start_response ("200 Ok", conn.headers) + # Send response text + yield data + except: + start_response("500 Internal Server Error",[("Content-type","text/html")]) + file = StringIO() + cgitb.Hook(file = file).handle() + yield file.getvalue() diff --git a/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/zope.py b/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/zope.py new file mode 100644 index 0000000000..ed0d5f4528 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/py/zope.py @@ -0,0 +1,188 @@ +#!/usr/bin/env python + +""" +FCKeditor - The text editor for Internet - http://www.fckeditor.net +Copyright (C) 2003-2008 Frederico Caldeira Knabben + +== BEGIN LICENSE == + +Licensed under the terms of any of the following licenses at your +choice: + +- GNU General Public License Version 2 or later (the "GPL") +http://www.gnu.org/licenses/gpl.html + +- GNU Lesser General Public License Version 2.1 or later (the "LGPL") +http://www.gnu.org/licenses/lgpl.html + +- Mozilla Public License Version 1.1 or later (the "MPL") +http://www.mozilla.org/MPL/MPL-1.1.html + +== END LICENSE == + +Connector for Python and Zope. + +This code was not tested at all. +It just was ported from pre 2.5 release, so for further reference see +\editor\filemanager\browser\default\connectors\py\connector.py in previous +releases. + +""" + +from fckutil import * +from connector import * +import config as Config + +class FCKeditorConnectorZope(FCKeditorConnector): + """ + Zope versiof FCKeditorConnector + """ + # Allow access (Zope) + __allow_access_to_unprotected_subobjects__ = 1 + + def __init__(self, context=None): + """ + Constructor + """ + FCKeditorConnector.__init__(self, environ=None) # call superclass constructor + # Instance Attributes + self.context = context + self.request = FCKeditorRequest(context) + + def getZopeRootContext(self): + if self.zopeRootContext is None: + self.zopeRootContext = self.context.getPhysicalRoot() + return self.zopeRootContext + + def getZopeUploadContext(self): + if self.zopeUploadContext is None: + folderNames = self.userFilesFolder.split("/") + c = self.getZopeRootContext() + for folderName in folderNames: + if (folderName <> ""): + c = c[folderName] + self.zopeUploadContext = c + return self.zopeUploadContext + + def setHeader(self, key, value): + self.context.REQUEST.RESPONSE.setHeader(key, value) + + def getFolders(self, resourceType, currentFolder): + # Open the folders node + s = "" + s += """""" + zopeFolder = self.findZopeFolder(resourceType, currentFolder) + for (name, o) in zopeFolder.objectItems(["Folder"]): + s += """""" % ( + convertToXmlAttribute(name) + ) + # Close the folders node + s += """""" + return s + + def getZopeFoldersAndFiles(self, resourceType, currentFolder): + folders = self.getZopeFolders(resourceType, currentFolder) + files = self.getZopeFiles(resourceType, currentFolder) + s = folders + files + return s + + def getZopeFiles(self, resourceType, currentFolder): + # Open the files node + s = "" + s += """""" + zopeFolder = self.findZopeFolder(resourceType, currentFolder) + for (name, o) in zopeFolder.objectItems(["File","Image"]): + s += """""" % ( + convertToXmlAttribute(name), + ((o.get_size() / 1024) + 1) + ) + # Close the files node + s += """""" + return s + + def findZopeFolder(self, resourceType, folderName): + # returns the context of the resource / folder + zopeFolder = self.getZopeUploadContext() + folderName = self.removeFromStart(folderName, "/") + folderName = self.removeFromEnd(folderName, "/") + if (resourceType <> ""): + try: + zopeFolder = zopeFolder[resourceType] + except: + zopeFolder.manage_addProduct["OFSP"].manage_addFolder(id=resourceType, title=resourceType) + zopeFolder = zopeFolder[resourceType] + if (folderName <> ""): + folderNames = folderName.split("/") + for folderName in folderNames: + zopeFolder = zopeFolder[folderName] + return zopeFolder + + def createFolder(self, resourceType, currentFolder): + # Find out where we are + zopeFolder = self.findZopeFolder(resourceType, currentFolder) + errorNo = 0 + errorMsg = "" + if self.request.has_key("NewFolderName"): + newFolder = self.request.get("NewFolderName", None) + zopeFolder.manage_addProduct["OFSP"].manage_addFolder(id=newFolder, title=newFolder) + else: + errorNo = 102 + return self.sendErrorNode ( errorNo, errorMsg ) + + def uploadFile(self, resourceType, currentFolder, count=None): + zopeFolder = self.findZopeFolder(resourceType, currentFolder) + file = self.request.get("NewFile", None) + fileName = self.getFileName(file.filename) + fileNameOnly = self.removeExtension(fileName) + fileExtension = self.getExtension(fileName).lower() + if (count): + nid = "%s.%s.%s" % (fileNameOnly, count, fileExtension) + else: + nid = fileName + title = nid + try: + zopeFolder.manage_addProduct['OFSP'].manage_addFile( + id=nid, + title=title, + file=file.read() + ) + except: + if (count): + count += 1 + else: + count = 1 + return self.zopeFileUpload(resourceType, currentFolder, count) + return self.sendUploadResults( 0 ) + +class FCKeditorRequest(object): + "A wrapper around the request object" + def __init__(self, context=None): + r = context.REQUEST + self.request = r + + def has_key(self, key): + return self.request.has_key(key) + + def get(self, key, default=None): + return self.request.get(key, default) + +""" +Running from zope, you will need to modify this connector. +If you have uploaded the FCKeditor into Zope (like me), you need to +move this connector out of Zope, and replace the "connector" with an +alias as below. The key to it is to pass the Zope context in, as +we then have a like to the Zope context. + +## Script (Python) "connector.py" +##bind container=container +##bind context=context +##bind namespace= +##bind script=script +##bind subpath=traverse_subpath +##parameters=*args, **kws +##title=ALIAS +## + +import Products.zope as connector +return connector.FCKeditorConnectorZope(context=context).doResponse() +""" diff --git a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/test.html b/phpgwapi/js/fckeditor/editor/filemanager/connectors/test.html similarity index 81% rename from phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/test.html rename to phpgwapi/js/fckeditor/editor/filemanager/connectors/test.html index 30c3c9472a..14e5470735 100644 --- a/phpgwapi/js/fckeditor/editor/filemanager/browser/default/connectors/test.html +++ b/phpgwapi/js/fckeditor/editor/filemanager/connectors/test.html @@ -1,6 +1,6 @@ - -<% -'********************************************** -' File: NetRube_Upload.asp -' Version: NetRube Upload Class Version 2.1 Build 20050228 -' Author: NetRube -' Email: NetRube@126.com -' Date: 02/28/2005 -' Comments: The code for the Upload. -' This can free usage, but please -' not to delete this copyright information. -' If you have a modification version, -' Please send out a duplicate to me. -'********************************************** -' 文件名: NetRube_Upload.asp -' 版本: NetRube Upload Class Version 2.1 Build 20050228 -' 作者: NetRube(网络乡巴佬) -' 电子邮件: NetRube@126.com -' 日期: 2005年02月28日 -' 声明: 文件上传类 -' 本上传类可以自由使用,但请保留此版权声明信息 -' 如果您对本上传类进行修改增强, -' 请发送一份给俺。 -'********************************************** - -Class NetRube_Upload - - Public File, Form - Private oSourceData - Private nMaxSize, nErr, sAllowed, sDenied - - Private Sub Class_Initialize - nErr = 0 - nMaxSize = 1048576 - - Set File = Server.CreateObject("Scripting.Dictionary") - File.CompareMode = 1 - Set Form = Server.CreateObject("Scripting.Dictionary") - Form.CompareMode = 1 - - Set oSourceData = Server.CreateObject("ADODB.Stream") - oSourceData.Type = 1 - oSourceData.Mode = 3 - oSourceData.Open - End Sub - - Private Sub Class_Terminate - Form.RemoveAll - Set Form = Nothing - File.RemoveAll - Set File = Nothing - - oSourceData.Close - Set oSourceData = Nothing - End Sub - - Public Property Get Version - Version = "NetRube Upload Class Version 1.0 Build 20041218" - End Property - - Public Property Get ErrNum - ErrNum = nErr - End Property - - Public Property Let MaxSize(nSize) - nMaxSize = nSize - End Property - - Public Property Let Allowed(sExt) - sAllowed = sExt - End Property - - Public Property Let Denied(sExt) - sDenied = sExt - End Property - - Public Sub GetData - Dim aCType - aCType = Split(Request.ServerVariables("HTTP_CONTENT_TYPE"), ";") - If aCType(0) <> "multipart/form-data" Then - nErr = 1 - Exit Sub - End If - - Dim nTotalSize - nTotalSize = Request.TotalBytes - If nTotalSize < 1 Then - nErr = 2 - Exit Sub - End If - If nMaxSize > 0 And nTotalSize > nMaxSize Then - nErr = 3 - Exit Sub - End If - - oSourceData.Write Request.BinaryRead(nTotalSize) - oSourceData.Position = 0 - - Dim oTotalData, oFormStream, sFormHeader, sFormName, bCrLf, nBoundLen, nFormStart, nFormEnd, nPosStart, nPosEnd, sBoundary - - oTotalData = oSourceData.Read - bCrLf = ChrB(13) & ChrB(10) - sBoundary = MidB(oTotalData, 1, InStrB(1, oTotalData, bCrLf) - 1) - nBoundLen = LenB(sBoundary) + 2 - nFormStart = nBoundLen - - Set oFormStream = Server.CreateObject("ADODB.Stream") - - Do While (nFormStart + 2) < nTotalSize - nFormEnd = InStrB(nFormStart, oTotalData, bCrLf & bCrLf) + 3 - - With oFormStream - .Type = 1 - .Mode = 3 - .Open - oSourceData.Position = nFormStart - oSourceData.CopyTo oFormStream, nFormEnd - nFormStart - .Position = 0 - .Type = 2 - .CharSet = "UTF-8" - sFormHeader = .ReadText - .Close - End With - - nFormStart = InStrB(nFormEnd, oTotalData, sBoundary) - 1 - nPosStart = InStr(22, sFormHeader, " name=", 1) + 7 - nPosEnd = InStr(nPosStart, sFormHeader, """") - sFormName = Mid(sFormHeader, nPosStart, nPosEnd - nPosStart) - - If InStr(45, sFormHeader, " filename=", 1) > 0 Then - Set File(sFormName) = New NetRube_FileInfo - File(sFormName).FormName = sFormName - File(sFormName).Start = nFormEnd - File(sFormName).Size = nFormStart - nFormEnd - 2 - nPosStart = InStr(nPosEnd, sFormHeader, " filename=", 1) + 11 - nPosEnd = InStr(nPosStart, sFormHeader, """") - File(sFormName).ClientPath = Mid(sFormHeader, nPosStart, nPosEnd - nPosStart) - File(sFormName).Name = Mid(File(sFormName).ClientPath, InStrRev(File(sFormName).ClientPath, "\") + 1) - File(sFormName).Ext = LCase(Mid(File(sFormName).Name, InStrRev(File(sFormName).Name, ".") + 1)) - nPosStart = InStr(nPosEnd, sFormHeader, "Content-Type: ", 1) + 14 - nPosEnd = InStr(nPosStart, sFormHeader, vbCr) - File(sFormName).MIME = Mid(sFormHeader, nPosStart, nPosEnd - nPosStart) - Else - With oFormStream - .Type = 1 - .Mode = 3 - .Open - oSourceData.Position = nPosEnd - oSourceData.CopyTo oFormStream, nFormStart - nFormEnd - 2 - .Position = 0 - .Type = 2 - .CharSet = "UTF-8" - Form(sFormName) = .ReadText - .Close - End With - End If - - nFormStart = nFormStart + nBoundLen - Loop - - oTotalData = "" - Set oFormStream = Nothing - End Sub - - Public Sub SaveAs(sItem, sFileName) - If File(sItem).Size < 1 Then - nErr = 2 - Exit Sub - End If - - If Not IsAllowed(File(sItem).Ext) Then - nErr = 4 - Exit Sub - End If - - Dim oFileStream - Set oFileStream = Server.CreateObject("ADODB.Stream") - With oFileStream - .Type = 1 - .Mode = 3 - .Open - oSourceData.Position = File(sItem).Start - oSourceData.CopyTo oFileStream, File(sItem).Size - .Position = 0 - .SaveToFile sFileName, 2 - .Close - End With - Set oFileStream = Nothing - End Sub - - Private Function IsAllowed(sExt) - Dim oRE - Set oRE = New RegExp - oRE.IgnoreCase = True - oRE.Global = True - - If sDenied = "" Then - oRE.Pattern = sAllowed - IsAllowed = (sAllowed = "") Or oRE.Test(sExt) - Else - oRE.Pattern = sDenied - IsAllowed = Not oRE.Test(sExt) - End If - - Set oRE = Nothing - End Function -End Class - -Class NetRube_FileInfo - Dim FormName, ClientPath, Path, Name, Ext, Content, Size, MIME, Start -End Class -%> \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/filemanager/upload/asp/config.asp b/phpgwapi/js/fckeditor/editor/filemanager/upload/asp/config.asp deleted file mode 100644 index ccc66dd413..0000000000 --- a/phpgwapi/js/fckeditor/editor/filemanager/upload/asp/config.asp +++ /dev/null @@ -1,52 +0,0 @@ - -<% - -' SECURITY: You must explicitelly enable this "uploader" (set it to "True"). -Dim ConfigIsEnabled -ConfigIsEnabled = False - -' Set if the file type must be considere in the target path. -' Ex: /userfiles/image/ or /userfiles/file/ -Dim ConfigUseFileType -ConfigUseFileType = False - -' Path to user files relative to the document root. -Dim ConfigUserFilesPath -ConfigUserFilesPath = "/userfiles/" - -' Allowed and Denied extensions configurations. -Dim ConfigAllowedExtensions, ConfigDeniedExtensions -Set ConfigAllowedExtensions = CreateObject( "Scripting.Dictionary" ) -Set ConfigDeniedExtensions = CreateObject( "Scripting.Dictionary" ) - -ConfigAllowedExtensions.Add "File", "" -ConfigDeniedExtensions.Add "File", "html|htm|php|php2|php3|php4|php5|phtml|pwml|inc|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|com|dll|vbs|js|reg|cgi|htaccess|asis" - -ConfigAllowedExtensions.Add "Image", "jpg|gif|jpeg|png|bmp" -ConfigDeniedExtensions.Add "Image", "" - -ConfigAllowedExtensions.Add "Flash", "swf|fla" -ConfigDeniedExtensions.Add "Flash", "" - -%> \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/filemanager/upload/asp/upload.asp b/phpgwapi/js/fckeditor/editor/filemanager/upload/asp/upload.asp deleted file mode 100644 index fec8b72c4a..0000000000 --- a/phpgwapi/js/fckeditor/editor/filemanager/upload/asp/upload.asp +++ /dev/null @@ -1,121 +0,0 @@ -<%@ CodePage=65001 Language="VBScript"%> -<% -Option Explicit -Response.Buffer = True -%> - - - - -<% - -' This is the function that sends the results of the uploading process. -Function SendResults( errorNumber, fileUrl, fileName, customMsg ) - Response.Write "" - Response.End -End Function - -%> -<% - -' Check if this uploader has been enabled. -If ( ConfigIsEnabled = False ) Then - SendResults "1", "", "", "This file uploader is disabled. Please check the ""editor/filemanager/upload/asp/config.asp"" file" -End If - -' The the file type (from the QueryString, by default 'File'). -Dim resourceType -If ( Request.QueryString("Type") <> "" ) Then - resourceType = Request.QueryString("Type") -Else - resourceType = "File" -End If - -' Create the Uploader object. -Dim oUploader -Set oUploader = New NetRube_Upload -oUploader.MaxSize = 0 -oUploader.Allowed = ConfigAllowedExtensions.Item( resourceType ) -oUploader.Denied = ConfigDeniedExtensions.Item( resourceType ) -oUploader.GetData - -If oUploader.ErrNum > 1 Then - SendResults "202", "", "", "" -Else - Dim sFileName, sFileUrl, sErrorNumber, sOriginalFileName, sExtension - sFileName = "" - sFileUrl = "" - sErrorNumber = "0" - - ' Map the virtual path to the local server path. - Dim sServerDir - sServerDir = Server.MapPath( ConfigUserFilesPath ) - If ( Right( sServerDir, 1 ) <> "\" ) Then - sServerDir = sServerDir & "\" - End If - - If ( ConfigUseFileType = True ) Then - sServerDir = sServerDir & resourceType & "\" - End If - - Dim oFSO - Set oFSO = Server.CreateObject( "Scripting.FileSystemObject" ) - - ' Get the uploaded file name. - sFileName = oUploader.File( "NewFile" ).Name - sExtension = oUploader.File( "NewFile" ).Ext - sOriginalFileName = sFileName - - Dim iCounter - iCounter = 0 - - Do While ( True ) - Dim sFilePath - sFilePath = sServerDir & sFileName - - If ( oFSO.FileExists( sFilePath ) ) Then - iCounter = iCounter + 1 - sFileName = RemoveExtension( sOriginalFileName ) & "(" & iCounter & ")." & sExtension - sErrorNumber = "201" - Else - oUploader.SaveAs "NewFile", sFilePath - If oUploader.ErrNum > 0 Then SendResults "202", "", "", "" - Exit Do - End If - Loop - - If ( ConfigUseFileType = True ) Then - sFileUrl = ConfigUserFilesPath & resourceType & "/" & sFileName - Else - sFileUrl = ConfigUserFilesPath & sFileName - End If - - SendResults sErrorNumber, sFileUrl, sFileName, "" - -End If - -Set oUploader = Nothing -%> \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/filemanager/upload/cfm/config.cfm b/phpgwapi/js/fckeditor/editor/filemanager/upload/cfm/config.cfm deleted file mode 100644 index d47b8da0b6..0000000000 --- a/phpgwapi/js/fckeditor/editor/filemanager/upload/cfm/config.cfm +++ /dev/null @@ -1,98 +0,0 @@ - - - - config = StructNew(); - - // SECURITY: You must explicitelly enable this "uploader". - config.enabled = false; - - // Path to uploaded files relative to the document root. - config.userFilesPath = "/userfiles/"; - - config.serverPath = ""; // use this to force the server path if FCKeditor is not running directly off the root of the application or the FCKeditor directory in the URL is a virtual directory or a symbolic link / junction - - config.allowedExtensions = StructNew(); - config.deniedExtensions = StructNew(); - - config.allowedExtensions["File"] = ""; - config.deniedExtensions["File"] = "html,htm,php,php2,php3,php4,php5,phtml,pwml,inc,asp,aspx,ascx,jsp,cfm,cfc,pl,bat,exe,com,dll,vbs,js,reg,cgi,htaccess,asis"; - - config.allowedExtensions["Image"] = "png,gif,jpg,jpeg,bmp"; - config.deniedExtensions["Image"] = ""; - - config.allowedExtensions["Flash"] = "swf,fla"; - config.deniedExtensions["Flash"] = ""; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function structCopyKeys(stFrom, stTo) { - for ( key in stFrom ) { - if ( isStruct(stFrom[key]) ) { - structCopyKeys(stFrom[key],stTo[key]); - } else { - stTo[key] = stFrom[key]; - } - } - } - structCopyKeys(FCKeditor, config); - - - \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/filemanager/upload/cfm/upload.cfm b/phpgwapi/js/fckeditor/editor/filemanager/upload/cfm/upload.cfm deleted file mode 100644 index 7770c14e6f..0000000000 --- a/phpgwapi/js/fckeditor/editor/filemanager/upload/cfm/upload.cfm +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - userFilesPath = config.userFilesPath; - lAllowedExtensions = config.allowedExtensions[url.type]; - lDeniedExtensions = config.deniedExtensions[url.type]; - customMsg = ''; // Can be overwritten. The last value will be sent with the result - - // make sure the user files path is correctly formatted - userFilesPath = replace(userFilesPath, "\", "/", "ALL"); - userFilesPath = replace(userFilesPath, '//', '/', 'ALL'); - if ( right(userFilesPath,1) NEQ "/" ) { - userFilesPath = userFilesPath & "/"; - } - if ( left(userFilesPath,1) NEQ "/" ) { - userFilesPath = "/" & userFilesPath; - } - - if (find("/",getBaseTemplatePath())) { - fs = "/"; - } else { - fs = "\"; - } - - // Get the base physical path to the web root for this application. The code to determine the path automatically assumes that - // the "FCKeditor" directory in the http request path is directly off the web root for the application and that it's not a - // virtual directory or a symbolic link / junction. Use the serverPath config setting to force a physical path if necessary. - if ( len(config.serverPath) ) { - serverPath = config.serverPath; - } else { - serverPath = replaceNoCase(getBaseTemplatePath(),replace(cgi.script_name,"/",fs,"all"),""); - } - - // map the user files path to a physical directory - userFilesServerPath = serverPath & replace(userFilesPath,"/",fs,"all"); - - - - - - - - - - - - - - - - - - - - - - - - - errorNumber = 0; - fileName = cffile.ClientFileName; - fileExt = cffile.ServerFileExt; - - // munge filename for html download. Only a-z, 0-9, _, - and . are allowed - if( reFind("[^A-Za-z0-9_\-\.]", fileName) ) { - fileName = reReplace(fileName, "[^A-Za-z0-9\-\.]", "_", "ALL"); - fileName = reReplace(fileName, "_{2,}", "_", "ALL"); - fileName = reReplace(fileName, "([^_]+)_+$", "\1", "ALL"); - fileName = reReplace(fileName, "$_([^_]+)$", "\1", "ALL"); - } - - // When the original filename already exists, add numbers (0), (1), (2), ... at the end of the filename. - if( compare( cffile.ServerFileName, fileName ) ) { - counter = 0; - tmpFileName = fileName; - while( fileExists("#currentFolderPath##fileName#.#fileExt#") ) { - counter = counter + 1; - fileName = tmpFileName & '(#counter#)'; - } - } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/filemanager/upload/lasso/config.lasso b/phpgwapi/js/fckeditor/editor/filemanager/upload/lasso/config.lasso deleted file mode 100644 index 0c360b6713..0000000000 --- a/phpgwapi/js/fckeditor/editor/filemanager/upload/lasso/config.lasso +++ /dev/null @@ -1,65 +0,0 @@ -[//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 == - * - * Configuration file for the Lasso File Uploader. - */ - - /*..................................................................... - The connector uses the file tags, which require authentication. Enter a - valid username and password from Lasso admin for a group with file tags - permissions for uploads and the path you define in UserFilesPath below. - */ - - var('connection') = array( - -username='xxxxxxxx', - -password='xxxxxxxx' - ); - - - /*..................................................................... - Set the base path for files that users can upload and browse (relative - to server root). - - Set which file extensions are allowed and/or denied for each file type. - */ - var('config') = map( - 'Enabled' = false, - 'UserFilesPath' = '/userfiles/', - 'Subdirectories' = map( - 'File' = 'File/', - 'Image' = 'Image/', - 'Flash' = 'Flash/', - 'Media' = 'Media/' - ), - 'AllowedExtensions' = map( - 'File' = array(), - 'Image' = array('jpg','gif','jpeg','png'), - 'Flash' = array('swf','fla'), - 'Media' = array('swf','fla','jpg','gif','jpeg','png','avi','mpg','mpeg') - ), - 'DeniedExtensions' = map( - 'File' = array('html','htm','php','php2','php3','php4','php5','phtml','pwml','inc','asp','aspx','ascx','jsp','cfm','cfc','pl','bat','exe','com','dll','vbs','js','reg','cgi','lasso','lassoapp','htaccess','asis'), - 'Image' = array(), - 'Flash' = array(), - 'Media' = array() - ) - ); -] diff --git a/phpgwapi/js/fckeditor/editor/filemanager/upload/php/config.php b/phpgwapi/js/fckeditor/editor/filemanager/upload/php/config.php deleted file mode 100644 index 6a4ac82279..0000000000 --- a/phpgwapi/js/fckeditor/editor/filemanager/upload/php/config.php +++ /dev/null @@ -1,56 +0,0 @@ - \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/filemanager/upload/php/upload.php b/phpgwapi/js/fckeditor/editor/filemanager/upload/php/upload.php deleted file mode 100644 index 3dd98f21a0..0000000000 --- a/phpgwapi/js/fckeditor/editor/filemanager/upload/php/upload.php +++ /dev/null @@ -1,124 +0,0 @@ -' ; - echo 'window.parent.OnUploadCompleted(' . $errorNumber . ',"' . str_replace( '"', '\\"', $fileUrl ) . '","' . str_replace( '"', '\\"', $fileName ) . '", "' . str_replace( '"', '\\"', $customMsg ) . '") ;' ; - echo '' ; - exit ; -} - -// Check if this uploader has been enabled. -if ( !$Config['Enabled'] ) - SendResults( '1', '', '', 'This file uploader is disabled. Please check the "editor/filemanager/upload/php/config.php" file' ) ; - -// Check if the file has been correctly uploaded. -if ( !isset( $_FILES['NewFile'] ) || is_null( $_FILES['NewFile']['tmp_name'] ) || $_FILES['NewFile']['name'] == '' ) - SendResults( '202' ) ; - -// Get the posted file. -$oFile = $_FILES['NewFile'] ; - -// Get the uploaded file name extension. -$sFileName = $oFile['name'] ; - -// Replace dots in the name with underscores (only one dot can be there... security issue). -if ( $Config['ForceSingleExtension'] ) - $sFileName = preg_replace( '/\\.(?![^.]*$)/', '_', $sFileName ) ; - -$sOriginalFileName = $sFileName ; - -// Get the extension. -$sExtension = substr( $sFileName, ( strrpos($sFileName, '.') + 1 ) ) ; -$sExtension = strtolower( $sExtension ) ; - -// The the file type (from the QueryString, by default 'File'). -$sType = isset( $_GET['Type'] ) ? $_GET['Type'] : 'File' ; - -// Check if it is an allowed type. -if ( !in_array( $sType, array('File','Image','Flash','Media') ) ) - SendResults( 1, '', '', 'Invalid type specified' ) ; - -// Get the allowed and denied extensions arrays. -$arAllowed = $Config['AllowedExtensions'][$sType] ; -$arDenied = $Config['DeniedExtensions'][$sType] ; - -// Check if it is an allowed extension. -if ( ( count($arAllowed) > 0 && !in_array( $sExtension, $arAllowed ) ) || ( count($arDenied) > 0 && in_array( $sExtension, $arDenied ) ) ) - SendResults( '202' ) ; - -$sErrorNumber = '0' ; -$sFileUrl = '' ; - -// Initializes the counter used to rename the file, if another one with the same name already exists. -$iCounter = 0 ; - -// Get the target directory. -if ( isset( $Config['UserFilesAbsolutePath'] ) && strlen( $Config['UserFilesAbsolutePath'] ) > 0 ) - $sServerDir = $Config['UserFilesAbsolutePath'] ; -else - $sServerDir = GetRootPath() . $Config["UserFilesPath"] ; - -if ( $Config['UseFileType'] ) - $sServerDir .= $sType . '/' ; - -while ( true ) -{ - // Compose the file path. - $sFilePath = $sServerDir . $sFileName ; - - // If a file with that name already exists. - if ( is_file( $sFilePath ) ) - { - $iCounter++ ; - $sFileName = RemoveExtension( $sOriginalFileName ) . '(' . $iCounter . ').' . $sExtension ; - $sErrorNumber = '201' ; - } - else - { - move_uploaded_file( $oFile['tmp_name'], $sFilePath ) ; - - if ( is_file( $sFilePath ) ) - { - $oldumask = umask(0) ; - chmod( $sFilePath, 0777 ) ; - umask( $oldumask ) ; - } - - if ( $Config['UseFileType'] ) - $sFileUrl = $Config["UserFilesPath"] . $sType . '/' . $sFileName ; - else - $sFileUrl = $Config["UserFilesPath"] . $sFileName ; - - break ; - } -} - -SendResults( $sErrorNumber, $sFileUrl, $sFileName ) ; -?> \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/filemanager/upload/php/util.php b/phpgwapi/js/fckeditor/editor/filemanager/upload/php/util.php deleted file mode 100644 index eebb6d181c..0000000000 --- a/phpgwapi/js/fckeditor/editor/filemanager/upload/php/util.php +++ /dev/null @@ -1,43 +0,0 @@ - \ No newline at end of file diff --git a/phpgwapi/js/fckeditor/editor/js/fckadobeair.js b/phpgwapi/js/fckeditor/editor/js/fckadobeair.js new file mode 100644 index 0000000000..21bd07f76e --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/js/fckadobeair.js @@ -0,0 +1,176 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Compatibility code for Adobe AIR. + */ + +if ( FCKBrowserInfo.IsAIR ) +{ + var FCKAdobeAIR = (function() + { + /* + * ### Private functions. + */ + + var getDocumentHead = function( doc ) + { + var head ; + var heads = doc.getElementsByTagName( 'head' ) ; + + if( heads && heads[0] ) + head = heads[0] ; + else + { + head = doc.createElement( 'head' ) ; + doc.documentElement.insertBefore( head, doc.documentElement.firstChild ) ; + } + + return head ; + } ; + + /* + * ### Public interface. + */ + return { + FCKeditorAPI_Evaluate : function( parentWindow, script ) + { + // TODO : This one doesn't work always. The parent window will + // point to an anonymous function in this window. If this + // window is destroyied the parent window will be pointing to + // an invalid reference. + + // Evaluate the script in this window. + eval( script ) ; + + // Point the FCKeditorAPI property of the parent window to the + // local reference. + parentWindow.FCKeditorAPI = window.FCKeditorAPI ; + }, + + EditingArea_Start : function( doc, html ) + { + // Get the HTML for the . + var headInnerHtml = html.match( /([\s\S]*)<\/head>/i )[1] ; + + if ( headInnerHtml && headInnerHtml.length > 0 ) + { + // Inject the HTML inside a
    ',G);}};if (FCKBrowserInfo.IsIE){FCKToolbarFontFormatCombo.prototype.RefreshActiveItems=function(A,B){if (B==this.NormalLabel){if (A.Label!=' ') A.DeselectAll(true);}else{if (this._LastValue==B) return;A.SelectItemByLabel(B,true);};this._LastValue=B;}} -var FCKToolbarStyleCombo=function(A,B){this.CommandName='Style';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;};FCKToolbarStyleCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarStyleCombo.prototype.GetLabel=function(){return FCKLang.Style;};FCKToolbarStyleCombo.prototype.CreateItems=function(A){var B=A._Panel.Document;FCKTools.AppendStyleSheet(B,FCKConfig.ToolbarComboPreviewCSS);B.body.className+=' ForceBaseFont';if (FCKConfig.BodyId&&FCKConfig.BodyId.length>0) B.body.id=FCKConfig.BodyId;if (FCKConfig.BodyClass&&FCKConfig.BodyClass.length>0) B.body.className+=' '+FCKConfig.BodyClass;if (!(FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsGecko10)) A.OnBeforeClick=this.RefreshVisibleItems;var C=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).Styles;for (var s in C){var D=C[s];var E;if (D.IsObjectElement) E=A.AddItem(s,s);else E=A.AddItem(s,D.GetOpenerTag()+s+D.GetCloserTag());E.Style=D;}};FCKToolbarStyleCombo.prototype.RefreshActiveItems=function(A){A.DeselectAll();var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetActiveStyles();if (B.length>0){for (var i=0;i'+document.getElementById('xToolbarSpace').innerHTML+'');G.close();G.oncontextmenu=FCKTools.CancelEvent;FCKTools.AppendStyleSheet(G,FCKConfig.SkinPath+'fck_editor.css');B=D.__FCKToolbarSet=new FCKToolbarSet(G);B._IFrame=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(D,FCKToolbarSet_Target_Cleanup);};B.CurrentInstance=FCK;FCK.AttachToOnSelectionChange(B.RefreshItemsState);return B;};function FCK_OnBlur(A){var B=A.ToolbarSet;if (B.CurrentInstance==A) B.Disable();};function FCK_OnFocus(A){var B=A.ToolbarSet;var C=A||FCK;B.CurrentInstance.FocusManager.RemoveWindow(B._IFrame.contentWindow);B.CurrentInstance=C;C.FocusManager.AddWindow(B._IFrame.contentWindow,true);B.Enable();};function FCKToolbarSet_Cleanup(){this._TargetElement=null;this._IFrame=null;};function FCKToolbarSet_Target_Cleanup(){this.__FCKToolbarSet=null;};var FCKToolbarSet=function(A){this._Document=A;this._TargetElement=A.getElementById('xToolbar');var B=A.getElementById('xExpandHandle');var C=A.getElementById('xCollapseHandle');B.title=FCKLang.ToolbarExpand;B.onclick=FCKToolbarSet_Expand_OnClick;C.title=FCKLang.ToolbarCollapse;C.onclick=FCKToolbarSet_Collapse_OnClick;if (!FCKConfig.ToolbarCanCollapse||FCKConfig.ToolbarStartExpanded) this.Expand();else this.Collapse();C.style.display=FCKConfig.ToolbarCanCollapse?'':'none';if (FCKConfig.ToolbarCanCollapse) C.style.display='';else A.getElementById('xTBLeftBorder').style.display='';this.Toolbars=[];this.IsLoaded=false;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarSet_Cleanup);};function FCKToolbarSet_Expand_OnClick(){FCK.ToolbarSet.Expand();};function FCKToolbarSet_Collapse_OnClick(){FCK.ToolbarSet.Collapse();};FCKToolbarSet.prototype.Expand=function(){this._ChangeVisibility(false);};FCKToolbarSet.prototype.Collapse=function(){this._ChangeVisibility(true);};FCKToolbarSet.prototype._ChangeVisibility=function(A){this._Document.getElementById('xCollapsed').style.display=A?'':'none';this._Document.getElementById('xExpanded').style.display=A?'none':'';if (FCKBrowserInfo.IsGecko){FCKTools.RunFunction(window.onresize);}};FCKToolbarSet.prototype.Load=function(A){this.Name=A;this.Items=[];this.ItemsWysiwygOnly=[];this.ItemsContextSensitive=[];this._TargetElement.innerHTML='';var B=FCKConfig.ToolbarSets[A];if (!B){alert(FCKLang.UnknownToolbarSet.replace(/%1/g,A));return;};this.Toolbars=[];for (var x=0;x0) A.deleteRow(0);}};FCKMenuBlock.prototype.Create=function(A){if (!this._ItemsTable){if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuBlock_Cleanup);this._Window=FCKTools.GetElementWindow(A);var B=FCKTools.GetElementDocument(A);var C=A.appendChild(B.createElement('table'));C.cellPadding=0;C.cellSpacing=0;FCKTools.DisableSelection(C);var D=C.insertRow(-1).insertCell(-1);D.className='MN_Menu';var E=this._ItemsTable=D.appendChild(B.createElement('table'));E.cellPadding=0;E.cellSpacing=0;};for (var i=0;i0&&F.href.length==0);if (G) return;menu.AddSeparator();if (E) 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){var F=FCKSelection.MoveToAncestorNode('A');var G=(F&&F.name.length>0);if (G||(tagName=='IMG'&&tag.getAttribute('_fckanchor'))){menu.AddSeparator();menu.AddItem('Anchor',FCKLang.AnchorProp,36);}}};case 'Flash':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&tag.getAttribute('_fckflash')){menu.AddSeparator();menu.AddItem('Flash',FCKLang.FlashProperties,38);}}};case 'Form':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('FORM')){menu.AddSeparator();menu.AddItem('Form',FCKLang.FormProp,48);}}};case 'Checkbox':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='checkbox'){menu.AddSeparator();menu.AddItem('Checkbox',FCKLang.CheckboxProp,49);}}};case 'Radio':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='radio'){menu.AddSeparator();menu.AddItem('Radio',FCKLang.RadioButtonProp,50);}}};case 'TextField':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&(tag.type=='text'||tag.type=='password')){menu.AddSeparator();menu.AddItem('TextField',FCKLang.TextFieldProp,51);}}};case 'HiddenField':return {AddItems:function(menu,tag,tagName){if (tagName=='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(){FCK.Events.FireEvent('OnSelectionChange');var A,sTagName;if ((A=FCKSelection.GetSelectedElement())) sTagName=A.tagName;var B=FCK.ContextMenu._InnerContextMenu;B.RemoveAllItems();var C=FCK.ContextMenu.Listeners;for (var i=0;i0){var A;if (this.AvailableLangs.IndexOf(FCKLanguageManager.ActiveLanguage.Code)>=0) A=FCKLanguageManager.ActiveLanguage.Code;else A=this.AvailableLangs[0];LoadScript(this.Path+'lang/'+A+'.js');};LoadScript(this.Path+'fckplugin.js');} -var FCKPlugins=FCK.Plugins={};FCKPlugins.ItemsCount=0;FCKPlugins.Items={};FCKPlugins.Load=function(){var A=FCKPlugins.Items;for (var i=0;i-1);};String.prototype.Equals=function(){var A=arguments;if (A.length==1&&A[0].pop) A=A[0];for (var i=0;iC) return false;if (B){var E=new RegExp(A+'$','i');return E.test(this);}else return (D==0||this.substr(C-D,D)==A);};String.prototype.Remove=function(A,B){var s='';if (A>0) s=this.substring(0,A);if (A+B=7),IsIE6:/*@cc_on!@*/false && ( parseInt( s.match( /msie (\d+)/)[1],10)>=6),IsGecko:s.Contains('gecko/'),IsSafari:s.Contains(' applewebkit/'),IsOpera:!!window.opera,IsAIR:s.Contains(' adobeair/'),IsMac:s.Contains('macintosh')};(function(A){A.IsGeckoLike=(A.IsGecko||A.IsSafari||A.IsOpera);if (A.IsGecko){var B=s.match(/gecko\/(\d+)/)[1];A.IsGecko10=((B<20051111)||(/rv:1\.7/.test(s)));A.IsGecko19=/rv:1\.9/.test(s);}else A.IsGecko10=false;})(FCKBrowserInfo); +var FCKURLParams={};(function(){var A=document.location.search.substr(1).split('&');for (var i=0;i';if (!FCKRegexLib.HtmlOpener.test(A)) A=''+A+'';if (!FCKRegexLib.HeadOpener.test(A)) A=A.replace(FCKRegexLib.HtmlOpener,'$&');return A;}else{var B=FCKConfig.DocType+'0&&!FCKRegexLib.Html4DocType.test(FCKConfig.DocType)) B+=' style="overflow-y: scroll"';B+='>'+A+'';return B;}},ConvertToDataFormat:function(A,B,C,D){var E=FCKXHtml.GetXHTML(A,!B,D);if (C&&FCKRegexLib.EmptyOutParagraph.test(E)) return '';return E;},FixHtml:function(A){return A;}}; +var FCK={Name:FCKURLParams['InstanceName'],Status:0,EditMode:0,Toolbar:null,HasFocus:false,DataProcessor:new FCKDataProcessor(),GetInstanceObject:(function(){var w=window;return function(name){return w[name];}})(),AttachToOnSelectionChange:function(A){this.Events.AttachEvent('OnSelectionChange',A);},GetLinkedFieldValue:function(){return this.LinkedField.value;},GetParentForm:function(){return this.LinkedField.form;},StartupValue:'',IsDirty:function(){if (this.EditMode==1) return (this.StartupValue!=this.EditingArea.Textarea.value);else{if (!this.EditorDocument) return false;return (this.StartupValue!=this.EditorDocument.body.innerHTML);}},ResetIsDirty:function(){if (this.EditMode==1) this.StartupValue=this.EditingArea.Textarea.value;else if (this.EditorDocument.body) this.StartupValue=this.EditorDocument.body.innerHTML;},StartEditor:function(){this.TempBaseTag=FCKConfig.BaseHref.length>0?'':'';var A=FCK.KeystrokeHandler=new FCKKeystrokeHandler();A.OnKeystroke=_FCK_KeystrokeHandler_OnKeystroke;A.SetKeystrokes(FCKConfig.Keystrokes);if (FCKBrowserInfo.IsIE7){if ((CTRL+86/*V*/) in A.Keystrokes) A.SetKeystrokes([CTRL+86,true]);if ((SHIFT+45/*INS*/) in A.Keystrokes) A.SetKeystrokes([SHIFT+45,true]);};A.SetKeystrokes([CTRL+8,true]);this.EditingArea=new FCKEditingArea(document.getElementById('xEditingArea'));this.EditingArea.FFSpellChecker=FCKConfig.FirefoxSpellChecker;this.SetData(this.GetLinkedFieldValue(),true);FCKTools.AddEventListener(document,"keydown",this._TabKeyHandler);this.AttachToOnSelectionChange(_FCK_PaddingNodeListener);if (FCKBrowserInfo.IsGecko) this.AttachToOnSelectionChange(this._ExecCheckEmptyBlock);},Focus:function(){FCK.EditingArea.Focus();},SetStatus:function(A){this.Status=A;if (A==1){FCKFocusManager.AddWindow(window,true);if (FCKBrowserInfo.IsIE) FCKFocusManager.AddWindow(window.frameElement,true);if (FCKConfig.StartupFocus) FCK.Focus();};this.Events.FireEvent('OnStatusChange',A);},FixBody:function(){var A=FCKConfig.EnterMode;if (A!='p'&&A!='div') return;var B=this.EditorDocument;if (!B) return;var C=B.body;if (!C) return;FCKDomTools.TrimNode(C);var D=C.firstChild;var E;while (D){var F=false;switch (D.nodeType){case 1:var G=D.nodeName.toLowerCase();if (!FCKListsLib.BlockElements[G]&&G!='li'&&!D.getAttribute('_fckfakelement')&&D.getAttribute('_moz_dirty')==null) F=true;break;case 3:if (E||D.nodeValue.Trim().length>0) F=true;};if (F){var H=D.parentNode;if (!E) E=H.insertBefore(B.createElement(A),D);E.appendChild(H.removeChild(D));D=E.nextSibling;}else{if (E){FCKDomTools.TrimNode(E);E=null;};D=D.nextSibling;}};if (E) FCKDomTools.TrimNode(E);},GetData:function(A){if (FCK.EditMode==1) return FCK.EditingArea.Textarea.value;this.FixBody();var B=FCK.EditorDocument;if (!B) return null;var C=FCKConfig.FullPage;var D=FCK.DataProcessor.ConvertToDataFormat(C?B.documentElement:B.body,!C,FCKConfig.IgnoreEmptyParagraphValue,A);D=FCK.ProtectEventsRestore(D);if (FCKBrowserInfo.IsIE) D=D.replace(FCKRegexLib.ToReplace,'$1');if (C){if (FCK.DocTypeDeclaration&&FCK.DocTypeDeclaration.length>0) D=FCK.DocTypeDeclaration+'\n'+D;if (FCK.XmlDeclaration&&FCK.XmlDeclaration.length>0) D=FCK.XmlDeclaration+'\n'+D;};return FCKConfig.ProtectedSource.Revert(D);},UpdateLinkedField:function(){var A=FCK.GetXHTML(FCKConfig.FormatOutput);if (FCKConfig.HtmlEncodeOutput) A=FCKTools.HTMLEncode(A);FCK.LinkedField.value=A;FCK.Events.FireEvent('OnAfterLinkedFieldUpdate');},RegisteredDoubleClickHandlers:{},OnDoubleClick:function(A){var B=FCK.RegisteredDoubleClickHandlers[A.tagName.toUpperCase()];if (B){for (var i=0;i0?'|ABBR|XML|EMBED|OBJECT':'ABBR|XML|EMBED|OBJECT';var C;if (B.length>0){C=new RegExp('<('+B+')(?!\w|:)','gi');A=A.replace(C,'','gi');A=A.replace(C,'<\/FCK:$1>');};B='META';if (FCKBrowserInfo.IsIE) B+='|HR';C=new RegExp('<(('+B+')(?=\\s|>|/)[\\s\\S]*?)/?>','gi');A=A.replace(C,'');return A;},SetData:function(A,B){this.EditingArea.Mode=FCK.EditMode;if (FCKBrowserInfo.IsIE&&FCK.EditorDocument){FCK.EditorDocument.detachEvent("onselectionchange",Doc_OnSelectionChange);};if (FCK.EditMode==0){this._ForceResetIsDirty=(B===true);A=FCKConfig.ProtectedSource.Protect(A);A=FCK.DataProcessor.ConvertToHtml(A);A=A.replace(FCKRegexLib.InvalidSelfCloseTags,'$1>');A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);if (FCK.TempBaseTag.length>0&&!FCKRegexLib.HasBaseTag.test(A)) A=A.replace(FCKRegexLib.HeadOpener,'$&'+FCK.TempBaseTag);var C='';if (!FCKConfig.FullPage) C+=_FCK_GetEditorAreaStyleTags();if (FCKBrowserInfo.IsIE) C+=FCK._GetBehaviorsStyle();else if (FCKConfig.ShowBorders) C+=FCKTools.GetStyleHtml(FCK_ShowTableBordersCSS,true);C+=FCKTools.GetStyleHtml(FCK_InternalCSS,true);A=A.replace(FCKRegexLib.HeadCloser,C+'$&');this.EditingArea.OnLoad=_FCK_EditingArea_OnLoad;this.EditingArea.Start(A);}else{FCK.EditorWindow=null;FCK.EditorDocument=null;FCKDomTools.PaddingNode=null;this.EditingArea.OnLoad=null;this.EditingArea.Start(A);this.EditingArea.Textarea._FCKShowContextMenu=true;FCK.EnterKeyHandler=null;if (B) this.ResetIsDirty();FCK.KeystrokeHandler.AttachToElement(this.EditingArea.Textarea);this.EditingArea.Textarea.focus();FCK.Events.FireEvent('OnAfterSetHTML');};if (FCKBrowserInfo.IsGecko) window.onresize();},RedirectNamedCommands:{},ExecuteNamedCommand:function(A,B,C,D){if (!D) FCKUndo.SaveUndoStep();if (!C&&FCK.RedirectNamedCommands[A]!=null) FCK.ExecuteRedirectedNamedCommand(A,B);else{FCK.Focus();FCK.EditorDocument.execCommand(A,false,B);FCK.Events.FireEvent('OnSelectionChange');};if (!D) FCKUndo.SaveUndoStep();},GetNamedCommandState:function(A){try{if (FCKBrowserInfo.IsSafari&&FCK.EditorWindow&&A.IEquals('Paste')) return 0;if (!FCK.EditorDocument.queryCommandEnabled(A)) return -1;else{return FCK.EditorDocument.queryCommandState(A)?1:0;}}catch (e){return 0;}},GetNamedCommandValue:function(A){var B='';var C=FCK.GetNamedCommandState(A);if (C==-1) return null;try{B=this.EditorDocument.queryCommandValue(A);}catch(e) {};return B?B:'';},Paste:function(A){if (FCK.Status!=2||!FCK.Events.FireEvent('OnPaste')) return false;return A||FCK._ExecPaste();},PasteFromWord:function(){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteFromWord,'dialog/fck_paste.html',400,330,'Word');},Preview:function(){var A;if (FCKConfig.FullPage){if (FCK.TempBaseTag.length>0) A=FCK.TempBaseTag+FCK.GetXHTML();else A=FCK.GetXHTML();}else{A=FCKConfig.DocType+''+FCK.TempBaseTag+''+FCKLang.Preview+''+_FCK_GetEditorAreaStyleTags()+''+FCK.GetXHTML()+'';};var B=FCKConfig.ScreenWidth*0.8;var C=FCKConfig.ScreenHeight*0.7;var D=(FCKConfig.ScreenWidth-B)/2;var E='';if (FCK_IS_CUSTOM_DOMAIN&&FCKBrowserInfo.IsIE){window._FCKHtmlToLoad=A;E='javascript:void( (function(){document.open() ;document.domain="'+document.domain+'" ;document.write( window.opener._FCKHtmlToLoad );document.close() ;window.opener._FCKHtmlToLoad = null ;})() )';};var F=window.open(E,null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+B+',height='+C+',left='+D);if (!FCK_IS_CUSTOM_DOMAIN||!FCKBrowserInfo.IsIE){F.document.write(A);F.document.close();}},SwitchEditMode:function(A){var B=(FCK.EditMode==0);var C=FCK.IsDirty();var D;if (B){FCKCommands.GetCommand('ShowBlocks').SaveState();if (!A&&FCKBrowserInfo.IsIE) FCKUndo.SaveUndoStep();D=FCK.GetXHTML(FCKConfig.FormatSource);if (D==null) return false;}else D=this.EditingArea.Textarea.value;FCK.EditMode=B?1:0;FCK.SetData(D,!C);FCK.Focus();FCKTools.RunFunction(FCK.ToolbarSet.RefreshModeState,FCK.ToolbarSet);return true;},InsertElement:function(A){if (typeof A=='string') A=this.EditorDocument.createElement(A);var B=A.nodeName.toLowerCase();FCKSelection.Restore();var C=new FCKDomRange(this.EditorWindow);if (FCKListsLib.BlockElements[B]!=null){C.SplitBlock();C.InsertNode(A);var D=FCKDomTools.GetNextSourceElement(A,false,null,['hr','br','param','img','area','input'],true);if (!D&&FCKConfig.EnterMode!='br'){D=this.EditorDocument.body.appendChild(this.EditorDocument.createElement(FCKConfig.EnterMode));if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(D);};if (FCKListsLib.EmptyElements[B]==null) C.MoveToElementEditStart(A);else if (D) C.MoveToElementEditStart(D);else C.MoveToPosition(A,4);if (FCKBrowserInfo.IsGecko){if (D) D.scrollIntoView(false);A.scrollIntoView(false);}}else{C.MoveToSelection();C.DeleteContents();C.InsertNode(A);C.SetStart(A,4);C.SetEnd(A,4);};C.Select();C.Release();this.Focus();return A;},_InsertBlockElement:function(A){},_IsFunctionKey:function(A){if (A>=16&&A<=20) return true;if (A==27||(A>=33&&A<=40)) return true;if (A==45) return true;return false;},_KeyDownListener:function(A){if (!A) A=FCK.EditorWindow.event;if (FCK.EditorWindow){if (!FCK._IsFunctionKey(A.keyCode)&&!(A.ctrlKey||A.metaKey)&&!(A.keyCode==46)) FCK._KeyDownUndo();};return true;},_KeyDownUndo:function(){if (!FCKUndo.Typing){FCKUndo.SaveUndoStep();FCKUndo.Typing=true;FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.TypesCount++;FCKUndo.Changed=1;if (FCKUndo.TypesCount>FCKUndo.MaxTypes){FCKUndo.TypesCount=0;FCKUndo.SaveUndoStep();}},_TabKeyHandler:function(A){if (!A) A=window.event;var B=A.keyCode;if (B==9&&FCK.EditMode!=0){if (FCKBrowserInfo.IsIE){var C=document.selection.createRange();if (C.parentElement()!=FCK.EditingArea.Textarea) return true;C.text='\t';C.select();}else{var a=[];var D=FCK.EditingArea.Textarea;var E=D.selectionStart;var F=D.selectionEnd;a.push(D.value.substr(0,E));a.push('\t');a.push(D.value.substr(F));D.value=a.join('');D.setSelectionRange(E+1,E+1);};if (A.preventDefault) return A.preventDefault();return A.returnValue=false;};return true;}};FCK.Events=new FCKEvents(FCK);FCK.GetHTML=FCK.GetXHTML=FCK.GetData;FCK.SetHTML=FCK.SetData;FCK.InsertElementAndGetIt=FCK.CreateElement=FCK.InsertElement;function _FCK_ProtectEvents_ReplaceTags(A){return A.replace(FCKRegexLib.EventAttributes,_FCK_ProtectEvents_ReplaceEvents);};function _FCK_ProtectEvents_ReplaceEvents(A,B){return ' '+B+'_fckprotectedatt="'+encodeURIComponent(A)+'"';};function _FCK_ProtectEvents_RestoreEvents(A,B){return decodeURIComponent(B);};function _FCK_MouseEventsListener(A){if (!A) A=window.event;if (A.type=='mousedown') FCK.MouseDownFlag=true;else if (A.type=='mouseup') FCK.MouseDownFlag=false;else if (A.type=='mousemove') FCK.Events.FireEvent('OnMouseMove',A);};function _FCK_PaddingNodeListener(){if (FCKConfig.EnterMode.IEquals('br')) return;FCKDomTools.EnforcePaddingNode(FCK.EditorDocument,FCKConfig.EnterMode);if (!FCKBrowserInfo.IsIE&&FCKDomTools.PaddingNode){var A=FCKSelection.GetSelection();if (A&&A.rangeCount==1){var B=A.getRangeAt(0);if (B.collapsed&&B.startContainer==FCK.EditorDocument.body&&B.startOffset==0){B.selectNodeContents(FCKDomTools.PaddingNode);B.collapse(true);A.removeAllRanges();A.addRange(B);}}}else if (FCKDomTools.PaddingNode){var C=FCKSelection.GetParentElement();var D=FCKDomTools.PaddingNode;if (C&&C.nodeName.IEquals('body')){if (FCK.EditorDocument.body.childNodes.length==1&&FCK.EditorDocument.body.firstChild==D){var B=FCK.EditorDocument.body.createTextRange();var F=false;if (!D.childNodes.firstChild){D.appendChild(FCKTools.GetElementDocument(D).createTextNode('\ufeff'));F=true;};B.moveToElementText(D);B.select();if (F) B.pasteHTML('');}}}};function _FCK_EditingArea_OnLoad(){FCK.EditorWindow=FCK.EditingArea.Window;FCK.EditorDocument=FCK.EditingArea.Document;FCK.InitializeBehaviors();FCK.MouseDownFlag=false;FCKTools.AddEventListener(FCK.EditorDocument,'mousemove',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mousedown',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mouseup',_FCK_MouseEventsListener);if (FCKBrowserInfo.IsSafari){var A=function(evt){if (!(evt.ctrlKey||evt.metaKey)) return;if (FCK.EditMode!=0) return;switch (evt.keyCode){case 89:FCKUndo.Redo();break;case 90:FCKUndo.Undo();break;}};FCKTools.AddEventListener(FCK.EditorDocument,'keyup',A);};FCK.EnterKeyHandler=new FCKEnterKey(FCK.EditorWindow,FCKConfig.EnterMode,FCKConfig.ShiftEnterMode,FCKConfig.TabSpaces);FCK.KeystrokeHandler.AttachToElement(FCK.EditorDocument);if (FCK._ForceResetIsDirty) FCK.ResetIsDirty();if (FCKBrowserInfo.IsIE&&FCK.HasFocus) FCK.EditorDocument.body.setActive();FCK.OnAfterSetHTML();FCKCommands.GetCommand('ShowBlocks').RestoreState();if (FCK.Status!=0) return;FCK.SetStatus(1);};function _FCK_GetEditorAreaStyleTags(){return FCKTools.GetStyleHtml(FCKConfig.EditorAreaCSS)+FCKTools.GetStyleHtml(FCKConfig.EditorAreaStyles);};function _FCK_KeystrokeHandler_OnKeystroke(A,B){if (FCK.Status!=2) return false;if (FCK.EditMode==0){switch (B){case 'Paste':return!FCK.Paste();case 'Cut':FCKUndo.SaveUndoStep();return false;}}else{if (B.Equals('Paste','Undo','Redo','SelectAll','Cut')) return false;};var C=FCK.Commands.GetCommand(B);if (C.GetState()==-1) return false;return (C.Execute.apply(C,FCKTools.ArgumentsToArray(arguments,2))!==false);};(function(){var A=window.parent.document;var B=A.getElementById(FCK.Name);var i=0;while (B||i==0){if (B&&B.tagName.toLowerCase().Equals('input','textarea')){FCK.LinkedField=B;break;};B=A.getElementsByName(FCK.Name)[i++];}})();var FCKTempBin={Elements:[],AddElement:function(A){var B=this.Elements.length;this.Elements[B]=A;return B;},RemoveElement:function(A){var e=this.Elements[A];this.Elements[A]=null;return e;},Reset:function(){var i=0;while (i40) return;};var C=function(H){if (H.nodeType!=1) return false;var D=H.tagName.toLowerCase();return (FCKListsLib.BlockElements[D]||FCKListsLib.EmptyElements[D]);};var E=function(){var F=FCKSelection.GetSelection();var G=F.getRangeAt(0);if (!G||!G.collapsed) return;var H=G.endContainer;if (H.nodeType!=3) return;if (H.nodeValue.length!=G.endOffset) return;var I=H.parentNode.tagName.toLowerCase();if (!(I=='a'||String(H.parentNode.contentEditable)=='false'||(!(FCKListsLib.BlockElements[I]||FCKListsLib.NonEmptyBlockElements[I])&&B==35))) return;var J=FCKTools.GetNextTextNode(H,H.parentNode,C);if (J) return;G=FCK.EditorDocument.createRange();J=FCKTools.GetNextTextNode(H,H.parentNode.parentNode,C);if (J){if (FCKBrowserInfo.IsOpera&&B==37) return;G.setStart(J,0);G.setEnd(J,0);}else{while (H.parentNode&&H.parentNode!=FCK.EditorDocument.body&&H.parentNode!=FCK.EditorDocument.documentElement&&H==H.parentNode.lastChild&&(!FCKListsLib.BlockElements[H.parentNode.tagName.toLowerCase()]&&!FCKListsLib.NonEmptyBlockElements[H.parentNode.tagName.toLowerCase()])) H=H.parentNode;if (FCKListsLib.BlockElements[I]||FCKListsLib.EmptyElements[I]||H==FCK.EditorDocument.body){G.setStart(H,H.childNodes.length);G.setEnd(H,H.childNodes.length);}else{var K=H.nextSibling;while (K){if (K.nodeType!=1){K=K.nextSibling;continue;};var L=K.tagName.toLowerCase();if (FCKListsLib.BlockElements[L]||FCKListsLib.EmptyElements[L]||FCKListsLib.NonEmptyBlockElements[L]) break;K=K.nextSibling;};var M=FCK.EditorDocument.createTextNode('');if (K) H.parentNode.insertBefore(M,K);else H.parentNode.appendChild(M);G.setStart(M,0);G.setEnd(M,0);}};F.removeAllRanges();F.addRange(G);FCK.Events.FireEvent("OnSelectionChange");};setTimeout(E,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);this.EditorDocument.addEventListener('keyup',this.ExecOnSelectionChangeTimer,false);this._DblClickListener=function(e){FCK.OnDoubleClick(e.target);e.stopPropagation();};this.EditorDocument.addEventListener('dblclick',this._DblClickListener,true);this.EditorDocument.addEventListener('keydown',this._KeyDownListener,false);if (FCKBrowserInfo.IsGecko){this.EditorWindow.addEventListener('dragdrop',this._ExecDrop,true);}else if (FCKBrowserInfo.IsSafari){var N=function(evt){ if (!FCK.MouseDownFlag) evt.returnValue=false;};this.EditorDocument.addEventListener('dragenter',N,true);this.EditorDocument.addEventListener('dragover',N,true);this.EditorDocument.addEventListener('drop',this._ExecDrop,true);this.EditorDocument.addEventListener('mousedown',function(ev){var O=ev.srcElement;if (O.nodeName.IEquals('IMG','HR','INPUT','TEXTAREA','SELECT')){FCKSelection.SelectNode(O);}},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);};if (FCKBrowserInfo.IsGecko||FCKBrowserInfo.IsOpera){this.EditorDocument.addEventListener('keypress',this._ExecCheckCaret,false);this.EditorDocument.addEventListener('click',this._ExecCheckCaret,false);};FCK.ContextMenu._InnerContextMenu.SetMouseClickWindow(FCK.EditorWindow);FCK.ContextMenu._InnerContextMenu.AttachToElement(FCK.EditorDocument);};FCK.MakeEditable=function(){this.EditingArea.MakeEditable();};function Document_OnContextMenu(e){if (!e.target._FCKShowContextMenu) e.preventDefault();};document.oncontextmenu=Document_OnContextMenu;FCK._BaseGetNamedCommandState=FCK.GetNamedCommandState;FCK.GetNamedCommandState=function(A){switch (A){case 'Unlink':return FCKSelection.HasAncestorNode('A')?0:-1;default:return FCK._BaseGetNamedCommandState(A);}};FCK.RedirectNamedCommands={Print:true,Paste:true};FCK.ExecuteRedirectedNamedCommand=function(A,B){switch (A){case 'Print':FCK.EditorWindow.print();break;case 'Paste':try{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;default:FCK.ExecuteNamedCommand(A,B);}};FCK._ExecPaste=function(){FCKUndo.SaveUndoStep();if (FCKConfig.ForcePasteAsPlainText){FCK.PasteAsPlainText();return false;};return true;};FCK.InsertHtml=function(A){A=FCKConfig.ProtectedSource.Protect(A);A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);FCKUndo.SaveUndoStep();this.EditorDocument.execCommand('inserthtml',false,A);this.Focus();FCKDocumentProcessor.Process(FCK.EditorDocument);this.Events.FireEvent("OnSelectionChange");};FCK.PasteAsPlainText=function(){FCKTools.RunFunction(FCKDialog.OpenDialog,FCKDialog,['FCKDialog_Paste',FCKLang.PasteAsText,'dialog/fck_paste.html',400,330,'PlainText']);};FCK.GetClipboardHTML=function(){return '';};FCK.CreateLink=function(A,B){var C=[];FCK.ExecuteNamedCommand('Unlink',null,false,!!B);if (A.length>0){var D='javascript:void(0);/*'+(new Date().getTime())+'*/';FCK.ExecuteNamedCommand('CreateLink',D,false,!!B);var E=this.EditorDocument.evaluate("//a[@href='"+D+"']",this.EditorDocument.body,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);for (var i=0;i0&&!isNaN(E)) this.PageConfig[D]=parseInt(E,10);else this.PageConfig[D]=E;}};function FCKConfig_LoadPageConfig(){var A=FCKConfig.PageConfig;for (var B in A) FCKConfig[B]=A[B];};function FCKConfig_PreProcess(){var A=FCKConfig;if (A.AllowQueryStringDebug){try{if ((/fckdebug=true/i).test(window.top.location.search)) A.Debug=true;}catch (e) {/*Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error).*/}};if (!A.PluginsPath.EndsWith('/')) A.PluginsPath+='/';var B=A.ToolbarComboPreviewCSS;if (!B||B.length==0) A.ToolbarComboPreviewCSS=A.EditorAreaCSS;A.RemoveAttributesArray=(A.RemoveAttributes||'').split(',');if (!FCKConfig.SkinEditorCSS||FCKConfig.SkinEditorCSS.length==0) FCKConfig.SkinEditorCSS=FCKConfig.SkinPath+'fck_editor.css';if (!FCKConfig.SkinDialogCSS||FCKConfig.SkinDialogCSS.length==0) FCKConfig.SkinDialogCSS=FCKConfig.SkinPath+'fck_dialog.css';};FCKConfig.ToolbarSets={};FCKConfig.Plugins={};FCKConfig.Plugins.Items=[];FCKConfig.Plugins.Add=function(A,B,C){FCKConfig.Plugins.Items.AddItem([A,B,C]);};FCKConfig.ProtectedSource={};FCKConfig.ProtectedSource._CodeTag=(new Date()).valueOf();FCKConfig.ProtectedSource.RegexEntries=[//g,//gi,//gi];FCKConfig.ProtectedSource.Add=function(A){this.RegexEntries.AddItem(A);};FCKConfig.ProtectedSource.Protect=function(A){var B=this._CodeTag;function _Replace(protectedSource){var C=FCKTempBin.AddElement(protectedSource);return '';};for (var i=0;i|>)","g");return A.replace(D,_Replace);};FCKConfig.GetBodyAttributes=function(){var A='';if (this.BodyId&&this.BodyId.length>0) A+=' id="'+this.BodyId+'"';if (this.BodyClass&&this.BodyClass.length>0) A+=' class="'+this.BodyClass+'"';return A;};FCKConfig.ApplyBodyAttributes=function(A){if (this.BodyId&&this.BodyId.length>0) A.id=FCKConfig.BodyId;if (this.BodyClass&&this.BodyClass.length>0) A.className+=' '+FCKConfig.BodyClass;}; +var FCKDebug={};FCKDebug._GetWindow=function(){if (!this.DebugWindow||this.DebugWindow.closed) this.DebugWindow=window.open(FCKConfig.BasePath+'fckdebug.html','FCKeditorDebug','menubar=no,scrollbars=yes,resizable=yes,location=no,toolbar=no,width=600,height=500',true);return this.DebugWindow;};FCKDebug.Output=function(A,B,C){if (!FCKConfig.Debug) return;try{this._GetWindow().Output(A,B);}catch (e) {}};FCKDebug.OutputObject=function(A,B){if (!FCKConfig.Debug) return;try{this._GetWindow().OutputObject(A,B);}catch (e) {}}; +var FCKDomTools={MoveChildren:function(A,B,C){if (A==B) return;var D;if (C){while ((D=A.lastChild)) B.insertBefore(A.removeChild(D),B.firstChild);}else{while ((D=A.firstChild)) B.appendChild(A.removeChild(D));}},MoveNode:function(A,B,C){if (C) B.insertBefore(FCKDomTools.RemoveNode(A),B.firstChild);else B.appendChild(FCKDomTools.RemoveNode(A));},TrimNode:function(A){this.LTrimNode(A);this.RTrimNode(A);},LTrimNode:function(A){var B;while ((B=A.firstChild)){if (B.nodeType==3){var C=B.nodeValue.LTrim();var D=B.nodeValue.length;if (C.length==0){A.removeChild(B);continue;}else if (C.length0) break;if (A.lastChild) A=A.lastChild;else return this.GetPreviousSourceElement(A,B,C,D);};return null;},GetNextSourceElement:function(A,B,C,D,E){while((A=this.GetNextSourceNode(A,E))){if (A.nodeType==1){if (C&&A.nodeName.IEquals(C)) break;if (D&&A.nodeName.IEquals(D)) return this.GetNextSourceElement(A,B,C,D);return A;}else if (B&&A.nodeType==3&&A.nodeValue.RTrim().length>0) break;};return null;},GetNextSourceNode:function(A,B,C,D){if (!A) return null;var E;if (!B&&A.firstChild) E=A.firstChild;else{if (D&&A==D) return null;E=A.nextSibling;if (!E&&(!D||D!=A.parentNode)) return this.GetNextSourceNode(A.parentNode,true,C,D);};if (C&&E&&E.nodeType!=C) return this.GetNextSourceNode(E,false,C,D);return E;},GetPreviousSourceNode:function(A,B,C,D){if (!A) return null;var E;if (!B&&A.lastChild) E=A.lastChild;else{if (D&&A==D) return null;E=A.previousSibling;if (!E&&(!D||D!=A.parentNode)) return this.GetPreviousSourceNode(A.parentNode,true,C,D);};if (C&&E&&E.nodeType!=C) return this.GetPreviousSourceNode(E,false,C,D);return E;},InsertAfterNode:function(A,B){return A.parentNode.insertBefore(B,A.nextSibling);},GetParents:function(A){var B=[];while (A){B.unshift(A);A=A.parentNode;};return B;},GetCommonParents:function(A,B){var C=this.GetParents(A);var D=this.GetParents(B);var E=[];for (var i=0;i0) D[C.pop().toLowerCase()]=1;var E=this.GetCommonParents(A,B);var F=null;while ((F=E.pop())){if (D[F.nodeName.toLowerCase()]) return F;};return null;},GetIndexOf:function(A){var B=A.parentNode?A.parentNode.firstChild:null;var C=-1;while (B){C++;if (B==A) return C;B=B.nextSibling;};return-1;},PaddingNode:null,EnforcePaddingNode:function(A,B){try{if (!A||!A.body) return;}catch (e){return;};this.CheckAndRemovePaddingNode(A,B,true);try{if (A.body.lastChild&&(A.body.lastChild.nodeType!=1||A.body.lastChild.tagName.toLowerCase()==B.toLowerCase())) return;}catch (e){return;};var C=A.createElement(B);if (FCKBrowserInfo.IsGecko&&FCKListsLib.NonEmptyBlockElements[B]) FCKTools.AppendBogusBr(C);this.PaddingNode=C;if (A.body.childNodes.length==1&&A.body.firstChild.nodeType==1&&A.body.firstChild.tagName.toLowerCase()=='br'&&(A.body.firstChild.getAttribute('_moz_dirty')!=null||A.body.firstChild.getAttribute('type')=='_moz')) A.body.replaceChild(C,A.body.firstChild);else A.body.appendChild(C);},CheckAndRemovePaddingNode:function(A,B,C){var D=this.PaddingNode;if (!D) return;try{if (D.parentNode!=A.body||D.tagName.toLowerCase()!=B||(D.childNodes.length>1)||(D.firstChild&&D.firstChild.nodeValue!='\xa0'&&String(D.firstChild.tagName).toLowerCase()!='br')){this.PaddingNode=null;return;}}catch (e){this.PaddingNode=null;return;};if (!C){if (D.parentNode.childNodes.length>1) D.parentNode.removeChild(D);this.PaddingNode=null;}},HasAttribute:function(A,B){if (A.hasAttribute) return A.hasAttribute(B);else{var C=A.attributes[B];return (C!=undefined&&C.specified);}},HasAttributes:function(A){var B=A.attributes;for (var i=0;i0) return true;}else if (B[i].specified) return true;};return false;},RemoveAttribute:function(A,B){if (FCKBrowserInfo.IsIE&&B.toLowerCase()=='class') B='className';return A.removeAttribute(B,0);},RemoveAttributes:function (A,B){for (var i=0;i0) return false;C=C.nextSibling;};return D?this.CheckIsEmptyElement(D,B):true;},SetElementStyles:function(A,B){var C=A.style;for (var D in B) C[D]=B[D];},SetOpacity:function(A,B){if (FCKBrowserInfo.IsIE){B=Math.round(B*100);A.style.filter=(B>100?'':'progid:DXImageTransform.Microsoft.Alpha(opacity='+B+')');}else A.style.opacity=B;},GetCurrentElementStyle:function(A,B){if (FCKBrowserInfo.IsIE) return A.currentStyle[B];else return A.ownerDocument.defaultView.getComputedStyle(A,'').getPropertyValue(B);},GetPositionedAncestor:function(A){var B=A;while (B!=FCKTools.GetElementDocument(B).documentElement){if (this.GetCurrentElementStyle(B,'position')!='static') return B;if (B==FCKTools.GetElementDocument(B).documentElement&¤tWindow!=w) B=currentWindow.frameElement;else B=B.parentNode;};return null;},ScrollIntoView:function(A,B){var C=FCKTools.GetElementWindow(A);var D=FCKTools.GetViewPaneSize(C).Height;var E=D*-1;if (B===false){E+=A.offsetHeight;E+=parseInt(this.GetCurrentElementStyle(A,'marginBottom')||0,10);};E+=A.offsetTop;while ((A=A.offsetParent)) E+=A.offsetTop||0;var F=FCKTools.GetScrollPosition(C).Y;if (E>0&&E>F) C.scrollTo(0,E);},CheckIsEditable:function(A){var B=A.nodeName.toLowerCase();var C=FCK.DTD[B]||FCK.DTD.span;return (C['#']&&!FCKListsLib.NonEditableElements[B]);}}; +var FCKTools={};FCKTools.CreateBogusBR=function(A){var B=A.createElement('br');B.setAttribute('type','_moz');return B;};FCKTools.FixCssUrls=function(A,B){if (!A||A.length==0) return B;return B.replace(/url\s*\(([\s'"]*)(.*?)([\s"']*)\)/g,function(match,opener,path,closer){if (/^\/|^\w?:/.test(path)) return match;else return 'url('+opener+A+path+closer+')';});};FCKTools._GetUrlFixedCss=function(A,B){var C=A.match(/^([^|]+)\|([\s\S]*)/);if (C) return FCKTools.FixCssUrls(C[1],C[2]);else return A;};FCKTools.AppendStyleSheet=function(A,B){if (!B) return [];if (typeof(B)=='string'){if (/[\\\/\.]\w*$/.test(B)){return this.AppendStyleSheet(A,B.split(','));}else return [this.AppendStyleString(A,FCKTools._GetUrlFixedCss(B))];}else{var C=[];for (var i=0;i'+styleDef+'';};var C=function(cssFileUrl,markTemp){if (cssFileUrl.length==0) return '';var B=markTemp?' _fcktemp="true"':'';return '';};return function(cssFileOrArrayOrDef,markTemp){if (!cssFileOrArrayOrDef) return '';if (typeof(cssFileOrArrayOrDef)=='string'){if (/[\\\/\.]\w*$/.test(cssFileOrArrayOrDef)){return this.GetStyleHtml(cssFileOrArrayOrDef.split(','),markTemp);}else return A(this._GetUrlFixedCss(cssFileOrArrayOrDef),markTemp);}else{var E='';for (var i=0;i/g,'>');return A;};FCKTools.HTMLDecode=function(A){if (!A) return '';A=A.replace(/>/g,'>');A=A.replace(/</g,'<');A=A.replace(/&/g,'&');return A;};FCKTools._ProcessLineBreaksForPMode=function(A,B,C,D,E){var F=0;var G="

    ";var H="

    ";var I="
    ";if (C){G="
  • ";H="
  • ";F=1;};while (D&&D!=A.FCK.EditorDocument.body){if (D.tagName.toLowerCase()=='p'){F=1;break;};D=D.parentNode;};for (var i=0;i0) return A[A.length-1];return null;};FCKTools.GetDocumentPosition=function(w,A){var x=0;var y=0;var B=A;var C=null;var D=FCKTools.GetElementWindow(B);while (B&&!(D==w&&(B==w.document.body||B==w.document.documentElement))){x+=B.offsetLeft-B.scrollLeft;y+=B.offsetTop-B.scrollTop;if (!FCKBrowserInfo.IsOpera){var E=C;while (E&&E!=B){x-=E.scrollLeft;y-=E.scrollTop;E=E.parentNode;}};C=B;if (B.offsetParent) B=B.offsetParent;else{if (D!=w){B=D.frameElement;C=null;if (B) D=B.contentWindow.parent;}else B=null;}};if (FCKDomTools.GetCurrentElementStyle(w.document.body,'position')!='static'||(FCKBrowserInfo.IsIE&&FCKDomTools.GetPositionedAncestor(A)==null)){x+=w.document.body.offsetLeft;y+=w.document.body.offsetTop;};return { "x":x,"y":y };};FCKTools.GetWindowPosition=function(w,A){var B=this.GetDocumentPosition(w,A);var C=FCKTools.GetScrollPosition(w);B.x-=C.X;B.y-=C.Y;return B;};FCKTools.ProtectFormStyles=function(A){if (!A||A.nodeType!=1||A.tagName.toLowerCase()!='form') return [];var B=[];var C=['style','className'];for (var i=0;i0){for (var i=B.length-1;i>=0;i--){var C=B[i][0];var D=B[i][1];if (D) A.insertBefore(C,D);else A.appendChild(C);}}};FCKTools.GetNextNode=function(A,B){if (A.firstChild) return A.firstChild;else if (A.nextSibling) return A.nextSibling;else{var C=A.parentNode;while (C){if (C==B) return null;if (C.nextSibling) return C.nextSibling;else C=C.parentNode;}};return null;};FCKTools.GetNextTextNode=function(A,B,C){node=this.GetNextNode(A,B);if (C&&node&&C(node)) return null;while (node&&node.nodeType!=3){node=this.GetNextNode(node,B);if (C&&node&&C(node)) return null;};return node;};FCKTools.Merge=function(){var A=arguments;var o=A[0];for (var i=1;i');document.domain = '"+FCK_RUNTIME_DOMAIN+"';document.close();}() ) ;";if (FCKBrowserInfo.IsIE){if (FCKBrowserInfo.IsIE7||!FCKBrowserInfo.IsIE6) return "";else return "javascript: '';";};return "javascript: void(0);";}; +FCKTools.CancelEvent=function(e){if (e) e.preventDefault();};FCKTools.DisableSelection=function(A){if (FCKBrowserInfo.IsGecko) A.style.MozUserSelect='none';else if (FCKBrowserInfo.IsSafari) A.style.KhtmlUserSelect='none';else A.style.userSelect='none';};FCKTools._AppendStyleSheet=function(A,B){var e=A.createElement('LINK');e.rel='stylesheet';e.type='text/css';e.href=B;A.getElementsByTagName("HEAD")[0].appendChild(e);return e;};FCKTools.AppendStyleString=function(A,B){if (!B) return null;var e=A.createElement("STYLE");e.appendChild(A.createTextNode(B));A.getElementsByTagName("HEAD")[0].appendChild(e);return e;};FCKTools.ClearElementAttributes=function(A){for (var i=0;i0) B[B.length]=D;C(parent.childNodes[i]);}};C(A);return B;};FCKTools.RemoveOuterTags=function(e){var A=e.ownerDocument.createDocumentFragment();for (var i=0;i','text/xml');FCKDomTools.RemoveNode(B.firstChild);return B;};return null;};FCKTools.GetScrollPosition=function(A){return { X:A.pageXOffset,Y:A.pageYOffset };};FCKTools.AddEventListener=function(A,B,C){A.addEventListener(B,C,false);};FCKTools.RemoveEventListener=function(A,B,C){A.removeEventListener(B,C,false);};FCKTools.AddEventListenerEx=function(A,B,C,D){A.addEventListener(B,function(e){C.apply(A,[e].concat(D||[]));},false);};FCKTools.GetViewPaneSize=function(A){return { Width:A.innerWidth,Height:A.innerHeight };};FCKTools.SaveStyles=function(A){var B=FCKTools.ProtectFormStyles(A);var C={};if (A.className.length>0){C.Class=A.className;A.className='';};var D=A.getAttribute('style');if (D&&D.length>0){C.Inline=D;A.setAttribute('style','',0);};FCKTools.RestoreFormStyles(A,B);return C;};FCKTools.RestoreStyles=function(A,B){var C=FCKTools.ProtectFormStyles(A);A.className=B.Class||'';if (B.Inline) A.setAttribute('style',B.Inline,0);else A.removeAttribute('style',0);FCKTools.RestoreFormStyles(A,C);};FCKTools.RegisterDollarFunction=function(A){A.$=function(id){return A.document.getElementById(id);};};FCKTools.AppendElement=function(A,B){return A.appendChild(A.ownerDocument.createElement(B));};FCKTools.GetElementPosition=function(A,B){var c={ X:0,Y:0 };var C=B||window;var D=FCKTools.GetElementWindow(A);var E=null;while (A){var F=D.getComputedStyle(A,'').position;if (F&&F!='static'&&A.style.zIndex!=FCKConfig.FloatingPanelsZIndex) break;c.X+=A.offsetLeft-A.scrollLeft;c.Y+=A.offsetTop-A.scrollTop;if (!FCKBrowserInfo.IsOpera){var G=E;while (G&&G!=A){c.X-=G.scrollLeft;c.Y-=G.scrollTop;G=G.parentNode;}};E=A;if (A.offsetParent) A=A.offsetParent;else{if (D!=C){A=D.frameElement;E=null;if (A) D=FCKTools.GetElementWindow(A);}else{c.X+=A.scrollLeft;c.Y+=A.scrollTop;break;}}};return c;}; +var FCKeditorAPI;function InitializeAPI(){var A=window.parent;if (!(FCKeditorAPI=A.FCKeditorAPI)){var B='window.FCKeditorAPI = {Version : "2.6",VersionBuild : "18638",Instances : new Object(),GetInstance : function( name ){return this.Instances[ name ];},_FormSubmit : function(){for ( var name in FCKeditorAPI.Instances ){var oEditor = FCKeditorAPI.Instances[ name ] ;if ( oEditor.GetParentForm && oEditor.GetParentForm() == this )oEditor.UpdateLinkedField() ;}this._FCKOriginalSubmit() ;},_FunctionQueue : {Functions : new Array(),IsRunning : false,Add : function( f ){this.Functions.push( f );if ( !this.IsRunning )this.StartNext();},StartNext : function(){var aQueue = this.Functions ;if ( aQueue.length > 0 ){this.IsRunning = true;aQueue[0].call();}else this.IsRunning = false;},Remove : function( f ){var aQueue = this.Functions;var i = 0, fFunc;while( (fFunc = aQueue[ i ]) ){if ( fFunc == f )aQueue.splice( i,1 );i++ ;}this.StartNext();}}}';if (A.execScript) A.execScript(B,'JavaScript');else{if (FCKBrowserInfo.IsGecko10){eval.call(A,B);}else if(FCKBrowserInfo.IsAIR){FCKAdobeAIR.FCKeditorAPI_Evaluate(A,B);}else if (FCKBrowserInfo.IsSafari||FCKBrowserInfo.IsGecko19){var C=A.document;var D=C.createElement('script');D.appendChild(C.createTextNode(B));C.documentElement.appendChild(D);}else A.eval(B);};FCKeditorAPI=A.FCKeditorAPI;FCKeditorAPI.__Instances=FCKeditorAPI.Instances;};FCKeditorAPI.Instances[FCK.Name]=FCK;};function _AttachFormSubmitToAPI(){var A=FCK.GetParentForm();if (A){FCKTools.AddEventListener(A,'submit',FCK.UpdateLinkedField);if (!A._FCKOriginalSubmit&&(typeof(A.submit)=='function'||(!A.submit.tagName&&!A.submit.length))){A._FCKOriginalSubmit=A.submit;A.submit=FCKeditorAPI._FormSubmit;}}};function FCKeditorAPI_Cleanup(){if (!window.FCKUnloadFlag) return;delete FCKeditorAPI.Instances[FCK.Name];};function FCKeditorAPI_ConfirmCleanup(){window.FCKUnloadFlag=true;};FCKTools.AddEventListener(window,'unload',FCKeditorAPI_Cleanup);FCKTools.AddEventListener(window,'beforeunload',FCKeditorAPI_ConfirmCleanup); +var FCKImagePreloader=function(){this._Images=[];};FCKImagePreloader.prototype={AddImages:function(A){if (typeof(A)=='string') A=A.split(';');this._Images=this._Images.concat(A);},Start:function(){var A=this._Images;this._PreloadCount=A.length;for (var i=0;i]*\>)/i,AfterBody:/(\<\/body\>[\s\S]*$)/i,ToReplace:/___fcktoreplace:([\w]+)/ig,MetaHttpEquiv:/http-equiv\s*=\s*["']?([^"' ]+)/i,HasBaseTag:/]/i,HtmlOpener:/]*>/i,HeadOpener:/]*>/i,HeadCloser:/<\/head\s*>/i,FCK_Class:/\s*FCK__[^ ]*(?=\s+|$)/,ElementName:/(^[a-z_:][\w.\-:]*\w$)|(^[a-z_]$)/,ForceSimpleAmpersand:/___FCKAmp___/g,SpaceNoClose:/\/>/g,EmptyParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>\s*(<\/\1>)?$/,EmptyOutParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>(?:\s*| )(<\/\1>)?$/,TagBody:/>]+))/gi,ProtectUrlsA:/]+))/gi,ProtectUrlsArea:/]+))/gi,Html4DocType:/HTML 4\.0 Transitional/i,DocTypeTag:/]*>/i,TagsWithEvent:/<[^\>]+ on\w+[\s\r\n]*=[\s\r\n]*?('|")[\s\S]+?\>/g,EventAttributes:/\s(on\w+)[\s\r\n]*=[\s\r\n]*?('|")([\s\S]*?)\2/g,ProtectedEvents:/\s\w+_fckprotectedatt="([^"]+)"/g,StyleProperties:/\S+\s*:/g,InvalidSelfCloseTags:/(<(?!base|meta|link|hr|br|param|img|area|input)([a-zA-Z0-9:]+)[^>]*)\/>/gi,StyleVariableAttName:/#\(\s*("|')(.+?)\1[^\)]*\s*\)/g,RegExp:/^\/(.*)\/([gim]*)$/,HtmlTag:/<[^\s<>](?:"[^"]*"|'[^']*'|[^<])*>/}; +var FCKListsLib={BlockElements:{ address:1,blockquote:1,center:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,marquee:1,noscript:1,ol:1,p:1,pre:1,script:1,table:1,ul:1 },NonEmptyBlockElements:{ p:1,div:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,address:1,pre:1,ol:1,ul:1,li:1,td:1,th:1 },InlineChildReqElements:{ abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },InlineNonEmptyElements:{ a:1,abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },EmptyElements:{ base:1,col:1,meta:1,link:1,hr:1,br:1,param:1,img:1,area:1,input:1 },PathBlockElements:{ address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,de:1 },PathBlockLimitElements:{ body:1,div:1,td:1,th:1,caption:1,form:1 },StyleBlockElements:{ address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1 },StyleObjectElements:{ img:1,hr:1,li:1,table:1,tr:1,td:1,embed:1,object:1,ol:1,ul:1 },NonEditableElements:{ button:1,option:1,script:1,iframe:1,textarea:1,object:1,embed:1,map:1,applet:1 },BlockBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1 },ListBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1,br:1 }}; +var FCKLanguageManager=FCK.Language={AvailableLanguages:{af:'Afrikaans',ar:'Arabic',bg:'Bulgarian',bn:'Bengali/Bangla',bs:'Bosnian',ca:'Catalan',cs:'Czech',da:'Danish',de:'German',el:'Greek',en:'English','en-au':'English (Australia)','en-ca':'English (Canadian)','en-uk':'English (United Kingdom)',eo:'Esperanto',es:'Spanish',et:'Estonian',eu:'Basque',fa:'Persian',fi:'Finnish',fo:'Faroese',fr:'French','fr-ca':'French (Canada)',gl:'Galician',he:'Hebrew',hi:'Hindi',hr:'Croatian',hu:'Hungarian',it:'Italian',ja:'Japanese',km:'Khmer',ko:'Korean',lt:'Lithuanian',lv:'Latvian',mn:'Mongolian',ms:'Malay',nb:'Norwegian Bokmal',nl:'Dutch',no:'Norwegian',pl:'Polish',pt:'Portuguese (Portugal)','pt-br':'Portuguese (Brazil)',ro:'Romanian',ru:'Russian',sk:'Slovak',sl:'Slovenian',sr:'Serbian (Cyrillic)','sr-latn':'Serbian (Latin)',sv:'Swedish',th:'Thai',tr:'Turkish',uk:'Ukrainian',vi:'Vietnamese',zh:'Chinese Traditional','zh-cn':'Chinese Simplified'},GetActiveLanguage:function(){if (FCKConfig.AutoDetectLanguage){var A;if (navigator.userLanguage) A=navigator.userLanguage.toLowerCase();else if (navigator.language) A=navigator.language.toLowerCase();else{return FCKConfig.DefaultLanguage;};if (A.length>=5){A=A.substr(0,5);if (this.AvailableLanguages[A]) return A;};if (A.length>=2){A=A.substr(0,2);if (this.AvailableLanguages[A]) return A;}};return this.DefaultLanguage;},TranslateElements:function(A,B,C,D){var e=A.getElementsByTagName(B);var E,s;for (var i=0;i0) C+='|'+FCKConfig.AdditionalNumericEntities;FCKXHtmlEntities.EntitiesRegex=new RegExp(C,'g');}; +var FCKXHtml={};FCKXHtml.CurrentJobNum=0;FCKXHtml.GetXHTML=function(A,B,C){FCKDomTools.CheckAndRemovePaddingNode(FCKTools.GetElementDocument(A),FCKConfig.EnterMode);FCKXHtmlEntities.Initialize();this._NbspEntity=(FCKConfig.ProcessHTMLEntities?'nbsp':'#160');var D=FCK.IsDirty();FCKXHtml.SpecialBlocks=[];this.XML=FCKTools.CreateXmlObject('DOMDocument');this.MainNode=this.XML.appendChild(this.XML.createElement('xhtml'));FCKXHtml.CurrentJobNum++;if (B) this._AppendNode(this.MainNode,A);else this._AppendChildNodes(this.MainNode,A,false);var E=this._GetMainXmlString();this.XML=null;if (FCKBrowserInfo.IsSafari) E=E.replace(/^/,'');E=E.substr(7,E.length-15).Trim();E=E.replace(FCKRegexLib.SpaceNoClose,' />');if (FCKConfig.ForceSimpleAmpersand) E=E.replace(FCKRegexLib.ForceSimpleAmpersand,'&');if (C) E=FCKCodeFormatter.Format(E);for (var i=0;i0;if (C) A.appendChild(this.XML.createTextNode(B.replace(FCKXHtmlEntities.EntitiesRegex,FCKXHtml_GetEntity)));return C;};function FCKXHtml_GetEntity(A){var B=FCKXHtmlEntities.Entities[A]||('#'+A.charCodeAt(0));return '#?-:'+B+';';};FCKXHtml.TagProcessors={a:function(A,B){if (B.innerHTML.Trim().length==0&&!B.name) return false;var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);};A=FCKXHtml._AppendChildNodes(A,B,false);return A;},area:function(A,B){var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){if (!A.attributes.getNamedItem('coords')){var D=B.getAttribute('coords',2);if (D&&D!='0,0,0') FCKXHtml._AppendAttribute(A,'coords',D);};if (!A.attributes.getNamedItem('shape')){var E=B.getAttribute('shape',2);if (E&&E.length>0) FCKXHtml._AppendAttribute(A,'shape',E.toLowerCase());}};return A;},body:function(A,B){A=FCKXHtml._AppendChildNodes(A,B,false);A.removeAttribute('spellcheck');return A;},iframe:function(A,B){var C=B.innerHTML;if (FCKBrowserInfo.IsGecko) C=FCKTools.HTMLDecode(C);C=C.replace(/\s_fcksavedurl="[^"]*"/g,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},img:function(A,B){if (!A.attributes.getNamedItem('alt')) FCKXHtml._AppendAttribute(A,'alt','');var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'src',C);return A;},li:function(A,B,C){if (C.nodeName.IEquals(['ul','ol'])) return FCKXHtml._AppendChildNodes(A,B,true);var D=FCKXHtml.XML.createElement('ul');B._fckxhtmljob=null;do{FCKXHtml._AppendNode(D,B);do{B=FCKDomTools.GetNextSibling(B);} while (B&&B.nodeType==3&&B.nodeValue.Trim().length==0)} while (B&&B.nodeName.toLowerCase()=='li') return D;},ol:function(A,B,C){if (B.innerHTML.Trim().length==0) return false;var D=C.lastChild;if (D&&D.nodeType==3) D=D.previousSibling;if (D&&D.nodeName.toUpperCase()=='LI'){B._fckxhtmljob=null;FCKXHtml._AppendNode(D,B);return false;};A=FCKXHtml._AppendChildNodes(A,B);return A;},pre:function (A,B){var C=B.firstChild;if (C&&C.nodeType==3) A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem('\r\n')));FCKXHtml._AppendChildNodes(A,B,true);return A;},script:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/javascript');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.text)));return A;},span:function(A,B){if (B.innerHTML.length==0) return false;A=FCKXHtml._AppendChildNodes(A,B,false);return A;},style:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/css');var C=B.innerHTML;if (FCKBrowserInfo.IsIE) C=C.replace(/^(\r\n|\n|\r)/,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},title:function(A,B){A.appendChild(FCKXHtml.XML.createTextNode(FCK.EditorDocument.title));return A;}};FCKXHtml.TagProcessors.ul=FCKXHtml.TagProcessors.ol; +FCKXHtml._GetMainXmlString=function(){return (new XMLSerializer()).serializeToString(this.MainNode);};FCKXHtml._AppendAttributes=function(A,B,C){var D=B.attributes;for (var n=0;n]*\>/gi;A.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;A.NewLineTags=/\<(BR|HR)[^\>]*\>/gi;A.MainTags=/\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi;A.LineSplitter=/\s*\n+\s*/g;A.IncreaseIndent=/^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \/\>]/i;A.DecreaseIndent=/^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \>]/i;A.FormatIndentatorRemove=new RegExp('^'+FCKConfig.FormatIndentator);A.ProtectedTags=/(]*>)([\s\S]*?)(<\/PRE>)/gi;};FCKCodeFormatter._ProtectData=function(A,B,C,D){return B+'___FCKpd___'+FCKCodeFormatter.ProtectedData.AddItem(C)+D;};FCKCodeFormatter.Format=function(A){if (!this.Regex) this.Init();FCKCodeFormatter.ProtectedData=[];var B=A.replace(this.Regex.ProtectedTags,FCKCodeFormatter._ProtectData);B=B.replace(this.Regex.BlocksOpener,'\n$&');B=B.replace(this.Regex.BlocksCloser,'$&\n');B=B.replace(this.Regex.NewLineTags,'$&\n');B=B.replace(this.Regex.MainTags,'\n$&\n');var C='';var D=B.split(this.Regex.LineSplitter);B='';for (var i=0;iB[i]) return 1;};if (A.lengthB.length) return 1;return 0;};FCKUndo._CheckIsBookmarksEqual=function(A,B){if (!(A&&B)) return false;if (FCKBrowserInfo.IsIE){var C=A[1].search(A[0].StartId);var D=B[1].search(B[0].StartId);var E=A[1].search(A[0].EndId);var F=B[1].search(B[0].EndId);return C==D&&E==F;}else{return this._CompareCursors(A.Start,B.Start)==0&&this._CompareCursors(A.End,B.End)==0;}};FCKUndo.SaveUndoStep=function(){if (FCK.EditMode!=0||this.SaveLocked) return;if (this.SavedData.length) this.Changed=true;var A=FCK.EditorDocument.body.innerHTML;var B=this._GetBookmark();this.SavedData=this.SavedData.slice(0,this.CurrentIndex+1);if (this.CurrentIndex>0&&A==this.SavedData[this.CurrentIndex][0]&&this._CheckIsBookmarksEqual(B,this.SavedData[this.CurrentIndex][1])) return;else if (this.CurrentIndex==0&&this.SavedData.length&&A==this.SavedData[0][0]){this.SavedData[0][1]=B;return;};if (this.CurrentIndex+1>=FCKConfig.MaxUndoLevels) this.SavedData.shift();else this.CurrentIndex++;this.SavedData[this.CurrentIndex]=[A,B];FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.CheckUndoState=function(){return (this.Changed||this.CurrentIndex>0);};FCKUndo.CheckRedoState=function(){return (this.CurrentIndex<(this.SavedData.length-1));};FCKUndo.Undo=function(){if (this.CheckUndoState()){if (this.CurrentIndex==(this.SavedData.length-1)){this.SaveUndoStep();};this._ApplyUndoLevel(--this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo.Redo=function(){if (this.CheckRedoState()){this._ApplyUndoLevel(++this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo._ApplyUndoLevel=function(A){var B=this.SavedData[A];if (!B) return;if (FCKBrowserInfo.IsIE){if (B[1]&&B[1][1]) FCK.SetInnerHtml(B[1][1]);else FCK.SetInnerHtml(B[0]);}else FCK.EditorDocument.body.innerHTML=B[0];this._SelectBookmark(B[1]);this.TypesCount=0;this.Changed=false;this.Typing=false;}; +var FCKEditingArea=function(A){this.TargetElement=A;this.Mode=0;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKEditingArea_Cleanup);};FCKEditingArea.prototype.Start=function(A,B){var C=this.TargetElement;var D=FCKTools.GetElementDocument(C);while(C.firstChild) C.removeChild(C.firstChild);if (this.Mode==0){if (FCK_IS_CUSTOM_DOMAIN) A=''+A;if (FCKBrowserInfo.IsIE) A=A.replace(/(]*?)\s*\/?>(?!\s*<\/base>)/gi,'$1>');else if (!B){var E=A.match(FCKRegexLib.BeforeBody);var F=A.match(FCKRegexLib.AfterBody);if (E&&F){var G=A.substr(E[1].length,A.length-E[1].length-F[1].length);A=E[1]+' '+F[1];if (FCKBrowserInfo.IsGecko&&(G.length==0||FCKRegexLib.EmptyParagraph.test(G))) G='
    ';this._BodyHTML=G;}else this._BodyHTML=A;};var H=this.IFrame=D.createElement('iframe');var I='';H.frameBorder=0;H.width=H.height='100%';if (FCK_IS_CUSTOM_DOMAIN&&FCKBrowserInfo.IsIE){window._FCKHtmlToLoad=I+A;H.src='javascript:void( (function(){document.open() ;document.domain="'+document.domain+'" ;document.write( window.parent._FCKHtmlToLoad );document.close() ;window.parent._FCKHtmlToLoad = null ;})() )';}else if (!FCKBrowserInfo.IsGecko){H.src='javascript:void(0)';};C.appendChild(H);this.Window=H.contentWindow;if (!FCK_IS_CUSTOM_DOMAIN||!FCKBrowserInfo.IsIE){var J=this.Window.document;J.open();J.write(I+A);J.close();};if (FCKBrowserInfo.IsAIR) FCKAdobeAIR.EditingArea_Start(J,A);if (FCKBrowserInfo.IsGecko10&&!B){this.Start(A,true);return;};if (H.readyState&&H.readyState!='completed'){var K=this;(H.onreadystatechange=function(){if (H.readyState=='complete'){H.onreadystatechange=null;K.Window._FCKEditingArea=K;FCKEditingArea_CompleteStart.call(K.Window);}})();}else{this.Window._FCKEditingArea=this;if (FCKBrowserInfo.IsGecko10) this.Window.setTimeout(FCKEditingArea_CompleteStart,500);else FCKEditingArea_CompleteStart.call(this.Window);}}else{var L=this.Textarea=D.createElement('textarea');L.className='SourceField';L.dir='ltr';FCKDomTools.SetElementStyles(L,{width:'100%',height:'100%',border:'none',resize:'none',outline:'none'});C.appendChild(L);L.value=A;FCKTools.RunFunction(this.OnLoad);}};function FCKEditingArea_CompleteStart(){if (!this.document.body){this.setTimeout(FCKEditingArea_CompleteStart,50);return;};var A=this._FCKEditingArea;A.Document=A.Window.document;A.MakeEditable();FCKTools.RunFunction(A.OnLoad);};FCKEditingArea.prototype.MakeEditable=function(){var A=this.Document;if (FCKBrowserInfo.IsIE){A.body.disabled=true;A.body.contentEditable=true;A.body.removeAttribute("disabled");}else{try{A.body.spellcheck=(this.FFSpellChecker!==false);if (this._BodyHTML){A.body.innerHTML=this._BodyHTML;this._BodyHTML=null;};A.designMode='on';A.execCommand('enableObjectResizing',false,!FCKConfig.DisableObjectResizing);A.execCommand('enableInlineTableEditing',false,!FCKConfig.DisableFFTableHandles);}catch (e){FCKTools.AddEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);}}};function FCKEditingArea_Document_AttributeNodeModified(A){var B=A.currentTarget.contentWindow._FCKEditingArea;if (B._timer) window.clearTimeout(B._timer);B._timer=FCKTools.SetTimeout(FCKEditingArea_MakeEditableByMutation,1000,B);};function FCKEditingArea_MakeEditableByMutation(){delete this._timer;FCKTools.RemoveEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);this.MakeEditable();};FCKEditingArea.prototype.Focus=function(){try{if (this.Mode==0){if (FCKBrowserInfo.IsIE) this._FocusIE();else this.Window.focus();}else{var A=FCKTools.GetElementDocument(this.Textarea);if ((!A.hasFocus||A.hasFocus())&&A.activeElement==this.Textarea) return;this.Textarea.focus();}}catch(e) {}};FCKEditingArea.prototype._FocusIE=function(){this.Document.body.setActive();this.Window.focus();var A=this.Document.selection.createRange();var B=A.parentElement();var C=B.nodeName.toLowerCase();if (B.childNodes.length>0||!(FCKListsLib.BlockElements[C]||FCKListsLib.NonEmptyBlockElements[C])){return;};A=new FCKDomRange(this.Window);A.MoveToElementEditStart(B);A.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;}}; +var FCKKeystrokeHandler=function(A){this.Keystrokes={};this.CancelCtrlDefaults=(A!==false);};FCKKeystrokeHandler.prototype.AttachToElement=function(A){FCKTools.AddEventListenerEx(A,'keydown',_FCKKeystrokeHandler_OnKeyDown,this);if (FCKBrowserInfo.IsGecko10||FCKBrowserInfo.IsOpera||(FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac)) FCKTools.AddEventListenerEx(A,'keypress',_FCKKeystrokeHandler_OnKeyPress,this);};FCKKeystrokeHandler.prototype.SetKeystrokes=function(){for (var i=0;i40))){B._CancelIt=true;if (A.preventDefault) return A.preventDefault();A.returnValue=false;A.cancelBubble=true;return false;};return true;};function _FCKKeystrokeHandler_OnKeyPress(A,B){if (B._CancelIt){if (A.preventDefault) return A.preventDefault();return false;};return true;}; +FCK.DTD=(function(){var X=FCKTools.Merge;var A,L,J,M,N,O,D,H,P,K,Q,F,G,C,B,E,I;A={isindex:1,fieldset:1};B={input:1,button:1,select:1,textarea:1,label:1};C=X({a:1},B);D=X({iframe:1},C);E={hr:1,ul:1,menu:1,div:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1};F={ins:1,del:1,script:1};G=X({b:1,acronym:1,bdo:1,'var':1,'#':1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1},F);H=X({sub:1,img:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1},G);I=X({p:1},H);J=X({iframe:1},H,B);K={img:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,'#':1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,'var':1,div:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1};L=X({a:1},J);M={tr:1};N={'#':1};O=X({param:1},K);P=X({form:1},A,D,E,I);Q={li:1};return {col:{},tr:{td:1,th:1},img:{},colgroup:{col:1},noscript:P,td:P,br:{},th:P,center:P,kbd:L,button:X(I,E),basefont:{},h5:L,h4:L,samp:L,h6:L,ol:Q,h1:L,h3:L,option:N,h2:L,form:X(A,D,E,I),select:{optgroup:1,option:1},font:J,ins:P,menu:Q,abbr:L,label:L,table:{thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1},code:L,script:N,tfoot:M,cite:L,li:P,input:{},iframe:P,strong:J,textarea:N,noframes:P,big:J,small:J,span:J,hr:{},dt:L,sub:J,optgroup:{option:1},param:{},bdo:L,'var':J,div:P,object:O,sup:J,dd:P,strike:J,area:{},dir:Q,map:X({area:1,form:1,p:1},A,F,E),applet:O,dl:{dt:1,dd:1},del:P,isindex:{},fieldset:X({legend:1},K),thead:M,ul:Q,acronym:L,b:J,a:J,blockquote:P,caption:L,i:J,u:J,tbody:M,s:L,address:X(D,I),tt:J,legend:L,q:L,pre:X(G,C),p:L,em:J,dfn:L};})(); +var FCKStyle=function(A){this.Element=(A.Element||'span').toLowerCase();this._StyleDesc=A;};FCKStyle.prototype={GetType:function(){var A=this.GetType_$;if (A!=undefined) return A;var B=this.Element;if (B=='#'||FCKListsLib.StyleBlockElements[B]) A=0;else if (FCKListsLib.StyleObjectElements[B]) A=2;else A=1;return (this.GetType_$=A);},ApplyToSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.ApplyToRange(B,true);},ApplyToRange:function(A,B,C){switch (this.GetType()){case 0:this.ApplyToRange=this._ApplyBlockStyle;break;case 1:this.ApplyToRange=this._ApplyInlineStyle;break;default:return;};this.ApplyToRange(A,B,C);},ApplyToObject:function(A){if (!A) return;this.BuildElement(null,A);},RemoveFromSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.RemoveFromRange(B,true);},RemoveFromRange:function(A,B,C){var D;var E=this._GetAttribsForComparison();var F=this._GetOverridesForComparison();if (A.CheckIsCollapsed()){var D=A.CreateBookmark(true);var H=A.GetBookmarkNode(D,true);var I=new FCKElementPath(H.parentNode);var J=[];var K=!FCKDomTools.GetNextSibling(H);var L=K||!FCKDomTools.GetPreviousSibling(H);var M;var N=-1;for (var i=0;i=0;i--){var E=D[i];for (var F in B){if (FCKDomTools.HasAttribute(E,F)){switch (F){case 'style':this._RemoveStylesFromElement(E);break;case 'class':if (FCKDomTools.GetAttributeValue(E,F)!=this.GetFinalAttributeValue(F)) continue;default:FCKDomTools.RemoveAttribute(E,F);}}};this._RemoveOverrides(E,C[this.Element]);this._RemoveNoAttribElement(E);};for (var G in C){if (G!=this.Element){D=A.getElementsByTagName(G);for (var i=D.length-1;i>=0;i--){var E=D[i];this._RemoveOverrides(E,C[G]);this._RemoveNoAttribElement(E);}}}},_RemoveStylesFromElement:function(A){var B=A.style.cssText;var C=this.GetFinalStyleValue();if (B.length>0&&C.length==0) return;C='(^|;)\\s*('+C.replace(/\s*([^ ]+):.*?(;|$)/g,'$1|').replace(/\|$/,'')+'):[^;]+';var D=new RegExp(C,'gi');B=B.replace(D,'').Trim();if (B.length==0||B==';') FCKDomTools.RemoveAttribute(A,'style');else A.style.cssText=B.replace(D,'');},_RemoveOverrides:function(A,B){var C=B&&B.Attributes;if (C){for (var i=0;i0) C.style.cssText=this.GetFinalStyleValue();return C;},_CompareAttributeValues:function(A,B,C){if (A=='style'&&B&&C){B=B.replace(/;$/,'').toLowerCase();C=C.replace(/;$/,'').toLowerCase();};return (B==C||((B===null||B==='')&&(C===null||C==='')))},GetFinalAttributeValue:function(A){var B=this._StyleDesc.Attributes;var B=B?B[A]:null;if (!B&&A=='style') return this.GetFinalStyleValue();if (B&&this._Variables) B=B.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);return B;},GetFinalStyleValue:function(){var A=this._GetStyleText();if (A.length>0&&this._Variables){A=A.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);A=FCKTools.NormalizeCssText(A);};return A;},_GetVariableReplace:function(){return this._Variables[arguments[2]]||arguments[0];},SetVariable:function(A,B){var C=this._Variables;if (!C) C=this._Variables={};this._Variables[A]=B;},_FromPre:function(A,B,C){var D=B.innerHTML;D=D.replace(/(\r\n|\r)/g,'\n');D=D.replace(/^[ \t]*\n/,'');D=D.replace(/\n$/,'');D=D.replace(/^[ \t]+|[ \t]+$/g,function(match,offset,s){if (match.length==1) return ' ';else if (offset==0) return new Array(match.length).join(' ')+' ';else return ' '+new Array(match.length).join(' ');});var E=new FCKHtmlIterator(D);var F=[];E.Each(function(isTag,value){if (!isTag){value=value.replace(/\n/g,'
    ');value=value.replace(/[ \t]{2,}/g,function (match){return new Array(match.length).join(' ')+' ';});};F.push(value);});C.innerHTML=F.join('');return C;},_ToPre:function(A,B,C){var D=B.innerHTML.Trim();D=D.replace(/[ \t\r\n]*(]*>)[ \t\r\n]*/gi,'
    ');var E=new FCKHtmlIterator(D);var F=[];E.Each(function(isTag,value){if (!isTag) value=value.replace(/([ \t\n\r]+| )/g,' ');else if (isTag&&value=='
    ') value='\n';F.push(value);});if (FCKBrowserInfo.IsIE){var G=A.createElement('div');G.appendChild(C);C.outerHTML='
    \n'+F.join('')+'
    ';C=G.removeChild(G.firstChild);}else C.innerHTML=F.join('');return C;},_ApplyBlockStyle:function(A,B,C){var D;if (B) D=A.CreateBookmark();var E=new FCKDomRangeIterator(A);E.EnforceRealBlocks=true;var F;var G=A.Window.document;var H=[];var I=[];while((F=E.GetNextParagraph())){var J=this.BuildElement(G);var K=J.nodeName.IEquals('pre');var L=F.nodeName.IEquals('pre');if (K&&!L){J=this._ToPre(G,F,J);H.push(J);}else if (!K&&L){J=this._FromPre(G,F,J);I.push(J);}else FCKDomTools.MoveChildren(F,J);F.parentNode.insertBefore(J,F);FCKDomTools.RemoveNode(F);};for (var i=0;i0){A.InsertNode(I);this.RemoveFromElement(I);this._MergeSiblings(I,this._GetAttribsForComparison());if (!FCKBrowserInfo.IsIE) I.normalize();};A.Release(true);}};this._FixBookmarkStart(K);if (B) A.SelectBookmark(J);if (C) A.MoveToBookmark(J);},_FixBookmarkStart:function(A){var B;while ((B=A.nextSibling)){if (B.nodeType==1&&FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){if (!B.firstChild) FCKDomTools.RemoveNode(B);else FCKDomTools.MoveNode(A,B,true);continue;};if (B.nodeType==3&&B.length==0){FCKDomTools.RemoveNode(B);continue;};break;}},_MergeSiblings:function(A,B){if (!A||A.nodeType!=1||!FCKListsLib.InlineNonEmptyElements[A.nodeName.toLowerCase()]) return;this._MergeNextSibling(A,B);this._MergePreviousSibling(A,B);},_MergeNextSibling:function(A,B){var C=A.nextSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.nextSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.lastChild;if (D) FCKDomTools.MoveNode(A.nextSibling,A);FCKDomTools.MoveChildren(C,A);FCKDomTools.RemoveNode(C);if (E) this._MergeNextSibling(E);}}},_MergePreviousSibling:function(A,B){var C=A.previousSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.previousSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.firstChild;if (D) FCKDomTools.MoveNode(A.previousSibling,A,true);FCKDomTools.MoveChildren(C,A,true);FCKDomTools.RemoveNode(C);if (E) this._MergePreviousSibling(E);}}},_GetStyleText:function(){var A=this._StyleDesc.Styles;var B=(this._StyleDesc.Attributes?this._StyleDesc.Attributes['style']||'':'');if (B.length>0) B+=';';for (var C in A) B+=C+':'+A[C]+';';if (B.length>0&&!(/#\(/.test(B))){B=FCKTools.NormalizeCssText(B);};return (this._GetStyleText=function() { return B;})();},_GetAttribsForComparison:function(){var A=this._GetAttribsForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Attributes;if (B){for (var C in B){A[C.toLowerCase()]=B[C].toLowerCase();}};if (this._GetStyleText().length>0){A['style']=this._GetStyleText().toLowerCase();};FCKTools.AppendLengthProperty(A,'_length');return (this._GetAttribsForComparison_$=A);},_GetOverridesForComparison:function(){var A=this._GetOverridesForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Overrides;if (B){if (!FCKTools.IsArray(B)) B=[B];for (var i=0;i0) return true;};B=B.nextSibling;};return false;}}; +var FCKElementPath=function(A){var B=null;var C=null;var D=[];var e=A;while (e){if (e.nodeType==1){if (!this.LastElement) this.LastElement=e;var E=e.nodeName.toLowerCase();if (FCKBrowserInfo.IsIE&&e.scopeName!='HTML') E=e.scopeName.toLowerCase()+':'+E;if (!C){if (!B&&FCKListsLib.PathBlockElements[E]!=null) B=e;if (FCKListsLib.PathBlockLimitElements[E]!=null){if (!B&&E=='div'&&!FCKElementPath._CheckHasBlock(e)) B=e;else C=e;}};D.push(e);if (E=='body') break;};e=e.parentNode;};this.Block=B;this.BlockLimit=C;this.Elements=D;};FCKElementPath._CheckHasBlock=function(A){var B=A.childNodes;for (var i=0,count=B.length;i0){if (D.nodeType==3){var G=D.nodeValue.substr(0,E).Trim();if (G.length!=0) return A.IsStartOfBlock=false;}else F=D.childNodes[E-1];};if (!F) F=FCKDomTools.GetPreviousSourceNode(D,true,null,C);while (F){switch (F.nodeType){case 1:if (!FCKListsLib.InlineChildReqElements[F.nodeName.toLowerCase()]) return A.IsStartOfBlock=false;break;case 3:if (F.nodeValue.Trim().length>0) return A.IsStartOfBlock=false;};F=FCKDomTools.GetPreviousSourceNode(F,false,null,C);};return A.IsStartOfBlock=true;},CheckEndOfBlock:function(A){var B=this._Cache.IsEndOfBlock;if (B!=undefined) return B;var C=this.EndBlock||this.EndBlockLimit;var D=this._Range.endContainer;var E=this._Range.endOffset;var F;if (D.nodeType==3){var G=D.nodeValue;if (E0) return this._Cache.IsEndOfBlock=false;};F=FCKDomTools.GetNextSourceNode(F,false,null,C);};if (A) this.Select();return this._Cache.IsEndOfBlock=true;},CreateBookmark:function(A){var B={StartId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'S',EndId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'E'};var C=this.Window.document;var D;var E;var F;if (!this.CheckIsCollapsed()){E=C.createElement('span');E.style.display='none';E.id=B.EndId;E.setAttribute('_fck_bookmark',true);E.innerHTML=' ';F=this.Clone();F.Collapse(false);F.InsertNode(E);};D=C.createElement('span');D.style.display='none';D.id=B.StartId;D.setAttribute('_fck_bookmark',true);D.innerHTML=' ';F=this.Clone();F.Collapse(true);F.InsertNode(D);if (A){B.StartNode=D;B.EndNode=E;};if (E){this.SetStart(D,4);this.SetEnd(E,3);}else this.MoveToPosition(D,4);return B;},GetBookmarkNode:function(A,B){var C=this.Window.document;if (B) return A.StartNode||C.getElementById(A.StartId);else return A.EndNode||C.getElementById(A.EndId);},MoveToBookmark:function(A,B){var C=this.GetBookmarkNode(A,true);var D=this.GetBookmarkNode(A,false);this.SetStart(C,3);if (!B) FCKDomTools.RemoveNode(C);if (D){this.SetEnd(D,3);if (!B) FCKDomTools.RemoveNode(D);}else this.Collapse(true);this._UpdateElementInfo();},CreateBookmark2:function(){if (!this._Range) return { "Start":0,"End":0 };var A={"Start":[this._Range.startOffset],"End":[this._Range.endOffset]};var B=this._Range.startContainer.previousSibling;var C=this._Range.endContainer.previousSibling;var D=this._Range.startContainer;var E=this._Range.endContainer;while (B&&B.nodeType==3){A.Start[0]+=B.length;D=B;B=B.previousSibling;};while (C&&C.nodeType==3){A.End[0]+=C.length;E=C;C=C.previousSibling;};if (D.nodeType==1&&D.childNodes[A.Start[0]]&&D.childNodes[A.Start[0]].nodeType==3){var F=D.childNodes[A.Start[0]];var G=0;while (F.previousSibling&&F.previousSibling.nodeType==3){F=F.previousSibling;G+=F.length;};D=F;A.Start[0]=G;};if (E.nodeType==1&&E.childNodes[A.End[0]]&&E.childNodes[A.End[0]].nodeType==3){var F=E.childNodes[A.End[0]];var G=0;while (F.previousSibling&&F.previousSibling.nodeType==3){F=F.previousSibling;G+=F.length;};E=F;A.End[0]=G;};A.Start=FCKDomTools.GetNodeAddress(D,true).concat(A.Start);A.End=FCKDomTools.GetNodeAddress(E,true).concat(A.End);return A;},MoveToBookmark2:function(A){var B=FCKDomTools.GetNodeFromAddress(this.Window.document,A.Start.slice(0,-1),true);var C=FCKDomTools.GetNodeFromAddress(this.Window.document,A.End.slice(0,-1),true);this.Release(true);this._Range=new FCKW3CRange(this.Window.document);var D=A.Start[A.Start.length-1];var E=A.End[A.End.length-1];while (B.nodeType==3&&D>B.length){if (!B.nextSibling||B.nextSibling.nodeType!=3) break;D-=B.length;B=B.nextSibling;};while (C.nodeType==3&&E>C.length){if (!C.nextSibling||C.nextSibling.nodeType!=3) break;E-=C.length;C=C.nextSibling;};this._Range.setStart(B,D);this._Range.setEnd(C,E);this._UpdateElementInfo();},MoveToPosition:function(A,B){this.SetStart(A,B);this.Collapse(true);},SetStart:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setStart(A,0);break;case 2:D.setStart(A,A.childNodes.length);break;case 3:D.setStartBefore(A);break;case 4:D.setStartAfter(A);};if (!C) this._UpdateElementInfo();},SetEnd:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setEnd(A,0);break;case 2:D.setEnd(A,A.childNodes.length);break;case 3:D.setEndBefore(A);break;case 4:D.setEndAfter(A);};if (!C) this._UpdateElementInfo();},Expand:function(A){var B,oSibling;switch (A){case 'inline_elements':if (this._Range.startOffset==0){B=this._Range.startContainer;if (B.nodeType!=1) B=B.previousSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setStartBefore(B);if (B!=B.parentNode.firstChild) break;B=B.parentNode;}}};B=this._Range.endContainer;var C=this._Range.endOffset;if ((B.nodeType==3&&C>=B.nodeValue.length)||(B.nodeType==1&&C>=B.childNodes.length)||(B.nodeType!=1&&B.nodeType!=3)){if (B.nodeType!=1) B=B.nextSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setEndAfter(B);if (B!=B.parentNode.lastChild) break;B=B.parentNode;}}};break;case 'block_contents':case 'list_contents':var D=FCKListsLib.BlockBoundaries;if (A=='list_contents'||FCKConfig.EnterMode=='br') D=FCKListsLib.ListBoundaries;if (this.StartBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents') this.SetStart(this.StartBlock,1);else{B=this._Range.startContainer;if (B.nodeType==1){var E=B.childNodes[this._Range.startOffset];if (E) B=FCKDomTools.GetPreviousSourceNode(E,true);else B=B.lastChild||B;};while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setStartBefore(B);B=B.previousSibling||B.parentNode;}};if (this.EndBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents'&&this.EndBlock.nodeName.toLowerCase()!='li') this.SetEnd(this.EndBlock,2);else{B=this._Range.endContainer;if (B.nodeType==1) B=B.childNodes[this._Range.endOffset]||B.lastChild;while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setEndAfter(B);B=B.nextSibling||B.parentNode;};if (B&&B.nodeName.toLowerCase()=='br') this._Range.setEndAfter(B);};this._UpdateElementInfo();}},SplitBlock:function(A){var B=A||FCKConfig.EnterMode;if (!this._Range) this.MoveToSelection();if (this.StartBlockLimit==this.EndBlockLimit){var C=this.StartBlock;var D=this.EndBlock;var E=null;if (B!='br'){if (!C){C=this.FixBlock(true,B);D=this.EndBlock;};if (!D) D=this.FixBlock(false,B);};var F=(C!=null&&this.CheckStartOfBlock());var G=(D!=null&&this.CheckEndOfBlock());if (!this.CheckIsEmpty()) this.DeleteContents();if (C&&D&&C==D){if (G){E=new FCKElementPath(this.StartContainer);this.MoveToPosition(D,4);D=null;}else if (F){E=new FCKElementPath(this.StartContainer);this.MoveToPosition(C,3);C=null;}else{this.SetEnd(C,2);var H=this.ExtractContents();D=C.cloneNode(false);D.removeAttribute('id',false);H.AppendTo(D);FCKDomTools.InsertAfterNode(C,D);this.MoveToPosition(C,4);if (FCKBrowserInfo.IsGecko&&!C.nodeName.IEquals(['ul','ol'])) FCKTools.AppendBogusBr(C);}};return {PreviousBlock:C,NextBlock:D,WasStartOfBlock:F,WasEndOfBlock:G,ElementPath:E};};return null;},FixBlock:function(A,B){var C=this.CreateBookmark();this.Collapse(A);this.Expand('block_contents');var D=this.Window.document.createElement(B);this.ExtractContents().AppendTo(D);FCKDomTools.TrimNode(D);this.InsertNode(D);this.MoveToBookmark(C);return D;},Release:function(A){if (!A) 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 A=this._Range;var B=A.startContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.startOffset]||B;},GetTouchedEndNode:function(){var A=this._Range;var B=A.endContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.endOffset-1]||B;}}; +FCKDomRange.prototype.MoveToSelection=function(){this.Release(true);var A=this.Window.getSelection();if (A&&A.rangeCount>0){this._Range=FCKW3CRange.CreateFromRange(this.Window.document,A.getRangeAt(0));this._UpdateElementInfo();}else if (this.Window.document) this.MoveToElementStart(this.Window.document.body);};FCKDomRange.prototype.Select=function(){var A=this._Range;if (A){var B=A.startContainer;if (A.collapsed&&B.nodeType==1&&B.childNodes.length==0) B.appendChild(A._Document.createTextNode(''));var C=this.Window.document.createRange();C.setStart(B,A.startOffset);try{C.setEnd(A.endContainer,A.endOffset);}catch (e){if (e.toString().Contains('NS_ERROR_ILLEGAL_VALUE')){A.collapse(true);C.setEnd(A.endContainer,A.endOffset);}else throw(e);};var D=this.Window.getSelection();D.removeAllRanges();D.addRange(C);}};FCKDomRange.prototype.SelectBookmark=function(A){var B=this.Window.document.createRange();var C=this.GetBookmarkNode(A,true);var D=this.GetBookmarkNode(A,false);B.setStart(C.parentNode,FCKDomTools.GetIndexOf(C));FCKDomTools.RemoveNode(C);if (D){B.setEnd(D.parentNode,FCKDomTools.GetIndexOf(D));FCKDomTools.RemoveNode(D);};var E=this.Window.getSelection();E.removeAllRanges();E.addRange(B);}; +var FCKDomRangeIterator=function(A){this.Range=A;this.ForceBrBreak=false;this.EnforceRealBlocks=false;};FCKDomRangeIterator.CreateFromSelection=function(A){var B=new FCKDomRange(A);B.MoveToSelection();return new FCKDomRangeIterator(B);};FCKDomRangeIterator.prototype={GetNextParagraph:function(){var A;var B;var C;var D;var E;var F=this.ForceBrBreak?FCKListsLib.ListBoundaries:FCKListsLib.BlockBoundaries;if (!this._LastNode){var B=this.Range.Clone();B.Expand(this.ForceBrBreak?'list_contents':'block_contents');this._NextNode=B.GetTouchedStartNode();this._LastNode=B.GetTouchedEndNode();B=null;};var H=this._NextNode;var I=this._LastNode;this._NextNode=null;while (H){var J=false;var K=(H.nodeType!=1);var L=false;if (!K){var M=H.nodeName.toLowerCase();if (F[M]&&(!FCKBrowserInfo.IsIE||H.scopeName=='HTML')){if (M=='br') K=true;else if (!B&&H.childNodes.length==0&&M!='hr'){A=H;C=H==I;break;};if (B){B.SetEnd(H,3,true);if (M!='br') this._NextNode=H;};J=true;}else{if (H.firstChild){if (!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};H=H.firstChild;continue;};K=true;}}else if (H.nodeType==3){if (/^[\r\n\t ]+$/.test(H.nodeValue)) K=false;};if (K&&!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};C=((!J||K)&&H==I);if (B&&!J){while (!H.nextSibling&&!C){var N=H.parentNode;if (F[N.nodeName.toLowerCase()]){J=true;C=C||(N==I);break;};H=N;K=true;C=(H==I);L=true;}};if (K) B.SetEnd(H,4,true);if ((J||C)&&B){B._UpdateElementInfo();if (B.StartNode==B.EndNode&&B.StartNode.parentNode==B.StartBlockLimit&&B.StartNode.getAttribute&&B.StartNode.getAttribute('_fck_bookmark')) B=null;else break;};if (C) break;H=FCKDomTools.GetNextSourceNode(H,L,null,I);};if (!A){if (!B){this._NextNode=null;return null;};A=B.StartBlock;if (!A&&!this.EnforceRealBlocks&&B.StartBlockLimit.nodeName.IEquals('DIV','TH','TD')&&B.CheckStartOfBlock()&&B.CheckEndOfBlock()){A=B.StartBlockLimit;}else if (!A||(this.EnforceRealBlocks&&A.nodeName.toLowerCase()=='li')){A=this.Range.Window.document.createElement(FCKConfig.EnterMode=='p'?'p':'div');B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);B.InsertNode(A);D=true;E=true;}else if (A.nodeName.toLowerCase()!='li'){if (!B.CheckStartOfBlock()||!B.CheckEndOfBlock()){A=A.cloneNode(false);B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);var O=B.SplitBlock();D=!O.WasStartOfBlock;E=!O.WasEndOfBlock;B.InsertNode(A);}}else if (!C){this._NextNode=A==I?null:FCKDomTools.GetNextSourceNode(B.EndNode,true,null,I);return A;}};if (D){var P=A.previousSibling;if (P&&P.nodeType==1){if (P.nodeName.toLowerCase()=='br') P.parentNode.removeChild(P);else if (P.lastChild&&P.lastChild.nodeName.IEquals('br')) P.removeChild(P.lastChild);}};if (E){var Q=A.lastChild;if (Q&&Q.nodeType==1&&Q.nodeName.toLowerCase()=='br') A.removeChild(Q);};if (!this._NextNode) this._NextNode=(C||A==I)?null:FCKDomTools.GetNextSourceNode(A,true,null,I);return A;}}; +var FCKDocumentFragment=function(A,B){this.RootNode=B||A.createDocumentFragment();};FCKDocumentFragment.prototype={AppendTo:function(A){A.appendChild(this.RootNode);},InsertAfterNode:function(A){FCKDomTools.InsertAfterNode(A,this.RootNode);}}; +var FCKW3CRange=function(A){this._Document=A;this.startContainer=null;this.startOffset=null;this.endContainer=null;this.endOffset=null;this.collapsed=true;};FCKW3CRange.CreateRange=function(A){return new FCKW3CRange(A);};FCKW3CRange.CreateFromRange=function(A,B){var C=FCKW3CRange.CreateRange(A);C.setStart(B.startContainer,B.startOffset);C.setEnd(B.endContainer,B.endOffset);return C;};FCKW3CRange.prototype={_UpdateCollapsed:function(){this.collapsed=(this.startContainer==this.endContainer&&this.startOffset==this.endOffset);},setStart:function(A,B){this.startContainer=A;this.startOffset=B;if (!this.endContainer){this.endContainer=A;this.endOffset=B;};this._UpdateCollapsed();},setEnd:function(A,B){this.endContainer=A;this.endOffset=B;if (!this.startContainer){this.startContainer=A;this.startOffset=B;};this._UpdateCollapsed();},setStartAfter:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setStartBefore:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A));},setEndAfter:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setEndBefore:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A));},collapse:function(A){if (A){this.endContainer=this.startContainer;this.endOffset=this.startOffset;}else{this.startContainer=this.endContainer;this.startOffset=this.endOffset;};this.collapsed=true;},selectNodeContents:function(A){this.setStart(A,0);this.setEnd(A,A.nodeType==3?A.data.length:A.childNodes.length);},insertNode:function(A){var B=this.startContainer;var C=this.startOffset;if (B.nodeType==3){B.splitText(C);if (B==this.endContainer) this.setEnd(B.nextSibling,this.endOffset-this.startOffset);FCKDomTools.InsertAfterNode(B,A);return;}else{B.insertBefore(A,B.childNodes[C]||null);if (B==this.endContainer){this.endOffset++;this.collapsed=false;}}},deleteContents:function(){if (this.collapsed) return;this._ExecContentsAction(0);},extractContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(1,A);return A;},cloneContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(2,A);return A;},_ExecContentsAction:function(A,B){var C=this.startContainer;var D=this.endContainer;var E=this.startOffset;var F=this.endOffset;var G=false;var H=false;if (D.nodeType==3) D=D.splitText(F);else{if (D.childNodes.length>0){if (F>D.childNodes.length-1){D=FCKDomTools.InsertAfterNode(D.lastChild,this._Document.createTextNode(''));H=true;}else D=D.childNodes[F];}};if (C.nodeType==3){C.splitText(E);if (C==D) D=C.nextSibling;}else{if (E==0){C=C.insertBefore(this._Document.createTextNode(''),C.firstChild);G=true;}else if (E>C.childNodes.length-1){C=C.appendChild(this._Document.createTextNode(''));G=true;}else C=C.childNodes[E].previousSibling;};var I=FCKDomTools.GetParents(C);var J=FCKDomTools.GetParents(D);var i,topStart,topEnd;for (i=0;i0&&levelStartNode!=D) levelClone=K.appendChild(levelStartNode.cloneNode(levelStartNode==D));if (!I[k]||levelStartNode.parentNode!=I[k].parentNode){currentNode=levelStartNode.previousSibling;while(currentNode){if (currentNode==I[k]||currentNode==C) break;currentSibling=currentNode.previousSibling;if (A==2) K.insertBefore(currentNode.cloneNode(true),K.firstChild);else{currentNode.parentNode.removeChild(currentNode);if (A==1) K.insertBefore(currentNode,K.firstChild);};currentNode=currentSibling;}};if (K) K=levelClone;};if (A==2){var L=this.startContainer;if (L.nodeType==3){L.data+=L.nextSibling.data;L.parentNode.removeChild(L.nextSibling);};var M=this.endContainer;if (M.nodeType==3&&M.nextSibling){M.data+=M.nextSibling.data;M.parentNode.removeChild(M.nextSibling);}}else{if (topStart&&topEnd&&(C.parentNode!=topStart.parentNode||D.parentNode!=topEnd.parentNode)){var N=FCKDomTools.GetIndexOf(topEnd);if (G&&topEnd.parentNode==C.parentNode) N--;this.setStart(topEnd.parentNode,N);};this.collapse(true);};if(G) C.parentNode.removeChild(C);if(H&&D.parentNode) D.parentNode.removeChild(D);},cloneRange:function(){return FCKW3CRange.CreateFromRange(this._Document,this);}}; +var FCKEnterKey=function(A,B,C,D){this.Window=A;this.EnterMode=B||'p';this.ShiftEnterMode=C||'br';var E=new FCKKeystrokeHandler(false);E._EnterKey=this;E.OnKeystroke=FCKEnterKey_OnKeystroke;E.SetKeystrokes([[13,'Enter'],[SHIFT+13,'ShiftEnter'],[9,'Tab'],[8,'Backspace'],[CTRL+8,'CtrlBackspace'],[46,'Delete']]);if (D>0){this.TabText='';while (D-->0) this.TabText+='\xa0';};E.AttachToElement(A.document);};function FCKEnterKey_OnKeystroke(A,B){var C=this._EnterKey;try{switch (B){case 'Enter':return C.DoEnter();break;case 'ShiftEnter':return C.DoShiftEnter();break;case 'Backspace':return C.DoBackspace();break;case 'Delete':return C.DoDelete();break;case 'Tab':return C.DoTab();break;case 'CtrlBackspace':return C.DoCtrlBackspace();break;}}catch (e){};return false;};FCKEnterKey.prototype.DoEnter=function(A,B){FCKUndo.SaveUndoStep();this._HasShift=(B===true);var C=FCKSelection.GetParentElement();var D=new FCKElementPath(C);var E=A||this.EnterMode;if (E=='br'||D.Block&&D.Block.tagName.toLowerCase()=='pre') return this._ExecuteEnterBr();else return this._ExecuteEnterBlock(E);};FCKEnterKey.prototype.DoShiftEnter=function(){return this.DoEnter(this.ShiftEnterMode,true);};FCKEnterKey.prototype.DoBackspace=function(){var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};var C=B.CheckIsCollapsed();if (!C){if (FCKBrowserInfo.IsIE&&this.Window.document.selection.type.toLowerCase()=="control"){var D=this.Window.document.selection.createRange();for (var i=D.length-1;i>=0;i--){var E=D.item(i);E.parentNode.removeChild(E);};return true;};return false;};var F=B.StartBlock;var G=B.EndBlock;if (B.StartBlockLimit==B.EndBlockLimit&&F&&G){if (!C){var H=B.CheckEndOfBlock();B.DeleteContents();if (F!=G){B.SetStart(G,1);B.SetEnd(G,1);};B.Select();A=(F==G);};if (B.CheckStartOfBlock()){var I=B.StartBlock;var J=FCKDomTools.GetPreviousSourceElement(I,true,['BODY',B.StartBlockLimit.nodeName],['UL','OL']);A=this._ExecuteBackspace(B,J,I);}else if (FCKBrowserInfo.IsGeckoLike){B.Select();}};B.Release();return A;};FCKEnterKey.prototype.DoCtrlBackspace=function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(this.Window);A.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(A,this.Window.document.body)){this._FixIESelectAllBug(A);return true;};return false;};FCKEnterKey.prototype._ExecuteBackspace=function(A,B,C){var D=false;if (!B&&C&&C.nodeName.IEquals('LI')&&C.parentNode.parentNode.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};if (B&&B.nodeName.IEquals('LI')){var E=FCKDomTools.GetLastChild(B,['UL','OL']);while (E){B=FCKDomTools.GetLastChild(E,'LI');E=FCKDomTools.GetLastChild(B,['UL','OL']);}};if (B&&C){if (C.nodeName.IEquals('LI')&&!B.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};var F=C.parentNode;var G=B.nodeName.toLowerCase();if (FCKListsLib.EmptyElements[G]!=null||G=='table'){FCKDomTools.RemoveNode(B);D=true;}else{FCKDomTools.RemoveNode(C);while (F.innerHTML.Trim().length==0){var H=F.parentNode;H.removeChild(F);F=H;};FCKDomTools.LTrimNode(C);FCKDomTools.RTrimNode(B);A.SetStart(B,2,true);A.Collapse(true);var I=A.CreateBookmark(true);if (!C.tagName.IEquals(['TABLE'])) FCKDomTools.MoveChildren(C,B);A.SelectBookmark(I);D=true;}};return D;};FCKEnterKey.prototype.DoDelete=function(){FCKUndo.SaveUndoStep();var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};if (B.CheckIsCollapsed()&&B.CheckEndOfBlock(FCKBrowserInfo.IsGeckoLike)){var C=B.StartBlock;var D=FCKTools.GetElementAscensor(C,'td');var E=FCKDomTools.GetNextSourceElement(C,true,[B.StartBlockLimit.nodeName],['UL','OL','TR'],true);if (D){var F=FCKTools.GetElementAscensor(E,'td');if (F!=D) return true;};A=this._ExecuteBackspace(B,C,E);};B.Release();return A;};FCKEnterKey.prototype.DoTab=function(){var A=new FCKDomRange(this.Window);A.MoveToSelection();var B=A._Range.startContainer;while (B){if (B.nodeType==1){var C=B.tagName.toLowerCase();if (C=="tr"||C=="td"||C=="th"||C=="tbody"||C=="table") return false;else break;};B=B.parentNode;};if (this.TabText){A.DeleteContents();A.InsertNode(this.Window.document.createTextNode(this.TabText));A.Collapse(false);A.Select();};return true;};FCKEnterKey.prototype._ExecuteEnterBlock=function(A,B){var C=B||new FCKDomRange(this.Window);var D=C.SplitBlock(A);if (D){var E=D.PreviousBlock;var F=D.NextBlock;var G=D.WasStartOfBlock;var H=D.WasEndOfBlock;if (F){if (F.parentNode.nodeName.IEquals('li')){FCKDomTools.BreakParent(F,F.parentNode);FCKDomTools.MoveNode(F,F.nextSibling,true);}}else if (E&&E.parentNode.nodeName.IEquals('li')){FCKDomTools.BreakParent(E,E.parentNode);C.MoveToElementEditStart(E.nextSibling);FCKDomTools.MoveNode(E,E.previousSibling);};if (!G&&!H){if (F.nodeName.IEquals('li')&&F.firstChild&&F.firstChild.nodeName.IEquals(['ul','ol'])) F.insertBefore(FCKTools.GetElementDocument(F).createTextNode('\xa0'),F.firstChild);if (F) C.MoveToElementEditStart(F);}else{if (G&&H&&E.tagName.toUpperCase()=='LI'){C.MoveToElementStart(E);this._OutdentWithSelection(E,C);C.Release();return true;};var I;if (E){var J=E.tagName.toUpperCase();if (!this._HasShift&&!(/^H[1-6]$/).test(J)){I=FCKDomTools.CloneElement(E);}}else if (F) I=FCKDomTools.CloneElement(F);if (!I) I=this.Window.document.createElement(A);var K=D.ElementPath;if (K){for (var i=0,len=K.Elements.length;i=0&&(C=B[i--])){if (C.name.length>0){if (C.innerHTML!==''){if (FCKBrowserInfo.IsIE) C.className+=' FCK__AnchorC';}else{var D=FCKDocumentProcessor_CreateFakeImage('FCK__Anchor',C.cloneNode(true));D.setAttribute('_fckanchor','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}}}};var FCKPageBreaksProcessor=FCKDocumentProcessor.AppendNew();FCKPageBreaksProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('DIV');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.style.pageBreakAfter=='always'&&C.childNodes.length==1&&C.childNodes[0].style&&C.childNodes[0].style.display=='none'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',C.cloneNode(true));C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};FCKEmbedAndObjectProcessor=(function(){var A=[];var B=function(el){var C=el.cloneNode(true);var D;var E=D=FCKDocumentProcessor_CreateFakeImage('FCK__UnknownObject',C);FCKEmbedAndObjectProcessor.RefreshView(E,el);for (var i=0;i=0;i--) B(F[i]);var G=doc.getElementsByTagName('embed');for (var i=G.length-1;i>=0;i--) B(G[i]);});},RefreshView:function(placeHolder,original){if (original.getAttribute('width')>0) placeHolder.style.width=FCKTools.ConvertHtmlSizeToStyle(original.getAttribute('width'));if (original.getAttribute('height')>0) placeHolder.style.height=FCKTools.ConvertHtmlSizeToStyle(original.getAttribute('height'));},AddCustomHandler:function(func){A.push(func);}});})();FCK.GetRealElement=function(A){var e=FCKTempBin.Elements[A.getAttribute('_fckrealelement')];if (A.getAttribute('_fckflash')){if (A.style.width.length>0) e.width=FCKTools.ConvertStyleSizeToHtml(A.style.width);if (A.style.height.length>0) e.height=FCKTools.ConvertStyleSizeToHtml(A.style.height);};return e;};if (FCKBrowserInfo.IsIE){FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('HR');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){var D=A.createElement('hr');D.mergeAttributes(C,true);FCKDomTools.InsertAfterNode(C,D);C.parentNode.removeChild(C);}}};FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('INPUT');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.type=='hidden'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__InputHidden',C.cloneNode(true));D.setAttribute('_fckinputhidden','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};FCKEmbedAndObjectProcessor.AddCustomHandler(function(A,B){if (!(A.nodeName.IEquals('embed')&&(A.type=='application/x-shockwave-flash'||/\.swf($|#|\?)/i.test(A.src)))) return;B.className='FCK__Flash';B.setAttribute('_fckflash','true',0);}); +var FCKSelection=FCK.Selection={GetParentBlock:function(){var A=this.GetParentElement();while (A){if (FCKListsLib.BlockBoundaries[A.nodeName.toLowerCase()]) break;A=A.parentNode;};return A;},ApplyStyle:function(A){FCKStyles.ApplyStyle(new FCKStyle(A));}}; +FCKSelection.GetType=function(){var A='Text';var B;try { B=this.GetSelection();} catch (e) {};if (B&&B.rangeCount==1){var C=B.getRangeAt(0);if (C.startContainer==C.endContainer&&(C.endOffset-C.startOffset)==1&&C.startContainer.nodeType==1&&FCKListsLib.StyleObjectElements[C.startContainer.childNodes[C.startOffset].nodeName.toLowerCase()]){A='Control';}};return A;};FCKSelection.GetSelectedElement=function(){var A=!!FCK.EditorWindow&&this.GetSelection();if (!A||A.rangeCount<1) return null;var B=A.getRangeAt(0);if (B.startContainer!=B.endContainer||B.startContainer.nodeType!=1||B.startOffset!=B.endOffset-1) return null;var C=B.startContainer.childNodes[B.startOffset];if (C.nodeType!=1) return null;return C;};FCKSelection.GetParentElement=function(){if (this.GetType()=='Control') return FCKSelection.GetSelectedElement().parentNode;else{var A=this.GetSelection();if (A){if (A.anchorNode&&A.anchorNode==A.focusNode) return A.anchorNode.parentNode;var B=new FCKElementPath(A.anchorNode);var C=new FCKElementPath(A.focusNode);var D=null;var E=null;if (B.Elements.length>C.Elements.length){D=B.Elements;E=C.Elements;}else{D=C.Elements;E=B.Elements;};var F=D.length-E.length;for(var i=0;i0){var C=B.getRangeAt(A?0:(B.rangeCount-1));var D=A?C.startContainer:C.endContainer;return (D.nodeType==1?D:D.parentNode);}};return null;};FCKSelection.SelectNode=function(A){var B=FCK.EditorDocument.createRange();B.selectNode(A);var C=this.GetSelection();C.removeAllRanges();C.addRange(B);};FCKSelection.Collapse=function(A){var B=this.GetSelection();if (A==null||A===true) B.collapseToStart();else B.collapseToEnd();};FCKSelection.HasAncestorNode=function(A){var B=this.GetSelectedElement();if (!B&&FCK.EditorWindow){try { B=this.GetSelection().getRangeAt(0).startContainer;}catch(e){}};while (B){if (B.nodeType==1&&B.tagName==A) return true;B=B.parentNode;};return false;};FCKSelection.MoveToAncestorNode=function(A){var B;var C=this.GetSelectedElement();if (!C) C=this.GetSelection().getRangeAt(0).startContainer;while (C){if (C.nodeName==A) return C;C=C.parentNode;};return null;};FCKSelection.Delete=function(){var A=this.GetSelection();for (var i=0;i=0;i--){if (C[i]) FCKTableHandler.DeleteRows(C[i]);};return;};var E=FCKTools.GetElementAscensor(A,'TABLE');if (E.rows.length==1){FCKTableHandler.DeleteTable(E);return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteTable=function(A){if (!A){A=FCKSelection.GetSelectedElement();if (!A||A.tagName!='TABLE') A=FCKSelection.MoveToAncestorNode('TABLE');};if (!A) return;FCKSelection.SelectNode(A);FCKSelection.Collapse();if (A.parentNode.childNodes.length==1) A.parentNode.parentNode.removeChild(A.parentNode);else A.parentNode.removeChild(A);};FCKTableHandler.InsertColumn=function(A){var B=null;var C=this.GetSelectedCells();if (C&&C.length) B=C[A?0:(C.length-1)];if (!B) return;var D=FCKTools.GetElementAscensor(B,'TABLE');var E=B.cellIndex;for (var i=0;i=0;i--){if (B[i]) FCKTableHandler.DeleteColumns(B[i]);};return;};if (!A) return;var C=FCKTools.GetElementAscensor(A,'TABLE');var D=A.cellIndex;for (var i=C.rows.length-1;i>=0;i--){var E=C.rows[i];if (D==0&&E.cells.length==1){FCKTableHandler.DeleteRows(E);continue;};if (E.cells[D]) E.removeChild(E.cells[D]);}};FCKTableHandler.InsertCell=function(A,B){var C=null;var D=this.GetSelectedCells();if (D&&D.length) C=D[B?0:(D.length-1)];if (!C) return null;var E=FCK.EditorDocument.createElement('TD');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(E);if (!B&&C.cellIndex==C.parentNode.cells.length-1) C.parentNode.appendChild(E);else C.parentNode.insertBefore(E,B?C:C.nextSibling);return E;};FCKTableHandler.DeleteCell=function(A){if (A.parentNode.cells.length==1){FCKTableHandler.DeleteRows(FCKTools.GetElementAscensor(A,'TR'));return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteCells=function(){var A=FCKTableHandler.GetSelectedCells();for (var i=A.length-1;i>=0;i--){FCKTableHandler.DeleteCell(A[i]);}};FCKTableHandler._MarkCells=function(A,B){for (var i=0;i=E.height){for (D=F;D0){var L=K.removeChild(K.firstChild);if (L.nodeType!=1||(L.getAttribute('type',2)!='_moz'&&L.getAttribute('_moz_dirty')!=null)){I.appendChild(L);J++;}}};if (J>0) I.appendChild(FCKTools.GetElementDocument(B).createElement('br'));};this._ReplaceCellsByMarker(C,'_SelectedCells',B);this._UnmarkCells(A,'_SelectedCells');this._InstallTableMap(C,B.parentNode.parentNode);B.appendChild(I);if (FCKBrowserInfo.IsGeckoLike&&(!B.firstChild)) FCKTools.AppendBogusBr(B);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeRight=function(){var A=this.GetMergeRightTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=FCK.EditorDocument.createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));D.parentNode.removeChild(D);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeDown=function(){var A=this.GetMergeDownTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=FCKTools.GetElementDocument(B).createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));if (E.firstChild) E.insertBefore(FCKTools.GetElementDocument(D).createElement('br'),E.firstChild);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.HorizontalSplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=B.parentNode.rowIndex;var E=FCKTableHandler._GetCellIndexSpan(C,D,B);var F=isNaN(B.colSpan)?1:B.colSpan;if (F>1){var G=Math.ceil(F/2);var H=FCKTools.GetElementDocument(B).createElement('td');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(H);var I=E+G;var J=E+F;var K=isNaN(B.rowSpan)?1:B.rowSpan;for (var r=D;r1){B.rowSpan=Math.ceil(E/2);var G=F+Math.ceil(E/2);var H=null;for (var i=D+1;i0){var C=B.rows[0];C.parentNode.removeChild(C);};for (var i=0;iE) E=j;if (D._colScanned===true) continue;if (A[i][j-1]==D) D.colSpan++;if (A[i][j+1]!=D) D._colScanned=true;}};for (var i=0;i<=E;i++){for (var j=0;j ';var A=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',e);var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.SplitBlock();B.InsertNode(A);FCK.Events.FireEvent('OnSelectionChange');};FCKPageBreakCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};var FCKUnlinkCommand=function(){this.Name='Unlink';};FCKUnlinkCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (FCKBrowserInfo.IsGeckoLike){var A=FCK.Selection.MoveToAncestorNode('A');if (A) FCKTools.RemoveOuterTags(A);return;};FCK.ExecuteNamedCommand(this.Name);};FCKUnlinkCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;var A=FCK.GetNamedCommandState(this.Name);if (A==0&&FCK.EditMode==0){var B=FCKSelection.MoveToAncestorNode('A');var C=(B&&B.name.length>0&&B.href.length==0);if (C) A=-1;};return A;};var FCKSelectAllCommand=function(){this.Name='SelectAll';};FCKSelectAllCommand.prototype.Execute=function(){if (FCK.EditMode==0){FCK.ExecuteNamedCommand('SelectAll');}else{var A=FCK.EditingArea.Textarea;if (FCKBrowserInfo.IsIE){A.createTextRange().execCommand('SelectAll');}else{A.selectionStart=0;A.selectionEnd=A.value.length;};A.focus();}};FCKSelectAllCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};var FCKPasteCommand=function(){this.Name='Paste';};FCKPasteCommand.prototype={Execute:function(){if (FCKBrowserInfo.IsIE) FCK.Paste();else FCK.ExecuteNamedCommand('Paste');},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Paste');}};var FCKRuleCommand=function(){this.Name='Rule';};FCKRuleCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();FCK.InsertElement('hr');},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('InsertHorizontalRule');}};var FCKCutCopyCommand=function(A){this.Name=A?'Cut':'Copy';};FCKCutCopyCommand.prototype={Execute:function(){var A=false;if (FCKBrowserInfo.IsIE){var B=function(){A=true;};var C='on'+this.Name.toLowerCase();FCK.EditorDocument.body.attachEvent(C,B);FCK.ExecuteNamedCommand(this.Name);FCK.EditorDocument.body.detachEvent(C,B);}else{try{FCK.ExecuteNamedCommand(this.Name);A=true;}catch(e){}};if (!A) alert(FCKLang['PasteError'+this.Name]);},GetState:function(){return FCK.EditMode!=0?-1:FCK.GetNamedCommandState('Cut');}};var FCKAnchorDeleteCommand=function(){this.Name='AnchorDelete';};FCKAnchorDeleteCommand.prototype={Execute:function(){if (FCK.Selection.GetType()=='Control'){FCK.Selection.Delete();}else{var A=FCK.Selection.GetSelectedElement();if (A){if (A.tagName=='IMG'&&A.getAttribute('_fckanchor')) oAnchor=FCK.GetRealElement(A);else A=null;};if (!A){oAnchor=FCK.Selection.MoveToAncestorNode('A');if (oAnchor) FCK.Selection.SelectNode(oAnchor);};if (oAnchor.href.length!=0){oAnchor.removeAttribute('name');if (FCKBrowserInfo.IsIE) oAnchor.className=oAnchor.className.replace(FCKRegexLib.FCK_Class,'');return;};if (A){A.parentNode.removeChild(A);return;};if (oAnchor.innerHTML.length==0){oAnchor.parentNode.removeChild(oAnchor);return;};FCKTools.RemoveOuterTags(oAnchor);};if (FCKBrowserInfo.IsGecko) FCK.Selection.Collapse(true);},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Unlink');}}; +var FCKShowBlockCommand=function(A,B){this.Name=A;if (B!=undefined) this._SavedState=B;else this._SavedState=null;};FCKShowBlockCommand.prototype.Execute=function(){var A=this.GetState();if (A==-1) return;var B=FCK.EditorDocument.body;if (A==1) B.className=B.className.replace(/(^| )FCK__ShowBlocks/g,'');else B.className+=' FCK__ShowBlocks';FCK.Events.FireEvent('OnSelectionChange');};FCKShowBlockCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;if (!FCK.EditorDocument) return 0;if (/FCK__ShowBlocks(?:\s|$)/.test(FCK.EditorDocument.body.className)) return 1;return 0;};FCKShowBlockCommand.prototype.SaveState=function(){this._SavedState=this.GetState();};FCKShowBlockCommand.prototype.RestoreState=function(){if (this._SavedState!=null&&this.GetState()!=this._SavedState) this.Execute();}; +var FCKSpellCheckCommand=function(){this.Name='SpellCheck';this.IsEnabled=(FCKConfig.SpellChecker=='SpellerPages');};FCKSpellCheckCommand.prototype.Execute=function(){FCKDialog.OpenDialog('FCKDialog_SpellCheck','Spell Check','dialog/fck_spellerpages.html',440,480);};FCKSpellCheckCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return this.IsEnabled?0:-1;}; +var FCKTextColorCommand=function(A){this.Name=A=='ForeColor'?'TextColor':'BGColor';this.Type=A;var B;if (FCKBrowserInfo.IsIE) B=window;else if (FCK.ToolbarSet._IFrame) B=FCKTools.GetElementWindow(FCK.ToolbarSet._IFrame);else B=window.parent;this._Panel=new FCKPanel(B);this._Panel.AppendStyleSheet(FCKConfig.SkinEditorCSS);this._Panel.MainNode.className='FCK_Panel';this._CreatePanelBody(this._Panel.Document,this._Panel.MainNode);FCK.ToolbarSet.ToolbarItems.GetItem(this.Name).RegisterPanel(this._Panel);FCKTools.DisableSelection(this._Panel.Document.body);};FCKTextColorCommand.prototype.Execute=function(A,B,C){this._Panel.Show(A,B,C);};FCKTextColorCommand.prototype.SetColor=function(A){FCKUndo.SaveUndoStep();var B=FCKStyles.GetStyle('_FCK_'+(this.Type=='ForeColor'?'Color':'BackColor'));if (!A||A.length==0) FCK.Styles.RemoveStyle(B);else{B.SetVariable('Color',A);FCKStyles.ApplyStyle(B);};FCKUndo.SaveUndoStep();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');};FCKTextColorCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};function FCKTextColorCommand_OnMouseOver(){this.className='ColorSelected';};function FCKTextColorCommand_OnMouseOut(){this.className='ColorDeselected';};function FCKTextColorCommand_OnClick(A,B,C){this.className='ColorDeselected';B.SetColor(C);B._Panel.Hide();};function FCKTextColorCommand_AutoOnClick(A,B){this.className='ColorDeselected';B.SetColor('');B._Panel.Hide();};function FCKTextColorCommand_MoreOnClick(A,B){this.className='ColorDeselected';B._Panel.Hide();FCKDialog.OpenDialog('FCKDialog_Color',FCKLang.DlgColorTitle,'dialog/fck_colorselector.html',410,320,FCKTools.Bind(B,B.SetColor));};FCKTextColorCommand.prototype._CreatePanelBody=function(A,B){function CreateSelectionDiv(){var C=A.createElement("DIV");C.className='ColorDeselected';FCKTools.AddEventListenerEx(C,'mouseover',FCKTextColorCommand_OnMouseOver);FCKTools.AddEventListenerEx(C,'mouseout',FCKTextColorCommand_OnMouseOut);return C;};var D=B.appendChild(A.createElement("TABLE"));D.className='ForceBaseFont';D.style.tableLayout='fixed';D.cellPadding=0;D.cellSpacing=0;D.border=0;D.width=150;var E=D.insertRow(-1).insertCell(-1);E.colSpan=8;var C=E.appendChild(CreateSelectionDiv());C.innerHTML='\n \n \n \n \n
    '+FCKLang.ColorAutomatic+'
    ';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_AutoOnClick,this);if (!FCKBrowserInfo.IsIE) C.style.width='96%';var G=FCKConfig.FontColors.toString().split(',');var H=0;while (H
    ';if (H>=G.length) C.style.visibility='hidden';else FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_OnClick,[this,L]);}};if (FCKConfig.EnableMoreFontColors){E=D.insertRow(-1).insertCell(-1);E.colSpan=8;C=E.appendChild(CreateSelectionDiv());C.innerHTML='
    '+FCKLang.ColorMoreColors+'
    ';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_MoreOnClick,this);};if (!FCKBrowserInfo.IsIE) C.style.width='96%';}; +var FCKPastePlainTextCommand=function(){this.Name='PasteText';};FCKPastePlainTextCommand.prototype.Execute=function(){FCK.PasteAsPlainText();};FCKPastePlainTextCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Paste');}; +var FCKPasteWordCommand=function(){this.Name='PasteWord';};FCKPasteWordCommand.prototype.Execute=function(){FCK.PasteFromWord();};FCKPasteWordCommand.prototype.GetState=function(){if (FCK.EditMode!=0||FCKConfig.ForcePasteAsPlainText) return -1;else return FCK.GetNamedCommandState('Paste');}; +var FCKTableCommand=function(A){this.Name=A;};FCKTableCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (!FCKBrowserInfo.IsGecko){switch (this.Name){case 'TableMergeRight':return FCKTableHandler.MergeRight();case 'TableMergeDown':return FCKTableHandler.MergeDown();}};switch (this.Name){case 'TableInsertRowAfter':return FCKTableHandler.InsertRow(false);case 'TableInsertRowBefore':return FCKTableHandler.InsertRow(true);case 'TableDeleteRows':return FCKTableHandler.DeleteRows();case 'TableInsertColumnAfter':return FCKTableHandler.InsertColumn(false);case 'TableInsertColumnBefore':return FCKTableHandler.InsertColumn(true);case 'TableDeleteColumns':return FCKTableHandler.DeleteColumns();case 'TableInsertCellAfter':return FCKTableHandler.InsertCell(null,false);case 'TableInsertCellBefore':return FCKTableHandler.InsertCell(null,true);case 'TableDeleteCells':return FCKTableHandler.DeleteCells();case 'TableMergeCells':return FCKTableHandler.MergeCells();case 'TableHorizontalSplitCell':return FCKTableHandler.HorizontalSplitCell();case 'TableVerticalSplitCell':return FCKTableHandler.VerticalSplitCell();case 'TableDelete':return FCKTableHandler.DeleteTable();default:return alert(FCKLang.UnknownCommand.replace(/%1/g,this.Name));}};FCKTableCommand.prototype.GetState=function(){if (FCK.EditorDocument!=null&&FCKSelection.HasAncestorNode('TABLE')){switch (this.Name){case 'TableHorizontalSplitCell':case 'TableVerticalSplitCell':if (FCKTableHandler.GetSelectedCells().length==1) return 0;else return -1;case 'TableMergeCells':if (FCKTableHandler.CheckIsSelectionRectangular()&&FCKTableHandler.GetSelectedCells().length>1) return 0;else return -1;case 'TableMergeRight':return FCKTableHandler.GetMergeRightTarget()?0:-1;case 'TableMergeDown':return FCKTableHandler.GetMergeDownTarget()?0:-1;default:return 0;}}else return -1;}; +var FCKFitWindow=function(){this.Name='FitWindow';};FCKFitWindow.prototype.Execute=function(){var A=window.frameElement;var B=A.style;var C=parent;var D=C.document.documentElement;var E=C.document.body;var F=E.style;var G;if (!this.IsMaximized){if(FCKBrowserInfo.IsIE) C.attachEvent('onresize',FCKFitWindow_Resize);else C.addEventListener('resize',FCKFitWindow_Resize,true);this._ScrollPos=FCKTools.GetScrollPosition(C);G=A;while((G=G.parentNode)){if (G.nodeType==1){G._fckSavedStyles=FCKTools.SaveStyles(G);G.style.zIndex=FCKConfig.FloatingPanelsZIndex-1;}};if (FCKBrowserInfo.IsIE){this.documentElementOverflow=D.style.overflow;D.style.overflow='hidden';F.overflow='hidden';}else{F.overflow='hidden';F.width='0px';F.height='0px';};this._EditorFrameStyles=FCKTools.SaveStyles(A);var H=FCKTools.GetViewPaneSize(C);B.position="absolute";B.zIndex=FCKConfig.FloatingPanelsZIndex-1;B.left="0px";B.top="0px";B.width=H.Width+"px";B.height=H.Height+"px";if (!FCKBrowserInfo.IsIE){B.borderRight=B.borderBottom="9999px solid white";B.backgroundColor="white";};C.scrollTo(0,0);var I=FCKTools.GetWindowPosition(C,A);if (I.x!=0) B.left=(-1*I.x)+"px";if (I.y!=0) B.top=(-1*I.y)+"px";this.IsMaximized=true;}else{if(FCKBrowserInfo.IsIE) C.detachEvent("onresize",FCKFitWindow_Resize);else C.removeEventListener("resize",FCKFitWindow_Resize,true);G=A;while((G=G.parentNode)){if (G._fckSavedStyles){FCKTools.RestoreStyles(G,G._fckSavedStyles);G._fckSavedStyles=null;}};if (FCKBrowserInfo.IsIE) D.style.overflow=this.documentElementOverflow;FCKTools.RestoreStyles(A,this._EditorFrameStyles);C.scrollTo(this._ScrollPos.X,this._ScrollPos.Y);this.IsMaximized=false;};FCKToolbarItems.GetItem('FitWindow').RefreshState();if (FCK.EditMode==0) FCK.EditingArea.MakeEditable();FCK.Focus();};FCKFitWindow.prototype.GetState=function(){if (FCKConfig.ToolbarLocation!='In') return -1;else return (this.IsMaximized?1:0);};function FCKFitWindow_Resize(){var A=FCKTools.GetViewPaneSize(parent);var B=window.frameElement.style;B.width=A.Width+'px';B.height=A.Height+'px';}; +var FCKListCommand=function(A,B){this.Name=A;this.TagName=B;};FCKListCommand.prototype={GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=FCKSelection.GetBoundaryParentElement(true);var B=A;while (B){if (B.nodeName.IEquals(['ul','ol'])) break;B=B.parentNode;};if (B&&B.nodeName.IEquals(this.TagName)) return 1;else return 0;},Execute:function(){FCKUndo.SaveUndoStep();var A=FCK.EditorDocument;var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=this.GetState();if (C==0){FCKDomTools.TrimNode(A.body);if (!A.body.firstChild){var D=A.createElement('p');A.body.appendChild(D);B.MoveToNodeContents(D);}};var E=B.CreateBookmark();var F=[];var G={};var H=new FCKDomRangeIterator(B);var I;H.ForceBrBreak=(C==0);var J=true;var K=null;while (J){while ((I=H.GetNextParagraph())){var L=new FCKElementPath(I);var M=null;var N=false;var O=L.BlockLimit;for (var i=L.Elements.length-1;i>=0;i--){var P=L.Elements[i];if (P.nodeName.IEquals(['ol','ul'])){if (O._FCK_ListGroupObject) O._FCK_ListGroupObject=null;var Q=P._FCK_ListGroupObject;if (Q) Q.contents.push(I);else{Q={ 'root':P,'contents':[I] };F.push(Q);FCKDomTools.SetElementMarker(G,P,'_FCK_ListGroupObject',Q);};N=true;break;}};if (N) continue;var R=O;if (R._FCK_ListGroupObject) R._FCK_ListGroupObject.contents.push(I);else{var Q={ 'root':R,'contents':[I] };FCKDomTools.SetElementMarker(G,R,'_FCK_ListGroupObject',Q);F.push(Q);}};if (FCKBrowserInfo.IsIE) J=false;else{if (K==null){K=[];var T=FCKSelection.GetSelection();if (T&&F.length==0) K.push(T.getRangeAt(0));for (var i=1;T&&i0){var Q=F.shift();if (C==0){if (Q.root.nodeName.IEquals(['ul','ol'])) this._ChangeListType(Q,G,W);else this._CreateList(Q,W);}else if (C==1&&Q.root.nodeName.IEquals(['ul','ol'])) this._RemoveList(Q,G);};for (var i=0;iC[i-1].indent+1){var H=C[i-1].indent+1-C[i].indent;var I=C[i].indent;while (C[i]&&C[i].indent>=I){C[i].indent+=H;i++;};i--;}};var J=FCKDomTools.ArrayToList(C,B);if (A.root.nextSibling==null||A.root.nextSibling.nodeName.IEquals('br')){if (J.listNode.lastChild.nodeName.IEquals('br')) J.listNode.removeChild(J.listNode.lastChild);};A.root.parentNode.replaceChild(J.listNode,A.root);}}; +var FCKJustifyCommand=function(A){this.AlignValue=A;var B=FCKConfig.ContentLangDirection.toLowerCase();this.IsDefaultAlign=(A=='left'&&B=='ltr')||(A=='right'&&B=='rtl');var C=this._CssClassName=(function(){var D=FCKConfig.JustifyClasses;if (D){switch (A){case 'left':return D[0]||null;case 'center':return D[1]||null;case 'right':return D[2]||null;case 'justify':return D[3]||null;}};return null;})();if (C&&C.length>0) this._CssClassRegex=new RegExp('(?:^|\\s+)'+C+'(?=$|\\s)');};FCKJustifyCommand._GetClassNameRegex=function(){var A=FCKJustifyCommand._ClassRegex;if (A!=undefined) return A;var B=[];var C=FCKConfig.JustifyClasses;if (C){for (var i=0;i<4;i++){var D=C[i];if (D&&D.length>0) B.push(D);}};if (B.length>0) A=new RegExp('(?:^|\\s+)(?:'+B.join('|')+')(?=$|\\s)');else A=null;return FCKJustifyCommand._ClassRegex=A;};FCKJustifyCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();var B=this.GetState();if (B==-1) return;var C=A.CreateBookmark();var D=this._CssClassName;var E=new FCKDomRangeIterator(A);var F;while ((F=E.GetNextParagraph())){F.removeAttribute('align');if (D){var G=F.className.replace(FCKJustifyCommand._GetClassNameRegex(),'');if (B==0){if (G.length>0) G+=' ';F.className=G+D;}else if (G.length==0) FCKDomTools.RemoveAttribute(F,'class');}else{var H=F.style;if (B==0) H.textAlign=this.AlignValue;else{H.textAlign='';if (H.cssText.length==0) F.removeAttribute('style');}}};A.MoveToBookmark(C);A.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;var C;if (FCKBrowserInfo.IsIE) C=B.currentStyle.textAlign;else C=FCK.EditorWindow.getComputedStyle(B,'').getPropertyValue('text-align');C=C.replace(/(-moz-|-webkit-|start|auto)/i,'');if ((!C&&this.IsDefaultAlign)||C==this.AlignValue) return 1;return 0;}}; +var FCKIndentCommand=function(A,B){this.Name=A;this.Offset=B;this.IndentCSSProperty=FCKConfig.ContentLangDirection.IEquals('ltr')?'marginLeft':'marginRight';};FCKIndentCommand._InitIndentModeParameters=function(){if (FCKConfig.IndentClasses&&FCKConfig.IndentClasses.length>0){this._UseIndentClasses=true;this._IndentClassMap={};for (var i=0;i0?H+' ':'')+FCKConfig.IndentClasses[G-1];}else{var I=parseInt(E.style[this.IndentCSSProperty],10);if (isNaN(I)) I=0;I+=this.Offset;I=Math.max(I,0);I=Math.ceil(I/this.Offset)*this.Offset;E.style[this.IndentCSSProperty]=I?I+FCKConfig.IndentUnit:'';if (E.getAttribute('style')=='') E.removeAttribute('style');}}},_IndentList:function(A,B){var C=A.StartContainer;var D=A.EndContainer;while (C&&C.parentNode!=B) C=C.parentNode;while (D&&D.parentNode!=B) D=D.parentNode;if (!C||!D) return;var E=C;var F=[];var G=false;while (G==false){if (E==D) G=true;F.push(E);E=E.nextSibling;};if (F.length<1) return;var H=FCKDomTools.GetParents(B);for (var i=0;iN;i++) M[i].indent+=I;var O=FCKDomTools.ArrayToList(M);if (O) B.parentNode.replaceChild(O.listNode,B);FCKDomTools.ClearAllMarkers(L);}}; +var FCKBlockQuoteCommand=function(){};FCKBlockQuoteCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=this.GetState();var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.CreateBookmark();if (FCKBrowserInfo.IsIE){var D=B.GetBookmarkNode(C,true);var E=B.GetBookmarkNode(C,false);var F;if (D&&D.parentNode.nodeName.IEquals('blockquote')&&!D.previousSibling){F=D;while ((F=F.nextSibling)){if (FCKListsLib.BlockElements[F.nodeName.toLowerCase()]) FCKDomTools.MoveNode(D,F,true);}};if (E&&E.parentNode.nodeName.IEquals('blockquote')&&!E.previousSibling){F=E;while ((F=F.nextSibling)){if (FCKListsLib.BlockElements[F.nodeName.toLowerCase()]){if (F.firstChild==D) FCKDomTools.InsertAfterNode(D,E);else FCKDomTools.MoveNode(E,F,true);}}}};var G=new FCKDomRangeIterator(B);var H;if (A==0){G.EnforceRealBlocks=true;var I=[];while ((H=G.GetNextParagraph())) I.push(H);if (I.length<1){para=B.Window.document.createElement(FCKConfig.EnterMode.IEquals('p')?'p':'div');B.InsertNode(para);para.appendChild(B.Window.document.createTextNode('\ufeff'));B.MoveToBookmark(C);B.MoveToNodeContents(para);B.Collapse(true);C=B.CreateBookmark();I.push(para);};var J=I[0].parentNode;var K=[];for (var i=0;i0){H=I.shift();while (H.parentNode!=J) H=H.parentNode;if (H!=L) K.push(H);L=H;};while (K.length>0){H=K.shift();if (H.nodeName.IEquals('blockquote')){var M=FCKTools.GetElementDocument(H).createDocumentFragment();while (H.firstChild){M.appendChild(H.removeChild(H.firstChild));I.push(M.lastChild);};H.parentNode.replaceChild(M,H);}else I.push(H);};var N=B.Window.document.createElement('blockquote');J.insertBefore(N,I[0]);while (I.length>0){H=I.shift();N.appendChild(H);}}else if (A==1){var O=[];while ((H=G.GetNextParagraph())){var P=null;var Q=null;while (H.parentNode){if (H.parentNode.nodeName.IEquals('blockquote')){P=H.parentNode;Q=H;break;};H=H.parentNode;};if (P&&Q) O.push(Q);};var R=[];while (O.length>0){var S=O.shift();var N=S.parentNode;if (S==S.parentNode.firstChild){N.parentNode.insertBefore(N.removeChild(S),N);if (!N.firstChild) N.parentNode.removeChild(N);}else if (S==S.parentNode.lastChild){N.parentNode.insertBefore(N.removeChild(S),N.nextSibling);if (!N.firstChild) N.parentNode.removeChild(N);}else FCKDomTools.BreakParent(S,S.parentNode,B);R.push(S);};if (FCKConfig.EnterMode.IEquals('br')){while (R.length){var S=R.shift();var W=true;if (S.nodeName.IEquals('div')){var M=FCKTools.GetElementDocument(S).createDocumentFragment();var Y=W&&S.previousSibling&&!FCKListsLib.BlockBoundaries[S.previousSibling.nodeName.toLowerCase()];if (W&&Y) M.appendChild(FCKTools.GetElementDocument(S).createElement('br'));var Z=S.nextSibling&&!FCKListsLib.BlockBoundaries[S.nextSibling.nodeName.toLowerCase()];while (S.firstChild) M.appendChild(S.removeChild(S.firstChild));if (Z) M.appendChild(FCKTools.GetElementDocument(S).createElement('br'));S.parentNode.replaceChild(M,S);W=false;}}}};B.MoveToBookmark(C);B.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;for (var i=0;i';B.open();B.write(''+F+'<\/head><\/body><\/html>');B.close();if(FCKBrowserInfo.IsAIR) FCKAdobeAIR.Panel_Contructor(B,window.document.location);FCKTools.AddEventListenerEx(E,'focus',FCKPanel_Window_OnFocus,this);FCKTools.AddEventListenerEx(E,'blur',FCKPanel_Window_OnBlur,this);};B.dir=FCKLang.Dir;FCKTools.AddEventListener(B,'contextmenu',FCKTools.CancelEvent);this.MainNode=B.body.appendChild(B.createElement('DIV'));this.MainNode.style.cssFloat=this.IsRTL?'right':'left';};FCKPanel.prototype.AppendStyleSheet=function(A){FCKTools.AppendStyleSheet(this.Document,A);};FCKPanel.prototype.Preload=function(x,y,A){if (this._Popup) this._Popup.show(x,y,0,0,A);};FCKPanel.prototype.Show=function(x,y,A,B,C){var D;var E=this.MainNode;if (this._Popup){this._Popup.show(x,y,0,0,A);FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=(x*-1)+A.offsetWidth-D;};this._Popup.show(x,y,D,E.offsetHeight,A);if (this.OnHide){if (this._Timer) CheckPopupOnHide.call(this,true);this._Timer=FCKTools.SetInterval(CheckPopupOnHide,100,this);}}else{if (typeof(FCK.ToolbarSet.CurrentInstance.FocusManager)!='undefined') FCK.ToolbarSet.CurrentInstance.FocusManager.Lock();if (this.ParentPanel){this.ParentPanel.Lock();FCKPanel_Window_OnBlur(null,this.ParentPanel);};if (FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac){this._IFrame.scrolling='';FCKTools.RunFunction(function(){ this._IFrame.scrolling='no';},this);};if (FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel&&FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel!=this) FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel.Hide(false,true);FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (!B) this._IFrame.width=1;if (!C) this._IFrame.height=1;D=E.offsetWidth||E.firstChild.offsetWidth;var F=FCKTools.GetDocumentPosition(this._Window,A.nodeType==9?(FCKTools.IsStrictMode(A)?A.documentElement:A.body):A);var G=FCKDomTools.GetPositionedAncestor(this._IFrame.parentNode);if (G){var H=FCKTools.GetDocumentPosition(FCKTools.GetElementWindow(G),G);F.x-=H.x;F.y-=H.y;};if (this.IsRTL&&!this.IsContextMenu) x=(x*-1);x+=F.x;y+=F.y;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=x+A.offsetWidth-D;}else{var I=FCKTools.GetViewPaneSize(this._Window);var J=FCKTools.GetScrollPosition(this._Window);var K=I.Height+J.Y;var L=I.Width+J.X;if ((x+D)>L) x-=x+D-L;if ((y+E.offsetHeight)>K) y-=y+E.offsetHeight-K;};FCKDomTools.SetElementStyles(this._IFrame,{left:x+'px',top:y+'px'});this._IFrame.contentWindow.focus();this._IsOpened=true;var M=this;this._resizeTimer=setTimeout(function(){var N=E.offsetWidth||E.firstChild.offsetWidth;var O=E.offsetHeight;M._IFrame.width=N;M._IFrame.height=O;},0);FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel=this;};FCKTools.RunFunction(this.OnShow,this);};FCKPanel.prototype.Hide=function(A,B){if (this._Popup) this._Popup.hide();else{if (!this._IsOpened||this._LockCounter>0) return;if (typeof(FCKFocusManager)!='undefined'&&!B) FCKFocusManager.Unlock();this._IFrame.width=this._IFrame.height=0;this._IsOpened=false;if (this._resizeTimer){clearTimeout(this._resizeTimer);this._resizeTimer=null;};if (this.ParentPanel) this.ParentPanel.Unlock();if (!A) 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 A=this._Popup?FCKTools.GetDocumentWindow(this.Document):this._Window;var B=new FCKPanel(A);B.ParentPanel=this;return B;};FCKPanel.prototype.Lock=function(){this._LockCounter++;};FCKPanel.prototype.Unlock=function(){if (--this._LockCounter==0&&!this.HasFocus) this.Hide();};function FCKPanel_Window_OnFocus(e,A){A.HasFocus=true;};function FCKPanel_Window_OnBlur(e,A){A.HasFocus=false;if (A._LockCounter==0) FCKTools.RunFunction(A.Hide,A);};function CheckPopupOnHide(A){if (A||!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;}; +var FCKIcon=function(A){var B=A?typeof(A):'undefined';switch (B){case 'number':this.Path=FCKConfig.SkinPath+'fck_strip.gif';this.Size=16;this.Position=A;break;case 'undefined':this.Path=FCK_SPACER_PATH;break;case 'string':this.Path=A;break;default:this.Path=A[0];this.Size=A[1];this.Position=A[2];}};FCKIcon.prototype.CreateIconElement=function(A){var B,eIconImage;if (this.Position){var C='-'+((this.Position-1)*this.Size)+'px';if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path;eIconImage.style.top=C;}else{B=A.createElement('IMG');B.src=FCK_SPACER_PATH;B.style.backgroundPosition='0px '+C;B.style.backgroundImage='url("'+this.Path+'")';}}else{if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path?this.Path:FCK_SPACER_PATH;}else{B=A.createElement('IMG');B.src=this.Path?this.Path:FCK_SPACER_PATH;}};B.className='TB_Button_Image';return B;}; +var FCKToolbarButtonUI=function(A,B,C,D,E,F){this.Name=A;this.Label=B||A;this.Tooltip=C||this.Label;this.Style=E||0;this.State=F||0;this.Icon=new FCKIcon(D);if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarButtonUI_Cleanup);};FCKToolbarButtonUI.prototype._CreatePaddingElement=function(A){var B=A.createElement('IMG');B.className='TB_Button_Padding';B.src=FCK_SPACER_PATH;return B;};FCKToolbarButtonUI.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this.MainElement=B.createElement('DIV');C.title=this.Tooltip;if (FCKBrowserInfo.IsGecko) C.onmousedown=FCKTools.CancelEvent;FCKTools.AddEventListenerEx(C,'mouseover',FCKToolbarButtonUI_OnMouseOver,this);FCKTools.AddEventListenerEx(C,'mouseout',FCKToolbarButtonUI_OnMouseOut,this);FCKTools.AddEventListenerEx(C,'click',FCKToolbarButtonUI_OnClick,this);this.ChangeState(this.State,true);if (this.Style==0&&!this.ShowArrow){C.appendChild(this.Icon.CreateIconElement(B));}else{var D=C.appendChild(B.createElement('TABLE'));D.cellPadding=0;D.cellSpacing=0;var E=D.insertRow(-1);var F=E.insertCell(-1);if (this.Style==0||this.Style==2) F.appendChild(this.Icon.CreateIconElement(B));else F.appendChild(this._CreatePaddingElement(B));if (this.Style==1||this.Style==2){F=E.insertCell(-1);F.className='TB_Button_Text';F.noWrap=true;F.appendChild(B.createTextNode(this.Label));};if (this.ShowArrow){if (this.Style!=0){E.insertCell(-1).appendChild(this._CreatePaddingElement(B));};F=E.insertCell(-1);var G=F.appendChild(B.createElement('IMG'));G.src=FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif';G.width=5;G.height=3;};F=E.insertCell(-1);F.appendChild(this._CreatePaddingElement(B));};A.appendChild(C);};FCKToolbarButtonUI.prototype.ChangeState=function(A,B){if (!B&&this.State==A) return;var e=this.MainElement;if (!e) return;switch (parseInt(A,10)){case 0:e.className='TB_Button_Off';break;case 1:e.className='TB_Button_On';break;case -1:e.className='TB_Button_Disabled';break;};this.State=A;};function FCKToolbarButtonUI_OnMouseOver(A,B){if (B.State==0) this.className='TB_Button_Off_Over';else if (B.State==1) this.className='TB_Button_On_Over';};function FCKToolbarButtonUI_OnMouseOut(A,B){if (B.State==0) this.className='TB_Button_Off';else if (B.State==1) this.className='TB_Button_On';};function FCKToolbarButtonUI_OnClick(A,B){if (B.OnClick&&B.State!=-1) B.OnClick(B);};function FCKToolbarButtonUI_Cleanup(){this.MainElement=null;}; +var FCKToolbarButton=function(A,B,C,D,E,F,G){this.CommandName=A;this.Label=B;this.Tooltip=C;this.Style=D;this.SourceView=E?true:false;this.ContextSensitive=F?true:false;if (G==null) this.IconPath=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(G)=='number') this.IconPath=[FCKConfig.SkinPath+'fck_strip.gif',16,G];else this.IconPath=G;};FCKToolbarButton.prototype.Create=function(A){this._UIButton=new FCKToolbarButtonUI(this.CommandName,this.Label,this.Tooltip,this.IconPath,this.Style);this._UIButton.OnClick=this.Click;this._UIButton._ToolbarButton=this;this._UIButton.Create(A);};FCKToolbarButton.prototype.RefreshState=function(){var A=this._UIButton;if (!A) return;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B==A.State) return;A.ChangeState(B);};FCKToolbarButton.prototype.Click=function(){var A=this._ToolbarButton||this;FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(A.CommandName).Execute();};FCKToolbarButton.prototype.Enable=function(){this.RefreshState();};FCKToolbarButton.prototype.Disable=function(){this._UIButton.ChangeState(-1);}; +var FCKSpecialCombo=function(A,B,C,D,E){this.FieldWidth=B||100;this.PanelWidth=C||150;this.PanelMaxHeight=D||150;this.Label=' ';this.Caption=A;this.Tooltip=A;this.Style=2;this.Enabled=true;this.Items={};this._Panel=new FCKPanel(E||window);this._Panel.AppendStyleSheet(FCKConfig.SkinEditorCSS);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);};function FCKSpecialCombo_ItemOnMouseOver(){this.className+=' SC_ItemOver';};function FCKSpecialCombo_ItemOnMouseOut(){this.className=this.originalClass;};function FCKSpecialCombo_ItemOnClick(A,B,C){this.className=this.originalClass;B._Panel.Hide();B.SetLabel(this.FCKItemLabel);if (typeof(B.OnSelect)=='function') B.OnSelect(C,this);};FCKSpecialCombo.prototype.ClearItems=function (){if (this.Items) this.Items={};var A=this._ItemsHolderEl;while (A.firstChild) A.removeChild(A.firstChild);};FCKSpecialCombo.prototype.AddItem=function(A,B,C,D){var E=this._ItemsHolderEl.appendChild(this._Panel.Document.createElement('DIV'));E.className=E.originalClass='SC_Item';E.innerHTML=B;E.FCKItemLabel=C||A;E.Selected=false;if (FCKBrowserInfo.IsIE) E.style.width='100%';if (D) E.style.backgroundColor=D;FCKTools.AddEventListenerEx(E,'mouseover',FCKSpecialCombo_ItemOnMouseOver);FCKTools.AddEventListenerEx(E,'mouseout',FCKSpecialCombo_ItemOnMouseOut);FCKTools.AddEventListenerEx(E,'click',FCKSpecialCombo_ItemOnClick,[this,A]);this.Items[A.toString().toLowerCase()]=E;return E;};FCKSpecialCombo.prototype.SelectItem=function(A){if (typeof A=='string') A=this.Items[A.toString().toLowerCase()];if (A){A.className=A.originalClass='SC_ItemSelected';A.Selected=true;}};FCKSpecialCombo.prototype.SelectItemByLabel=function(A,B){for (var C in this.Items){var D=this.Items[C];if (D.FCKItemLabel==A){D.className=D.originalClass='SC_ItemSelected';D.Selected=true;if (B) this.SetLabel(A);}}};FCKSpecialCombo.prototype.DeselectAll=function(A){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 (A) this.SetLabel('');};FCKSpecialCombo.prototype.SetLabelById=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];this.SetLabel(B?B.FCKItemLabel:'');};FCKSpecialCombo.prototype.SetLabel=function(A){A=(!A||A.length==0)?' ':A;if (A==this.Label) return;this.Label=A;var B=this._LabelEl;if (B){B.innerHTML=A;FCKTools.DisableSelection(B);}};FCKSpecialCombo.prototype.SetEnabled=function(A){this.Enabled=A;if (this._OuterTable) this._OuterTable.className=A?'':'SC_FieldDisabled';};FCKSpecialCombo.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this._OuterTable=A.appendChild(B.createElement('TABLE'));C.cellPadding=0;C.cellSpacing=0;C.insertRow(-1);var D;var E;switch (this.Style){case 0:D='TB_ButtonType_Icon';E=false;break;case 1:D='TB_ButtonType_Text';E=false;break;case 2:E=true;break;};if (this.Caption&&this.Caption.length>0&&E){var F=C.rows[0].insertCell(-1);F.innerHTML=this.Caption;F.className='SC_FieldCaption';};var G=FCKTools.AppendElement(C.rows[0].insertCell(-1),'div');if (E){G.className='SC_Field';G.style.width=this.FieldWidth+'px';G.innerHTML='
     
    ';this._LabelEl=G.getElementsByTagName('label')[0];this._LabelEl.innerHTML=this.Label;}else{G.className='TB_Button_Off';G.innerHTML='
    '+this.Caption+'
    ';};FCKTools.AddEventListenerEx(G,'mouseover',FCKSpecialCombo_OnMouseOver,this);FCKTools.AddEventListenerEx(G,'mouseout',FCKSpecialCombo_OnMouseOut,this);FCKTools.AddEventListenerEx(G,'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 A in this.Items) this.Items[A]=null;}};function FCKSpecialCombo_OnMouseOver(A,B){if (B.Enabled){switch (B.Style){case 0:this.className='TB_Button_On_Over';break;case 1:this.className='TB_Button_On_Over';break;case 2:this.className='SC_Field SC_FieldOver';break;}}};function FCKSpecialCombo_OnMouseOut(A,B){switch (B.Style){case 0:this.className='TB_Button_Off';break;case 1:this.className='TB_Button_Off';break;case 2:this.className='SC_Field';break;}};function FCKSpecialCombo_OnClick(e,A){if (A.Enabled){var B=A._Panel;var C=A._PanelBox;var D=A._ItemsHolderEl;var E=A.PanelMaxHeight;if (A.OnBeforeClick) A.OnBeforeClick(A);if (FCKBrowserInfo.IsIE) B.Preload(0,this.offsetHeight,this);if (D.offsetHeight>E) C.style.height=E+'px';else C.style.height='';B.Show(0,this.offsetHeight,this);}}; +var FCKToolbarSpecialCombo=function(){this.SourceView=false;this.ContextSensitive=true;this.FieldWidth=null;this.PanelWidth=null;this.PanelMaxHeight=null;};FCKToolbarSpecialCombo.prototype.DefaultLabel='';function FCKToolbarSpecialCombo_OnSelect(A,B){FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).Execute(A,B);};FCKToolbarSpecialCombo.prototype.Create=function(A){this._Combo=new FCKSpecialCombo(this.GetLabel(),this.FieldWidth,this.PanelWidth,this.PanelMaxHeight,FCKBrowserInfo.IsIE?window:FCKTools.GetElementWindow(A).parent);this._Combo.Tooltip=this.Tooltip;this._Combo.Style=this.Style;this.CreateItems(this._Combo);this._Combo.Create(A);this._Combo.CommandName=this.CommandName;this._Combo.OnSelect=FCKToolbarSpecialCombo_OnSelect;};function FCKToolbarSpecialCombo_RefreshActiveItems(A,B){A.DeselectAll();A.SelectItem(B);A.SetLabelById(B);};FCKToolbarSpecialCombo.prototype.RefreshState=function(){var A;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B!=-1){A=1;if (this.RefreshActiveItems) this.RefreshActiveItems(this._Combo,B);else{if (this._LastValue!==B){this._LastValue=B;if (!B||B.length==0){this._Combo.DeselectAll();this._Combo.SetLabel(this.DefaultLabel);}else FCKToolbarSpecialCombo_RefreshActiveItems(this._Combo,B);}}}else A=-1;if (A==this.State) return;if (A==-1){this._Combo.DeselectAll();this._Combo.SetLabel('');};this.State=A;this._Combo.SetEnabled(A!=-1);};FCKToolbarSpecialCombo.prototype.Enable=function(){this.RefreshState();};FCKToolbarSpecialCombo.prototype.Disable=function(){this.State=-1;this._Combo.DeselectAll();this._Combo.SetLabel('');this._Combo.SetEnabled(false);}; +var FCKToolbarStyleCombo=function(A,B){if (A===false) return;this.CommandName='Style';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultStyleLabel||'';};FCKToolbarStyleCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarStyleCombo.prototype.GetLabel=function(){return FCKLang.Style;};FCKToolbarStyleCombo.prototype.GetStyles=function(){var A={};var B=FCK.ToolbarSet.CurrentInstance.Styles.GetStyles();for (var C in B){var D=B[C];if (!D.IsCore) A[C]=D;};return A;};FCKToolbarStyleCombo.prototype.CreateItems=function(A){var B=A._Panel.Document;FCKTools.AppendStyleSheet(B,FCKConfig.ToolbarComboPreviewCSS);FCKTools.AppendStyleString(B,FCKConfig.EditorAreaStyles);B.body.className+=' ForceBaseFont';FCKConfig.ApplyBodyAttributes(B.body);var C=this.GetStyles();for (var D in C){var E=C[D];var F=E.GetType()==2?D:FCKToolbarStyleCombo_BuildPreview(E,E.Label||D);var G=A.AddItem(D,F);G.Style=E;};A.OnBeforeClick=this.StyleCombo_OnBeforeClick;};FCKToolbarStyleCombo.prototype.RefreshActiveItems=function(A){var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Elements;for (var e=0;e');var E=A.Element;if (E=='bdo') E='span';D=['<',E];var F=A._StyleDesc.Attributes;if (F){for (var G in F){D.push(' ',G,'="',A.GetFinalAttributeValue(G),'"');}};if (A._GetStyleText().length>0) D.push(' style="',A.GetFinalStyleValue(),'"');D.push('>',B,'');if (C==0) D.push('');return D.join('');}; +var FCKToolbarFontFormatCombo=function(A,B){if (A===false) return;this.CommandName='FontFormat';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.NormalLabel='Normal';this.PanelWidth=190;this.DefaultLabel=FCKConfig.DefaultFontFormatLabel||'';};FCKToolbarFontFormatCombo.prototype=new FCKToolbarStyleCombo(false);FCKToolbarFontFormatCombo.prototype.GetLabel=function(){return FCKLang.FontFormat;};FCKToolbarFontFormatCombo.prototype.GetStyles=function(){var A={};var B=FCKLang['FontFormats'].split(';');var C={p:B[0],pre:B[1],address:B[2],h1:B[3],h2:B[4],h3:B[5],h4:B[6],h5:B[7],h6:B[8],div:B[9]||(B[0]+' (DIV)')};var D=FCKConfig.FontFormats.split(';');for (var i=0;i';G.open();G.write(''+H+''+document.getElementById('xToolbarSpace').innerHTML+'');G.close();if(FCKBrowserInfo.IsAIR) FCKAdobeAIR.ToolbarSet_InitOutFrame(G);FCKTools.AddEventListener(G,'contextmenu',FCKTools.CancelEvent);FCKTools.AppendStyleSheet(G,FCKConfig.SkinEditorCSS);B=D.__FCKToolbarSet=new FCKToolbarSet(G);B._IFrame=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(D,FCKToolbarSet_Target_Cleanup);};B.CurrentInstance=FCK;if (!B.ToolbarItems) B.ToolbarItems=FCKToolbarItems;FCK.AttachToOnSelectionChange(B.RefreshItemsState);return B;};function FCK_OnBlur(A){var B=A.ToolbarSet;if (B.CurrentInstance==A) B.Disable();};function FCK_OnFocus(A){var B=A.ToolbarSet;var C=A||FCK;B.CurrentInstance.FocusManager.RemoveWindow(B._IFrame.contentWindow);B.CurrentInstance=C;C.FocusManager.AddWindow(B._IFrame.contentWindow,true);B.Enable();};function FCKToolbarSet_Cleanup(){this._TargetElement=null;this._IFrame=null;};function FCKToolbarSet_Target_Cleanup(){this.__FCKToolbarSet=null;};var FCKToolbarSet=function(A){this._Document=A;this._TargetElement=A.getElementById('xToolbar');var B=A.getElementById('xExpandHandle');var C=A.getElementById('xCollapseHandle');B.title=FCKLang.ToolbarExpand;FCKTools.AddEventListener(B,'click',FCKToolbarSet_Expand_OnClick);C.title=FCKLang.ToolbarCollapse;FCKTools.AddEventListener(C,'click',FCKToolbarSet_Collapse_OnClick);if (!FCKConfig.ToolbarCanCollapse||FCKConfig.ToolbarStartExpanded) this.Expand();else this.Collapse();C.style.display=FCKConfig.ToolbarCanCollapse?'':'none';if (FCKConfig.ToolbarCanCollapse) C.style.display='';else A.getElementById('xTBLeftBorder').style.display='';this.Toolbars=[];this.IsLoaded=false;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarSet_Cleanup);};function FCKToolbarSet_Expand_OnClick(){FCK.ToolbarSet.Expand();};function FCKToolbarSet_Collapse_OnClick(){FCK.ToolbarSet.Collapse();};FCKToolbarSet.prototype.Expand=function(){this._ChangeVisibility(false);};FCKToolbarSet.prototype.Collapse=function(){this._ChangeVisibility(true);};FCKToolbarSet.prototype._ChangeVisibility=function(A){this._Document.getElementById('xCollapsed').style.display=A?'':'none';this._Document.getElementById('xExpanded').style.display=A?'none':'';if (FCKBrowserInfo.IsGecko){FCKTools.RunFunction(window.onresize);}};FCKToolbarSet.prototype.Load=function(A){this.Name=A;this.Items=[];this.ItemsWysiwygOnly=[];this.ItemsContextSensitive=[];this._TargetElement.innerHTML='';var B=FCKConfig.ToolbarSets[A];if (!B){alert(FCKLang.UnknownToolbarSet.replace(/%1/g,A));return;};this.Toolbars=[];for (var x=0;x0) break;}catch (e){break;};D=D.parent;};var E=D.document;var F=function(){if (!B) B=FCKConfig.FloatingPanelsZIndex+999;return++B;};var G=function(){if (!C) return;var H=FCKTools.IsStrictMode(E)?E.documentElement:E.body;FCKDomTools.SetElementStyles(C,{'width':Math.max(H.scrollWidth,H.clientWidth,E.scrollWidth||0)-1+'px','height':Math.max(H.scrollHeight,H.clientHeight,E.scrollHeight||0)-1+'px'});};var I=function(element){element.style.cssText='margin:0;padding:0;border:0;background-color:transparent;background-image:none;';};return {OpenDialog:function(dialogName,dialogTitle,dialogPage,width,height,customValue,parentWindow,resizable){if (!A) this.DisplayMainCover();var J={Title:dialogTitle,Page:dialogPage,Editor:window,CustomValue:customValue,TopWindow:D};FCK.ToolbarSet.CurrentInstance.Selection.Save();var K=FCKTools.GetViewPaneSize(D);var L=FCKTools.GetScrollPosition(D);var M=Math.max(L.Y+(K.Height-height-20)/2,0);var N=Math.max(L.X+(K.Width-width-20)/2,0);var O=E.createElement('iframe');I(O);O.src=FCKConfig.BasePath+'fckdialog.html';O.frameBorder=0;O.allowTransparency=true;FCKDomTools.SetElementStyles(O,{'position':'absolute','top':M+'px','left':N+'px','width':width+'px','height':height+'px','zIndex':F()});O._DialogArguments=J;E.body.appendChild(O);O._ParentDialog=A;A=O;},OnDialogClose:function(dialogWindow){var O=dialogWindow.frameElement;FCKDomTools.RemoveNode(O);if (O._ParentDialog){A=O._ParentDialog;O._ParentDialog.contentWindow.SetEnabled(true);}else{if (!FCKBrowserInfo.IsIE) FCK.Focus();this.HideMainCover();setTimeout(function(){ A=null;},0);FCK.ToolbarSet.CurrentInstance.Selection.Release();}},DisplayMainCover:function(){C=E.createElement('div');I(C);FCKDomTools.SetElementStyles(C,{'position':'absolute','zIndex':F(),'top':'0px','left':'0px','backgroundColor':FCKConfig.BackgroundBlockerColor});FCKDomTools.SetOpacity(C,FCKConfig.BackgroundBlockerOpacity);if (FCKBrowserInfo.IsIE&&!FCKBrowserInfo.IsIE7){var Q=E.createElement('iframe');I(Q);Q.hideFocus=true;Q.frameBorder=0;Q.src=FCKTools.GetVoidUrl();FCKDomTools.SetElementStyles(Q,{'width':'100%','height':'100%','position':'absolute','left':'0px','top':'0px','filter':'progid:DXImageTransform.Microsoft.Alpha(opacity=0)'});C.appendChild(Q);};FCKTools.AddEventListener(D,'resize',G);G();E.body.appendChild(C);FCKFocusManager.Lock();},HideMainCover:function(){FCKDomTools.RemoveNode(C);FCKFocusManager.Unlock();},GetCover:function(){return C;}};})(); +var FCKMenuItem=function(A,B,C,D,E,F){this.Name=B;this.Label=C||B;this.IsDisabled=E;this.Icon=new FCKIcon(D);this.SubMenu=new FCKMenuBlockPanel();this.SubMenu.Parent=A;this.SubMenu.OnClick=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnClick,this);this.CustomData=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuItem_Cleanup);};FCKMenuItem.prototype.AddItem=function(A,B,C,D,E){this.HasSubMenu=true;return this.SubMenu.AddItem(A,B,C,D,E);};FCKMenuItem.prototype.AddSeparator=function(){this.SubMenu.AddSeparator();};FCKMenuItem.prototype.Create=function(A){var B=this.HasSubMenu;var C=FCKTools.GetElementDocument(A);var r=this.MainElement=A.insertRow(-1);r.className=this.IsDisabled?'MN_Item_Disabled':'MN_Item';if (!this.IsDisabled){FCKTools.AddEventListenerEx(r,'mouseover',FCKMenuItem_OnMouseOver,[this]);FCKTools.AddEventListenerEx(r,'click',FCKMenuItem_OnClick,[this]);if (!B) FCKTools.AddEventListenerEx(r,'mouseout',FCKMenuItem_OnMouseOut,[this]);};var D=r.insertCell(-1);D.className='MN_Icon';D.appendChild(this.Icon.CreateIconElement(C));D=r.insertCell(-1);D.className='MN_Label';D.noWrap=true;D.appendChild(C.createTextNode(this.Label));D=r.insertCell(-1);if (B){D.className='MN_Arrow';var E=D.appendChild(C.createElement('IMG'));E.src=FCK_IMAGES_PATH+'arrow_'+FCKLang.Dir+'.gif';E.width=4;E.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){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();};function FCKMenuItem_SubMenu_OnClick(A,B){FCKTools.RunFunction(B.OnClick,B,[A]);};function FCKMenuItem_SubMenu_OnHide(A){A.Deactivate();};function FCKMenuItem_OnClick(A,B){if (B.HasSubMenu) B.Activate();else{B.Deactivate();FCKTools.RunFunction(B.OnClick,B,[B]);}};function FCKMenuItem_OnMouseOver(A,B){B.Activate();};function FCKMenuItem_OnMouseOut(A,B){B.Deactivate();};function FCKMenuItem_Cleanup(){this.MainElement=null;}; +var FCKMenuBlock=function(){this._Items=[];};FCKMenuBlock.prototype.Count=function(){return this._Items.length;};FCKMenuBlock.prototype.AddItem=function(A,B,C,D,E){var F=new FCKMenuItem(this,A,B,C,D,E);F.OnClick=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnClick,this);F.OnActivate=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnActivate,this);this._Items.push(F);return F;};FCKMenuBlock.prototype.AddSeparator=function(){this._Items.push(new FCKMenuSeparator());};FCKMenuBlock.prototype.RemoveAllItems=function(){this._Items=[];var A=this._ItemsTable;if (A){while (A.rows.length>0) A.deleteRow(0);}};FCKMenuBlock.prototype.Create=function(A){if (!this._ItemsTable){if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuBlock_Cleanup);this._Window=FCKTools.GetElementWindow(A);var B=FCKTools.GetElementDocument(A);var C=A.appendChild(B.createElement('table'));C.cellPadding=0;C.cellSpacing=0;FCKTools.DisableSelection(C);var D=C.insertRow(-1).insertCell(-1);D.className='MN_Menu';var E=this._ItemsTable=D.appendChild(B.createElement('table'));E.cellPadding=0;E.cellSpacing=0;};for (var i=0;i0&&F.href.length==0);if (G) return;menu.AddSeparator();if (E) 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){var F=FCKSelection.MoveToAncestorNode('A');var G=(F&&F.name.length>0);if (G||(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(){FCK.Events.FireEvent('OnSelectionChange');var A,sTagName;if ((A=FCKSelection.GetSelectedElement())) sTagName=A.tagName;var B=FCK.ContextMenu._InnerContextMenu;B.RemoveAllItems();var C=FCK.ContextMenu.Listeners;for (var i=0;i0){D=A.substr(0,B.index);this._sourceHtml=A.substr(B.index);}else{C=true;D=B[0];this._sourceHtml=A.substr(B[0].length);}}else{D=A;this._sourceHtml=null;};return { 'isTag':C,'value':D };},Each:function(A){var B;while ((B=this.Next())) A(B.isTag,B.value);}};var FCKHtmlIterator=function(A){this._sourceHtml=A;};FCKHtmlIterator.prototype={Next:function(){var A=this._sourceHtml;if (A==null) return null;var B=FCKRegexLib.HtmlTag.exec(A);var C=false;var D="";if (B){if (B.index>0){D=A.substr(0,B.index);this._sourceHtml=A.substr(B.index);}else{C=true;D=B[0];this._sourceHtml=A.substr(B[0].length);}}else{D=A;this._sourceHtml=null;};return { 'isTag':C,'value':D };},Each:function(A){var B;while ((B=this.Next())) A(B.isTag,B.value);}}; +var FCKPlugin=function(A,B,C){this.Name=A;this.BasePath=C?C:FCKConfig.PluginsPath;this.Path=this.BasePath+A+'/';if (!B||B.length==0) this.AvailableLangs=[];else this.AvailableLangs=B.split(',');};FCKPlugin.prototype.Load=function(){if (this.AvailableLangs.length>0){var A;if (this.AvailableLangs.IndexOf(FCKLanguageManager.ActiveLanguage.Code)>=0) A=FCKLanguageManager.ActiveLanguage.Code;else A=this.AvailableLangs[0];LoadScript(this.Path+'lang/'+A+'.js');};LoadScript(this.Path+'fckplugin.js');}; +var FCKPlugins=FCK.Plugins={};FCKPlugins.ItemsCount=0;FCKPlugins.Items={};FCKPlugins.Load=function(){var A=FCKPlugins.Items;for (var i=0;i-1);};String.prototype.Equals=function(){var A=arguments;if (A.length==1&&A[0].pop) A=A[0];for (var i=0;iC) return false;if (B){var E=new RegExp(A+'$','i');return E.test(this);}else return (D==0||this.substr(C-D,D)==A);};String.prototype.Remove=function(A,B){var s='';if (A>0) s=this.substring(0,A);if (A+B0){var B=A.pop();if (B) B[1].call(B[0]);};this._FCKCleanupObj=null;if (CollectGarbage) CollectGarbage();} -var s=navigator.userAgent.toLowerCase();var FCKBrowserInfo={IsIE:s.Contains('msie'),IsIE7:s.Contains('msie 7'),IsGecko:s.Contains('gecko/'),IsSafari:s.Contains('safari'),IsOpera:s.Contains('opera'),IsMac:s.Contains('macintosh')};(function(A){A.IsGeckoLike=(A.IsGecko||A.IsSafari||A.IsOpera);if (A.IsGecko){var B=s.match(/gecko\/(\d+)/)[1];A.IsGecko10=B<20051111;}else A.IsGecko10=false;})(FCKBrowserInfo); -var FCKURLParams={};(function(){var A=document.location.search.substr(1).split('&');for (var i=0;i0?'':'';var A=FCK.KeystrokeHandler=new FCKKeystrokeHandler();A.OnKeystroke=_FCK_KeystrokeHandler_OnKeystroke;A.SetKeystrokes(FCKConfig.Keystrokes);if (FCKBrowserInfo.IsIE7){if ((CTRL+86/*V*/) in A.Keystrokes) A.SetKeystrokes([CTRL+86,true]);if ((SHIFT+45/*INS*/) in A.Keystrokes) A.SetKeystrokes([SHIFT+45,true]);};this.EditingArea=new FCKEditingArea(document.getElementById('xEditingArea'));this.EditingArea.FFSpellChecker=false;FCKListsLib.Setup();this.SetHTML(this.GetLinkedFieldValue(),true);},Focus:function(){FCK.EditingArea.Focus();},SetStatus:function(A){this.Status=A;if (A==1){FCKFocusManager.AddWindow(window,true);if (FCKBrowserInfo.IsIE) FCKFocusManager.AddWindow(window.frameElement,true);if (FCKConfig.StartupFocus) FCK.Focus();};this.Events.FireEvent('OnStatusChange',A);},FixBody:function(){var A=FCKConfig.EnterMode;if (A!='p'&&A!='div') return;var B=this.EditorDocument;if (!B) return;var C=B.body;if (!C) return;FCKDomTools.TrimNode(C);var D=C.firstChild;var E;while (D){var F=false;switch (D.nodeType){case 1:if (!FCKListsLib.BlockElements[D.nodeName.toLowerCase()]) F=true;break;case 3:if (E||D.nodeValue.Trim().length>0) F=true;};if (F){var G=D.parentNode;if (!E) E=G.insertBefore(B.createElement(A),D);E.appendChild(G.removeChild(D));D=E.nextSibling;}else{if (E){FCKDomTools.TrimNode(E);E=null;};D=D.nextSibling;}};if (E) FCKDomTools.TrimNode(E);},GetXHTML:function(A){if (FCK.EditMode==1) return FCK.EditingArea.Textarea.value;this.FixBody();var B;var C=FCK.EditorDocument;if (!C) return null;if (FCKConfig.FullPage){B=FCKXHtml.GetXHTML(C.getElementsByTagName('html')[0],true,A);if (FCK.DocTypeDeclaration&&FCK.DocTypeDeclaration.length>0) B=FCK.DocTypeDeclaration+'\n'+B;if (FCK.XmlDeclaration&&FCK.XmlDeclaration.length>0) B=FCK.XmlDeclaration+'\n'+B;}else{B=FCKXHtml.GetXHTML(C.body,false,A);if (FCKConfig.IgnoreEmptyParagraphValue&&FCKRegexLib.EmptyOutParagraph.test(B)) B='';};B=FCK.ProtectEventsRestore(B);if (FCKBrowserInfo.IsIE) B=B.replace(FCKRegexLib.ToReplace,'$1');return FCKConfig.ProtectedSource.Revert(B);},UpdateLinkedField:function(){FCK.LinkedField.value=FCK.GetXHTML(FCKConfig.FormatOutput);FCK.Events.FireEvent('OnAfterLinkedFieldUpdate');},RegisteredDoubleClickHandlers:{},OnDoubleClick:function(A){var B=FCK.RegisteredDoubleClickHandlers[A.tagName];if (B) B(A);},RegisterDoubleClickHandler:function(A,B){FCK.RegisteredDoubleClickHandlers[B.toUpperCase()]=A;},OnAfterSetHTML:function(){FCKDocumentProcessor.Process(FCK.EditorDocument);FCKUndo.SaveUndoStep();FCK.Events.FireEvent('OnSelectionChange');FCK.Events.FireEvent('OnAfterSetHTML');},ProtectUrls:function(A){A=A.replace(FCKRegexLib.ProtectUrlsA,'$& _fcksavedurl=$1');A=A.replace(FCKRegexLib.ProtectUrlsImg,'$& _fcksavedurl=$1');return A;},ProtectEvents:function(A){return A.replace(FCKRegexLib.TagsWithEvent,_FCK_ProtectEvents_ReplaceTags);},ProtectEventsRestore:function(A){return A.replace(FCKRegexLib.ProtectedEvents,_FCK_ProtectEvents_RestoreEvents);},ProtectTags:function(A){var B=FCKConfig.ProtectedTags;if (FCKBrowserInfo.IsIE) B+=B.length>0?'|ABBR':'ABBR';var C;if (B.length>0){C=new RegExp('<('+B+')(?!\w|:)','gi');A=A.replace(C,'','gi');A=A.replace(C,'<\/FCK:$1>');};B='META';if (FCKBrowserInfo.IsIE) B+='|HR';C=new RegExp('<(('+B+')(?=\s|>)[\s\S]*?)/?>','gi');A=A.replace(C,'');return A;},SetHTML:function(A,B){this.EditingArea.Mode=FCK.EditMode;if (FCK.EditMode==0){A=FCKConfig.ProtectedSource.Protect(A);A=A.replace(FCKRegexLib.InvalidSelfCloseTags,'$1>');A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);if (FCKBrowserInfo.IsGecko){A=A.replace(FCKRegexLib.StrongOpener,'');A=A.replace(FCKRegexLib.EmOpener,'');};this._ForceResetIsDirty=(B===true);var C='';if (FCKConfig.FullPage){if (!FCKRegexLib.HeadOpener.test(A)){if (!FCKRegexLib.HtmlOpener.test(A)) A=''+A+'';A=A.replace(FCKRegexLib.HtmlOpener,'$&');};FCK.DocTypeDeclaration=A.match(FCKRegexLib.DocTypeTag);if (FCKBrowserInfo.IsIE) C=FCK._GetBehaviorsStyle();else if (FCKConfig.ShowBorders) C='';C+='';C=A.replace(FCKRegexLib.HeadCloser,C+'$&');if (FCK.TempBaseTag.length>0&&!FCKRegexLib.HasBaseTag.test(A)) C=C.replace(FCKRegexLib.HeadOpener,'$&'+FCK.TempBaseTag);}else{C=FCKConfig.DocType+'';if (FCKBrowserInfo.IsIE) C+=FCK._GetBehaviorsStyle();else if (FCKConfig.ShowBorders) C+='';C+=FCK.TempBaseTag;var D='0) D+=' id="'+FCKConfig.BodyId+'"';if (FCKConfig.BodyClass&&FCKConfig.BodyClass.length>0) D+=' class="'+FCKConfig.BodyClass+'"';C+=''+D+'>';if (FCKBrowserInfo.IsGecko&&(A.length==0||FCKRegexLib.EmptyParagraph.test(A))) C+=GECKO_BOGUS;else C+=A;C+='';};this.EditingArea.OnLoad=_FCK_EditingArea_OnLoad;this.EditingArea.Start(C);}else{FCK.EditorWindow=null;FCK.EditorDocument=null;this.EditingArea.OnLoad=null;this.EditingArea.Start(A);this.EditingArea.Textarea._FCKShowContextMenu=true;FCK.EnterKeyHandler=null;if (B) this.ResetIsDirty();FCK.KeystrokeHandler.AttachToElement(this.EditingArea.Textarea);this.EditingArea.Textarea.focus();FCK.Events.FireEvent('OnAfterSetHTML');};if (FCKBrowserInfo.IsGecko) window.onresize();},HasFocus:false,RedirectNamedCommands:{},ExecuteNamedCommand:function(A,B,C){FCKUndo.SaveUndoStep();if (!C&&FCK.RedirectNamedCommands[A]!=null) FCK.ExecuteRedirectedNamedCommand(A,B);else{FCK.Focus();FCK.EditorDocument.execCommand(A,false,B);FCK.Events.FireEvent('OnSelectionChange');};FCKUndo.SaveUndoStep();},GetNamedCommandState:function(A){try{if (!FCK.EditorDocument.queryCommandEnabled(A)) return -1;else return FCK.EditorDocument.queryCommandState(A)?1:0;}catch (e){return 0;}},GetNamedCommandValue:function(A){var B='';var C=FCK.GetNamedCommandState(A);if (C==-1) return null;try{B=this.EditorDocument.queryCommandValue(A);}catch(e) {};return B?B:'';},PasteFromWord:function(){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteFromWord,'dialog/fck_paste.html',400,330,'Word');},Preview:function(){var A=FCKConfig.ScreenWidth*0.8;var B=FCKConfig.ScreenHeight*0.7;var C=(FCKConfig.ScreenWidth-A)/2;var D=window.open('',null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+A+',height='+B+',left='+C);var E;if (FCKConfig.FullPage){if (FCK.TempBaseTag.length>0) E=FCK.TempBaseTag+FCK.GetXHTML();else E=FCK.GetXHTML();}else{E=FCKConfig.DocType+''+FCK.TempBaseTag+''+FCKLang.Preview+''+_FCK_GetEditorAreaStyleTags()+''+FCK.GetXHTML()+'';};D.document.write(E);D.document.close();},SwitchEditMode:function(A){var B=(FCK.EditMode==0);var C=FCK.IsDirty();var D;if (B){if (!A&&FCKBrowserInfo.IsIE) FCKUndo.SaveUndoStep();D=FCK.GetXHTML(FCKConfig.FormatSource);if (D==null) return false;}else D=this.EditingArea.Textarea.value;FCK.EditMode=B?1:0;FCK.SetHTML(D,!C);FCK.Focus();FCKTools.RunFunction(FCK.ToolbarSet.RefreshModeState,FCK.ToolbarSet);return true;},CreateElement:function(A){var e=FCK.EditorDocument.createElement(A);return FCK.InsertElementAndGetIt(e);},InsertElementAndGetIt:function(e){e.setAttribute('FCKTempLabel','true');this.InsertElement(e);var A=FCK.EditorDocument.getElementsByTagName(e.tagName);for (var i=0;i/g,/\r/g,/\n/g],[''',''','"','=','<','>',' ',' '])+'"';};function _FCK_ProtectEvents_RestoreEvents(A,B){return B.ReplaceAll([/'/g,/"/g,/=/g,/</g,/>/g,/ /g,/ /g,/'/g],["'",'"','=','<','>','\r','\n','&']);};function _FCK_EditingArea_OnLoad(){FCK.EditorWindow=FCK.EditingArea.Window;FCK.EditorDocument=FCK.EditingArea.Document;FCK.InitializeBehaviors();if (!FCKConfig.DisableEnterKeyHandler) FCK.EnterKeyHandler=new FCKEnterKey(FCK.EditorWindow,FCKConfig.EnterMode,FCKConfig.ShiftEnterMode);FCK.KeystrokeHandler.AttachToElement(FCK.EditorDocument);if (FCK._ForceResetIsDirty) FCK.ResetIsDirty();if (FCKBrowserInfo.IsIE&&FCK.HasFocus) FCK.EditorDocument.body.setActive();FCK.OnAfterSetHTML();if (FCK.Status!=0) return;FCK.SetStatus(1);};function _FCK_GetEditorAreaStyleTags(){var A='';var B=FCKConfig.EditorAreaCSS;for (var i=0;i';return A;};function _FCK_KeystrokeHandler_OnKeystroke(A,B){if (FCK.Status!=2) return false;if (FCK.EditMode==0){if (B=='Paste') return!FCK.Events.FireEvent('OnPaste');}else{if (B.Equals('Paste','Undo','Redo','SelectAll')) return false;};var C=FCK.Commands.GetCommand(B);return (C.Execute.apply(C,FCKTools.ArgumentsToArray(arguments,2))!==false);};(function(){var A=window.parent.document;var B=A.getElementById(FCK.Name);var i=0;while (B||i==0){if (B&&B.tagName.toLowerCase().Equals('input','textarea')){FCK.LinkedField=B;break;};B=A.getElementsByName(FCK.Name)[i++];}})();var FCKTempBin={Elements:[],AddElement:function(A){var B=this.Elements.length;this.Elements[B]=A;return B;},RemoveElement:function(A){var e=this.Elements[A];this.Elements[A]=null;return e;},Reset:function(){var i=0;while (i0) C+='TABLE { behavior: '+B+' ; }';C+='';FCK._BehaviorsStyle=C;};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(){return (FCK.Status==2&&FCK.Events.FireEvent("OnPaste"));};function Doc_OnKeyDown(){if (FCK.EditorWindow){var e=FCK.EditorWindow.event;if (!(e.keyCode>=16&&e.keyCode<=18)) Doc_OnKeyDownUndo();};return true;};function Doc_OnKeyDownUndo(){if (!FCKUndo.Typing){FCKUndo.SaveUndoStep();FCKUndo.Typing=true;FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.TypesCount++;if (FCKUndo.TypesCount>FCKUndo.MaxTypes){FCKUndo.TypesCount=0;FCKUndo.SaveUndoStep();}};function Doc_OnDblClick(){FCK.OnDoubleClick(FCK.EditorWindow.event.srcElement);FCK.EditorWindow.event.cancelBubble=true;};function Doc_OnSelectionChange(){FCK.Events.FireEvent("OnSelectionChange");};FCK.InitializeBehaviors=function(A){this.EditorDocument.attachEvent('onmouseup',Doc_OnMouseUp);this.EditorDocument.body.attachEvent('onpaste',Doc_OnPaste);if (FCKConfig.ContextMenu!=null)FCK.ContextMenu._InnerContextMenu.AttachToElement(FCK.EditorDocument.body);if (FCKConfig.TabSpaces>0){window.FCKTabHTML='';for (i=0;i '+A;B.getElementById('__fakeFCKRemove__').removeNode(true);};function FCK_PreloadImages(){var A=new FCKImagePreloader();A.AddImages(FCKConfig.PreloadImages);A.AddImages(FCKConfig.SkinPath+'fck_strip.gif');A.OnComplete=LoadToolbarSetup;A.Start();};function Document_OnContextMenu(){return (event.srcElement._FCKShowContextMenu==true);};document.oncontextmenu=Document_OnContextMenu;function FCK_Cleanup(){this.EditorWindow=null;this.EditorDocument=null;};FCK.Paste=function(){if (FCK._PasteIsRunning) return true;if (FCKConfig.ForcePasteAsPlainText){FCK.PasteAsPlainText();return false;};var A=FCK._CheckIsPastingEnabled(true);if (A===false) FCKTools.RunFunction(FCKDialog.OpenDialog,FCKDialog,['FCKDialog_Paste',FCKLang.Paste,'dialog/fck_paste.html',400,330,'Security']);else{if (FCKConfig.AutoDetectPasteFromWord&&A.length>0){var B=/<\w[^>]*(( class="?MsoNormal"?)|(="mso-))/gi;if (B.test(A)){if (confirm(FCKLang.PasteWordConfirm)){FCK.PasteFromWord();return false;}}};FCK._PasteIsRunning=true;FCK.ExecuteNamedCommand('Paste');delete FCK._PasteIsRunning;};return false;};FCK.PasteAsPlainText=function(){if (!FCK._CheckIsPastingEnabled()){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteAsText,'dialog/fck_paste.html',400,330,'PlainText');return;};var A=clipboardData.getData("Text");if (A&&A.length>0){A=FCKTools.HTMLEncode(A).replace(/\n/g,'
    ');this.InsertHtml(A);}};FCK._CheckIsPastingEnabled=function(A){FCK._PasteIsEnabled=false;document.body.attachEvent('onpaste',FCK_CheckPasting_Listener);var B=FCK.GetClipboardHTML();document.body.detachEvent('onpaste',FCK_CheckPasting_Listener);if (FCK._PasteIsEnabled){if (!A) B=true;}else B=false;delete FCK._PasteIsEnabled;return B;};function FCK_CheckPasting_Listener(){FCK._PasteIsEnabled=true;};FCK.InsertElement=function(A){FCK.InsertHtml(A.outerHTML);};FCK.GetClipboardHTML=function(){var A=document.getElementById('___FCKHiddenDiv');if (!A){A=document.createElement('DIV');A.id='___FCKHiddenDiv';var B=A.style;B.position='absolute';B.visibility=B.overflow='hidden';B.width=B.height=1;document.body.appendChild(A);};A.innerHTML='';var C=document.body.createTextRange();C.moveToElementText(A);C.execCommand('Paste');var D=A.innerHTML;A.innerHTML='';return D;};FCK.AttachToOnSelectionChange=function(A){this.Events.AttachEvent('OnSelectionChange',A);};FCK.CreateLink=function(A){FCK.ExecuteNamedCommand('Unlink');if (A.length>0){var B='javascript:void(0);/*'+(new Date().getTime())+'*/';FCK.ExecuteNamedCommand('CreateLink',B);var C=this.EditorDocument.links;for (i=0;i0&&!isNaN(E)) this.PageConfig[D]=parseInt(E,10);else this.PageConfig[D]=E;}};function FCKConfig_LoadPageConfig(){var A=FCKConfig.PageConfig;for (var B in A) FCKConfig[B]=A[B];};function FCKConfig_PreProcess(){var A=FCKConfig;if (A.AllowQueryStringDebug){try{if ((/fckdebug=true/i).test(window.top.location.search)) A.Debug=true;}catch (e) {/*Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error).*/}};if (!A.PluginsPath.EndsWith('/')) A.PluginsPath+='/';if (typeof(A.EditorAreaCSS)=='string') A.EditorAreaCSS=[A.EditorAreaCSS];var B=A.ToolbarComboPreviewCSS;if (!B||B.length==0) A.ToolbarComboPreviewCSS=A.EditorAreaCSS;else if (typeof(B)=='string') A.ToolbarComboPreviewCSS=[B];};FCKConfig.ToolbarSets={};FCKConfig.Plugins={};FCKConfig.Plugins.Items=[];FCKConfig.Plugins.Add=function(A,B,C){FCKConfig.Plugins.Items.AddItem([A,B,C]);};FCKConfig.ProtectedSource={};FCKConfig.ProtectedSource.RegexEntries=[//g,//gi,//gi];FCKConfig.ProtectedSource.Add=function(A){this.RegexEntries.AddItem(A);};FCKConfig.ProtectedSource.Protect=function(A){function _Replace(protectedSource){var B=FCKTempBin.AddElement(protectedSource);return '';};for (var i=0;i|>)/g,_Replace);} -var FCKDebug={};FCKDebug._GetWindow=function(){if (!this.DebugWindow||this.DebugWindow.closed) this.DebugWindow=window.open(FCKConfig.BasePath+'fckdebug.html','FCKeditorDebug','menubar=no,scrollbars=yes,resizable=yes,location=no,toolbar=no,width=600,height=500',true);return this.DebugWindow;};FCKDebug.Output=function(A,B,C){if (!FCKConfig.Debug) return;try{this._GetWindow().Output(A,B);}catch (e) {}};FCKDebug.OutputObject=function(A,B){if (!FCKConfig.Debug) return;try{this._GetWindow().OutputObject(A,B);}catch (e) {}} -var FCKDomTools={MoveChildren:function(A,B){if (A==B) return;var C;while ((C=A.firstChild)) B.appendChild(A.removeChild(C));},TrimNode:function(A,B){this.LTrimNode(A);this.RTrimNode(A,B);},LTrimNode:function(A){var B;while ((B=A.firstChild)){if (B.nodeType==3){var C=B.nodeValue.LTrim();var D=B.nodeValue.length;if (C.length==0){A.removeChild(B);continue;}else if (C.length0) break;if (A.lastChild) A=A.lastChild;else return this.GetPreviousSourceElement(A,B,C,D);};return null;},GetNextSourceElement:function(A,B,C,D){if (!A) return null;if (A.nextSibling) A=A.nextSibling;else return this.GetNextSourceElement(A.parentNode,B,C,D);while (A){if (A.nodeType==1){if (C&&A.nodeName.IEquals(C)) break;if (!D||!A.nodeName.IEquals(D)) return A;}else if (B&&A.nodeType==3&&A.nodeValue.RTrim().length>0) break;if (A.firstChild) A=A.firstChild;else return this.GetNextSourceElement(A,B,C,D);};return null;},InsertAfterNode:function(A,B){return A.parentNode.insertBefore(B,A.nextSibling);},GetParents:function(A){var B=[];while (A){B.splice(0,0,A);A=A.parentNode;};return B;},GetIndexOf:function(A){var B=A.parentNode?A.parentNode.firstChild:null;var C=-1;while (B){C++;if (B==A) return C;B=B.nextSibling;};return-1;}}; -var GECKO_BOGUS='
    ';var FCKTools={};FCKTools.CreateBogusBR=function(A){var B=A.createElement('br');B.setAttribute('type','_moz');return B;};FCKTools.AppendStyleSheet=function(A,B){if (typeof(B)=='string') return this._AppendStyleSheet(A,B);else{var C=[];for (var i=0;i/g,'>');return A;};FCKTools.HTMLDecode=function(A){if (!A) return '';A=A.replace(/>/g,'>');A=A.replace(/</g,'<');A=A.replace(/&/g,'&');return A;};FCKTools.AddSelectOption=function(A,B,C){var D=FCKTools.GetElementDocument(A).createElement("OPTION");D.text=B;D.value=C;A.options.add(D);return D;};FCKTools.RunFunction=function(A,B,C,D){if (A) this.SetTimeout(A,0,B,C,D);};FCKTools.SetTimeout=function(A,B,C,D,E){return (E||window).setTimeout(function(){if (D) A.apply(C,[].concat(D));else A.apply(C);},B);};FCKTools.SetInterval=function(A,B,C,D,E){return (E||window).setInterval(function(){A.apply(C,D||[]);},B);};FCKTools.ConvertStyleSizeToHtml=function(A){return A.EndsWith('%')?A:parseInt(A,10);};FCKTools.ConvertHtmlSizeToStyle=function(A){return A.EndsWith('%')?A:(A+'px');};FCKTools.GetElementAscensor=function(A,B){var e=A;var C=","+B.toUpperCase()+",";while (e){if (C.indexOf(","+e.nodeName.toUpperCase()+",")!=-1) return e;e=e.parentNode;};return null;};FCKTools.CreateEventListener=function(A,B){var f=function(){var C=[];for (var i=0;i0) B[B.length]=C;};return B;};FCKTools.RemoveOuterTags=function(e){e.insertAdjacentHTML('beforeBegin',e.innerHTML);e.parentNode.removeChild(e);};FCKTools.CreateXmlObject=function(A){var B;switch (A){case 'XmlHttp':B=['MSXML2.XmlHttp','Microsoft.XmlHttp'];break;case 'DOMDocument':B=['MSXML2.DOMDocument','Microsoft.XmlDom'];break;};for (var i=0;i<2;i++){try { return new ActiveXObject(B[i]);}catch (e){}};if (FCKLang.NoActiveX){alert(FCKLang.NoActiveX);FCKLang.NoActiveX=null;};return null;};FCKTools.DisableSelection=function(A){A.unselectable='on';var e,i=0;while ((e=A.all[i++])){switch (e.tagName){case 'IFRAME':case 'TEXTAREA':case 'INPUT':case 'SELECT':break;default:e.unselectable='on';}}};FCKTools.GetScrollPosition=function(A){var B=A.document;var C={ X:B.documentElement.scrollLeft,Y:B.documentElement.scrollTop };if (C.X>0||C.Y>0) return C;return { X:B.body.scrollLeft,Y:B.body.scrollTop };};FCKTools.AddEventListener=function(A,B,C){A.attachEvent('on'+B,C);};FCKTools.RemoveEventListener=function(A,B,C){A.detachEvent('on'+B,C);};FCKTools.AddEventListenerEx=function(A,B,C,D){var o={};o.Source=A;o.Params=D||[];o.Listener=function(ev){return C.apply(o.Source,[ev].concat(o.Params));};if (FCK.IECleanup) FCK.IECleanup.AddItem(null,function() { o.Source=null;o.Params=null;});A.attachEvent('on'+B,o.Listener);A=null;D=null;};FCKTools.GetViewPaneSize=function(A){var B;var C=A.document.documentElement;if (C&&C.clientWidth) B=C;else B=top.document.body;if (B) return { Width:B.clientWidth,Height:B.clientHeight };else return { Width:0,Height:0 };};FCKTools.SaveStyles=function(A){var B={};if (A.className.length>0){B.Class=A.className;A.className='';};var C=A.style.cssText;if (C.length>0){B.Inline=C;A.style.cssText='';};return B;};FCKTools.RestoreStyles=function(A,B){A.className=B.Class||'';A.style.cssText=B.Inline||'';};FCKTools.RegisterDollarFunction=function(A){A.$=A.document.getElementById;};FCKTools.AppendElement=function(A,B){return A.appendChild(this.GetElementDocument(A).createElement(B));};FCKTools.ToLowerCase=function(A){return A.toLowerCase();} -var FCKeditorAPI;function InitializeAPI(){var A=window.parent;if (!(FCKeditorAPI=A.FCKeditorAPI)){var B='var FCKeditorAPI = {Version : "2.4.1",VersionBuild : "14797",__Instances : new Object(),GetInstance : function( name ){return this.__Instances[ name ];},_FormSubmit : function(){for ( var name in FCKeditorAPI.__Instances ){var oEditor = FCKeditorAPI.__Instances[ name ] ;if ( oEditor.GetParentForm && oEditor.GetParentForm() == this )oEditor.UpdateLinkedField() ;}this._FCKOriginalSubmit() ;},_FunctionQueue : {Functions : new Array(),IsRunning : false,Add : function( f ){this.Functions.push( f );if ( !this.IsRunning )this.StartNext();},StartNext : function(){var aQueue = this.Functions ;if ( aQueue.length > 0 ){this.IsRunning = true;aQueue[0].call();}else this.IsRunning = false;},Remove : function( f ){var aQueue = this.Functions;var i = 0, fFunc;while( (fFunc = aQueue[ i ]) ){if ( fFunc == f )aQueue.splice( i,1 );i++ ;}this.StartNext();}}}';if (A.execScript) A.execScript(B,'JavaScript');else{if (FCKBrowserInfo.IsGecko10){eval.call(A,B);}else if (FCKBrowserInfo.IsSafari){var C=A.document;var D=C.createElement('script');D.appendChild(C.createTextNode(B));C.documentElement.appendChild(D);}else A.eval(B);};FCKeditorAPI=A.FCKeditorAPI;};FCKeditorAPI.__Instances[FCK.Name]=FCK;};function _AttachFormSubmitToAPI(){var A=FCK.GetParentForm();if (A){FCKTools.AddEventListener(A,'submit',FCK.UpdateLinkedField);if (!A._FCKOriginalSubmit&&(typeof(A.submit)=='function'||(!A.submit.tagName&&!A.submit.length))){A._FCKOriginalSubmit=A.submit;A.submit=FCKeditorAPI._FormSubmit;}}};function FCKeditorAPI_Cleanup(){delete FCKeditorAPI.__Instances[FCK.Name];};FCKTools.AddEventListener(window,'unload',FCKeditorAPI_Cleanup); -var FCKImagePreloader=function(){this._Images=[];};FCKImagePreloader.prototype={AddImages:function(A){if (typeof(A)=='string') A=A.split(';');this._Images=this._Images.concat(A);},Start:function(){var A=this._Images;this._PreloadCount=A.length;for (var i=0;i]*\>)([\s\S]*)(\<\/body\>[\s\S]*)/i,ToReplace:/___fcktoreplace:([\w]+)/ig,MetaHttpEquiv:/http-equiv\s*=\s*["']?([^"' ]+)/i,HasBaseTag:/]*>/i,HeadOpener:/]*>/i,HeadCloser:/<\/head\s*>/i,FCK_Class:/(\s*FCK__[A-Za-z]*\s*)/,ElementName:/(^[a-z_:][\w.\-:]*\w$)|(^[a-z_]$)/,ForceSimpleAmpersand:/___FCKAmp___/g,SpaceNoClose:/\/>/g,EmptyParagraph:/^<([^ >]+)[^>]*>\s*(<\/\1>)?$/,EmptyOutParagraph:/^<([^ >]+)[^>]*>(?:\s*| )(<\/\1>)?$/,TagBody:/>])/gi,StrongCloser:/<\/STRONG>/gi,EmOpener:/])/gi,EmCloser:/<\/EM>/gi,GeckoEntitiesMarker:/#\?-\:/g,ProtectUrlsImg:/]+))/gi,ProtectUrlsA:/]+))/gi,Html4DocType:/HTML 4\.0 Transitional/i,DocTypeTag:/]*>/i,TagsWithEvent:/<[^\>]+ on\w+[\s\r\n]*=[\s\r\n]*?('|")[\s\S]+?\>/g,EventAttributes:/\s(on\w+)[\s\r\n]*=[\s\r\n]*?('|")([\s\S]*?)\2/g,ProtectedEvents:/\s\w+_fckprotectedatt="([^"]+)"/g,StyleProperties:/\S+\s*:/g,InvalidSelfCloseTags:/(<(?!base|meta|link|hr|br|param|img|area|input)([a-zA-Z0-9:]+)[^>]*)\/>/gi}; -var FCKListsLib={BlockElements:{ address:1,blockquote:1,center:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,noscript:1,ol:1,p:1,pre:1,script:1,table:1,ul:1 },NonEmptyBlockElements:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,address:1,pre:1,ol:1,ul:1,li:1,td:1,th:1 },InlineChildReqElements:{ abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },EmptyElements:{ base:1,meta:1,link:1,hr:1,br:1,param:1,img:1,area:1,input:1 },PathBlockElements:{ address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1 },PathBlockLimitElements:{ body:1,td:1,th:1,caption:1,form:1 },Setup:function(){if (FCKConfig.EnterMode=='div') this.PathBlockElements.div=1;else this.PathBlockLimitElements.div=1;}}; -var FCKLanguageManager=FCK.Language={AvailableLanguages:{af:'Afrikaans',ar:'Arabic',bg:'Bulgarian',bn:'Bengali/Bangla',bs:'Bosnian',ca:'Catalan',cs:'Czech',da:'Danish',de:'German',el:'Greek',en:'English','en-au':'English (Australia)','en-ca':'English (Canadian)','en-uk':'English (United Kingdom)',eo:'Esperanto',es:'Spanish',et:'Estonian',eu:'Basque',fa:'Persian',fi:'Finnish',fo:'Faroese',fr:'French',gl:'Galician',he:'Hebrew',hi:'Hindi',hr:'Croatian',hu:'Hungarian',it:'Italian',ja:'Japanese',km:'Khmer',ko:'Korean',lt:'Lithuanian',lv:'Latvian',mn:'Mongolian',ms:'Malay',nb:'Norwegian Bokmal',nl:'Dutch',no:'Norwegian',pl:'Polish',pt:'Portuguese (Portugal)','pt-br':'Portuguese (Brazil)',ro:'Romanian',ru:'Russian',sk:'Slovak',sl:'Slovenian',sr:'Serbian (Cyrillic)','sr-latn':'Serbian (Latin)',sv:'Swedish',th:'Thai',tr:'Turkish',uk:'Ukrainian',vi:'Vietnamese',zh:'Chinese Traditional','zh-cn':'Chinese Simplified'},GetActiveLanguage:function(){if (FCKConfig.AutoDetectLanguage){var A;if (navigator.userLanguage) A=navigator.userLanguage.toLowerCase();else if (navigator.language) A=navigator.language.toLowerCase();else{return FCKConfig.DefaultLanguage;};if (A.length>=5){A=A.substr(0,5);if (this.AvailableLanguages[A]) return A;};if (A.length>=2){A=A.substr(0,2);if (this.AvailableLanguages[A]) return A;}};return this.DefaultLanguage;},TranslateElements:function(A,B,C,D){var e=A.getElementsByTagName(B);var E,s;for (var i=0;i0) C+='|'+FCKConfig.AdditionalNumericEntities;FCKXHtmlEntities.EntitiesRegex=new RegExp(C,'g');} -var FCKXHtml={};FCKXHtml.CurrentJobNum=0;FCKXHtml.GetXHTML=function(A,B,C){FCKXHtmlEntities.Initialize();this._NbspEntity=(FCKConfig.ProcessHTMLEntities?'nbsp':'#160');var D=FCK.IsDirty();this._CreateNode=FCKConfig.ForceStrongEm?FCKXHtml_CreateNode_StrongEm:FCKXHtml_CreateNode_Normal;FCKXHtml.SpecialBlocks=[];this.XML=FCKTools.CreateXmlObject('DOMDocument');this.MainNode=this.XML.appendChild(this.XML.createElement('xhtml'));FCKXHtml.CurrentJobNum++;if (B) this._AppendNode(this.MainNode,A);else this._AppendChildNodes(this.MainNode,A,false);var E=this._GetMainXmlString();this.XML=null;E=E.substr(7,E.length-15).Trim();if (FCKBrowserInfo.IsGecko) E=E.replace(/$/,'');E=E.replace(FCKRegexLib.SpaceNoClose,' />');if (FCKConfig.ForceSimpleAmpersand) E=E.replace(FCKRegexLib.ForceSimpleAmpersand,'&');if (C) E=FCKCodeFormatter.Format(E);for (var i=0;i0;if (C) A.appendChild(this.XML.createTextNode(B.replace(FCKXHtmlEntities.EntitiesRegex,FCKXHtml_GetEntity)));return C;};function FCKXHtml_GetEntity(A){var B=FCKXHtmlEntities.Entities[A]||('#'+A.charCodeAt(0));return '#?-:'+B+';';};FCKXHtml._RemoveAttribute=function(A,B,C){var D=A.attributes.getNamedItem(C);if (D&&B.test(D.nodeValue)){var E=D.nodeValue.replace(B,'');if (E.length==0) A.attributes.removeNamedItem(C);else D.nodeValue=E;}};FCKXHtml.TagProcessors={img:function(A,B){if (!A.attributes.getNamedItem('alt')) FCKXHtml._AppendAttribute(A,'alt','');var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'src',C);return A;},a:function(A,B){if (B.innerHTML.Trim().length==0&&!B.name) return false;var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){FCKXHtml._RemoveAttribute(A,FCKRegexLib.FCK_Class,'class');if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);};A=FCKXHtml._AppendChildNodes(A,B,false);return A;},script:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/javascript');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.text)));return A;},style:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/css');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.innerHTML)));return A;},title:function(A,B){A.appendChild(FCKXHtml.XML.createTextNode(FCK.EditorDocument.title));return A;},table:function(A,B){if (FCKBrowserInfo.IsIE) FCKXHtml._RemoveAttribute(A,FCKRegexLib.FCK_Class,'class');A=FCKXHtml._AppendChildNodes(A,B,false);return A;},ol:function(A,B,C){if (B.innerHTML.Trim().length==0) return false;var D=C.lastChild;if (D&&D.nodeType==3) D=D.previousSibling;if (D&&D.nodeName.toUpperCase()=='LI'){B._fckxhtmljob=null;FCKXHtml._AppendNode(D,B);return false;};A=FCKXHtml._AppendChildNodes(A,B);return A;},span:function(A,B){if (B.innerHTML.length==0) return false;A=FCKXHtml._AppendChildNodes(A,B,false);return A;},iframe:function(A,B){var C=B.innerHTML;if (FCKBrowserInfo.IsGecko) C=FCKTools.HTMLDecode(C);C=C.replace(/\s_fcksavedurl="[^"]*"/g,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;}};FCKXHtml.TagProcessors.ul=FCKXHtml.TagProcessors.ol; -FCKXHtml._GetMainXmlString=function(){return this.MainNode.xml;};FCKXHtml._AppendAttributes=function(A,B,C,D){var E=B.attributes;for (var n=0;n0) FCKXHtml._AppendAttribute(A,'shape',D);};return A;};FCKXHtml.TagProcessors['label']=function(A,B){if (B.htmlFor.length>0) FCKXHtml._AppendAttribute(A,'for',B.htmlFor);A=FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['form']=function(A,B){if (B.acceptCharset&&B.acceptCharset.length>0&&B.acceptCharset!='UNKNOWN') FCKXHtml._AppendAttribute(A,'accept-charset',B.acceptCharset);if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);A=FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['textarea']=FCKXHtml.TagProcessors['select']=function(A,B){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);A=FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['div']=function(A,B){if (B.align.length>0) FCKXHtml._AppendAttribute(A,'align',B.align);A=FCKXHtml._AppendChildNodes(A,B,true);return A;} -var FCKCodeFormatter={};FCKCodeFormatter.Init=function(){var A=this.Regex={};A.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;A.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;A.NewLineTags=/\<(BR|HR)[^\>]*\>/gi;A.MainTags=/\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi;A.LineSplitter=/\s*\n+\s*/g;A.IncreaseIndent=/^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \/\>]/i;A.DecreaseIndent=/^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \>]/i;A.FormatIndentatorRemove=new RegExp('^'+FCKConfig.FormatIndentator);A.ProtectedTags=/(]*>)([\s\S]*?)(<\/PRE>)/gi;};FCKCodeFormatter._ProtectData=function(A,B,C,D){return B+'___FCKpd___'+FCKCodeFormatter.ProtectedData.AddItem(C)+D;};FCKCodeFormatter.Format=function(A){if (!this.Regex) this.Init();FCKCodeFormatter.ProtectedData=[];var B=A.replace(this.Regex.ProtectedTags,FCKCodeFormatter._ProtectData);B=B.replace(this.Regex.BlocksOpener,'\n$&');B=B.replace(this.Regex.BlocksCloser,'$&\n');B=B.replace(this.Regex.NewLineTags,'$&\n');B=B.replace(this.Regex.MainTags,'\n$&\n');var C='';var D=B.split(this.Regex.LineSplitter);B='';for (var i=0;i=0&&A==FCKUndo.SavedData[FCKUndo.CurrentIndex][0]) return;if (FCKUndo.CurrentIndex+1>=FCKConfig.MaxUndoLevels) FCKUndo.SavedData.shift();else FCKUndo.CurrentIndex++;var B;if (FCK.EditorDocument.selection.type=='Text') B=FCK.EditorDocument.selection.createRange().getBookmark();FCKUndo.SavedData[FCKUndo.CurrentIndex]=[A,B];FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.CheckUndoState=function(){return (FCKUndo.Typing||FCKUndo.CurrentIndex>0);};FCKUndo.CheckRedoState=function(){return (!FCKUndo.Typing&&FCKUndo.CurrentIndex<(FCKUndo.SavedData.length-1));};FCKUndo.Undo=function(){if (FCKUndo.CheckUndoState()){if (FCKUndo.CurrentIndex==(FCKUndo.SavedData.length-1)){FCKUndo.SaveUndoStep();};FCKUndo._ApplyUndoLevel(--FCKUndo.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo.Redo=function(){if (FCKUndo.CheckRedoState()){FCKUndo._ApplyUndoLevel(++FCKUndo.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo._ApplyUndoLevel=function(A){var B=FCKUndo.SavedData[A];if (!B) return;FCK.SetInnerHtml(B[0]);if (B[1]){var C=FCK.EditorDocument.selection.createRange();C.moveToBookmark(B[1]);C.select();};FCKUndo.TypesCount=0;FCKUndo.Typing=false;} -var FCKEditingArea=function(A){this.TargetElement=A;this.Mode=0;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKEditingArea_Cleanup);};FCKEditingArea.prototype.Start=function(A,B){var C=this.TargetElement;var D=FCKTools.GetElementDocument(C);while(C.childNodes.length>0) C.removeChild(C.childNodes[0]);if (this.Mode==0){var E=this.IFrame=D.createElement('iframe');E.src='javascript:void(0)';E.frameBorder=0;E.width=E.height='100%';C.appendChild(E);if (FCKBrowserInfo.IsIE) A=A.replace(/(]*?)\s*\/?>(?!\s*<\/base>)/gi,'$1>');else if (!B){if (FCKBrowserInfo.IsGecko) A=A.replace(/(]*>)\s*(<\/body>)/i,'$1'+GECKO_BOGUS+'$2');var F=A.match(FCKRegexLib.BodyContents);if (F){A=F[1]+' '+F[3];this._BodyHTML=F[2];}else this._BodyHTML=A;};this.Window=E.contentWindow;var G=this.Document=this.Window.document;G.open();G.write(A);G.close();if (FCKBrowserInfo.IsGecko10&&!B){this.Start(A,true);return;};this.Window._FCKEditingArea=this;if (FCKBrowserInfo.IsGecko10) this.Window.setTimeout(FCKEditingArea_CompleteStart,500);else FCKEditingArea_CompleteStart.call(this.Window);}else{var H=this.Textarea=D.createElement('textarea');H.className='SourceField';H.dir='ltr';H.style.width=H.style.height='100%';H.style.border='none';C.appendChild(H);H.value=A;FCKTools.RunFunction(this.OnLoad);}};function FCKEditingArea_CompleteStart(){if (!this.document.body){this.setTimeout(FCKEditingArea_CompleteStart,50);return;};var A=this._FCKEditingArea;A.MakeEditable();FCKTools.RunFunction(A.OnLoad);};FCKEditingArea.prototype.MakeEditable=function(){var A=this.Document;if (FCKBrowserInfo.IsIE){A.body.contentEditable=true;}else{try{A.body.spellcheck=(this.FFSpellChecker!==false);if (this._BodyHTML){A.body.innerHTML=this._BodyHTML;this._BodyHTML=null;};A.designMode='on';try{A.execCommand('styleWithCSS',false,FCKConfig.GeckoUseSPAN);}catch (e){A.execCommand('useCSS',false,!FCKConfig.GeckoUseSPAN);};A.execCommand('enableObjectResizing',false,!FCKConfig.DisableObjectResizing);A.execCommand('enableInlineTableEditing',false,!FCKConfig.DisableFFTableHandles);}catch (e) {}}};FCKEditingArea.prototype.Focus=function(){try{if (this.Mode==0){if (FCKBrowserInfo.IsIE&&this.Document.hasFocus()) return;if (FCKBrowserInfo.IsSafari) this.IFrame.focus();else{this.Window.focus();}}else{var A=FCKTools.GetElementDocument(this.Textarea);if ((!A.hasFocus||A.hasFocus())&&A.activeElement==this.Textarea) return;this.Textarea.focus();}}catch(e) {}};function FCKEditingArea_Cleanup(){this.TargetElement=null;this.IFrame=null;this.Document=null;this.Textarea=null;if (this.Window){this.Window._FCKEditingArea=null;this.Window=null;}}; -var FCKKeystrokeHandler=function(A){this.Keystrokes={};this.CancelCtrlDefaults=(A!==false);};FCKKeystrokeHandler.prototype.AttachToElement=function(A){FCKTools.AddEventListenerEx(A,'keydown',_FCKKeystrokeHandler_OnKeyDown,this);if (FCKBrowserInfo.IsGecko10||FCKBrowserInfo.IsOpera||(FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac)) FCKTools.AddEventListenerEx(A,'keypress',_FCKKeystrokeHandler_OnKeyPress,this);};FCKKeystrokeHandler.prototype.SetKeystrokes=function(){for (var i=0;i40))){B._CancelIt=true;if (A.preventDefault) return A.preventDefault();A.returnValue=false;A.cancelBubble=true;return false;};return true;};function _FCKKeystrokeHandler_OnKeyPress(A,B){if (B._CancelIt){if (A.preventDefault) return A.preventDefault();return false;};return true;} -var FCKListHandler={OutdentListItem:function(A){var B=A.parentNode;if (B.tagName.toUpperCase().Equals('UL','OL')){var C=FCKTools.GetElementDocument(A);var D=new FCKDocumentFragment(C);var E=D.RootNode;var F=false;var G=FCKDomTools.GetFirstChild(A,['UL','OL']);if (G){F=true;var H;while ((H=G.firstChild)) E.appendChild(G.removeChild(H));FCKDomTools.RemoveNode(G);};var I;var J=false;while ((I=A.nextSibling)){if (!F&&I.nodeType==1&&I.nodeName.toUpperCase()=='LI') J=F=true;E.appendChild(I.parentNode.removeChild(I));if (!J&&I.nodeType==1&&I.nodeName.toUpperCase().Equals('UL','OL')) FCKDomTools.RemoveNode(I,true);};var K=B.parentNode.tagName.toUpperCase();var L=(K=='LI');if (L||K.Equals('UL','OL')){if (F){var G=B.cloneNode(false);D.AppendTo(G);A.appendChild(G);}else if (L) D.InsertAfterNode(B.parentNode);else D.InsertAfterNode(B);if (L) FCKDomTools.InsertAfterNode(B.parentNode,B.removeChild(A));else FCKDomTools.InsertAfterNode(B,B.removeChild(A));}else{if (F){var N=B.cloneNode(false);D.AppendTo(N);FCKDomTools.InsertAfterNode(B,N);};var O=C.createElement(FCKConfig.EnterMode=='p'?'p':'div');FCKDomTools.MoveChildren(B.removeChild(A),O);FCKDomTools.InsertAfterNode(B,O);if (FCKConfig.EnterMode=='br'){if (FCKBrowserInfo.IsGecko) O.parentNode.insertBefore(FCKTools.CreateBogusBR(C),O);else FCKDomTools.InsertAfterNode(O,FCKTools.CreateBogusBR(C));FCKDomTools.RemoveNode(O,true);}};if (this.CheckEmptyList(B)) FCKDomTools.RemoveNode(B,true);}},CheckEmptyList:function(A){return (FCKDomTools.GetFirstChild(A,'LI')==null);},CheckListHasContents:function(A){var B=A.firstChild;while (B){switch (B.nodeType){case 1:if (!B.nodeName.IEquals('UL','LI')) return true;break;case 3:if (B.nodeValue.Trim().length>0) return true;};B=B.nextSibling;};return false;}}; -var FCKElementPath=function(A){var B=null;var C=null;var D=[];var e=A;while (e){if (e.nodeType==1){if (!this.LastElement) this.LastElement=e;var E=e.nodeName.toLowerCase();if (!C){if (!B&&FCKListsLib.PathBlockElements[E]!=null) B=e;if (FCKListsLib.PathBlockLimitElements[E]!=null) C=e;};D.push(e);if (E=='body') break;};e=e.parentNode;};this.Block=B;this.BlockLimit=C;this.Elements=D;}; -var FCKDomRange=function(A){this.Window=A;};FCKDomRange.prototype={_UpdateElementInfo:function(){if (!this._Range) this.Release(true);else{var A=this._Range.startContainer;var B=this._Range.endContainer;var C=new FCKElementPath(A);this.StartContainer=C.LastElement;this.StartBlock=C.Block;this.StartBlockLimit=C.BlockLimit;if (A!=B) C=new FCKElementPath(B);this.EndContainer=C.LastElement;this.EndBlock=C.Block;this.EndBlockLimit=C.BlockLimit;}},CreateRange:function(){return new FCKW3CRange(this.Window.document);},DeleteContents:function(){if (this._Range){this._Range.deleteContents();this._UpdateElementInfo();}},ExtractContents:function(){if (this._Range){var A=this._Range.extractContents();this._UpdateElementInfo();return A;}},CheckIsCollapsed:function(){if (this._Range) return this._Range.collapsed;},Collapse:function(A){if (this._Range) this._Range.collapse(A);this._UpdateElementInfo();},Clone:function(){var A=FCKTools.CloneObject(this);if (this._Range) A._Range=this._Range.cloneRange();return A;},MoveToNodeContents:function(A){if (!this._Range) this._Range=this.CreateRange();this._Range.selectNodeContents(A);this._UpdateElementInfo();},MoveToElementStart:function(A){this.SetStart(A,1);this.SetEnd(A,1);},MoveToElementEditStart:function(A){var B;while ((B=A.firstChild)&&B.nodeType==1&&FCKListsLib.EmptyElements[B.nodeName.toLowerCase()]==null) A=B;this.MoveToElementStart(A);},InsertNode:function(A){if (this._Range) this._Range.insertNode(A);},CheckIsEmpty:function(A){if (this.CheckIsCollapsed()) return true;var B=this.Window.document.createElement('div');this._Range.cloneContents().AppendTo(B);FCKDomTools.TrimNode(B,A);return (B.innerHTML.length==0);},CheckStartOfBlock:function(){var A=this.Clone();A.Collapse(true);A.SetStart(A.StartBlock||A.StartBlockLimit,1);var B=A.CheckIsEmpty();A.Release();return B;},CheckEndOfBlock:function(A){var B=this.Clone();B.Collapse(false);B.SetEnd(B.EndBlock||B.EndBlockLimit,2);var C=B.CheckIsCollapsed();if (!C){var D=this.Window.document.createElement('div');B._Range.cloneContents().AppendTo(D);FCKDomTools.TrimNode(D,true);C=true;var E=D;while ((E=E.lastChild)){if (E.previousSibling||E.nodeType!=1||FCKListsLib.InlineChildReqElements[E.nodeName.toLowerCase()]==null){C=false;break;}}};B.Release();if (A) this.Select();return C;},CreateBookmark:function(){var A={StartId:'fck_dom_range_start_'+(new Date()).valueOf()+'_'+Math.floor(Math.random()*1000),EndId:'fck_dom_range_end_'+(new Date()).valueOf()+'_'+Math.floor(Math.random()*1000)};var B=this.Window.document;var C;var D;if (!this.CheckIsCollapsed()){C=B.createElement('span');C.id=A.EndId;C.innerHTML=' ';D=this.Clone();D.Collapse(false);D.InsertNode(C);};C=B.createElement('span');C.id=A.StartId;C.innerHTML=' ';D=this.Clone();D.Collapse(true);D.InsertNode(C);return A;},MoveToBookmark:function(A,B){var C=this.Window.document;var D=C.getElementById(A.StartId);var E=C.getElementById(A.EndId);this.SetStart(D,3);if (!B) FCKDomTools.RemoveNode(D);if (E){this.SetEnd(E,3);if (!B) FCKDomTools.RemoveNode(E);}else this.Collapse(true);},SetStart:function(A,B){var C=this._Range;if (!C) C=this._Range=this.CreateRange();switch(B){case 1:C.setStart(A,0);break;case 2:C.setStart(A,A.childNodes.length);break;case 3:C.setStartBefore(A);break;case 4:C.setStartAfter(A);};this._UpdateElementInfo();},SetEnd:function(A,B){var C=this._Range;if (!C) C=this._Range=this.CreateRange();switch(B){case 1:C.setEnd(A,0);break;case 2:C.setEnd(A,A.childNodes.length);break;case 3:C.setEndBefore(A);break;case 4:C.setEndAfter(A);};this._UpdateElementInfo();},Expand:function(A){var B,oSibling;switch (A){case 'block_contents':if (this.StartBlock) this.SetStart(this.StartBlock,1);else{B=this._Range.startContainer;if (B.nodeType==1){if (!(B=B.childNodes[this._Range.startOffset])) B=B.firstChild;};if (!B) return;while (true){oSibling=B.previousSibling;if (!oSibling){if (B.parentNode!=this.StartBlockLimit) B=B.parentNode;else break;}else if (oSibling.nodeType!=1||!(/^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DT|DE)$/).test(oSibling.nodeName.toUpperCase())){B=oSibling;}else break;};this._Range.setStartBefore(B);};if (this.EndBlock) this.SetEnd(this.EndBlock,2);else{B=this._Range.endContainer;if (B.nodeType==1) B=B.childNodes[this._Range.endOffset]||B.lastChild;if (!B) return;while (true){oSibling=B.nextSibling;if (!oSibling){if (B.parentNode!=this.EndBlockLimit) B=B.parentNode;else break;}else if (oSibling.nodeType!=1||!(/^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DT|DE)$/).test(oSibling.nodeName.toUpperCase())){B=oSibling;}else break;};this._Range.setEndAfter(B);};this._UpdateElementInfo();}},Release:function(A){if (!A) this.Window=null;this.StartContainer=null;this.StartBlock=null;this.StartBlockLimit=null;this.EndContainer=null;this.EndBlock=null;this.EndBlockLimit=null;this._Range=null;}}; -FCKDomRange.prototype.MoveToSelection=function(){this.Release(true);this._Range=new FCKW3CRange(this.Window.document);var A=this.Window.document.selection;if (A.type!='Control'){B=this._GetSelectionMarkerTag(true);this._Range.setStart(B.parentNode,FCKDomTools.GetIndexOf(B));B.parentNode.removeChild(B);var B=this._GetSelectionMarkerTag(false);this._Range.setEnd(B.parentNode,FCKDomTools.GetIndexOf(B));B.parentNode.removeChild(B);this._UpdateElementInfo();}else{var C=A.createRange().item(0);if (C){this._Range.setStartBefore(C);this._Range.setEndAfter(C);this._UpdateElementInfo();}}};FCKDomRange.prototype.Select=function(){if (this._Range){var A=this.CheckIsCollapsed();var B=this._GetRangeMarkerTag(true);if (!A) var C=this._GetRangeMarkerTag(false);var D=this.Window.document.body.createTextRange();D.moveToElementText(B);D.moveStart('character',1);if (!A){var E=this.Window.document.body.createTextRange();E.moveToElementText(C);D.setEndPoint('EndToEnd',E);D.moveEnd('character',-1);};this._Range.setStartBefore(B);B.parentNode.removeChild(B);if (A){try{D.pasteHTML(' ');D.moveStart('character',-1);}catch (e){};D.select();D.pasteHTML('');}else{this._Range.setEndBefore(C);C.parentNode.removeChild(C);D.select();}}};FCKDomRange.prototype._GetSelectionMarkerTag=function(A){var B=this.Window.document.selection.createRange();B.collapse(A===true);var C='fck_dom_range_temp_'+(new Date()).valueOf()+'_'+Math.floor(Math.random()*1000);B.pasteHTML('');return this.Window.document.getElementById(C);};FCKDomRange.prototype._GetRangeMarkerTag=function(A){var B=this._Range;if (!A){B=B.cloneRange();B.collapse(A===true);};var C=this.Window.document.createElement('span');C.innerHTML=' ';B.insertNode(C);return C;} -var FCKDocumentFragment=function(A){this._Document=A;this.RootNode=A.createElement('div');};FCKDocumentFragment.prototype={AppendTo:function(A){FCKDomTools.MoveChildren(this.RootNode,A);},AppendHtml:function(A){var B=this._Document.createElement('div');B.innerHTML=A;FCKDomTools.MoveChildren(B,this.RootNode);},InsertAfterNode:function(A){var B=this.RootNode;var C;while((C=B.lastChild)) FCKDomTools.InsertAfterNode(A,B.removeChild(C));}}; -var FCKW3CRange=function(A){this._Document=A;this.startContainer=null;this.startOffset=null;this.endContainer=null;this.endOffset=null;this.collapsed=true;};FCKW3CRange.CreateRange=function(A){return new FCKW3CRange(A);};FCKW3CRange.CreateFromRange=function(A,B){var C=FCKW3CRange.CreateRange(A);C.setStart(B.startContainer,B.startOffset);C.setEnd(B.endContainer,B.endOffset);return C;};FCKW3CRange.prototype={_UpdateCollapsed:function(){this.collapsed=(this.startContainer==this.endContainer&&this.startOffset==this.endOffset);},setStart:function(A,B){this.startContainer=A;this.startOffset=B;if (!this.endContainer){this.endContainer=A;this.endOffset=B;};this._UpdateCollapsed();},setEnd:function(A,B){this.endContainer=A;this.endOffset=B;if (!this.startContainer){this.startContainer=A;this.startOffset=B;};this._UpdateCollapsed();},setStartAfter:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setStartBefore:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A));},setEndAfter:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setEndBefore:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A));},collapse:function(A){if (A){this.endContainer=this.startContainer;this.endOffset=this.startOffset;}else{this.startContainer=this.endContainer;this.startOffset=this.endOffset;};this.collapsed=true;},selectNodeContents:function(A){this.setStart(A,0);this.setEnd(A,A.nodeType==3?A.data.length:A.childNodes.length);},insertNode:function(A){var B=this.startContainer;var C=this.startOffset;if (B.nodeType==3){B.splitText(C);if (B==this.endContainer) this.setEnd(B.nextSibling,this.endOffset-this.startOffset);FCKDomTools.InsertAfterNode(B,A);return;}else{B.insertBefore(A,B.childNodes[C]||null);if (B==this.endContainer){this.endOffset++;this.collapsed=false;}}},deleteContents:function(){if (this.collapsed) return;this._ExecContentsAction(0);},extractContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(1,A);return A;},cloneContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(2,A);return A;},_ExecContentsAction:function(A,B){var C=this.startContainer;var D=this.endContainer;var E=this.startOffset;var F=this.endOffset;var G=false;var H=false;if (D.nodeType==3) D=D.splitText(F);else{if (D.childNodes.length>0){if (F>D.childNodes.length-1){D=FCKDomTools.InsertAfterNode(D.lastChild,this._Document.createTextNode(''));H=true;}else D=D.childNodes[F];}};if (C.nodeType==3){C.splitText(E);if (C==D) D=C.nextSibling;}else{if (C.childNodes.length>0&&E<=C.childNodes.length-1){if (E==0){C=C.insertBefore(this._Document.createTextNode(''),C.firstChild);G=true;}else C=C.childNodes[E].previousSibling;}};var I=FCKDomTools.GetParents(C);var J=FCKDomTools.GetParents(D);var i,topStart,topEnd;for (i=0;i0&&levelStartNode!=D) levelClone=K.appendChild(levelStartNode.cloneNode(levelStartNode==D));if (!I[k]||levelStartNode.parentNode!=I[k].parentNode){currentNode=levelStartNode.previousSibling;while(currentNode){if (currentNode==I[k]||currentNode==C) break;currentSibling=currentNode.previousSibling;if (A==2) K.insertBefore(currentNode.cloneNode(true),K.firstChild);else{currentNode.parentNode.removeChild(currentNode);if (A==1) K.insertBefore(currentNode,K.firstChild);};currentNode=currentSibling;}};if (K) K=levelClone;};if (A==2){var L=this.startContainer;if (L.nodeType==3){L.data+=L.nextSibling.data;L.parentNode.removeChild(L.nextSibling);};var M=this.endContainer;if (M.nodeType==3&&M.nextSibling){M.data+=M.nextSibling.data;M.parentNode.removeChild(M.nextSibling);}}else{if (topStart&&topEnd&&(C.parentNode!=topStart.parentNode||D.parentNode!=topEnd.parentNode)) this.setStart(topEnd.parentNode,FCKDomTools.GetIndexOf(topEnd));this.collapse(true);};if(G) C.parentNode.removeChild(C);if(H&&D.parentNode) D.parentNode.removeChild(D);},cloneRange:function(){return FCKW3CRange.CreateFromRange(this._Document,this);},toString:function(){var A=this.cloneContents();var B=this._Document.createElement('div');A.AppendTo(B);return B.textContent||B.innerText;}}; -var FCKEnterKey=function(A,B,C){this.Window=A;this.EnterMode=B||'p';this.ShiftEnterMode=C||'br';var D=new FCKKeystrokeHandler(false);D._EnterKey=this;D.OnKeystroke=FCKEnterKey_OnKeystroke;D.SetKeystrokes([[13,'Enter'],[SHIFT+13,'ShiftEnter'],[8,'Backspace'],[46,'Delete']]);D.AttachToElement(A.document);};function FCKEnterKey_OnKeystroke(A,B){var C=this._EnterKey;try{switch (B){case 'Enter':return C.DoEnter();break;case 'ShiftEnter':return C.DoShiftEnter();break;case 'Backspace':return C.DoBackspace();break;case 'Delete':return C.DoDelete();}}catch (e){};return false;};FCKEnterKey.prototype.DoEnter=function(A,B){this._HasShift=(B===true);var C=A||this.EnterMode;if (C=='br') return this._ExecuteEnterBr();else return this._ExecuteEnterBlock(C);};FCKEnterKey.prototype.DoShiftEnter=function(){return this.DoEnter(this.ShiftEnterMode,true);};FCKEnterKey.prototype.DoBackspace=function(){var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (!B.CheckIsCollapsed()) return false;var C=B.StartBlock;var D=B.EndBlock;if (B.StartBlockLimit==B.EndBlockLimit&&C&&D){if (!B.CheckIsCollapsed()){var E=B.CheckEndOfBlock();B.DeleteContents();if (C!=D){B.SetStart(D,1);B.SetEnd(D,1);};B.Select();A=(C==D);};if (B.CheckStartOfBlock()){var F=B.StartBlock;var G=FCKDomTools.GetPreviousSourceElement(F,true,['BODY',B.StartBlockLimit.nodeName],['UL','OL']);A=this._ExecuteBackspace(B,G,F);}else if (FCKBrowserInfo.IsGecko){B.Select();}};B.Release();return A;};FCKEnterKey.prototype._ExecuteBackspace=function(A,B,C){var D=false;if (!B&&C.nodeName.IEquals('LI')&&C.parentNode.parentNode.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};if (B&&B.nodeName.IEquals('LI')){var E=FCKDomTools.GetLastChild(B,['UL','OL']);while (E){B=FCKDomTools.GetLastChild(E,'LI');E=FCKDomTools.GetLastChild(B,['UL','OL']);}};if (B&&C){if (C.nodeName.IEquals('LI')&&!B.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};var F=C.parentNode;var G=B.nodeName.toLowerCase();if (FCKListsLib.EmptyElements[G]!=null||G=='table'){FCKDomTools.RemoveNode(B);D=true;}else{FCKDomTools.RemoveNode(C);while (F.innerHTML.Trim().length==0){var H=F.parentNode;H.removeChild(F);F=H;};FCKDomTools.TrimNode(C);FCKDomTools.TrimNode(B);A.SetStart(B,2);A.Collapse(true);var I=A.CreateBookmark();FCKDomTools.MoveChildren(C,B);A.MoveToBookmark(I);A.Select();D=true;}};return D;};FCKEnterKey.prototype.DoDelete=function(){var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (B.CheckIsCollapsed()&&B.CheckEndOfBlock(FCKBrowserInfo.IsGecko)){var C=B.StartBlock;var D=FCKDomTools.GetNextSourceElement(C,true,[B.StartBlockLimit.nodeName],['UL','OL']);A=this._ExecuteBackspace(B,C,D);};B.Release();return A;};FCKEnterKey.prototype._ExecuteEnterBlock=function(A,B){var C=B||new FCKDomRange(this.Window);if (!B) C.MoveToSelection();if (C.StartBlockLimit==C.EndBlockLimit){if (!C.StartBlock) this._FixBlock(C,true,A);if (!C.EndBlock) this._FixBlock(C,false,A);var D=C.StartBlock;var E=C.EndBlock;if (!C.CheckIsEmpty()) C.DeleteContents();if (D==E){var F;var G=C.CheckStartOfBlock();var H=C.CheckEndOfBlock();if (G&&!H){F=D.cloneNode(false);if (FCKBrowserInfo.IsGeckoLike) F.innerHTML=GECKO_BOGUS;D.parentNode.insertBefore(F,D);if (FCKBrowserInfo.IsIE){C.MoveToNodeContents(F);C.Select();};C.MoveToElementEditStart(D);}else{if (H){var I=D.tagName.toUpperCase();if (G&&I=='LI'){this._OutdentWithSelection(D,C);C.Release();return true;}else{if ((/^H[1-6]$/).test(I)||this._HasShift) F=this.Window.document.createElement(A);else{F=D.cloneNode(false);this._RecreateEndingTree(D,F);};if (FCKBrowserInfo.IsGeckoLike){F.innerHTML=GECKO_BOGUS;if (G) D.innerHTML=GECKO_BOGUS;}}}else{C.SetEnd(D,2);var J=C.ExtractContents();F=D.cloneNode(false);FCKDomTools.TrimNode(J.RootNode);if (J.RootNode.firstChild.nodeType==1&&J.RootNode.firstChild.tagName.toUpperCase().Equals('UL','OL')) F.innerHTML=GECKO_BOGUS;J.AppendTo(F);if (FCKBrowserInfo.IsGecko){this._AppendBogusBr(D);this._AppendBogusBr(F);}};if (F){FCKDomTools.InsertAfterNode(D,F);C.MoveToElementEditStart(F);if (FCKBrowserInfo.IsGecko) F.scrollIntoView(false);}}}else{C.MoveToElementEditStart(E);};C.Select();};C.Release();return true;};FCKEnterKey.prototype._ExecuteEnterBr=function(A){var B=new FCKDomRange(this.Window);B.MoveToSelection();if (B.StartBlockLimit==B.EndBlockLimit){B.DeleteContents();B.MoveToSelection();var C=B.CheckStartOfBlock();var D=B.CheckEndOfBlock();var E=B.StartBlock?B.StartBlock.tagName.toUpperCase():'';var F=this._HasShift;if (!F&&E=='LI') return this._ExecuteEnterBlock(null,B);if (!F&&D&&(/^H[1-6]$/).test(E)){FCKDebug.Output('BR - Header');FCKDomTools.InsertAfterNode(B.StartBlock,this.Window.document.createElement('br'));if (FCKBrowserInfo.IsGecko) FCKDomTools.InsertAfterNode(B.StartBlock,this.Window.document.createTextNode(''));B.SetStart(B.StartBlock.nextSibling,FCKBrowserInfo.IsIE?3:1);}else{FCKDebug.Output('BR - No Header');var G=this.Window.document.createElement('br');B.InsertNode(G);if (FCKBrowserInfo.IsGecko) FCKDomTools.InsertAfterNode(G,this.Window.document.createTextNode(''));if (D&&FCKBrowserInfo.IsGecko) this._AppendBogusBr(G.parentNode);if (FCKBrowserInfo.IsIE) B.SetStart(G,4);else B.SetStart(G.nextSibling,1);};B.Collapse(true);B.Select();};B.Release();return true;};FCKEnterKey.prototype._FixBlock=function(A,B,C){var D=A.CreateBookmark();A.Collapse(B);A.Expand('block_contents');var E=this.Window.document.createElement(C);A.ExtractContents().AppendTo(E);FCKDomTools.TrimNode(E);A.InsertNode(E);A.MoveToBookmark(D);};FCKEnterKey.prototype._AppendBogusBr=function(A){var B=A.getElementsByTagName('br');if (B) B=B[B.legth-1];if (!B||B.getAttribute('type',2)!='_moz') A.appendChild(FCKTools.CreateBogusBR(this.Window.document));};FCKEnterKey.prototype._RecreateEndingTree=function(A,B){while ((A=A.lastChild)&&A.nodeType==1&&FCKListsLib.InlineChildReqElements[A.nodeName.toLowerCase()]!=null) B=B.insertBefore(A.cloneNode(false),B.firstChild);};FCKEnterKey.prototype._OutdentWithSelection=function(A,B){var C=B.CreateBookmark();FCKListHandler.OutdentListItem(A);B.MoveToBookmark(C);B.Select();} -var FCKDocumentProcessor={};FCKDocumentProcessor._Items=[];FCKDocumentProcessor.AppendNew=function(){var A={};this._Items.AddItem(A);return A;};FCKDocumentProcessor.Process=function(A){var B,i=0;while((B=this._Items[i++])) B.ProcessDocument(A);};var FCKDocumentProcessor_CreateFakeImage=function(A,B){var C=FCK.EditorDocument.createElement('IMG');C.className=A;C.src=FCKConfig.FullBasePath+'images/spacer.gif';C.setAttribute('_fckfakelement','true',0);C.setAttribute('_fckrealelement',FCKTempBin.AddElement(B),0);return C;};if (FCKBrowserInfo.IsIE||FCKBrowserInfo.IsOpera){var FCKAnchorsProcessor=FCKDocumentProcessor.AppendNew();FCKAnchorsProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('A');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.name.length>0){if (C.innerHTML!=''){if (FCKBrowserInfo.IsIE) C.className+=' FCK__AnchorC';}else{var D=FCKDocumentProcessor_CreateFakeImage('FCK__Anchor',C.cloneNode(true));D.setAttribute('_fckanchor','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}}}};var FCKPageBreaksProcessor=FCKDocumentProcessor.AppendNew();FCKPageBreaksProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('DIV');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.style.pageBreakAfter=='always'&&C.childNodes.length==1&&C.childNodes[0].style&&C.childNodes[0].style.display=='none'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',C.cloneNode(true));C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};var FCKFlashProcessor=FCKDocumentProcessor.AppendNew();FCKFlashProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('EMBED');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){var D=C.attributes['type'];if ((C.src&&C.src.EndsWith('.swf',true))||(D&&D.nodeValue=='application/x-shockwave-flash')){var E=C.cloneNode(true);if (FCKBrowserInfo.IsIE){var F=['scale','play','loop','menu','wmode','quality'];for (var G=0;G0) A.style.width=FCKTools.ConvertHtmlSizeToStyle(B.width);if (B.height>0) A.style.height=FCKTools.ConvertHtmlSizeToStyle(B.height);};FCK.GetRealElement=function(A){var e=FCKTempBin.Elements[A.getAttribute('_fckrealelement')];if (A.getAttribute('_fckflash')){if (A.style.width.length>0) e.width=FCKTools.ConvertStyleSizeToHtml(A.style.width);if (A.style.height.length>0) e.height=FCKTools.ConvertStyleSizeToHtml(A.style.height);};return e;};if (FCKBrowserInfo.IsIE){FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('HR');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){var D=A.createElement('hr');D.mergeAttributes(C,true);FCKDomTools.InsertAfterNode(C,D);C.parentNode.removeChild(C);}}};FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('INPUT');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.type=='hidden'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__InputHidden',C.cloneNode(true));D.setAttribute('_fckinputhidden','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}} -var FCKSelection=FCK.Selection={}; -FCKSelection.GetType=function(){return FCK.EditorDocument.selection.type;};FCKSelection.GetSelectedElement=function(){if (this.GetType()=='Control'){var A=FCK.EditorDocument.selection.createRange();if (A&&A.item) return FCK.EditorDocument.selection.createRange().item(0);}};FCKSelection.GetParentElement=function(){switch (this.GetType()){case 'Control':return FCKSelection.GetSelectedElement().parentElement;case 'None':return null;default:return FCK.EditorDocument.selection.createRange().parentElement();}};FCKSelection.SelectNode=function(A){FCK.Focus();FCK.EditorDocument.selection.empty();var B;try{B=FCK.EditorDocument.body.createControlRange();B.addElement(A);}catch(e){B=FCK.EditorDocument.body.createTextRange();B.moveToElementText(A);};B.select();};FCKSelection.Collapse=function(A){FCK.Focus();if (this.GetType()=='Text'){var B=FCK.EditorDocument.selection.createRange();B.collapse(A==null||A===true);B.select();}};FCKSelection.HasAncestorNode=function(A){var B;if (FCK.EditorDocument.selection.type=="Control"){B=this.GetSelectedElement();}else{var C=FCK.EditorDocument.selection.createRange();B=C.parentElement();};while (B){if (B.tagName==A) return true;B=B.parentNode;};return false;};FCKSelection.MoveToAncestorNode=function(A){var B,oRange;if (!FCK.EditorDocument) return null;if (FCK.EditorDocument.selection.type=="Control"){oRange=FCK.EditorDocument.selection.createRange();for (i=0;i=0;i--){var D=B.rows[i];if (C==0&&D.cells.length==1){FCKTableHandler.DeleteRows(D);continue;};if (D.cells[C]) D.removeChild(D.cells[C]);}};FCKTableHandler.InsertCell=function(A){var B=A?A:FCKSelection.MoveToAncestorNode('TD');if (!B) return null;var C=FCK.EditorDocument.createElement('TD');if (FCKBrowserInfo.IsGecko) C.innerHTML=GECKO_BOGUS;if (B.cellIndex==B.parentNode.cells.length-1){B.parentNode.appendChild(C);}else{B.parentNode.insertBefore(C,B.nextSibling);};return C;};FCKTableHandler.DeleteCell=function(A){if (A.parentNode.cells.length==1){FCKTableHandler.DeleteRows(FCKTools.GetElementAscensor(A,'TR'));return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteCells=function(){var A=FCKTableHandler.GetSelectedCells();for (var i=A.length-1;i>=0;i--){FCKTableHandler.DeleteCell(A[i]);}};FCKTableHandler.MergeCells=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length<2) return;if (A[0].parentNode!=A[A.length-1].parentNode) return;var B=isNaN(A[0].colSpan)?1:A[0].colSpan;var C='';var D=FCK.EditorDocument.createDocumentFragment();for (var i=A.length-1;i>=0;i--){var E=A[i];for (var c=E.childNodes.length-1;c>=0;c--){var F=E.removeChild(E.childNodes[c]);if ((F.hasAttribute&&F.hasAttribute('_moz_editor_bogus_node'))||(F.getAttribute&&F.getAttribute('type',2)=='_moz')) continue;D.insertBefore(F,D.firstChild);};if (i>0){B+=isNaN(E.colSpan)?1:E.colSpan;FCKTableHandler.DeleteCell(E);}};A[0].colSpan=B;if (FCKBrowserInfo.IsGecko&&D.childNodes.length==0) A[0].innerHTML=GECKO_BOGUS;else A[0].appendChild(D);};FCKTableHandler.SplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=this._CreateTableMap(A[0].parentNode.parentNode);var C=FCKTableHandler._GetCellIndexSpan(B,A[0].parentNode.rowIndex,A[0]);var D=this._GetCollumnCells(B,C);for (var i=0;i1) E.rowSpan=A[0].rowSpan;}else{if (isNaN(D[i].colSpan)) D[i].colSpan=2;else D[i].colSpan+=1;}}};FCKTableHandler._GetCellIndexSpan=function(A,B,C){if (A.length=0&&B.compareEndPoints('StartToEnd',D)<=0)||(B.compareEndPoints('EndToStart',D)>=0&&B.compareEndPoints('EndToEnd',D)<=0)){A[A.length]=C.cells[i];}}}};return A;}; -var FCKXml=function(){this.Error=false;};FCKXml.prototype.LoadUrl=function(A){this.Error=false;var B=FCKTools.CreateXmlObject('XmlHttp');if (!B){this.Error=true;return;};B.open("GET",A,false);B.send(null);if (B.status==200||B.status==304) this.DOMDocument=B.responseXML;else if (B.status==0&&B.readyState==4){this.DOMDocument=FCKTools.CreateXmlObject('DOMDocument');this.DOMDocument.async=false;this.DOMDocument.resolveExternals=false;this.DOMDocument.loadXML(B.responseText);}else{this.DOMDocument=null;};if (this.DOMDocument==null||this.DOMDocument.firstChild==null){this.Error=true;if (window.confirm('Error loading "'+A+'"\r\nDo you want to see more info?')) alert('URL requested: "'+A+'"\r\nServer response:\r\nStatus: '+B.status+'\r\nResponse text:\r\n'+B.responseText);}};FCKXml.prototype.SelectNodes=function(A,B){if (this.Error) return [];if (B) return B.selectNodes(A);else return this.DOMDocument.selectNodes(A);};FCKXml.prototype.SelectSingleNode=function(A,B){if (this.Error) return null;if (B) return B.selectSingleNode(A);else return this.DOMDocument.selectSingleNode(A);} -var FCKStyleDef=function(A,B){this.Name=A;this.Element=B.toUpperCase();this.IsObjectElement=FCKRegexLib.ObjectElements.test(this.Element);this.Attributes={};};FCKStyleDef.prototype.AddAttribute=function(A,B){this.Attributes[A]=B;};FCKStyleDef.prototype.GetOpenerTag=function(){var s='<'+this.Element;for (var a in this.Attributes) s+=' '+a+'="'+this.Attributes[a]+'"';return s+'>';};FCKStyleDef.prototype.GetCloserTag=function(){return '';};FCKStyleDef.prototype.RemoveFromSelection=function(){if (FCKSelection.GetType()=='Control') this._RemoveMe(FCK.ToolbarSet.CurrentInstance.Selection.GetSelectedElement());else this._RemoveMe(FCK.ToolbarSet.CurrentInstance.Selection.GetParentElement());} -FCKStyleDef.prototype.ApplyToSelection=function(){var A=FCK.ToolbarSet.CurrentInstance.EditorDocument.selection;if (A.type=='Text'){var B=A.createRange();var e=document.createElement(this.Element);e.innerHTML=B.htmlText;this._AddAttributes(e);this._RemoveDuplicates(e);B.pasteHTML(e.outerHTML);}else if (A.type=='Control'){var C=FCK.ToolbarSet.CurrentInstance.Selection.GetSelectedElement();if (C.tagName==this.Element) this._AddAttributes(C);}};FCKStyleDef.prototype._AddAttributes=function(A){for (var a in this.Attributes){switch (a.toLowerCase()){case 'style':A.style.cssText=this.Attributes[a];break;case 'class':A.setAttribute('className',this.Attributes[a],0);break;case 'src':A.setAttribute('_fcksavedurl',this.Attributes[a],0);default:A.setAttribute(a,this.Attributes[a],0);}}};FCKStyleDef.prototype._RemoveDuplicates=function(A){for (var i=0;i');else if (A=='div'&&FCKBrowserInfo.IsGecko) FCK.ExecuteNamedCommand('FormatBlock','div');else FCK.ExecuteNamedCommand('FormatBlock','<'+A+'>');};FCKFormatBlockCommand.prototype.GetState=function(){return FCK.GetNamedCommandValue('FormatBlock');};var FCKPreviewCommand=function(){this.Name='Preview';};FCKPreviewCommand.prototype.Execute=function(){FCK.Preview();};FCKPreviewCommand.prototype.GetState=function(){return 0;};var FCKSaveCommand=function(){this.Name='Save';};FCKSaveCommand.prototype.Execute=function(){var A=FCK.GetParentForm();if (typeof(A.onsubmit)=='function'){var B=A.onsubmit();if (B!=null&&B===false) return;};A.submit();};FCKSaveCommand.prototype.GetState=function(){return 0;};var FCKNewPageCommand=function(){this.Name='NewPage';};FCKNewPageCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();FCK.SetHTML('');FCKUndo.Typing=true;};FCKNewPageCommand.prototype.GetState=function(){return 0;};var FCKSourceCommand=function(){this.Name='Source';};FCKSourceCommand.prototype.Execute=function(){if (FCKConfig.SourcePopup){var A=FCKConfig.ScreenWidth*0.65;var B=FCKConfig.ScreenHeight*0.65;FCKDialog.OpenDialog('FCKDialog_Source',FCKLang.Source,'dialog/fck_source.html',A,B,null,null,true);}else FCK.SwitchEditMode();};FCKSourceCommand.prototype.GetState=function(){return (FCK.EditMode==0?0:1);};var FCKUndoCommand=function(){this.Name='Undo';};FCKUndoCommand.prototype.Execute=function(){if (FCKBrowserInfo.IsIE) FCKUndo.Undo();else FCK.ExecuteNamedCommand('Undo');};FCKUndoCommand.prototype.GetState=function(){if (FCKBrowserInfo.IsIE) return (FCKUndo.CheckUndoState()?0:-1);else return FCK.GetNamedCommandState('Undo');};var FCKRedoCommand=function(){this.Name='Redo';};FCKRedoCommand.prototype.Execute=function(){if (FCKBrowserInfo.IsIE) FCKUndo.Redo();else FCK.ExecuteNamedCommand('Redo');};FCKRedoCommand.prototype.GetState=function(){if (FCKBrowserInfo.IsIE) return (FCKUndo.CheckRedoState()?0:-1);else return FCK.GetNamedCommandState('Redo');};var FCKPageBreakCommand=function(){this.Name='PageBreak';};FCKPageBreakCommand.prototype.Execute=function(){var e=FCK.EditorDocument.createElement('DIV');e.style.pageBreakAfter='always';e.innerHTML=' ';var A=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',e);A=FCK.InsertElement(A);};FCKPageBreakCommand.prototype.GetState=function(){return 0;};var FCKUnlinkCommand=function(){this.Name='Unlink';};FCKUnlinkCommand.prototype.Execute=function(){if (FCKBrowserInfo.IsGecko){var A=FCK.Selection.MoveToAncestorNode('A');if (A) FCK.Selection.SelectNode(A);};FCK.ExecuteNamedCommand(this.Name);if (FCKBrowserInfo.IsGecko) FCK.Selection.Collapse(true);};FCKUnlinkCommand.prototype.GetState=function(){var A=FCK.GetNamedCommandState(this.Name);if (A==0&&FCK.EditMode==0){var B=FCKSelection.MoveToAncestorNode('A');var C=(B&&B.name.length>0&&B.href.length==0);if (C) A=-1;};return A;};var FCKSelectAllCommand=function(){this.Name='SelectAll';};FCKSelectAllCommand.prototype.Execute=function(){if (FCK.EditMode==0){FCK.ExecuteNamedCommand('SelectAll');}else{var A=FCK.EditingArea.Textarea;if (FCKBrowserInfo.IsIE){A.createTextRange().execCommand('SelectAll');}else{A.selectionStart=0;A.selectionEnd=A.value.length;};A.focus();}};FCKSelectAllCommand.prototype.GetState=function(){return 0;};var FCKPasteCommand=function(){this.Name='Paste';};FCKPasteCommand.prototype={Execute:function(){if (FCKBrowserInfo.IsIE) FCK.Paste();else FCK.ExecuteNamedCommand('Paste');},GetState:function(){return FCK.GetNamedCommandState('Paste');}}; -var FCKSpellCheckCommand=function(){this.Name='SpellCheck';this.IsEnabled=(FCKConfig.SpellChecker=='ieSpell'||FCKConfig.SpellChecker=='SpellerPages');};FCKSpellCheckCommand.prototype.Execute=function(){switch (FCKConfig.SpellChecker){case 'ieSpell':this._RunIeSpell();break;case 'SpellerPages':FCKDialog.OpenDialog('FCKDialog_SpellCheck','Spell Check','dialog/fck_spellerpages.html',440,480);break;}};FCKSpellCheckCommand.prototype._RunIeSpell=function(){try{var A=new ActiveXObject("ieSpell.ieSpellExtension");A.CheckAllLinkedDocuments(FCK.EditorDocument);}catch(e){if(e.number==-2146827859){if (confirm(FCKLang.IeSpellDownload)) window.open(FCKConfig.IeSpellDownloadUrl,'IeSpellDownload');}else alert('Error Loading ieSpell: '+e.message+' ('+e.number+')');}};FCKSpellCheckCommand.prototype.GetState=function(){return this.IsEnabled?0:-1;} -var FCKTextColorCommand=function(A){this.Name=A=='ForeColor'?'TextColor':'BGColor';this.Type=A;var B;if (FCKBrowserInfo.IsIE) B=window;else if (FCK.ToolbarSet._IFrame) B=FCKTools.GetElementWindow(FCK.ToolbarSet._IFrame);else B=window.parent;this._Panel=new FCKPanel(B,true);this._Panel.AppendStyleSheet(FCKConfig.SkinPath+'fck_editor.css');this._Panel.MainNode.className='FCK_Panel';this._CreatePanelBody(this._Panel.Document,this._Panel.MainNode);FCKTools.DisableSelection(this._Panel.Document.body);};FCKTextColorCommand.prototype.Execute=function(A,B,C){FCK._ActiveColorPanelType=this.Type;this._Panel.Show(A,B,C);};FCKTextColorCommand.prototype.SetColor=function(A){if (FCK._ActiveColorPanelType=='ForeColor') FCK.ExecuteNamedCommand('ForeColor',A);else if (FCKBrowserInfo.IsGeckoLike){if (FCKBrowserInfo.IsGecko&&!FCKConfig.GeckoUseSPAN) FCK.EditorDocument.execCommand('useCSS',false,false);FCK.ExecuteNamedCommand('hilitecolor',A);if (FCKBrowserInfo.IsGecko&&!FCKConfig.GeckoUseSPAN) FCK.EditorDocument.execCommand('useCSS',false,true);}else FCK.ExecuteNamedCommand('BackColor',A);delete FCK._ActiveColorPanelType;};FCKTextColorCommand.prototype.GetState=function(){return 0;};function FCKTextColorCommand_OnMouseOver() { this.className='ColorSelected';};function FCKTextColorCommand_OnMouseOut() { this.className='ColorDeselected';};function FCKTextColorCommand_OnClick(){this.className='ColorDeselected';this.Command.SetColor('#'+this.Color);this.Command._Panel.Hide();};function FCKTextColorCommand_AutoOnClick(){this.className='ColorDeselected';this.Command.SetColor('');this.Command._Panel.Hide();};function FCKTextColorCommand_MoreOnClick(){this.className='ColorDeselected';this.Command._Panel.Hide();FCKDialog.OpenDialog('FCKDialog_Color',FCKLang.DlgColorTitle,'dialog/fck_colorselector.html',400,330,this.Command.SetColor);};FCKTextColorCommand.prototype._CreatePanelBody=function(A,B){function CreateSelectionDiv(){var C=A.createElement("DIV");C.className='ColorDeselected';C.onmouseover=FCKTextColorCommand_OnMouseOver;C.onmouseout=FCKTextColorCommand_OnMouseOut;return C;};var D=B.appendChild(A.createElement("TABLE"));D.className='ForceBaseFont';D.style.tableLayout='fixed';D.cellPadding=0;D.cellSpacing=0;D.border=0;D.width=150;var E=D.insertRow(-1).insertCell(-1);E.colSpan=8;var C=E.appendChild(CreateSelectionDiv());C.innerHTML='\n \n \n \n \n
    '+FCKLang.ColorAutomatic+'
    ';C.Command=this;C.onclick=FCKTextColorCommand_AutoOnClick;var G=FCKConfig.FontColors.toString().split(',');var H=0;while (H
    ';C.Command=this;C.onclick=FCKTextColorCommand_OnClick;}};E=D.insertRow(-1).insertCell(-1);E.colSpan=8;C=E.appendChild(CreateSelectionDiv());C.innerHTML='
    '+FCKLang.ColorMoreColors+'
    ';C.Command=this;C.onclick=FCKTextColorCommand_MoreOnClick;} -var FCKPastePlainTextCommand=function(){this.Name='PasteText';};FCKPastePlainTextCommand.prototype.Execute=function(){FCK.PasteAsPlainText();};FCKPastePlainTextCommand.prototype.GetState=function(){return FCK.GetNamedCommandState('Paste');}; -var FCKPasteWordCommand=function(){this.Name='PasteWord';};FCKPasteWordCommand.prototype.Execute=function(){FCK.PasteFromWord();};FCKPasteWordCommand.prototype.GetState=function(){if (FCKConfig.ForcePasteAsPlainText) return -1;else return FCK.GetNamedCommandState('Paste');}; -var FCKTableCommand=function(A){this.Name=A;};FCKTableCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();switch (this.Name){case 'TableInsertRow':FCKTableHandler.InsertRow();break;case 'TableDeleteRows':FCKTableHandler.DeleteRows();break;case 'TableInsertColumn':FCKTableHandler.InsertColumn();break;case 'TableDeleteColumns':FCKTableHandler.DeleteColumns();break;case 'TableInsertCell':FCKTableHandler.InsertCell();break;case 'TableDeleteCells':FCKTableHandler.DeleteCells();break;case 'TableMergeCells':FCKTableHandler.MergeCells();break;case 'TableSplitCell':FCKTableHandler.SplitCell();break;case 'TableDelete':FCKTableHandler.DeleteTable();break;default:alert(FCKLang.UnknownCommand.replace(/%1/g,this.Name));}};FCKTableCommand.prototype.GetState=function(){return 0;} -var FCKStyleCommand=function(){this.Name='Style';this.StylesLoader=new FCKStylesLoader();this.StylesLoader.Load(FCKConfig.StylesXmlPath);this.Styles=this.StylesLoader.Styles;};FCKStyleCommand.prototype.Execute=function(A,B){FCKUndo.SaveUndoStep();if (B.Selected) B.Style.RemoveFromSelection();else B.Style.ApplyToSelection();FCKUndo.SaveUndoStep();FCK.Focus();FCK.Events.FireEvent("OnSelectionChange");};FCKStyleCommand.prototype.GetState=function(){if (!FCK.EditorDocument) return -1;var A=FCK.EditorDocument.selection;if (FCKSelection.GetType()=='Control'){var e=FCKSelection.GetSelectedElement();if (e) return this.StylesLoader.StyleGroups[e.tagName]?0:-1;};return 0;};FCKStyleCommand.prototype.GetActiveStyles=function(){var A=[];if (FCKSelection.GetType()=='Control') this._CheckStyle(FCKSelection.GetSelectedElement(),A,false);else this._CheckStyle(FCKSelection.GetParentElement(),A,true);return A;};FCKStyleCommand.prototype._CheckStyle=function(A,B,C){if (!A) return;if (A.nodeType==1){var D=this.StylesLoader.StyleGroups[A.tagName];if (D){for (var i=0;i<\/body><\/html>');B.close();FCKTools.AddEventListenerEx(D,'focus',FCKPanel_Window_OnFocus,this);FCKTools.AddEventListenerEx(D,'blur',FCKPanel_Window_OnBlur,this);};B.dir=FCKLang.Dir;B.oncontextmenu=FCKTools.CancelEvent;this.MainNode=B.body.appendChild(B.createElement('DIV'));this.MainNode.style.cssFloat=this.IsRTL?'right':'left';};FCKPanel.prototype.AppendStyleSheet=function(A){FCKTools.AppendStyleSheet(this.Document,A);};FCKPanel.prototype.Preload=function(x,y,A){if (this._Popup) this._Popup.show(x,y,0,0,A);};FCKPanel.prototype.Show=function(x,y,A,B,C){var D;if (this._Popup){this._Popup.show(x,y,0,0,A);this.MainNode.style.width=B?B+'px':'';this.MainNode.style.height=C?C+'px':'';D=this.MainNode.offsetWidth;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=(x*-1)+A.offsetWidth-D;};this._Popup.show(x,y,D,this.MainNode.offsetHeight,A);if (this.OnHide){if (this._Timer) CheckPopupOnHide.call(this,true);this._Timer=FCKTools.SetInterval(CheckPopupOnHide,100,this);}}else{if (typeof(FCKFocusManager)!='undefined') FCKFocusManager.Lock();if (this.ParentPanel) this.ParentPanel.Lock();this.MainNode.style.width=B?B+'px':'';this.MainNode.style.height=C?C+'px':'';D=this.MainNode.offsetWidth;if (!B) this._IFrame.width=1;if (!C) this._IFrame.height=1;D=this.MainNode.offsetWidth;var E=FCKTools.GetElementPosition(A.nodeType==9?(FCKTools.IsStrictMode(A)?A.documentElement:A.body):A,this._Window);if (this.IsRTL&&!this.IsContextMenu) x=(x*-1);x+=E.X;y+=E.Y;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=x+A.offsetWidth-D;}else{var F=FCKTools.GetViewPaneSize(this._Window);var G=FCKTools.GetScrollPosition(this._Window);var H=F.Height+G.Y;var I=F.Width+G.X;if ((x+D)>I) x-=x+D-I;if ((y+this.MainNode.offsetHeight)>H) y-=y+this.MainNode.offsetHeight-H;};if (x<0) x=0;this._IFrame.style.left=x+'px';this._IFrame.style.top=y+'px';var J=D;var K=this.MainNode.offsetHeight;this._IFrame.width=J;this._IFrame.height=K;this._IFrame.contentWindow.focus();};this._IsOpened=true;FCKTools.RunFunction(this.OnShow,this);};FCKPanel.prototype.Hide=function(A){if (this._Popup) this._Popup.hide();else{if (!this._IsOpened) return;if (typeof(FCKFocusManager)!='undefined') FCKFocusManager.Unlock();this._IFrame.width=this._IFrame.height=0;this._IsOpened=false;if (this.ParentPanel) this.ParentPanel.Unlock();if (!A) 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 A=this._Popup?FCKTools.GetDocumentWindow(this.Document):this._Window;var B=new FCKPanel(A,true);B.ParentPanel=this;return B;};FCKPanel.prototype.Lock=function(){this._LockCounter++;};FCKPanel.prototype.Unlock=function(){if (--this._LockCounter==0&&!this.HasFocus) this.Hide();};function FCKPanel_Window_OnFocus(e,A){A.HasFocus=true;};function FCKPanel_Window_OnBlur(e,A){A.HasFocus=false;if (A._LockCounter==0) FCKTools.RunFunction(A.Hide,A);};function CheckPopupOnHide(A){if (A||!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;} -var FCKIcon=function(A){var B=A?typeof(A):'undefined';switch (B){case 'number':this.Path=FCKConfig.SkinPath+'fck_strip.gif';this.Size=16;this.Position=A;break;case 'undefined':this.Path=FCK_SPACER_PATH;break;case 'string':this.Path=A;break;default:this.Path=A[0];this.Size=A[1];this.Position=A[2];}};FCKIcon.prototype.CreateIconElement=function(A){var B,eIconImage;if (this.Position){var C='-'+((this.Position-1)*this.Size)+'px';if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path;eIconImage.style.top=C;}else{B=A.createElement('IMG');B.src=FCK_SPACER_PATH;B.style.backgroundPosition='0px '+C;B.style.backgroundImage='url('+this.Path+')';}}else{B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path?this.Path:FCK_SPACER_PATH;};B.className='TB_Button_Image';return B;} -var FCKToolbarButtonUI=function(A,B,C,D,E,F){this.Name=A;this.Label=B||A;this.Tooltip=C||this.Label;this.Style=E||0;this.State=F||0;this.Icon=new FCKIcon(D);if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarButtonUI_Cleanup);};FCKToolbarButtonUI.prototype._CreatePaddingElement=function(A){var B=A.createElement('IMG');B.className='TB_Button_Padding';B.src=FCK_SPACER_PATH;return B;};FCKToolbarButtonUI.prototype.Create=function(A){var B=this.MainElement;if (B){FCKToolbarButtonUI_Cleanup.call(this);if (B.parentNode) B.parentNode.removeChild(B);B=this.MainElement=null;};var C=FCKTools.GetElementDocument(A);B=this.MainElement=C.createElement('DIV');B._FCKButton=this;B.title=this.Tooltip;if (FCKBrowserInfo.IsGecko) B.onmousedown=FCKTools.CancelEvent;this.ChangeState(this.State,true);if (this.Style==0&&!this.ShowArrow){B.appendChild(this.Icon.CreateIconElement(C));}else{var D=B.appendChild(C.createElement('TABLE'));D.cellPadding=0;D.cellSpacing=0;var E=D.insertRow(-1);var F=E.insertCell(-1);if (this.Style==0||this.Style==2) F.appendChild(this.Icon.CreateIconElement(C));else F.appendChild(this._CreatePaddingElement(C));if (this.Style==1||this.Style==2){F=E.insertCell(-1);F.className='TB_Button_Text';F.noWrap=true;F.appendChild(C.createTextNode(this.Label));};if (this.ShowArrow){if (this.Style!=0){E.insertCell(-1).appendChild(this._CreatePaddingElement(C));};F=E.insertCell(-1);var G=F.appendChild(C.createElement('IMG'));G.src=FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif';G.width=5;G.height=3;};F=E.insertCell(-1);F.appendChild(this._CreatePaddingElement(C));};A.appendChild(B);};FCKToolbarButtonUI.prototype.ChangeState=function(A,B){if (!B&&this.State==A) return;var e=this.MainElement;switch (parseInt(A,10)){case 0:e.className='TB_Button_Off';e.onmouseover=FCKToolbarButton_OnMouseOverOff;e.onmouseout=FCKToolbarButton_OnMouseOutOff;e.onclick=FCKToolbarButton_OnClick;break;case 1:e.className='TB_Button_On';e.onmouseover=FCKToolbarButton_OnMouseOverOn;e.onmouseout=FCKToolbarButton_OnMouseOutOn;e.onclick=FCKToolbarButton_OnClick;break;case -1:e.className='TB_Button_Disabled';e.onmouseover=null;e.onmouseout=null;e.onclick=null;break;};this.State=A;};function FCKToolbarButtonUI_Cleanup(){if (this.MainElement){this.MainElement._FCKButton=null;this.MainElement=null;}};function FCKToolbarButton_OnMouseOverOn(){this.className='TB_Button_On_Over';};function FCKToolbarButton_OnMouseOutOn(){this.className='TB_Button_On';};function FCKToolbarButton_OnMouseOverOff(){this.className='TB_Button_Off_Over';};function FCKToolbarButton_OnMouseOutOff(){this.className='TB_Button_Off';};function FCKToolbarButton_OnClick(e){if (this._FCKButton.OnClick) this._FCKButton.OnClick(this._FCKButton);}; -var FCKToolbarButton=function(A,B,C,D,E,F,G){this.CommandName=A;this.Label=B;this.Tooltip=C;this.Style=D;this.SourceView=E?true:false;this.ContextSensitive=F?true:false;if (G==null) this.IconPath=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(G)=='number') this.IconPath=[FCKConfig.SkinPath+'fck_strip.gif',16,G];};FCKToolbarButton.prototype.Create=function(A){this._UIButton=new FCKToolbarButtonUI(this.CommandName,this.Label,this.Tooltip,this.IconPath,this.Style);this._UIButton.OnClick=this.Click;this._UIButton._ToolbarButton=this;this._UIButton.Create(A);};FCKToolbarButton.prototype.RefreshState=function(){var A=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (A==this._UIButton.State) return;this._UIButton.ChangeState(A);};FCKToolbarButton.prototype.Click=function(){var A=this._ToolbarButton||this;FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(A.CommandName).Execute();};FCKToolbarButton.prototype.Enable=function(){this.RefreshState();};FCKToolbarButton.prototype.Disable=function(){this._UIButton.ChangeState(-1);} -var FCKSpecialCombo=function(A,B,C,D,E){this.FieldWidth=B||100;this.PanelWidth=C||150;this.PanelMaxHeight=D||150;this.Label=' ';this.Caption=A;this.Tooltip=A;this.Style=2;this.Enabled=true;this.Items={};this._Panel=new FCKPanel(E||window,true);this._Panel.AppendStyleSheet(FCKConfig.SkinPath+'fck_editor.css');this._PanelBox=this._Panel.MainNode.appendChild(this._Panel.Document.createElement('DIV'));this._PanelBox.className='SC_Panel';this._PanelBox.style.width=this.PanelWidth+'px';this._PanelBox.innerHTML='
    ';this._ItemsHolderEl=this._PanelBox.getElementsByTagName('TD')[0];if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKSpecialCombo_Cleanup);};function FCKSpecialCombo_ItemOnMouseOver(){this.className+=' SC_ItemOver';};function FCKSpecialCombo_ItemOnMouseOut(){this.className=this.originalClass;};function FCKSpecialCombo_ItemOnClick(){this.className=this.originalClass;this.FCKSpecialCombo._Panel.Hide();this.FCKSpecialCombo.SetLabel(this.FCKItemLabel);if (typeof(this.FCKSpecialCombo.OnSelect)=='function') this.FCKSpecialCombo.OnSelect(this.FCKItemID,this);};FCKSpecialCombo.prototype.AddItem=function(A,B,C,D){var E=this._ItemsHolderEl.appendChild(this._Panel.Document.createElement('DIV'));E.className=E.originalClass='SC_Item';E.innerHTML=B;E.FCKItemID=A;E.FCKItemLabel=C||A;E.FCKSpecialCombo=this;E.Selected=false;if (FCKBrowserInfo.IsIE) E.style.width='100%';if (D) E.style.backgroundColor=D;E.onmouseover=FCKSpecialCombo_ItemOnMouseOver;E.onmouseout=FCKSpecialCombo_ItemOnMouseOut;E.onclick=FCKSpecialCombo_ItemOnClick;this.Items[A.toString().toLowerCase()]=E;return E;};FCKSpecialCombo.prototype.SelectItem=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];if (B){B.className=B.originalClass='SC_ItemSelected';B.Selected=true;}};FCKSpecialCombo.prototype.SelectItemByLabel=function(A,B){for (var C in this.Items){var D=this.Items[C];if (D.FCKItemLabel==A){D.className=D.originalClass='SC_ItemSelected';D.Selected=true;if (B) this.SetLabel(A);}}};FCKSpecialCombo.prototype.DeselectAll=function(A){for (var i in this.Items){this.Items[i].className=this.Items[i].originalClass='SC_Item';this.Items[i].Selected=false;};if (A) this.SetLabel('');};FCKSpecialCombo.prototype.SetLabelById=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];this.SetLabel(B?B.FCKItemLabel:'');};FCKSpecialCombo.prototype.SetLabel=function(A){this.Label=A.length==0?' ':A;if (this._LabelEl){this._LabelEl.innerHTML=this.Label;FCKTools.DisableSelection(this._LabelEl);}};FCKSpecialCombo.prototype.SetEnabled=function(A){this.Enabled=A;this._OuterTable.className=A?'':'SC_FieldDisabled';};FCKSpecialCombo.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this._OuterTable=A.appendChild(B.createElement('TABLE'));C.cellPadding=0;C.cellSpacing=0;C.insertRow(-1);var D;var E;switch (this.Style){case 0:D='TB_ButtonType_Icon';E=false;break;case 1:D='TB_ButtonType_Text';E=false;break;case 2:E=true;break;};if (this.Caption&&this.Caption.length>0&&E){var F=C.rows[0].insertCell(-1);F.innerHTML=this.Caption;F.className='SC_FieldCaption';};var G=FCKTools.AppendElement(C.rows[0].insertCell(-1),'div');if (E){G.className='SC_Field';G.style.width=this.FieldWidth+'px';G.innerHTML='
     
    ';this._LabelEl=G.getElementsByTagName('label')[0];this._LabelEl.innerHTML=this.Label;}else{G.className='TB_Button_Off';G.innerHTML='
    '+this.Caption+'
    ';};G.SpecialCombo=this;G.onmouseover=FCKSpecialCombo_OnMouseOver;G.onmouseout=FCKSpecialCombo_OnMouseOut;G.onclick=FCKSpecialCombo_OnClick;FCKTools.DisableSelection(this._Panel.Document.body);};function FCKSpecialCombo_Cleanup(){this._LabelEl=null;this._OuterTable=null;this._ItemsHolderEl=null;this._PanelBox=null;if (this.Items){for (var A in this.Items) this.Items[A]=null;}};function FCKSpecialCombo_OnMouseOver(){if (this.SpecialCombo.Enabled){switch (this.SpecialCombo.Style){case 0:this.className='TB_Button_On_Over';break;case 1:this.className='TB_Button_On_Over';break;case 2:this.className='SC_Field SC_FieldOver';break;}}};function FCKSpecialCombo_OnMouseOut(){switch (this.SpecialCombo.Style){case 0:this.className='TB_Button_Off';break;case 1:this.className='TB_Button_Off';break;case 2:this.className='SC_Field';break;}};function FCKSpecialCombo_OnClick(e){var A=this.SpecialCombo;if (A.Enabled){var B=A._Panel;var C=A._PanelBox;var D=A._ItemsHolderEl;var E=A.PanelMaxHeight;if (A.OnBeforeClick) A.OnBeforeClick(A);if (FCKBrowserInfo.IsIE) B.Preload(0,this.offsetHeight,this);if (D.offsetHeight>E) C.style.height=E+'px';else C.style.height='';B.Show(0,this.offsetHeight,this);}}; -var FCKToolbarSpecialCombo=function(){this.SourceView=false;this.ContextSensitive=true;this._LastValue=null;};function FCKToolbarSpecialCombo_OnSelect(A,B){FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).Execute(A,B);};FCKToolbarSpecialCombo.prototype.Create=function(A){this._Combo=new FCKSpecialCombo(this.GetLabel(),this.FieldWidth,this.PanelWidth,this.PanelMaxHeight,FCKBrowserInfo.IsIE?window:FCKTools.GetElementWindow(A).parent);this._Combo.Tooltip=this.Tooltip;this._Combo.Style=this.Style;this.CreateItems(this._Combo);this._Combo.Create(A);this._Combo.CommandName=this.CommandName;this._Combo.OnSelect=FCKToolbarSpecialCombo_OnSelect;};function FCKToolbarSpecialCombo_RefreshActiveItems(A,B){A.DeselectAll();A.SelectItem(B);A.SetLabelById(B);};FCKToolbarSpecialCombo.prototype.RefreshState=function(){var A;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B!=-1){A=1;if (this.RefreshActiveItems) this.RefreshActiveItems(this._Combo,B);else{if (this._LastValue!=B){this._LastValue=B;FCKToolbarSpecialCombo_RefreshActiveItems(this._Combo,B);}}}else A=-1;if (A==this.State) return;if (A==-1){this._Combo.DeselectAll();this._Combo.SetLabel('');};this.State=A;this._Combo.SetEnabled(A!=-1);};FCKToolbarSpecialCombo.prototype.Enable=function(){this.RefreshState();};FCKToolbarSpecialCombo.prototype.Disable=function(){this.State=-1;this._Combo.DeselectAll();this._Combo.SetLabel('');this._Combo.SetEnabled(false);}; -var FCKToolbarFontsCombo=function(A,B){this.CommandName='FontName';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;};FCKToolbarFontsCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarFontsCombo.prototype.GetLabel=function(){return FCKLang.Font;};FCKToolbarFontsCombo.prototype.CreateItems=function(A){var B=FCKConfig.FontNames.split(';');for (var i=0;i'+B[i]+'');} -var FCKToolbarFontSizeCombo=function(A,B){this.CommandName='FontSize';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;};FCKToolbarFontSizeCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarFontSizeCombo.prototype.GetLabel=function(){return FCKLang.FontSize;};FCKToolbarFontSizeCombo.prototype.CreateItems=function(A){A.FieldWidth=70;var B=FCKConfig.FontSizes.split(';');for (var i=0;i'+C[1]+'',C[1]);}} -var FCKToolbarFontFormatCombo=function(A,B){this.CommandName='FontFormat';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.NormalLabel='Normal';this.PanelWidth=190;};FCKToolbarFontFormatCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarFontFormatCombo.prototype.GetLabel=function(){return FCKLang.FontFormat;};FCKToolbarFontFormatCombo.prototype.CreateItems=function(A){var B=A._Panel.Document;FCKTools.AppendStyleSheet(B,FCKConfig.ToolbarComboPreviewCSS);if (FCKConfig.BodyId&&FCKConfig.BodyId.length>0) B.body.id=FCKConfig.BodyId;if (FCKConfig.BodyClass&&FCKConfig.BodyClass.length>0) B.body.className+=' '+FCKConfig.BodyClass;var C=FCKLang['FontFormats'].split(';');var D={p:C[0],pre:C[1],address:C[2],h1:C[3],h2:C[4],h3:C[5],h4:C[6],h5:C[7],h6:C[8],div:C[9]};var E=FCKConfig.FontFormats.split(';');for (var i=0;i<'+F+'>'+G+'',G);}};if (FCKBrowserInfo.IsIE){FCKToolbarFontFormatCombo.prototype.RefreshActiveItems=function(A,B){if (B==this.NormalLabel){if (A.Label!=' ') A.DeselectAll(true);}else{if (this._LastValue==B) return;A.SelectItemByLabel(B,true);};this._LastValue=B;}} -var FCKToolbarStyleCombo=function(A,B){this.CommandName='Style';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;};FCKToolbarStyleCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarStyleCombo.prototype.GetLabel=function(){return FCKLang.Style;};FCKToolbarStyleCombo.prototype.CreateItems=function(A){var B=A._Panel.Document;FCKTools.AppendStyleSheet(B,FCKConfig.ToolbarComboPreviewCSS);B.body.className+=' ForceBaseFont';if (FCKConfig.BodyId&&FCKConfig.BodyId.length>0) B.body.id=FCKConfig.BodyId;if (FCKConfig.BodyClass&&FCKConfig.BodyClass.length>0) B.body.className+=' '+FCKConfig.BodyClass;if (!(FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsGecko10)) A.OnBeforeClick=this.RefreshVisibleItems;var C=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).Styles;for (var s in C){var D=C[s];var E;if (D.IsObjectElement) E=A.AddItem(s,s);else E=A.AddItem(s,D.GetOpenerTag()+s+D.GetCloserTag());E.Style=D;}};FCKToolbarStyleCombo.prototype.RefreshActiveItems=function(A){A.DeselectAll();var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetActiveStyles();if (B.length>0){for (var i=0;i'+document.getElementById('xToolbarSpace').innerHTML+'');G.close();G.oncontextmenu=FCKTools.CancelEvent;FCKTools.AppendStyleSheet(G,FCKConfig.SkinPath+'fck_editor.css');B=D.__FCKToolbarSet=new FCKToolbarSet(G);B._IFrame=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(D,FCKToolbarSet_Target_Cleanup);};B.CurrentInstance=FCK;FCK.AttachToOnSelectionChange(B.RefreshItemsState);return B;};function FCK_OnBlur(A){var B=A.ToolbarSet;if (B.CurrentInstance==A) B.Disable();};function FCK_OnFocus(A){var B=A.ToolbarSet;var C=A||FCK;B.CurrentInstance.FocusManager.RemoveWindow(B._IFrame.contentWindow);B.CurrentInstance=C;C.FocusManager.AddWindow(B._IFrame.contentWindow,true);B.Enable();};function FCKToolbarSet_Cleanup(){this._TargetElement=null;this._IFrame=null;};function FCKToolbarSet_Target_Cleanup(){this.__FCKToolbarSet=null;};var FCKToolbarSet=function(A){this._Document=A;this._TargetElement=A.getElementById('xToolbar');var B=A.getElementById('xExpandHandle');var C=A.getElementById('xCollapseHandle');B.title=FCKLang.ToolbarExpand;B.onclick=FCKToolbarSet_Expand_OnClick;C.title=FCKLang.ToolbarCollapse;C.onclick=FCKToolbarSet_Collapse_OnClick;if (!FCKConfig.ToolbarCanCollapse||FCKConfig.ToolbarStartExpanded) this.Expand();else this.Collapse();C.style.display=FCKConfig.ToolbarCanCollapse?'':'none';if (FCKConfig.ToolbarCanCollapse) C.style.display='';else A.getElementById('xTBLeftBorder').style.display='';this.Toolbars=[];this.IsLoaded=false;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarSet_Cleanup);};function FCKToolbarSet_Expand_OnClick(){FCK.ToolbarSet.Expand();};function FCKToolbarSet_Collapse_OnClick(){FCK.ToolbarSet.Collapse();};FCKToolbarSet.prototype.Expand=function(){this._ChangeVisibility(false);};FCKToolbarSet.prototype.Collapse=function(){this._ChangeVisibility(true);};FCKToolbarSet.prototype._ChangeVisibility=function(A){this._Document.getElementById('xCollapsed').style.display=A?'':'none';this._Document.getElementById('xExpanded').style.display=A?'none':'';if (FCKBrowserInfo.IsGecko){FCKTools.RunFunction(window.onresize);}};FCKToolbarSet.prototype.Load=function(A){this.Name=A;this.Items=[];this.ItemsWysiwygOnly=[];this.ItemsContextSensitive=[];this._TargetElement.innerHTML='';var B=FCKConfig.ToolbarSets[A];if (!B){alert(FCKLang.UnknownToolbarSet.replace(/%1/g,A));return;};this.Toolbars=[];for (var x=0;x0) A.deleteRow(0);}};FCKMenuBlock.prototype.Create=function(A){if (!this._ItemsTable){if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuBlock_Cleanup);this._Window=FCKTools.GetElementWindow(A);var B=FCKTools.GetElementDocument(A);var C=A.appendChild(B.createElement('table'));C.cellPadding=0;C.cellSpacing=0;FCKTools.DisableSelection(C);var D=C.insertRow(-1).insertCell(-1);D.className='MN_Menu';var E=this._ItemsTable=D.appendChild(B.createElement('table'));E.cellPadding=0;E.cellSpacing=0;};for (var i=0;i0&&F.href.length==0);if (G) return;menu.AddSeparator();if (E) 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){var F=FCKSelection.MoveToAncestorNode('A');var G=(F&&F.name.length>0);if (G||(tagName=='IMG'&&tag.getAttribute('_fckanchor'))){menu.AddSeparator();menu.AddItem('Anchor',FCKLang.AnchorProp,36);}}};case 'Flash':return {AddItems:function(menu,tag,tagName){if (tagName=='IMG'&&tag.getAttribute('_fckflash')){menu.AddSeparator();menu.AddItem('Flash',FCKLang.FlashProperties,38);}}};case 'Form':return {AddItems:function(menu,tag,tagName){if (FCKSelection.HasAncestorNode('FORM')){menu.AddSeparator();menu.AddItem('Form',FCKLang.FormProp,48);}}};case 'Checkbox':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='checkbox'){menu.AddSeparator();menu.AddItem('Checkbox',FCKLang.CheckboxProp,49);}}};case 'Radio':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&tag.type=='radio'){menu.AddSeparator();menu.AddItem('Radio',FCKLang.RadioButtonProp,50);}}};case 'TextField':return {AddItems:function(menu,tag,tagName){if (tagName=='INPUT'&&(tag.type=='text'||tag.type=='password')){menu.AddSeparator();menu.AddItem('TextField',FCKLang.TextFieldProp,51);}}};case 'HiddenField':return {AddItems:function(menu,tag,tagName){if (tagName=='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(){FCK.Events.FireEvent('OnSelectionChange');var A,sTagName;if ((A=FCKSelection.GetSelectedElement())) sTagName=A.tagName;var B=FCK.ContextMenu._InnerContextMenu;B.RemoveAllItems();var C=FCK.ContextMenu.Listeners;for (var i=0;i0){var A;if (this.AvailableLangs.IndexOf(FCKLanguageManager.ActiveLanguage.Code)>=0) A=FCKLanguageManager.ActiveLanguage.Code;else A=this.AvailableLangs[0];LoadScript(this.Path+'lang/'+A+'.js');};LoadScript(this.Path+'fckplugin.js');} -var FCKPlugins=FCK.Plugins={};FCKPlugins.ItemsCount=0;FCKPlugins.Items={};FCKPlugins.Load=function(){var A=FCKPlugins.Items;for (var i=0;i-1);};String.prototype.Equals=function(){var A=arguments;if (A.length==1&&A[0].pop) A=A[0];for (var i=0;iC) return false;if (B){var E=new RegExp(A+'$','i');return E.test(this);}else return (D==0||this.substr(C-D,D)==A);};String.prototype.Remove=function(A,B){var s='';if (A>0) s=this.substring(0,A);if (A+B0){var B=A.pop();if (B) B[1].call(B[0]);};this._FCKCleanupObj=null;if (CollectGarbage) CollectGarbage();}; +var s=navigator.userAgent.toLowerCase();var FCKBrowserInfo={IsIE:/*@cc_on!@*/false,IsIE7:/*@cc_on!@*/false && ( parseInt( s.match( /msie (\d+)/)[1],10)>=7),IsIE6:/*@cc_on!@*/false && ( parseInt( s.match( /msie (\d+)/)[1],10)>=6),IsGecko:s.Contains('gecko/'),IsSafari:s.Contains(' applewebkit/'),IsOpera:!!window.opera,IsAIR:s.Contains(' adobeair/'),IsMac:s.Contains('macintosh')};(function(A){A.IsGeckoLike=(A.IsGecko||A.IsSafari||A.IsOpera);if (A.IsGecko){var B=s.match(/gecko\/(\d+)/)[1];A.IsGecko10=((B<20051111)||(/rv:1\.7/.test(s)));A.IsGecko19=/rv:1\.9/.test(s);}else A.IsGecko10=false;})(FCKBrowserInfo); +var FCKURLParams={};(function(){var A=document.location.search.substr(1).split('&');for (var i=0;i';if (!FCKRegexLib.HtmlOpener.test(A)) A=''+A+'';if (!FCKRegexLib.HeadOpener.test(A)) A=A.replace(FCKRegexLib.HtmlOpener,'$&');return A;}else{var B=FCKConfig.DocType+'0&&!FCKRegexLib.Html4DocType.test(FCKConfig.DocType)) B+=' style="overflow-y: scroll"';B+='>'+A+'';return B;}},ConvertToDataFormat:function(A,B,C,D){var E=FCKXHtml.GetXHTML(A,!B,D);if (C&&FCKRegexLib.EmptyOutParagraph.test(E)) return '';return E;},FixHtml:function(A){return A;}}; +var FCK={Name:FCKURLParams['InstanceName'],Status:0,EditMode:0,Toolbar:null,HasFocus:false,DataProcessor:new FCKDataProcessor(),GetInstanceObject:(function(){var w=window;return function(name){return w[name];}})(),AttachToOnSelectionChange:function(A){this.Events.AttachEvent('OnSelectionChange',A);},GetLinkedFieldValue:function(){return this.LinkedField.value;},GetParentForm:function(){return this.LinkedField.form;},StartupValue:'',IsDirty:function(){if (this.EditMode==1) return (this.StartupValue!=this.EditingArea.Textarea.value);else{if (!this.EditorDocument) return false;return (this.StartupValue!=this.EditorDocument.body.innerHTML);}},ResetIsDirty:function(){if (this.EditMode==1) this.StartupValue=this.EditingArea.Textarea.value;else if (this.EditorDocument.body) this.StartupValue=this.EditorDocument.body.innerHTML;},StartEditor:function(){this.TempBaseTag=FCKConfig.BaseHref.length>0?'':'';var A=FCK.KeystrokeHandler=new FCKKeystrokeHandler();A.OnKeystroke=_FCK_KeystrokeHandler_OnKeystroke;A.SetKeystrokes(FCKConfig.Keystrokes);if (FCKBrowserInfo.IsIE7){if ((CTRL+86/*V*/) in A.Keystrokes) A.SetKeystrokes([CTRL+86,true]);if ((SHIFT+45/*INS*/) in A.Keystrokes) A.SetKeystrokes([SHIFT+45,true]);};A.SetKeystrokes([CTRL+8,true]);this.EditingArea=new FCKEditingArea(document.getElementById('xEditingArea'));this.EditingArea.FFSpellChecker=FCKConfig.FirefoxSpellChecker;this.SetData(this.GetLinkedFieldValue(),true);FCKTools.AddEventListener(document,"keydown",this._TabKeyHandler);this.AttachToOnSelectionChange(_FCK_PaddingNodeListener);if (FCKBrowserInfo.IsGecko) this.AttachToOnSelectionChange(this._ExecCheckEmptyBlock);},Focus:function(){FCK.EditingArea.Focus();},SetStatus:function(A){this.Status=A;if (A==1){FCKFocusManager.AddWindow(window,true);if (FCKBrowserInfo.IsIE) FCKFocusManager.AddWindow(window.frameElement,true);if (FCKConfig.StartupFocus) FCK.Focus();};this.Events.FireEvent('OnStatusChange',A);},FixBody:function(){var A=FCKConfig.EnterMode;if (A!='p'&&A!='div') return;var B=this.EditorDocument;if (!B) return;var C=B.body;if (!C) return;FCKDomTools.TrimNode(C);var D=C.firstChild;var E;while (D){var F=false;switch (D.nodeType){case 1:var G=D.nodeName.toLowerCase();if (!FCKListsLib.BlockElements[G]&&G!='li'&&!D.getAttribute('_fckfakelement')&&D.getAttribute('_moz_dirty')==null) F=true;break;case 3:if (E||D.nodeValue.Trim().length>0) F=true;};if (F){var H=D.parentNode;if (!E) E=H.insertBefore(B.createElement(A),D);E.appendChild(H.removeChild(D));D=E.nextSibling;}else{if (E){FCKDomTools.TrimNode(E);E=null;};D=D.nextSibling;}};if (E) FCKDomTools.TrimNode(E);},GetData:function(A){if (FCK.EditMode==1) return FCK.EditingArea.Textarea.value;this.FixBody();var B=FCK.EditorDocument;if (!B) return null;var C=FCKConfig.FullPage;var D=FCK.DataProcessor.ConvertToDataFormat(C?B.documentElement:B.body,!C,FCKConfig.IgnoreEmptyParagraphValue,A);D=FCK.ProtectEventsRestore(D);if (FCKBrowserInfo.IsIE) D=D.replace(FCKRegexLib.ToReplace,'$1');if (C){if (FCK.DocTypeDeclaration&&FCK.DocTypeDeclaration.length>0) D=FCK.DocTypeDeclaration+'\n'+D;if (FCK.XmlDeclaration&&FCK.XmlDeclaration.length>0) D=FCK.XmlDeclaration+'\n'+D;};return FCKConfig.ProtectedSource.Revert(D);},UpdateLinkedField:function(){var A=FCK.GetXHTML(FCKConfig.FormatOutput);if (FCKConfig.HtmlEncodeOutput) A=FCKTools.HTMLEncode(A);FCK.LinkedField.value=A;FCK.Events.FireEvent('OnAfterLinkedFieldUpdate');},RegisteredDoubleClickHandlers:{},OnDoubleClick:function(A){var B=FCK.RegisteredDoubleClickHandlers[A.tagName.toUpperCase()];if (B){for (var i=0;i0?'|ABBR|XML|EMBED|OBJECT':'ABBR|XML|EMBED|OBJECT';var C;if (B.length>0){C=new RegExp('<('+B+')(?!\w|:)','gi');A=A.replace(C,'','gi');A=A.replace(C,'<\/FCK:$1>');};B='META';if (FCKBrowserInfo.IsIE) B+='|HR';C=new RegExp('<(('+B+')(?=\\s|>|/)[\\s\\S]*?)/?>','gi');A=A.replace(C,'');return A;},SetData:function(A,B){this.EditingArea.Mode=FCK.EditMode;if (FCKBrowserInfo.IsIE&&FCK.EditorDocument){FCK.EditorDocument.detachEvent("onselectionchange",Doc_OnSelectionChange);};if (FCK.EditMode==0){this._ForceResetIsDirty=(B===true);A=FCKConfig.ProtectedSource.Protect(A);A=FCK.DataProcessor.ConvertToHtml(A);A=A.replace(FCKRegexLib.InvalidSelfCloseTags,'$1>');A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);if (FCK.TempBaseTag.length>0&&!FCKRegexLib.HasBaseTag.test(A)) A=A.replace(FCKRegexLib.HeadOpener,'$&'+FCK.TempBaseTag);var C='';if (!FCKConfig.FullPage) C+=_FCK_GetEditorAreaStyleTags();if (FCKBrowserInfo.IsIE) C+=FCK._GetBehaviorsStyle();else if (FCKConfig.ShowBorders) C+=FCKTools.GetStyleHtml(FCK_ShowTableBordersCSS,true);C+=FCKTools.GetStyleHtml(FCK_InternalCSS,true);A=A.replace(FCKRegexLib.HeadCloser,C+'$&');this.EditingArea.OnLoad=_FCK_EditingArea_OnLoad;this.EditingArea.Start(A);}else{FCK.EditorWindow=null;FCK.EditorDocument=null;FCKDomTools.PaddingNode=null;this.EditingArea.OnLoad=null;this.EditingArea.Start(A);this.EditingArea.Textarea._FCKShowContextMenu=true;FCK.EnterKeyHandler=null;if (B) this.ResetIsDirty();FCK.KeystrokeHandler.AttachToElement(this.EditingArea.Textarea);this.EditingArea.Textarea.focus();FCK.Events.FireEvent('OnAfterSetHTML');};if (FCKBrowserInfo.IsGecko) window.onresize();},RedirectNamedCommands:{},ExecuteNamedCommand:function(A,B,C,D){if (!D) FCKUndo.SaveUndoStep();if (!C&&FCK.RedirectNamedCommands[A]!=null) FCK.ExecuteRedirectedNamedCommand(A,B);else{FCK.Focus();FCK.EditorDocument.execCommand(A,false,B);FCK.Events.FireEvent('OnSelectionChange');};if (!D) FCKUndo.SaveUndoStep();},GetNamedCommandState:function(A){try{if (FCKBrowserInfo.IsSafari&&FCK.EditorWindow&&A.IEquals('Paste')) return 0;if (!FCK.EditorDocument.queryCommandEnabled(A)) return -1;else{return FCK.EditorDocument.queryCommandState(A)?1:0;}}catch (e){return 0;}},GetNamedCommandValue:function(A){var B='';var C=FCK.GetNamedCommandState(A);if (C==-1) return null;try{B=this.EditorDocument.queryCommandValue(A);}catch(e) {};return B?B:'';},Paste:function(A){if (FCK.Status!=2||!FCK.Events.FireEvent('OnPaste')) return false;return A||FCK._ExecPaste();},PasteFromWord:function(){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteFromWord,'dialog/fck_paste.html',400,330,'Word');},Preview:function(){var A;if (FCKConfig.FullPage){if (FCK.TempBaseTag.length>0) A=FCK.TempBaseTag+FCK.GetXHTML();else A=FCK.GetXHTML();}else{A=FCKConfig.DocType+''+FCK.TempBaseTag+''+FCKLang.Preview+''+_FCK_GetEditorAreaStyleTags()+''+FCK.GetXHTML()+'';};var B=FCKConfig.ScreenWidth*0.8;var C=FCKConfig.ScreenHeight*0.7;var D=(FCKConfig.ScreenWidth-B)/2;var E='';if (FCK_IS_CUSTOM_DOMAIN&&FCKBrowserInfo.IsIE){window._FCKHtmlToLoad=A;E='javascript:void( (function(){document.open() ;document.domain="'+document.domain+'" ;document.write( window.opener._FCKHtmlToLoad );document.close() ;window.opener._FCKHtmlToLoad = null ;})() )';};var F=window.open(E,null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+B+',height='+C+',left='+D);if (!FCK_IS_CUSTOM_DOMAIN||!FCKBrowserInfo.IsIE){F.document.write(A);F.document.close();}},SwitchEditMode:function(A){var B=(FCK.EditMode==0);var C=FCK.IsDirty();var D;if (B){FCKCommands.GetCommand('ShowBlocks').SaveState();if (!A&&FCKBrowserInfo.IsIE) FCKUndo.SaveUndoStep();D=FCK.GetXHTML(FCKConfig.FormatSource);if (D==null) return false;}else D=this.EditingArea.Textarea.value;FCK.EditMode=B?1:0;FCK.SetData(D,!C);FCK.Focus();FCKTools.RunFunction(FCK.ToolbarSet.RefreshModeState,FCK.ToolbarSet);return true;},InsertElement:function(A){if (typeof A=='string') A=this.EditorDocument.createElement(A);var B=A.nodeName.toLowerCase();FCKSelection.Restore();var C=new FCKDomRange(this.EditorWindow);if (FCKListsLib.BlockElements[B]!=null){C.SplitBlock();C.InsertNode(A);var D=FCKDomTools.GetNextSourceElement(A,false,null,['hr','br','param','img','area','input'],true);if (!D&&FCKConfig.EnterMode!='br'){D=this.EditorDocument.body.appendChild(this.EditorDocument.createElement(FCKConfig.EnterMode));if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(D);};if (FCKListsLib.EmptyElements[B]==null) C.MoveToElementEditStart(A);else if (D) C.MoveToElementEditStart(D);else C.MoveToPosition(A,4);if (FCKBrowserInfo.IsGecko){if (D) D.scrollIntoView(false);A.scrollIntoView(false);}}else{C.MoveToSelection();C.DeleteContents();C.InsertNode(A);C.SetStart(A,4);C.SetEnd(A,4);};C.Select();C.Release();this.Focus();return A;},_InsertBlockElement:function(A){},_IsFunctionKey:function(A){if (A>=16&&A<=20) return true;if (A==27||(A>=33&&A<=40)) return true;if (A==45) return true;return false;},_KeyDownListener:function(A){if (!A) A=FCK.EditorWindow.event;if (FCK.EditorWindow){if (!FCK._IsFunctionKey(A.keyCode)&&!(A.ctrlKey||A.metaKey)&&!(A.keyCode==46)) FCK._KeyDownUndo();};return true;},_KeyDownUndo:function(){if (!FCKUndo.Typing){FCKUndo.SaveUndoStep();FCKUndo.Typing=true;FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.TypesCount++;FCKUndo.Changed=1;if (FCKUndo.TypesCount>FCKUndo.MaxTypes){FCKUndo.TypesCount=0;FCKUndo.SaveUndoStep();}},_TabKeyHandler:function(A){if (!A) A=window.event;var B=A.keyCode;if (B==9&&FCK.EditMode!=0){if (FCKBrowserInfo.IsIE){var C=document.selection.createRange();if (C.parentElement()!=FCK.EditingArea.Textarea) return true;C.text='\t';C.select();}else{var a=[];var D=FCK.EditingArea.Textarea;var E=D.selectionStart;var F=D.selectionEnd;a.push(D.value.substr(0,E));a.push('\t');a.push(D.value.substr(F));D.value=a.join('');D.setSelectionRange(E+1,E+1);};if (A.preventDefault) return A.preventDefault();return A.returnValue=false;};return true;}};FCK.Events=new FCKEvents(FCK);FCK.GetHTML=FCK.GetXHTML=FCK.GetData;FCK.SetHTML=FCK.SetData;FCK.InsertElementAndGetIt=FCK.CreateElement=FCK.InsertElement;function _FCK_ProtectEvents_ReplaceTags(A){return A.replace(FCKRegexLib.EventAttributes,_FCK_ProtectEvents_ReplaceEvents);};function _FCK_ProtectEvents_ReplaceEvents(A,B){return ' '+B+'_fckprotectedatt="'+encodeURIComponent(A)+'"';};function _FCK_ProtectEvents_RestoreEvents(A,B){return decodeURIComponent(B);};function _FCK_MouseEventsListener(A){if (!A) A=window.event;if (A.type=='mousedown') FCK.MouseDownFlag=true;else if (A.type=='mouseup') FCK.MouseDownFlag=false;else if (A.type=='mousemove') FCK.Events.FireEvent('OnMouseMove',A);};function _FCK_PaddingNodeListener(){if (FCKConfig.EnterMode.IEquals('br')) return;FCKDomTools.EnforcePaddingNode(FCK.EditorDocument,FCKConfig.EnterMode);if (!FCKBrowserInfo.IsIE&&FCKDomTools.PaddingNode){var A=FCKSelection.GetSelection();if (A&&A.rangeCount==1){var B=A.getRangeAt(0);if (B.collapsed&&B.startContainer==FCK.EditorDocument.body&&B.startOffset==0){B.selectNodeContents(FCKDomTools.PaddingNode);B.collapse(true);A.removeAllRanges();A.addRange(B);}}}else if (FCKDomTools.PaddingNode){var C=FCKSelection.GetParentElement();var D=FCKDomTools.PaddingNode;if (C&&C.nodeName.IEquals('body')){if (FCK.EditorDocument.body.childNodes.length==1&&FCK.EditorDocument.body.firstChild==D){var B=FCK.EditorDocument.body.createTextRange();var F=false;if (!D.childNodes.firstChild){D.appendChild(FCKTools.GetElementDocument(D).createTextNode('\ufeff'));F=true;};B.moveToElementText(D);B.select();if (F) B.pasteHTML('');}}}};function _FCK_EditingArea_OnLoad(){FCK.EditorWindow=FCK.EditingArea.Window;FCK.EditorDocument=FCK.EditingArea.Document;FCK.InitializeBehaviors();FCK.MouseDownFlag=false;FCKTools.AddEventListener(FCK.EditorDocument,'mousemove',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mousedown',_FCK_MouseEventsListener);FCKTools.AddEventListener(FCK.EditorDocument,'mouseup',_FCK_MouseEventsListener);if (FCKBrowserInfo.IsSafari){var A=function(evt){if (!(evt.ctrlKey||evt.metaKey)) return;if (FCK.EditMode!=0) return;switch (evt.keyCode){case 89:FCKUndo.Redo();break;case 90:FCKUndo.Undo();break;}};FCKTools.AddEventListener(FCK.EditorDocument,'keyup',A);};FCK.EnterKeyHandler=new FCKEnterKey(FCK.EditorWindow,FCKConfig.EnterMode,FCKConfig.ShiftEnterMode,FCKConfig.TabSpaces);FCK.KeystrokeHandler.AttachToElement(FCK.EditorDocument);if (FCK._ForceResetIsDirty) FCK.ResetIsDirty();if (FCKBrowserInfo.IsIE&&FCK.HasFocus) FCK.EditorDocument.body.setActive();FCK.OnAfterSetHTML();FCKCommands.GetCommand('ShowBlocks').RestoreState();if (FCK.Status!=0) return;FCK.SetStatus(1);};function _FCK_GetEditorAreaStyleTags(){return FCKTools.GetStyleHtml(FCKConfig.EditorAreaCSS)+FCKTools.GetStyleHtml(FCKConfig.EditorAreaStyles);};function _FCK_KeystrokeHandler_OnKeystroke(A,B){if (FCK.Status!=2) return false;if (FCK.EditMode==0){switch (B){case 'Paste':return!FCK.Paste();case 'Cut':FCKUndo.SaveUndoStep();return false;}}else{if (B.Equals('Paste','Undo','Redo','SelectAll','Cut')) return false;};var C=FCK.Commands.GetCommand(B);if (C.GetState()==-1) return false;return (C.Execute.apply(C,FCKTools.ArgumentsToArray(arguments,2))!==false);};(function(){var A=window.parent.document;var B=A.getElementById(FCK.Name);var i=0;while (B||i==0){if (B&&B.tagName.toLowerCase().Equals('input','textarea')){FCK.LinkedField=B;break;};B=A.getElementsByName(FCK.Name)[i++];}})();var FCKTempBin={Elements:[],AddElement:function(A){var B=this.Elements.length;this.Elements[B]=A;return B;},RemoveElement:function(A){var e=this.Elements[A];this.Elements[A]=null;return e;},Reset:function(){var i=0;while (i0) C+='TABLE { behavior: '+B+' ; }';C+='';FCK._BehaviorsStyle=C;};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 A=FCK.EditorDocument.body;A.detachEvent('onpaste',Doc_OnPaste);var B=FCK.Paste(!FCKConfig.ForcePasteAsPlainText&&!FCKConfig.AutoDetectPasteFromWord);A.attachEvent('onpaste',Doc_OnPaste);return B;};function Doc_OnDblClick(){FCK.OnDoubleClick(FCK.EditorWindow.event.srcElement);FCK.EditorWindow.event.cancelBubble=true;};function Doc_OnSelectionChange(){if (!FCK.IsSelectionChangeLocked&&FCK.EditorDocument) FCK.Events.FireEvent("OnSelectionChange");};function Doc_OnDrop(){if (FCK.MouseDownFlag){FCK.MouseDownFlag=false;return;};if (FCKConfig.ForcePasteAsPlainText){var A=FCK.EditorWindow.event;if (FCK._CheckIsPastingEnabled()||FCKConfig.ShowDropDialog) FCK.PasteAsPlainText(A.dataTransfer.getData('Text'));A.returnValue=false;A.cancelBubble=true;}};FCK.InitializeBehaviors=function(A){this.EditorDocument.attachEvent('onmouseup',Doc_OnMouseUp);this.EditorDocument.body.attachEvent('onpaste',Doc_OnPaste);this.EditorDocument.body.attachEvent('ondrop',Doc_OnDrop);FCK.ContextMenu._InnerContextMenu.AttachToElement(FCK.EditorDocument.body);this.EditorDocument.attachEvent("onkeydown",FCK._KeyDownListener);this.EditorDocument.attachEvent("ondblclick",Doc_OnDblClick);this.EditorDocument.attachEvent("onselectionchange",Doc_OnSelectionChange);FCKTools.AddEventListener(FCK.EditorDocument,'mousedown',Doc_OnMouseDown);};FCK.InsertHtml=function(A){A=FCKConfig.ProtectedSource.Protect(A);A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);FCK.EditorWindow.focus();FCKUndo.SaveUndoStep();var B=FCKSelection.GetSelection();if (B.type.toLowerCase()=='control') B.clear();A=''+A;B.createRange().pasteHTML(A);FCK.EditorDocument.getElementById('__fakeFCKRemove__').removeNode(true);FCKDocumentProcessor.Process(FCK.EditorDocument);this.Events.FireEvent("OnSelectionChange");};FCK.SetInnerHtml=function(A){var B=FCK.EditorDocument;B.body.innerHTML='
     
    '+A;B.getElementById('__fakeFCKRemove__').removeNode(true);};function FCK_PreloadImages(){var A=new FCKImagePreloader();A.AddImages(FCKConfig.PreloadImages);A.AddImages(FCKConfig.SkinPath+'fck_strip.gif');A.OnComplete=LoadToolbarSetup;A.Start();};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(){if (FCK._PasteIsRunning) return true;if (FCKConfig.ForcePasteAsPlainText){FCK.PasteAsPlainText();return false;};var A=FCK._CheckIsPastingEnabled(true);if (A===false) FCKTools.RunFunction(FCKDialog.OpenDialog,FCKDialog,['FCKDialog_Paste',FCKLang.Paste,'dialog/fck_paste.html',400,330,'Security']);else{if (FCKConfig.AutoDetectPasteFromWord&&A.length>0){var B=/<\w[^>]*(( class="?MsoNormal"?)|(="mso-))/gi;if (B.test(A)){if (confirm(FCKLang.PasteWordConfirm)){FCK.PasteFromWord();return false;}}};FCK._PasteIsRunning=true;FCK.ExecuteNamedCommand('Paste');delete FCK._PasteIsRunning;};return false;};FCK.PasteAsPlainText=function(A){if (!FCK._CheckIsPastingEnabled()){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteAsText,'dialog/fck_paste.html',400,330,'PlainText');return;};var B=null;if (!A) B=clipboardData.getData("Text");else B=A;if (B&&B.length>0){B=FCKTools.HTMLEncode(B);B=FCKTools.ProcessLineBreaks(window,FCKConfig,B);var C=B.search('

    ');var D=B.search('

    ');if ((C!=-1&&D!=-1&&C0){if (FCKSelection.GetType()=='Control'){var D=this.EditorDocument.createElement('A');D.href=A;var E=FCKSelection.GetSelectedElement();E.parentNode.insertBefore(D,E);E.parentNode.removeChild(E);D.appendChild(E);return [D];};var F='javascript:void(0);/*'+(new Date().getTime())+'*/';FCK.ExecuteNamedCommand('CreateLink',F,false,!!B);var G=this.EditorDocument.links;for (i=0;i0&&!isNaN(E)) this.PageConfig[D]=parseInt(E,10);else this.PageConfig[D]=E;}};function FCKConfig_LoadPageConfig(){var A=FCKConfig.PageConfig;for (var B in A) FCKConfig[B]=A[B];};function FCKConfig_PreProcess(){var A=FCKConfig;if (A.AllowQueryStringDebug){try{if ((/fckdebug=true/i).test(window.top.location.search)) A.Debug=true;}catch (e) {/*Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error).*/}};if (!A.PluginsPath.EndsWith('/')) A.PluginsPath+='/';var B=A.ToolbarComboPreviewCSS;if (!B||B.length==0) A.ToolbarComboPreviewCSS=A.EditorAreaCSS;A.RemoveAttributesArray=(A.RemoveAttributes||'').split(',');if (!FCKConfig.SkinEditorCSS||FCKConfig.SkinEditorCSS.length==0) FCKConfig.SkinEditorCSS=FCKConfig.SkinPath+'fck_editor.css';if (!FCKConfig.SkinDialogCSS||FCKConfig.SkinDialogCSS.length==0) FCKConfig.SkinDialogCSS=FCKConfig.SkinPath+'fck_dialog.css';};FCKConfig.ToolbarSets={};FCKConfig.Plugins={};FCKConfig.Plugins.Items=[];FCKConfig.Plugins.Add=function(A,B,C){FCKConfig.Plugins.Items.AddItem([A,B,C]);};FCKConfig.ProtectedSource={};FCKConfig.ProtectedSource._CodeTag=(new Date()).valueOf();FCKConfig.ProtectedSource.RegexEntries=[//g,//gi,//gi];FCKConfig.ProtectedSource.Add=function(A){this.RegexEntries.AddItem(A);};FCKConfig.ProtectedSource.Protect=function(A){var B=this._CodeTag;function _Replace(protectedSource){var C=FCKTempBin.AddElement(protectedSource);return '';};for (var i=0;i|>)","g");return A.replace(D,_Replace);};FCKConfig.GetBodyAttributes=function(){var A='';if (this.BodyId&&this.BodyId.length>0) A+=' id="'+this.BodyId+'"';if (this.BodyClass&&this.BodyClass.length>0) A+=' class="'+this.BodyClass+'"';return A;};FCKConfig.ApplyBodyAttributes=function(A){if (this.BodyId&&this.BodyId.length>0) A.id=FCKConfig.BodyId;if (this.BodyClass&&this.BodyClass.length>0) A.className+=' '+FCKConfig.BodyClass;}; +var FCKDebug={};FCKDebug._GetWindow=function(){if (!this.DebugWindow||this.DebugWindow.closed) this.DebugWindow=window.open(FCKConfig.BasePath+'fckdebug.html','FCKeditorDebug','menubar=no,scrollbars=yes,resizable=yes,location=no,toolbar=no,width=600,height=500',true);return this.DebugWindow;};FCKDebug.Output=function(A,B,C){if (!FCKConfig.Debug) return;try{this._GetWindow().Output(A,B);}catch (e) {}};FCKDebug.OutputObject=function(A,B){if (!FCKConfig.Debug) return;try{this._GetWindow().OutputObject(A,B);}catch (e) {}}; +var FCKDomTools={MoveChildren:function(A,B,C){if (A==B) return;var D;if (C){while ((D=A.lastChild)) B.insertBefore(A.removeChild(D),B.firstChild);}else{while ((D=A.firstChild)) B.appendChild(A.removeChild(D));}},MoveNode:function(A,B,C){if (C) B.insertBefore(FCKDomTools.RemoveNode(A),B.firstChild);else B.appendChild(FCKDomTools.RemoveNode(A));},TrimNode:function(A){this.LTrimNode(A);this.RTrimNode(A);},LTrimNode:function(A){var B;while ((B=A.firstChild)){if (B.nodeType==3){var C=B.nodeValue.LTrim();var D=B.nodeValue.length;if (C.length==0){A.removeChild(B);continue;}else if (C.length0) break;if (A.lastChild) A=A.lastChild;else return this.GetPreviousSourceElement(A,B,C,D);};return null;},GetNextSourceElement:function(A,B,C,D,E){while((A=this.GetNextSourceNode(A,E))){if (A.nodeType==1){if (C&&A.nodeName.IEquals(C)) break;if (D&&A.nodeName.IEquals(D)) return this.GetNextSourceElement(A,B,C,D);return A;}else if (B&&A.nodeType==3&&A.nodeValue.RTrim().length>0) break;};return null;},GetNextSourceNode:function(A,B,C,D){if (!A) return null;var E;if (!B&&A.firstChild) E=A.firstChild;else{if (D&&A==D) return null;E=A.nextSibling;if (!E&&(!D||D!=A.parentNode)) return this.GetNextSourceNode(A.parentNode,true,C,D);};if (C&&E&&E.nodeType!=C) return this.GetNextSourceNode(E,false,C,D);return E;},GetPreviousSourceNode:function(A,B,C,D){if (!A) return null;var E;if (!B&&A.lastChild) E=A.lastChild;else{if (D&&A==D) return null;E=A.previousSibling;if (!E&&(!D||D!=A.parentNode)) return this.GetPreviousSourceNode(A.parentNode,true,C,D);};if (C&&E&&E.nodeType!=C) return this.GetPreviousSourceNode(E,false,C,D);return E;},InsertAfterNode:function(A,B){return A.parentNode.insertBefore(B,A.nextSibling);},GetParents:function(A){var B=[];while (A){B.unshift(A);A=A.parentNode;};return B;},GetCommonParents:function(A,B){var C=this.GetParents(A);var D=this.GetParents(B);var E=[];for (var i=0;i0) D[C.pop().toLowerCase()]=1;var E=this.GetCommonParents(A,B);var F=null;while ((F=E.pop())){if (D[F.nodeName.toLowerCase()]) return F;};return null;},GetIndexOf:function(A){var B=A.parentNode?A.parentNode.firstChild:null;var C=-1;while (B){C++;if (B==A) return C;B=B.nextSibling;};return-1;},PaddingNode:null,EnforcePaddingNode:function(A,B){try{if (!A||!A.body) return;}catch (e){return;};this.CheckAndRemovePaddingNode(A,B,true);try{if (A.body.lastChild&&(A.body.lastChild.nodeType!=1||A.body.lastChild.tagName.toLowerCase()==B.toLowerCase())) return;}catch (e){return;};var C=A.createElement(B);if (FCKBrowserInfo.IsGecko&&FCKListsLib.NonEmptyBlockElements[B]) FCKTools.AppendBogusBr(C);this.PaddingNode=C;if (A.body.childNodes.length==1&&A.body.firstChild.nodeType==1&&A.body.firstChild.tagName.toLowerCase()=='br'&&(A.body.firstChild.getAttribute('_moz_dirty')!=null||A.body.firstChild.getAttribute('type')=='_moz')) A.body.replaceChild(C,A.body.firstChild);else A.body.appendChild(C);},CheckAndRemovePaddingNode:function(A,B,C){var D=this.PaddingNode;if (!D) return;try{if (D.parentNode!=A.body||D.tagName.toLowerCase()!=B||(D.childNodes.length>1)||(D.firstChild&&D.firstChild.nodeValue!='\xa0'&&String(D.firstChild.tagName).toLowerCase()!='br')){this.PaddingNode=null;return;}}catch (e){this.PaddingNode=null;return;};if (!C){if (D.parentNode.childNodes.length>1) D.parentNode.removeChild(D);this.PaddingNode=null;}},HasAttribute:function(A,B){if (A.hasAttribute) return A.hasAttribute(B);else{var C=A.attributes[B];return (C!=undefined&&C.specified);}},HasAttributes:function(A){var B=A.attributes;for (var i=0;i0) return true;}else if (B[i].specified) return true;};return false;},RemoveAttribute:function(A,B){if (FCKBrowserInfo.IsIE&&B.toLowerCase()=='class') B='className';return A.removeAttribute(B,0);},RemoveAttributes:function (A,B){for (var i=0;i0) return false;C=C.nextSibling;};return D?this.CheckIsEmptyElement(D,B):true;},SetElementStyles:function(A,B){var C=A.style;for (var D in B) C[D]=B[D];},SetOpacity:function(A,B){if (FCKBrowserInfo.IsIE){B=Math.round(B*100);A.style.filter=(B>100?'':'progid:DXImageTransform.Microsoft.Alpha(opacity='+B+')');}else A.style.opacity=B;},GetCurrentElementStyle:function(A,B){if (FCKBrowserInfo.IsIE) return A.currentStyle[B];else return A.ownerDocument.defaultView.getComputedStyle(A,'').getPropertyValue(B);},GetPositionedAncestor:function(A){var B=A;while (B!=FCKTools.GetElementDocument(B).documentElement){if (this.GetCurrentElementStyle(B,'position')!='static') return B;if (B==FCKTools.GetElementDocument(B).documentElement&¤tWindow!=w) B=currentWindow.frameElement;else B=B.parentNode;};return null;},ScrollIntoView:function(A,B){var C=FCKTools.GetElementWindow(A);var D=FCKTools.GetViewPaneSize(C).Height;var E=D*-1;if (B===false){E+=A.offsetHeight;E+=parseInt(this.GetCurrentElementStyle(A,'marginBottom')||0,10);};E+=A.offsetTop;while ((A=A.offsetParent)) E+=A.offsetTop||0;var F=FCKTools.GetScrollPosition(C).Y;if (E>0&&E>F) C.scrollTo(0,E);},CheckIsEditable:function(A){var B=A.nodeName.toLowerCase();var C=FCK.DTD[B]||FCK.DTD.span;return (C['#']&&!FCKListsLib.NonEditableElements[B]);}}; +var FCKTools={};FCKTools.CreateBogusBR=function(A){var B=A.createElement('br');B.setAttribute('type','_moz');return B;};FCKTools.FixCssUrls=function(A,B){if (!A||A.length==0) return B;return B.replace(/url\s*\(([\s'"]*)(.*?)([\s"']*)\)/g,function(match,opener,path,closer){if (/^\/|^\w?:/.test(path)) return match;else return 'url('+opener+A+path+closer+')';});};FCKTools._GetUrlFixedCss=function(A,B){var C=A.match(/^([^|]+)\|([\s\S]*)/);if (C) return FCKTools.FixCssUrls(C[1],C[2]);else return A;};FCKTools.AppendStyleSheet=function(A,B){if (!B) return [];if (typeof(B)=='string'){if (/[\\\/\.]\w*$/.test(B)){return this.AppendStyleSheet(A,B.split(','));}else return [this.AppendStyleString(A,FCKTools._GetUrlFixedCss(B))];}else{var C=[];for (var i=0;i'+styleDef+'';};var C=function(cssFileUrl,markTemp){if (cssFileUrl.length==0) return '';var B=markTemp?' _fcktemp="true"':'';return '';};return function(cssFileOrArrayOrDef,markTemp){if (!cssFileOrArrayOrDef) return '';if (typeof(cssFileOrArrayOrDef)=='string'){if (/[\\\/\.]\w*$/.test(cssFileOrArrayOrDef)){return this.GetStyleHtml(cssFileOrArrayOrDef.split(','),markTemp);}else return A(this._GetUrlFixedCss(cssFileOrArrayOrDef),markTemp);}else{var E='';for (var i=0;i/g,'>');return A;};FCKTools.HTMLDecode=function(A){if (!A) return '';A=A.replace(/>/g,'>');A=A.replace(/</g,'<');A=A.replace(/&/g,'&');return A;};FCKTools._ProcessLineBreaksForPMode=function(A,B,C,D,E){var F=0;var G="

    ";var H="

    ";var I="
    ";if (C){G="
  • ";H="
  • ";F=1;};while (D&&D!=A.FCK.EditorDocument.body){if (D.tagName.toLowerCase()=='p'){F=1;break;};D=D.parentNode;};for (var i=0;i0) return A[A.length-1];return null;};FCKTools.GetDocumentPosition=function(w,A){var x=0;var y=0;var B=A;var C=null;var D=FCKTools.GetElementWindow(B);while (B&&!(D==w&&(B==w.document.body||B==w.document.documentElement))){x+=B.offsetLeft-B.scrollLeft;y+=B.offsetTop-B.scrollTop;if (!FCKBrowserInfo.IsOpera){var E=C;while (E&&E!=B){x-=E.scrollLeft;y-=E.scrollTop;E=E.parentNode;}};C=B;if (B.offsetParent) B=B.offsetParent;else{if (D!=w){B=D.frameElement;C=null;if (B) D=B.contentWindow.parent;}else B=null;}};if (FCKDomTools.GetCurrentElementStyle(w.document.body,'position')!='static'||(FCKBrowserInfo.IsIE&&FCKDomTools.GetPositionedAncestor(A)==null)){x+=w.document.body.offsetLeft;y+=w.document.body.offsetTop;};return { "x":x,"y":y };};FCKTools.GetWindowPosition=function(w,A){var B=this.GetDocumentPosition(w,A);var C=FCKTools.GetScrollPosition(w);B.x-=C.X;B.y-=C.Y;return B;};FCKTools.ProtectFormStyles=function(A){if (!A||A.nodeType!=1||A.tagName.toLowerCase()!='form') return [];var B=[];var C=['style','className'];for (var i=0;i0){for (var i=B.length-1;i>=0;i--){var C=B[i][0];var D=B[i][1];if (D) A.insertBefore(C,D);else A.appendChild(C);}}};FCKTools.GetNextNode=function(A,B){if (A.firstChild) return A.firstChild;else if (A.nextSibling) return A.nextSibling;else{var C=A.parentNode;while (C){if (C==B) return null;if (C.nextSibling) return C.nextSibling;else C=C.parentNode;}};return null;};FCKTools.GetNextTextNode=function(A,B,C){node=this.GetNextNode(A,B);if (C&&node&&C(node)) return null;while (node&&node.nodeType!=3){node=this.GetNextNode(node,B);if (C&&node&&C(node)) return null;};return node;};FCKTools.Merge=function(){var A=arguments;var o=A[0];for (var i=1;i');document.domain = '"+FCK_RUNTIME_DOMAIN+"';document.close();}() ) ;";if (FCKBrowserInfo.IsIE){if (FCKBrowserInfo.IsIE7||!FCKBrowserInfo.IsIE6) return "";else return "javascript: '';";};return "javascript: void(0);";}; +FCKTools.CancelEvent=function(e){return false;};FCKTools._AppendStyleSheet=function(A,B){return A.createStyleSheet(B).owningElement;};FCKTools.AppendStyleString=function(A,B){if (!B) return null;var s=A.createStyleSheet("");s.cssText=B;return s;};FCKTools.ClearElementAttributes=function(A){A.clearAttributes();};FCKTools.GetAllChildrenIds=function(A){var B=[];for (var i=0;i0) B[B.length]=C;};return B;};FCKTools.RemoveOuterTags=function(e){e.insertAdjacentHTML('beforeBegin',e.innerHTML);e.parentNode.removeChild(e);};FCKTools.CreateXmlObject=function(A){var B;switch (A){case 'XmlHttp':try { return new XMLHttpRequest();} catch (e) {};B=['MSXML2.XmlHttp','Microsoft.XmlHttp'];break;case 'DOMDocument':B=['MSXML2.DOMDocument','Microsoft.XmlDom'];break;};for (var i=0;i<2;i++){try { return new ActiveXObject(B[i]);}catch (e){}};if (FCKLang.NoActiveX){alert(FCKLang.NoActiveX);FCKLang.NoActiveX=null;};return null;};FCKTools.DisableSelection=function(A){A.unselectable='on';var e,i=0;while ((e=A.all[i++])){switch (e.tagName){case 'IFRAME':case 'TEXTAREA':case 'INPUT':case 'SELECT':break;default:e.unselectable='on';}}};FCKTools.GetScrollPosition=function(A){var B=A.document;var C={ X:B.documentElement.scrollLeft,Y:B.documentElement.scrollTop };if (C.X>0||C.Y>0) return C;return { X:B.body.scrollLeft,Y:B.body.scrollTop };};FCKTools.AddEventListener=function(A,B,C){A.attachEvent('on'+B,C);};FCKTools.RemoveEventListener=function(A,B,C){A.detachEvent('on'+B,C);};FCKTools.AddEventListenerEx=function(A,B,C,D){var o={};o.Source=A;o.Params=D||[];o.Listener=function(ev){return C.apply(o.Source,[ev].concat(o.Params));};if (FCK.IECleanup) FCK.IECleanup.AddItem(null,function() { o.Source=null;o.Params=null;});A.attachEvent('on'+B,o.Listener);A=null;D=null;};FCKTools.GetViewPaneSize=function(A){var B;var C=A.document.documentElement;if (C&&C.clientWidth) B=C;else B=A.document.body;if (B) return { Width:B.clientWidth,Height:B.clientHeight };else return { Width:0,Height:0 };};FCKTools.SaveStyles=function(A){var B=FCKTools.ProtectFormStyles(A);var C={};if (A.className.length>0){C.Class=A.className;A.className='';};var D=A.style.cssText;if (D.length>0){C.Inline=D;A.style.cssText='';};FCKTools.RestoreFormStyles(A,B);return C;};FCKTools.RestoreStyles=function(A,B){var C=FCKTools.ProtectFormStyles(A);A.className=B.Class||'';A.style.cssText=B.Inline||'';FCKTools.RestoreFormStyles(A,C);};FCKTools.RegisterDollarFunction=function(A){A.$=A.document.getElementById;};FCKTools.AppendElement=function(A,B){return A.appendChild(this.GetElementDocument(A).createElement(B));};FCKTools.ToLowerCase=function(A){return A.toLowerCase();}; +var FCKeditorAPI;function InitializeAPI(){var A=window.parent;if (!(FCKeditorAPI=A.FCKeditorAPI)){var B='window.FCKeditorAPI = {Version : "2.6",VersionBuild : "18638",Instances : new Object(),GetInstance : function( name ){return this.Instances[ name ];},_FormSubmit : function(){for ( var name in FCKeditorAPI.Instances ){var oEditor = FCKeditorAPI.Instances[ name ] ;if ( oEditor.GetParentForm && oEditor.GetParentForm() == this )oEditor.UpdateLinkedField() ;}this._FCKOriginalSubmit() ;},_FunctionQueue : {Functions : new Array(),IsRunning : false,Add : function( f ){this.Functions.push( f );if ( !this.IsRunning )this.StartNext();},StartNext : function(){var aQueue = this.Functions ;if ( aQueue.length > 0 ){this.IsRunning = true;aQueue[0].call();}else this.IsRunning = false;},Remove : function( f ){var aQueue = this.Functions;var i = 0, fFunc;while( (fFunc = aQueue[ i ]) ){if ( fFunc == f )aQueue.splice( i,1 );i++ ;}this.StartNext();}}}';if (A.execScript) A.execScript(B,'JavaScript');else{if (FCKBrowserInfo.IsGecko10){eval.call(A,B);}else if(FCKBrowserInfo.IsAIR){FCKAdobeAIR.FCKeditorAPI_Evaluate(A,B);}else if (FCKBrowserInfo.IsSafari||FCKBrowserInfo.IsGecko19){var C=A.document;var D=C.createElement('script');D.appendChild(C.createTextNode(B));C.documentElement.appendChild(D);}else A.eval(B);};FCKeditorAPI=A.FCKeditorAPI;FCKeditorAPI.__Instances=FCKeditorAPI.Instances;};FCKeditorAPI.Instances[FCK.Name]=FCK;};function _AttachFormSubmitToAPI(){var A=FCK.GetParentForm();if (A){FCKTools.AddEventListener(A,'submit',FCK.UpdateLinkedField);if (!A._FCKOriginalSubmit&&(typeof(A.submit)=='function'||(!A.submit.tagName&&!A.submit.length))){A._FCKOriginalSubmit=A.submit;A.submit=FCKeditorAPI._FormSubmit;}}};function FCKeditorAPI_Cleanup(){if (!window.FCKUnloadFlag) return;delete FCKeditorAPI.Instances[FCK.Name];};function FCKeditorAPI_ConfirmCleanup(){window.FCKUnloadFlag=true;};FCKTools.AddEventListener(window,'unload',FCKeditorAPI_Cleanup);FCKTools.AddEventListener(window,'beforeunload',FCKeditorAPI_ConfirmCleanup); +var FCKImagePreloader=function(){this._Images=[];};FCKImagePreloader.prototype={AddImages:function(A){if (typeof(A)=='string') A=A.split(';');this._Images=this._Images.concat(A);},Start:function(){var A=this._Images;this._PreloadCount=A.length;for (var i=0;i]*\>)/i,AfterBody:/(\<\/body\>[\s\S]*$)/i,ToReplace:/___fcktoreplace:([\w]+)/ig,MetaHttpEquiv:/http-equiv\s*=\s*["']?([^"' ]+)/i,HasBaseTag:/]/i,HtmlOpener:/]*>/i,HeadOpener:/]*>/i,HeadCloser:/<\/head\s*>/i,FCK_Class:/\s*FCK__[^ ]*(?=\s+|$)/,ElementName:/(^[a-z_:][\w.\-:]*\w$)|(^[a-z_]$)/,ForceSimpleAmpersand:/___FCKAmp___/g,SpaceNoClose:/\/>/g,EmptyParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>\s*(<\/\1>)?$/,EmptyOutParagraph:/^<(p|div|address|h\d|center)(?=[ >])[^>]*>(?:\s*| )(<\/\1>)?$/,TagBody:/>]+))/gi,ProtectUrlsA:/]+))/gi,ProtectUrlsArea:/]+))/gi,Html4DocType:/HTML 4\.0 Transitional/i,DocTypeTag:/]*>/i,TagsWithEvent:/<[^\>]+ on\w+[\s\r\n]*=[\s\r\n]*?('|")[\s\S]+?\>/g,EventAttributes:/\s(on\w+)[\s\r\n]*=[\s\r\n]*?('|")([\s\S]*?)\2/g,ProtectedEvents:/\s\w+_fckprotectedatt="([^"]+)"/g,StyleProperties:/\S+\s*:/g,InvalidSelfCloseTags:/(<(?!base|meta|link|hr|br|param|img|area|input)([a-zA-Z0-9:]+)[^>]*)\/>/gi,StyleVariableAttName:/#\(\s*("|')(.+?)\1[^\)]*\s*\)/g,RegExp:/^\/(.*)\/([gim]*)$/,HtmlTag:/<[^\s<>](?:"[^"]*"|'[^']*'|[^<])*>/}; +var FCKListsLib={BlockElements:{ address:1,blockquote:1,center:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,marquee:1,noscript:1,ol:1,p:1,pre:1,script:1,table:1,ul:1 },NonEmptyBlockElements:{ p:1,div:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,address:1,pre:1,ol:1,ul:1,li:1,td:1,th:1 },InlineChildReqElements:{ abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },InlineNonEmptyElements:{ a:1,abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },EmptyElements:{ base:1,col:1,meta:1,link:1,hr:1,br:1,param:1,img:1,area:1,input:1 },PathBlockElements:{ address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,de:1 },PathBlockLimitElements:{ body:1,div:1,td:1,th:1,caption:1,form:1 },StyleBlockElements:{ address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1 },StyleObjectElements:{ img:1,hr:1,li:1,table:1,tr:1,td:1,embed:1,object:1,ol:1,ul:1 },NonEditableElements:{ button:1,option:1,script:1,iframe:1,textarea:1,object:1,embed:1,map:1,applet:1 },BlockBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1 },ListBoundaries:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,address:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1,table:1,thead:1,tbody:1,tfoot:1,tr:1,th:1,td:1,caption:1,col:1,colgroup:1,blockquote:1,body:1,br:1 }}; +var FCKLanguageManager=FCK.Language={AvailableLanguages:{af:'Afrikaans',ar:'Arabic',bg:'Bulgarian',bn:'Bengali/Bangla',bs:'Bosnian',ca:'Catalan',cs:'Czech',da:'Danish',de:'German',el:'Greek',en:'English','en-au':'English (Australia)','en-ca':'English (Canadian)','en-uk':'English (United Kingdom)',eo:'Esperanto',es:'Spanish',et:'Estonian',eu:'Basque',fa:'Persian',fi:'Finnish',fo:'Faroese',fr:'French','fr-ca':'French (Canada)',gl:'Galician',he:'Hebrew',hi:'Hindi',hr:'Croatian',hu:'Hungarian',it:'Italian',ja:'Japanese',km:'Khmer',ko:'Korean',lt:'Lithuanian',lv:'Latvian',mn:'Mongolian',ms:'Malay',nb:'Norwegian Bokmal',nl:'Dutch',no:'Norwegian',pl:'Polish',pt:'Portuguese (Portugal)','pt-br':'Portuguese (Brazil)',ro:'Romanian',ru:'Russian',sk:'Slovak',sl:'Slovenian',sr:'Serbian (Cyrillic)','sr-latn':'Serbian (Latin)',sv:'Swedish',th:'Thai',tr:'Turkish',uk:'Ukrainian',vi:'Vietnamese',zh:'Chinese Traditional','zh-cn':'Chinese Simplified'},GetActiveLanguage:function(){if (FCKConfig.AutoDetectLanguage){var A;if (navigator.userLanguage) A=navigator.userLanguage.toLowerCase();else if (navigator.language) A=navigator.language.toLowerCase();else{return FCKConfig.DefaultLanguage;};if (A.length>=5){A=A.substr(0,5);if (this.AvailableLanguages[A]) return A;};if (A.length>=2){A=A.substr(0,2);if (this.AvailableLanguages[A]) return A;}};return this.DefaultLanguage;},TranslateElements:function(A,B,C,D){var e=A.getElementsByTagName(B);var E,s;for (var i=0;i0) C+='|'+FCKConfig.AdditionalNumericEntities;FCKXHtmlEntities.EntitiesRegex=new RegExp(C,'g');}; +var FCKXHtml={};FCKXHtml.CurrentJobNum=0;FCKXHtml.GetXHTML=function(A,B,C){FCKDomTools.CheckAndRemovePaddingNode(FCKTools.GetElementDocument(A),FCKConfig.EnterMode);FCKXHtmlEntities.Initialize();this._NbspEntity=(FCKConfig.ProcessHTMLEntities?'nbsp':'#160');var D=FCK.IsDirty();FCKXHtml.SpecialBlocks=[];this.XML=FCKTools.CreateXmlObject('DOMDocument');this.MainNode=this.XML.appendChild(this.XML.createElement('xhtml'));FCKXHtml.CurrentJobNum++;if (B) this._AppendNode(this.MainNode,A);else this._AppendChildNodes(this.MainNode,A,false);var E=this._GetMainXmlString();this.XML=null;if (FCKBrowserInfo.IsSafari) E=E.replace(/^/,'');E=E.substr(7,E.length-15).Trim();E=E.replace(FCKRegexLib.SpaceNoClose,' />');if (FCKConfig.ForceSimpleAmpersand) E=E.replace(FCKRegexLib.ForceSimpleAmpersand,'&');if (C) E=FCKCodeFormatter.Format(E);for (var i=0;i0;if (C) A.appendChild(this.XML.createTextNode(B.replace(FCKXHtmlEntities.EntitiesRegex,FCKXHtml_GetEntity)));return C;};function FCKXHtml_GetEntity(A){var B=FCKXHtmlEntities.Entities[A]||('#'+A.charCodeAt(0));return '#?-:'+B+';';};FCKXHtml.TagProcessors={a:function(A,B){if (B.innerHTML.Trim().length==0&&!B.name) return false;var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);};A=FCKXHtml._AppendChildNodes(A,B,false);return A;},area:function(A,B){var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){if (!A.attributes.getNamedItem('coords')){var D=B.getAttribute('coords',2);if (D&&D!='0,0,0') FCKXHtml._AppendAttribute(A,'coords',D);};if (!A.attributes.getNamedItem('shape')){var E=B.getAttribute('shape',2);if (E&&E.length>0) FCKXHtml._AppendAttribute(A,'shape',E.toLowerCase());}};return A;},body:function(A,B){A=FCKXHtml._AppendChildNodes(A,B,false);A.removeAttribute('spellcheck');return A;},iframe:function(A,B){var C=B.innerHTML;if (FCKBrowserInfo.IsGecko) C=FCKTools.HTMLDecode(C);C=C.replace(/\s_fcksavedurl="[^"]*"/g,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},img:function(A,B){if (!A.attributes.getNamedItem('alt')) FCKXHtml._AppendAttribute(A,'alt','');var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'src',C);return A;},li:function(A,B,C){if (C.nodeName.IEquals(['ul','ol'])) return FCKXHtml._AppendChildNodes(A,B,true);var D=FCKXHtml.XML.createElement('ul');B._fckxhtmljob=null;do{FCKXHtml._AppendNode(D,B);do{B=FCKDomTools.GetNextSibling(B);} while (B&&B.nodeType==3&&B.nodeValue.Trim().length==0)} while (B&&B.nodeName.toLowerCase()=='li') return D;},ol:function(A,B,C){if (B.innerHTML.Trim().length==0) return false;var D=C.lastChild;if (D&&D.nodeType==3) D=D.previousSibling;if (D&&D.nodeName.toUpperCase()=='LI'){B._fckxhtmljob=null;FCKXHtml._AppendNode(D,B);return false;};A=FCKXHtml._AppendChildNodes(A,B);return A;},pre:function (A,B){var C=B.firstChild;if (C&&C.nodeType==3) A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem('\r\n')));FCKXHtml._AppendChildNodes(A,B,true);return A;},script:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/javascript');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.text)));return A;},span:function(A,B){if (B.innerHTML.length==0) return false;A=FCKXHtml._AppendChildNodes(A,B,false);return A;},style:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/css');var C=B.innerHTML;if (FCKBrowserInfo.IsIE) C=C.replace(/^(\r\n|\n|\r)/,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;},title:function(A,B){A.appendChild(FCKXHtml.XML.createTextNode(FCK.EditorDocument.title));return A;}};FCKXHtml.TagProcessors.ul=FCKXHtml.TagProcessors.ol; +FCKXHtml._GetMainXmlString=function(){return this.MainNode.xml;};FCKXHtml._AppendAttributes=function(A,B,C,D){var E=B.attributes;for (var n=0;n0) FCKXHtml._AppendAttribute(A,'align',B.align);A=FCKXHtml._AppendChildNodes(A,B,true);return A;};FCKXHtml.TagProcessors['font']=function(A,B){if (A.attributes.length==0) A=FCKXHtml.XML.createDocumentFragment();A=FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['form']=function(A,B){if (B.acceptCharset&&B.acceptCharset.length>0&&B.acceptCharset!='UNKNOWN') FCKXHtml._AppendAttribute(A,'accept-charset',B.acceptCharset);var C=B.attributes['name'];if (C&&C.value.length>0) FCKXHtml._AppendAttribute(A,'name',C.value);A=FCKXHtml._AppendChildNodes(A,B,true);return A;};FCKXHtml.TagProcessors['input']=function(A,B){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);if (B.value&&!A.attributes.getNamedItem('value')) FCKXHtml._AppendAttribute(A,'value',B.value);if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text');return A;};FCKXHtml.TagProcessors['label']=function(A,B){if (B.htmlFor.length>0) FCKXHtml._AppendAttribute(A,'for',B.htmlFor);A=FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['map']=function(A,B){if (!A.attributes.getNamedItem('name')){var C=B.name;if (C) FCKXHtml._AppendAttribute(A,'name',C);};A=FCKXHtml._AppendChildNodes(A,B,true);return A;};FCKXHtml.TagProcessors['meta']=function(A,B){var C=A.attributes.getNamedItem('http-equiv');if (C==null||C.value.length==0){var D=B.outerHTML.match(FCKRegexLib.MetaHttpEquiv);if (D){D=D[1];FCKXHtml._AppendAttribute(A,'http-equiv',D);}};return A;};FCKXHtml.TagProcessors['option']=function(A,B){if (B.selected&&!A.attributes.getNamedItem('selected')) FCKXHtml._AppendAttribute(A,'selected','selected');A=FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['textarea']=FCKXHtml.TagProcessors['select']=function(A,B){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);A=FCKXHtml._AppendChildNodes(A,B);return A;}; +var FCKCodeFormatter={};FCKCodeFormatter.Init=function(){var A=this.Regex={};A.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;A.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;A.NewLineTags=/\<(BR|HR)[^\>]*\>/gi;A.MainTags=/\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi;A.LineSplitter=/\s*\n+\s*/g;A.IncreaseIndent=/^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \/\>]/i;A.DecreaseIndent=/^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \>]/i;A.FormatIndentatorRemove=new RegExp('^'+FCKConfig.FormatIndentator);A.ProtectedTags=/(]*>)([\s\S]*?)(<\/PRE>)/gi;};FCKCodeFormatter._ProtectData=function(A,B,C,D){return B+'___FCKpd___'+FCKCodeFormatter.ProtectedData.AddItem(C)+D;};FCKCodeFormatter.Format=function(A){if (!this.Regex) this.Init();FCKCodeFormatter.ProtectedData=[];var B=A.replace(this.Regex.ProtectedTags,FCKCodeFormatter._ProtectData);B=B.replace(this.Regex.BlocksOpener,'\n$&');B=B.replace(this.Regex.BlocksCloser,'$&\n');B=B.replace(this.Regex.NewLineTags,'$&\n');B=B.replace(this.Regex.MainTags,'\n$&\n');var C='';var D=B.split(this.Regex.LineSplitter);B='';for (var i=0;iB[i]) return 1;};if (A.lengthB.length) return 1;return 0;};FCKUndo._CheckIsBookmarksEqual=function(A,B){if (!(A&&B)) return false;if (FCKBrowserInfo.IsIE){var C=A[1].search(A[0].StartId);var D=B[1].search(B[0].StartId);var E=A[1].search(A[0].EndId);var F=B[1].search(B[0].EndId);return C==D&&E==F;}else{return this._CompareCursors(A.Start,B.Start)==0&&this._CompareCursors(A.End,B.End)==0;}};FCKUndo.SaveUndoStep=function(){if (FCK.EditMode!=0||this.SaveLocked) return;if (this.SavedData.length) this.Changed=true;var A=FCK.EditorDocument.body.innerHTML;var B=this._GetBookmark();this.SavedData=this.SavedData.slice(0,this.CurrentIndex+1);if (this.CurrentIndex>0&&A==this.SavedData[this.CurrentIndex][0]&&this._CheckIsBookmarksEqual(B,this.SavedData[this.CurrentIndex][1])) return;else if (this.CurrentIndex==0&&this.SavedData.length&&A==this.SavedData[0][0]){this.SavedData[0][1]=B;return;};if (this.CurrentIndex+1>=FCKConfig.MaxUndoLevels) this.SavedData.shift();else this.CurrentIndex++;this.SavedData[this.CurrentIndex]=[A,B];FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.CheckUndoState=function(){return (this.Changed||this.CurrentIndex>0);};FCKUndo.CheckRedoState=function(){return (this.CurrentIndex<(this.SavedData.length-1));};FCKUndo.Undo=function(){if (this.CheckUndoState()){if (this.CurrentIndex==(this.SavedData.length-1)){this.SaveUndoStep();};this._ApplyUndoLevel(--this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo.Redo=function(){if (this.CheckRedoState()){this._ApplyUndoLevel(++this.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo._ApplyUndoLevel=function(A){var B=this.SavedData[A];if (!B) return;if (FCKBrowserInfo.IsIE){if (B[1]&&B[1][1]) FCK.SetInnerHtml(B[1][1]);else FCK.SetInnerHtml(B[0]);}else FCK.EditorDocument.body.innerHTML=B[0];this._SelectBookmark(B[1]);this.TypesCount=0;this.Changed=false;this.Typing=false;}; +var FCKEditingArea=function(A){this.TargetElement=A;this.Mode=0;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKEditingArea_Cleanup);};FCKEditingArea.prototype.Start=function(A,B){var C=this.TargetElement;var D=FCKTools.GetElementDocument(C);while(C.firstChild) C.removeChild(C.firstChild);if (this.Mode==0){if (FCK_IS_CUSTOM_DOMAIN) A=''+A;if (FCKBrowserInfo.IsIE) A=A.replace(/(]*?)\s*\/?>(?!\s*<\/base>)/gi,'$1>');else if (!B){var E=A.match(FCKRegexLib.BeforeBody);var F=A.match(FCKRegexLib.AfterBody);if (E&&F){var G=A.substr(E[1].length,A.length-E[1].length-F[1].length);A=E[1]+' '+F[1];if (FCKBrowserInfo.IsGecko&&(G.length==0||FCKRegexLib.EmptyParagraph.test(G))) G='
    ';this._BodyHTML=G;}else this._BodyHTML=A;};var H=this.IFrame=D.createElement('iframe');var I='';H.frameBorder=0;H.width=H.height='100%';if (FCK_IS_CUSTOM_DOMAIN&&FCKBrowserInfo.IsIE){window._FCKHtmlToLoad=I+A;H.src='javascript:void( (function(){document.open() ;document.domain="'+document.domain+'" ;document.write( window.parent._FCKHtmlToLoad );document.close() ;window.parent._FCKHtmlToLoad = null ;})() )';}else if (!FCKBrowserInfo.IsGecko){H.src='javascript:void(0)';};C.appendChild(H);this.Window=H.contentWindow;if (!FCK_IS_CUSTOM_DOMAIN||!FCKBrowserInfo.IsIE){var J=this.Window.document;J.open();J.write(I+A);J.close();};if (FCKBrowserInfo.IsAIR) FCKAdobeAIR.EditingArea_Start(J,A);if (FCKBrowserInfo.IsGecko10&&!B){this.Start(A,true);return;};if (H.readyState&&H.readyState!='completed'){var K=this;(H.onreadystatechange=function(){if (H.readyState=='complete'){H.onreadystatechange=null;K.Window._FCKEditingArea=K;FCKEditingArea_CompleteStart.call(K.Window);}})();}else{this.Window._FCKEditingArea=this;if (FCKBrowserInfo.IsGecko10) this.Window.setTimeout(FCKEditingArea_CompleteStart,500);else FCKEditingArea_CompleteStart.call(this.Window);}}else{var L=this.Textarea=D.createElement('textarea');L.className='SourceField';L.dir='ltr';FCKDomTools.SetElementStyles(L,{width:'100%',height:'100%',border:'none',resize:'none',outline:'none'});C.appendChild(L);L.value=A;FCKTools.RunFunction(this.OnLoad);}};function FCKEditingArea_CompleteStart(){if (!this.document.body){this.setTimeout(FCKEditingArea_CompleteStart,50);return;};var A=this._FCKEditingArea;A.Document=A.Window.document;A.MakeEditable();FCKTools.RunFunction(A.OnLoad);};FCKEditingArea.prototype.MakeEditable=function(){var A=this.Document;if (FCKBrowserInfo.IsIE){A.body.disabled=true;A.body.contentEditable=true;A.body.removeAttribute("disabled");}else{try{A.body.spellcheck=(this.FFSpellChecker!==false);if (this._BodyHTML){A.body.innerHTML=this._BodyHTML;this._BodyHTML=null;};A.designMode='on';A.execCommand('enableObjectResizing',false,!FCKConfig.DisableObjectResizing);A.execCommand('enableInlineTableEditing',false,!FCKConfig.DisableFFTableHandles);}catch (e){FCKTools.AddEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);}}};function FCKEditingArea_Document_AttributeNodeModified(A){var B=A.currentTarget.contentWindow._FCKEditingArea;if (B._timer) window.clearTimeout(B._timer);B._timer=FCKTools.SetTimeout(FCKEditingArea_MakeEditableByMutation,1000,B);};function FCKEditingArea_MakeEditableByMutation(){delete this._timer;FCKTools.RemoveEventListener(this.Window.frameElement,'DOMAttrModified',FCKEditingArea_Document_AttributeNodeModified);this.MakeEditable();};FCKEditingArea.prototype.Focus=function(){try{if (this.Mode==0){if (FCKBrowserInfo.IsIE) this._FocusIE();else this.Window.focus();}else{var A=FCKTools.GetElementDocument(this.Textarea);if ((!A.hasFocus||A.hasFocus())&&A.activeElement==this.Textarea) return;this.Textarea.focus();}}catch(e) {}};FCKEditingArea.prototype._FocusIE=function(){this.Document.body.setActive();this.Window.focus();var A=this.Document.selection.createRange();var B=A.parentElement();var C=B.nodeName.toLowerCase();if (B.childNodes.length>0||!(FCKListsLib.BlockElements[C]||FCKListsLib.NonEmptyBlockElements[C])){return;};A=new FCKDomRange(this.Window);A.MoveToElementEditStart(B);A.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;}}; +var FCKKeystrokeHandler=function(A){this.Keystrokes={};this.CancelCtrlDefaults=(A!==false);};FCKKeystrokeHandler.prototype.AttachToElement=function(A){FCKTools.AddEventListenerEx(A,'keydown',_FCKKeystrokeHandler_OnKeyDown,this);if (FCKBrowserInfo.IsGecko10||FCKBrowserInfo.IsOpera||(FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac)) FCKTools.AddEventListenerEx(A,'keypress',_FCKKeystrokeHandler_OnKeyPress,this);};FCKKeystrokeHandler.prototype.SetKeystrokes=function(){for (var i=0;i40))){B._CancelIt=true;if (A.preventDefault) return A.preventDefault();A.returnValue=false;A.cancelBubble=true;return false;};return true;};function _FCKKeystrokeHandler_OnKeyPress(A,B){if (B._CancelIt){if (A.preventDefault) return A.preventDefault();return false;};return true;}; +FCK.DTD=(function(){var X=FCKTools.Merge;var A,L,J,M,N,O,D,H,P,K,Q,F,G,C,B,E,I;A={isindex:1,fieldset:1};B={input:1,button:1,select:1,textarea:1,label:1};C=X({a:1},B);D=X({iframe:1},C);E={hr:1,ul:1,menu:1,div:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1};F={ins:1,del:1,script:1};G=X({b:1,acronym:1,bdo:1,'var':1,'#':1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1},F);H=X({sub:1,img:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1},G);I=X({p:1},H);J=X({iframe:1},H,B);K={img:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,'#':1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,'var':1,div:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1};L=X({a:1},J);M={tr:1};N={'#':1};O=X({param:1},K);P=X({form:1},A,D,E,I);Q={li:1};return {col:{},tr:{td:1,th:1},img:{},colgroup:{col:1},noscript:P,td:P,br:{},th:P,center:P,kbd:L,button:X(I,E),basefont:{},h5:L,h4:L,samp:L,h6:L,ol:Q,h1:L,h3:L,option:N,h2:L,form:X(A,D,E,I),select:{optgroup:1,option:1},font:J,ins:P,menu:Q,abbr:L,label:L,table:{thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1},code:L,script:N,tfoot:M,cite:L,li:P,input:{},iframe:P,strong:J,textarea:N,noframes:P,big:J,small:J,span:J,hr:{},dt:L,sub:J,optgroup:{option:1},param:{},bdo:L,'var':J,div:P,object:O,sup:J,dd:P,strike:J,area:{},dir:Q,map:X({area:1,form:1,p:1},A,F,E),applet:O,dl:{dt:1,dd:1},del:P,isindex:{},fieldset:X({legend:1},K),thead:M,ul:Q,acronym:L,b:J,a:J,blockquote:P,caption:L,i:J,u:J,tbody:M,s:L,address:X(D,I),tt:J,legend:L,q:L,pre:X(G,C),p:L,em:J,dfn:L};})(); +var FCKStyle=function(A){this.Element=(A.Element||'span').toLowerCase();this._StyleDesc=A;};FCKStyle.prototype={GetType:function(){var A=this.GetType_$;if (A!=undefined) return A;var B=this.Element;if (B=='#'||FCKListsLib.StyleBlockElements[B]) A=0;else if (FCKListsLib.StyleObjectElements[B]) A=2;else A=1;return (this.GetType_$=A);},ApplyToSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.ApplyToRange(B,true);},ApplyToRange:function(A,B,C){switch (this.GetType()){case 0:this.ApplyToRange=this._ApplyBlockStyle;break;case 1:this.ApplyToRange=this._ApplyInlineStyle;break;default:return;};this.ApplyToRange(A,B,C);},ApplyToObject:function(A){if (!A) return;this.BuildElement(null,A);},RemoveFromSelection:function(A){var B=new FCKDomRange(A);B.MoveToSelection();this.RemoveFromRange(B,true);},RemoveFromRange:function(A,B,C){var D;var E=this._GetAttribsForComparison();var F=this._GetOverridesForComparison();if (A.CheckIsCollapsed()){var D=A.CreateBookmark(true);var H=A.GetBookmarkNode(D,true);var I=new FCKElementPath(H.parentNode);var J=[];var K=!FCKDomTools.GetNextSibling(H);var L=K||!FCKDomTools.GetPreviousSibling(H);var M;var N=-1;for (var i=0;i=0;i--){var E=D[i];for (var F in B){if (FCKDomTools.HasAttribute(E,F)){switch (F){case 'style':this._RemoveStylesFromElement(E);break;case 'class':if (FCKDomTools.GetAttributeValue(E,F)!=this.GetFinalAttributeValue(F)) continue;default:FCKDomTools.RemoveAttribute(E,F);}}};this._RemoveOverrides(E,C[this.Element]);this._RemoveNoAttribElement(E);};for (var G in C){if (G!=this.Element){D=A.getElementsByTagName(G);for (var i=D.length-1;i>=0;i--){var E=D[i];this._RemoveOverrides(E,C[G]);this._RemoveNoAttribElement(E);}}}},_RemoveStylesFromElement:function(A){var B=A.style.cssText;var C=this.GetFinalStyleValue();if (B.length>0&&C.length==0) return;C='(^|;)\\s*('+C.replace(/\s*([^ ]+):.*?(;|$)/g,'$1|').replace(/\|$/,'')+'):[^;]+';var D=new RegExp(C,'gi');B=B.replace(D,'').Trim();if (B.length==0||B==';') FCKDomTools.RemoveAttribute(A,'style');else A.style.cssText=B.replace(D,'');},_RemoveOverrides:function(A,B){var C=B&&B.Attributes;if (C){for (var i=0;i0) C.style.cssText=this.GetFinalStyleValue();return C;},_CompareAttributeValues:function(A,B,C){if (A=='style'&&B&&C){B=B.replace(/;$/,'').toLowerCase();C=C.replace(/;$/,'').toLowerCase();};return (B==C||((B===null||B==='')&&(C===null||C==='')))},GetFinalAttributeValue:function(A){var B=this._StyleDesc.Attributes;var B=B?B[A]:null;if (!B&&A=='style') return this.GetFinalStyleValue();if (B&&this._Variables) B=B.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);return B;},GetFinalStyleValue:function(){var A=this._GetStyleText();if (A.length>0&&this._Variables){A=A.Replace(FCKRegexLib.StyleVariableAttName,this._GetVariableReplace,this);A=FCKTools.NormalizeCssText(A);};return A;},_GetVariableReplace:function(){return this._Variables[arguments[2]]||arguments[0];},SetVariable:function(A,B){var C=this._Variables;if (!C) C=this._Variables={};this._Variables[A]=B;},_FromPre:function(A,B,C){var D=B.innerHTML;D=D.replace(/(\r\n|\r)/g,'\n');D=D.replace(/^[ \t]*\n/,'');D=D.replace(/\n$/,'');D=D.replace(/^[ \t]+|[ \t]+$/g,function(match,offset,s){if (match.length==1) return ' ';else if (offset==0) return new Array(match.length).join(' ')+' ';else return ' '+new Array(match.length).join(' ');});var E=new FCKHtmlIterator(D);var F=[];E.Each(function(isTag,value){if (!isTag){value=value.replace(/\n/g,'
    ');value=value.replace(/[ \t]{2,}/g,function (match){return new Array(match.length).join(' ')+' ';});};F.push(value);});C.innerHTML=F.join('');return C;},_ToPre:function(A,B,C){var D=B.innerHTML.Trim();D=D.replace(/[ \t\r\n]*(]*>)[ \t\r\n]*/gi,'
    ');var E=new FCKHtmlIterator(D);var F=[];E.Each(function(isTag,value){if (!isTag) value=value.replace(/([ \t\n\r]+| )/g,' ');else if (isTag&&value=='
    ') value='\n';F.push(value);});if (FCKBrowserInfo.IsIE){var G=A.createElement('div');G.appendChild(C);C.outerHTML='
    \n'+F.join('')+'
    ';C=G.removeChild(G.firstChild);}else C.innerHTML=F.join('');return C;},_ApplyBlockStyle:function(A,B,C){var D;if (B) D=A.CreateBookmark();var E=new FCKDomRangeIterator(A);E.EnforceRealBlocks=true;var F;var G=A.Window.document;var H=[];var I=[];while((F=E.GetNextParagraph())){var J=this.BuildElement(G);var K=J.nodeName.IEquals('pre');var L=F.nodeName.IEquals('pre');if (K&&!L){J=this._ToPre(G,F,J);H.push(J);}else if (!K&&L){J=this._FromPre(G,F,J);I.push(J);}else FCKDomTools.MoveChildren(F,J);F.parentNode.insertBefore(J,F);FCKDomTools.RemoveNode(F);};for (var i=0;i0){A.InsertNode(I);this.RemoveFromElement(I);this._MergeSiblings(I,this._GetAttribsForComparison());if (!FCKBrowserInfo.IsIE) I.normalize();};A.Release(true);}};this._FixBookmarkStart(K);if (B) A.SelectBookmark(J);if (C) A.MoveToBookmark(J);},_FixBookmarkStart:function(A){var B;while ((B=A.nextSibling)){if (B.nodeType==1&&FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){if (!B.firstChild) FCKDomTools.RemoveNode(B);else FCKDomTools.MoveNode(A,B,true);continue;};if (B.nodeType==3&&B.length==0){FCKDomTools.RemoveNode(B);continue;};break;}},_MergeSiblings:function(A,B){if (!A||A.nodeType!=1||!FCKListsLib.InlineNonEmptyElements[A.nodeName.toLowerCase()]) return;this._MergeNextSibling(A,B);this._MergePreviousSibling(A,B);},_MergeNextSibling:function(A,B){var C=A.nextSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.nextSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.lastChild;if (D) FCKDomTools.MoveNode(A.nextSibling,A);FCKDomTools.MoveChildren(C,A);FCKDomTools.RemoveNode(C);if (E) this._MergeNextSibling(E);}}},_MergePreviousSibling:function(A,B){var C=A.previousSibling;var D=(C&&C.nodeType==1&&C.getAttribute('_fck_bookmark'));if (D) C=C.previousSibling;if (C&&C.nodeType==1&&C.nodeName==A.nodeName){if (!B) B=this._CreateElementAttribsForComparison(A);if (this._CheckAttributesMatch(C,B)){var E=A.firstChild;if (D) FCKDomTools.MoveNode(A.previousSibling,A,true);FCKDomTools.MoveChildren(C,A,true);FCKDomTools.RemoveNode(C);if (E) this._MergePreviousSibling(E);}}},_GetStyleText:function(){var A=this._StyleDesc.Styles;var B=(this._StyleDesc.Attributes?this._StyleDesc.Attributes['style']||'':'');if (B.length>0) B+=';';for (var C in A) B+=C+':'+A[C]+';';if (B.length>0&&!(/#\(/.test(B))){B=FCKTools.NormalizeCssText(B);};return (this._GetStyleText=function() { return B;})();},_GetAttribsForComparison:function(){var A=this._GetAttribsForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Attributes;if (B){for (var C in B){A[C.toLowerCase()]=B[C].toLowerCase();}};if (this._GetStyleText().length>0){A['style']=this._GetStyleText().toLowerCase();};FCKTools.AppendLengthProperty(A,'_length');return (this._GetAttribsForComparison_$=A);},_GetOverridesForComparison:function(){var A=this._GetOverridesForComparison_$;if (A) return A;A={};var B=this._StyleDesc.Overrides;if (B){if (!FCKTools.IsArray(B)) B=[B];for (var i=0;i0) return true;};B=B.nextSibling;};return false;}}; +var FCKElementPath=function(A){var B=null;var C=null;var D=[];var e=A;while (e){if (e.nodeType==1){if (!this.LastElement) this.LastElement=e;var E=e.nodeName.toLowerCase();if (FCKBrowserInfo.IsIE&&e.scopeName!='HTML') E=e.scopeName.toLowerCase()+':'+E;if (!C){if (!B&&FCKListsLib.PathBlockElements[E]!=null) B=e;if (FCKListsLib.PathBlockLimitElements[E]!=null){if (!B&&E=='div'&&!FCKElementPath._CheckHasBlock(e)) B=e;else C=e;}};D.push(e);if (E=='body') break;};e=e.parentNode;};this.Block=B;this.BlockLimit=C;this.Elements=D;};FCKElementPath._CheckHasBlock=function(A){var B=A.childNodes;for (var i=0,count=B.length;i0){if (D.nodeType==3){var G=D.nodeValue.substr(0,E).Trim();if (G.length!=0) return A.IsStartOfBlock=false;}else F=D.childNodes[E-1];};if (!F) F=FCKDomTools.GetPreviousSourceNode(D,true,null,C);while (F){switch (F.nodeType){case 1:if (!FCKListsLib.InlineChildReqElements[F.nodeName.toLowerCase()]) return A.IsStartOfBlock=false;break;case 3:if (F.nodeValue.Trim().length>0) return A.IsStartOfBlock=false;};F=FCKDomTools.GetPreviousSourceNode(F,false,null,C);};return A.IsStartOfBlock=true;},CheckEndOfBlock:function(A){var B=this._Cache.IsEndOfBlock;if (B!=undefined) return B;var C=this.EndBlock||this.EndBlockLimit;var D=this._Range.endContainer;var E=this._Range.endOffset;var F;if (D.nodeType==3){var G=D.nodeValue;if (E0) return this._Cache.IsEndOfBlock=false;};F=FCKDomTools.GetNextSourceNode(F,false,null,C);};if (A) this.Select();return this._Cache.IsEndOfBlock=true;},CreateBookmark:function(A){var B={StartId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'S',EndId:(new Date()).valueOf()+Math.floor(Math.random()*1000)+'E'};var C=this.Window.document;var D;var E;var F;if (!this.CheckIsCollapsed()){E=C.createElement('span');E.style.display='none';E.id=B.EndId;E.setAttribute('_fck_bookmark',true);E.innerHTML=' ';F=this.Clone();F.Collapse(false);F.InsertNode(E);};D=C.createElement('span');D.style.display='none';D.id=B.StartId;D.setAttribute('_fck_bookmark',true);D.innerHTML=' ';F=this.Clone();F.Collapse(true);F.InsertNode(D);if (A){B.StartNode=D;B.EndNode=E;};if (E){this.SetStart(D,4);this.SetEnd(E,3);}else this.MoveToPosition(D,4);return B;},GetBookmarkNode:function(A,B){var C=this.Window.document;if (B) return A.StartNode||C.getElementById(A.StartId);else return A.EndNode||C.getElementById(A.EndId);},MoveToBookmark:function(A,B){var C=this.GetBookmarkNode(A,true);var D=this.GetBookmarkNode(A,false);this.SetStart(C,3);if (!B) FCKDomTools.RemoveNode(C);if (D){this.SetEnd(D,3);if (!B) FCKDomTools.RemoveNode(D);}else this.Collapse(true);this._UpdateElementInfo();},CreateBookmark2:function(){if (!this._Range) return { "Start":0,"End":0 };var A={"Start":[this._Range.startOffset],"End":[this._Range.endOffset]};var B=this._Range.startContainer.previousSibling;var C=this._Range.endContainer.previousSibling;var D=this._Range.startContainer;var E=this._Range.endContainer;while (B&&B.nodeType==3){A.Start[0]+=B.length;D=B;B=B.previousSibling;};while (C&&C.nodeType==3){A.End[0]+=C.length;E=C;C=C.previousSibling;};if (D.nodeType==1&&D.childNodes[A.Start[0]]&&D.childNodes[A.Start[0]].nodeType==3){var F=D.childNodes[A.Start[0]];var G=0;while (F.previousSibling&&F.previousSibling.nodeType==3){F=F.previousSibling;G+=F.length;};D=F;A.Start[0]=G;};if (E.nodeType==1&&E.childNodes[A.End[0]]&&E.childNodes[A.End[0]].nodeType==3){var F=E.childNodes[A.End[0]];var G=0;while (F.previousSibling&&F.previousSibling.nodeType==3){F=F.previousSibling;G+=F.length;};E=F;A.End[0]=G;};A.Start=FCKDomTools.GetNodeAddress(D,true).concat(A.Start);A.End=FCKDomTools.GetNodeAddress(E,true).concat(A.End);return A;},MoveToBookmark2:function(A){var B=FCKDomTools.GetNodeFromAddress(this.Window.document,A.Start.slice(0,-1),true);var C=FCKDomTools.GetNodeFromAddress(this.Window.document,A.End.slice(0,-1),true);this.Release(true);this._Range=new FCKW3CRange(this.Window.document);var D=A.Start[A.Start.length-1];var E=A.End[A.End.length-1];while (B.nodeType==3&&D>B.length){if (!B.nextSibling||B.nextSibling.nodeType!=3) break;D-=B.length;B=B.nextSibling;};while (C.nodeType==3&&E>C.length){if (!C.nextSibling||C.nextSibling.nodeType!=3) break;E-=C.length;C=C.nextSibling;};this._Range.setStart(B,D);this._Range.setEnd(C,E);this._UpdateElementInfo();},MoveToPosition:function(A,B){this.SetStart(A,B);this.Collapse(true);},SetStart:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setStart(A,0);break;case 2:D.setStart(A,A.childNodes.length);break;case 3:D.setStartBefore(A);break;case 4:D.setStartAfter(A);};if (!C) this._UpdateElementInfo();},SetEnd:function(A,B,C){var D=this._Range;if (!D) D=this._Range=this.CreateRange();switch(B){case 1:D.setEnd(A,0);break;case 2:D.setEnd(A,A.childNodes.length);break;case 3:D.setEndBefore(A);break;case 4:D.setEndAfter(A);};if (!C) this._UpdateElementInfo();},Expand:function(A){var B,oSibling;switch (A){case 'inline_elements':if (this._Range.startOffset==0){B=this._Range.startContainer;if (B.nodeType!=1) B=B.previousSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setStartBefore(B);if (B!=B.parentNode.firstChild) break;B=B.parentNode;}}};B=this._Range.endContainer;var C=this._Range.endOffset;if ((B.nodeType==3&&C>=B.nodeValue.length)||(B.nodeType==1&&C>=B.childNodes.length)||(B.nodeType!=1&&B.nodeType!=3)){if (B.nodeType!=1) B=B.nextSibling?null:B.parentNode;if (B){while (FCKListsLib.InlineNonEmptyElements[B.nodeName.toLowerCase()]){this._Range.setEndAfter(B);if (B!=B.parentNode.lastChild) break;B=B.parentNode;}}};break;case 'block_contents':case 'list_contents':var D=FCKListsLib.BlockBoundaries;if (A=='list_contents'||FCKConfig.EnterMode=='br') D=FCKListsLib.ListBoundaries;if (this.StartBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents') this.SetStart(this.StartBlock,1);else{B=this._Range.startContainer;if (B.nodeType==1){var E=B.childNodes[this._Range.startOffset];if (E) B=FCKDomTools.GetPreviousSourceNode(E,true);else B=B.lastChild||B;};while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setStartBefore(B);B=B.previousSibling||B.parentNode;}};if (this.EndBlock&&FCKConfig.EnterMode!='br'&&A=='block_contents'&&this.EndBlock.nodeName.toLowerCase()!='li') this.SetEnd(this.EndBlock,2);else{B=this._Range.endContainer;if (B.nodeType==1) B=B.childNodes[this._Range.endOffset]||B.lastChild;while (B&&(B.nodeType!=1||(B!=this.StartBlockLimit&&!D[B.nodeName.toLowerCase()]))){this._Range.setEndAfter(B);B=B.nextSibling||B.parentNode;};if (B&&B.nodeName.toLowerCase()=='br') this._Range.setEndAfter(B);};this._UpdateElementInfo();}},SplitBlock:function(A){var B=A||FCKConfig.EnterMode;if (!this._Range) this.MoveToSelection();if (this.StartBlockLimit==this.EndBlockLimit){var C=this.StartBlock;var D=this.EndBlock;var E=null;if (B!='br'){if (!C){C=this.FixBlock(true,B);D=this.EndBlock;};if (!D) D=this.FixBlock(false,B);};var F=(C!=null&&this.CheckStartOfBlock());var G=(D!=null&&this.CheckEndOfBlock());if (!this.CheckIsEmpty()) this.DeleteContents();if (C&&D&&C==D){if (G){E=new FCKElementPath(this.StartContainer);this.MoveToPosition(D,4);D=null;}else if (F){E=new FCKElementPath(this.StartContainer);this.MoveToPosition(C,3);C=null;}else{this.SetEnd(C,2);var H=this.ExtractContents();D=C.cloneNode(false);D.removeAttribute('id',false);H.AppendTo(D);FCKDomTools.InsertAfterNode(C,D);this.MoveToPosition(C,4);if (FCKBrowserInfo.IsGecko&&!C.nodeName.IEquals(['ul','ol'])) FCKTools.AppendBogusBr(C);}};return {PreviousBlock:C,NextBlock:D,WasStartOfBlock:F,WasEndOfBlock:G,ElementPath:E};};return null;},FixBlock:function(A,B){var C=this.CreateBookmark();this.Collapse(A);this.Expand('block_contents');var D=this.Window.document.createElement(B);this.ExtractContents().AppendTo(D);FCKDomTools.TrimNode(D);this.InsertNode(D);this.MoveToBookmark(C);return D;},Release:function(A){if (!A) 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 A=this._Range;var B=A.startContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.startOffset]||B;},GetTouchedEndNode:function(){var A=this._Range;var B=A.endContainer;if (A.collapsed||B.nodeType!=1) return B;return B.childNodes[A.endOffset-1]||B;}}; +FCKDomRange.prototype.MoveToSelection=function(){this.Release(true);this._Range=new FCKW3CRange(this.Window.document);var A=this.Window.document.selection;if (A.type!='Control'){var B=this._GetSelectionMarkerTag(true);var C=this._GetSelectionMarkerTag(false);if (!B&&!C){this._Range.setStart(this.Window.document.body,0);this._UpdateElementInfo();return;};this._Range.setStart(B.parentNode,FCKDomTools.GetIndexOf(B));B.parentNode.removeChild(B);this._Range.setEnd(C.parentNode,FCKDomTools.GetIndexOf(C));C.parentNode.removeChild(C);this._UpdateElementInfo();}else{var D=A.createRange().item(0);if (D){this._Range.setStartBefore(D);this._Range.setEndAfter(D);this._UpdateElementInfo();}}};FCKDomRange.prototype.Select=function(A){if (this._Range) this.SelectBookmark(this.CreateBookmark(true),A);};FCKDomRange.prototype.SelectBookmark=function(A,B){var C=this.CheckIsCollapsed();var D;var E;var F=this.GetBookmarkNode(A,true);if (!F) return;var G;if (!C) G=this.GetBookmarkNode(A,false);var H=this.Window.document.body.createTextRange();H.moveToElementText(F);H.moveStart('character',1);if (G){var I=this.Window.document.body.createTextRange();I.moveToElementText(G);H.setEndPoint('EndToEnd',I);H.moveEnd('character',-1);}else{D=(B||!F.previousSibling||F.previousSibling.nodeName.toLowerCase()=='br')&&!F.nextSibing;E=this.Window.document.createElement('span');E.innerHTML='';F.parentNode.insertBefore(E,F);if (D){F.parentNode.insertBefore(this.Window.document.createTextNode('\ufeff'),F);}};if (!this._Range) this._Range=this.CreateRange();this._Range.setStartBefore(F);F.parentNode.removeChild(F);if (C){if (D){H.moveStart('character',-1);H.select();this.Window.document.selection.clear();}else H.select();FCKDomTools.RemoveNode(E);}else{this._Range.setEndBefore(G);G.parentNode.removeChild(G);H.select();}};FCKDomRange.prototype._GetSelectionMarkerTag=function(A){var B=this.Window.document;var C=B.selection;var D;try{D=C.createRange();}catch (e){return null;};if (D.parentElement().document!=B) return null;D.collapse(A===true);var E='fck_dom_range_temp_'+(new Date()).valueOf()+'_'+Math.floor(Math.random()*1000);D.pasteHTML('');return B.getElementById(E);}; +var FCKDomRangeIterator=function(A){this.Range=A;this.ForceBrBreak=false;this.EnforceRealBlocks=false;};FCKDomRangeIterator.CreateFromSelection=function(A){var B=new FCKDomRange(A);B.MoveToSelection();return new FCKDomRangeIterator(B);};FCKDomRangeIterator.prototype={GetNextParagraph:function(){var A;var B;var C;var D;var E;var F=this.ForceBrBreak?FCKListsLib.ListBoundaries:FCKListsLib.BlockBoundaries;if (!this._LastNode){var B=this.Range.Clone();B.Expand(this.ForceBrBreak?'list_contents':'block_contents');this._NextNode=B.GetTouchedStartNode();this._LastNode=B.GetTouchedEndNode();B=null;};var H=this._NextNode;var I=this._LastNode;this._NextNode=null;while (H){var J=false;var K=(H.nodeType!=1);var L=false;if (!K){var M=H.nodeName.toLowerCase();if (F[M]&&(!FCKBrowserInfo.IsIE||H.scopeName=='HTML')){if (M=='br') K=true;else if (!B&&H.childNodes.length==0&&M!='hr'){A=H;C=H==I;break;};if (B){B.SetEnd(H,3,true);if (M!='br') this._NextNode=H;};J=true;}else{if (H.firstChild){if (!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};H=H.firstChild;continue;};K=true;}}else if (H.nodeType==3){if (/^[\r\n\t ]+$/.test(H.nodeValue)) K=false;};if (K&&!B){B=new FCKDomRange(this.Range.Window);B.SetStart(H,3,true);};C=((!J||K)&&H==I);if (B&&!J){while (!H.nextSibling&&!C){var N=H.parentNode;if (F[N.nodeName.toLowerCase()]){J=true;C=C||(N==I);break;};H=N;K=true;C=(H==I);L=true;}};if (K) B.SetEnd(H,4,true);if ((J||C)&&B){B._UpdateElementInfo();if (B.StartNode==B.EndNode&&B.StartNode.parentNode==B.StartBlockLimit&&B.StartNode.getAttribute&&B.StartNode.getAttribute('_fck_bookmark')) B=null;else break;};if (C) break;H=FCKDomTools.GetNextSourceNode(H,L,null,I);};if (!A){if (!B){this._NextNode=null;return null;};A=B.StartBlock;if (!A&&!this.EnforceRealBlocks&&B.StartBlockLimit.nodeName.IEquals('DIV','TH','TD')&&B.CheckStartOfBlock()&&B.CheckEndOfBlock()){A=B.StartBlockLimit;}else if (!A||(this.EnforceRealBlocks&&A.nodeName.toLowerCase()=='li')){A=this.Range.Window.document.createElement(FCKConfig.EnterMode=='p'?'p':'div');B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);B.InsertNode(A);D=true;E=true;}else if (A.nodeName.toLowerCase()!='li'){if (!B.CheckStartOfBlock()||!B.CheckEndOfBlock()){A=A.cloneNode(false);B.ExtractContents().AppendTo(A);FCKDomTools.TrimNode(A);var O=B.SplitBlock();D=!O.WasStartOfBlock;E=!O.WasEndOfBlock;B.InsertNode(A);}}else if (!C){this._NextNode=A==I?null:FCKDomTools.GetNextSourceNode(B.EndNode,true,null,I);return A;}};if (D){var P=A.previousSibling;if (P&&P.nodeType==1){if (P.nodeName.toLowerCase()=='br') P.parentNode.removeChild(P);else if (P.lastChild&&P.lastChild.nodeName.IEquals('br')) P.removeChild(P.lastChild);}};if (E){var Q=A.lastChild;if (Q&&Q.nodeType==1&&Q.nodeName.toLowerCase()=='br') A.removeChild(Q);};if (!this._NextNode) this._NextNode=(C||A==I)?null:FCKDomTools.GetNextSourceNode(A,true,null,I);return A;}}; +var FCKDocumentFragment=function(A){this._Document=A;this.RootNode=A.createElement('div');};FCKDocumentFragment.prototype={AppendTo:function(A){FCKDomTools.MoveChildren(this.RootNode,A);},AppendHtml:function(A){var B=this._Document.createElement('div');B.innerHTML=A;FCKDomTools.MoveChildren(B,this.RootNode);},InsertAfterNode:function(A){var B=this.RootNode;var C;while((C=B.lastChild)) FCKDomTools.InsertAfterNode(A,B.removeChild(C));}}; +var FCKW3CRange=function(A){this._Document=A;this.startContainer=null;this.startOffset=null;this.endContainer=null;this.endOffset=null;this.collapsed=true;};FCKW3CRange.CreateRange=function(A){return new FCKW3CRange(A);};FCKW3CRange.CreateFromRange=function(A,B){var C=FCKW3CRange.CreateRange(A);C.setStart(B.startContainer,B.startOffset);C.setEnd(B.endContainer,B.endOffset);return C;};FCKW3CRange.prototype={_UpdateCollapsed:function(){this.collapsed=(this.startContainer==this.endContainer&&this.startOffset==this.endOffset);},setStart:function(A,B){this.startContainer=A;this.startOffset=B;if (!this.endContainer){this.endContainer=A;this.endOffset=B;};this._UpdateCollapsed();},setEnd:function(A,B){this.endContainer=A;this.endOffset=B;if (!this.startContainer){this.startContainer=A;this.startOffset=B;};this._UpdateCollapsed();},setStartAfter:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setStartBefore:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A));},setEndAfter:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setEndBefore:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A));},collapse:function(A){if (A){this.endContainer=this.startContainer;this.endOffset=this.startOffset;}else{this.startContainer=this.endContainer;this.startOffset=this.endOffset;};this.collapsed=true;},selectNodeContents:function(A){this.setStart(A,0);this.setEnd(A,A.nodeType==3?A.data.length:A.childNodes.length);},insertNode:function(A){var B=this.startContainer;var C=this.startOffset;if (B.nodeType==3){B.splitText(C);if (B==this.endContainer) this.setEnd(B.nextSibling,this.endOffset-this.startOffset);FCKDomTools.InsertAfterNode(B,A);return;}else{B.insertBefore(A,B.childNodes[C]||null);if (B==this.endContainer){this.endOffset++;this.collapsed=false;}}},deleteContents:function(){if (this.collapsed) return;this._ExecContentsAction(0);},extractContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(1,A);return A;},cloneContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(2,A);return A;},_ExecContentsAction:function(A,B){var C=this.startContainer;var D=this.endContainer;var E=this.startOffset;var F=this.endOffset;var G=false;var H=false;if (D.nodeType==3) D=D.splitText(F);else{if (D.childNodes.length>0){if (F>D.childNodes.length-1){D=FCKDomTools.InsertAfterNode(D.lastChild,this._Document.createTextNode(''));H=true;}else D=D.childNodes[F];}};if (C.nodeType==3){C.splitText(E);if (C==D) D=C.nextSibling;}else{if (E==0){C=C.insertBefore(this._Document.createTextNode(''),C.firstChild);G=true;}else if (E>C.childNodes.length-1){C=C.appendChild(this._Document.createTextNode(''));G=true;}else C=C.childNodes[E].previousSibling;};var I=FCKDomTools.GetParents(C);var J=FCKDomTools.GetParents(D);var i,topStart,topEnd;for (i=0;i0&&levelStartNode!=D) levelClone=K.appendChild(levelStartNode.cloneNode(levelStartNode==D));if (!I[k]||levelStartNode.parentNode!=I[k].parentNode){currentNode=levelStartNode.previousSibling;while(currentNode){if (currentNode==I[k]||currentNode==C) break;currentSibling=currentNode.previousSibling;if (A==2) K.insertBefore(currentNode.cloneNode(true),K.firstChild);else{currentNode.parentNode.removeChild(currentNode);if (A==1) K.insertBefore(currentNode,K.firstChild);};currentNode=currentSibling;}};if (K) K=levelClone;};if (A==2){var L=this.startContainer;if (L.nodeType==3){L.data+=L.nextSibling.data;L.parentNode.removeChild(L.nextSibling);};var M=this.endContainer;if (M.nodeType==3&&M.nextSibling){M.data+=M.nextSibling.data;M.parentNode.removeChild(M.nextSibling);}}else{if (topStart&&topEnd&&(C.parentNode!=topStart.parentNode||D.parentNode!=topEnd.parentNode)){var N=FCKDomTools.GetIndexOf(topEnd);if (G&&topEnd.parentNode==C.parentNode) N--;this.setStart(topEnd.parentNode,N);};this.collapse(true);};if(G) C.parentNode.removeChild(C);if(H&&D.parentNode) D.parentNode.removeChild(D);},cloneRange:function(){return FCKW3CRange.CreateFromRange(this._Document,this);}}; +var FCKEnterKey=function(A,B,C,D){this.Window=A;this.EnterMode=B||'p';this.ShiftEnterMode=C||'br';var E=new FCKKeystrokeHandler(false);E._EnterKey=this;E.OnKeystroke=FCKEnterKey_OnKeystroke;E.SetKeystrokes([[13,'Enter'],[SHIFT+13,'ShiftEnter'],[9,'Tab'],[8,'Backspace'],[CTRL+8,'CtrlBackspace'],[46,'Delete']]);if (D>0){this.TabText='';while (D-->0) this.TabText+='\xa0';};E.AttachToElement(A.document);};function FCKEnterKey_OnKeystroke(A,B){var C=this._EnterKey;try{switch (B){case 'Enter':return C.DoEnter();break;case 'ShiftEnter':return C.DoShiftEnter();break;case 'Backspace':return C.DoBackspace();break;case 'Delete':return C.DoDelete();break;case 'Tab':return C.DoTab();break;case 'CtrlBackspace':return C.DoCtrlBackspace();break;}}catch (e){};return false;};FCKEnterKey.prototype.DoEnter=function(A,B){FCKUndo.SaveUndoStep();this._HasShift=(B===true);var C=FCKSelection.GetParentElement();var D=new FCKElementPath(C);var E=A||this.EnterMode;if (E=='br'||D.Block&&D.Block.tagName.toLowerCase()=='pre') return this._ExecuteEnterBr();else return this._ExecuteEnterBlock(E);};FCKEnterKey.prototype.DoShiftEnter=function(){return this.DoEnter(this.ShiftEnterMode,true);};FCKEnterKey.prototype.DoBackspace=function(){var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};var C=B.CheckIsCollapsed();if (!C){if (FCKBrowserInfo.IsIE&&this.Window.document.selection.type.toLowerCase()=="control"){var D=this.Window.document.selection.createRange();for (var i=D.length-1;i>=0;i--){var E=D.item(i);E.parentNode.removeChild(E);};return true;};return false;};var F=B.StartBlock;var G=B.EndBlock;if (B.StartBlockLimit==B.EndBlockLimit&&F&&G){if (!C){var H=B.CheckEndOfBlock();B.DeleteContents();if (F!=G){B.SetStart(G,1);B.SetEnd(G,1);};B.Select();A=(F==G);};if (B.CheckStartOfBlock()){var I=B.StartBlock;var J=FCKDomTools.GetPreviousSourceElement(I,true,['BODY',B.StartBlockLimit.nodeName],['UL','OL']);A=this._ExecuteBackspace(B,J,I);}else if (FCKBrowserInfo.IsGeckoLike){B.Select();}};B.Release();return A;};FCKEnterKey.prototype.DoCtrlBackspace=function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(this.Window);A.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(A,this.Window.document.body)){this._FixIESelectAllBug(A);return true;};return false;};FCKEnterKey.prototype._ExecuteBackspace=function(A,B,C){var D=false;if (!B&&C&&C.nodeName.IEquals('LI')&&C.parentNode.parentNode.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};if (B&&B.nodeName.IEquals('LI')){var E=FCKDomTools.GetLastChild(B,['UL','OL']);while (E){B=FCKDomTools.GetLastChild(E,'LI');E=FCKDomTools.GetLastChild(B,['UL','OL']);}};if (B&&C){if (C.nodeName.IEquals('LI')&&!B.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};var F=C.parentNode;var G=B.nodeName.toLowerCase();if (FCKListsLib.EmptyElements[G]!=null||G=='table'){FCKDomTools.RemoveNode(B);D=true;}else{FCKDomTools.RemoveNode(C);while (F.innerHTML.Trim().length==0){var H=F.parentNode;H.removeChild(F);F=H;};FCKDomTools.LTrimNode(C);FCKDomTools.RTrimNode(B);A.SetStart(B,2,true);A.Collapse(true);var I=A.CreateBookmark(true);if (!C.tagName.IEquals(['TABLE'])) FCKDomTools.MoveChildren(C,B);A.SelectBookmark(I);D=true;}};return D;};FCKEnterKey.prototype.DoDelete=function(){FCKUndo.SaveUndoStep();var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (FCKBrowserInfo.IsIE&&this._CheckIsAllContentsIncluded(B,this.Window.document.body)){this._FixIESelectAllBug(B);return true;};if (B.CheckIsCollapsed()&&B.CheckEndOfBlock(FCKBrowserInfo.IsGeckoLike)){var C=B.StartBlock;var D=FCKTools.GetElementAscensor(C,'td');var E=FCKDomTools.GetNextSourceElement(C,true,[B.StartBlockLimit.nodeName],['UL','OL','TR'],true);if (D){var F=FCKTools.GetElementAscensor(E,'td');if (F!=D) return true;};A=this._ExecuteBackspace(B,C,E);};B.Release();return A;};FCKEnterKey.prototype.DoTab=function(){var A=new FCKDomRange(this.Window);A.MoveToSelection();var B=A._Range.startContainer;while (B){if (B.nodeType==1){var C=B.tagName.toLowerCase();if (C=="tr"||C=="td"||C=="th"||C=="tbody"||C=="table") return false;else break;};B=B.parentNode;};if (this.TabText){A.DeleteContents();A.InsertNode(this.Window.document.createTextNode(this.TabText));A.Collapse(false);A.Select();};return true;};FCKEnterKey.prototype._ExecuteEnterBlock=function(A,B){var C=B||new FCKDomRange(this.Window);var D=C.SplitBlock(A);if (D){var E=D.PreviousBlock;var F=D.NextBlock;var G=D.WasStartOfBlock;var H=D.WasEndOfBlock;if (F){if (F.parentNode.nodeName.IEquals('li')){FCKDomTools.BreakParent(F,F.parentNode);FCKDomTools.MoveNode(F,F.nextSibling,true);}}else if (E&&E.parentNode.nodeName.IEquals('li')){FCKDomTools.BreakParent(E,E.parentNode);C.MoveToElementEditStart(E.nextSibling);FCKDomTools.MoveNode(E,E.previousSibling);};if (!G&&!H){if (F.nodeName.IEquals('li')&&F.firstChild&&F.firstChild.nodeName.IEquals(['ul','ol'])) F.insertBefore(FCKTools.GetElementDocument(F).createTextNode('\xa0'),F.firstChild);if (F) C.MoveToElementEditStart(F);}else{if (G&&H&&E.tagName.toUpperCase()=='LI'){C.MoveToElementStart(E);this._OutdentWithSelection(E,C);C.Release();return true;};var I;if (E){var J=E.tagName.toUpperCase();if (!this._HasShift&&!(/^H[1-6]$/).test(J)){I=FCKDomTools.CloneElement(E);}}else if (F) I=FCKDomTools.CloneElement(F);if (!I) I=this.Window.document.createElement(A);var K=D.ElementPath;if (K){for (var i=0,len=K.Elements.length;i=0&&(C=B[i--])){if (C.name.length>0){if (C.innerHTML!==''){if (FCKBrowserInfo.IsIE) C.className+=' FCK__AnchorC';}else{var D=FCKDocumentProcessor_CreateFakeImage('FCK__Anchor',C.cloneNode(true));D.setAttribute('_fckanchor','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}}}};var FCKPageBreaksProcessor=FCKDocumentProcessor.AppendNew();FCKPageBreaksProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('DIV');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.style.pageBreakAfter=='always'&&C.childNodes.length==1&&C.childNodes[0].style&&C.childNodes[0].style.display=='none'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',C.cloneNode(true));C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};FCKEmbedAndObjectProcessor=(function(){var A=[];var B=function(el){var C=el.cloneNode(true);var D;var E=D=FCKDocumentProcessor_CreateFakeImage('FCK__UnknownObject',C);FCKEmbedAndObjectProcessor.RefreshView(E,el);for (var i=0;i=0;i--) B(F[i]);var G=doc.getElementsByTagName('embed');for (var i=G.length-1;i>=0;i--) B(G[i]);});},RefreshView:function(placeHolder,original){if (original.getAttribute('width')>0) placeHolder.style.width=FCKTools.ConvertHtmlSizeToStyle(original.getAttribute('width'));if (original.getAttribute('height')>0) placeHolder.style.height=FCKTools.ConvertHtmlSizeToStyle(original.getAttribute('height'));},AddCustomHandler:function(func){A.push(func);}});})();FCK.GetRealElement=function(A){var e=FCKTempBin.Elements[A.getAttribute('_fckrealelement')];if (A.getAttribute('_fckflash')){if (A.style.width.length>0) e.width=FCKTools.ConvertStyleSizeToHtml(A.style.width);if (A.style.height.length>0) e.height=FCKTools.ConvertStyleSizeToHtml(A.style.height);};return e;};if (FCKBrowserInfo.IsIE){FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('HR');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){var D=A.createElement('hr');D.mergeAttributes(C,true);FCKDomTools.InsertAfterNode(C,D);C.parentNode.removeChild(C);}}};FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('INPUT');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.type=='hidden'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__InputHidden',C.cloneNode(true));D.setAttribute('_fckinputhidden','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};FCKEmbedAndObjectProcessor.AddCustomHandler(function(A,B){if (!(A.nodeName.IEquals('embed')&&(A.type=='application/x-shockwave-flash'||/\.swf($|#|\?)/i.test(A.src)))) return;B.className='FCK__Flash';B.setAttribute('_fckflash','true',0);}); +var FCKSelection=FCK.Selection={GetParentBlock:function(){var A=this.GetParentElement();while (A){if (FCKListsLib.BlockBoundaries[A.nodeName.toLowerCase()]) break;A=A.parentNode;};return A;},ApplyStyle:function(A){FCKStyles.ApplyStyle(new FCKStyle(A));}}; +FCKSelection.GetType=function(){try{var A=FCKSelection.GetSelection().type;if (A=='Control'||A=='Text') return A;if (this.GetSelection().createRange().parentElement) return 'Text';}catch(e){};return 'None';};FCKSelection.GetSelectedElement=function(){if (this.GetType()=='Control'){var A=this.GetSelection().createRange();if (A&&A.item) return this.GetSelection().createRange().item(0);};return null;};FCKSelection.GetParentElement=function(){switch (this.GetType()){case 'Control':var A=FCKSelection.GetSelectedElement();return A?A.parentElement:null;case 'None':return null;default:return this.GetSelection().createRange().parentElement();}};FCKSelection.GetBoundaryParentElement=function(A){switch (this.GetType()){case 'Control':var B=FCKSelection.GetSelectedElement();return B?B.parentElement:null;case 'None':return null;default:var C=FCK.EditorDocument;var D=C.selection.createRange();D.collapse(A!==false);var B=D.parentElement();return FCKTools.GetElementDocument(B)==C?B:null;}};FCKSelection.SelectNode=function(A){FCK.Focus();this.GetSelection().empty();var B;try{B=FCK.EditorDocument.body.createControlRange();B.addElement(A);}catch(e){B=FCK.EditorDocument.body.createTextRange();B.moveToElementText(A);};B.select();};FCKSelection.Collapse=function(A){FCK.Focus();if (this.GetType()=='Text'){var B=this.GetSelection().createRange();B.collapse(A==null||A===true);B.select();}};FCKSelection.HasAncestorNode=function(A){var B;if (this.GetSelection().type=="Control"){B=this.GetSelectedElement();}else{var C=this.GetSelection().createRange();B=C.parentElement();};while (B){if (B.tagName==A) return true;B=B.parentNode;};return false;};FCKSelection.MoveToAncestorNode=function(A){var B,oRange;if (!FCK.EditorDocument) return null;if (this.GetSelection().type=="Control"){oRange=this.GetSelection().createRange();for (i=0;i=0;i--){if (C[i]) FCKTableHandler.DeleteRows(C[i]);};return;};var E=FCKTools.GetElementAscensor(A,'TABLE');if (E.rows.length==1){FCKTableHandler.DeleteTable(E);return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteTable=function(A){if (!A){A=FCKSelection.GetSelectedElement();if (!A||A.tagName!='TABLE') A=FCKSelection.MoveToAncestorNode('TABLE');};if (!A) return;FCKSelection.SelectNode(A);FCKSelection.Collapse();if (A.parentNode.childNodes.length==1) A.parentNode.parentNode.removeChild(A.parentNode);else A.parentNode.removeChild(A);};FCKTableHandler.InsertColumn=function(A){var B=null;var C=this.GetSelectedCells();if (C&&C.length) B=C[A?0:(C.length-1)];if (!B) return;var D=FCKTools.GetElementAscensor(B,'TABLE');var E=B.cellIndex;for (var i=0;i=0;i--){if (B[i]) FCKTableHandler.DeleteColumns(B[i]);};return;};if (!A) return;var C=FCKTools.GetElementAscensor(A,'TABLE');var D=A.cellIndex;for (var i=C.rows.length-1;i>=0;i--){var E=C.rows[i];if (D==0&&E.cells.length==1){FCKTableHandler.DeleteRows(E);continue;};if (E.cells[D]) E.removeChild(E.cells[D]);}};FCKTableHandler.InsertCell=function(A,B){var C=null;var D=this.GetSelectedCells();if (D&&D.length) C=D[B?0:(D.length-1)];if (!C) return null;var E=FCK.EditorDocument.createElement('TD');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(E);if (!B&&C.cellIndex==C.parentNode.cells.length-1) C.parentNode.appendChild(E);else C.parentNode.insertBefore(E,B?C:C.nextSibling);return E;};FCKTableHandler.DeleteCell=function(A){if (A.parentNode.cells.length==1){FCKTableHandler.DeleteRows(FCKTools.GetElementAscensor(A,'TR'));return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteCells=function(){var A=FCKTableHandler.GetSelectedCells();for (var i=A.length-1;i>=0;i--){FCKTableHandler.DeleteCell(A[i]);}};FCKTableHandler._MarkCells=function(A,B){for (var i=0;i=E.height){for (D=F;D0){var L=K.removeChild(K.firstChild);if (L.nodeType!=1||(L.getAttribute('type',2)!='_moz'&&L.getAttribute('_moz_dirty')!=null)){I.appendChild(L);J++;}}};if (J>0) I.appendChild(FCKTools.GetElementDocument(B).createElement('br'));};this._ReplaceCellsByMarker(C,'_SelectedCells',B);this._UnmarkCells(A,'_SelectedCells');this._InstallTableMap(C,B.parentNode.parentNode);B.appendChild(I);if (FCKBrowserInfo.IsGeckoLike&&(!B.firstChild)) FCKTools.AppendBogusBr(B);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeRight=function(){var A=this.GetMergeRightTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=FCK.EditorDocument.createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));D.parentNode.removeChild(D);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.MergeDown=function(){var A=this.GetMergeDownTarget();if (A==null) return;var B=A.refCell;var C=A.tableMap;var D=A.nextCell;var E=FCKTools.GetElementDocument(B).createDocumentFragment();while (D&&D.childNodes&&D.childNodes.length>0) E.appendChild(D.removeChild(D.firstChild));if (E.firstChild) E.insertBefore(FCKTools.GetElementDocument(D).createElement('br'),E.firstChild);B.appendChild(E);this._MarkCells([D],'_Replace');this._ReplaceCellsByMarker(C,'_Replace',B);this._InstallTableMap(C,B.parentNode.parentNode);this._MoveCaretToCell(B,false);};FCKTableHandler.HorizontalSplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=A[0];var C=this._CreateTableMap(B.parentNode.parentNode);var D=B.parentNode.rowIndex;var E=FCKTableHandler._GetCellIndexSpan(C,D,B);var F=isNaN(B.colSpan)?1:B.colSpan;if (F>1){var G=Math.ceil(F/2);var H=FCKTools.GetElementDocument(B).createElement('td');if (FCKBrowserInfo.IsGeckoLike) FCKTools.AppendBogusBr(H);var I=E+G;var J=E+F;var K=isNaN(B.rowSpan)?1:B.rowSpan;for (var r=D;r1){B.rowSpan=Math.ceil(E/2);var G=F+Math.ceil(E/2);var H=null;for (var i=D+1;i0){var C=B.rows[0];C.parentNode.removeChild(C);};for (var i=0;iE) E=j;if (D._colScanned===true) continue;if (A[i][j-1]==D) D.colSpan++;if (A[i][j+1]!=D) D._colScanned=true;}};for (var i=0;i<=E;i++){for (var j=0;j=0&&C.compareEndPoints('StartToEnd',E)<=0)||(C.compareEndPoints('EndToStart',E)>=0&&C.compareEndPoints('EndToEnd',E)<=0)){B[B.length]=D.cells[i];}}}};return B;}; +var FCKXml=function(){this.Error=false;};FCKXml.GetAttribute=function(A,B,C){var D=A.attributes.getNamedItem(B);return D?D.value:C;};FCKXml.TransformToObject=function(A){if (!A) return null;var B={};var C=A.attributes;for (var i=0;i ';var A=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',e);var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.SplitBlock();B.InsertNode(A);FCK.Events.FireEvent('OnSelectionChange');};FCKPageBreakCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};var FCKUnlinkCommand=function(){this.Name='Unlink';};FCKUnlinkCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (FCKBrowserInfo.IsGeckoLike){var A=FCK.Selection.MoveToAncestorNode('A');if (A) FCKTools.RemoveOuterTags(A);return;};FCK.ExecuteNamedCommand(this.Name);};FCKUnlinkCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;var A=FCK.GetNamedCommandState(this.Name);if (A==0&&FCK.EditMode==0){var B=FCKSelection.MoveToAncestorNode('A');var C=(B&&B.name.length>0&&B.href.length==0);if (C) A=-1;};return A;};var FCKSelectAllCommand=function(){this.Name='SelectAll';};FCKSelectAllCommand.prototype.Execute=function(){if (FCK.EditMode==0){FCK.ExecuteNamedCommand('SelectAll');}else{var A=FCK.EditingArea.Textarea;if (FCKBrowserInfo.IsIE){A.createTextRange().execCommand('SelectAll');}else{A.selectionStart=0;A.selectionEnd=A.value.length;};A.focus();}};FCKSelectAllCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};var FCKPasteCommand=function(){this.Name='Paste';};FCKPasteCommand.prototype={Execute:function(){if (FCKBrowserInfo.IsIE) FCK.Paste();else FCK.ExecuteNamedCommand('Paste');},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Paste');}};var FCKRuleCommand=function(){this.Name='Rule';};FCKRuleCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();FCK.InsertElement('hr');},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('InsertHorizontalRule');}};var FCKCutCopyCommand=function(A){this.Name=A?'Cut':'Copy';};FCKCutCopyCommand.prototype={Execute:function(){var A=false;if (FCKBrowserInfo.IsIE){var B=function(){A=true;};var C='on'+this.Name.toLowerCase();FCK.EditorDocument.body.attachEvent(C,B);FCK.ExecuteNamedCommand(this.Name);FCK.EditorDocument.body.detachEvent(C,B);}else{try{FCK.ExecuteNamedCommand(this.Name);A=true;}catch(e){}};if (!A) alert(FCKLang['PasteError'+this.Name]);},GetState:function(){return FCK.EditMode!=0?-1:FCK.GetNamedCommandState('Cut');}};var FCKAnchorDeleteCommand=function(){this.Name='AnchorDelete';};FCKAnchorDeleteCommand.prototype={Execute:function(){if (FCK.Selection.GetType()=='Control'){FCK.Selection.Delete();}else{var A=FCK.Selection.GetSelectedElement();if (A){if (A.tagName=='IMG'&&A.getAttribute('_fckanchor')) oAnchor=FCK.GetRealElement(A);else A=null;};if (!A){oAnchor=FCK.Selection.MoveToAncestorNode('A');if (oAnchor) FCK.Selection.SelectNode(oAnchor);};if (oAnchor.href.length!=0){oAnchor.removeAttribute('name');if (FCKBrowserInfo.IsIE) oAnchor.className=oAnchor.className.replace(FCKRegexLib.FCK_Class,'');return;};if (A){A.parentNode.removeChild(A);return;};if (oAnchor.innerHTML.length==0){oAnchor.parentNode.removeChild(oAnchor);return;};FCKTools.RemoveOuterTags(oAnchor);};if (FCKBrowserInfo.IsGecko) FCK.Selection.Collapse(true);},GetState:function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Unlink');}}; +var FCKShowBlockCommand=function(A,B){this.Name=A;if (B!=undefined) this._SavedState=B;else this._SavedState=null;};FCKShowBlockCommand.prototype.Execute=function(){var A=this.GetState();if (A==-1) return;var B=FCK.EditorDocument.body;if (A==1) B.className=B.className.replace(/(^| )FCK__ShowBlocks/g,'');else B.className+=' FCK__ShowBlocks';FCK.Events.FireEvent('OnSelectionChange');};FCKShowBlockCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;if (!FCK.EditorDocument) return 0;if (/FCK__ShowBlocks(?:\s|$)/.test(FCK.EditorDocument.body.className)) return 1;return 0;};FCKShowBlockCommand.prototype.SaveState=function(){this._SavedState=this.GetState();};FCKShowBlockCommand.prototype.RestoreState=function(){if (this._SavedState!=null&&this.GetState()!=this._SavedState) this.Execute();}; +var FCKSpellCheckCommand=function(){this.Name='SpellCheck';this.IsEnabled=(FCKConfig.SpellChecker=='ieSpell'||FCKConfig.SpellChecker=='SpellerPages');};FCKSpellCheckCommand.prototype.Execute=function(){switch (FCKConfig.SpellChecker){case 'ieSpell':this._RunIeSpell();break;case 'SpellerPages':FCKDialog.OpenDialog('FCKDialog_SpellCheck','Spell Check','dialog/fck_spellerpages.html',440,480);break;}};FCKSpellCheckCommand.prototype._RunIeSpell=function(){try{var A=new ActiveXObject("ieSpell.ieSpellExtension");A.CheckAllLinkedDocuments(FCK.EditorDocument);}catch(e){if(e.number==-2146827859){if (confirm(FCKLang.IeSpellDownload)) window.open(FCKConfig.IeSpellDownloadUrl,'IeSpellDownload');}else alert('Error Loading ieSpell: '+e.message+' ('+e.number+')');}};FCKSpellCheckCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return this.IsEnabled?0:-1;}; +var FCKTextColorCommand=function(A){this.Name=A=='ForeColor'?'TextColor':'BGColor';this.Type=A;var B;if (FCKBrowserInfo.IsIE) B=window;else if (FCK.ToolbarSet._IFrame) B=FCKTools.GetElementWindow(FCK.ToolbarSet._IFrame);else B=window.parent;this._Panel=new FCKPanel(B);this._Panel.AppendStyleSheet(FCKConfig.SkinEditorCSS);this._Panel.MainNode.className='FCK_Panel';this._CreatePanelBody(this._Panel.Document,this._Panel.MainNode);FCK.ToolbarSet.ToolbarItems.GetItem(this.Name).RegisterPanel(this._Panel);FCKTools.DisableSelection(this._Panel.Document.body);};FCKTextColorCommand.prototype.Execute=function(A,B,C){this._Panel.Show(A,B,C);};FCKTextColorCommand.prototype.SetColor=function(A){FCKUndo.SaveUndoStep();var B=FCKStyles.GetStyle('_FCK_'+(this.Type=='ForeColor'?'Color':'BackColor'));if (!A||A.length==0) FCK.Styles.RemoveStyle(B);else{B.SetVariable('Color',A);FCKStyles.ApplyStyle(B);};FCKUndo.SaveUndoStep();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');};FCKTextColorCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return 0;};function FCKTextColorCommand_OnMouseOver(){this.className='ColorSelected';};function FCKTextColorCommand_OnMouseOut(){this.className='ColorDeselected';};function FCKTextColorCommand_OnClick(A,B,C){this.className='ColorDeselected';B.SetColor(C);B._Panel.Hide();};function FCKTextColorCommand_AutoOnClick(A,B){this.className='ColorDeselected';B.SetColor('');B._Panel.Hide();};function FCKTextColorCommand_MoreOnClick(A,B){this.className='ColorDeselected';B._Panel.Hide();FCKDialog.OpenDialog('FCKDialog_Color',FCKLang.DlgColorTitle,'dialog/fck_colorselector.html',410,320,FCKTools.Bind(B,B.SetColor));};FCKTextColorCommand.prototype._CreatePanelBody=function(A,B){function CreateSelectionDiv(){var C=A.createElement("DIV");C.className='ColorDeselected';FCKTools.AddEventListenerEx(C,'mouseover',FCKTextColorCommand_OnMouseOver);FCKTools.AddEventListenerEx(C,'mouseout',FCKTextColorCommand_OnMouseOut);return C;};var D=B.appendChild(A.createElement("TABLE"));D.className='ForceBaseFont';D.style.tableLayout='fixed';D.cellPadding=0;D.cellSpacing=0;D.border=0;D.width=150;var E=D.insertRow(-1).insertCell(-1);E.colSpan=8;var C=E.appendChild(CreateSelectionDiv());C.innerHTML='\n \n \n \n \n
    '+FCKLang.ColorAutomatic+'
    ';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_AutoOnClick,this);if (!FCKBrowserInfo.IsIE) C.style.width='96%';var G=FCKConfig.FontColors.toString().split(',');var H=0;while (H
    ';if (H>=G.length) C.style.visibility='hidden';else FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_OnClick,[this,L]);}};if (FCKConfig.EnableMoreFontColors){E=D.insertRow(-1).insertCell(-1);E.colSpan=8;C=E.appendChild(CreateSelectionDiv());C.innerHTML='
    '+FCKLang.ColorMoreColors+'
    ';FCKTools.AddEventListenerEx(C,'click',FCKTextColorCommand_MoreOnClick,this);};if (!FCKBrowserInfo.IsIE) C.style.width='96%';}; +var FCKPastePlainTextCommand=function(){this.Name='PasteText';};FCKPastePlainTextCommand.prototype.Execute=function(){FCK.PasteAsPlainText();};FCKPastePlainTextCommand.prototype.GetState=function(){if (FCK.EditMode!=0) return -1;return FCK.GetNamedCommandState('Paste');}; +var FCKPasteWordCommand=function(){this.Name='PasteWord';};FCKPasteWordCommand.prototype.Execute=function(){FCK.PasteFromWord();};FCKPasteWordCommand.prototype.GetState=function(){if (FCK.EditMode!=0||FCKConfig.ForcePasteAsPlainText) return -1;else return FCK.GetNamedCommandState('Paste');}; +var FCKTableCommand=function(A){this.Name=A;};FCKTableCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();if (!FCKBrowserInfo.IsGecko){switch (this.Name){case 'TableMergeRight':return FCKTableHandler.MergeRight();case 'TableMergeDown':return FCKTableHandler.MergeDown();}};switch (this.Name){case 'TableInsertRowAfter':return FCKTableHandler.InsertRow(false);case 'TableInsertRowBefore':return FCKTableHandler.InsertRow(true);case 'TableDeleteRows':return FCKTableHandler.DeleteRows();case 'TableInsertColumnAfter':return FCKTableHandler.InsertColumn(false);case 'TableInsertColumnBefore':return FCKTableHandler.InsertColumn(true);case 'TableDeleteColumns':return FCKTableHandler.DeleteColumns();case 'TableInsertCellAfter':return FCKTableHandler.InsertCell(null,false);case 'TableInsertCellBefore':return FCKTableHandler.InsertCell(null,true);case 'TableDeleteCells':return FCKTableHandler.DeleteCells();case 'TableMergeCells':return FCKTableHandler.MergeCells();case 'TableHorizontalSplitCell':return FCKTableHandler.HorizontalSplitCell();case 'TableVerticalSplitCell':return FCKTableHandler.VerticalSplitCell();case 'TableDelete':return FCKTableHandler.DeleteTable();default:return alert(FCKLang.UnknownCommand.replace(/%1/g,this.Name));}};FCKTableCommand.prototype.GetState=function(){if (FCK.EditorDocument!=null&&FCKSelection.HasAncestorNode('TABLE')){switch (this.Name){case 'TableHorizontalSplitCell':case 'TableVerticalSplitCell':if (FCKTableHandler.GetSelectedCells().length==1) return 0;else return -1;case 'TableMergeCells':if (FCKTableHandler.CheckIsSelectionRectangular()&&FCKTableHandler.GetSelectedCells().length>1) return 0;else return -1;case 'TableMergeRight':return FCKTableHandler.GetMergeRightTarget()?0:-1;case 'TableMergeDown':return FCKTableHandler.GetMergeDownTarget()?0:-1;default:return 0;}}else return -1;}; +var FCKFitWindow=function(){this.Name='FitWindow';};FCKFitWindow.prototype.Execute=function(){var A=window.frameElement;var B=A.style;var C=parent;var D=C.document.documentElement;var E=C.document.body;var F=E.style;var G;if (!this.IsMaximized){if(FCKBrowserInfo.IsIE) C.attachEvent('onresize',FCKFitWindow_Resize);else C.addEventListener('resize',FCKFitWindow_Resize,true);this._ScrollPos=FCKTools.GetScrollPosition(C);G=A;while((G=G.parentNode)){if (G.nodeType==1){G._fckSavedStyles=FCKTools.SaveStyles(G);G.style.zIndex=FCKConfig.FloatingPanelsZIndex-1;}};if (FCKBrowserInfo.IsIE){this.documentElementOverflow=D.style.overflow;D.style.overflow='hidden';F.overflow='hidden';}else{F.overflow='hidden';F.width='0px';F.height='0px';};this._EditorFrameStyles=FCKTools.SaveStyles(A);var H=FCKTools.GetViewPaneSize(C);B.position="absolute";B.zIndex=FCKConfig.FloatingPanelsZIndex-1;B.left="0px";B.top="0px";B.width=H.Width+"px";B.height=H.Height+"px";if (!FCKBrowserInfo.IsIE){B.borderRight=B.borderBottom="9999px solid white";B.backgroundColor="white";};C.scrollTo(0,0);var I=FCKTools.GetWindowPosition(C,A);if (I.x!=0) B.left=(-1*I.x)+"px";if (I.y!=0) B.top=(-1*I.y)+"px";this.IsMaximized=true;}else{if(FCKBrowserInfo.IsIE) C.detachEvent("onresize",FCKFitWindow_Resize);else C.removeEventListener("resize",FCKFitWindow_Resize,true);G=A;while((G=G.parentNode)){if (G._fckSavedStyles){FCKTools.RestoreStyles(G,G._fckSavedStyles);G._fckSavedStyles=null;}};if (FCKBrowserInfo.IsIE) D.style.overflow=this.documentElementOverflow;FCKTools.RestoreStyles(A,this._EditorFrameStyles);C.scrollTo(this._ScrollPos.X,this._ScrollPos.Y);this.IsMaximized=false;};FCKToolbarItems.GetItem('FitWindow').RefreshState();if (FCK.EditMode==0) FCK.EditingArea.MakeEditable();FCK.Focus();};FCKFitWindow.prototype.GetState=function(){if (FCKConfig.ToolbarLocation!='In') return -1;else return (this.IsMaximized?1:0);};function FCKFitWindow_Resize(){var A=FCKTools.GetViewPaneSize(parent);var B=window.frameElement.style;B.width=A.Width+'px';B.height=A.Height+'px';}; +var FCKListCommand=function(A,B){this.Name=A;this.TagName=B;};FCKListCommand.prototype={GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=FCKSelection.GetBoundaryParentElement(true);var B=A;while (B){if (B.nodeName.IEquals(['ul','ol'])) break;B=B.parentNode;};if (B&&B.nodeName.IEquals(this.TagName)) return 1;else return 0;},Execute:function(){FCKUndo.SaveUndoStep();var A=FCK.EditorDocument;var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=this.GetState();if (C==0){FCKDomTools.TrimNode(A.body);if (!A.body.firstChild){var D=A.createElement('p');A.body.appendChild(D);B.MoveToNodeContents(D);}};var E=B.CreateBookmark();var F=[];var G={};var H=new FCKDomRangeIterator(B);var I;H.ForceBrBreak=(C==0);var J=true;var K=null;while (J){while ((I=H.GetNextParagraph())){var L=new FCKElementPath(I);var M=null;var N=false;var O=L.BlockLimit;for (var i=L.Elements.length-1;i>=0;i--){var P=L.Elements[i];if (P.nodeName.IEquals(['ol','ul'])){if (O._FCK_ListGroupObject) O._FCK_ListGroupObject=null;var Q=P._FCK_ListGroupObject;if (Q) Q.contents.push(I);else{Q={ 'root':P,'contents':[I] };F.push(Q);FCKDomTools.SetElementMarker(G,P,'_FCK_ListGroupObject',Q);};N=true;break;}};if (N) continue;var R=O;if (R._FCK_ListGroupObject) R._FCK_ListGroupObject.contents.push(I);else{var Q={ 'root':R,'contents':[I] };FCKDomTools.SetElementMarker(G,R,'_FCK_ListGroupObject',Q);F.push(Q);}};if (FCKBrowserInfo.IsIE) J=false;else{if (K==null){K=[];var T=FCKSelection.GetSelection();if (T&&F.length==0) K.push(T.getRangeAt(0));for (var i=1;T&&i0){var Q=F.shift();if (C==0){if (Q.root.nodeName.IEquals(['ul','ol'])) this._ChangeListType(Q,G,W);else this._CreateList(Q,W);}else if (C==1&&Q.root.nodeName.IEquals(['ul','ol'])) this._RemoveList(Q,G);};for (var i=0;iC[i-1].indent+1){var H=C[i-1].indent+1-C[i].indent;var I=C[i].indent;while (C[i]&&C[i].indent>=I){C[i].indent+=H;i++;};i--;}};var J=FCKDomTools.ArrayToList(C,B);if (A.root.nextSibling==null||A.root.nextSibling.nodeName.IEquals('br')){if (J.listNode.lastChild.nodeName.IEquals('br')) J.listNode.removeChild(J.listNode.lastChild);};A.root.parentNode.replaceChild(J.listNode,A.root);}}; +var FCKJustifyCommand=function(A){this.AlignValue=A;var B=FCKConfig.ContentLangDirection.toLowerCase();this.IsDefaultAlign=(A=='left'&&B=='ltr')||(A=='right'&&B=='rtl');var C=this._CssClassName=(function(){var D=FCKConfig.JustifyClasses;if (D){switch (A){case 'left':return D[0]||null;case 'center':return D[1]||null;case 'right':return D[2]||null;case 'justify':return D[3]||null;}};return null;})();if (C&&C.length>0) this._CssClassRegex=new RegExp('(?:^|\\s+)'+C+'(?=$|\\s)');};FCKJustifyCommand._GetClassNameRegex=function(){var A=FCKJustifyCommand._ClassRegex;if (A!=undefined) return A;var B=[];var C=FCKConfig.JustifyClasses;if (C){for (var i=0;i<4;i++){var D=C[i];if (D&&D.length>0) B.push(D);}};if (B.length>0) A=new RegExp('(?:^|\\s+)(?:'+B.join('|')+')(?=$|\\s)');else A=null;return FCKJustifyCommand._ClassRegex=A;};FCKJustifyCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=new FCKDomRange(FCK.EditorWindow);A.MoveToSelection();var B=this.GetState();if (B==-1) return;var C=A.CreateBookmark();var D=this._CssClassName;var E=new FCKDomRangeIterator(A);var F;while ((F=E.GetNextParagraph())){F.removeAttribute('align');if (D){var G=F.className.replace(FCKJustifyCommand._GetClassNameRegex(),'');if (B==0){if (G.length>0) G+=' ';F.className=G+D;}else if (G.length==0) FCKDomTools.RemoveAttribute(F,'class');}else{var H=F.style;if (B==0) H.textAlign=this.AlignValue;else{H.textAlign='';if (H.cssText.length==0) F.removeAttribute('style');}}};A.MoveToBookmark(C);A.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;var C;if (FCKBrowserInfo.IsIE) C=B.currentStyle.textAlign;else C=FCK.EditorWindow.getComputedStyle(B,'').getPropertyValue('text-align');C=C.replace(/(-moz-|-webkit-|start|auto)/i,'');if ((!C&&this.IsDefaultAlign)||C==this.AlignValue) return 1;return 0;}}; +var FCKIndentCommand=function(A,B){this.Name=A;this.Offset=B;this.IndentCSSProperty=FCKConfig.ContentLangDirection.IEquals('ltr')?'marginLeft':'marginRight';};FCKIndentCommand._InitIndentModeParameters=function(){if (FCKConfig.IndentClasses&&FCKConfig.IndentClasses.length>0){this._UseIndentClasses=true;this._IndentClassMap={};for (var i=0;i0?H+' ':'')+FCKConfig.IndentClasses[G-1];}else{var I=parseInt(E.style[this.IndentCSSProperty],10);if (isNaN(I)) I=0;I+=this.Offset;I=Math.max(I,0);I=Math.ceil(I/this.Offset)*this.Offset;E.style[this.IndentCSSProperty]=I?I+FCKConfig.IndentUnit:'';if (E.getAttribute('style')=='') E.removeAttribute('style');}}},_IndentList:function(A,B){var C=A.StartContainer;var D=A.EndContainer;while (C&&C.parentNode!=B) C=C.parentNode;while (D&&D.parentNode!=B) D=D.parentNode;if (!C||!D) return;var E=C;var F=[];var G=false;while (G==false){if (E==D) G=true;F.push(E);E=E.nextSibling;};if (F.length<1) return;var H=FCKDomTools.GetParents(B);for (var i=0;iN;i++) M[i].indent+=I;var O=FCKDomTools.ArrayToList(M);if (O) B.parentNode.replaceChild(O.listNode,B);FCKDomTools.ClearAllMarkers(L);}}; +var FCKBlockQuoteCommand=function(){};FCKBlockQuoteCommand.prototype={Execute:function(){FCKUndo.SaveUndoStep();var A=this.GetState();var B=new FCKDomRange(FCK.EditorWindow);B.MoveToSelection();var C=B.CreateBookmark();if (FCKBrowserInfo.IsIE){var D=B.GetBookmarkNode(C,true);var E=B.GetBookmarkNode(C,false);var F;if (D&&D.parentNode.nodeName.IEquals('blockquote')&&!D.previousSibling){F=D;while ((F=F.nextSibling)){if (FCKListsLib.BlockElements[F.nodeName.toLowerCase()]) FCKDomTools.MoveNode(D,F,true);}};if (E&&E.parentNode.nodeName.IEquals('blockquote')&&!E.previousSibling){F=E;while ((F=F.nextSibling)){if (FCKListsLib.BlockElements[F.nodeName.toLowerCase()]){if (F.firstChild==D) FCKDomTools.InsertAfterNode(D,E);else FCKDomTools.MoveNode(E,F,true);}}}};var G=new FCKDomRangeIterator(B);var H;if (A==0){G.EnforceRealBlocks=true;var I=[];while ((H=G.GetNextParagraph())) I.push(H);if (I.length<1){para=B.Window.document.createElement(FCKConfig.EnterMode.IEquals('p')?'p':'div');B.InsertNode(para);para.appendChild(B.Window.document.createTextNode('\ufeff'));B.MoveToBookmark(C);B.MoveToNodeContents(para);B.Collapse(true);C=B.CreateBookmark();I.push(para);};var J=I[0].parentNode;var K=[];for (var i=0;i0){H=I.shift();while (H.parentNode!=J) H=H.parentNode;if (H!=L) K.push(H);L=H;};while (K.length>0){H=K.shift();if (H.nodeName.IEquals('blockquote')){var M=FCKTools.GetElementDocument(H).createDocumentFragment();while (H.firstChild){M.appendChild(H.removeChild(H.firstChild));I.push(M.lastChild);};H.parentNode.replaceChild(M,H);}else I.push(H);};var N=B.Window.document.createElement('blockquote');J.insertBefore(N,I[0]);while (I.length>0){H=I.shift();N.appendChild(H);}}else if (A==1){var O=[];while ((H=G.GetNextParagraph())){var P=null;var Q=null;while (H.parentNode){if (H.parentNode.nodeName.IEquals('blockquote')){P=H.parentNode;Q=H;break;};H=H.parentNode;};if (P&&Q) O.push(Q);};var R=[];while (O.length>0){var S=O.shift();var N=S.parentNode;if (S==S.parentNode.firstChild){N.parentNode.insertBefore(N.removeChild(S),N);if (!N.firstChild) N.parentNode.removeChild(N);}else if (S==S.parentNode.lastChild){N.parentNode.insertBefore(N.removeChild(S),N.nextSibling);if (!N.firstChild) N.parentNode.removeChild(N);}else FCKDomTools.BreakParent(S,S.parentNode,B);R.push(S);};if (FCKConfig.EnterMode.IEquals('br')){while (R.length){var S=R.shift();var W=true;if (S.nodeName.IEquals('div')){var M=FCKTools.GetElementDocument(S).createDocumentFragment();var Y=W&&S.previousSibling&&!FCKListsLib.BlockBoundaries[S.previousSibling.nodeName.toLowerCase()];if (W&&Y) M.appendChild(FCKTools.GetElementDocument(S).createElement('br'));var Z=S.nextSibling&&!FCKListsLib.BlockBoundaries[S.nextSibling.nodeName.toLowerCase()];while (S.firstChild) M.appendChild(S.removeChild(S.firstChild));if (Z) M.appendChild(FCKTools.GetElementDocument(S).createElement('br'));S.parentNode.replaceChild(M,S);W=false;}}}};B.MoveToBookmark(C);B.Select();FCK.Focus();FCK.Events.FireEvent('OnSelectionChange');},GetState:function(){if (FCK.EditMode!=0||!FCK.EditorWindow) return -1;var A=new FCKElementPath(FCKSelection.GetBoundaryParentElement(true));var B=A.Block||A.BlockLimit;if (!B||B.nodeName.toLowerCase()=='body') return 0;for (var i=0;i';B.open();B.write(''+F+'<\/head><\/body><\/html>');B.close();if(FCKBrowserInfo.IsAIR) FCKAdobeAIR.Panel_Contructor(B,window.document.location);FCKTools.AddEventListenerEx(E,'focus',FCKPanel_Window_OnFocus,this);FCKTools.AddEventListenerEx(E,'blur',FCKPanel_Window_OnBlur,this);};B.dir=FCKLang.Dir;FCKTools.AddEventListener(B,'contextmenu',FCKTools.CancelEvent);this.MainNode=B.body.appendChild(B.createElement('DIV'));this.MainNode.style.cssFloat=this.IsRTL?'right':'left';};FCKPanel.prototype.AppendStyleSheet=function(A){FCKTools.AppendStyleSheet(this.Document,A);};FCKPanel.prototype.Preload=function(x,y,A){if (this._Popup) this._Popup.show(x,y,0,0,A);};FCKPanel.prototype.Show=function(x,y,A,B,C){var D;var E=this.MainNode;if (this._Popup){this._Popup.show(x,y,0,0,A);FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=(x*-1)+A.offsetWidth-D;};this._Popup.show(x,y,D,E.offsetHeight,A);if (this.OnHide){if (this._Timer) CheckPopupOnHide.call(this,true);this._Timer=FCKTools.SetInterval(CheckPopupOnHide,100,this);}}else{if (typeof(FCK.ToolbarSet.CurrentInstance.FocusManager)!='undefined') FCK.ToolbarSet.CurrentInstance.FocusManager.Lock();if (this.ParentPanel){this.ParentPanel.Lock();FCKPanel_Window_OnBlur(null,this.ParentPanel);};if (FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac){this._IFrame.scrolling='';FCKTools.RunFunction(function(){ this._IFrame.scrolling='no';},this);};if (FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel&&FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel!=this) FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel.Hide(false,true);FCKDomTools.SetElementStyles(E,{B:B?B+'px':'',C:C?C+'px':''});D=E.offsetWidth;if (!B) this._IFrame.width=1;if (!C) this._IFrame.height=1;D=E.offsetWidth||E.firstChild.offsetWidth;var F=FCKTools.GetDocumentPosition(this._Window,A.nodeType==9?(FCKTools.IsStrictMode(A)?A.documentElement:A.body):A);var G=FCKDomTools.GetPositionedAncestor(this._IFrame.parentNode);if (G){var H=FCKTools.GetDocumentPosition(FCKTools.GetElementWindow(G),G);F.x-=H.x;F.y-=H.y;};if (this.IsRTL&&!this.IsContextMenu) x=(x*-1);x+=F.x;y+=F.y;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=x+A.offsetWidth-D;}else{var I=FCKTools.GetViewPaneSize(this._Window);var J=FCKTools.GetScrollPosition(this._Window);var K=I.Height+J.Y;var L=I.Width+J.X;if ((x+D)>L) x-=x+D-L;if ((y+E.offsetHeight)>K) y-=y+E.offsetHeight-K;};FCKDomTools.SetElementStyles(this._IFrame,{left:x+'px',top:y+'px'});this._IFrame.contentWindow.focus();this._IsOpened=true;var M=this;this._resizeTimer=setTimeout(function(){var N=E.offsetWidth||E.firstChild.offsetWidth;var O=E.offsetHeight;M._IFrame.width=N;M._IFrame.height=O;},0);FCK.ToolbarSet.CurrentInstance.GetInstanceObject('FCKPanel')._OpenedPanel=this;};FCKTools.RunFunction(this.OnShow,this);};FCKPanel.prototype.Hide=function(A,B){if (this._Popup) this._Popup.hide();else{if (!this._IsOpened||this._LockCounter>0) return;if (typeof(FCKFocusManager)!='undefined'&&!B) FCKFocusManager.Unlock();this._IFrame.width=this._IFrame.height=0;this._IsOpened=false;if (this._resizeTimer){clearTimeout(this._resizeTimer);this._resizeTimer=null;};if (this.ParentPanel) this.ParentPanel.Unlock();if (!A) 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 A=this._Popup?FCKTools.GetDocumentWindow(this.Document):this._Window;var B=new FCKPanel(A);B.ParentPanel=this;return B;};FCKPanel.prototype.Lock=function(){this._LockCounter++;};FCKPanel.prototype.Unlock=function(){if (--this._LockCounter==0&&!this.HasFocus) this.Hide();};function FCKPanel_Window_OnFocus(e,A){A.HasFocus=true;};function FCKPanel_Window_OnBlur(e,A){A.HasFocus=false;if (A._LockCounter==0) FCKTools.RunFunction(A.Hide,A);};function CheckPopupOnHide(A){if (A||!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;}; +var FCKIcon=function(A){var B=A?typeof(A):'undefined';switch (B){case 'number':this.Path=FCKConfig.SkinPath+'fck_strip.gif';this.Size=16;this.Position=A;break;case 'undefined':this.Path=FCK_SPACER_PATH;break;case 'string':this.Path=A;break;default:this.Path=A[0];this.Size=A[1];this.Position=A[2];}};FCKIcon.prototype.CreateIconElement=function(A){var B,eIconImage;if (this.Position){var C='-'+((this.Position-1)*this.Size)+'px';if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path;eIconImage.style.top=C;}else{B=A.createElement('IMG');B.src=FCK_SPACER_PATH;B.style.backgroundPosition='0px '+C;B.style.backgroundImage='url("'+this.Path+'")';}}else{if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path?this.Path:FCK_SPACER_PATH;}else{B=A.createElement('IMG');B.src=this.Path?this.Path:FCK_SPACER_PATH;}};B.className='TB_Button_Image';return B;}; +var FCKToolbarButtonUI=function(A,B,C,D,E,F){this.Name=A;this.Label=B||A;this.Tooltip=C||this.Label;this.Style=E||0;this.State=F||0;this.Icon=new FCKIcon(D);if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarButtonUI_Cleanup);};FCKToolbarButtonUI.prototype._CreatePaddingElement=function(A){var B=A.createElement('IMG');B.className='TB_Button_Padding';B.src=FCK_SPACER_PATH;return B;};FCKToolbarButtonUI.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this.MainElement=B.createElement('DIV');C.title=this.Tooltip;if (FCKBrowserInfo.IsGecko) C.onmousedown=FCKTools.CancelEvent;FCKTools.AddEventListenerEx(C,'mouseover',FCKToolbarButtonUI_OnMouseOver,this);FCKTools.AddEventListenerEx(C,'mouseout',FCKToolbarButtonUI_OnMouseOut,this);FCKTools.AddEventListenerEx(C,'click',FCKToolbarButtonUI_OnClick,this);this.ChangeState(this.State,true);if (this.Style==0&&!this.ShowArrow){C.appendChild(this.Icon.CreateIconElement(B));}else{var D=C.appendChild(B.createElement('TABLE'));D.cellPadding=0;D.cellSpacing=0;var E=D.insertRow(-1);var F=E.insertCell(-1);if (this.Style==0||this.Style==2) F.appendChild(this.Icon.CreateIconElement(B));else F.appendChild(this._CreatePaddingElement(B));if (this.Style==1||this.Style==2){F=E.insertCell(-1);F.className='TB_Button_Text';F.noWrap=true;F.appendChild(B.createTextNode(this.Label));};if (this.ShowArrow){if (this.Style!=0){E.insertCell(-1).appendChild(this._CreatePaddingElement(B));};F=E.insertCell(-1);var G=F.appendChild(B.createElement('IMG'));G.src=FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif';G.width=5;G.height=3;};F=E.insertCell(-1);F.appendChild(this._CreatePaddingElement(B));};A.appendChild(C);};FCKToolbarButtonUI.prototype.ChangeState=function(A,B){if (!B&&this.State==A) return;var e=this.MainElement;if (!e) return;switch (parseInt(A,10)){case 0:e.className='TB_Button_Off';break;case 1:e.className='TB_Button_On';break;case -1:e.className='TB_Button_Disabled';break;};this.State=A;};function FCKToolbarButtonUI_OnMouseOver(A,B){if (B.State==0) this.className='TB_Button_Off_Over';else if (B.State==1) this.className='TB_Button_On_Over';};function FCKToolbarButtonUI_OnMouseOut(A,B){if (B.State==0) this.className='TB_Button_Off';else if (B.State==1) this.className='TB_Button_On';};function FCKToolbarButtonUI_OnClick(A,B){if (B.OnClick&&B.State!=-1) B.OnClick(B);};function FCKToolbarButtonUI_Cleanup(){this.MainElement=null;}; +var FCKToolbarButton=function(A,B,C,D,E,F,G){this.CommandName=A;this.Label=B;this.Tooltip=C;this.Style=D;this.SourceView=E?true:false;this.ContextSensitive=F?true:false;if (G==null) this.IconPath=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(G)=='number') this.IconPath=[FCKConfig.SkinPath+'fck_strip.gif',16,G];else this.IconPath=G;};FCKToolbarButton.prototype.Create=function(A){this._UIButton=new FCKToolbarButtonUI(this.CommandName,this.Label,this.Tooltip,this.IconPath,this.Style);this._UIButton.OnClick=this.Click;this._UIButton._ToolbarButton=this;this._UIButton.Create(A);};FCKToolbarButton.prototype.RefreshState=function(){var A=this._UIButton;if (!A) return;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B==A.State) return;A.ChangeState(B);};FCKToolbarButton.prototype.Click=function(){var A=this._ToolbarButton||this;FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(A.CommandName).Execute();};FCKToolbarButton.prototype.Enable=function(){this.RefreshState();};FCKToolbarButton.prototype.Disable=function(){this._UIButton.ChangeState(-1);}; +var FCKSpecialCombo=function(A,B,C,D,E){this.FieldWidth=B||100;this.PanelWidth=C||150;this.PanelMaxHeight=D||150;this.Label=' ';this.Caption=A;this.Tooltip=A;this.Style=2;this.Enabled=true;this.Items={};this._Panel=new FCKPanel(E||window);this._Panel.AppendStyleSheet(FCKConfig.SkinEditorCSS);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);};function FCKSpecialCombo_ItemOnMouseOver(){this.className+=' SC_ItemOver';};function FCKSpecialCombo_ItemOnMouseOut(){this.className=this.originalClass;};function FCKSpecialCombo_ItemOnClick(A,B,C){this.className=this.originalClass;B._Panel.Hide();B.SetLabel(this.FCKItemLabel);if (typeof(B.OnSelect)=='function') B.OnSelect(C,this);};FCKSpecialCombo.prototype.ClearItems=function (){if (this.Items) this.Items={};var A=this._ItemsHolderEl;while (A.firstChild) A.removeChild(A.firstChild);};FCKSpecialCombo.prototype.AddItem=function(A,B,C,D){var E=this._ItemsHolderEl.appendChild(this._Panel.Document.createElement('DIV'));E.className=E.originalClass='SC_Item';E.innerHTML=B;E.FCKItemLabel=C||A;E.Selected=false;if (FCKBrowserInfo.IsIE) E.style.width='100%';if (D) E.style.backgroundColor=D;FCKTools.AddEventListenerEx(E,'mouseover',FCKSpecialCombo_ItemOnMouseOver);FCKTools.AddEventListenerEx(E,'mouseout',FCKSpecialCombo_ItemOnMouseOut);FCKTools.AddEventListenerEx(E,'click',FCKSpecialCombo_ItemOnClick,[this,A]);this.Items[A.toString().toLowerCase()]=E;return E;};FCKSpecialCombo.prototype.SelectItem=function(A){if (typeof A=='string') A=this.Items[A.toString().toLowerCase()];if (A){A.className=A.originalClass='SC_ItemSelected';A.Selected=true;}};FCKSpecialCombo.prototype.SelectItemByLabel=function(A,B){for (var C in this.Items){var D=this.Items[C];if (D.FCKItemLabel==A){D.className=D.originalClass='SC_ItemSelected';D.Selected=true;if (B) this.SetLabel(A);}}};FCKSpecialCombo.prototype.DeselectAll=function(A){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 (A) this.SetLabel('');};FCKSpecialCombo.prototype.SetLabelById=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];this.SetLabel(B?B.FCKItemLabel:'');};FCKSpecialCombo.prototype.SetLabel=function(A){A=(!A||A.length==0)?' ':A;if (A==this.Label) return;this.Label=A;var B=this._LabelEl;if (B){B.innerHTML=A;FCKTools.DisableSelection(B);}};FCKSpecialCombo.prototype.SetEnabled=function(A){this.Enabled=A;if (this._OuterTable) this._OuterTable.className=A?'':'SC_FieldDisabled';};FCKSpecialCombo.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this._OuterTable=A.appendChild(B.createElement('TABLE'));C.cellPadding=0;C.cellSpacing=0;C.insertRow(-1);var D;var E;switch (this.Style){case 0:D='TB_ButtonType_Icon';E=false;break;case 1:D='TB_ButtonType_Text';E=false;break;case 2:E=true;break;};if (this.Caption&&this.Caption.length>0&&E){var F=C.rows[0].insertCell(-1);F.innerHTML=this.Caption;F.className='SC_FieldCaption';};var G=FCKTools.AppendElement(C.rows[0].insertCell(-1),'div');if (E){G.className='SC_Field';G.style.width=this.FieldWidth+'px';G.innerHTML='
     
    ';this._LabelEl=G.getElementsByTagName('label')[0];this._LabelEl.innerHTML=this.Label;}else{G.className='TB_Button_Off';G.innerHTML='
    '+this.Caption+'
    ';};FCKTools.AddEventListenerEx(G,'mouseover',FCKSpecialCombo_OnMouseOver,this);FCKTools.AddEventListenerEx(G,'mouseout',FCKSpecialCombo_OnMouseOut,this);FCKTools.AddEventListenerEx(G,'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 A in this.Items) this.Items[A]=null;}};function FCKSpecialCombo_OnMouseOver(A,B){if (B.Enabled){switch (B.Style){case 0:this.className='TB_Button_On_Over';break;case 1:this.className='TB_Button_On_Over';break;case 2:this.className='SC_Field SC_FieldOver';break;}}};function FCKSpecialCombo_OnMouseOut(A,B){switch (B.Style){case 0:this.className='TB_Button_Off';break;case 1:this.className='TB_Button_Off';break;case 2:this.className='SC_Field';break;}};function FCKSpecialCombo_OnClick(e,A){if (A.Enabled){var B=A._Panel;var C=A._PanelBox;var D=A._ItemsHolderEl;var E=A.PanelMaxHeight;if (A.OnBeforeClick) A.OnBeforeClick(A);if (FCKBrowserInfo.IsIE) B.Preload(0,this.offsetHeight,this);if (D.offsetHeight>E) C.style.height=E+'px';else C.style.height='';B.Show(0,this.offsetHeight,this);}}; +var FCKToolbarSpecialCombo=function(){this.SourceView=false;this.ContextSensitive=true;this.FieldWidth=null;this.PanelWidth=null;this.PanelMaxHeight=null;};FCKToolbarSpecialCombo.prototype.DefaultLabel='';function FCKToolbarSpecialCombo_OnSelect(A,B){FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).Execute(A,B);};FCKToolbarSpecialCombo.prototype.Create=function(A){this._Combo=new FCKSpecialCombo(this.GetLabel(),this.FieldWidth,this.PanelWidth,this.PanelMaxHeight,FCKBrowserInfo.IsIE?window:FCKTools.GetElementWindow(A).parent);this._Combo.Tooltip=this.Tooltip;this._Combo.Style=this.Style;this.CreateItems(this._Combo);this._Combo.Create(A);this._Combo.CommandName=this.CommandName;this._Combo.OnSelect=FCKToolbarSpecialCombo_OnSelect;};function FCKToolbarSpecialCombo_RefreshActiveItems(A,B){A.DeselectAll();A.SelectItem(B);A.SetLabelById(B);};FCKToolbarSpecialCombo.prototype.RefreshState=function(){var A;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B!=-1){A=1;if (this.RefreshActiveItems) this.RefreshActiveItems(this._Combo,B);else{if (this._LastValue!==B){this._LastValue=B;if (!B||B.length==0){this._Combo.DeselectAll();this._Combo.SetLabel(this.DefaultLabel);}else FCKToolbarSpecialCombo_RefreshActiveItems(this._Combo,B);}}}else A=-1;if (A==this.State) return;if (A==-1){this._Combo.DeselectAll();this._Combo.SetLabel('');};this.State=A;this._Combo.SetEnabled(A!=-1);};FCKToolbarSpecialCombo.prototype.Enable=function(){this.RefreshState();};FCKToolbarSpecialCombo.prototype.Disable=function(){this.State=-1;this._Combo.DeselectAll();this._Combo.SetLabel('');this._Combo.SetEnabled(false);}; +var FCKToolbarStyleCombo=function(A,B){if (A===false) return;this.CommandName='Style';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.DefaultLabel=FCKConfig.DefaultStyleLabel||'';};FCKToolbarStyleCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarStyleCombo.prototype.GetLabel=function(){return FCKLang.Style;};FCKToolbarStyleCombo.prototype.GetStyles=function(){var A={};var B=FCK.ToolbarSet.CurrentInstance.Styles.GetStyles();for (var C in B){var D=B[C];if (!D.IsCore) A[C]=D;};return A;};FCKToolbarStyleCombo.prototype.CreateItems=function(A){var B=A._Panel.Document;FCKTools.AppendStyleSheet(B,FCKConfig.ToolbarComboPreviewCSS);FCKTools.AppendStyleString(B,FCKConfig.EditorAreaStyles);B.body.className+=' ForceBaseFont';FCKConfig.ApplyBodyAttributes(B.body);var C=this.GetStyles();for (var D in C){var E=C[D];var F=E.GetType()==2?D:FCKToolbarStyleCombo_BuildPreview(E,E.Label||D);var G=A.AddItem(D,F);G.Style=E;};A.OnBeforeClick=this.StyleCombo_OnBeforeClick;};FCKToolbarStyleCombo.prototype.RefreshActiveItems=function(A){var B=FCK.ToolbarSet.CurrentInstance.Selection.GetBoundaryParentElement(true);if (B){var C=new FCKElementPath(B);var D=C.Elements;for (var e=0;e');var E=A.Element;if (E=='bdo') E='span';D=['<',E];var F=A._StyleDesc.Attributes;if (F){for (var G in F){D.push(' ',G,'="',A.GetFinalAttributeValue(G),'"');}};if (A._GetStyleText().length>0) D.push(' style="',A.GetFinalStyleValue(),'"');D.push('>',B,'');if (C==0) D.push('');return D.join('');}; +var FCKToolbarFontFormatCombo=function(A,B){if (A===false) return;this.CommandName='FontFormat';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.NormalLabel='Normal';this.PanelWidth=190;this.DefaultLabel=FCKConfig.DefaultFontFormatLabel||'';};FCKToolbarFontFormatCombo.prototype=new FCKToolbarStyleCombo(false);FCKToolbarFontFormatCombo.prototype.GetLabel=function(){return FCKLang.FontFormat;};FCKToolbarFontFormatCombo.prototype.GetStyles=function(){var A={};var B=FCKLang['FontFormats'].split(';');var C={p:B[0],pre:B[1],address:B[2],h1:B[3],h2:B[4],h3:B[5],h4:B[6],h5:B[7],h6:B[8],div:B[9]||(B[0]+' (DIV)')};var D=FCKConfig.FontFormats.split(';');for (var i=0;i';G.open();G.write(''+H+''+document.getElementById('xToolbarSpace').innerHTML+'');G.close();if(FCKBrowserInfo.IsAIR) FCKAdobeAIR.ToolbarSet_InitOutFrame(G);FCKTools.AddEventListener(G,'contextmenu',FCKTools.CancelEvent);FCKTools.AppendStyleSheet(G,FCKConfig.SkinEditorCSS);B=D.__FCKToolbarSet=new FCKToolbarSet(G);B._IFrame=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(D,FCKToolbarSet_Target_Cleanup);};B.CurrentInstance=FCK;if (!B.ToolbarItems) B.ToolbarItems=FCKToolbarItems;FCK.AttachToOnSelectionChange(B.RefreshItemsState);return B;};function FCK_OnBlur(A){var B=A.ToolbarSet;if (B.CurrentInstance==A) B.Disable();};function FCK_OnFocus(A){var B=A.ToolbarSet;var C=A||FCK;B.CurrentInstance.FocusManager.RemoveWindow(B._IFrame.contentWindow);B.CurrentInstance=C;C.FocusManager.AddWindow(B._IFrame.contentWindow,true);B.Enable();};function FCKToolbarSet_Cleanup(){this._TargetElement=null;this._IFrame=null;};function FCKToolbarSet_Target_Cleanup(){this.__FCKToolbarSet=null;};var FCKToolbarSet=function(A){this._Document=A;this._TargetElement=A.getElementById('xToolbar');var B=A.getElementById('xExpandHandle');var C=A.getElementById('xCollapseHandle');B.title=FCKLang.ToolbarExpand;FCKTools.AddEventListener(B,'click',FCKToolbarSet_Expand_OnClick);C.title=FCKLang.ToolbarCollapse;FCKTools.AddEventListener(C,'click',FCKToolbarSet_Collapse_OnClick);if (!FCKConfig.ToolbarCanCollapse||FCKConfig.ToolbarStartExpanded) this.Expand();else this.Collapse();C.style.display=FCKConfig.ToolbarCanCollapse?'':'none';if (FCKConfig.ToolbarCanCollapse) C.style.display='';else A.getElementById('xTBLeftBorder').style.display='';this.Toolbars=[];this.IsLoaded=false;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarSet_Cleanup);};function FCKToolbarSet_Expand_OnClick(){FCK.ToolbarSet.Expand();};function FCKToolbarSet_Collapse_OnClick(){FCK.ToolbarSet.Collapse();};FCKToolbarSet.prototype.Expand=function(){this._ChangeVisibility(false);};FCKToolbarSet.prototype.Collapse=function(){this._ChangeVisibility(true);};FCKToolbarSet.prototype._ChangeVisibility=function(A){this._Document.getElementById('xCollapsed').style.display=A?'':'none';this._Document.getElementById('xExpanded').style.display=A?'none':'';if (FCKBrowserInfo.IsGecko){FCKTools.RunFunction(window.onresize);}};FCKToolbarSet.prototype.Load=function(A){this.Name=A;this.Items=[];this.ItemsWysiwygOnly=[];this.ItemsContextSensitive=[];this._TargetElement.innerHTML='';var B=FCKConfig.ToolbarSets[A];if (!B){alert(FCKLang.UnknownToolbarSet.replace(/%1/g,A));return;};this.Toolbars=[];for (var x=0;x0) break;}catch (e){break;};D=D.parent;};var E=D.document;var F=function(){if (!B) B=FCKConfig.FloatingPanelsZIndex+999;return++B;};var G=function(){if (!C) return;var H=FCKTools.IsStrictMode(E)?E.documentElement:E.body;FCKDomTools.SetElementStyles(C,{'width':Math.max(H.scrollWidth,H.clientWidth,E.scrollWidth||0)-1+'px','height':Math.max(H.scrollHeight,H.clientHeight,E.scrollHeight||0)-1+'px'});};var I=function(element){element.style.cssText='margin:0;padding:0;border:0;background-color:transparent;background-image:none;';};return {OpenDialog:function(dialogName,dialogTitle,dialogPage,width,height,customValue,parentWindow,resizable){if (!A) this.DisplayMainCover();var J={Title:dialogTitle,Page:dialogPage,Editor:window,CustomValue:customValue,TopWindow:D};FCK.ToolbarSet.CurrentInstance.Selection.Save();var K=FCKTools.GetViewPaneSize(D);var L=FCKTools.GetScrollPosition(D);var M=Math.max(L.Y+(K.Height-height-20)/2,0);var N=Math.max(L.X+(K.Width-width-20)/2,0);var O=E.createElement('iframe');I(O);O.src=FCKConfig.BasePath+'fckdialog.html';O.frameBorder=0;O.allowTransparency=true;FCKDomTools.SetElementStyles(O,{'position':'absolute','top':M+'px','left':N+'px','width':width+'px','height':height+'px','zIndex':F()});O._DialogArguments=J;E.body.appendChild(O);O._ParentDialog=A;A=O;},OnDialogClose:function(dialogWindow){var O=dialogWindow.frameElement;FCKDomTools.RemoveNode(O);if (O._ParentDialog){A=O._ParentDialog;O._ParentDialog.contentWindow.SetEnabled(true);}else{if (!FCKBrowserInfo.IsIE) FCK.Focus();this.HideMainCover();setTimeout(function(){ A=null;},0);FCK.ToolbarSet.CurrentInstance.Selection.Release();}},DisplayMainCover:function(){C=E.createElement('div');I(C);FCKDomTools.SetElementStyles(C,{'position':'absolute','zIndex':F(),'top':'0px','left':'0px','backgroundColor':FCKConfig.BackgroundBlockerColor});FCKDomTools.SetOpacity(C,FCKConfig.BackgroundBlockerOpacity);if (FCKBrowserInfo.IsIE&&!FCKBrowserInfo.IsIE7){var Q=E.createElement('iframe');I(Q);Q.hideFocus=true;Q.frameBorder=0;Q.src=FCKTools.GetVoidUrl();FCKDomTools.SetElementStyles(Q,{'width':'100%','height':'100%','position':'absolute','left':'0px','top':'0px','filter':'progid:DXImageTransform.Microsoft.Alpha(opacity=0)'});C.appendChild(Q);};FCKTools.AddEventListener(D,'resize',G);G();E.body.appendChild(C);FCKFocusManager.Lock();},HideMainCover:function(){FCKDomTools.RemoveNode(C);FCKFocusManager.Unlock();},GetCover:function(){return C;}};})(); +var FCKMenuItem=function(A,B,C,D,E,F){this.Name=B;this.Label=C||B;this.IsDisabled=E;this.Icon=new FCKIcon(D);this.SubMenu=new FCKMenuBlockPanel();this.SubMenu.Parent=A;this.SubMenu.OnClick=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnClick,this);this.CustomData=F;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuItem_Cleanup);};FCKMenuItem.prototype.AddItem=function(A,B,C,D,E){this.HasSubMenu=true;return this.SubMenu.AddItem(A,B,C,D,E);};FCKMenuItem.prototype.AddSeparator=function(){this.SubMenu.AddSeparator();};FCKMenuItem.prototype.Create=function(A){var B=this.HasSubMenu;var C=FCKTools.GetElementDocument(A);var r=this.MainElement=A.insertRow(-1);r.className=this.IsDisabled?'MN_Item_Disabled':'MN_Item';if (!this.IsDisabled){FCKTools.AddEventListenerEx(r,'mouseover',FCKMenuItem_OnMouseOver,[this]);FCKTools.AddEventListenerEx(r,'click',FCKMenuItem_OnClick,[this]);if (!B) FCKTools.AddEventListenerEx(r,'mouseout',FCKMenuItem_OnMouseOut,[this]);};var D=r.insertCell(-1);D.className='MN_Icon';D.appendChild(this.Icon.CreateIconElement(C));D=r.insertCell(-1);D.className='MN_Label';D.noWrap=true;D.appendChild(C.createTextNode(this.Label));D=r.insertCell(-1);if (B){D.className='MN_Arrow';var E=D.appendChild(C.createElement('IMG'));E.src=FCK_IMAGES_PATH+'arrow_'+FCKLang.Dir+'.gif';E.width=4;E.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){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();};function FCKMenuItem_SubMenu_OnClick(A,B){FCKTools.RunFunction(B.OnClick,B,[A]);};function FCKMenuItem_SubMenu_OnHide(A){A.Deactivate();};function FCKMenuItem_OnClick(A,B){if (B.HasSubMenu) B.Activate();else{B.Deactivate();FCKTools.RunFunction(B.OnClick,B,[B]);}};function FCKMenuItem_OnMouseOver(A,B){B.Activate();};function FCKMenuItem_OnMouseOut(A,B){B.Deactivate();};function FCKMenuItem_Cleanup(){this.MainElement=null;}; +var FCKMenuBlock=function(){this._Items=[];};FCKMenuBlock.prototype.Count=function(){return this._Items.length;};FCKMenuBlock.prototype.AddItem=function(A,B,C,D,E){var F=new FCKMenuItem(this,A,B,C,D,E);F.OnClick=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnClick,this);F.OnActivate=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnActivate,this);this._Items.push(F);return F;};FCKMenuBlock.prototype.AddSeparator=function(){this._Items.push(new FCKMenuSeparator());};FCKMenuBlock.prototype.RemoveAllItems=function(){this._Items=[];var A=this._ItemsTable;if (A){while (A.rows.length>0) A.deleteRow(0);}};FCKMenuBlock.prototype.Create=function(A){if (!this._ItemsTable){if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuBlock_Cleanup);this._Window=FCKTools.GetElementWindow(A);var B=FCKTools.GetElementDocument(A);var C=A.appendChild(B.createElement('table'));C.cellPadding=0;C.cellSpacing=0;FCKTools.DisableSelection(C);var D=C.insertRow(-1).insertCell(-1);D.className='MN_Menu';var E=this._ItemsTable=D.appendChild(B.createElement('table'));E.cellPadding=0;E.cellSpacing=0;};for (var i=0;i0&&F.href.length==0);if (G) return;menu.AddSeparator();if (E) 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){var F=FCKSelection.MoveToAncestorNode('A');var G=(F&&F.name.length>0);if (G||(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(){FCK.Events.FireEvent('OnSelectionChange');var A,sTagName;if ((A=FCKSelection.GetSelectedElement())) sTagName=A.tagName;var B=FCK.ContextMenu._InnerContextMenu;B.RemoveAllItems();var C=FCK.ContextMenu.Listeners;for (var i=0;i0){D=A.substr(0,B.index);this._sourceHtml=A.substr(B.index);}else{C=true;D=B[0];this._sourceHtml=A.substr(B[0].length);}}else{D=A;this._sourceHtml=null;};return { 'isTag':C,'value':D };},Each:function(A){var B;while ((B=this.Next())) A(B.isTag,B.value);}};var FCKHtmlIterator=function(A){this._sourceHtml=A;};FCKHtmlIterator.prototype={Next:function(){var A=this._sourceHtml;if (A==null) return null;var B=FCKRegexLib.HtmlTag.exec(A);var C=false;var D="";if (B){if (B.index>0){D=A.substr(0,B.index);this._sourceHtml=A.substr(B.index);}else{C=true;D=B[0];this._sourceHtml=A.substr(B[0].length);}}else{D=A;this._sourceHtml=null;};return { 'isTag':C,'value':D };},Each:function(A){var B;while ((B=this.Next())) A(B.isTag,B.value);}}; +var FCKPlugin=function(A,B,C){this.Name=A;this.BasePath=C?C:FCKConfig.PluginsPath;this.Path=this.BasePath+A+'/';if (!B||B.length==0) this.AvailableLangs=[];else this.AvailableLangs=B.split(',');};FCKPlugin.prototype.Load=function(){if (this.AvailableLangs.length>0){var A;if (this.AvailableLangs.IndexOf(FCKLanguageManager.ActiveLanguage.Code)>=0) A=FCKLanguageManager.ActiveLanguage.Code;else A=this.AvailableLangs[0];LoadScript(this.Path+'lang/'+A+'.js');};LoadScript(this.Path+'fckplugin.js');}; +var FCKPlugins=FCK.Plugins={};FCKPlugins.ItemsCount=0;FCKPlugins.Items={};FCKPlugins.Load=function(){var A=FCKPlugins.Items;for (var i=0;i - - - - - - - - - - - -
    -

    FontFormats Localization

    -

    - IE has some limits when handling the "Font Format". It actually uses localized - strings to retrieve the current format value. This makes it very difficult to - make a system that works on every single computer in the world. -

    -

    - With FCKeditor, this problem impacts in the "Format" toolbar command that - doesn't reflects the format of the current cursor position. -

    -

    - There is only one way to make it work. We must localize FCKeditor using the - strings used by IE. In this way, we will have the expected behavior at least - when using FCKeditor in the same language as the browser. So, when localizing - FCKeditor, go to a computer with IE in the target language, open this page and - use the following string to the "FontFormats" value: -

    -
    - FontFormats : "", -
    -
    -
    -

     

    -
     
    -
     
    -

     

    -

     

    -

     

    -

     

    -
     
    -
     
    -
    - - diff --git a/phpgwapi/js/fckeditor/editor/lang/_translationstatus.txt b/phpgwapi/js/fckeditor/editor/lang/_translationstatus.txt index 8cbd8b38b4..e9e1795c91 100644 --- a/phpgwapi/js/fckeditor/editor/lang/_translationstatus.txt +++ b/phpgwapi/js/fckeditor/editor/lang/_translationstatus.txt @@ -1,6 +1,6 @@ -/* +/* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -21,56 +21,57 @@ * Translations Status. */ -af.js Found: 401 Missing: 1 -ar.js Found: 401 Missing: 1 -bg.js Found: 378 Missing: 24 -bn.js Found: 386 Missing: 16 -bs.js Found: 230 Missing: 172 -ca.js Found: 401 Missing: 1 -cs.js Found: 386 Missing: 16 -da.js Found: 386 Missing: 16 -de.js Found: 401 Missing: 1 -el.js Found: 401 Missing: 1 -en-au.js Found: 402 Missing: 0 -en-ca.js Found: 402 Missing: 0 -en-uk.js Found: 402 Missing: 0 -eo.js Found: 350 Missing: 52 -es.js Found: 386 Missing: 16 -et.js Found: 386 Missing: 16 -eu.js Found: 386 Missing: 16 -fa.js Found: 401 Missing: 1 -fi.js Found: 386 Missing: 16 -fo.js Found: 401 Missing: 1 -fr.js Found: 401 Missing: 1 -gl.js Found: 386 Missing: 16 -he.js Found: 401 Missing: 1 -hi.js Found: 401 Missing: 1 -hr.js Found: 401 Missing: 1 -hu.js Found: 401 Missing: 1 -it.js Found: 401 Missing: 1 -ja.js Found: 401 Missing: 1 -km.js Found: 376 Missing: 26 -ko.js Found: 373 Missing: 29 -lt.js Found: 381 Missing: 21 -lv.js Found: 386 Missing: 16 -mn.js Found: 230 Missing: 172 -ms.js Found: 356 Missing: 46 -nb.js Found: 400 Missing: 2 -nl.js Found: 401 Missing: 1 -no.js Found: 400 Missing: 2 -pl.js Found: 386 Missing: 16 -pt-br.js Found: 401 Missing: 1 -pt.js Found: 386 Missing: 16 -ro.js Found: 400 Missing: 2 -ru.js Found: 401 Missing: 1 -sk.js Found: 401 Missing: 1 -sl.js Found: 378 Missing: 24 -sr-latn.js Found: 373 Missing: 29 -sr.js Found: 373 Missing: 29 -sv.js Found: 381 Missing: 21 -th.js Found: 398 Missing: 4 -tr.js Found: 401 Missing: 1 -uk.js Found: 401 Missing: 1 -vi.js Found: 401 Missing: 1 -zh-cn.js Found: 401 Missing: 1 -zh.js Found: 401 Missing: 1 +af.js Found: 396 Missing: 15 +ar.js Found: 411 Missing: 0 +bg.js Found: 373 Missing: 38 +bn.js Found: 380 Missing: 31 +bs.js Found: 226 Missing: 185 +ca.js Found: 411 Missing: 0 +cs.js Found: 411 Missing: 0 +da.js Found: 381 Missing: 30 +de.js Found: 411 Missing: 0 +el.js Found: 396 Missing: 15 +en-au.js Found: 411 Missing: 0 +en-ca.js Found: 411 Missing: 0 +en-uk.js Found: 411 Missing: 0 +eo.js Found: 346 Missing: 65 +es.js Found: 411 Missing: 0 +et.js Found: 411 Missing: 0 +eu.js Found: 411 Missing: 0 +fa.js Found: 397 Missing: 14 +fi.js Found: 411 Missing: 0 +fo.js Found: 396 Missing: 15 +fr-ca.js Found: 411 Missing: 0 +fr.js Found: 411 Missing: 0 +gl.js Found: 381 Missing: 30 +he.js Found: 411 Missing: 0 +hi.js Found: 411 Missing: 0 +hr.js Found: 411 Missing: 0 +hu.js Found: 411 Missing: 0 +it.js Found: 396 Missing: 15 +ja.js Found: 411 Missing: 0 +km.js Found: 370 Missing: 41 +ko.js Found: 390 Missing: 21 +lt.js Found: 376 Missing: 35 +lv.js Found: 381 Missing: 30 +mn.js Found: 411 Missing: 0 +ms.js Found: 352 Missing: 59 +nb.js Found: 395 Missing: 16 +nl.js Found: 411 Missing: 0 +no.js Found: 395 Missing: 16 +pl.js Found: 411 Missing: 0 +pt-br.js Found: 411 Missing: 0 +pt.js Found: 381 Missing: 30 +ro.js Found: 410 Missing: 1 +ru.js Found: 411 Missing: 0 +sk.js Found: 396 Missing: 15 +sl.js Found: 411 Missing: 0 +sr-latn.js Found: 368 Missing: 43 +sr.js Found: 368 Missing: 43 +sv.js Found: 396 Missing: 15 +th.js Found: 393 Missing: 18 +tr.js Found: 396 Missing: 15 +uk.js Found: 397 Missing: 14 +vi.js Found: 396 Missing: 15 +zh-cn.js Found: 411 Missing: 0 +zh.js Found: 411 Missing: 0 diff --git a/phpgwapi/js/fckeditor/editor/lang/af.js b/phpgwapi/js/fckeditor/editor/lang/af.js index 857dc3e9d4..7b5c9898c7 100644 --- a/phpgwapi/js/fckeditor/editor/lang/af.js +++ b/phpgwapi/js/fckeditor/editor/lang/af.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Skakel", InsertLink : "Skakel byvoeg/verander", RemoveLink : "Skakel verweider", Anchor : "Plekhouer byvoeg/verander", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "Beeld", InsertImage : "Beeld byvoeg/verander", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "Regs rig", BlockJustify : "Blok paradeer", DecreaseIndent : "Paradeering verkort", IncreaseIndent : "Paradeering verleng", +Blockquote : "Blockquote", //MISSING Undo : "Ont-skep", Redo : "Her-skep", NumberedListLbl : "Genommerde lys", @@ -103,20 +105,27 @@ SelectionField : "Opklapbare keuse strook", ImageButton : "Beeld knop", FitWindow : "Maksimaliseer venster grote", +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "Verander skakel", CellCM : "Cell", RowCM : "Ry", ColumnCM : "Kolom", -InsertRow : "Ry byvoeg", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "Ry verweider", -InsertColumn : "Kolom byvoeg", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "Kolom verweider", -InsertCell : "Cell byvoeg", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "Cell verweider", MergeCells : "Cell verenig", -SplitCell : "Cell verdeel", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "Tabel verweider", CellProperties : "Cell eienskappe", TableProperties : "Tabel eienskappe", @@ -134,7 +143,7 @@ SelectionFieldProp : "Opklapbare keuse strook eienskappe", TextareaProp : "Karakter area eienskappe", FormProp : "Form eienskappe", -FontFormats : "Normaal;Geformateerd;Adres;Opskrif 1;Opskrif 2;Opskrif 3;Opskrif 4;Opskrif 5;Opskrif 6;Normaal (DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "Normaal;Geformateerd;Adres;Opskrif 1;Opskrif 2;Opskrif 3;Opskrif 4;Opskrif 5;Opskrif 6;Normaal (DIV)", // Alerts and Messages ProcessingXHTML : "XHTML word verarbeit. U geduld asseblief...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Kies 'n plekhouer", DlgLnkAnchorByName : "Volgens plekhouer naam", DlgLnkAnchorById : "Volgens element Id", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Geen plekhouers beskikbaar in dokument}", DlgLnkEMail : "E-Mail Adres", DlgLnkEMailSubject : "Boodskap Opskrif", DlgLnkEMailBody : "Boodskap Inhoud", @@ -322,6 +331,9 @@ DlgCellBackColor : "Agtergrond Kleur", DlgCellBorderColor : "Kant Kleur", DlgCellBtnSelect : "Keuse...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "Vind", DlgFindFindBtn : "Vind", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Voeg asseblief die inhoud in die gegewe box by met sleutel kombe DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING DlgPasteIgnoreFont : "Ignoreer karakter soort defenisies", DlgPasteRemoveStyles : "Verweider Styl defenisies", -DlgPasteCleanBox : "Maak Box Skoon", // Color Picker ColorAutomatic : "Automaties", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "Blaai Informasie deur", DlgAboutLicenseTab : "Lesensie", DlgAboutVersion : "weergawe", DlgAboutInfo : "Vir meer informasie gaan na " -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/ar.js b/phpgwapi/js/fckeditor/editor/lang/ar.js index 91d34f11e1..fcab26f33a 100644 --- a/phpgwapi/js/fckeditor/editor/lang/ar.js +++ b/phpgwapi/js/fckeditor/editor/lang/ar.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "رابط", InsertLink : "إدراج/تحرير رابط", RemoveLink : "إزالة رابط", Anchor : "إدراج/تحرير إشارة مرجعية", +AnchorDelete : "إزالة إشارة مرجعية", InsertImageLbl : "صورة", InsertImage : "إدراج/تحرير صورة", InsertFlashLbl : "فلاش", @@ -70,6 +71,7 @@ RightJustify : "محاذاة إلى اليمين", BlockJustify : "ضبط", DecreaseIndent : "إنقاص المسافة البادئة", IncreaseIndent : "زيادة المسافة البادئة", +Blockquote : "اقتباس", Undo : "تراجع", Redo : "إعادة", NumberedListLbl : "تعداد رقمي", @@ -103,20 +105,27 @@ SelectionField : "قائمة منسدلة", ImageButton : "زر صورة", FitWindow : "تكبير حجم المحرر", +ShowBlocks : "مخطط تفصيلي", // Context Menu EditLink : "تحرير رابط", CellCM : "خلية", RowCM : "صف", ColumnCM : "عمود", -InsertRow : "إدراج صف", +InsertRowAfter : "إدراج صف بعد", +InsertRowBefore : "إدراج صف قبل", DeleteRows : "حذف صفوف", -InsertColumn : "إدراج عمود", +InsertColumnAfter : "إدراج عمود بعد", +InsertColumnBefore : "إدراج عمود قبل", DeleteColumns : "حذف أعمدة", -InsertCell : "إدراج خلية", +InsertCellAfter : "إدراج خلية بعد", +InsertCellBefore : "إدراج خلية قبل", DeleteCells : "حذف خلايا", MergeCells : "دمج خلايا", -SplitCell : "تقسيم خلية", +MergeRight : "دمج لليمين", +MergeDown : "دمج للأسفل", +HorizontalSplitCell : "تقسيم الخلية أفقياً", +VerticalSplitCell : "تقسيم الخلية عمودياً", TableDelete : "حذف الجدول", CellProperties : "خصائص الخلية", TableProperties : "خصائص الجدول", @@ -134,7 +143,7 @@ SelectionFieldProp : "خصائص القائمة المنسدلة", TextareaProp : "خصائص ناحية النص", FormProp : "خصائص النموذج", -FontFormats : "عادي;منسّق;دوس;العنوان 1;العنوان 2;العنوان 3;العنوان 4;العنوان 5;العنوان 6", //REVIEW : Check _getfontformat.html +FontFormats : "عادي;منسّق;دوس;العنوان 1;العنوان 2;العنوان 3;العنوان 4;العنوان 5;العنوان 6", // Alerts and Messages ProcessingXHTML : "إنتظر قليلاً ريثما تتم معالَجة‏ XHTML. لن يستغرق طويلاً...", @@ -229,7 +238,7 @@ DlgLnkURL : "الموقع", DlgLnkAnchorSel : "اختر علامة مرجعية", DlgLnkAnchorByName : "حسب اسم العلامة", DlgLnkAnchorById : "حسب تعريف العنصر", -DlgLnkNoAnchors : "<لا يوجد علامات مرجعية في هذا المستند>", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(لا يوجد علامات مرجعية في هذا المستند)", DlgLnkEMail : "عنوان بريد إلكتروني", DlgLnkEMailSubject : "موضوع الرسالة", DlgLnkEMailBody : "محتوى الرسالة", @@ -322,6 +331,9 @@ DlgCellBackColor : "لون الخلفية", DlgCellBorderColor : "لون الحدود", DlgCellBtnSelect : "حدّد...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "بحث واستبدال", + // Find Dialog DlgFindTitle : "بحث", DlgFindFindBtn : "ابحث", @@ -344,10 +356,9 @@ PasteAsText : "لصق كنص بسيط", PasteFromWord : "لصق من وورد", DlgPasteMsg2 : "الصق داخل الصندوق بإستخدام زرّي (Ctrl+V) في لوحة المفاتيح، ثم اضغط زر موافق.", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteSec : "نظراً لإعدادات الأمان الخاصة بمتصفحك، لن يتمكن هذا المحرر من الوصول لمحتوى حافظتك، لذا وجب عليك لصق المحتوى مرة أخرى في هذه النافذة.", DlgPasteIgnoreFont : "تجاهل تعريفات أسماء الخطوط", DlgPasteRemoveStyles : "إزالة تعريفات الأنماط", -DlgPasteCleanBox : "نظّف محتوى الصندوق", // Color Picker ColorAutomatic : "تلقائي", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "معلومات متصفحك", DlgAboutLicenseTab : "الترخيص", DlgAboutVersion : "الإصدار", DlgAboutInfo : "لمزيد من المعلومات تفضل بزيارة" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/bg.js b/phpgwapi/js/fckeditor/editor/lang/bg.js index 423bd02d7d..b42a6fd49a 100644 --- a/phpgwapi/js/fckeditor/editor/lang/bg.js +++ b/phpgwapi/js/fckeditor/editor/lang/bg.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Връзка", InsertLink : "Добави/Редактирай връзка", RemoveLink : "Изтрий връзка", Anchor : "Добави/Редактирай котва", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "Изображение", InsertImage : "Добави/Редактирай изображение", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "Подравняване в дясно", BlockJustify : "Двустранно подравняване", DecreaseIndent : "Намали отстъпа", IncreaseIndent : "Увеличи отстъпа", +Blockquote : "Blockquote", //MISSING Undo : "Отмени", Redo : "Повтори", NumberedListLbl : "Нумериран списък", @@ -103,20 +105,27 @@ SelectionField : "Падащо меню с опции", ImageButton : "Бутон-изображение", FitWindow : "Maximize the editor size", //MISSING +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "Редактирай връзка", CellCM : "Cell", //MISSING RowCM : "Row", //MISSING ColumnCM : "Column", //MISSING -InsertRow : "Добави ред", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "Изтрий редовете", -InsertColumn : "Добави колона", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "Изтрий колоните", -InsertCell : "Добави клетка", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "Изтрий клетките", MergeCells : "Обедини клетките", -SplitCell : "Раздели клетката", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "Изтрий таблицата", CellProperties : "Параметри на клетката", TableProperties : "Параметри на таблицата", @@ -134,7 +143,7 @@ SelectionFieldProp : "Параметри на падащото меню с оп TextareaProp : "Параметри на текстовата област", FormProp : "Параметри на формуляра", -FontFormats : "Нормален;Форматиран;Адрес;Заглавие 1;Заглавие 2;Заглавие 3;Заглавие 4;Заглавие 5;Заглавие 6;Параграф (DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "Нормален;Форматиран;Адрес;Заглавие 1;Заглавие 2;Заглавие 3;Заглавие 4;Заглавие 5;Заглавие 6;Параграф (DIV)", // Alerts and Messages ProcessingXHTML : "Обработка на XHTML. Моля изчакайте...", @@ -229,7 +238,7 @@ DlgLnkURL : "Пълен път (URL)", DlgLnkAnchorSel : "Изберете котва", DlgLnkAnchorByName : "По име на котвата", DlgLnkAnchorById : "По идентификатор на елемент", -DlgLnkNoAnchors : "<Няма котви в текущия документ>", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Няма котви в текущия документ)", DlgLnkEMail : "Адрес за е-поща", DlgLnkEMailSubject : "Тема на писмото", DlgLnkEMailBody : "Текст на писмото", @@ -322,6 +331,9 @@ DlgCellBackColor : "фонов цвят", DlgCellBorderColor : "цвят на рамката", DlgCellBtnSelect : "Изберете...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "Търси", DlgFindFindBtn : "Търси", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Вмъкнете тук съдъжанието с клавиат DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING DlgPasteIgnoreFont : "Игнорирай шрифтовите дефиниции", DlgPasteRemoveStyles : "Изтрий стиловите дефиниции", -DlgPasteCleanBox : "Изчисти", // Color Picker ColorAutomatic : "По подразбиране", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "Информация за браузъра", DlgAboutLicenseTab : "License", //MISSING DlgAboutVersion : "версия", DlgAboutInfo : "За повече информация посетете" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/bn.js b/phpgwapi/js/fckeditor/editor/lang/bn.js index 8f76754ae2..b511e607b1 100644 --- a/phpgwapi/js/fckeditor/editor/lang/bn.js +++ b/phpgwapi/js/fckeditor/editor/lang/bn.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "লিংকের যুক্ত করার লেবে InsertLink : "লিংক যুক্ত কর", RemoveLink : "লিংক সরাও", Anchor : "নোঙ্গর", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "ছবির লেবেল যুক্ত কর", InsertImage : "ছবি যুক্ত কর", InsertFlashLbl : "ফ্লাশ লেবেল যুক্ত কর", @@ -70,6 +71,7 @@ RightJustify : "ডান দিকে ঘেঁষা", BlockJustify : "ব্লক জাস্টিফাই", DecreaseIndent : "ইনডেন্ট কমাও", IncreaseIndent : "ইনডেন্ট বাড়াও", +Blockquote : "Blockquote", //MISSING Undo : "আনডু", Redo : "রি-ডু", NumberedListLbl : "সাংখ্যিক লিস্টের লেবেল", @@ -103,20 +105,27 @@ SelectionField : "বাছাই ফীল্ড", ImageButton : "ছবির বাটন", FitWindow : "উইন্ডো ফিট কর", +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "লিংক সম্পাদন", CellCM : "সেল", RowCM : "রো", ColumnCM : "কলাম", -InsertRow : "রো যুক্ত কর", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "রো মুছে দাও", -InsertColumn : "কলাম যুক্ত কর", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "কলাম মুছে দাও", -InsertCell : "সেল যুক্ত কর", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "সেল মুছে দাও", MergeCells : "সেল জোড়া দাও", -SplitCell : "সেল আলাদা কর", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "টেবিল ডিলীট কর", CellProperties : "সেলের প্রোপার্টিজ", TableProperties : "টেবিল প্রোপার্টি", @@ -134,7 +143,7 @@ SelectionFieldProp : "বাছাই ফীল্ড প্রোপার্ TextareaProp : "টেক্সট এরিয়া প্রোপার্টি", FormProp : "ফর্ম প্রোপার্টি", -FontFormats : "সাধারণ;ফর্মেটেড;ঠিকানা;শীর্ষক ১;শীর্ষক ২;শীর্ষক ৩;শীর্ষক ৪;শীর্ষক ৫;শীর্ষক ৬;শীর্ষক (DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "সাধারণ;ফর্মেটেড;ঠিকানা;শীর্ষক ১;শীর্ষক ২;শীর্ষক ৩;শীর্ষক ৪;শীর্ষক ৫;শীর্ষক ৬;শীর্ষক (DIV)", // Alerts and Messages ProcessingXHTML : "XHTML প্রসেস করা হচ্ছে", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "নোঙর বাছাই", DlgLnkAnchorByName : "নোঙরের নাম দিয়ে", DlgLnkAnchorById : "নোঙরের আইডি দিয়ে", -DlgLnkNoAnchors : "<ডকুমেন্টে আর কোন নোঙর নেই>", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(No anchors available in the document)", //MISSING DlgLnkEMail : "ইমেইল ঠিকানা", DlgLnkEMailSubject : "মেসেজের বিষয়", DlgLnkEMailBody : "মেসেজের দেহ", @@ -322,6 +331,9 @@ DlgCellBackColor : "ব্যাকগ্রাউন্ড রং", DlgCellBorderColor : "বর্ডারের রং", DlgCellBtnSelect : "বাছাই কর", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "খোঁজো", DlgFindFindBtn : "খোঁজো", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "অনুগ্রহ করে নীচের বাক্স DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING DlgPasteIgnoreFont : "ফন্ট ফেস ডেফিনেশন ইগনোর করুন", DlgPasteRemoveStyles : "স্টাইল ডেফিনেশন সরিয়ে দিন", -DlgPasteCleanBox : "বাক্স পরিষ্কার করুন", // Color Picker ColorAutomatic : "অটোমেটিক", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "ব্রাউজারের ব্যাপার DlgAboutLicenseTab : "লাইসেন্স", DlgAboutVersion : "ভার্সন", DlgAboutInfo : "আরও তথ্যের জন্য যান" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/bs.js b/phpgwapi/js/fckeditor/editor/lang/bs.js index fbaa451916..ad3f31b1a2 100644 --- a/phpgwapi/js/fckeditor/editor/lang/bs.js +++ b/phpgwapi/js/fckeditor/editor/lang/bs.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Link", InsertLink : "Ubaci/Izmjeni link", RemoveLink : "Izbriši link", Anchor : "Insert/Edit Anchor", //MISSING +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "Slika", InsertImage : "Ubaci/Izmjeni sliku", InsertFlashLbl : "Flash", //MISSING @@ -70,6 +71,7 @@ RightJustify : "Desno poravnanje", BlockJustify : "Puno poravnanje", DecreaseIndent : "Smanji uvod", IncreaseIndent : "Poveæaj uvod", +Blockquote : "Blockquote", //MISSING Undo : "Vrati", Redo : "Ponovi", NumberedListLbl : "Numerisana lista", @@ -103,20 +105,27 @@ SelectionField : "Selection Field", //MISSING ImageButton : "Image Button", //MISSING FitWindow : "Maximize the editor size", //MISSING +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "Izmjeni link", CellCM : "Cell", //MISSING RowCM : "Row", //MISSING ColumnCM : "Column", //MISSING -InsertRow : "Ubaci red", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "Briši redove", -InsertColumn : "Ubaci kolonu", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "Briši kolone", -InsertCell : "Ubaci æeliju", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "Briši æelije", MergeCells : "Spoji æelije", -SplitCell : "Razdvoji æeliju", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "Delete Table", //MISSING CellProperties : "Svojstva æelije", TableProperties : "Svojstva tabele", @@ -134,7 +143,7 @@ SelectionFieldProp : "Selection Field Properties", //MISSING TextareaProp : "Textarea Properties", //MISSING FormProp : "Form Properties", //MISSING -FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6", //REVIEW : Check _getfontformat.html +FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6", // Alerts and Messages ProcessingXHTML : "Procesiram XHTML. Molim saèekajte...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Izaberi sidro", DlgLnkAnchorByName : "Po nazivu sidra", DlgLnkAnchorById : "Po Id-u elementa", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Nema dostupnih sidra na stranici)", DlgLnkEMail : "E-Mail Adresa", DlgLnkEMailSubject : "Subjekt poruke", DlgLnkEMailBody : "Poruka", @@ -322,6 +331,9 @@ DlgCellBackColor : "Boja pozadine", DlgCellBorderColor : "Boja okvira", DlgCellBtnSelect : "Selektuj...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "Naði", DlgFindFindBtn : "Naði", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Please paste inside the following box using the keyboard (", DlgLnkURL : "URL", DlgLnkAnchorSel : "Selecciona una àncora", DlgLnkAnchorByName : "Per nom d'àncora", DlgLnkAnchorById : "Per Id d'element", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) -DlgLnkEMail : "Adreça d'E-Mail", +DlgLnkNoAnchors : "(No hi ha àncores disponibles en aquest document)", +DlgLnkEMail : "Adreça de correu electrònic", DlgLnkEMailSubject : "Assumpte del missatge", DlgLnkEMailBody : "Cos del missatge", DlgLnkUpload : "Puja", @@ -260,7 +269,7 @@ DlgLnkPopLeft : "Posició esquerra", DlgLnkPopTop : "Posició dalt", DlnLnkMsgNoUrl : "Si us plau, escrigui l'enllaç URL", -DlnLnkMsgNoEMail : "Si us plau, escrigui l'adreça e-mail", +DlnLnkMsgNoEMail : "Si us plau, escrigui l'adreça correu electrònic", DlnLnkMsgNoAnchor : "Si us plau, escrigui l'àncora", DlnLnkMsgInvPopName : "El nom de la finestra emergent ha de començar amb una lletra i no pot tenir espais", @@ -280,7 +289,7 @@ DlgSpecialCharTitle : "Selecciona el caràcter especial", DlgTableTitle : "Propietats de la taula", DlgTableRows : "Files", DlgTableColumns : "Columnes", -DlgTableBorder : "Tamany vora", +DlgTableBorder : "Mida vora", DlgTableAlign : "Alineació", DlgTableAlignNotSet : "", DlgTableAlignLeft : "Esquerra", @@ -322,6 +331,9 @@ DlgCellBackColor : "Color de fons", DlgCellBorderColor : "Color de la vora", DlgCellBtnSelect : "Seleccioneu...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Cerca i reemplaça", + // Find Dialog DlgFindTitle : "Cerca", DlgFindFindBtn : "Cerca", @@ -331,23 +343,22 @@ DlgFindNotFoundMsg : "El text especificat no s'ha trobat.", DlgReplaceTitle : "Reemplaça", DlgReplaceFindLbl : "Cerca:", DlgReplaceReplaceLbl : "Remplaça amb:", -DlgReplaceCaseChk : "Sensible a majúscules", +DlgReplaceCaseChk : "Distingeix majúscules/minúscules", DlgReplaceReplaceBtn : "Reemplaça", -DlgReplaceReplAllBtn : "Reemplaça'ls tots", -DlgReplaceWordChk : "Cerca paraula completa", +DlgReplaceReplAllBtn : "Reemplaça-ho tot", +DlgReplaceWordChk : "Només paraules completes", // Paste Operations / Dialog PasteErrorCut : "La seguretat del vostre navegador no permet executar automàticament les operacions de retallar. Si us plau, utilitzeu el teclat (Ctrl+X).", PasteErrorCopy : "La seguretat del vostre navegador no permet executar automàticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl+C).", -PasteAsText : "Enganxa com a text sense format", +PasteAsText : "Enganxa com a text no formatat", PasteFromWord : "Enganxa com a Word", DlgPasteMsg2 : "Si us plau, enganxeu dins del següent camp utilitzant el teclat (Ctrl+V) i premeu OK.", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteSec : "A causa de la configuració de seguretat del vostre navegador, l'editor no pot accedir al porta-retalls directament. Enganxeu-ho un altre cop en aquesta finestra.", DlgPasteIgnoreFont : "Ignora definicions de font", DlgPasteRemoveStyles : "Elimina definicions d'estil", -DlgPasteCleanBox : "Neteja camp", // Color Picker ColorAutomatic : "Automàtic", @@ -363,20 +374,20 @@ DlgAnchorErrorName : "Si us plau, escriviu el nom de l'ancora", // Speller Pages Dialog DlgSpellNotInDic : "No és al diccionari", -DlgSpellChangeTo : "Canvia a", +DlgSpellChangeTo : "Reemplaça amb", DlgSpellBtnIgnore : "Ignora", DlgSpellBtnIgnoreAll : "Ignora-les totes", DlgSpellBtnReplace : "Canvia", DlgSpellBtnReplaceAll : "Canvia-les totes", DlgSpellBtnUndo : "Desfés", -DlgSpellNoSuggestions : "Cap sugerència", -DlgSpellProgress : "Comprovació ortogràfica en progrés", -DlgSpellNoMispell : "Comprovació ortogràfica completada", -DlgSpellNoChanges : "Comprovació ortogràfica: cap paraulada canviada", -DlgSpellOneChange : "Comprovació ortogràfica: una paraula canviada", -DlgSpellManyChanges : "Comprovació ortogràfica %1 paraules canviades", +DlgSpellNoSuggestions : "Cap suggeriment", +DlgSpellProgress : "Verificació ortogràfica en curs...", +DlgSpellNoMispell : "Verificació ortogràfica acabada: no hi ha cap paraula mal escrita", +DlgSpellNoChanges : "Verificació ortogràfica: no s'ha canviat cap paraula", +DlgSpellOneChange : "Verificació ortogràfica: s'ha canviat una paraula", +DlgSpellManyChanges : "Verificació ortogràfica: s'han canviat %1 paraules", -IeSpellDownload : "Comprovació ortogràfica no instal·lada. Voleu descarregar-ho ara?", +IeSpellDownload : "Verificació ortogràfica no instal·lada. Voleu descarregar-ho ara?", // Button Dialog DlgButtonText : "Text (Valor)", @@ -398,7 +409,7 @@ DlgFormMethod : "Mètode", // Select Field Dialog DlgSelectName : "Nom", DlgSelectValue : "Valor", -DlgSelectSize : "Tamany", +DlgSelectSize : "Mida", DlgSelectLines : "Línies", DlgSelectChkMulti : "Permet múltiples seleccions", DlgSelectOpAvail : "Opcions disponibles", @@ -419,8 +430,8 @@ DlgTextareaRows : "Files", // Text Field Dialog DlgTextName : "Nom", DlgTextValue : "Valor", -DlgTextCharWidth : "Amplada de caràcter", -DlgTextMaxChars : "Màxim de caràcters", +DlgTextCharWidth : "Amplada", +DlgTextMaxChars : "Nombre màxim de caràcters", DlgTextType : "Tipus", DlgTextTypeText : "Text", DlgTextTypePass : "Contrasenya", @@ -440,20 +451,20 @@ DlgLstTypeSquare : "Quadrat", DlgLstTypeNumbers : "Números (1, 2, 3)", DlgLstTypeLCase : "Lletres minúscules (a, b, c)", DlgLstTypeUCase : "Lletres majúscules (A, B, C)", -DlgLstTypeSRoman : "Números romans minúscules (i, ii, iii)", -DlgLstTypeLRoman : "Números romans majúscules (I, II, III)", +DlgLstTypeSRoman : "Números romans en minúscules (i, ii, iii)", +DlgLstTypeLRoman : "Números romans en majúscules (I, II, III)", // Document Properties Dialog DlgDocGeneralTab : "General", DlgDocBackTab : "Fons", DlgDocColorsTab : "Colors i marges", -DlgDocMetaTab : "Dades Meta", +DlgDocMetaTab : "Metadades", DlgDocPageTitle : "Títol de la pàgina", -DlgDocLangDir : "Direcció llenguatge", +DlgDocLangDir : "Direcció idioma", DlgDocLangDirLTR : "Esquerra a dreta (LTR)", DlgDocLangDirRTL : "Dreta a esquerra (RTL)", -DlgDocLangCode : "Codi de llenguatge", +DlgDocLangCode : "Codi d'idioma", DlgDocCharSet : "Codificació de conjunt de caràcters", DlgDocCharSetCE : "Centreeuropeu", DlgDocCharSetCT : "Xinès tradicional (Big5)", @@ -467,7 +478,7 @@ DlgDocCharSetWE : "Europeu occidental", DlgDocCharSetOther : "Una altra codificació de caràcters", DlgDocDocType : "Capçalera de tipus de document", -DlgDocDocTypeOther : "Altra Capçalera de tipus de document", +DlgDocDocTypeOther : "Un altra capçalera de tipus de document", DlgDocIncXHTML : "Incloure declaracions XHTML", DlgDocBgColor : "Color de fons", DlgDocBgImage : "URL de la imatge de fons", @@ -490,7 +501,7 @@ DlgDocPreview : "Vista prèvia", // Templates Dialog Templates : "Plantilles", DlgTemplatesTitle : "Contingut plantilles", -DlgTemplatesSelMsg : "Si us plau, seleccioneu la plantilla per obrir en l'editor
    (el contingut actual no serà enregistrat):", +DlgTemplatesSelMsg : "Si us plau, seleccioneu la plantilla per obrir a l'editor
    (el contingut actual no serà enregistrat):", DlgTemplatesLoading : "Carregant la llista de plantilles. Si us plau, espereu...", DlgTemplatesNoTpl : "(No hi ha plantilles definides)", DlgTemplatesReplace : "Reemplaça el contingut actual", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "Informació del navegador", DlgAboutLicenseTab : "Llicència", DlgAboutVersion : "versió", DlgAboutInfo : "Per a més informació aneu a" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/cs.js b/phpgwapi/js/fckeditor/editor/lang/cs.js index e6f3c2068d..5709e200b7 100644 --- a/phpgwapi/js/fckeditor/editor/lang/cs.js +++ b/phpgwapi/js/fckeditor/editor/lang/cs.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Odkaz", InsertLink : "Vložit/změnit odkaz", RemoveLink : "Odstranit odkaz", Anchor : "Vložít/změnit záložku", +AnchorDelete : "Odstranit kotvu", InsertImageLbl : "Obrázek", InsertImage : "Vložit/změnit obrázek", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "Zarovnat vpravo", BlockJustify : "Zarovnat do bloku", DecreaseIndent : "Zmenšit odsazení", IncreaseIndent : "Zvětšit odsazení", +Blockquote : "Citace", Undo : "Zpět", Redo : "Znovu", NumberedListLbl : "Číslování", @@ -103,20 +105,27 @@ SelectionField : "Seznam", ImageButton : "Obrázkové tlačítko", FitWindow : "Maximalizovat velikost editoru", +ShowBlocks : "Ukázat bloky", // Context Menu EditLink : "Změnit odkaz", CellCM : "Buňka", RowCM : "Řádek", ColumnCM : "Sloupec", -InsertRow : "Vložit řádek", -DeleteRows : "Smazat řádek", -InsertColumn : "Vložit sloupec", +InsertRowAfter : "Vložit řádek za", +InsertRowBefore : "Vložit řádek před", +DeleteRows : "Smazat řádky", +InsertColumnAfter : "Vložit sloupec za", +InsertColumnBefore : "Vložit sloupec před", DeleteColumns : "Smazat sloupec", -InsertCell : "Vložit buňku", +InsertCellAfter : "Vložit buňku za", +InsertCellBefore : "Vložit buňku před", DeleteCells : "Smazat buňky", MergeCells : "Sloučit buňky", -SplitCell : "Rozdělit buňku", +MergeRight : "Sloučit doprava", +MergeDown : "Sloučit dolů", +HorizontalSplitCell : "Rozdělit buňky vodorovně", +VerticalSplitCell : "Rozdělit buňky svisle", TableDelete : "Smazat tabulku", CellProperties : "Vlastnosti buňky", TableProperties : "Vlastnosti tabulky", @@ -134,7 +143,7 @@ SelectionFieldProp : "Vlastnosti seznamu", TextareaProp : "Vlastnosti textové oblasti", FormProp : "Vlastnosti formuláře", -FontFormats : "Normální;Formátovaný;Adresa;Nadpis 1;Nadpis 2;Nadpis 3;Nadpis 4;Nadpis 5;Nadpis 6", //REVIEW : Check _getfontformat.html +FontFormats : "Normální;Naformátováno;Adresa;Nadpis 1;Nadpis 2;Nadpis 3;Nadpis 4;Nadpis 5;Nadpis 6;Normální (DIV)", // Alerts and Messages ProcessingXHTML : "Probíhá zpracování XHTML. Prosím čekejte...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Vybrat kotvu", DlgLnkAnchorByName : "Podle jména kotvy", DlgLnkAnchorById : "Podle Id objektu", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Ve stránce není definována žádná kotva!)", DlgLnkEMail : "E-Mailová adresa", DlgLnkEMailSubject : "Předmět zprávy", DlgLnkEMailBody : "Tělo zprávy", @@ -262,7 +271,7 @@ DlgLnkPopTop : "Horní okraj", DlnLnkMsgNoUrl : "Zadejte prosím URL odkazu", DlnLnkMsgNoEMail : "Zadejte prosím e-mailovou adresu", DlnLnkMsgNoAnchor : "Vyberte prosím kotvu", -DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING +DlnLnkMsgInvPopName : "Název vyskakovacího okna musí začínat písmenem a nesmí obsahovat mezery", // Color Dialog DlgColorTitle : "Výběr barvy", @@ -322,6 +331,9 @@ DlgCellBackColor : "Barva pozadí", DlgCellBorderColor : "Barva ohraničení", DlgCellBtnSelect : "Výběr...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Najít a nahradit", + // Find Dialog DlgFindTitle : "Hledat", DlgFindFindBtn : "Hledat", @@ -344,10 +356,9 @@ PasteAsText : "Vložit jako čistý text", PasteFromWord : "Vložit text z Wordu", DlgPasteMsg2 : "Do následujícího pole vložte požadovaný obsah pomocí klávesnice (Ctrl+V) a stiskněte OK.", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteSec : "Z důvodů nastavení bezpečnosti Vašeho prohlížeče nemůže editor přistupovat přímo do schránky. Obsah schránky prosím vložte znovu do tohoto okna.", DlgPasteIgnoreFont : "Ignorovat písmo", DlgPasteRemoveStyles : "Odstranit styly", -DlgPasteCleanBox : "Vyčistit", // Color Picker ColorAutomatic : "Automaticky", @@ -381,9 +392,9 @@ IeSpellDownload : "Kontrola pravopisu není nainstalována. Chcete ji nyní st // Button Dialog DlgButtonText : "Popisek", DlgButtonType : "Typ", -DlgButtonTypeBtn : "Button", //MISSING -DlgButtonTypeSbm : "Submit", //MISSING -DlgButtonTypeRst : "Reset", //MISSING +DlgButtonTypeBtn : "Tlačítko", +DlgButtonTypeSbm : "Odeslat", +DlgButtonTypeRst : "Obnovit", // Checkbox and Radio Button Dialogs DlgCheckboxName : "Název", @@ -432,7 +443,7 @@ DlgHiddenValue : "Hodnota", // Bulleted List Dialog BulletedListProp : "Vlastnosti odrážek", NumberedListProp : "Vlastnosti číslovaného seznamu", -DlgLstStart : "Start", //MISSING +DlgLstStart : "Začátek", DlgLstType : "Typ", DlgLstTypeCircle : "Kružnice", DlgLstTypeDisc : "Kruh", @@ -455,15 +466,15 @@ DlgDocLangDirLTR : "Zleva do prava ", DlgDocLangDirRTL : "Zprava doleva", DlgDocLangCode : "Kód jazyku", DlgDocCharSet : "Znaková sada", -DlgDocCharSetCE : "Central European", //MISSING -DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING -DlgDocCharSetCR : "Cyrillic", //MISSING -DlgDocCharSetGR : "Greek", //MISSING -DlgDocCharSetJP : "Japanese", //MISSING -DlgDocCharSetKR : "Korean", //MISSING -DlgDocCharSetTR : "Turkish", //MISSING -DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING -DlgDocCharSetWE : "Western European", //MISSING +DlgDocCharSetCE : "Středoevropské jazyky", +DlgDocCharSetCT : "Tradiční čínština (Big5)", +DlgDocCharSetCR : "Cyrilice", +DlgDocCharSetGR : "Řečtina", +DlgDocCharSetJP : "Japonština", +DlgDocCharSetKR : "Korejština", +DlgDocCharSetTR : "Turečtina", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Západoevropské jazyky", DlgDocCharSetOther : "Další znaková sada", DlgDocDocType : "Typ dokumentu", @@ -493,7 +504,7 @@ DlgTemplatesTitle : "Šablony obsahu", DlgTemplatesSelMsg : "Prosím zvolte šablonu pro otevření v editoru
    (aktuální obsah editoru bude ztracen):", DlgTemplatesLoading : "Nahrávám přeheld šablon. Prosím čekejte...", DlgTemplatesNoTpl : "(Není definována žádná šablona)", -DlgTemplatesReplace : "Replace actual contents", //MISSING +DlgTemplatesReplace : "Nahradit aktuální obsah", // About Dialog DlgAboutAboutTab : "O aplikaci", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "Informace o prohlížeči", DlgAboutLicenseTab : "Licence", DlgAboutVersion : "verze", DlgAboutInfo : "Více informací získáte na" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/da.js b/phpgwapi/js/fckeditor/editor/lang/da.js index 8143241164..f9f99a378c 100644 --- a/phpgwapi/js/fckeditor/editor/lang/da.js +++ b/phpgwapi/js/fckeditor/editor/lang/da.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Hyperlink", InsertLink : "Indsæt/rediger hyperlink", RemoveLink : "Fjern hyperlink", Anchor : "Indsæt/rediger bogmærke", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "Indsæt billede", InsertImage : "Indsæt/rediger billede", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "Højrestillet", BlockJustify : "Lige margener", DecreaseIndent : "Formindsk indrykning", IncreaseIndent : "Forøg indrykning", +Blockquote : "Blockquote", //MISSING Undo : "Fortryd", Redo : "Annuller fortryd", NumberedListLbl : "Talopstilling", @@ -103,20 +105,27 @@ SelectionField : "Indsæt liste", ImageButton : "Indsæt billedknap", FitWindow : "Maksimer editor vinduet", +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "Rediger hyperlink", CellCM : "Celle", RowCM : "Række", ColumnCM : "Kolonne", -InsertRow : "Indsæt række", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "Slet række", -InsertColumn : "Indsæt kolonne", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "Slet kolonne", -InsertCell : "Indsæt celle", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "Slet celle", MergeCells : "Flet celler", -SplitCell : "Opdel celle", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "Slet tabel", CellProperties : "Egenskaber for celle", TableProperties : "Egenskaber for tabel", @@ -134,7 +143,7 @@ SelectionFieldProp : "Egenskaber for liste", TextareaProp : "Egenskaber for tekstboks", FormProp : "Egenskaber for formular", -FontFormats : "Normal;Formateret;Adresse;Overskrift 1;Overskrift 2;Overskrift 3;Overskrift 4;Overskrift 5;Overskrift 6;Normal (DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "Normal;Formateret;Adresse;Overskrift 1;Overskrift 2;Overskrift 3;Overskrift 4;Overskrift 5;Overskrift 6;Normal (DIV)", // Alerts and Messages ProcessingXHTML : "Behandler XHTML...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Vælg et anker", DlgLnkAnchorByName : "Efter anker navn", DlgLnkAnchorById : "Efter element Id", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Ingen bogmærker dokumentet)", DlgLnkEMail : "E-mailadresse", DlgLnkEMailSubject : "Emne", DlgLnkEMailBody : "Brødtekst", @@ -322,6 +331,9 @@ DlgCellBackColor : "Baggrundsfarve", DlgCellBorderColor : "Rammefarve", DlgCellBtnSelect : "Vælg...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "Find", DlgFindFindBtn : "Find", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Indsæt i feltet herunder (Ctrl+V) og klik ", +DlgGenNotSet : "", DlgGenId : "ID", DlgGenLangDir : "Schreibrichtung", DlgGenLangDirLtr : "Links nach Rechts (LTR)", DlgGenLangDirRtl : "Rechts nach Links (RTL)", DlgGenLangCode : "Sprachenkürzel", -DlgGenAccessKey : "Schlüssel", +DlgGenAccessKey : "Zugriffstaste", DlgGenName : "Name", -DlgGenTabIndex : "Tab Index", +DlgGenTabIndex : "Tab-Index", DlgGenLongDescr : "Langform URL", DlgGenClass : "Stylesheet Klasse", DlgGenTitle : "Titel Beschreibung", -DlgGenContType : "Content Beschreibung", +DlgGenContType : "Inhaltstyp", DlgGenLinkCharset : "Ziel-Zeichensatz", DlgGenStyle : "Style", // Image Dialog -DlgImgTitle : "Bild Eigenschaften", +DlgImgTitle : "Bild-Eigenschaften", DlgImgInfoTab : "Bild-Info", DlgImgBtnUpload : "Zum Server senden", DlgImgURL : "Bildauswahl", @@ -205,7 +214,7 @@ DlgImgAlertUrl : "Bitte geben Sie die Bild-URL an", DlgImgLinkTab : "Link", // Flash Dialog -DlgFlashTitle : "Flash Eigenschaften", +DlgFlashTitle : "Flash-Eigenschaften", DlgFlashChkPlay : "autom. Abspielen", DlgFlashChkLoop : "Endlosschleife", DlgFlashChkMenu : "Flash-Menü aktivieren", @@ -216,7 +225,7 @@ DlgFlashScaleFit : "Passgenau", // Link Dialog DlgLnkWindowTitle : "Link", -DlgLnkInfoTab : "Link Info", +DlgLnkInfoTab : "Link-Info", DlgLnkTargetTab : "Zielseite", DlgLnkType : "Link-Typ", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Anker auswählen", DlgLnkAnchorByName : "nach Anker Name", DlgLnkAnchorById : "nach Element Id", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(keine Anker im Dokument vorhanden)", DlgLnkEMail : "E-Mail Addresse", DlgLnkEMailSubject : "Betreffzeile", DlgLnkEMailBody : "Nachrichtentext", @@ -243,9 +252,9 @@ DlgLnkTargetBlank : "Neues Fenster (_blank)", DlgLnkTargetParent : "Oberes Fenster (_parent)", DlgLnkTargetSelf : "Gleiches Fenster (_self)", DlgLnkTargetTop : "Oberstes Fenster (_top)", -DlgLnkTargetFrameName : "Ziel-Fenster Name", -DlgLnkPopWinName : "Pop-up Fenster Name", -DlgLnkPopWinFeat : "Pop-up Fenster Eigenschaften", +DlgLnkTargetFrameName : "Ziel-Fenster-Name", +DlgLnkPopWinName : "Pop-up Fenster-Name", +DlgLnkPopWinFeat : "Pop-up Fenster-Eigenschaften", DlgLnkPopResize : "Vergrößerbar", DlgLnkPopLocation : "Adress-Leiste", DlgLnkPopMenu : "Menü-Leiste", @@ -277,12 +286,12 @@ DlgSmileyTitle : "Smiley auswählen", DlgSpecialCharTitle : "Sonderzeichen auswählen", // Table Dialog -DlgTableTitle : "Tabellen Eigenschaften", +DlgTableTitle : "Tabellen-Eigenschaften", DlgTableRows : "Zeile", DlgTableColumns : "Spalte", DlgTableBorder : "Rahmen", DlgTableAlign : "Ausrichtung", -DlgTableAlignNotSet : "", +DlgTableAlignNotSet : "", DlgTableAlignLeft : "Links", DlgTableAlignCenter : "Zentriert", DlgTableAlignRight : "Rechts", @@ -302,16 +311,16 @@ DlgCellWidthPx : "Pixel", DlgCellWidthPc : "%", DlgCellHeight : "Höhe", DlgCellWordWrap : "Umbruch", -DlgCellWordWrapNotSet : "", +DlgCellWordWrapNotSet : "", DlgCellWordWrapYes : "Ja", DlgCellWordWrapNo : "Nein", DlgCellHorAlign : "Horizontale Ausrichtung", -DlgCellHorAlignNotSet : "", +DlgCellHorAlignNotSet : "", DlgCellHorAlignLeft : "Links", DlgCellHorAlignCenter : "Zentriert", DlgCellHorAlignRight: "Rechts", DlgCellVerAlign : "Vertikale Ausrichtung", -DlgCellVerAlignNotSet : "", +DlgCellVerAlignNotSet : "", DlgCellVerAlignTop : "Oben", DlgCellVerAlignMiddle : "Mitte", DlgCellVerAlignBottom : "Unten", @@ -322,6 +331,9 @@ DlgCellBackColor : "Hintergrundfarbe", DlgCellBorderColor : "Rahmenfarbe", DlgCellBtnSelect : "Auswahl...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Suchen und Ersetzen", + // Find Dialog DlgFindTitle : "Finden", DlgFindFindBtn : "Finden", @@ -343,21 +355,20 @@ PasteErrorCopy : "Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu PasteAsText : "Als Text einfügen", PasteFromWord : "Aus Word einfügen", -DlgPasteMsg2 : "Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit Ctrl+V) ein und bestätigen Sie mit OK.", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteMsg2 : "Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit Strg+V) ein und bestätigen Sie mit OK.", +DlgPasteSec : "Aufgrund von Sicherheitsbeschränkungen Ihres Browsers kann der Editor nicht direkt auf die Zwischenablage zugreifen. Bitte fügen Sie den Inhalt erneut in diesem Fenster ein.", DlgPasteIgnoreFont : "Ignoriere Schriftart-Definitionen", DlgPasteRemoveStyles : "Entferne Style-Definitionen", -DlgPasteCleanBox : "Inhalt aufräumen", // Color Picker ColorAutomatic : "Automatisch", ColorMoreColors : "Weitere Farben...", // Document Properties -DocProps : "Dokument Eigenschaften", +DocProps : "Dokument-Eigenschaften", // Anchor Dialog -DlgAnchorTitle : "Anker Eigenschaften", +DlgAnchorTitle : "Anker-Eigenschaften", DlgAnchorName : "Anker Name", DlgAnchorErrorName : "Bitte geben Sie den Namen des Ankers ein", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "Browser-Info", DlgAboutLicenseTab : "Lizenz", DlgAboutVersion : "Version", DlgAboutInfo : "Für weitere Informationen siehe" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/el.js b/phpgwapi/js/fckeditor/editor/lang/el.js index 90fefc48f2..5a8fc9c960 100644 --- a/phpgwapi/js/fckeditor/editor/lang/el.js +++ b/phpgwapi/js/fckeditor/editor/lang/el.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Σύνδεσμος (Link)", InsertLink : "Εισαγωγή/Μεταβολή Συνδέσμου (Link)", RemoveLink : "Αφαίρεση Συνδέσμου (Link)", Anchor : "Εισαγωγή/επεξεργασία Anchor", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "Εικόνα", InsertImage : "Εισαγωγή/Μεταβολή Εικόνας", InsertFlashLbl : "Εισαγωγή Flash", @@ -70,6 +71,7 @@ RightJustify : "Στοίχιση Δεξιά", BlockJustify : "Πλήρης Στοίχιση (Block)", DecreaseIndent : "Μείωση Εσοχής", IncreaseIndent : "Αύξηση Εσοχής", +Blockquote : "Blockquote", //MISSING Undo : "Αναίρεση", Redo : "Επαναφορά", NumberedListLbl : "Λίστα με Αριθμούς", @@ -103,20 +105,27 @@ SelectionField : "Πεδίο επιλογής", ImageButton : "Κουμπί εικόνας", FitWindow : "Μεγιστοποίηση προγράμματος", +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "Μεταβολή Συνδέσμου (Link)", CellCM : "Κελί", RowCM : "Σειρά", ColumnCM : "Στήλη", -InsertRow : "Εισαγωγή Γραμμής", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "Διαγραφή Γραμμών", -InsertColumn : "Εισαγωγή Κολώνας", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "Διαγραφή Κολωνών", -InsertCell : "Εισαγωγή Κελιού", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "Διαγραφή Κελιών", MergeCells : "Ενοποίηση Κελιών", -SplitCell : "Διαχωρισμός Κελιού", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "Διαγραφή πίνακα", CellProperties : "Ιδιότητες Κελιού", TableProperties : "Ιδιότητες Πίνακα", @@ -134,7 +143,7 @@ SelectionFieldProp : "Ιδιότητες πεδίου επιλογής", TextareaProp : "Ιδιότητες περιοχής κειμένου", FormProp : "Ιδιότητες φόρμας", -FontFormats : "Κανονικό;Μορφοποιημένο;Διεύθυνση;Επικεφαλίδα 1;Επικεφαλίδα 2;Επικεφαλίδα 3;Επικεφαλίδα 4;Επικεφαλίδα 5;Επικεφαλίδα 6", //REVIEW : Check _getfontformat.html +FontFormats : "Κανονικό;Μορφοποιημένο;Διεύθυνση;Επικεφαλίδα 1;Επικεφαλίδα 2;Επικεφαλίδα 3;Επικεφαλίδα 4;Επικεφαλίδα 5;Επικεφαλίδα 6", // Alerts and Messages ProcessingXHTML : "Επεξεργασία XHTML. Παρακαλώ περιμένετε...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Επιλέξτε μια άγκυρα", DlgLnkAnchorByName : "Βάσει του Ονόματος (Name) της άγκυρας", DlgLnkAnchorById : "Βάσει του Element Id", -DlgLnkNoAnchors : "<Δεν υπάρχουν άγκυρες στο κείμενο>", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Δεν υπάρχουν άγκυρες στο κείμενο)", DlgLnkEMail : "Διεύθυνση Ηλεκτρονικού Ταχυδρομείου", DlgLnkEMailSubject : "Θέμα Μηνύματος", DlgLnkEMailBody : "Κείμενο Μηνύματος", @@ -322,6 +331,9 @@ DlgCellBackColor : "Χρώμα Υποβάθρου", DlgCellBorderColor : "Χρώμα Περιθωρίου", DlgCellBtnSelect : "Επιλογή...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "Αναζήτηση", DlgFindFindBtn : "Αναζήτηση", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Παρακαλώ επικολήστε στο ακόλουθο κ DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING DlgPasteIgnoreFont : "Αγνόηση προδιαγραφών γραμματοσειράς", DlgPasteRemoveStyles : "Αφαίρεση προδιαγραφών στύλ", -DlgPasteCleanBox : "Κουτί εκαθάρισης", // Color Picker ColorAutomatic : "Αυτόματο", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "Πληροφορίες Browser", DlgAboutLicenseTab : "Άδεια", DlgAboutVersion : "έκδοση", DlgAboutInfo : "Για περισσότερες πληροφορίες" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/en-au.js b/phpgwapi/js/fckeditor/editor/lang/en-au.js index b6960b6b3a..b729c13458 100644 --- a/phpgwapi/js/fckeditor/editor/lang/en-au.js +++ b/phpgwapi/js/fckeditor/editor/lang/en-au.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Link", InsertLink : "Insert/Edit Link", RemoveLink : "Remove Link", Anchor : "Insert/Edit Anchor", +AnchorDelete : "Remove Anchor", InsertImageLbl : "Image", InsertImage : "Insert/Edit Image", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "Right Justify", BlockJustify : "Block Justify", DecreaseIndent : "Decrease Indent", IncreaseIndent : "Increase Indent", +Blockquote : "Blockquote", Undo : "Undo", Redo : "Redo", NumberedListLbl : "Numbered List", @@ -103,20 +105,27 @@ SelectionField : "Selection Field", ImageButton : "Image Button", FitWindow : "Maximize the editor size", +ShowBlocks : "Show Blocks", // Context Menu EditLink : "Edit Link", CellCM : "Cell", RowCM : "Row", ColumnCM : "Column", -InsertRow : "Insert Row", +InsertRowAfter : "Insert Row After", +InsertRowBefore : "Insert Row Before", DeleteRows : "Delete Rows", -InsertColumn : "Insert Column", +InsertColumnAfter : "Insert Column After", +InsertColumnBefore : "Insert Column Before", DeleteColumns : "Delete Columns", -InsertCell : "Insert Cell", +InsertCellAfter : "Insert Cell After", +InsertCellBefore : "Insert Cell Before", DeleteCells : "Delete Cells", MergeCells : "Merge Cells", -SplitCell : "Split Cell", +MergeRight : "Merge Right", +MergeDown : "Merge Down", +HorizontalSplitCell : "Split Cell Horizontally", +VerticalSplitCell : "Split Cell Vertically", TableDelete : "Delete Table", CellProperties : "Cell Properties", TableProperties : "Table Properties", @@ -134,7 +143,7 @@ SelectionFieldProp : "Selection Field Properties", TextareaProp : "Textarea Properties", FormProp : "Form Properties", -FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)", // Alerts and Messages ProcessingXHTML : "Processing XHTML. Please wait...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Select an Anchor", DlgLnkAnchorByName : "By Anchor Name", DlgLnkAnchorById : "By Element Id", -DlgLnkNoAnchors : "(No anchors available in the document)", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(No anchors available in the document)", DlgLnkEMail : "E-Mail Address", DlgLnkEMailSubject : "Message Subject", DlgLnkEMailBody : "Message Body", @@ -322,6 +331,9 @@ DlgCellBackColor : "Background Colour", DlgCellBorderColor : "Border Colour", DlgCellBtnSelect : "Select...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", + // Find Dialog DlgFindTitle : "Find", DlgFindFindBtn : "Find", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Please paste inside the following box using the keyboard ( with ( and ) +DlgLnkNoAnchors : "(No anchors available in the document)", DlgLnkEMail : "E-Mail Address", DlgLnkEMailSubject : "Message Subject", DlgLnkEMailBody : "Message Body", @@ -322,6 +331,9 @@ DlgCellBackColor : "Background Colour", DlgCellBorderColor : "Border Colour", DlgCellBtnSelect : "Select...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", + // Find Dialog DlgFindTitle : "Find", DlgFindFindBtn : "Find", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Please paste inside the following box using the keyboard ( with ( and ) +DlgLnkNoAnchors : "(No anchors available in the document)", DlgLnkEMail : "E-Mail Address", DlgLnkEMailSubject : "Message Subject", DlgLnkEMailBody : "Message Body", @@ -322,6 +331,9 @@ DlgCellBackColor : "Background Colour", DlgCellBorderColor : "Border Colour", DlgCellBtnSelect : "Select...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", + // Find Dialog DlgFindTitle : "Find", DlgFindFindBtn : "Find", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Please paste inside the following box using the keyboard ( with ( and ) +DlgLnkNoAnchors : "(No anchors available in the document)", DlgLnkEMail : "E-Mail Address", DlgLnkEMailSubject : "Message Subject", DlgLnkEMailBody : "Message Body", @@ -322,6 +331,9 @@ DlgCellBackColor : "Background Color", DlgCellBorderColor : "Border Color", DlgCellBtnSelect : "Select...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", + // Find Dialog DlgFindTitle : "Find", DlgFindFindBtn : "Find", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Please paste inside the following box using the keyboard (", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "", DlgLnkEMail : "Retadreso", DlgLnkEMailSubject : "Temlinio", DlgLnkEMailBody : "Mesaĝa korpo", @@ -322,6 +331,9 @@ DlgCellBackColor : "Fono", DlgCellBorderColor : "Bordero", DlgCellBtnSelect : "Elekti...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "Serĉi", DlgFindFindBtn : "Serĉi", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Please paste inside the following box using the keyboard (", DlgGenId : "Id", -DlgGenLangDir : "Orientación de idioma", +DlgGenLangDir : "Orientación", DlgGenLangDirLtr : "Izquierda a Derecha (LTR)", DlgGenLangDirRtl : "Derecha a Izquierda (RTL)", -DlgGenLangCode : "Código de idioma", +DlgGenLangCode : "Cód. de idioma", DlgGenAccessKey : "Clave de Acceso", DlgGenName : "Nombre", DlgGenTabIndex : "Indice de tabulación", @@ -201,7 +210,7 @@ DlgImgAlignRight : "Derecha", DlgImgAlignTextTop : "Tope del texto", DlgImgAlignTop : "Tope", DlgImgPreview : "Vista Previa", -DlgImgAlertUrl : "Por favor tipee el URL de la imagen", +DlgImgAlertUrl : "Por favor escriba la URL de la imagen", DlgImgLinkTab : "Vínculo", // Flash Dialog @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Seleccionar una referencia", DlgLnkAnchorByName : "Por Nombre de Referencia", DlgLnkAnchorById : "Por ID de elemento", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(No hay referencias disponibles en el documento)", DlgLnkEMail : "Dirección de E-Mail", DlgLnkEMailSubject : "Título del Mensaje", DlgLnkEMailBody : "Cuerpo del Mensaje", @@ -262,7 +271,7 @@ DlgLnkPopTop : "Posición Derecha", DlnLnkMsgNoUrl : "Por favor tipee el vínculo URL", DlnLnkMsgNoEMail : "Por favor tipee la dirección de e-mail", DlnLnkMsgNoAnchor : "Por favor seleccione una referencia", -DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING +DlnLnkMsgInvPopName : "El nombre debe empezar con un caracter alfanumérico y no debe contener espacios", // Color Dialog DlgColorTitle : "Seleccionar Color", @@ -322,6 +331,9 @@ DlgCellBackColor : "Color de Fondo", DlgCellBorderColor : "Color de Borde", DlgCellBtnSelect : "Seleccione...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Buscar y Reemplazar", + // Find Dialog DlgFindTitle : "Buscar", DlgFindFindBtn : "Buscar", @@ -344,10 +356,9 @@ PasteAsText : "Pegar como Texto Plano", PasteFromWord : "Pegar desde Word", DlgPasteMsg2 : "Por favor pegue dentro del cuadro utilizando el teclado (Ctrl+V); luego presione OK.", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteSec : "Debido a la configuración de seguridad de su navegador, el editor no tiene acceso al portapapeles. Es necesario que lo pegue de nuevo en esta ventana.", DlgPasteIgnoreFont : "Ignorar definiciones de fuentes", DlgPasteRemoveStyles : "Remover definiciones de estilo", -DlgPasteCleanBox : "Borrar el contenido del cuadro", // Color Picker ColorAutomatic : "Automático", @@ -381,9 +392,9 @@ IeSpellDownload : "Módulo de Control de Ortografía no instalado. ¿Desea des // Button Dialog DlgButtonText : "Texto (Valor)", DlgButtonType : "Tipo", -DlgButtonTypeBtn : "Button", //MISSING -DlgButtonTypeSbm : "Submit", //MISSING -DlgButtonTypeRst : "Reset", //MISSING +DlgButtonTypeBtn : "Boton", +DlgButtonTypeSbm : "Enviar", +DlgButtonTypeRst : "Reestablecer", // Checkbox and Radio Button Dialogs DlgCheckboxName : "Nombre", @@ -432,7 +443,7 @@ DlgHiddenValue : "Valor", // Bulleted List Dialog BulletedListProp : "Propiedades de Viñetas", NumberedListProp : "Propiedades de Numeraciones", -DlgLstStart : "Start", //MISSING +DlgLstStart : "Inicio", DlgLstType : "Tipo", DlgLstTypeCircle : "Círculo", DlgLstTypeDisc : "Disco", @@ -455,15 +466,15 @@ DlgDocLangDirLTR : "Izq. a Derecha (LTR)", DlgDocLangDirRTL : "Der. a Izquierda (RTL)", DlgDocLangCode : "Código de Idioma", DlgDocCharSet : "Codif. de Conjunto de Caracteres", -DlgDocCharSetCE : "Central European", //MISSING -DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING -DlgDocCharSetCR : "Cyrillic", //MISSING -DlgDocCharSetGR : "Greek", //MISSING -DlgDocCharSetJP : "Japanese", //MISSING -DlgDocCharSetKR : "Korean", //MISSING -DlgDocCharSetTR : "Turkish", //MISSING -DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING -DlgDocCharSetWE : "Western European", //MISSING +DlgDocCharSetCE : "Centro Europeo", +DlgDocCharSetCT : "Chino Tradicional (Big5)", +DlgDocCharSetCR : "Cirílico", +DlgDocCharSetGR : "Griego", +DlgDocCharSetJP : "Japonés", +DlgDocCharSetKR : "Coreano", +DlgDocCharSetTR : "Turco", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Europeo occidental", DlgDocCharSetOther : "Otra Codificación", DlgDocDocType : "Encabezado de Tipo de Documento", @@ -493,7 +504,7 @@ DlgTemplatesTitle : "Contenido de Plantillas", DlgTemplatesSelMsg : "Por favor selecciona la plantilla a abrir en el editor
    (el contenido actual se perderá):", DlgTemplatesLoading : "Cargando lista de Plantillas. Por favor, aguarde...", DlgTemplatesNoTpl : "(No hay plantillas definidas)", -DlgTemplatesReplace : "Replace actual contents", //MISSING +DlgTemplatesReplace : "Reemplazar el contenido actual", // About Dialog DlgAboutAboutTab : "Acerca de", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "Información de Navegador", DlgAboutLicenseTab : "Licencia", DlgAboutVersion : "versión", DlgAboutInfo : "Para mayor información por favor dirigirse a" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/et.js b/phpgwapi/js/fckeditor/editor/lang/et.js index 8073cb73b6..44ecbe3226 100644 --- a/phpgwapi/js/fckeditor/editor/lang/et.js +++ b/phpgwapi/js/fckeditor/editor/lang/et.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -42,15 +42,16 @@ Print : "Prindi", SelectAll : "Vali kõik", RemoveFormat : "Eemalda vorming", InsertLinkLbl : "Link", -InsertLink : "Sisesta/Muuda link", +InsertLink : "Sisesta link / Muuda linki", RemoveLink : "Eemalda link", -Anchor : "Sisesta/Muuda ankur", +Anchor : "Sisesta ankur / Muuda ankrut", +AnchorDelete : "Eemalda ankur", InsertImageLbl : "Pilt", -InsertImage : "Sisesta/Muuda pilt", +InsertImage : "Sisesta pilt / Muuda pilti", InsertFlashLbl : "Flash", -InsertFlash : "Sisesta/Muuda flash", +InsertFlash : "Sisesta flash / Muuda flashi", InsertTableLbl : "Tabel", -InsertTable : "Sisesta/Muuda tabel", +InsertTable : "Sisesta tabel / Muuda tabelit", InsertLineLbl : "Joon", InsertLine : "Sisesta horisontaaljoon", InsertSpecialCharLbl: "Erimärgid", @@ -58,10 +59,10 @@ InsertSpecialChar : "Sisesta erimärk", InsertSmileyLbl : "Emotikon", InsertSmiley : "Sisesta emotikon", About : "FCKeditor teave", -Bold : "Rasvane kiri", -Italic : "Kursiiv kiri", -Underline : "Allajoonitud kiri", -StrikeThrough : "Läbijoonitud kiri", +Bold : "Paks", +Italic : "Kursiiv", +Underline : "Allajoonitud", +StrikeThrough : "Läbijoonitud", Subscript : "Allindeks", Superscript : "Ülaindeks", LeftJustify : "Vasakjoondus", @@ -70,6 +71,7 @@ RightJustify : "Paremjoondus", BlockJustify : "Rööpjoondus", DecreaseIndent : "Vähenda taanet", IncreaseIndent : "Suurenda taanet", +Blockquote : "Blokktsitaat", Undo : "Võta tagasi", Redo : "Korda toimingut", NumberedListLbl : "Nummerdatud loetelu", @@ -90,7 +92,7 @@ Replace : "Asenda", SpellCheck : "Kontrolli õigekirja", UniversalKeyboard : "Universaalne klaviatuur", PageBreakLbl : "Lehepiir", -PageBreak : "Sisesta lehevahetus koht", +PageBreak : "Sisesta lehevahetuskoht", Form : "Vorm", Checkbox : "Märkeruut", @@ -103,24 +105,31 @@ SelectionField : "Valiklahter", ImageButton : "Piltnupp", FitWindow : "Maksimeeri redaktori mõõtmed", +ShowBlocks : "Näita blokke", // Context Menu EditLink : "Muuda linki", CellCM : "Lahter", RowCM : "Rida", ColumnCM : "Veerg", -InsertRow : "Lisa rida", -DeleteRows : "Eemalda ridu", -InsertColumn : "Lisa veerg", +InsertRowAfter : "Sisesta rida peale", +InsertRowBefore : "Sisesta rida enne", +DeleteRows : "Eemalda read", +InsertColumnAfter : "Sisesta veerg peale", +InsertColumnBefore : "Sisesta veerg enne", DeleteColumns : "Eemalda veerud", -InsertCell : "Lisa lahter", +InsertCellAfter : "Sisesta lahter peale", +InsertCellBefore : "Sisesta lahter enne", DeleteCells : "Eemalda lahtrid", MergeCells : "Ühenda lahtrid", -SplitCell : "Lahuta lahtrid", +MergeRight : "Ühenda paremale", +MergeDown : "Ühenda alla", +HorizontalSplitCell : "Poolita lahter horisontaalselt", +VerticalSplitCell : "Poolita lahter vertikaalselt", TableDelete : "Kustuta tabel", CellProperties : "Lahtri atribuudid", TableProperties : "Tabeli atribuudid", -ImageProperties : "Pildi atribuudid", +ImageProperties : "Pildi atribuudid", FlashProperties : "Flash omadused", AnchorProp : "Ankru omadused", @@ -134,18 +143,18 @@ SelectionFieldProp : "Valiklahtri omadused", TextareaProp : "Tekstiala omadused", FormProp : "Vormi omadused", -FontFormats : "Tavaline;Vormindatud;Aadress;Pealkiri 1;Pealkiri 2;Pealkiri 3;Pealkiri 4;Pealkiri 5;Pealkiri 6", //REVIEW : Check _getfontformat.html +FontFormats : "Tavaline;Vormindatud;Aadress;Pealkiri 1;Pealkiri 2;Pealkiri 3;Pealkiri 4;Pealkiri 5;Pealkiri 6;Tavaline (DIV)", // Alerts and Messages -ProcessingXHTML : "Töötlen XHTML. Palun oota...", +ProcessingXHTML : "Töötlen XHTML'i. Palun oota...", Done : "Tehtud", -PasteWordConfirm : "Tekst, mida soovid lisada paistab pärinevat Wordist. Kas soovid seda enne kleepimist puhastada?", +PasteWordConfirm : "Tekst, mida soovid lisada paistab pärinevat Word'ist. Kas soovid seda enne kleepimist puhastada?", NotCompatiblePaste : "See käsk on saadaval ainult Internet Explorer versioon 5.5 või uuema puhul. Kas soovid kleepida ilma puhastamata?", -UnknownToolbarItem : "Tundmatu tööriistariba üksus \"%1\"", +UnknownToolbarItem : "Tundmatu tööriistarea üksus \"%1\"", UnknownCommand : "Tundmatu käsunimi \"%1\"", NotImplemented : "Käsku ei täidetud", UnknownToolbarSet : "Tööriistariba \"%1\" ei eksisteeri", -NoActiveX : "Sinu interneti sirvija turvalisuse seaded võivad limiteerida mõningaid tekstirdaktori kasutus võimalusi. Sa peaksid võimaldama valiku \"Run ActiveX controls and plug-ins\" oma sirvija seadetes. Muidu võid sa täheldada vigu tekstiredaktori töös ja märgata puuduvaid funktsioone.", +NoActiveX : "Sinu veebisirvija turvalisuse seaded võivad limiteerida mõningaid tekstirdaktori kasutusvõimalusi. Sa peaksid võimaldama valiku \"Run ActiveX controls and plug-ins\" oma veebisirvija seadetes. Muidu võid sa täheldada vigu tekstiredaktori töös ja märgata puuduvaid funktsioone.", BrowseServerBlocked : "Ressursside sirvija avamine ebaõnnestus. Võimalda pop-up akende avanemine.", DialogBlocked : "Ei olenud võimalik avada dialoogi akent. Võimalda pop-up akende avanemine.", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Vali ankur", DlgLnkAnchorByName : "Ankru nime järgi", DlgLnkAnchorById : "Elemendi id järgi", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Selles dokumendis ei ole ankruid)", DlgLnkEMail : "E-posti aadress", DlgLnkEMailSubject : "Sõnumi teema", DlgLnkEMailBody : "Sõnumi tekst", @@ -240,7 +249,7 @@ DlgLnkTarget : "Sihtkoht", DlgLnkTargetFrame : "", DlgLnkTargetPopup : "", DlgLnkTargetBlank : "Uus aken (_blank)", -DlgLnkTargetParent : "Vanem aken (_parent)", +DlgLnkTargetParent : "Esivanem aken (_parent)", DlgLnkTargetSelf : "Sama aken (_self)", DlgLnkTargetTop : "Pealmine aken (_top)", DlgLnkTargetFrameName : "Sihtmärk raami nimi", @@ -262,7 +271,7 @@ DlgLnkPopTop : "Ülemine asukoht", DlnLnkMsgNoUrl : "Palun kirjuta lingi URL", DlnLnkMsgNoEMail : "Palun kirjuta E-Posti aadress", DlnLnkMsgNoAnchor : "Palun vali ankur", -DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING +DlnLnkMsgInvPopName : "Hüpikakna nimi peab algama alfabeetilise tähega ja ei tohi sisaldada tühikuid", // Color Dialog DlgColorTitle : "Vali värv", @@ -322,6 +331,9 @@ DlgCellBackColor : "Tausta värv", DlgCellBorderColor : "Joone värv", DlgCellBtnSelect : "Vali...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Otsi ja asenda", + // Find Dialog DlgFindTitle : "Otsi", DlgFindFindBtn : "Otsi", @@ -337,17 +349,16 @@ DlgReplaceReplAllBtn : "Asenda kõik", DlgReplaceWordChk : "Otsi terviklike sõnu", // Paste Operations / Dialog -PasteErrorCut : "Sinu interneti sirvija turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl+X).", -PasteErrorCopy : "Sinu interneti sirvija turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl+C).", +PasteErrorCut : "Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl+X).", +PasteErrorCopy : "Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl+C).", PasteAsText : "Kleebi tavalise tekstina", PasteFromWord : "Kleebi Wordist", DlgPasteMsg2 : "Palun kleebi järgnevasse kasti kasutades klaviatuuri klahvikombinatsiooni (Ctrl+V) ja vajuta seejärel OK.", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteSec : "Sinu veebisirvija turvaseadete tõttu, ei oma redaktor otsest ligipääsu lõikelaua andmetele. Sa pead kleepima need uuesti siia aknasse.", DlgPasteIgnoreFont : "Ignoreeri kirja definitsioone", DlgPasteRemoveStyles : "Eemalda stiilide definitsioonid", -DlgPasteCleanBox : "Puhasta ära kast", // Color Picker ColorAutomatic : "Automaatne", @@ -381,9 +392,9 @@ IeSpellDownload : "Õigekirja kontrollija ei ole installeeritud. Soovid sa sel // Button Dialog DlgButtonText : "Tekst (väärtus)", DlgButtonType : "Tüüp", -DlgButtonTypeBtn : "Button", //MISSING -DlgButtonTypeSbm : "Submit", //MISSING -DlgButtonTypeRst : "Reset", //MISSING +DlgButtonTypeBtn : "Nupp", +DlgButtonTypeSbm : "Saada", +DlgButtonTypeRst : "Lähtesta", // Checkbox and Radio Button Dialogs DlgCheckboxName : "Nimi", @@ -432,7 +443,7 @@ DlgHiddenValue : "Väärtus", // Bulleted List Dialog BulletedListProp : "Täpitud loetelu omadused", NumberedListProp : "Nummerdatud loetelu omadused", -DlgLstStart : "Start", //MISSING +DlgLstStart : "Alusta", DlgLstType : "Tüüp", DlgLstTypeCircle : "Ring", DlgLstTypeDisc : "Ketas", @@ -455,15 +466,15 @@ DlgDocLangDirLTR : "Vasakult paremale (LTR)", DlgDocLangDirRTL : "Paremalt vasakule (RTL)", DlgDocLangCode : "Keele kood", DlgDocCharSet : "Märgistiku kodeering", -DlgDocCharSetCE : "Central European", //MISSING -DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING -DlgDocCharSetCR : "Cyrillic", //MISSING -DlgDocCharSetGR : "Greek", //MISSING -DlgDocCharSetJP : "Japanese", //MISSING -DlgDocCharSetKR : "Korean", //MISSING -DlgDocCharSetTR : "Turkish", //MISSING -DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING -DlgDocCharSetWE : "Western European", //MISSING +DlgDocCharSetCE : "Kesk-Euroopa", +DlgDocCharSetCT : "Hiina traditsiooniline (Big5)", +DlgDocCharSetCR : "Kirillisa", +DlgDocCharSetGR : "Kreeka", +DlgDocCharSetJP : "Jaapani", +DlgDocCharSetKR : "Korea", +DlgDocCharSetTR : "Türgi", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Lääne-Euroopa", DlgDocCharSetOther : "Ülejäänud märgistike kodeeringud", DlgDocDocType : "Dokumendi tüüppäis", @@ -493,12 +504,12 @@ DlgTemplatesTitle : "Sisu šabloonid", DlgTemplatesSelMsg : "Palun vali šabloon, et avada see redaktoris
    (praegune sisu läheb kaotsi):", DlgTemplatesLoading : "Laen šabloonide nimekirja. Palun oota...", DlgTemplatesNoTpl : "(Ühtegi šablooni ei ole defineeritud)", -DlgTemplatesReplace : "Replace actual contents", //MISSING +DlgTemplatesReplace : "Asenda tegelik sisu", // About Dialog DlgAboutAboutTab : "Teave", -DlgAboutBrowserInfoTab : "Interneti sirvija info", +DlgAboutBrowserInfoTab : "Veebisirvija info", DlgAboutLicenseTab : "Litsents", DlgAboutVersion : "versioon", DlgAboutInfo : "Täpsema info saamiseks mine" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/eu.js b/phpgwapi/js/fckeditor/editor/lang/eu.js index 266d427b8e..8ccf938c82 100644 --- a/phpgwapi/js/fckeditor/editor/lang/eu.js +++ b/phpgwapi/js/fckeditor/editor/lang/eu.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -46,6 +46,7 @@ InsertLinkLbl : "Esteka", InsertLink : "Txertatu/Editatu Esteka", RemoveLink : "Kendu Esteka", Anchor : "Aingura", +AnchorDelete : "Ezabatu Aingura", InsertImageLbl : "Irudia", InsertImage : "Txertatu/Editatu Irudia", InsertFlashLbl : "Flasha", @@ -71,6 +72,7 @@ RightJustify : "Lerrokatu Eskuman", BlockJustify : "Justifikatu", DecreaseIndent : "Txikitu Koska", IncreaseIndent : "Handitu Koska", +Blockquote : "Aipamen blokea", Undo : "Desegin", Redo : "Berregin", NumberedListLbl : "Zenbakidun Zerrenda", @@ -104,20 +106,27 @@ SelectionField : "Hautespen Eremua", ImageButton : "Irudi Botoia", FitWindow : "Maximizatu editorearen tamaina", +ShowBlocks : "Blokeak erakutsi", // Context Menu EditLink : "Aldatu Esteka", CellCM : "Gelaxka", RowCM : "Errenkada", ColumnCM : "Zutabea", -InsertRow : "Txertatu Errenkada", +InsertRowAfter : "Txertatu Lerroa Ostean", +InsertRowBefore : "Txertatu Lerroa Aurretik", DeleteRows : "Ezabatu Errenkadak", -InsertColumn : "Txertatu Zutabea", +InsertColumnAfter : "Txertatu Zutabea Ostean", +InsertColumnBefore : "Txertatu Zutabea Aurretik", DeleteColumns : "Ezabatu Zutabeak", -InsertCell : "Txertatu Gelaxka", +InsertCellAfter : "Txertatu Gelaxka Ostean", +InsertCellBefore : "Txertatu Gelaxka Aurretik", DeleteCells : "Kendu Gelaxkak", MergeCells : "Batu Gelaxkak", -SplitCell : "Zatitu Gelaxka", +MergeRight : "Elkartu Eskumara", +MergeDown : "Elkartu Behera", +HorizontalSplitCell : "Banatu Gelaxkak Horizontalki", +VerticalSplitCell : "Banatu Gelaxkak Bertikalki", TableDelete : "Ezabatu Taula", CellProperties : "Gelaxkaren Ezaugarriak", TableProperties : "Taularen Ezaugarriak", @@ -135,7 +144,7 @@ SelectionFieldProp : "Hautespen Eremuaren Ezaugarriak", TextareaProp : "Testu-arearen Ezaugarriak", FormProp : "Formularioaren Ezaugarriak", -FontFormats : "Arrunta;Formateatua;Helbidea;Izenburua 1;Izenburua 2;Izenburua 3;Izenburua 4;Izenburua 5;Izenburua 6;Paragrafoa (DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "Arrunta;Formateatua;Helbidea;Izenburua 1;Izenburua 2;Izenburua 3;Izenburua 4;Izenburua 5;Izenburua 6;Paragrafoa (DIV)", // Alerts and Messages ProcessingXHTML : "XHTML Prozesatzen. Itxaron mesedez...", @@ -230,7 +239,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Aingura bat hautatu", DlgLnkAnchorByName : "Aingura izenagatik", DlgLnkAnchorById : "Elementuaren ID-gatik", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Ez daude aingurak eskuragarri dokumentuan)", DlgLnkEMail : "ePosta Helbidea", DlgLnkEMailSubject : "Mezuaren Gaia", DlgLnkEMailBody : "Mezuaren Gorputza", @@ -263,7 +272,7 @@ DlgLnkPopTop : "Goiko Posizioa", DlnLnkMsgNoUrl : "Mesedez URL esteka idatzi", DlnLnkMsgNoEMail : "Mesedez ePosta helbidea idatzi", DlnLnkMsgNoAnchor : "Mesedez aingura bat aukeratu", -DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING +DlnLnkMsgInvPopName : "Popup lehioaren izenak karaktere alfabetiko batekin hasi behar du eta eta ezin du zuriunerik izan", // Color Dialog DlgColorTitle : "Kolore Aukeraketa", @@ -323,6 +332,9 @@ DlgCellBackColor : "Atzeko Kolorea", DlgCellBorderColor : "Ertzako Kolorea", DlgCellBtnSelect : "Aukertau...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Bilatu eta Ordeztu", + // Find Dialog DlgFindTitle : "Bilaketa", DlgFindFindBtn : "Bilatu", @@ -345,10 +357,9 @@ PasteAsText : "Testu Arrunta bezala Itsatsi", PasteFromWord : "Word-etik itsatsi", DlgPasteMsg2 : "Mesedez teklatua erabilita (Ctrl+V) ondorego eremuan testua itsatsi eta OK sakatu.", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteSec : "Nabigatzailearen segurtasun ezarpenak direla eta, editoreak ezin du arbela zuzenean erabili. Leiho honetan berriro itsatsi behar duzu.", DlgPasteIgnoreFont : "Letra Motaren definizioa ezikusi", DlgPasteRemoveStyles : "Estilo definizioak kendu", -DlgPasteCleanBox : "Testu-eremua Garbitu", // Color Picker ColorAutomatic : "Automatikoa", @@ -382,9 +393,9 @@ IeSpellDownload : "Zuzentzaile ortografikoa ez dago instalatuta. Deskargatu na // Button Dialog DlgButtonText : "Testua (Balorea)", DlgButtonType : "Mota", -DlgButtonTypeBtn : "Button", //MISSING -DlgButtonTypeSbm : "Submit", //MISSING -DlgButtonTypeRst : "Reset", //MISSING +DlgButtonTypeBtn : "Botoia", +DlgButtonTypeSbm : "Bidali", +DlgButtonTypeRst : "Garbitu", // Checkbox and Radio Button Dialogs DlgCheckboxName : "Izena", @@ -433,7 +444,7 @@ DlgHiddenValue : "Balorea", // Bulleted List Dialog BulletedListProp : "Buletdun Zerrendaren Ezarpenak", NumberedListProp : "Zenbakidun Zerrendaren Ezarpenak", -DlgLstStart : "Start", //MISSING +DlgLstStart : "Hasiera", DlgLstType : "Mota", DlgLstTypeCircle : "Zirkulua", DlgLstTypeDisc : "Diskoa", @@ -456,16 +467,16 @@ DlgDocLangDirLTR : "Ezkerretik eskumara (LTR)", DlgDocLangDirRTL : "Eskumatik ezkerrera (RTL)", DlgDocLangCode : "Hizkuntzaren Kodea", DlgDocCharSet : "Karaktere Multzoaren Kodeketa", -DlgDocCharSetCE : "Central European", //MISSING -DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING -DlgDocCharSetCR : "Cyrillic", //MISSING -DlgDocCharSetGR : "Greek", //MISSING -DlgDocCharSetJP : "Japanese", //MISSING -DlgDocCharSetKR : "Korean", //MISSING -DlgDocCharSetTR : "Turkish", //MISSING -DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING -DlgDocCharSetWE : "Western European", //MISSING -DlgDocCharSetOther : "Beste Karaktere Multzoaren Kodeketa", +DlgDocCharSetCE : "Erdialdeko Europakoa", +DlgDocCharSetCT : "Txinatar Tradizionala (Big5)", +DlgDocCharSetCR : "Zirilikoa", +DlgDocCharSetGR : "Grekoa", +DlgDocCharSetJP : "Japoniarra", +DlgDocCharSetKR : "Korearra", +DlgDocCharSetTR : "Turkiarra", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Mendebaldeko Europakoa", +DlgDocCharSetOther : "Beste Karaktere Multzoko Kodeketa", DlgDocDocType : "Document Type Goiburua", DlgDocDocTypeOther : "Beste Document Type Goiburua", @@ -494,7 +505,7 @@ DlgTemplatesTitle : "Eduki Txantiloiak", DlgTemplatesSelMsg : "Mesedez txantiloia aukeratu editorean kargatzeko
    (orain dauden edukiak galduko dira):", DlgTemplatesLoading : "Txantiloiak kargatzen. Itxaron mesedez...", DlgTemplatesNoTpl : "(Ez dago definitutako txantiloirik)", -DlgTemplatesReplace : "Replace actual contents", //MISSING +DlgTemplatesReplace : "Ordeztu oraingo edukiak", // About Dialog DlgAboutAboutTab : "Honi buruz", @@ -502,4 +513,4 @@ DlgAboutBrowserInfoTab : "Nabigatzailearen Informazioa", DlgAboutLicenseTab : "Lizentzia", DlgAboutVersion : "bertsioa", DlgAboutInfo : "Informazio gehiago eskuratzeko hona joan" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/fa.js b/phpgwapi/js/fckeditor/editor/lang/fa.js index 588a52015f..f7945a8d18 100644 --- a/phpgwapi/js/fckeditor/editor/lang/fa.js +++ b/phpgwapi/js/fckeditor/editor/lang/fa.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "پیوند", InsertLink : "گنجاندن/ویرایش ِپیوند", RemoveLink : "برداشتن پیوند", Anchor : "گنجاندن/ویرایش ِلنگر", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "تصویر", InsertImage : "گنجاندن/ویرایش ِتصویر", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "راست‌چین", BlockJustify : "بلوک‌چین", DecreaseIndent : "کاهش تورفتگی", IncreaseIndent : "افزایش تورفتگی", +Blockquote : "Blockquote", //MISSING Undo : "واچیدن", Redo : "بازچیدن", NumberedListLbl : "فهرست شماره‌دار", @@ -103,20 +105,27 @@ SelectionField : "فیلد چندگزینه‌ای", ImageButton : "دکمهٴ تصویری", FitWindow : "بیشینه‌سازی ِاندازهٴ ویرایشگر", +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "ویرایش پیوند", CellCM : "سلول", RowCM : "سطر", ColumnCM : "ستون", -InsertRow : "گنجاندن سطر", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "حذف سطرها", -InsertColumn : "گنجاندن ستون", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "حذف ستونها", -InsertCell : "گنجاندن سلول", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "حذف سلولها", MergeCells : "ادغام سلولها", -SplitCell : "جداسازی سلول", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "پاک‌کردن جدول", CellProperties : "ویژگیهای سلول", TableProperties : "ویژگیهای جدول", @@ -134,12 +143,12 @@ SelectionFieldProp : "ویژگیهای فیلد چندگزینه‌ای", TextareaProp : "ویژگیهای ناحیهٴ متنی", FormProp : "ویژگیهای فرم", -FontFormats : "نرمال;فرمت‌شده;آدرس;سرنویس 1;سرنویس 2;سرنویس 3;سرنویس 4;سرنویس 5;سرنویس 6;بند;(DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "نرمال;فرمت‌شده;آدرس;سرنویس 1;سرنویس 2;سرنویس 3;سرنویس 4;سرنویس 5;سرنویس 6;بند;(DIV)", // Alerts and Messages ProcessingXHTML : "پردازش XHTML. لطفا صبر کنید...", Done : "انجام شد", -PasteWordConfirm : "کپی شده است. آیا می‌خواهید قبل از چسباندن آن را پاک‌سازی کنید؟ Word متنی که می‌خواهید بچسبانید به نظر می‌رسد از", +PasteWordConfirm : "متنی که می‌خواهید بچسبانید به نظر می‌رسد از Word کپی شده است. آیا می‌خواهید قبل از چسباندن آن را پاک‌سازی کنید؟", NotCompatiblePaste : "این فرمان برای مرورگر Internet Explorer از نگارش 5.5 یا بالاتر در دسترس است. آیا می‌خواهید بدون پاک‌سازی، متن را بچسبانید؟", UnknownToolbarItem : "فقرهٴ نوارابزار ناشناخته \"%1\"", UnknownCommand : "نام دستور ناشناخته \"%1\"", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "یک لنگر برگزینید", DlgLnkAnchorByName : "با نام لنگر", DlgLnkAnchorById : "با شناسهٴ المان", -DlgLnkNoAnchors : "<در این سند لنگری دردسترس نیست>", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(در این سند لنگری دردسترس نیست)", DlgLnkEMail : "نشانی پست الکترونیکی", DlgLnkEMailSubject : "موضوع پیام", DlgLnkEMailBody : "متن پیام", @@ -246,7 +255,7 @@ DlgLnkTargetTop : "بالاترین پنجره (_top)", DlgLnkTargetFrameName : "نام فریم مقصد", DlgLnkPopWinName : "نام پنجرهٴ پاپاپ", DlgLnkPopWinFeat : "ویژگیهای پنجرهٴ پاپاپ", -DlgLnkPopResize : "قابل تغیر اندازه", +DlgLnkPopResize : "قابل تغییر اندازه", DlgLnkPopLocation : "نوار موقعیت", DlgLnkPopMenu : "نوار منو", DlgLnkPopScroll : "میله‌های پیمایش", @@ -322,6 +331,9 @@ DlgCellBackColor : "رنگ پس‌زمینه", DlgCellBorderColor : "رنگ لبه", DlgCellBtnSelect : "برگزینید...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "یافتن", DlgFindFindBtn : "یافتن", @@ -344,10 +356,9 @@ PasteAsText : "چسباندن به عنوان متن ِساده", PasteFromWord : "چسباندن از Word", DlgPasteMsg2 : "لطفا متن را با کلیدهای (Ctrl+V) در این جعبهٴ متنی بچسبانید و پذیرش را بزنید.", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteSec : "به خاطر تنظیمات امنیتی مرورگر شما، ویرایشگر نمی‌تواند دسترسی مستقیم به داده‌های clipboard داشته باشد. شما باید دوباره آنرا در این پنجره بچسبانید.", DlgPasteIgnoreFont : "چشم‌پوشی از تعاریف نوع قلم", DlgPasteRemoveStyles : "چشم‌پوشی از تعاریف سبک (style)", -DlgPasteCleanBox : "پاک‌کردن ناحیه", // Color Picker ColorAutomatic : "خودکار", @@ -362,8 +373,8 @@ DlgAnchorName : "نام لنگر", DlgAnchorErrorName : "لطفا نام لنگر را بنویسید", // Speller Pages Dialog -DlgSpellNotInDic : "در واژه‌نامه موجود نیست", -DlgSpellChangeTo : "تغیر به", +DlgSpellNotInDic : "در واژه‌نامه یافت نشد", +DlgSpellChangeTo : "تغییر به", DlgSpellBtnIgnore : "چشم‌پوشی", DlgSpellBtnIgnoreAll : "چشم‌پوشی همه", DlgSpellBtnReplace : "جایگزینی", @@ -372,9 +383,9 @@ DlgSpellBtnUndo : "واچینش", DlgSpellNoSuggestions : "- پیشنهادی نیست -", DlgSpellProgress : "بررسی املا در حال انجام...", DlgSpellNoMispell : "بررسی املا انجام شد. هیچ غلط‌املائی یافت نشد", -DlgSpellNoChanges : "بررسی املا انجام شد. هیچ واژه‌ای تغیر نیافت", -DlgSpellOneChange : "بررسی املا انجام شد. یک واژه تغیر یافت", -DlgSpellManyChanges : "بررسی املا انجام شد. %1 واژه تغیر یافت", +DlgSpellNoChanges : "بررسی املا انجام شد. هیچ واژه‌ای تغییر نیافت", +DlgSpellOneChange : "بررسی املا انجام شد. یک واژه تغییر یافت", +DlgSpellManyChanges : "بررسی املا انجام شد. %1 واژه تغییر یافت", IeSpellDownload : "بررسی‌کنندهٴ املا نصب نشده است. آیا می‌خواهید آن را هم‌اکنون دریافت کنید؟", @@ -392,7 +403,7 @@ DlgCheckboxSelected : "برگزیده", // Form Dialog DlgFormName : "نام", -DlgFormAction : "اقدام", +DlgFormAction : "رویداد", DlgFormMethod : "متد", // Select Field Dialog @@ -401,15 +412,15 @@ DlgSelectValue : "مقدار", DlgSelectSize : "اندازه", DlgSelectLines : "خطوط", DlgSelectChkMulti : "گزینش چندگانه فراهم باشد", -DlgSelectOpAvail : "گزینه‌های موجود", +DlgSelectOpAvail : "گزینه‌های دردسترس", DlgSelectOpText : "متن", DlgSelectOpValue : "مقدار", -DlgSelectBtnAdd : "اضافه", +DlgSelectBtnAdd : "افزودن", DlgSelectBtnModify : "ویرایش", DlgSelectBtnUp : "بالا", DlgSelectBtnDown : "پائین", DlgSelectBtnSetValue : "تنظیم به عنوان مقدار ِبرگزیده", -DlgSelectBtnDelete : "حذف", +DlgSelectBtnDelete : "پاک‌کردن", // Textarea Dialog DlgTextareaName : "نام", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "اطلاعات مرورگر", DlgAboutLicenseTab : "گواهینامه", DlgAboutVersion : "نگارش", DlgAboutInfo : "برای آگاهی بیشتر به این نشانی بروید" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/fi.js b/phpgwapi/js/fckeditor/editor/lang/fi.js index 282cfaf839..35054c1771 100644 --- a/phpgwapi/js/fckeditor/editor/lang/fi.js +++ b/phpgwapi/js/fckeditor/editor/lang/fi.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Linkki", InsertLink : "Lisää linkki/muokkaa linkkiä", RemoveLink : "Poista linkki", Anchor : "Lisää ankkuri/muokkaa ankkuria", +AnchorDelete : "Poista ankkuri", InsertImageLbl : "Kuva", InsertImage : "Lisää kuva/muokkaa kuvaa", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "Tasaa oikeat reunat", BlockJustify : "Tasaa molemmat reunat", DecreaseIndent : "Pienennä sisennystä", IncreaseIndent : "Suurenna sisennystä", +Blockquote : "Lainaus", Undo : "Kumoa", Redo : "Toista", NumberedListLbl : "Numerointi", @@ -103,20 +105,27 @@ SelectionField : "Valintakenttä", ImageButton : "Kuvapainike", FitWindow : "Suurenna editori koko ikkunaan", +ShowBlocks : "Näytä elementit", // Context Menu EditLink : "Muokkaa linkkiä", CellCM : "Solu", RowCM : "Rivi", ColumnCM : "Sarake", -InsertRow : "Lisää rivi", +InsertRowAfter : "Lisää rivi alapuolelle", +InsertRowBefore : "Lisää rivi yläpuolelle", DeleteRows : "Poista rivit", -InsertColumn : "Lisää sarake", +InsertColumnAfter : "Lisää sarake oikealle", +InsertColumnBefore : "Lisää sarake vasemmalle", DeleteColumns : "Poista sarakkeet", -InsertCell : "Lisää solu", +InsertCellAfter : "Lisää solu perään", +InsertCellBefore : "Lisää solu eteen", DeleteCells : "Poista solut", MergeCells : "Yhdistä solut", -SplitCell : "Jaa solu", +MergeRight : "Yhdistä oikealla olevan kanssa", +MergeDown : "Yhdistä alla olevan kanssa", +HorizontalSplitCell : "Jaa solu vaakasuunnassa", +VerticalSplitCell : "Jaa solu pystysuunnassa", TableDelete : "Poista taulu", CellProperties : "Solun ominaisuudet", TableProperties : "Taulun ominaisuudet", @@ -134,7 +143,7 @@ SelectionFieldProp : "Valintakentän ominaisuudet", TextareaProp : "Tekstilaatikon ominaisuudet", FormProp : "Lomakkeen ominaisuudet", -FontFormats : "Normaali;Muotoiltu;Osoite;Otsikko 1;Otsikko 2;Otsikko 3;Otsikko 4;Otsikko 5;Otsikko 6", //REVIEW : Check _getfontformat.html +FontFormats : "Normaali;Muotoiltu;Osoite;Otsikko 1;Otsikko 2;Otsikko 3;Otsikko 4;Otsikko 5;Otsikko 6", // Alerts and Messages ProcessingXHTML : "Prosessoidaan XHTML:ää. Odota hetki...", @@ -229,7 +238,7 @@ DlgLnkURL : "Osoite", DlgLnkAnchorSel : "Valitse ankkuri", DlgLnkAnchorByName : "Ankkurin nimen mukaan", DlgLnkAnchorById : "Ankkurin ID:n mukaan", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Ei ankkureita tässä dokumentissa)", DlgLnkEMail : "Sähköpostiosoite", DlgLnkEMailSubject : "Aihe", DlgLnkEMailBody : "Viesti", @@ -262,7 +271,7 @@ DlgLnkPopTop : "Ylhäältä (px)", DlnLnkMsgNoUrl : "Linkille on kirjoitettava URL", DlnLnkMsgNoEMail : "Kirjoita sähköpostiosoite", DlnLnkMsgNoAnchor : "Valitse ankkuri", -DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING +DlnLnkMsgInvPopName : "Popup-ikkunan nimi pitää alkaa aakkosella ja ei saa sisältää välejä", // Color Dialog DlgColorTitle : "Valitse väri", @@ -322,6 +331,9 @@ DlgCellBackColor : "Taustaväri", DlgCellBorderColor : "Rajan väri", DlgCellBtnSelect : "Valitse...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Etsi ja korvaa", + // Find Dialog DlgFindTitle : "Etsi", DlgFindFindBtn : "Etsi", @@ -344,10 +356,9 @@ PasteAsText : "Liitä tekstinä", PasteFromWord : "Liitä Wordista", DlgPasteMsg2 : "Liitä painamalla (Ctrl+V) ja painamalla OK.", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteSec : "Selaimesi turva-asetukset eivät salli editorin käyttää leikepöytää suoraan. Sinun pitää suorittaa liittäminen tässä ikkunassa.", DlgPasteIgnoreFont : "Jätä huomioimatta fonttimääritykset", DlgPasteRemoveStyles : "Poista tyylimääritykset", -DlgPasteCleanBox : "Tyhjennä", // Color Picker ColorAutomatic : "Automaattinen", @@ -381,9 +392,9 @@ IeSpellDownload : "Oikeinkirjoituksen tarkistusta ei ole asennettu. Haluatko l // Button Dialog DlgButtonText : "Teksti (arvo)", DlgButtonType : "Tyyppi", -DlgButtonTypeBtn : "Button", //MISSING -DlgButtonTypeSbm : "Submit", //MISSING -DlgButtonTypeRst : "Reset", //MISSING +DlgButtonTypeBtn : "Painike", +DlgButtonTypeSbm : "Lähetä", +DlgButtonTypeRst : "Tyhjennä", // Checkbox and Radio Button Dialogs DlgCheckboxName : "Nimi", @@ -432,7 +443,7 @@ DlgHiddenValue : "Arvo", // Bulleted List Dialog BulletedListProp : "Luettelon ominaisuudet", NumberedListProp : "Numeroinnin ominaisuudet", -DlgLstStart : "Start", //MISSING +DlgLstStart : "Alku", DlgLstType : "Tyyppi", DlgLstTypeCircle : "Kehä", DlgLstTypeDisc : "Ympyrä", @@ -454,17 +465,17 @@ DlgDocLangDir : "Kielen suunta", DlgDocLangDirLTR : "Vasemmalta oikealle (LTR)", DlgDocLangDirRTL : "Oikealta vasemmalle (RTL)", DlgDocLangCode : "Kielikoodi", -DlgDocCharSet : "Merkistäkoodaus", -DlgDocCharSetCE : "Central European", //MISSING -DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING -DlgDocCharSetCR : "Cyrillic", //MISSING -DlgDocCharSetGR : "Greek", //MISSING -DlgDocCharSetJP : "Japanese", //MISSING -DlgDocCharSetKR : "Korean", //MISSING -DlgDocCharSetTR : "Turkish", //MISSING -DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING -DlgDocCharSetWE : "Western European", //MISSING -DlgDocCharSetOther : "Muu merkistäkoodaus", +DlgDocCharSet : "Merkistökoodaus", +DlgDocCharSetCE : "Keskieurooppalainen", +DlgDocCharSetCT : "Kiina, perinteinen (Big5)", +DlgDocCharSetCR : "Kyrillinen", +DlgDocCharSetGR : "Kreikka", +DlgDocCharSetJP : "Japani", +DlgDocCharSetKR : "Korealainen", +DlgDocCharSetTR : "Turkkilainen", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Länsieurooppalainen", +DlgDocCharSetOther : "Muu merkistökoodaus", DlgDocDocType : "Dokumentin tyyppi", DlgDocDocTypeOther : "Muu dokumentin tyyppi", @@ -493,7 +504,7 @@ DlgTemplatesTitle : "Sisältöpohjat", DlgTemplatesSelMsg : "Valitse pohja editoriin
    (aiempi sisältö menetetään):", DlgTemplatesLoading : "Ladataan listaa pohjista. Hetkinen...", DlgTemplatesNoTpl : "(Ei määriteltyjä pohjia)", -DlgTemplatesReplace : "Replace actual contents", //MISSING +DlgTemplatesReplace : "Korvaa editorin koko sisältö", // About Dialog DlgAboutAboutTab : "Editorista", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "Selaimen tiedot", DlgAboutLicenseTab : "Lisenssi", DlgAboutVersion : "versio", DlgAboutInfo : "Lisää tietoa osoitteesta" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/fo.js b/phpgwapi/js/fckeditor/editor/lang/fo.js index 830c43eea1..bc3f1e759c 100644 --- a/phpgwapi/js/fckeditor/editor/lang/fo.js +++ b/phpgwapi/js/fckeditor/editor/lang/fo.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Tilknýti", InsertLink : "Ger/broyt tilknýti", RemoveLink : "Strika tilknýti", Anchor : "Ger/broyt marknastein", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "Myndir", InsertImage : "Set inn/broyt mynd", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "Høgrasett", BlockJustify : "Javnir tekstkantar", DecreaseIndent : "Minka reglubrotarinntriv", IncreaseIndent : "Økja reglubrotarinntriv", +Blockquote : "Blockquote", //MISSING Undo : "Angra", Redo : "Vend aftur", NumberedListLbl : "Talmerktur listi", @@ -103,20 +105,27 @@ SelectionField : "Valskrá", ImageButton : "Myndaknøttur", FitWindow : "Set tekstviðgera til fulla stødd", +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "Broyt tilknýti", CellCM : "Meski", RowCM : "Rað", ColumnCM : "Kolonna", -InsertRow : "Nýtt rað", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "Strika røðir", -InsertColumn : "Nýggj kolonna", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "Strika kolonnur", -InsertCell : "Nýggjur meski", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "Strika meskar", MergeCells : "Flætta meskar", -SplitCell : "Být sundur meskar", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "Strika tabell", CellProperties : "Meskueginleikar", TableProperties : "Tabelleginleikar", @@ -134,7 +143,7 @@ SelectionFieldProp : "Eginleikar fyri valskrá", TextareaProp : "Eginleikar fyri tekstumráði", FormProp : "Eginleikar fyri Form", -FontFormats : "Vanligt;Sniðgivið;Adressa;Yvirskrift 1;Yvirskrift 2;Yvirskrift 3;Yvirskrift 4;Yvirskrift 5;Yvirskrift 6", //REVIEW : Check _getfontformat.html +FontFormats : "Vanligt;Sniðgivið;Adressa;Yvirskrift 1;Yvirskrift 2;Yvirskrift 3;Yvirskrift 4;Yvirskrift 5;Yvirskrift 6", // Alerts and Messages ProcessingXHTML : "XHTML verður viðgjørt. Bíða við...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Vel ein marknastein", DlgLnkAnchorByName : "Eftir navni á marknasteini", DlgLnkAnchorById : "Eftir element Id", -DlgLnkNoAnchors : "(Eingir marknasteinar eru í hesum dokumentið)", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Eingir marknasteinar eru í hesum dokumentið)", DlgLnkEMail : "Teldupost-adressa", DlgLnkEMailSubject : "Evni", DlgLnkEMailBody : "Breyðtekstur", @@ -322,6 +331,9 @@ DlgCellBackColor : "Bakgrundslitur", DlgCellBorderColor : "Litur á borda", DlgCellBtnSelect : "Vel...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "Finn", DlgFindFindBtn : "Finn", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Vinarliga koyr tekstin í hendan rútin við knappaborðinum (", +DlgInfoTab : "Info", +DlgAlertUrl : "Veuillez saisir l'URL", + +// General Dialogs Labels +DlgGenNotSet : "", +DlgGenId : "Id", +DlgGenLangDir : "Sens d'écriture", +DlgGenLangDirLtr : "De gauche à droite (LTR)", +DlgGenLangDirRtl : "De droite à gauche (RTL)", +DlgGenLangCode : "Code langue", +DlgGenAccessKey : "Équivalent clavier", +DlgGenName : "Nom", +DlgGenTabIndex : "Ordre de tabulation", +DlgGenLongDescr : "URL de description longue", +DlgGenClass : "Classes de feuilles de style", +DlgGenTitle : "Titre", +DlgGenContType : "Type de contenu", +DlgGenLinkCharset : "Encodage de caractère", +DlgGenStyle : "Style", + +// Image Dialog +DlgImgTitle : "Propriétés de l'image", +DlgImgInfoTab : "Informations sur l'image", +DlgImgBtnUpload : "Envoyer sur le serveur", +DlgImgURL : "URL", +DlgImgUpload : "Télécharger", +DlgImgAlt : "Texte de remplacement", +DlgImgWidth : "Largeur", +DlgImgHeight : "Hauteur", +DlgImgLockRatio : "Garder les proportions", +DlgBtnResetSize : "Taille originale", +DlgImgBorder : "Bordure", +DlgImgHSpace : "Espacement horizontal", +DlgImgVSpace : "Espacement vertical", +DlgImgAlign : "Alignement", +DlgImgAlignLeft : "Gauche", +DlgImgAlignAbsBottom: "Abs Bas", +DlgImgAlignAbsMiddle: "Abs Milieu", +DlgImgAlignBaseline : "Bas du texte", +DlgImgAlignBottom : "Bas", +DlgImgAlignMiddle : "Milieu", +DlgImgAlignRight : "Droite", +DlgImgAlignTextTop : "Haut du texte", +DlgImgAlignTop : "Haut", +DlgImgPreview : "Prévisualisation", +DlgImgAlertUrl : "Veuillez saisir l'URL de l'image", +DlgImgLinkTab : "Lien", + +// Flash Dialog +DlgFlashTitle : "Propriétés de l'animation Flash", +DlgFlashChkPlay : "Lecture automatique", +DlgFlashChkLoop : "Boucle", +DlgFlashChkMenu : "Activer le menu Flash", +DlgFlashScale : "Affichage", +DlgFlashScaleAll : "Par défaut (tout montrer)", +DlgFlashScaleNoBorder : "Sans bordure", +DlgFlashScaleFit : "Ajuster aux dimensions", + +// Link Dialog +DlgLnkWindowTitle : "Propriétés du lien", +DlgLnkInfoTab : "Informations sur le lien", +DlgLnkTargetTab : "Destination", + +DlgLnkType : "Type de lien", +DlgLnkTypeURL : "URL", +DlgLnkTypeAnchor : "Ancre dans cette page", +DlgLnkTypeEMail : "E-Mail", +DlgLnkProto : "Protocole", +DlgLnkProtoOther : "", +DlgLnkURL : "URL", +DlgLnkAnchorSel : "Sélectionner une ancre", +DlgLnkAnchorByName : "Par nom", +DlgLnkAnchorById : "Par id", +DlgLnkNoAnchors : "(Pas d'ancre disponible dans le document)", +DlgLnkEMail : "Adresse E-Mail", +DlgLnkEMailSubject : "Sujet du message", +DlgLnkEMailBody : "Corps du message", +DlgLnkUpload : "Télécharger", +DlgLnkBtnUpload : "Envoyer sur le serveur", + +DlgLnkTarget : "Destination", +DlgLnkTargetFrame : "", +DlgLnkTargetPopup : "", +DlgLnkTargetBlank : "Nouvelle fenêtre (_blank)", +DlgLnkTargetParent : "Fenêtre mère (_parent)", +DlgLnkTargetSelf : "Même fenêtre (_self)", +DlgLnkTargetTop : "Fenêtre supérieure (_top)", +DlgLnkTargetFrameName : "Nom du cadre de destination", +DlgLnkPopWinName : "Nom de la fenêtre popup", +DlgLnkPopWinFeat : "Caractéristiques de la fenêtre popup", +DlgLnkPopResize : "Taille modifiable", +DlgLnkPopLocation : "Barre d'adresses", +DlgLnkPopMenu : "Barre de menu", +DlgLnkPopScroll : "Barres de défilement", +DlgLnkPopStatus : "Barre d'état", +DlgLnkPopToolbar : "Barre d'outils", +DlgLnkPopFullScrn : "Plein écran (IE)", +DlgLnkPopDependent : "Dépendante (Netscape)", +DlgLnkPopWidth : "Largeur", +DlgLnkPopHeight : "Hauteur", +DlgLnkPopLeft : "Position à partir de la gauche", +DlgLnkPopTop : "Position à partir du haut", + +DlnLnkMsgNoUrl : "Veuillez saisir l'URL", +DlnLnkMsgNoEMail : "Veuillez saisir l'adresse e-mail", +DlnLnkMsgNoAnchor : "Veuillez sélectionner une ancre", +DlnLnkMsgInvPopName : "Le nom de la fenêtre popup doit commencer par une lettre et ne doit pas contenir d'espace", + +// Color Dialog +DlgColorTitle : "Sélectionner", +DlgColorBtnClear : "Effacer", +DlgColorHighlight : "Prévisualisation", +DlgColorSelected : "Sélectionné", + +// Smiley Dialog +DlgSmileyTitle : "Insérer un Emoticon", + +// Special Character Dialog +DlgSpecialCharTitle : "Insérer un caractère spécial", + +// Table Dialog +DlgTableTitle : "Propriétés du tableau", +DlgTableRows : "Lignes", +DlgTableColumns : "Colonnes", +DlgTableBorder : "Taille de la bordure", +DlgTableAlign : "Alignement", +DlgTableAlignNotSet : "", +DlgTableAlignLeft : "Gauche", +DlgTableAlignCenter : "Centré", +DlgTableAlignRight : "Droite", +DlgTableWidth : "Largeur", +DlgTableWidthPx : "pixels", +DlgTableWidthPc : "pourcentage", +DlgTableHeight : "Hauteur", +DlgTableCellSpace : "Espacement", +DlgTableCellPad : "Contour", +DlgTableCaption : "Titre", +DlgTableSummary : "Résumé", + +// Table Cell Dialog +DlgCellTitle : "Propriétés de la cellule", +DlgCellWidth : "Largeur", +DlgCellWidthPx : "pixels", +DlgCellWidthPc : "pourcentage", +DlgCellHeight : "Hauteur", +DlgCellWordWrap : "Retour à la ligne", +DlgCellWordWrapNotSet : "", +DlgCellWordWrapYes : "Oui", +DlgCellWordWrapNo : "Non", +DlgCellHorAlign : "Alignement horizontal", +DlgCellHorAlignNotSet : "", +DlgCellHorAlignLeft : "Gauche", +DlgCellHorAlignCenter : "Centré", +DlgCellHorAlignRight: "Droite", +DlgCellVerAlign : "Alignement vertical", +DlgCellVerAlignNotSet : "", +DlgCellVerAlignTop : "Haut", +DlgCellVerAlignMiddle : "Milieu", +DlgCellVerAlignBottom : "Bas", +DlgCellVerAlignBaseline : "Bas du texte", +DlgCellRowSpan : "Lignes fusionnées", +DlgCellCollSpan : "Colonnes fusionnées", +DlgCellBackColor : "Couleur de fond", +DlgCellBorderColor : "Couleur de bordure", +DlgCellBtnSelect : "Sélectionner...", + +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Chercher et Remplacer", + +// Find Dialog +DlgFindTitle : "Chercher", +DlgFindFindBtn : "Chercher", +DlgFindNotFoundMsg : "Le texte indiqué est introuvable.", + +// Replace Dialog +DlgReplaceTitle : "Remplacer", +DlgReplaceFindLbl : "Rechercher:", +DlgReplaceReplaceLbl : "Remplacer par:", +DlgReplaceCaseChk : "Respecter la casse", +DlgReplaceReplaceBtn : "Remplacer", +DlgReplaceReplAllBtn : "Tout remplacer", +DlgReplaceWordChk : "Mot entier", + +// Paste Operations / Dialog +PasteErrorCut : "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+X).", +PasteErrorCopy : "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+C).", + +PasteAsText : "Coller comme texte", +PasteFromWord : "Coller à partir de Word", + +DlgPasteMsg2 : "Veuillez coller dans la zone ci-dessous en utilisant le clavier (Ctrl+V) et appuyer sur OK.", +DlgPasteSec : "A cause des paramètres de sécurité de votre navigateur, l'éditeur ne peut accéder au presse-papier directement. Vous devez coller à nouveau le contenu dans cette fenêtre.", +DlgPasteIgnoreFont : "Ignorer les polices de caractères", +DlgPasteRemoveStyles : "Supprimer les styles", + +// Color Picker +ColorAutomatic : "Automatique", +ColorMoreColors : "Plus de couleurs...", + +// Document Properties +DocProps : "Propriétés du document", + +// Anchor Dialog +DlgAnchorTitle : "Propriétés de l'ancre", +DlgAnchorName : "Nom de l'ancre", +DlgAnchorErrorName : "Veuillez saisir le nom de l'ancre", + +// Speller Pages Dialog +DlgSpellNotInDic : "Pas dans le dictionnaire", +DlgSpellChangeTo : "Changer en", +DlgSpellBtnIgnore : "Ignorer", +DlgSpellBtnIgnoreAll : "Ignorer tout", +DlgSpellBtnReplace : "Remplacer", +DlgSpellBtnReplaceAll : "Remplacer tout", +DlgSpellBtnUndo : "Annuler", +DlgSpellNoSuggestions : "- Pas de suggestion -", +DlgSpellProgress : "Vérification d'orthographe en cours...", +DlgSpellNoMispell : "Vérification d'orthographe terminée: pas d'erreur trouvée", +DlgSpellNoChanges : "Vérification d'orthographe terminée: Pas de modifications", +DlgSpellOneChange : "Vérification d'orthographe terminée: Un mot modifié", +DlgSpellManyChanges : "Vérification d'orthographe terminée: %1 mots modifiés", + +IeSpellDownload : "Le Correcteur d'orthographe n'est pas installé. Souhaitez-vous le télécharger maintenant?", + +// Button Dialog +DlgButtonText : "Texte (Valeur)", +DlgButtonType : "Type", +DlgButtonTypeBtn : "Bouton", +DlgButtonTypeSbm : "Soumettre", +DlgButtonTypeRst : "Réinitialiser", + +// Checkbox and Radio Button Dialogs +DlgCheckboxName : "Nom", +DlgCheckboxValue : "Valeur", +DlgCheckboxSelected : "Sélectionné", + +// Form Dialog +DlgFormName : "Nom", +DlgFormAction : "Action", +DlgFormMethod : "Méthode", + +// Select Field Dialog +DlgSelectName : "Nom", +DlgSelectValue : "Valeur", +DlgSelectSize : "Taille", +DlgSelectLines : "lignes", +DlgSelectChkMulti : "Sélection multiple", +DlgSelectOpAvail : "Options disponibles", +DlgSelectOpText : "Texte", +DlgSelectOpValue : "Valeur", +DlgSelectBtnAdd : "Ajouter", +DlgSelectBtnModify : "Modifier", +DlgSelectBtnUp : "Monter", +DlgSelectBtnDown : "Descendre", +DlgSelectBtnSetValue : "Valeur sélectionnée", +DlgSelectBtnDelete : "Supprimer", + +// Textarea Dialog +DlgTextareaName : "Nom", +DlgTextareaCols : "Colonnes", +DlgTextareaRows : "Lignes", + +// Text Field Dialog +DlgTextName : "Nom", +DlgTextValue : "Valeur", +DlgTextCharWidth : "Largeur en caractères", +DlgTextMaxChars : "Nombre maximum de caractères", +DlgTextType : "Type", +DlgTextTypeText : "Texte", +DlgTextTypePass : "Mot de passe", + +// Hidden Field Dialog +DlgHiddenName : "Nom", +DlgHiddenValue : "Valeur", + +// Bulleted List Dialog +BulletedListProp : "Propriétés de liste à puces", +NumberedListProp : "Propriétés de liste numérotée", +DlgLstStart : "Début", +DlgLstType : "Type", +DlgLstTypeCircle : "Cercle", +DlgLstTypeDisc : "Disque", +DlgLstTypeSquare : "Carré", +DlgLstTypeNumbers : "Nombres (1, 2, 3)", +DlgLstTypeLCase : "Lettres minuscules (a, b, c)", +DlgLstTypeUCase : "Lettres majuscules (A, B, C)", +DlgLstTypeSRoman : "Chiffres romains minuscules (i, ii, iii)", +DlgLstTypeLRoman : "Chiffres romains majuscules (I, II, III)", + +// Document Properties Dialog +DlgDocGeneralTab : "Général", +DlgDocBackTab : "Fond", +DlgDocColorsTab : "Couleurs et Marges", +DlgDocMetaTab : "Méta-Données", + +DlgDocPageTitle : "Titre de la page", +DlgDocLangDir : "Sens d'écriture", +DlgDocLangDirLTR : "De la gauche vers la droite (LTR)", +DlgDocLangDirRTL : "De la droite vers la gauche (RTL)", +DlgDocLangCode : "Code langue", +DlgDocCharSet : "Encodage de caractère", +DlgDocCharSetCE : "Europe Centrale", +DlgDocCharSetCT : "Chinois Traditionnel (Big5)", +DlgDocCharSetCR : "Cyrillique", +DlgDocCharSetGR : "Grecque", +DlgDocCharSetJP : "Japonais", +DlgDocCharSetKR : "Coréen", +DlgDocCharSetTR : "Turcque", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Occidental", +DlgDocCharSetOther : "Autre encodage de caractère", + +DlgDocDocType : "Type de document", +DlgDocDocTypeOther : "Autre type de document", +DlgDocIncXHTML : "Inclure les déclarations XHTML", +DlgDocBgColor : "Couleur de fond", +DlgDocBgImage : "Image de fond", +DlgDocBgNoScroll : "Image fixe sans défilement", +DlgDocCText : "Texte", +DlgDocCLink : "Lien", +DlgDocCVisited : "Lien visité", +DlgDocCActive : "Lien activé", +DlgDocMargins : "Marges", +DlgDocMaTop : "Haut", +DlgDocMaLeft : "Gauche", +DlgDocMaRight : "Droite", +DlgDocMaBottom : "Bas", +DlgDocMeIndex : "Mots-clés (séparés par des virgules)", +DlgDocMeDescr : "Description", +DlgDocMeAuthor : "Auteur", +DlgDocMeCopy : "Copyright", +DlgDocPreview : "Prévisualisation", + +// Templates Dialog +Templates : "Modèles", +DlgTemplatesTitle : "Modèles de contenu", +DlgTemplatesSelMsg : "Sélectionner le modèle à ouvrir dans l'éditeur
    (le contenu actuel sera remplacé):", +DlgTemplatesLoading : "Chargement de la liste des modèles. Veuillez patienter...", +DlgTemplatesNoTpl : "(Aucun modèle disponible)", +DlgTemplatesReplace : "Remplacer tout le contenu actuel", + +// About Dialog +DlgAboutAboutTab : "Á propos de", +DlgAboutBrowserInfoTab : "Navigateur", +DlgAboutLicenseTab : "License", +DlgAboutVersion : "Version", +DlgAboutInfo : "Pour plus d'informations, visiter" +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/fr.js b/phpgwapi/js/fckeditor/editor/lang/fr.js index 6d46fa0fc0..10d8a9e1c3 100644 --- a/phpgwapi/js/fckeditor/editor/lang/fr.js +++ b/phpgwapi/js/fckeditor/editor/lang/fr.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Lien", InsertLink : "Insérer/modifier le lien", RemoveLink : "Supprimer le lien", Anchor : "Insérer/modifier l'ancre", +AnchorDelete : "Supprimer l'ancre", InsertImageLbl : "Image", InsertImage : "Insérer/modifier l'image", InsertFlashLbl : "Animation Flash", @@ -70,6 +71,7 @@ RightJustify : "Aligné à Droite", BlockJustify : "Texte justifié", DecreaseIndent : "Diminuer le retrait", IncreaseIndent : "Augmenter le retrait", +Blockquote : "Citation", Undo : "Annuler", Redo : "Refaire", NumberedListLbl : "Liste numérotée", @@ -103,20 +105,27 @@ SelectionField : "Liste/menu", ImageButton : "Bouton image", FitWindow : "Edition pleine page", +ShowBlocks : "Afficher les blocs", // Context Menu EditLink : "Modifier le lien", CellCM : "Cellule", RowCM : "Ligne", ColumnCM : "Colonne", -InsertRow : "Insérer une ligne", +InsertRowAfter : "Insérer une ligne après", +InsertRowBefore : "Insérer une ligne avant", DeleteRows : "Supprimer des lignes", -InsertColumn : "Insérer une colonne", +InsertColumnAfter : "Insérer une colonne après", +InsertColumnBefore : "Insérer une colonne avant", DeleteColumns : "Supprimer des colonnes", -InsertCell : "Insérer une cellule", +InsertCellAfter : "Insérer une cellule après", +InsertCellBefore : "Insérer une cellule avant", DeleteCells : "Supprimer des cellules", MergeCells : "Fusionner les cellules", -SplitCell : "Scinder les cellules", +MergeRight : "Fusionner à droite", +MergeDown : "Fusionner en bas", +HorizontalSplitCell : "Scinder la cellule horizontalement", +VerticalSplitCell : "Scinder la cellule verticalement", TableDelete : "Supprimer le tableau", CellProperties : "Propriétés de cellule", TableProperties : "Propriétés du tableau", @@ -134,7 +143,7 @@ SelectionFieldProp : "Propriétés de la liste/du menu", TextareaProp : "Propriétés de la zone de texte", FormProp : "Propriétés du formulaire", -FontFormats : "Normal;Formaté;Adresse;En-tête 1;En-tête 2;En-tête 3;En-tête 4;En-tête 5;En-tête 6;Normal (DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "Normal;Formaté;Adresse;En-tête 1;En-tête 2;En-tête 3;En-tête 4;En-tête 5;En-tête 6;Normal (DIV)", // Alerts and Messages ProcessingXHTML : "Calcul XHTML. Veuillez patienter...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Sélectionner une ancre", DlgLnkAnchorByName : "Par nom", DlgLnkAnchorById : "Par id", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Pas d'ancre disponible dans le document)", DlgLnkEMail : "Adresse E-Mail", DlgLnkEMailSubject : "Sujet du message", DlgLnkEMailBody : "Corps du message", @@ -237,7 +246,7 @@ DlgLnkUpload : "Télécharger", DlgLnkBtnUpload : "Envoyer sur le serveur", DlgLnkTarget : "Destination", -DlgLnkTargetFrame : "", +DlgLnkTargetFrame : "", DlgLnkTargetPopup : "", DlgLnkTargetBlank : "Nouvelle fenêtre (_blank)", DlgLnkTargetParent : "Fenêtre mère (_parent)", @@ -322,6 +331,9 @@ DlgCellBackColor : "Fond", DlgCellBorderColor : "Bordure", DlgCellBtnSelect : "Choisir...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Chercher et Remplacer", + // Find Dialog DlgFindTitle : "Chercher", DlgFindFindBtn : "Chercher", @@ -344,10 +356,9 @@ PasteAsText : "Coller comme texte", PasteFromWord : "Coller à partir de Word", DlgPasteMsg2 : "Veuillez coller dans la zone ci-dessous en utilisant le clavier (Ctrl+V) et cliquez sur OK.", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteSec : "A cause des paramètres de sécurité de votre navigateur, l'éditeur ne peut accéder au presse-papier directement. Vous devez coller à nouveau le contenu dans cette fenêtre.", DlgPasteIgnoreFont : "Ignorer les polices de caractères", DlgPasteRemoveStyles : "Supprimer les styles", -DlgPasteCleanBox : "Effacer le contenu", // Color Picker ColorAutomatic : "Automatique", @@ -459,7 +470,7 @@ DlgDocCharSetCE : "Europe Centrale", DlgDocCharSetCT : "Chinois Traditionnel (Big5)", DlgDocCharSetCR : "Cyrillique", DlgDocCharSetGR : "Grec", -DlgDocCharSetJP : "Japanais", +DlgDocCharSetJP : "Japonais", DlgDocCharSetKR : "Coréen", DlgDocCharSetTR : "Turc", DlgDocCharSetUN : "Unicode (UTF-8)", @@ -498,7 +509,7 @@ DlgTemplatesReplace : "Remplacer tout le contenu", // About Dialog DlgAboutAboutTab : "A propos de", DlgAboutBrowserInfoTab : "Navigateur", -DlgAboutLicenseTab : "License", -DlgAboutVersion : "version", +DlgAboutLicenseTab : "Licence", +DlgAboutVersion : "Version", DlgAboutInfo : "Pour plus d'informations, aller à" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/gl.js b/phpgwapi/js/fckeditor/editor/lang/gl.js index 238d108a01..3172ca4433 100644 --- a/phpgwapi/js/fckeditor/editor/lang/gl.js +++ b/phpgwapi/js/fckeditor/editor/lang/gl.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Ligazón", InsertLink : "Inserir/Editar Ligazón", RemoveLink : "Eliminar Ligazón", Anchor : "Inserir/Editar Referencia", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "Imaxe", InsertImage : "Inserir/Editar Imaxe", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "Aliñar á Dereita", BlockJustify : "Xustificado", DecreaseIndent : "Disminuir Sangría", IncreaseIndent : "Aumentar Sangría", +Blockquote : "Blockquote", //MISSING Undo : "Desfacer", Redo : "Refacer", NumberedListLbl : "Lista Numerada", @@ -103,20 +105,27 @@ SelectionField : "Campo de Selección", ImageButton : "Botón de Imaxe", FitWindow : "Maximizar o tamaño do editor", +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "Editar Ligazón", CellCM : "Cela", RowCM : "Fila", ColumnCM : "Columna", -InsertRow : "Inserir Fila", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "Borrar Filas", -InsertColumn : "Inserir Columna", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "Borrar Columnas", -InsertCell : "Inserir Cela", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "Borrar Cela", MergeCells : "Unir Celas", -SplitCell : "Partir Celas", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "Borrar Táboa", CellProperties : "Propriedades da Cela", TableProperties : "Propriedades da Táboa", @@ -134,7 +143,7 @@ SelectionFieldProp : "Propriedades do Campo de Selección", TextareaProp : "Propriedades da Área de Texto", FormProp : "Propriedades do Formulario", -FontFormats : "Normal;Formateado;Enderezo;Enacabezado 1;Encabezado 2;Encabezado 3;Encabezado 4;Encabezado 5;Encabezado 6;Paragraph (DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "Normal;Formateado;Enderezo;Enacabezado 1;Encabezado 2;Encabezado 3;Encabezado 4;Encabezado 5;Encabezado 6;Paragraph (DIV)", // Alerts and Messages ProcessingXHTML : "Procesando XHTML. Por facor, agarde...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Seleccionar unha Referencia", DlgLnkAnchorByName : "Por Nome de Referencia", DlgLnkAnchorById : "Por Element Id", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Non hai referencias disponibles no documento)", DlgLnkEMail : "Enderezo de E-Mail", DlgLnkEMailSubject : "Asunto do Mensaxe", DlgLnkEMailBody : "Corpo do Mensaxe", @@ -322,6 +331,9 @@ DlgCellBackColor : "Color de Fondo", DlgCellBorderColor : "Color de Borde", DlgCellBtnSelect : "Seleccionar...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "Procurar", DlgFindFindBtn : "Procurar", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Por favor, pegue dentro do seguinte cadro usando o teclado (", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(אין עוגנים זמינים בדף)", DlgLnkEMail : "כתובת הדוא''ל", DlgLnkEMailSubject : "נושא ההודעה", DlgLnkEMailBody : "גוף ההודעה", @@ -322,6 +331,9 @@ DlgCellBackColor : "צבע רקע", DlgCellBorderColor : "צבע מסגרת", DlgCellBtnSelect : "בחירה...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "חפש והחלף", + // Find Dialog DlgFindTitle : "חיפוש", DlgFindFindBtn : "חיפוש", @@ -344,10 +356,9 @@ PasteAsText : "הדבקה כטקסט פשוט", PasteFromWord : "הדבקה מ-וורד", DlgPasteMsg2 : "אנא הדבק בתוך הקופסה באמצעות (Ctrl+V) ולחץ על אישור.", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteSec : "עקב הגדרות אבטחה בדפדפן, לא ניתן לגשת אל לוח הגזירים (clipboard) בצורה ישירה.אנא בצע הדבק שוב בחלון זה.", DlgPasteIgnoreFont : "התעלם מהגדרות סוג פונט", DlgPasteRemoveStyles : "הסר הגדרות סגנון", -DlgPasteCleanBox : "ניקוי קופסה", // Color Picker ColorAutomatic : "אוטומטי", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "גירסת דפדפן", DlgAboutLicenseTab : "רשיון", DlgAboutVersion : "גירסא", DlgAboutInfo : "מידע נוסף ניתן למצוא כאן:" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/hi.js b/phpgwapi/js/fckeditor/editor/lang/hi.js index fdc5e39e57..9661279684 100644 --- a/phpgwapi/js/fckeditor/editor/lang/hi.js +++ b/phpgwapi/js/fckeditor/editor/lang/hi.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "लिंक", InsertLink : "लिंक इन्सर्ट/संपादन", RemoveLink : "लिंक हटायें", Anchor : "ऐंकर इन्सर्ट/संपादन", +AnchorDelete : "ऐंकर हटायें", InsertImageLbl : "तस्वीर", InsertImage : "तस्वीर इन्सर्ट/संपादन", InsertFlashLbl : "फ़्लैश", @@ -70,6 +71,7 @@ RightJustify : "दायीं तरफ", BlockJustify : "ब्लॉक जस्टीफ़ाई", DecreaseIndent : "इन्डॅन्ट कम करें", IncreaseIndent : "इन्डॅन्ट बढ़ायें", +Blockquote : "ब्लॉक-कोट", Undo : "अन्डू", Redo : "रीडू", NumberedListLbl : "अंकीय सूची", @@ -103,22 +105,29 @@ SelectionField : "चुनाव फ़ील्ड", ImageButton : "तस्वीर बटन", FitWindow : "एडिटर साइज़ को चरम सीमा तक बढ़ायें", +ShowBlocks : "ब्लॉक दिखायें", // Context Menu EditLink : "लिंक संपादन", CellCM : "खाना", RowCM : "पंक्ति", ColumnCM : "कालम", -InsertRow : "पंक्ति इन्सर्ट करें", +InsertRowAfter : "बाद में पंक्ति डालें", +InsertRowBefore : "पहले पंक्ति डालें", DeleteRows : "पंक्तियाँ डिलीट करें", -InsertColumn : "कॉलम इन्सर्ट करें", -DeleteColumns : "कॉलम डिलीट करें", -InsertCell : "सॅल इन्सर्ट करें", -DeleteCells : "सॅल डिलीट करें", -MergeCells : "सॅल मिलायें", -SplitCell : "सॅल अलग करें", +InsertColumnAfter : "बाद में कालम डालें", +InsertColumnBefore : "पहले कालम डालें", +DeleteColumns : "कालम डिलीट करें", +InsertCellAfter : "बाद में सैल डालें", +InsertCellBefore : "पहले सैल डालें", +DeleteCells : "सैल डिलीट करें", +MergeCells : "सैल मिलायें", +MergeRight : "बाँया विलय", +MergeDown : "नीचे विलय करें", +HorizontalSplitCell : "सैल को क्षैतिज स्थिति में विभाजित करें", +VerticalSplitCell : "सैल को लम्बाकार में विभाजित करें", TableDelete : "टेबल डिलीट करें", -CellProperties : "सॅल प्रॉपर्टीज़", +CellProperties : "सैल प्रॉपर्टीज़", TableProperties : "टेबल प्रॉपर्टीज़", ImageProperties : "तस्वीर प्रॉपर्टीज़", FlashProperties : "फ़्लैश प्रॉपर्टीज़", @@ -134,7 +143,7 @@ SelectionFieldProp : "चुनाव फ़ील्ड प्रॉपर्ट TextareaProp : "टेक्स्त एरिया प्रॉपर्टीज़", FormProp : "फ़ॉर्म प्रॉपर्टीज़", -FontFormats : "साधारण;फ़ॉर्मैटॅड;पता;शीर्षक 1;शीर्षक 2;शीर्षक 3;शीर्षक 4;शीर्षक 5;शीर्षक 6;शीर्षक (DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "साधारण;फ़ॉर्मैटॅड;पता;शीर्षक 1;शीर्षक 2;शीर्षक 3;शीर्षक 4;शीर्षक 5;शीर्षक 6;शीर्षक (DIV)", // Alerts and Messages ProcessingXHTML : "XHTML प्रोसॅस हो रहा है। ज़रा ठहरें...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "ऐंकर चुनें", DlgLnkAnchorByName : "ऐंकर नाम से", DlgLnkAnchorById : "ऍलीमॅन्ट Id से", -DlgLnkNoAnchors : "<डॉक्यूमॅन्ट में ऐंकर्स की संख्या>", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(डॉक्यूमॅन्ट में ऐंकर्स की संख्या)", DlgLnkEMail : "ई-मेल पता", DlgLnkEMailSubject : "संदेश विषय", DlgLnkEMailBody : "संदेश", @@ -279,7 +288,7 @@ DlgSpecialCharTitle : "विशेष करॅक्टर चुनें", // Table Dialog DlgTableTitle : "टेबल प्रॉपर्टीज़", DlgTableRows : "पंक्तियाँ", -DlgTableColumns : "कॉलम", +DlgTableColumns : "कालम", DlgTableBorder : "बॉर्डर साइज़", DlgTableAlign : "ऍलाइन्मॅन्ट", DlgTableAlignNotSet : "<सॅट नहीं>", @@ -287,18 +296,18 @@ DlgTableAlignLeft : "दायें", DlgTableAlignCenter : "बीच में", DlgTableAlignRight : "बायें", DlgTableWidth : "चौड़ाई", -DlgTableWidthPx : "पिक्सॅल", +DlgTableWidthPx : "पिक्सैल", DlgTableWidthPc : "प्रतिशत", DlgTableHeight : "ऊँचाई", -DlgTableCellSpace : "सॅल अंतर", -DlgTableCellPad : "सॅल पैडिंग", +DlgTableCellSpace : "सैल अंतर", +DlgTableCellPad : "सैल पैडिंग", DlgTableCaption : "शीर्षक", DlgTableSummary : "सारांश", // Table Cell Dialog -DlgCellTitle : "सॅल प्रॉपर्टीज़", +DlgCellTitle : "सैल प्रॉपर्टीज़", DlgCellWidth : "चौड़ाई", -DlgCellWidthPx : "पिक्सॅल", +DlgCellWidthPx : "पिक्सैल", DlgCellWidthPc : "प्रतिशत", DlgCellHeight : "ऊँचाई", DlgCellWordWrap : "वर्ड रैप", @@ -317,11 +326,14 @@ DlgCellVerAlignMiddle : "मध्य", DlgCellVerAlignBottom : "नीचे", DlgCellVerAlignBaseline : "मूलरेखा", DlgCellRowSpan : "पंक्ति स्पैन", -DlgCellCollSpan : "कॉलम स्पैन", +DlgCellCollSpan : "कालम स्पैन", DlgCellBackColor : "बैक्ग्राउन्ड रंग", DlgCellBorderColor : "बॉर्डर का रंग", DlgCellBtnSelect : "चुनें...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "खोजें और बदलें", + // Find Dialog DlgFindTitle : "खोजें", DlgFindFindBtn : "खोजें", @@ -344,13 +356,12 @@ PasteAsText : "पेस्ट (सादा टॅक्स्ट)", PasteFromWord : "पेस्ट (वर्ड से)", DlgPasteMsg2 : "Ctrl+V का प्रयोग करके पेस्ट करें और ठीक है करें.", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteSec : "आपके ब्राउज़र की सुरक्षा आपके ब्राउज़र की सुरKश सैटिंग के कारण, एडिटर आपके क्लिपबोर्ड डेटा को नहीं पा सकता है. आपको उसे इस विन्डो में दोबारा पेस्ट करना होगा.", DlgPasteIgnoreFont : "फ़ॉन्ट परिभाषा निकालें", DlgPasteRemoveStyles : "स्टाइल परिभाषा निकालें", -DlgPasteCleanBox : "बॉक्स साफ़ करें", // Color Picker -ColorAutomatic : "ऑटोमैटिक", +ColorAutomatic : "स्वचालित", ColorMoreColors : "और रंग...", // Document Properties @@ -392,7 +403,7 @@ DlgCheckboxSelected : "सॅलॅक्टॅड", // Form Dialog DlgFormName : "नाम", -DlgFormAction : "ऍक्शन", +DlgFormAction : "क्रिया", DlgFormMethod : "तरीका", // Select Field Dialog @@ -413,7 +424,7 @@ DlgSelectBtnDelete : "डिलीट", // Textarea Dialog DlgTextareaName : "नाम", -DlgTextareaCols : "कॉलम", +DlgTextareaCols : "कालम", DlgTextareaRows : "पंक्तियां", // Text Field Dialog @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "ब्राउज़र के बारे में", DlgAboutLicenseTab : "लाइसैन्स", DlgAboutVersion : "वर्ज़न", DlgAboutInfo : "अधिक जानकारी के लिये यहाँ जायें:" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/hr.js b/phpgwapi/js/fckeditor/editor/lang/hr.js index f088b1063c..ac9be8f05c 100644 --- a/phpgwapi/js/fckeditor/editor/lang/hr.js +++ b/phpgwapi/js/fckeditor/editor/lang/hr.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Link", InsertLink : "Ubaci/promijeni link", RemoveLink : "Ukloni link", Anchor : "Ubaci/promijeni sidro", +AnchorDelete : "Ukloni sidro", InsertImageLbl : "Slika", InsertImage : "Ubaci/promijeni sliku", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "Desno poravnanje", BlockJustify : "Blok poravnanje", DecreaseIndent : "Pomakni ulijevo", IncreaseIndent : "Pomakni udesno", +Blockquote : "Blockquote", Undo : "Poništi", Redo : "Ponovi", NumberedListLbl : "Brojčana lista", @@ -103,20 +105,27 @@ SelectionField : "Selection Field", ImageButton : "Image Button", FitWindow : "Povećaj veličinu editora", +ShowBlocks : "Prikaži blokove", // Context Menu EditLink : "Promijeni link", CellCM : "Ćelija", RowCM : "Red", ColumnCM : "Kolona", -InsertRow : "Ubaci red", +InsertRowAfter : "Ubaci red poslije", +InsertRowBefore : "Ubaci red prije", DeleteRows : "Izbriši redove", -InsertColumn : "Ubaci kolonu", +InsertColumnAfter : "Ubaci kolonu poslije", +InsertColumnBefore : "Ubaci kolonu prije", DeleteColumns : "Izbriši kolone", -InsertCell : "Ubaci ćelije", +InsertCellAfter : "Ubaci ćeliju poslije", +InsertCellBefore : "Ubaci ćeliju prije", DeleteCells : "Izbriši ćelije", MergeCells : "Spoji ćelije", -SplitCell : "Razdvoji ćelije", +MergeRight : "Spoji desno", +MergeDown : "Spoji dolje", +HorizontalSplitCell : "Podijeli ćeliju vodoravno", +VerticalSplitCell : "Podijeli ćeliju okomito", TableDelete : "Izbriši tablicu", CellProperties : "Svojstva ćelije", TableProperties : "Svojstva tablice", @@ -134,7 +143,7 @@ SelectionFieldProp : "Selection svojstva", TextareaProp : "Textarea svojstva", FormProp : "Form svojstva", -FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)", // Alerts and Messages ProcessingXHTML : "Obrađujem XHTML. Molimo pričekajte...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Odaberi sidro", DlgLnkAnchorByName : "Po nazivu sidra", DlgLnkAnchorById : "Po Id elementa", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Nema dostupnih sidra)", DlgLnkEMail : "E-Mail adresa", DlgLnkEMailSubject : "Naslov", DlgLnkEMailBody : "Sadržaj poruke", @@ -322,6 +331,9 @@ DlgCellBackColor : "Boja pozadine", DlgCellBorderColor : "Boja okvira", DlgCellBtnSelect : "Odaberi...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Pronađi i zamijeni", + // Find Dialog DlgFindTitle : "Pronađi", DlgFindFindBtn : "Pronađi", @@ -344,10 +356,9 @@ PasteAsText : "Zalijepi kao čisti tekst", PasteFromWord : "Zalijepi iz Worda", DlgPasteMsg2 : "Molimo zaljepite unutar doljnjeg okvira koristeći tipkovnicu (Ctrl+V) i kliknite OK.", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteSec : "Zbog sigurnosnih postavki Vašeg pretraživača, editor nema direktan pristup Vašem međuspremniku. Potrebno je ponovno zalijepiti tekst u ovaj prozor.", DlgPasteIgnoreFont : "Zanemari definiciju vrste fonta", DlgPasteRemoveStyles : "Ukloni definicije stilova", -DlgPasteCleanBox : "Očisti okvir", // Color Picker ColorAutomatic : "Automatski", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "Podaci o pretraživaču", DlgAboutLicenseTab : "Licenca", DlgAboutVersion : "inačica", DlgAboutInfo : "Za više informacija posjetite" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/hu.js b/phpgwapi/js/fckeditor/editor/lang/hu.js index 73b912c82a..83deb85401 100644 --- a/phpgwapi/js/fckeditor/editor/lang/hu.js +++ b/phpgwapi/js/fckeditor/editor/lang/hu.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Hivatkozás", InsertLink : "Hivatkozás beillesztése/módosítása", RemoveLink : "Hivatkozás törlése", Anchor : "Horgony beillesztése/szerkesztése", +AnchorDelete : "Horgony eltávolítása", InsertImageLbl : "Kép", InsertImage : "Kép beillesztése/módosítása", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "Jobbra", BlockJustify : "Sorkizárt", DecreaseIndent : "Behúzás csökkentése", IncreaseIndent : "Behúzás növelése", +Blockquote : "Idézet blokk", Undo : "Visszavonás", Redo : "Ismétlés", NumberedListLbl : "Számozás", @@ -103,20 +105,27 @@ SelectionField : "Legördülő lista", ImageButton : "Képgomb", FitWindow : "Maximalizálás", +ShowBlocks : "Blokkok megjelenítése", // Context Menu EditLink : "Hivatkozás módosítása", CellCM : "Cella", RowCM : "Sor", ColumnCM : "Oszlop", -InsertRow : "Sor beszúrása", +InsertRowAfter : "Sor beillesztése az aktuális sor mögé", +InsertRowBefore : "Sor beillesztése az aktuális sor elé", DeleteRows : "Sorok törlése", -InsertColumn : "Oszlop beszúrása", +InsertColumnAfter : "Oszlop beillesztése az aktuális oszlop mögé", +InsertColumnBefore : "Oszlop beillesztése az aktuális oszlop elé", DeleteColumns : "Oszlopok törlése", -InsertCell : "Cella beszúrása", +InsertCellAfter : "Cella beillesztése az aktuális cella mögé", +InsertCellBefore : "Cella beillesztése az aktuális cella elé", DeleteCells : "Cellák törlése", MergeCells : "Cellák egyesítése", -SplitCell : "Cella szétválasztása", +MergeRight : "Cellák egyesítése jobbra", +MergeDown : "Cellák egyesítése lefelé", +HorizontalSplitCell : "Cellák szétválasztása vízszintesen", +VerticalSplitCell : "Cellák szétválasztása függőlegesen", TableDelete : "Táblázat törlése", CellProperties : "Cella tulajdonságai", TableProperties : "Táblázat tulajdonságai", @@ -134,7 +143,7 @@ SelectionFieldProp : "Legördülő lista tulajdonságai", TextareaProp : "Szövegterület tulajdonságai", FormProp : "Űrlap tulajdonságai", -FontFormats : "Normál;Formázott;Címsor;Fejléc 1;Fejléc 2;Fejléc 3;Fejléc 4;Fejléc 5;Fejléc 6;Bekezdés (DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "Normál;Formázott;Címsor;Fejléc 1;Fejléc 2;Fejléc 3;Fejléc 4;Fejléc 5;Fejléc 6;Bekezdés (DIV)", // Alerts and Messages ProcessingXHTML : "XHTML feldolgozása. Kérem várjon...", @@ -229,7 +238,7 @@ DlgLnkURL : "Webcím", DlgLnkAnchorSel : "Horgony választása", DlgLnkAnchorByName : "Horgony név szerint", DlgLnkAnchorById : "Azonosító szerint", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Nincs horgony a dokumentumban)", DlgLnkEMail : "E-Mail cím", DlgLnkEMailSubject : "Üzenet tárgya", DlgLnkEMailBody : "Üzenet", @@ -322,6 +331,9 @@ DlgCellBackColor : "Háttérszín", DlgCellBorderColor : "Szegélyszín", DlgCellBtnSelect : "Kiválasztás...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Keresés és csere", + // Find Dialog DlgFindTitle : "Keresés", DlgFindFindBtn : "Keresés", @@ -344,10 +356,9 @@ PasteAsText : "Beillesztés formázatlan szövegként", PasteFromWord : "Beillesztés Word-ből", DlgPasteMsg2 : "Másolja be az alábbi mezőbe a Ctrl+V billentyűk lenyomásával, majd nyomjon Rendben-t.", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteSec : "A böngésző biztonsági beállításai miatt a szerkesztő nem képes hozzáférni a vágólap adataihoz. Illeszd be újra ebben az ablakban.", DlgPasteIgnoreFont : "Betű formázások megszüntetése", DlgPasteRemoveStyles : "Stílusok eltávolítása", -DlgPasteCleanBox : "Törlés", // Color Picker ColorAutomatic : "Automatikus", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "Böngésző információ", DlgAboutLicenseTab : "Licensz", DlgAboutVersion : "verzió", DlgAboutInfo : "További információkért látogasson el ide:" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/it.js b/phpgwapi/js/fckeditor/editor/lang/it.js index a3dee1ba56..5f54c39a58 100644 --- a/phpgwapi/js/fckeditor/editor/lang/it.js +++ b/phpgwapi/js/fckeditor/editor/lang/it.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Collegamento", InsertLink : "Inserisci/Modifica collegamento", RemoveLink : "Elimina collegamento", Anchor : "Inserisci/Modifica Ancora", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "Immagine", InsertImage : "Inserisci/Modifica immagine", InsertFlashLbl : "Oggetto Flash", @@ -70,6 +71,7 @@ RightJustify : "Allinea a destra", BlockJustify : "Giustifica", DecreaseIndent : "Riduci rientro", IncreaseIndent : "Aumenta rientro", +Blockquote : "Blockquote", //MISSING Undo : "Annulla", Redo : "Ripristina", NumberedListLbl : "Elenco numerato", @@ -103,20 +105,27 @@ SelectionField : "Menu di selezione", ImageButton : "Bottone immagine", FitWindow : "Massimizza l'area dell'editor", +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "Modifica collegamento", CellCM : "Cella", RowCM : "Riga", ColumnCM : "Colonna", -InsertRow : "Inserisci riga", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "Elimina righe", -InsertColumn : "Inserisci colonna", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "Elimina colonne", -InsertCell : "Inserisci cella", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "Elimina celle", MergeCells : "Unisce celle", -SplitCell : "Dividi celle", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "Cancella Tabella", CellProperties : "Proprietà cella", TableProperties : "Proprietà tabella", @@ -134,7 +143,7 @@ SelectionFieldProp : "Proprietà menu di selezione", TextareaProp : "Proprietà area di testo", FormProp : "Proprietà modulo", -FontFormats : "Normale;Formattato;Indirizzo;Titolo 1;Titolo 2;Titolo 3;Titolo 4;Titolo 5;Titolo 6;Paragrafo (DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "Normale;Formattato;Indirizzo;Titolo 1;Titolo 2;Titolo 3;Titolo 4;Titolo 5;Titolo 6;Paragrafo (DIV)", // Alerts and Messages ProcessingXHTML : "Elaborazione XHTML in corso. Attendere prego...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Scegli Ancora", DlgLnkAnchorByName : "Per Nome", DlgLnkAnchorById : "Per id elemento", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Nessuna ancora disponibile nel documento)", DlgLnkEMail : "Indirizzo E-Mail", DlgLnkEMailSubject : "Oggetto del messaggio", DlgLnkEMailBody : "Corpo del messaggio", @@ -322,6 +331,9 @@ DlgCellBackColor : "Colore sfondo", DlgCellBorderColor : "Colore bordo", DlgCellBtnSelect : "Scegli...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "Trova", DlgFindFindBtn : "Trova", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Incolla il testo all'interno dell'area sottostante usando la sco DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING DlgPasteIgnoreFont : "Ignora le definizioni di Font", DlgPasteRemoveStyles : "Rimuovi le definizioni di Stile", -DlgPasteCleanBox : "Svuota area di testo", // Color Picker ColorAutomatic : "Automatico", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "Informazioni Browser", DlgAboutLicenseTab : "Licenza", DlgAboutVersion : "versione", DlgAboutInfo : "Per maggiori informazioni visitare" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/ja.js b/phpgwapi/js/fckeditor/editor/lang/ja.js index c567d21872..b3291bd410 100644 --- a/phpgwapi/js/fckeditor/editor/lang/ja.js +++ b/phpgwapi/js/fckeditor/editor/lang/ja.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "リンク", InsertLink : "リンク挿入/編集", RemoveLink : "リンク削除", Anchor : "アンカー挿入/編集", +AnchorDelete : "アンカー削除", InsertImageLbl : "イメージ", InsertImage : "イメージ挿入/編集", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "右揃え", BlockJustify : "両端揃え", DecreaseIndent : "インデント解除", IncreaseIndent : "インデント", +Blockquote : "ブロック引用", Undo : "元に戻す", Redo : "やり直し", NumberedListLbl : "段落番号", @@ -103,20 +105,27 @@ SelectionField : "選択フィールド", ImageButton : "画像ボタン", FitWindow : "エディタサイズを最大にします", +ShowBlocks : "ブロック表示", // Context Menu EditLink : "リンク編集", CellCM : "セル", RowCM : "行", ColumnCM : "カラム", -InsertRow : "行挿入", +InsertRowAfter : "列の後に挿入", +InsertRowBefore : "列の前に挿入", DeleteRows : "行削除", -InsertColumn : "列挿入", +InsertColumnAfter : "カラムの後に挿入", +InsertColumnBefore : "カラムの前に挿入", DeleteColumns : "列削除", -InsertCell : "セル挿入", +InsertCellAfter : "セルの後に挿入", +InsertCellBefore : "セルの前に挿入", DeleteCells : "セル削除", MergeCells : "セル結合", -SplitCell : "セル分割", +MergeRight : "右に結合", +MergeDown : "下に結合", +HorizontalSplitCell : "セルを水平方向分割", +VerticalSplitCell : "セルを垂直方向に分割", TableDelete : "テーブル削除", CellProperties : "セル プロパティ", TableProperties : "テーブル プロパティ", @@ -134,7 +143,7 @@ SelectionFieldProp : "選択フィールド プロパティ", TextareaProp : "テキストエリア プロパティ", FormProp : "フォーム プロパティ", -FontFormats : "標準;書式付き;アドレス;見出し 1;見出し 2;見出し 3;見出し 4;見出し 5;見出し 6;標準 (DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "標準;書式付き;アドレス;見出し 1;見出し 2;見出し 3;見出し 4;見出し 5;見出し 6;標準 (DIV)", // Alerts and Messages ProcessingXHTML : "XHTML処理中. しばらくお待ちください...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "アンカーを選択", DlgLnkAnchorByName : "アンカー名", DlgLnkAnchorById : "エレメントID", -DlgLnkNoAnchors : "<ドキュメントにおいて利用可能なアンカーはありません。>", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(ドキュメントにおいて利用可能なアンカーはありません。)", DlgLnkEMail : "E-Mail アドレス", DlgLnkEMailSubject : "件名", DlgLnkEMailBody : "本文", @@ -322,6 +331,9 @@ DlgCellBackColor : "背景色", DlgCellBorderColor : "ボーダーカラー", DlgCellBtnSelect : "選択...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "検索して置換", + // Find Dialog DlgFindTitle : "検索", DlgFindFindBtn : "検索", @@ -344,10 +356,9 @@ PasteAsText : "プレーンテキスト貼り付け", PasteFromWord : "ワード文章から貼り付け", DlgPasteMsg2 : "キーボード(Ctrl+V)を使用して、次の入力エリア内で貼って、OKを押してください。", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteSec : "ブラウザのセキュリティ設定により、エディタはクリップボード・データに直接アクセスすることができません。このウィンドウは貼り付け操作を行う度に表示されます。", DlgPasteIgnoreFont : "FontタグのFace属性を無視します。", DlgPasteRemoveStyles : "スタイル定義を削除します。", -DlgPasteCleanBox : "入力エリアクリア", // Color Picker ColorAutomatic : "自動", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "ブラウザ情報", DlgAboutLicenseTab : "ライセンス", DlgAboutVersion : "バージョン", DlgAboutInfo : "より詳しい情報はこちらで" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/km.js b/phpgwapi/js/fckeditor/editor/lang/km.js index e90291f714..d72806fa95 100644 --- a/phpgwapi/js/fckeditor/editor/lang/km.js +++ b/phpgwapi/js/fckeditor/editor/lang/km.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "ឈ្នាប់", InsertLink : "បន្ថែម/កែប្រែ ឈ្នាប់", RemoveLink : "លប់ឈ្នាប់", Anchor : "បន្ថែម/កែប្រែ យុថ្កា", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "រូបភាព", InsertImage : "បន្ថែម/កែប្រែ រូបភាព", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "តំរឹមស្តាំ", BlockJustify : "តំរឹមសងខាង", DecreaseIndent : "បន្ថយការចូលបន្ទាត់", IncreaseIndent : "បន្ថែមការចូលបន្ទាត់", +Blockquote : "Blockquote", //MISSING Undo : "សារឡើងវិញ", Redo : "ធ្វើឡើងវិញ", NumberedListLbl : "បញ្ជីជាអក្សរ", @@ -103,20 +105,27 @@ SelectionField : "ជួរជ្រើសរើស", ImageButton : "ប៉ូតុនរូបភាព", FitWindow : "Maximize the editor size", //MISSING +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "កែប្រែឈ្នាប់", CellCM : "Cell", //MISSING RowCM : "Row", //MISSING ColumnCM : "Column", //MISSING -InsertRow : "បន្ថែមជួរផ្តេក", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "លប់ជួរផ្តេក", -InsertColumn : "បន្ថែមជួរឈរ", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "លប់ជួរឈរ", -InsertCell : "បន្ថែម សែល", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "លប់សែល", MergeCells : "បញ្ជូលសែល", -SplitCell : "ផ្តាច់សែល", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "លប់តារាង", CellProperties : "ការកំណត់សែល", TableProperties : "ការកំណត់តារាង", @@ -134,7 +143,7 @@ SelectionFieldProp : "ការកំណត់ជួរជ្រើសរើស" TextareaProp : "ការកំណត់កន្លែងសរសេរអត្ថបទ", FormProp : "ការកំណត់បែបបទ", -FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)", // Alerts and Messages ProcessingXHTML : "កំពុងដំណើរការ XHTML ។ សូមរងចាំ...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "ជ្រើសរើសយុថ្កា", DlgLnkAnchorByName : "តាមឈ្មោះរបស់យុថ្កា", DlgLnkAnchorById : "តាម Id", -DlgLnkNoAnchors : "<ពុំមានយុថ្កានៅក្នុងឯកសារនេះទេ>", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(No anchors available in the document)", //MISSING DlgLnkEMail : "អ៊ីមែល", DlgLnkEMailSubject : "ចំណងជើងអត្ថបទ", DlgLnkEMailBody : "អត្ថបទ", @@ -322,6 +331,9 @@ DlgCellBackColor : "ពណ៌ផ្នែកខាងក្រោម", DlgCellBorderColor : "ពណ៌ស៊ុម", DlgCellBtnSelect : "ជ្រើសរើស...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "ស្វែងរក", DlgFindFindBtn : "ស្វែងរក", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "សូមចំលងអត្ថបទទៅដាក់ក្ DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING DlgPasteIgnoreFont : "មិនគិតអំពីប្រភេទពុម្ភអក្សរ", DlgPasteRemoveStyles : "លប់ម៉ូត", -DlgPasteCleanBox : "លប់អត្ថបទចេញពីប្រអប់", // Color Picker ColorAutomatic : "ស្វ័យប្រវត្ត", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "ព៌តមានកម្មវិធីរុករ DlgAboutLicenseTab : "License", //MISSING DlgAboutVersion : "ជំនាន់", DlgAboutInfo : "សំរាប់ព៌តមានផ្សេងទៀត សូមទាក់ទង" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/ko.js b/phpgwapi/js/fckeditor/editor/lang/ko.js index 0a2efa6eb5..d37240f942 100644 --- a/phpgwapi/js/fckeditor/editor/lang/ko.js +++ b/phpgwapi/js/fckeditor/editor/lang/ko.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "링크", InsertLink : "링크 삽입/변경", RemoveLink : "링크 삭제", Anchor : "책갈피 삽입/변경", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "이미지", InsertImage : "이미지 삽입/변경", InsertFlashLbl : "플래쉬", @@ -70,6 +71,7 @@ RightJustify : "오른쪽 정렬", BlockJustify : "양쪽 맞춤", DecreaseIndent : "내어쓰기", IncreaseIndent : "들여쓰기", +Blockquote : "Blockquote", //MISSING Undo : "취소", Redo : "재실행", NumberedListLbl : "순서있는 목록", @@ -102,22 +104,29 @@ Button : "버튼", SelectionField : "펼침목록", ImageButton : "이미지버튼", -FitWindow : "Maximize the editor size", //MISSING +FitWindow : "에디터 최대화", +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "링크 수정", -CellCM : "Cell", //MISSING -RowCM : "Row", //MISSING -ColumnCM : "Column", //MISSING -InsertRow : "가로줄 삽입", +CellCM : "셀/칸(Cell)", +RowCM : "행(Row)", +ColumnCM : "열(Column)", +InsertRowAfter : "뒤에 행 삽입", +InsertRowBefore : "앞에 행 삽입", DeleteRows : "가로줄 삭제", -InsertColumn : "세로줄 삽입", +InsertColumnAfter : "뒤에 열 삽입", +InsertColumnBefore : "앞에 열 삽입", DeleteColumns : "세로줄 삭제", -InsertCell : "셀 삽입", +InsertCellAfter : "뒤에 셀/칸 삽입", +InsertCellBefore : "앞에 셀/칸 삽입", DeleteCells : "셀 삭제", MergeCells : "셀 합치기", -SplitCell : "셀 나누기", -TableDelete : "Delete Table", //MISSING +MergeRight : "오른쪽 뭉치기", +MergeDown : "왼쪽 뭉치기", +HorizontalSplitCell : "수평 나누기", +VerticalSplitCell : "수직 나누기", +TableDelete : "표 삭제", CellProperties : "셀 속성", TableProperties : "표 속성", ImageProperties : "이미지 속성", @@ -134,7 +143,7 @@ SelectionFieldProp : "펼침목록 속성", TextareaProp : "입력영역 속성", FormProp : "폼 속성", -FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6", //REVIEW : Check _getfontformat.html +FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6", // Alerts and Messages ProcessingXHTML : "XHTML 처리중. 잠시만 기다려주십시요.", @@ -145,9 +154,9 @@ UnknownToolbarItem : "알수없는 툴바입니다. : \"%1\"", UnknownCommand : "알수없는 기능입니다. : \"%1\"", NotImplemented : "기능이 실행되지 않았습니다.", UnknownToolbarSet : "툴바 설정이 없습니다. : \"%1\"", -NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", //MISSING -BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING -DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", //MISSING +NoActiveX : "브러우저의 보안 설정으로 인해 몇몇 기능의 작동에 장애가 있을 수 있습니다. \"액티브-액스 기능과 플러그 인\" 옵션을 허용하여 주시지 않으면 오류가 발생할 수 있습니다.", +BrowseServerBlocked : "브러우저 요소가 열리지 않습니다. 팝업차단 설정이 꺼져있는지 확인하여 주십시오.", +DialogBlocked : "윈도우 대화창을 열 수 없습니다. 팝업차단 설정이 꺼져있는지 확인하여 주십시오.", // Dialogs DlgBtnOK : "예", @@ -198,7 +207,7 @@ DlgImgAlignBaseline : "기준선", DlgImgAlignBottom : "아래", DlgImgAlignMiddle : "중간", DlgImgAlignRight : "오른쪽", -DlgImgAlignTextTop : "글자위(Text Top)", +DlgImgAlignTextTop : "글자상단", DlgImgAlignTop : "위", DlgImgPreview : "미리보기", DlgImgAlertUrl : "이미지 URL을 입력하십시요", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "책갈피 선택", DlgLnkAnchorByName : "책갈피 이름", DlgLnkAnchorById : "책갈피 ID", -DlgLnkNoAnchors : "<문서에 책갈피가 없습니다.>", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(문서에 책갈피가 없습니다.)", DlgLnkEMail : "이메일 주소", DlgLnkEMailSubject : "제목", DlgLnkEMailBody : "내용", @@ -262,7 +271,7 @@ DlgLnkPopTop : "윗쪽 위치", DlnLnkMsgNoUrl : "링크 URL을 입력하십시요.", DlnLnkMsgNoEMail : "이메일주소를 입력하십시요.", DlnLnkMsgNoAnchor : "책갈피명을 입력하십시요.", -DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING +DlnLnkMsgInvPopName : "팝업창의 타이틀은 공백을 허용하지 않습니다.", // Color Dialog DlgColorTitle : "색상 선택", @@ -322,6 +331,9 @@ DlgCellBackColor : "배경 색상", DlgCellBorderColor : "테두리 색상", DlgCellBtnSelect : "선택", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "찾기 & 바꾸기", + // Find Dialog DlgFindTitle : "찾기", DlgFindFindBtn : "찾기", @@ -344,10 +356,9 @@ PasteAsText : "텍스트로 붙여넣기", PasteFromWord : "MS Word 형식에서 붙여넣기", DlgPasteMsg2 : "키보드의 (Ctrl+V) 를 이용해서 상자안에 붙여넣고 OK 를 누르세요.", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteSec : "브러우저 보안 설정으로 인해, 클립보드의 자료를 직접 접근할 수 없습니다. 이 창에 다시 붙여넣기 하십시오.", DlgPasteIgnoreFont : "폰트 설정 무시", DlgPasteRemoveStyles : "스타일 정의 제거", -DlgPasteCleanBox : "글상자 제거", // Color Picker ColorAutomatic : "기본색상", @@ -493,12 +504,12 @@ DlgTemplatesTitle : "내용 템플릿", DlgTemplatesSelMsg : "에디터에서 사용할 템플릿을 선택하십시요.
    (지금까지 작성된 내용은 사라집니다.):", DlgTemplatesLoading : "템플릿 목록을 불러오는중입니다. 잠시만 기다려주십시요.", DlgTemplatesNoTpl : "(템플릿이 없습니다.)", -DlgTemplatesReplace : "Replace actual contents", //MISSING +DlgTemplatesReplace : "현재 내용 바꾸기", // About Dialog DlgAboutAboutTab : "About", DlgAboutBrowserInfoTab : "브라우저 정보", DlgAboutLicenseTab : "License", //MISSING DlgAboutVersion : "버전", -DlgAboutInfo : "For further information go to" -}; \ No newline at end of file +DlgAboutInfo : "더 많은 정보를 보시려면 다음 사이트로 가십시오." +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/lt.js b/phpgwapi/js/fckeditor/editor/lang/lt.js index db994d0b9d..1ca6931bd3 100644 --- a/phpgwapi/js/fckeditor/editor/lang/lt.js +++ b/phpgwapi/js/fckeditor/editor/lang/lt.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Nuoroda", InsertLink : "Įterpti/taisyti nuorodą", RemoveLink : "Panaikinti nuorodą", Anchor : "Įterpti/modifikuoti žymę", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "Vaizdas", InsertImage : "Įterpti/taisyti vaizdą", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "Lygiuoti dešinę", BlockJustify : "Lygiuoti abi puses", DecreaseIndent : "Sumažinti įtrauką", IncreaseIndent : "Padidinti įtrauką", +Blockquote : "Blockquote", //MISSING Undo : "Atšaukti", Redo : "Atstatyti", NumberedListLbl : "Numeruotas sąrašas", @@ -103,20 +105,27 @@ SelectionField : "Atrankos laukas", ImageButton : "Vaizdinis mygtukas", FitWindow : "Maximize the editor size", //MISSING +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "Taisyti nuorodą", CellCM : "Cell", //MISSING RowCM : "Row", //MISSING ColumnCM : "Column", //MISSING -InsertRow : "Įterpti eilutę", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "Šalinti eilutes", -InsertColumn : "Įterpti stulpelį", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "Šalinti stulpelius", -InsertCell : "Įterpti langelį", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "Šalinti langelius", MergeCells : "Sujungti langelius", -SplitCell : "Skaidyti langelius", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "Šalinti lentelę", CellProperties : "Langelio savybės", TableProperties : "Lentelės savybės", @@ -134,7 +143,7 @@ SelectionFieldProp : "Atrankos lauko savybės", TextareaProp : "Teksto srities savybės", FormProp : "Formos savybės", -FontFormats : "Normalus;Formuotas;Kreipinio;Antraštinis 1;Antraštinis 2;Antraštinis 3;Antraštinis 4;Antraštinis 5;Antraštinis 6", //REVIEW : Check _getfontformat.html +FontFormats : "Normalus;Formuotas;Kreipinio;Antraštinis 1;Antraštinis 2;Antraštinis 3;Antraštinis 4;Antraštinis 5;Antraštinis 6", // Alerts and Messages ProcessingXHTML : "Apdorojamas XHTML. Prašome palaukti...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Pasirinkite žymę", DlgLnkAnchorByName : "Pagal žymės vardą", DlgLnkAnchorById : "Pagal žymės Id", -DlgLnkNoAnchors : "<Šiame dokumente žymių nėra>", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Šiame dokumente žymių nėra)", DlgLnkEMail : "El.pašto adresas", DlgLnkEMailSubject : "Žinutės tema", DlgLnkEMailBody : "Žinutės turinys", @@ -322,6 +331,9 @@ DlgCellBackColor : "Fono spalva", DlgCellBorderColor : "Rėmelio spalva", DlgCellBtnSelect : "Pažymėti...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "Paieška", DlgFindFindBtn : "Surasti", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Žemiau esančiame įvedimo lauke įdėkite tekstą, naudodami k DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING DlgPasteIgnoreFont : "Ignoruoti šriftų nustatymus", DlgPasteRemoveStyles : "Pašalinti stilių nustatymus", -DlgPasteCleanBox : "Trinti įvedimo lauką", // Color Picker ColorAutomatic : "Automatinis", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "Naršyklės informacija", DlgAboutLicenseTab : "License", //MISSING DlgAboutVersion : "versija", DlgAboutInfo : "Papildomą informaciją galima gauti" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/lv.js b/phpgwapi/js/fckeditor/editor/lang/lv.js index 680942675d..23b589cb4d 100644 --- a/phpgwapi/js/fckeditor/editor/lang/lv.js +++ b/phpgwapi/js/fckeditor/editor/lang/lv.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Hipersaite", InsertLink : "Ievietot/Labot hipersaiti", RemoveLink : "Noņemt hipersaiti", Anchor : "Ievietot/Labot iezīmi", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "Attēls", InsertImage : "Ievietot/Labot Attēlu", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "Izlīdzināt pa labi", BlockJustify : "Izlīdzināt malas", DecreaseIndent : "Samazināt atkāpi", IncreaseIndent : "Palielināt atkāpi", +Blockquote : "Blockquote", //MISSING Undo : "Atcelt", Redo : "Atkārtot", NumberedListLbl : "Numurēts saraksts", @@ -103,20 +105,27 @@ SelectionField : "Iezīmēšanas lauks", ImageButton : "Attēlpoga", FitWindow : "Maksimizēt redaktora izmēru", +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "Labot hipersaiti", CellCM : "Šūna", RowCM : "Rinda", ColumnCM : "Kolonna", -InsertRow : "Ievietot rindu", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "Dzēst rindas", -InsertColumn : "Ievietot kolonnu", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "Dzēst kolonnas", -InsertCell : "Ievietot rūtiņu", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "Dzēst rūtiņas", MergeCells : "Apvienot rūtiņas", -SplitCell : "Sadalīt rūtiņu", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "Dzēst tabulu", CellProperties : "Rūtiņas īpašības", TableProperties : "Tabulas īpašības", @@ -134,7 +143,7 @@ SelectionFieldProp : "Iezīmēšanas lauka īpašības", TextareaProp : "Teksta laukuma īpašības", FormProp : "Formas īpašības", -FontFormats : "Normāls teksts;Formatēts teksts;Adrese;Virsraksts 1;Virsraksts 2;Virsraksts 3;Virsraksts 4;Virsraksts 5;Virsraksts 6;Rindkopa (DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "Normāls teksts;Formatēts teksts;Adrese;Virsraksts 1;Virsraksts 2;Virsraksts 3;Virsraksts 4;Virsraksts 5;Virsraksts 6;Rindkopa (DIV)", // Alerts and Messages ProcessingXHTML : "Tiek apstrādāts XHTML. Lūdzu uzgaidiet...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Izvēlēties iezīmi", DlgLnkAnchorByName : "Pēc iezīmes nosaukuma", DlgLnkAnchorById : "Pēc elementa ID", -DlgLnkNoAnchors : "<Šajā dokumentā nav iezīmju>", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Šajā dokumentā nav iezīmju)", DlgLnkEMail : "E-pasta adrese", DlgLnkEMailSubject : "Ziņas tēma", DlgLnkEMailBody : "Ziņas saturs", @@ -322,6 +331,9 @@ DlgCellBackColor : "Fona krāsa", DlgCellBorderColor : "Rāmja krāsa", DlgCellBtnSelect : "Iezīmē...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "Meklētājs", DlgFindFindBtn : "Meklēt", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Lūdzu, ievietojiet tekstu šajā laukumā, izmantojot klaviatū DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING DlgPasteIgnoreFont : "Ignorēt iepriekš norādītos fontus", DlgPasteRemoveStyles : "Noņemt norādītos stilus", -DlgPasteCleanBox : "Apstrādāt laukuma saturu", // Color Picker ColorAutomatic : "Automātiska", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "Informācija par pārlūkprogrammu", DlgAboutLicenseTab : "Licence", DlgAboutVersion : "versija", DlgAboutInfo : "Papildus informācija ir pieejama" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/mn.js b/phpgwapi/js/fckeditor/editor/lang/mn.js index ba8f798e66..c6141d0a14 100644 --- a/phpgwapi/js/fckeditor/editor/lang/mn.js +++ b/phpgwapi/js/fckeditor/editor/lang/mn.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -44,11 +44,12 @@ RemoveFormat : "Формат авч хаях", InsertLinkLbl : "Линк", InsertLink : "Линк Оруулах/Засварлах", RemoveLink : "Линк авч хаях", -Anchor : "Insert/Edit Anchor", //MISSING +Anchor : "Холбоос Оруулах/Засварлах", +AnchorDelete : "Холбоос Авах", InsertImageLbl : "Зураг", InsertImage : "Зураг Оруулах/Засварлах", -InsertFlashLbl : "Flash", //MISSING -InsertFlash : "Insert/Edit Flash", //MISSING +InsertFlashLbl : "Флаш", +InsertFlash : "Флаш Оруулах/Засварлах", InsertTableLbl : "Хүснэгт", InsertTable : "Хүснэгт Оруулах/Засварлах", InsertLineLbl : "Зураас", @@ -70,6 +71,7 @@ RightJustify : "Баруун талд байрлуулах", BlockJustify : "Блок хэлбэрээр байрлуулах", DecreaseIndent : "Догол мөр нэмэх", IncreaseIndent : "Догол мөр хасах", +Blockquote : "Хайрцаглах", Undo : "Хүчингүй болгох", Redo : "Өмнөх үйлдлээ сэргээх", NumberedListLbl : "Дугаарлагдсан жагсаалт", @@ -87,54 +89,61 @@ BGColor : "Фонны өнгө", Source : "Код", Find : "Хайх", Replace : "Солих", -SpellCheck : "Check Spelling", //MISSING -UniversalKeyboard : "Universal Keyboard", //MISSING -PageBreakLbl : "Page Break", //MISSING -PageBreak : "Insert Page Break", //MISSING +SpellCheck : "Үгийн дүрэх шалгах", +UniversalKeyboard : "Униварсал гар", +PageBreakLbl : "Хуудас тусгаарлах", +PageBreak : "Хуудас тусгаарлагч оруулах", -Form : "Form", //MISSING -Checkbox : "Checkbox", //MISSING -RadioButton : "Radio Button", //MISSING -TextField : "Text Field", //MISSING -Textarea : "Textarea", //MISSING -HiddenField : "Hidden Field", //MISSING -Button : "Button", //MISSING -SelectionField : "Selection Field", //MISSING -ImageButton : "Image Button", //MISSING +Form : "Форм", +Checkbox : "Чекбокс", +RadioButton : "Радио товч", +TextField : "Техт талбар", +Textarea : "Техт орчин", +HiddenField : "Нууц талбар", +Button : "Товч", +SelectionField : "Сонгогч талбар", +ImageButton : "Зурагтай товч", -FitWindow : "Maximize the editor size", //MISSING +FitWindow : "editor-н хэмжээг томруулах", +ShowBlocks : "Block-уудыг үзүүлэх", // Context Menu EditLink : "Холбоос засварлах", -CellCM : "Cell", //MISSING -RowCM : "Row", //MISSING -ColumnCM : "Column", //MISSING -InsertRow : "Мөр оруулах", +CellCM : "Нүх/зай", +RowCM : "Мөр", +ColumnCM : "Багана", +InsertRowAfter : "Мөр дараа нь оруулах", +InsertRowBefore : "Мөр өмнө нь оруулах", DeleteRows : "Мөр устгах", -InsertColumn : "Багана оруулах", +InsertColumnAfter : "Багана дараа нь оруулах", +InsertColumnBefore : "Багана өмнө нь оруулах", DeleteColumns : "Багана устгах", -InsertCell : "Нүх оруулах", +InsertCellAfter : "Нүх/зай дараа нь оруулах", +InsertCellBefore : "Нүх/зай өмнө нь оруулах", DeleteCells : "Нүх устгах", MergeCells : "Нүх нэгтэх", -SplitCell : "Нүх тусгайрлах", -TableDelete : "Delete Table", //MISSING -CellProperties : "Хоосон зайн шинж чанар", +MergeRight : "Баруун тийш нэгтгэх", +MergeDown : "Доош нэгтгэх", +HorizontalSplitCell : "Нүх/зайг босоогоор нь тусгаарлах", +VerticalSplitCell : "Нүх/зайг хөндлөнгөөр нь тусгаарлах", +TableDelete : "Хүснэгт устгах", +CellProperties : "Нүх/зай зайн шинж чанар", TableProperties : "Хүснэгт", ImageProperties : "Зураг", -FlashProperties : "Flash Properties", //MISSING +FlashProperties : "Флаш шинж чанар", -AnchorProp : "Anchor Properties", //MISSING -ButtonProp : "Button Properties", //MISSING -CheckboxProp : "Checkbox Properties", //MISSING -HiddenFieldProp : "Hidden Field Properties", //MISSING -RadioButtonProp : "Radio Button Properties", //MISSING -ImageButtonProp : "Image Button Properties", //MISSING -TextFieldProp : "Text Field Properties", //MISSING -SelectionFieldProp : "Selection Field Properties", //MISSING -TextareaProp : "Textarea Properties", //MISSING -FormProp : "Form Properties", //MISSING +AnchorProp : "Холбоос шинж чанар", +ButtonProp : "Товчны шинж чанар", +CheckboxProp : "Чекбоксны шинж чанар", +HiddenFieldProp : "Нууц талбарын шинж чанар", +RadioButtonProp : "Радио товчны шинж чанар", +ImageButtonProp : "Зурган товчны шинж чанар", +TextFieldProp : "Текст талбарын шинж чанар", +SelectionFieldProp : "Согогч талбарын шинж чанар", +TextareaProp : "Текст орчны шинж чанар", +FormProp : "Форм шинж чанар", -FontFormats : "Хэвийн;Formatted;Хаяг;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Paragraph (DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "Хэвийн;Formatted;Хаяг;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Paragraph (DIV)", // Alerts and Messages ProcessingXHTML : "XHTML үйл явц явагдаж байна. Хүлээнэ үү...", @@ -145,19 +154,19 @@ UnknownToolbarItem : "Багажны хэсгийн \"%1\" item мэдэгдэх UnknownCommand : "\"%1\" комманд нэр мэдагдэхгүй байна", NotImplemented : "Зөвшөөрөгдөхгүй комманд", UnknownToolbarSet : "Багажны хэсэгт \"%1\" оноох, үүсээгүй байна", -NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", //MISSING -BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING -DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", //MISSING +NoActiveX : "Таны үзүүлэгч/browser-н хамгаалалтын тохиргоо editor-н зарим боломжийг хязгаарлаж байна. Та \"Run ActiveX controls ба plug-ins\" сонголыг идвэхитэй болго.", +BrowseServerBlocked : "Нөөц үзүүгч нээж чадсангүй. Бүх popup blocker-г disabled болгоно уу.", +DialogBlocked : "Харилцах цонхонд энийг нээхэд боломжгүй ээ. Бүх popup blocker-г disabled болгоно уу.", // Dialogs DlgBtnOK : "OK", DlgBtnCancel : "Болих", DlgBtnClose : "Хаах", -DlgBtnBrowseServer : "Browse Server", //MISSING +DlgBtnBrowseServer : "Сервер харуулах", DlgAdvancedTag : "Нэмэлт", -DlgOpOther : "", //MISSING -DlgInfoTab : "Info", //MISSING -DlgAlertUrl : "Please insert the URL", //MISSING +DlgOpOther : "<Бусад>", +DlgInfoTab : "Мэдээлэл", +DlgAlertUrl : "URL оруулна уу", // General Dialogs Labels DlgGenNotSet : "<Оноохгүй>", @@ -185,7 +194,7 @@ DlgImgUpload : "Хуулах", DlgImgAlt : "Тайлбар текст", DlgImgWidth : "Өргөн", DlgImgHeight : "Өндөр", -DlgImgLockRatio : "Lock Ratio", +DlgImgLockRatio : "Радио түгжих", DlgBtnResetSize : "хэмжээ дахин оноох", DlgImgBorder : "Хүрээ", DlgImgHSpace : "Хөндлөн зай", @@ -202,17 +211,17 @@ DlgImgAlignTextTop : "Текст дээр", DlgImgAlignTop : "Дээд талд", DlgImgPreview : "Уридчлан харах", DlgImgAlertUrl : "Зурагны URL-ын төрлийн сонгоно уу", -DlgImgLinkTab : "Link", //MISSING +DlgImgLinkTab : "Линк", // Flash Dialog -DlgFlashTitle : "Flash Properties", //MISSING -DlgFlashChkPlay : "Auto Play", //MISSING -DlgFlashChkLoop : "Loop", //MISSING -DlgFlashChkMenu : "Enable Flash Menu", //MISSING -DlgFlashScale : "Scale", //MISSING -DlgFlashScaleAll : "Show all", //MISSING -DlgFlashScaleNoBorder : "No Border", //MISSING -DlgFlashScaleFit : "Exact Fit", //MISSING +DlgFlashTitle : "Флаш шинж чанар", +DlgFlashChkPlay : "Автоматаар тоглох", +DlgFlashChkLoop : "Давтах", +DlgFlashChkMenu : "Флаш цэс идвэхжүүлэх", +DlgFlashScale : "Өргөгтгөх", +DlgFlashScaleAll : "Бүгдийг харуулах", +DlgFlashScaleNoBorder : "Хүрээгүй", +DlgFlashScaleFit : "Яг тааруулах", // Link Dialog DlgLnkWindowTitle : "Линк", @@ -229,9 +238,9 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Холбоос сонгох", DlgLnkAnchorByName : "Холбоосын нэрээр", DlgLnkAnchorById : "Элемэнт Id-гаар", -DlgLnkNoAnchors : "<Баримт бичиг холбоосгүй байна>", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Баримт бичиг холбоосгүй байна)", DlgLnkEMail : "E-Mail Хаяг", -DlgLnkEMailSubject : "Message Subject", +DlgLnkEMailSubject : "Message гарчиг", DlgLnkEMailBody : "Message-ийн агуулга", DlgLnkUpload : "Хуулах", DlgLnkBtnUpload : "Үүнийг серверрүү илгээ", @@ -243,7 +252,7 @@ DlgLnkTargetBlank : "Шинэ цонх (_blank)", DlgLnkTargetParent : "Эцэг цонх (_parent)", DlgLnkTargetSelf : "Төстэй цонх (_self)", DlgLnkTargetTop : "Хамгийн түрүүн байх цонх (_top)", -DlgLnkTargetFrameName : "Target Frame Name", //MISSING +DlgLnkTargetFrameName : "Очих фремын нэр", DlgLnkPopWinName : "Popup цонхны нэр", DlgLnkPopWinFeat : "Popup цонхны онцлог", DlgLnkPopResize : "Хэмжээ өөрчлөх", @@ -262,7 +271,7 @@ DlgLnkPopTop : "Дээд байрлал", DlnLnkMsgNoUrl : "Линк URL-ээ төрөлжүүлнэ үү", DlnLnkMsgNoEMail : "Е-mail хаягаа төрөлжүүлнэ үү", DlnLnkMsgNoAnchor : "Холбоосоо сонгоно уу", -DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING +DlnLnkMsgInvPopName : "popup нэр нь үсгэн тэмдэгтээр эхэлсэн байх ба хоосон зай агуулаагүй байх ёстой.", // Color Dialog DlgColorTitle : "Өнгө сонгох", @@ -290,10 +299,10 @@ DlgTableWidth : "Өргөн", DlgTableWidthPx : "цэг", DlgTableWidthPc : "хувь", DlgTableHeight : "Өндөр", -DlgTableCellSpace : "Нүх хоорондын зай", -DlgTableCellPad : "Нүх доторлох", +DlgTableCellSpace : "Нүх хоорондын зай (spacing)", +DlgTableCellPad : "Нүх доторлох(padding)", DlgTableCaption : "Тайлбар", -DlgTableSummary : "Summary", //MISSING +DlgTableSummary : "Тайлбар", // Table Cell Dialog DlgCellTitle : "Хоосон зайн шинж чанар", @@ -316,12 +325,15 @@ DlgCellVerAlignTop : "Дээд тал", DlgCellVerAlignMiddle : "Дунд", DlgCellVerAlignBottom : "Доод тал", DlgCellVerAlignBaseline : "Baseline", -DlgCellRowSpan : "Нийт мөр", -DlgCellCollSpan : "Нийт багана", +DlgCellRowSpan : "Нийт мөр (span)", +DlgCellCollSpan : "Нийт багана (span)", DlgCellBackColor : "Фонны өнгө", DlgCellBorderColor : "Хүрээний өнгө", DlgCellBtnSelect : "Сонго...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Хай мөн Дарж бич", + // Find Dialog DlgFindTitle : "Хайх", DlgFindFindBtn : "Хайх", @@ -343,162 +355,161 @@ PasteErrorCopy : "Таны browser-ын хамгаалалтын тохирго PasteAsText : "Plain Text-ээс буулгах", PasteFromWord : "Word-оос буулгах", -DlgPasteMsg2 : "Please paste inside the following box using the keyboard (Ctrl+V) and hit OK.", //MISSING -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING -DlgPasteIgnoreFont : "Ignore Font Face definitions", //MISSING -DlgPasteRemoveStyles : "Remove Styles definitions", //MISSING -DlgPasteCleanBox : "Clean Up Box", //MISSING +DlgPasteMsg2 : "(Ctrl+V) товчийг ашиглан paste хийнэ үү. Мөн OK дар.", +DlgPasteSec : "Таны үзүүлэгч/browser/-н хамгаалалтын тохиргооноос болоод editor clipboard өгөгдөлрүү шууд хандах боломжгүй. Энэ цонход дахин paste хийхийг оролд.", +DlgPasteIgnoreFont : "Тодорхойлогдсон Font Face зөвшөөрнө", +DlgPasteRemoveStyles : "Тодорхойлогдсон загварыг авах", // Color Picker ColorAutomatic : "Автоматаар", ColorMoreColors : "Нэмэлт өнгөнүүд...", // Document Properties -DocProps : "Document Properties", //MISSING +DocProps : "Баримт бичиг шинж чанар", // Anchor Dialog -DlgAnchorTitle : "Anchor Properties", //MISSING -DlgAnchorName : "Anchor Name", //MISSING -DlgAnchorErrorName : "Please type the anchor name", //MISSING +DlgAnchorTitle : "Холбоос шинж чанар", +DlgAnchorName : "Холбоос нэр", +DlgAnchorErrorName : "Холбоос төрөл оруулна уу", // Speller Pages Dialog -DlgSpellNotInDic : "Not in dictionary", //MISSING -DlgSpellChangeTo : "Change to", //MISSING -DlgSpellBtnIgnore : "Ignore", //MISSING -DlgSpellBtnIgnoreAll : "Ignore All", //MISSING -DlgSpellBtnReplace : "Replace", //MISSING -DlgSpellBtnReplaceAll : "Replace All", //MISSING -DlgSpellBtnUndo : "Undo", //MISSING -DlgSpellNoSuggestions : "- No suggestions -", //MISSING -DlgSpellProgress : "Spell check in progress...", //MISSING -DlgSpellNoMispell : "Spell check complete: No misspellings found", //MISSING -DlgSpellNoChanges : "Spell check complete: No words changed", //MISSING -DlgSpellOneChange : "Spell check complete: One word changed", //MISSING -DlgSpellManyChanges : "Spell check complete: %1 words changed", //MISSING +DlgSpellNotInDic : "Толь бичиггүй", +DlgSpellChangeTo : "Өөрчлөх", +DlgSpellBtnIgnore : "Зөвшөөрөх", +DlgSpellBtnIgnoreAll : "Бүгдийг зөвшөөрөх", +DlgSpellBtnReplace : "Дарж бичих", +DlgSpellBtnReplaceAll : "Бүгдийг Дарж бичих", +DlgSpellBtnUndo : "Буцаах", +DlgSpellNoSuggestions : "- Тайлбаргүй -", +DlgSpellProgress : "Дүрэм шалгаж байгаа үйл явц...", +DlgSpellNoMispell : "Дүрэм шалгаад дууссан: Алдаа олдсонгүй", +DlgSpellNoChanges : "Дүрэм шалгаад дууссан: үг өөрчлөгдөөгүй", +DlgSpellOneChange : "Дүрэм шалгаад дууссан: 1 үг өөрчлөгдсөн", +DlgSpellManyChanges : "Дүрэм шалгаад дууссан: %1 үг өөрчлөгдсөн", -IeSpellDownload : "Spell checker not installed. Do you want to download it now?", //MISSING +IeSpellDownload : "Дүрэм шалгагч суугаагүй байна. Татаж авахыг хүсч байна уу?", // Button Dialog -DlgButtonText : "Text (Value)", //MISSING -DlgButtonType : "Type", //MISSING -DlgButtonTypeBtn : "Button", //MISSING -DlgButtonTypeSbm : "Submit", //MISSING -DlgButtonTypeRst : "Reset", //MISSING +DlgButtonText : "Тэкст (Утга)", +DlgButtonType : "Төрөл", +DlgButtonTypeBtn : "Товч", +DlgButtonTypeSbm : "Submit", +DlgButtonTypeRst : "Болих", // Checkbox and Radio Button Dialogs -DlgCheckboxName : "Name", //MISSING -DlgCheckboxValue : "Value", //MISSING -DlgCheckboxSelected : "Selected", //MISSING +DlgCheckboxName : "Нэр", +DlgCheckboxValue : "Утга", +DlgCheckboxSelected : "Сонгогдсон", // Form Dialog -DlgFormName : "Name", //MISSING -DlgFormAction : "Action", //MISSING -DlgFormMethod : "Method", //MISSING +DlgFormName : "Нэр", +DlgFormAction : "Үйлдэл", +DlgFormMethod : "Арга", // Select Field Dialog -DlgSelectName : "Name", //MISSING -DlgSelectValue : "Value", //MISSING -DlgSelectSize : "Size", //MISSING -DlgSelectLines : "lines", //MISSING -DlgSelectChkMulti : "Allow multiple selections", //MISSING -DlgSelectOpAvail : "Available Options", //MISSING -DlgSelectOpText : "Text", //MISSING -DlgSelectOpValue : "Value", //MISSING -DlgSelectBtnAdd : "Add", //MISSING -DlgSelectBtnModify : "Modify", //MISSING -DlgSelectBtnUp : "Up", //MISSING -DlgSelectBtnDown : "Down", //MISSING -DlgSelectBtnSetValue : "Set as selected value", //MISSING -DlgSelectBtnDelete : "Delete", //MISSING +DlgSelectName : "Нэр", +DlgSelectValue : "Утга", +DlgSelectSize : "Хэмжээ", +DlgSelectLines : "Мөр", +DlgSelectChkMulti : "Олон сонголт зөвшөөрөх", +DlgSelectOpAvail : "Идвэхтэй сонголт", +DlgSelectOpText : "Тэкст", +DlgSelectOpValue : "Утга", +DlgSelectBtnAdd : "Нэмэх", +DlgSelectBtnModify : "Өөрчлөх", +DlgSelectBtnUp : "Дээш", +DlgSelectBtnDown : "Доош", +DlgSelectBtnSetValue : "Сонгогдсан утга оноох", +DlgSelectBtnDelete : "Устгах", // Textarea Dialog -DlgTextareaName : "Name", //MISSING -DlgTextareaCols : "Columns", //MISSING -DlgTextareaRows : "Rows", //MISSING +DlgTextareaName : "Нэр", +DlgTextareaCols : "Багана", +DlgTextareaRows : "Мөр", // Text Field Dialog -DlgTextName : "Name", //MISSING -DlgTextValue : "Value", //MISSING -DlgTextCharWidth : "Character Width", //MISSING -DlgTextMaxChars : "Maximum Characters", //MISSING -DlgTextType : "Type", //MISSING -DlgTextTypeText : "Text", //MISSING -DlgTextTypePass : "Password", //MISSING +DlgTextName : "Нэр", +DlgTextValue : "Утга", +DlgTextCharWidth : "Тэмдэгтын өргөн", +DlgTextMaxChars : "Хамгийн их тэмдэгт", +DlgTextType : "Төрөл", +DlgTextTypeText : "Текст", +DlgTextTypePass : "Нууц үг", // Hidden Field Dialog -DlgHiddenName : "Name", //MISSING -DlgHiddenValue : "Value", //MISSING +DlgHiddenName : "Нэр", +DlgHiddenValue : "Утга", // Bulleted List Dialog -BulletedListProp : "Bulleted List Properties", //MISSING -NumberedListProp : "Numbered List Properties", //MISSING -DlgLstStart : "Start", //MISSING -DlgLstType : "Type", //MISSING -DlgLstTypeCircle : "Circle", //MISSING -DlgLstTypeDisc : "Disc", //MISSING -DlgLstTypeSquare : "Square", //MISSING -DlgLstTypeNumbers : "Numbers (1, 2, 3)", //MISSING -DlgLstTypeLCase : "Lowercase Letters (a, b, c)", //MISSING -DlgLstTypeUCase : "Uppercase Letters (A, B, C)", //MISSING -DlgLstTypeSRoman : "Small Roman Numerals (i, ii, iii)", //MISSING -DlgLstTypeLRoman : "Large Roman Numerals (I, II, III)", //MISSING +BulletedListProp : "Bulleted жагсаалын шинж чанар", +NumberedListProp : "Дугаарласан жагсаалын шинж чанар", +DlgLstStart : "Эхлэх", +DlgLstType : "Төрөл", +DlgLstTypeCircle : "Тойрог", +DlgLstTypeDisc : "Тайлбар", +DlgLstTypeSquare : "Square", +DlgLstTypeNumbers : "Тоо (1, 2, 3)", +DlgLstTypeLCase : "Жижиг үсэг (a, b, c)", +DlgLstTypeUCase : "Том үсэг (A, B, C)", +DlgLstTypeSRoman : "Жижиг Ром тоо (i, ii, iii)", +DlgLstTypeLRoman : "Том Ром тоо (I, II, III)", // Document Properties Dialog -DlgDocGeneralTab : "General", //MISSING -DlgDocBackTab : "Background", //MISSING -DlgDocColorsTab : "Colors and Margins", //MISSING -DlgDocMetaTab : "Meta Data", //MISSING +DlgDocGeneralTab : "Ерөнхий", +DlgDocBackTab : "Фоно", +DlgDocColorsTab : "Захын зай ба Өнгө", +DlgDocMetaTab : "Meta өгөгдөл", -DlgDocPageTitle : "Page Title", //MISSING -DlgDocLangDir : "Language Direction", //MISSING -DlgDocLangDirLTR : "Left to Right (LTR)", //MISSING -DlgDocLangDirRTL : "Right to Left (RTL)", //MISSING -DlgDocLangCode : "Language Code", //MISSING -DlgDocCharSet : "Character Set Encoding", //MISSING -DlgDocCharSetCE : "Central European", //MISSING -DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING -DlgDocCharSetCR : "Cyrillic", //MISSING -DlgDocCharSetGR : "Greek", //MISSING -DlgDocCharSetJP : "Japanese", //MISSING -DlgDocCharSetKR : "Korean", //MISSING -DlgDocCharSetTR : "Turkish", //MISSING -DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING -DlgDocCharSetWE : "Western European", //MISSING -DlgDocCharSetOther : "Other Character Set Encoding", //MISSING +DlgDocPageTitle : "Хуудасны гарчиг", +DlgDocLangDir : "Хэлний чиглэл", +DlgDocLangDirLTR : "Зүүнээс баруунруу (LTR)", +DlgDocLangDirRTL : "Баруунаас зүүнрүү (RTL)", +DlgDocLangCode : "Хэлний код", +DlgDocCharSet : "Encoding тэмдэгт", +DlgDocCharSetCE : "Төв европ", +DlgDocCharSetCT : "Хятадын уламжлалт (Big5)", +DlgDocCharSetCR : "Крил", +DlgDocCharSetGR : "Гред", +DlgDocCharSetJP : "Япон", +DlgDocCharSetKR : "Солонгос", +DlgDocCharSetTR : "Tурк", +DlgDocCharSetUN : "Юникод (UTF-8)", +DlgDocCharSetWE : "Баруун европ", +DlgDocCharSetOther : "Encoding-д өөр тэмдэгт оноох", -DlgDocDocType : "Document Type Heading", //MISSING -DlgDocDocTypeOther : "Other Document Type Heading", //MISSING -DlgDocIncXHTML : "Include XHTML Declarations", //MISSING -DlgDocBgColor : "Background Color", //MISSING -DlgDocBgImage : "Background Image URL", //MISSING -DlgDocBgNoScroll : "Nonscrolling Background", //MISSING -DlgDocCText : "Text", //MISSING -DlgDocCLink : "Link", //MISSING -DlgDocCVisited : "Visited Link", //MISSING -DlgDocCActive : "Active Link", //MISSING -DlgDocMargins : "Page Margins", //MISSING -DlgDocMaTop : "Top", //MISSING -DlgDocMaLeft : "Left", //MISSING -DlgDocMaRight : "Right", //MISSING -DlgDocMaBottom : "Bottom", //MISSING -DlgDocMeIndex : "Document Indexing Keywords (comma separated)", //MISSING -DlgDocMeDescr : "Document Description", //MISSING -DlgDocMeAuthor : "Author", //MISSING -DlgDocMeCopy : "Copyright", //MISSING -DlgDocPreview : "Preview", //MISSING +DlgDocDocType : "Баримт бичгийн төрөл Heading", +DlgDocDocTypeOther : "Бусад баримт бичгийн төрөл Heading", +DlgDocIncXHTML : "XHTML агуулж зарлах", +DlgDocBgColor : "Фоно өнгө", +DlgDocBgImage : "Фоно зурагны URL", +DlgDocBgNoScroll : "Гүйдэггүй фоно", +DlgDocCText : "Текст", +DlgDocCLink : "Линк", +DlgDocCVisited : "Зочилсон линк", +DlgDocCActive : "Идвэхитэй линк", +DlgDocMargins : "Хуудасны захын зай", +DlgDocMaTop : "Дээд тал", +DlgDocMaLeft : "Зүүн тал", +DlgDocMaRight : "Баруун тал", +DlgDocMaBottom : "Доод тал", +DlgDocMeIndex : "Баримт бичгийн индекс түлхүүр үг (таслалаар тусгаарлагдана)", +DlgDocMeDescr : "Баримт бичгийн тайлбар", +DlgDocMeAuthor : "Зохиогч", +DlgDocMeCopy : "Зохиогчийн эрх", +DlgDocPreview : "Харах", // Templates Dialog -Templates : "Templates", //MISSING -DlgTemplatesTitle : "Content Templates", //MISSING -DlgTemplatesSelMsg : "Please select the template to open in the editor
    (the actual contents will be lost):", //MISSING -DlgTemplatesLoading : "Loading templates list. Please wait...", //MISSING -DlgTemplatesNoTpl : "(No templates defined)", //MISSING -DlgTemplatesReplace : "Replace actual contents", //MISSING +Templates : "Загварууд", +DlgTemplatesTitle : "Загварын агуулга", +DlgTemplatesSelMsg : "Загварыг нээж editor-рүү сонгож оруулна уу
    (Одоогийн агууллагыг устаж магадгүй):", +DlgTemplatesLoading : "Загваруудыг ачааллаж байна. Түр хүлээнэ үү...", +DlgTemplatesNoTpl : "(Загвар тодорхойлогдоогүй байна)", +DlgTemplatesReplace : "Одоогийн агууллагыг дарж бичих", // About Dialog -DlgAboutAboutTab : "About", //MISSING -DlgAboutBrowserInfoTab : "Browser Info", //MISSING -DlgAboutLicenseTab : "License", //MISSING +DlgAboutAboutTab : "Тухай", +DlgAboutBrowserInfoTab : "Мэдээлэл үзүүлэгч", +DlgAboutLicenseTab : "Лиценз", DlgAboutVersion : "Хувилбар", DlgAboutInfo : "Мэдээллээр туслах" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/ms.js b/phpgwapi/js/fckeditor/editor/lang/ms.js index efe05299f2..5923081c44 100644 --- a/phpgwapi/js/fckeditor/editor/lang/ms.js +++ b/phpgwapi/js/fckeditor/editor/lang/ms.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Sambungan", InsertLink : "Masukkan/Sunting Sambungan", RemoveLink : "Buang Sambungan", Anchor : "Masukkan/Sunting Pautan", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "Gambar", InsertImage : "Masukkan/Sunting Gambar", InsertFlashLbl : "Flash", //MISSING @@ -70,6 +71,7 @@ RightJustify : "Jajaran Kanan", BlockJustify : "Jajaran Blok", DecreaseIndent : "Kurangkan Inden", IncreaseIndent : "Tambahkan Inden", +Blockquote : "Blockquote", //MISSING Undo : "Batalkan", Redo : "Ulangkan", NumberedListLbl : "Senarai bernombor", @@ -103,20 +105,27 @@ SelectionField : "Field Pilihan", ImageButton : "Butang Bergambar", FitWindow : "Maximize the editor size", //MISSING +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "Sunting Sambungan", CellCM : "Cell", //MISSING RowCM : "Row", //MISSING ColumnCM : "Column", //MISSING -InsertRow : "Masukkan Baris", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "Buangkan Baris", -InsertColumn : "Masukkan Lajur", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "Buangkan Lajur", -InsertCell : "Masukkan Sel", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "Buangkan Sel-sel", MergeCells : "Cantumkan Sel-sel", -SplitCell : "Bahagikan Sel", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "Delete Table", //MISSING CellProperties : "Ciri-ciri Sel", TableProperties : "Ciri-ciri Jadual", @@ -134,7 +143,7 @@ SelectionFieldProp : "Ciri-ciri Selection Field", TextareaProp : "Ciri-ciri Textarea", FormProp : "Ciri-ciri Borang", -FontFormats : "Normal;Telah Diformat;Alamat;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Perenggan (DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "Normal;Telah Diformat;Alamat;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Perenggan (DIV)", // Alerts and Messages ProcessingXHTML : "Memproses XHTML. Sila tunggu...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Sila pilih pautan", DlgLnkAnchorByName : "dengan menggunakan nama pautan", DlgLnkAnchorById : "dengan menggunakan ID elemen", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Tiada pautan terdapat dalam dokumen ini)", DlgLnkEMail : "Alamat E-Mail", DlgLnkEMailSubject : "Subjek Mesej", DlgLnkEMailBody : "Isi Kandungan Mesej", @@ -322,6 +331,9 @@ DlgCellBackColor : "Warna Latarbelakang", DlgCellBorderColor : "Warna Border", DlgCellBtnSelect : "Pilih...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "Carian", DlgFindFindBtn : "Cari", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Please paste inside the following box using the keyboard (", DlgLnkURL : "URL", DlgLnkAnchorSel : "Velg ett anker", DlgLnkAnchorByName : "Anker etter navn", DlgLnkAnchorById : "Element etter ID", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) -DlgLnkEMail : "E-Post Addresse", +DlgLnkNoAnchors : "(Ingen anker i dokumentet)", +DlgLnkEMail : "E-postadresse", DlgLnkEMailSubject : "Meldingsemne", DlgLnkEMailBody : "Melding", DlgLnkUpload : "Last opp", @@ -287,7 +296,7 @@ DlgTableAlignLeft : "Venstre", DlgTableAlignCenter : "Midtjuster", DlgTableAlignRight : "Høyre", DlgTableWidth : "Bredde", -DlgTableWidthPx : "pixler", +DlgTableWidthPx : "piksler", DlgTableWidthPc : "prosent", DlgTableHeight : "Høyde", DlgTableCellSpace : "Celle marg", @@ -296,9 +305,9 @@ DlgTableCaption : "Tittel", DlgTableSummary : "Sammendrag", // Table Cell Dialog -DlgCellTitle : "Celle egenskaper", +DlgCellTitle : "Celleegenskaper", DlgCellWidth : "Bredde", -DlgCellWidthPx : "pixeler", +DlgCellWidthPx : "piksler", DlgCellWidthPc : "prosent", DlgCellHeight : "Høyde", DlgCellWordWrap : "Tekstbrytning", @@ -322,6 +331,9 @@ DlgCellBackColor : "Bakgrunnsfarge", DlgCellBorderColor : "Rammefarge", DlgCellBtnSelect : "Velg...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "Finn", DlgFindFindBtn : "Finn", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Vennligst lim inn i den følgende boksen med tastaturet ( with ( and ) +DlgLnkNoAnchors : "(Geen interne links in document gevonden)", DlgLnkEMail : "E-mailadres", DlgLnkEMailSubject : "Onderwerp bericht", DlgLnkEMailBody : "Inhoud bericht", @@ -322,6 +331,9 @@ DlgCellBackColor : "Achtergrondkleur", DlgCellBorderColor : "Randkleur", DlgCellBtnSelect : "Selecteren...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Zoeken en vervangen", + // Find Dialog DlgFindTitle : "Zoeken", DlgFindFindBtn : "Zoeken", @@ -343,11 +355,10 @@ PasteErrorCopy : "De beveiligingsinstelling van de browser verhinderen het autom PasteAsText : "Plakken als platte tekst", PasteFromWord : "Plakken als Word-gegevens", -DlgPasteMsg2 : "Plak de tekst in het volgende vak gebruik makend van je toetstenbord (Ctrl+V) en klik op OK.", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteMsg2 : "Plak de tekst in het volgende vak gebruik makend van je toetstenbord (Ctrl+V) en klik op OK.", +DlgPasteSec : "Door de beveiligingsinstellingen van uw browser is het niet mogelijk om direct vanuit het klembord in de editor te plakken. Middels opnieuw plakken in dit venster kunt u de tekst alsnog plakken in de editor.", DlgPasteIgnoreFont : "Negeer \"Font Face\"-definities", DlgPasteRemoveStyles : "Verwijder \"Style\"-definities", -DlgPasteCleanBox : "Vak opschonen", // Color Picker ColorAutomatic : "Automatisch", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "Browserinformatie", DlgAboutLicenseTab : "Licentie", DlgAboutVersion : "Versie", DlgAboutInfo : "Voor meer informatie ga naar " -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/no.js b/phpgwapi/js/fckeditor/editor/lang/no.js index 64833b8cf1..f72730481a 100644 --- a/phpgwapi/js/fckeditor/editor/lang/no.js +++ b/phpgwapi/js/fckeditor/editor/lang/no.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -39,12 +39,13 @@ Paste : "Lim inn", PasteText : "Lim inn som ren tekst", PasteWord : "Lim inn fra Word", Print : "Skriv ut", -SelectAll : "Velg alle", +SelectAll : "Merk alt", RemoveFormat : "Fjern format", InsertLinkLbl : "Lenke", InsertLink : "Sett inn/Rediger lenke", RemoveLink : "Fjern lenke", Anchor : "Sett inn/Rediger anker", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "Bilde", InsertImage : "Sett inn/Rediger bilde", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "Høyrejuster", BlockJustify : "Blokkjuster", DecreaseIndent : "Senk nivå", IncreaseIndent : "Øk nivå", +Blockquote : "Blockquote", //MISSING Undo : "Angre", Redo : "Gjør om", NumberedListLbl : "Numrert liste", @@ -103,20 +105,27 @@ SelectionField : "Dropdown meny", ImageButton : "Bildeknapp", FitWindow : "Maksimer størrelsen på redigeringsverktøyet", +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "Rediger lenke", CellCM : "Celle", RowCM : "Rader", ColumnCM : "Kolonne", -InsertRow : "Sett inn rad", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "Slett rader", -InsertColumn : "Sett inn kolonne", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "Slett kolonner", -InsertCell : "Sett inn celle", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "Slett celler", MergeCells : "Slå sammen celler", -SplitCell : "Splitt celler", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "Slett tabell", CellProperties : "Celleegenskaper", TableProperties : "Tabellegenskaper", @@ -134,7 +143,7 @@ SelectionFieldProp : "Dropdown menyegenskaper", TextareaProp : "Tekstfeltegenskaper", FormProp : "Skjemaegenskaper", -FontFormats : "Normal;Formatert;Adresse;Tittel 1;Tittel 2;Tittel 3;Tittel 4;Tittel 5;Tittel 6", //REVIEW : Check _getfontformat.html +FontFormats : "Normal;Formatert;Adresse;Tittel 1;Tittel 2;Tittel 3;Tittel 4;Tittel 5;Tittel 6;Normal (DIV)", // Alerts and Messages ProcessingXHTML : "Lager XHTML. Vennligst vent...", @@ -221,16 +230,16 @@ DlgLnkTargetTab : "Mål", DlgLnkType : "Lenketype", DlgLnkTypeURL : "URL", -DlgLnkTypeAnchor : "Lenke til bokmerke i teksten", -DlgLnkTypeEMail : "E-Post", +DlgLnkTypeAnchor : "Lenke til anker i teksten", +DlgLnkTypeEMail : "E-post", DlgLnkProto : "Protokoll", DlgLnkProtoOther : "", DlgLnkURL : "URL", DlgLnkAnchorSel : "Velg ett anker", DlgLnkAnchorByName : "Anker etter navn", DlgLnkAnchorById : "Element etter ID", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) -DlgLnkEMail : "E-Post Addresse", +DlgLnkNoAnchors : "(Ingen anker i dokumentet)", +DlgLnkEMail : "E-postadresse", DlgLnkEMailSubject : "Meldingsemne", DlgLnkEMailBody : "Melding", DlgLnkUpload : "Last opp", @@ -287,7 +296,7 @@ DlgTableAlignLeft : "Venstre", DlgTableAlignCenter : "Midtjuster", DlgTableAlignRight : "Høyre", DlgTableWidth : "Bredde", -DlgTableWidthPx : "pixler", +DlgTableWidthPx : "piksler", DlgTableWidthPc : "prosent", DlgTableHeight : "Høyde", DlgTableCellSpace : "Celle marg", @@ -296,9 +305,9 @@ DlgTableCaption : "Tittel", DlgTableSummary : "Sammendrag", // Table Cell Dialog -DlgCellTitle : "Celle egenskaper", +DlgCellTitle : "Celleegenskaper", DlgCellWidth : "Bredde", -DlgCellWidthPx : "pixeler", +DlgCellWidthPx : "piksler", DlgCellWidthPc : "prosent", DlgCellHeight : "Høyde", DlgCellWordWrap : "Tekstbrytning", @@ -322,6 +331,9 @@ DlgCellBackColor : "Bakgrunnsfarge", DlgCellBorderColor : "Rammefarge", DlgCellBtnSelect : "Velg...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "Finn", DlgFindFindBtn : "Finn", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Vennligst lim inn i den følgende boksen med tastaturet (", +DlgGenNotSet : "", DlgGenId : "Id", DlgGenLangDir : "Kierunek tekstu", DlgGenLangDirLtr : "Od lewej do prawej (LTR)", @@ -169,17 +178,17 @@ DlgGenLangCode : "Kod języka", DlgGenAccessKey : "Klawisz dostępu", DlgGenName : "Nazwa", DlgGenTabIndex : "Indeks tabeli", -DlgGenLongDescr : "Long Description URL", -DlgGenClass : "Stylesheet Classes", -DlgGenTitle : "Advisory Title", -DlgGenContType : "Advisory Content Type", -DlgGenLinkCharset : "Linked Resource Charset", +DlgGenLongDescr : "Długi opis hiperłącza", +DlgGenClass : "Nazwa klasy CSS", +DlgGenTitle : "Opis obiektu docelowego", +DlgGenContType : "Typ MIME obiektu docelowego", +DlgGenLinkCharset : "Kodowanie znaków obiektu docelowego", DlgGenStyle : "Styl", // Image Dialog DlgImgTitle : "Właściwości obrazka", DlgImgInfoTab : "Informacje o obrazku", -DlgImgBtnUpload : "Syślij", +DlgImgBtnUpload : "Wyślij", DlgImgURL : "Adres URL", DlgImgUpload : "Wyślij", DlgImgAlt : "Tekst zastępczy", @@ -202,7 +211,7 @@ DlgImgAlignTextTop : "Do góry tekstu", DlgImgAlignTop : "Do góry", DlgImgPreview : "Podgląd", DlgImgAlertUrl : "Podaj adres obrazka.", -DlgImgLinkTab : "Link", +DlgImgLinkTab : "Hiperłącze", // Flash Dialog DlgFlashTitle : "Właściwości elementu Flash", @@ -229,11 +238,11 @@ DlgLnkURL : "Adres URL", DlgLnkAnchorSel : "Wybierz etykietę", DlgLnkAnchorByName : "Wg etykiety", DlgLnkAnchorById : "Wg identyfikatora elementu", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(W dokumencie nie zdefiniowano żadnych etykiet)", DlgLnkEMail : "Adres e-mail", DlgLnkEMailSubject : "Temat", DlgLnkEMailBody : "Treść", -DlgLnkUpload : "Upload", +DlgLnkUpload : "Wyślij", DlgLnkBtnUpload : "Wyślij", DlgLnkTarget : "Cel", @@ -262,7 +271,7 @@ DlgLnkPopTop : "Pozycja w pionie", DlnLnkMsgNoUrl : "Podaj adres URL", DlnLnkMsgNoEMail : "Podaj adres e-mail", DlnLnkMsgNoAnchor : "Wybierz etykietę", -DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING +DlnLnkMsgInvPopName : "Nazwa wyskakującego okienka musi zaczynać się od znaku alfanumerycznego i nie może zawierać spacji", // Color Dialog DlgColorTitle : "Wybierz kolor", @@ -322,6 +331,9 @@ DlgCellBackColor : "Kolor tła", DlgCellBorderColor : "Kolor ramki", DlgCellBtnSelect : "Wybierz...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Znajdź i zamień", + // Find Dialog DlgFindTitle : "Znajdź", DlgFindFindBtn : "Znajdź", @@ -344,10 +356,9 @@ PasteAsText : "Wklej jako czysty tekst", PasteFromWord : "Wklej z Worda", DlgPasteMsg2 : "Proszę wkleić w poniższym polu używając klawiaturowego skrótu (Ctrl+V) i kliknąć OK.", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteSec : "Zabezpieczenia przeglądarki uniemożliwiają wklejenie danych bezpośrednio do edytora. Proszę dane wkleić ponownie w tym okienku.", DlgPasteIgnoreFont : "Ignoruj definicje 'Font Face'", DlgPasteRemoveStyles : "Usuń definicje Stylów", -DlgPasteCleanBox : "Wyczyść", // Color Picker ColorAutomatic : "Automatycznie", @@ -368,7 +379,7 @@ DlgSpellBtnIgnore : "Ignoruj", DlgSpellBtnIgnoreAll : "Ignoruj wszystkie", DlgSpellBtnReplace : "Zmień", DlgSpellBtnReplaceAll : "Zmień wszystkie", -DlgSpellBtnUndo : "Undo", +DlgSpellBtnUndo : "Cofnij", DlgSpellNoSuggestions : "- Brak sugestii -", DlgSpellProgress : "Trwa sprawdzanie ...", DlgSpellNoMispell : "Sprawdzanie zakończone: nie znaleziono błędów", @@ -381,14 +392,14 @@ IeSpellDownload : "Słownik nie jest zainstalowany. Chcesz go ściągnąć?", // Button Dialog DlgButtonText : "Tekst (Wartość)", DlgButtonType : "Typ", -DlgButtonTypeBtn : "Button", //MISSING -DlgButtonTypeSbm : "Submit", //MISSING -DlgButtonTypeRst : "Reset", //MISSING +DlgButtonTypeBtn : "Przycisk", +DlgButtonTypeSbm : "Wyślij", +DlgButtonTypeRst : "Wyzeruj", // Checkbox and Radio Button Dialogs DlgCheckboxName : "Nazwa", DlgCheckboxValue : "Wartość", -DlgCheckboxSelected : "Zaznaczony", +DlgCheckboxSelected : "Zaznaczone", // Form Dialog DlgFormName : "Nazwa", @@ -432,7 +443,7 @@ DlgHiddenValue : "Wartość", // Bulleted List Dialog BulletedListProp : "Właściwości listy punktowanej", NumberedListProp : "Właściwości listy numerowanej", -DlgLstStart : "Start", //MISSING +DlgLstStart : "Początek", DlgLstType : "Typ", DlgLstTypeCircle : "Koło", DlgLstTypeDisc : "Dysk", @@ -455,18 +466,18 @@ DlgDocLangDirLTR : "Od lewej do prawej (LTR)", DlgDocLangDirRTL : "Od prawej do lewej (RTL)", DlgDocLangCode : "Kod języka", DlgDocCharSet : "Kodowanie znaków", -DlgDocCharSetCE : "Central European", //MISSING -DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING -DlgDocCharSetCR : "Cyrillic", //MISSING -DlgDocCharSetGR : "Greek", //MISSING -DlgDocCharSetJP : "Japanese", //MISSING -DlgDocCharSetKR : "Korean", //MISSING -DlgDocCharSetTR : "Turkish", //MISSING -DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING -DlgDocCharSetWE : "Western European", //MISSING +DlgDocCharSetCE : "Środkowoeuropejskie", +DlgDocCharSetCT : "Chińskie tradycyjne (Big5)", +DlgDocCharSetCR : "Cyrylica", +DlgDocCharSetGR : "Greckie", +DlgDocCharSetJP : "Japońskie", +DlgDocCharSetKR : "Koreańskie", +DlgDocCharSetTR : "Tureckie", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Zachodnioeuropejskie", DlgDocCharSetOther : "Inne kodowanie znaków", -DlgDocDocType : "Nagłowek typu dokumentu", +DlgDocDocType : "Nagłówek typu dokumentu", DlgDocDocTypeOther : "Inny typ dokumentu", DlgDocIncXHTML : "Dołącz deklarację XHTML", DlgDocBgColor : "Kolor tła", @@ -484,7 +495,7 @@ DlgDocMaBottom : "Dolny", DlgDocMeIndex : "Słowa kluczowe (oddzielone przecinkami)", DlgDocMeDescr : "Opis dokumentu", DlgDocMeAuthor : "Autor", -DlgDocMeCopy : "Copyright", +DlgDocMeCopy : "Prawa autorskie", DlgDocPreview : "Podgląd", // Templates Dialog @@ -493,7 +504,7 @@ DlgTemplatesTitle : "Szablony zawartości", DlgTemplatesSelMsg : "Wybierz szablon do otwarcia w edytorze
    (obecna zawartość okna edytora zostanie utracona):", DlgTemplatesLoading : "Ładowanie listy szablonów. Proszę czekać...", DlgTemplatesNoTpl : "(Brak zdefiniowanych szablonów)", -DlgTemplatesReplace : "Replace actual contents", //MISSING +DlgTemplatesReplace : "Zastąp aktualną zawartość", // About Dialog DlgAboutAboutTab : "O ...", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "O przeglądarce", DlgAboutLicenseTab : "Licencja", DlgAboutVersion : "wersja", DlgAboutInfo : "Więcej informacji uzyskasz pod adresem" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/pt-br.js b/phpgwapi/js/fckeditor/editor/lang/pt-br.js index 53a2b5ddd0..6d9509a025 100644 --- a/phpgwapi/js/fckeditor/editor/lang/pt-br.js +++ b/phpgwapi/js/fckeditor/editor/lang/pt-br.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Hiperlink", InsertLink : "Inserir/Editar Hiperlink", RemoveLink : "Remover Hiperlink", Anchor : "Inserir/Editar Âncora", +AnchorDelete : "Remover Âncora", InsertImageLbl : "Figura", InsertImage : "Inserir/Editar Figura", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "Alinhar Direita", BlockJustify : "Justificado", DecreaseIndent : "Diminuir Recuo", IncreaseIndent : "Aumentar Recuo", +Blockquote : "Recuo", Undo : "Desfazer", Redo : "Refazer", NumberedListLbl : "Numeração", @@ -103,20 +105,27 @@ SelectionField : "Caixa de Listagem", ImageButton : "Botão de Imagem", FitWindow : "Maximizar o tamanho do editor", +ShowBlocks : "Mostrar blocos", // Context Menu EditLink : "Editar Hiperlink", CellCM : "Célula", RowCM : "Linha", ColumnCM : "Coluna", -InsertRow : "Inserir Linha", +InsertRowAfter : "Inserir linha abaixo", +InsertRowBefore : "Inserir linha acima", DeleteRows : "Remover Linhas", -InsertColumn : "Inserir Coluna", +InsertColumnAfter : "Inserir coluna à direita", +InsertColumnBefore : "Inserir coluna à esquerda", DeleteColumns : "Remover Colunas", -InsertCell : "Inserir Células", +InsertCellAfter : "Inserir célula à direita", +InsertCellBefore : "Inserir célula à esquerda", DeleteCells : "Remover Células", MergeCells : "Mesclar Células", -SplitCell : "Dividir Célular", +MergeRight : "Mesclar com célula à direita", +MergeDown : "Mesclar com célula abaixo", +HorizontalSplitCell : "Dividir célula horizontalmente", +VerticalSplitCell : "Dividir célula verticalmente", TableDelete : "Apagar Tabela", CellProperties : "Formatar Célula", TableProperties : "Formatar Tabela", @@ -134,7 +143,7 @@ SelectionFieldProp : "Formatar Caixa de Listagem", TextareaProp : "Formatar Área de Texto", FormProp : "Formatar Formulário", -FontFormats : "Normal;Formatado;Endereço;Título 1;Título 2;Título 3;Título 4;Título 5;Título 6", //REVIEW : Check _getfontformat.html +FontFormats : "Normal;Formatado;Endereço;Título 1;Título 2;Título 3;Título 4;Título 5;Título 6", // Alerts and Messages ProcessingXHTML : "Processando XHTML. Por favor, aguarde...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL do hiperlink", DlgLnkAnchorSel : "Selecione uma âncora", DlgLnkAnchorByName : "Pelo Nome da âncora", DlgLnkAnchorById : "Pelo Id do Elemento", -DlgLnkNoAnchors : "(Não há âncoras disponíveis neste documento)", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Não há âncoras disponíveis neste documento)", DlgLnkEMail : "Endereço E-Mail", DlgLnkEMailSubject : "Assunto da Mensagem", DlgLnkEMailBody : "Corpo da Mensagem", @@ -322,6 +331,9 @@ DlgCellBackColor : "Cor do Plano de Fundo", DlgCellBorderColor : "Cor da Borda", DlgCellBtnSelect : "Selecionar...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Localizar e Substituir", + // Find Dialog DlgFindTitle : "Localizar...", DlgFindFindBtn : "Localizar", @@ -344,10 +356,9 @@ PasteAsText : "Colar como Texto sem Formatação", PasteFromWord : "Colar do Word", DlgPasteMsg2 : "Transfira o link usado no box usando o teclado com (Ctrl+V) e OK.", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteSec : "As configurações de segurança do seu navegador não permitem que o editor acesse os dados da área de transferência diretamente. Por favor cole o conteúdo novamente nesta janela.", DlgPasteIgnoreFont : "Ignorar definições de fonte", DlgPasteRemoveStyles : "Remove definições de estilo", -DlgPasteCleanBox : "Limpar Box", // Color Picker ColorAutomatic : "Automático", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "Informações do Navegador", DlgAboutLicenseTab : "Licença", DlgAboutVersion : "versão", DlgAboutInfo : "Para maiores informações visite" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/pt.js b/phpgwapi/js/fckeditor/editor/lang/pt.js index 23bab35d96..854d65456f 100644 --- a/phpgwapi/js/fckeditor/editor/lang/pt.js +++ b/phpgwapi/js/fckeditor/editor/lang/pt.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Hiperligação", InsertLink : "Inserir/Editar Hiperligação", RemoveLink : "Eliminar Hiperligação", Anchor : " Inserir/Editar Âncora", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "Imagem", InsertImage : "Inserir/Editar Imagem", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "Alinhar à Direita", BlockJustify : "Justificado", DecreaseIndent : "Diminuir Avanço", IncreaseIndent : "Aumentar Avanço", +Blockquote : "Blockquote", //MISSING Undo : "Anular", Redo : "Repetir", NumberedListLbl : "Numeração", @@ -103,20 +105,27 @@ SelectionField : "Caixa de Combinação", ImageButton : "Botão de Imagem", FitWindow : "Maximizar o tamanho do editor", +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "Editar Hiperligação", CellCM : "Célula", RowCM : "Linha", ColumnCM : "Coluna", -InsertRow : "Inserir Linha", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "Eliminar Linhas", -InsertColumn : "Inserir Coluna", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "Eliminar Coluna", -InsertCell : "Inserir Célula", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "Eliminar Célula", MergeCells : "Unir Células", -SplitCell : "Dividir Célula", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "Eliminar Tabela", CellProperties : "Propriedades da Célula", TableProperties : "Propriedades da Tabela", @@ -134,7 +143,7 @@ SelectionFieldProp : "Propriedades da Caixa de Combinação", TextareaProp : "Propriedades da Área de Texto", FormProp : "Propriedades do Formulário", -FontFormats : "Normal;Formatado;Endereço;Título 1;Título 2;Título 3;Título 4;Título 5;Título 6", //REVIEW : Check _getfontformat.html +FontFormats : "Normal;Formatado;Endereço;Título 1;Título 2;Título 3;Título 4;Título 5;Título 6", // Alerts and Messages ProcessingXHTML : "A Processar XHTML. Por favor, espere...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Seleccionar una referência", DlgLnkAnchorByName : "Por Nome de Referência", DlgLnkAnchorById : "Por ID de elemento", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Não há referências disponíveis no documento)", DlgLnkEMail : "Endereço de E-Mail", DlgLnkEMailSubject : "Título de Mensagem", DlgLnkEMailBody : "Corpo da Mensagem", @@ -322,6 +331,9 @@ DlgCellBackColor : "Cor do Fundo", DlgCellBorderColor : "Cor do Limite", DlgCellBtnSelect : "Seleccione...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "Procurar", DlgFindFindBtn : "Procurar", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Por favor, cole dentro da seguinte caixa usando o teclado (", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Nicio ancoră disponibilă în document)", DlgLnkEMail : "Adresă de e-mail", DlgLnkEMailSubject : "Subiectul mesajului", DlgLnkEMailBody : "Conţinutul mesajului", @@ -322,6 +331,9 @@ DlgCellBackColor : "Culoarea fundalului", DlgCellBorderColor : "Culoarea marginii", DlgCellBtnSelect : "Selectaţi...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Găseşte şi înlocuieşte", + // Find Dialog DlgFindTitle : "Găseşte", DlgFindFindBtn : "Găseşte", @@ -344,10 +356,9 @@ PasteAsText : "Adaugă ca text simplu (Plain Text)", PasteFromWord : "Adaugă din Word", DlgPasteMsg2 : "Vă rugăm adăugaţi în căsuţa următoare folosind tastatura (Ctrl+V) şi apăsaţi OK.", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteSec : "Din cauza setărilor de securitate ale programului dvs. cu care navigaţi pe internet (browser), editorul nu poate accesa direct datele din clipboard. Va trebui să adăugaţi din nou datele în această fereastră.", DlgPasteIgnoreFont : "Ignoră definiţiile Font Face", DlgPasteRemoveStyles : "Şterge definiţiile stilurilor", -DlgPasteCleanBox : "Şterge căsuţa", // Color Picker ColorAutomatic : "Automatic", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "Informaţii browser", DlgAboutLicenseTab : "Licenţă", DlgAboutVersion : "versiune", DlgAboutInfo : "Pentru informaţii amănunţite, vizitaţi" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/ru.js b/phpgwapi/js/fckeditor/editor/lang/ru.js index fdf151b901..b1491ea97c 100644 --- a/phpgwapi/js/fckeditor/editor/lang/ru.js +++ b/phpgwapi/js/fckeditor/editor/lang/ru.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Ссылка", InsertLink : "Вставить/Редактировать ссылку", RemoveLink : "Убрать ссылку", Anchor : "Вставить/Редактировать якорь", +AnchorDelete : "Убрать якорь", InsertImageLbl : "Изображение", InsertImage : "Вставить/Редактировать изображение", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "По правому краю", BlockJustify : "По ширине", DecreaseIndent : "Уменьшить отступ", IncreaseIndent : "Увеличить отступ", +Blockquote : "Цитата", Undo : "Отменить", Redo : "Повторить", NumberedListLbl : "Нумерованный список", @@ -103,20 +105,27 @@ SelectionField : "Список", ImageButton : "Кнопка с изображением", FitWindow : "Развернуть окно редактора", +ShowBlocks : "Показать блоки", // Context Menu EditLink : "Вставить ссылку", CellCM : "Ячейка", RowCM : "Строка", ColumnCM : "Колонка", -InsertRow : "Вставить строку", +InsertRowAfter : "Вставить строку после", +InsertRowBefore : "Вставить строку до", DeleteRows : "Удалить строки", -InsertColumn : "Вставить колонку", +InsertColumnAfter : "Вставить колонку после", +InsertColumnBefore : "Вставить колонку до", DeleteColumns : "Удалить колонки", -InsertCell : "Вставить ячейку", +InsertCellAfter : "Вставить ячейку после", +InsertCellBefore : "Вставить ячейку до", DeleteCells : "Удалить ячейки", MergeCells : "Соединить ячейки", -SplitCell : "Разбить ячейку", +MergeRight : "Соединить вправо", +MergeDown : "Соединить вниз", +HorizontalSplitCell : "Разбить ячейку горизонтально", +VerticalSplitCell : "Разбить ячейку вертикально", TableDelete : "Удалить таблицу", CellProperties : "Свойства ячейки", TableProperties : "Свойства таблицы", @@ -134,10 +143,10 @@ SelectionFieldProp : "Свойства списка", TextareaProp : "Свойства текстовой области", FormProp : "Свойства формы", -FontFormats : "Нормальный;Форматированный;Адрес;Заголовок 1;Заголовок 2;Заголовок 3;Заголовок 4;Заголовок 5;Заголовок 6;Нормальный (DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "Нормальный;Форматированный;Адрес;Заголовок 1;Заголовок 2;Заголовок 3;Заголовок 4;Заголовок 5;Заголовок 6;Нормальный (DIV)", // Alerts and Messages -ProcessingXHTML : "Обработка XHTML. Пожалуйста подождите...", +ProcessingXHTML : "Обработка XHTML. Пожалуйста, подождите...", Done : "Сделано", PasteWordConfirm : "Текст, который вы хотите вставить, похож на копируемый из Word. Вы хотите очистить его перед вставкой?", NotCompatiblePaste : "Эта команда доступна для Internet Explorer версии 5.5 или выше. Вы хотите вставить без очистки?", @@ -147,7 +156,7 @@ NotImplemented : "Команда не реализована", UnknownToolbarSet : "Панель инструментов \"%1\" не существует", NoActiveX : "Настройки безопасности вашего браузера могут ограничивать некоторые свойства редактора. Вы должны включить опцию \"Запускать элементы управления ActiveX и плугины\". Вы можете видеть ошибки и замечать отсутствие возможностей.", BrowseServerBlocked : "Ресурсы браузера не могут быть открыты. Проверьте что блокировки всплывающих окон выключены.", -DialogBlocked : "Не возможно открыть окно диалога. Проверьте что блокировки всплывающих окон выключены.", +DialogBlocked : "Невозможно открыть окно диалога. Проверьте что блокировки всплывающих окон выключены.", // Dialogs DlgBtnOK : "ОК", @@ -157,7 +166,7 @@ DlgBtnBrowseServer : "Просмотреть на сервере", DlgAdvancedTag : "Расширенный", DlgOpOther : "<Другое>", DlgInfoTab : "Информация", -DlgAlertUrl : "Пожалуйста вставьте URL", +DlgAlertUrl : "Пожалуйста, вставьте URL", // General Dialogs Labels DlgGenNotSet : "<не определено>", @@ -201,7 +210,7 @@ DlgImgAlignRight : "По правому краю", DlgImgAlignTextTop : "Текст наверху", DlgImgAlignTop : "По верху", DlgImgPreview : "Предварительный просмотр", -DlgImgAlertUrl : "Пожалуйста введите URL изображения", +DlgImgAlertUrl : "Пожалуйста, введите URL изображения", DlgImgLinkTab : "Ссылка", // Flash Dialog @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Выберите якорь", DlgLnkAnchorByName : "По имени якоря", DlgLnkAnchorById : "По идентификатору элемента", -DlgLnkNoAnchors : "<Нет якорей доступных в этом документе>", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Нет якорей доступных в этом документе)", DlgLnkEMail : "Адрес эл. почты", DlgLnkEMailSubject : "Заголовок сообщения", DlgLnkEMailBody : "Тело сообщения", @@ -259,9 +268,9 @@ DlgLnkPopHeight : "Высота", DlgLnkPopLeft : "Позиция слева", DlgLnkPopTop : "Позиция сверху", -DlnLnkMsgNoUrl : "Пожалуйста введите URL ссылки", -DlnLnkMsgNoEMail : "Пожалуйста введите адрес эл. почты", -DlnLnkMsgNoAnchor : "Пожалуйста выберете якорь", +DlnLnkMsgNoUrl : "Пожалуйста, введите URL ссылки", +DlnLnkMsgNoEMail : "Пожалуйста, введите адрес эл. почты", +DlnLnkMsgNoAnchor : "Пожалуйста, выберете якорь", DlnLnkMsgInvPopName : "Название вспывающего окна должно начинаться буквы и не может содержать пробелов", // Color Dialog @@ -322,6 +331,9 @@ DlgCellBackColor : "Цвет фона", DlgCellBorderColor : "Цвет бордюра", DlgCellBtnSelect : "Выберите...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Найти и заменить", + // Find Dialog DlgFindTitle : "Найти", DlgFindFindBtn : "Найти", @@ -337,17 +349,16 @@ DlgReplaceReplAllBtn : "Заменить все", DlgReplaceWordChk : "Совпадение целых слов", // Paste Operations / Dialog -PasteErrorCut : "Настройки безопасности вашего браузера не позволяют редактору автоматически выполнять операции вырезания. Пожалуйста используйте клавиатуру для этого (Ctrl+X).", -PasteErrorCopy : "Настройки безопасности вашего браузера не позволяют редактору автоматически выполнять операции копирования. Пожалуйста используйте клавиатуру для этого (Ctrl+C).", +PasteErrorCut : "Настройки безопасности вашего браузера не позволяют редактору автоматически выполнять операции вырезания. Пожалуйста, используйте клавиатуру для этого (Ctrl+X).", +PasteErrorCopy : "Настройки безопасности вашего браузера не позволяют редактору автоматически выполнять операции копирования. Пожалуйста, используйте клавиатуру для этого (Ctrl+C).", PasteAsText : "Вставить только текст", PasteFromWord : "Вставить из Word", -DlgPasteMsg2 : "Пожалуйста вставьте текст в прямоугольник используя сочетание клавиш (Ctrl+V) и нажмите OK.", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteMsg2 : "Пожалуйста, вставьте текст в прямоугольник, используя сочетание клавиш (Ctrl+V), и нажмите OK.", +DlgPasteSec : "По причине настроек безопасности браузера, редактор не имеет доступа к данным буфера обмена напрямую. Вам необходимо вставить текст снова в это окно.", DlgPasteIgnoreFont : "Игнорировать определения гарнитуры", DlgPasteRemoveStyles : "Убрать определения стилей", -DlgPasteCleanBox : "Очистить", // Color Picker ColorAutomatic : "Автоматический", @@ -359,7 +370,7 @@ DocProps : "Свойства документа", // Anchor Dialog DlgAnchorTitle : "Свойства якоря", DlgAnchorName : "Имя якоря", -DlgAnchorErrorName : "Пожалуйста введите имя якоря", +DlgAnchorErrorName : "Пожалуйста, введите имя якоря", // Speller Pages Dialog DlgSpellNotInDic : "Нет в словаре", @@ -451,8 +462,8 @@ DlgDocMetaTab : "Мета данные", DlgDocPageTitle : "Заголовок страницы", DlgDocLangDir : "Направление текста", -DlgDocLangDirLTR : "Слева на право (LTR)", -DlgDocLangDirRTL : "Справа на лево (RTL)", +DlgDocLangDirLTR : "Слева направо (LTR)", +DlgDocLangDirRTL : "Справа налево (RTL)", DlgDocLangCode : "Код языка", DlgDocCharSet : "Кодировка набора символов", DlgDocCharSetCE : "Центрально-европейская", @@ -490,8 +501,8 @@ DlgDocPreview : "Предварительный просмотр", // Templates Dialog Templates : "Шаблоны", DlgTemplatesTitle : "Шаблоны содержимого", -DlgTemplatesSelMsg : "Пожалуйста выберете шаблон для открытия в редакторе
    (текущее содержимое будет потеряно):", -DlgTemplatesLoading : "Загрузка списка шаблонов. Пожалуйста подождите...", +DlgTemplatesSelMsg : "Пожалуйста, выберете шаблон для открытия в редакторе
    (текущее содержимое будет потеряно):", +DlgTemplatesLoading : "Загрузка списка шаблонов. Пожалуйста, подождите...", DlgTemplatesNoTpl : "(Ни одного шаблона не определено)", DlgTemplatesReplace : "Заменить текущее содержание", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "Информация браузера", DlgAboutLicenseTab : "Лицензия", DlgAboutVersion : "Версия", DlgAboutInfo : "Для большей информации, посетите" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/sk.js b/phpgwapi/js/fckeditor/editor/lang/sk.js index 83d00bac34..40c62c7c9b 100644 --- a/phpgwapi/js/fckeditor/editor/lang/sk.js +++ b/phpgwapi/js/fckeditor/editor/lang/sk.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Odkaz", InsertLink : "Vložiť/zmeniť odkaz", RemoveLink : "Odstrániť odkaz", Anchor : "Vložiť/zmeniť kotvu", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "Obrázok", InsertImage : "Vložiť/zmeniť obrázok", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "Zarovnať vpravo", BlockJustify : "Zarovnať do bloku", DecreaseIndent : "Zmenšiť odsadenie", IncreaseIndent : "Zväčšiť odsadenie", +Blockquote : "Blockquote", //MISSING Undo : "Späť", Redo : "Znovu", NumberedListLbl : "Číslovanie", @@ -103,20 +105,27 @@ SelectionField : "Rozbaľovací zoznam", ImageButton : "Obrázkové tlačidlo", FitWindow : "Maximalizovať veľkosť okna editora", +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "Zmeniť odkaz", CellCM : "Bunka", RowCM : "Riadok", ColumnCM : "Stĺpec", -InsertRow : "Vložiť riadok", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "Vymazať riadok", -InsertColumn : "Vložiť stĺpec", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "Zmazať stĺpec", -InsertCell : "Vložiť bunku", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "Vymazať bunky", MergeCells : "Zlúčiť bunky", -SplitCell : "Rozdeliť bunku", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "Vymazať tabuľku", CellProperties : "Vlastnosti bunky", TableProperties : "Vlastnosti tabuľky", @@ -134,7 +143,7 @@ SelectionFieldProp : "Vlastnosti rozbaľovacieho zoznamu", TextareaProp : "Vlastnosti textovej oblasti", FormProp : "Vlastnosti formulára", -FontFormats : "Normálny;Formátovaný;Adresa;Nadpis 1;Nadpis 2;Nadpis 3;Nadpis 4;Nadpis 5;Nadpis 6;Odsek (DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "Normálny;Formátovaný;Adresa;Nadpis 1;Nadpis 2;Nadpis 3;Nadpis 4;Nadpis 5;Nadpis 6;Odsek (DIV)", // Alerts and Messages ProcessingXHTML : "Prebieha spracovanie XHTML. Čakajte prosím...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Vybrať kotvu", DlgLnkAnchorByName : "Podľa mena kotvy", DlgLnkAnchorById : "Podľa Id objektu", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(V stránke nie je definovaná žiadna kotva)", DlgLnkEMail : "E-Mailová adresa", DlgLnkEMailSubject : "Predmet správy", DlgLnkEMailBody : "Telo správy", @@ -322,6 +331,9 @@ DlgCellBackColor : "Farba pozadia", DlgCellBorderColor : "Farba ohraničenia", DlgCellBtnSelect : "Výber...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "Hľadať", DlgFindFindBtn : "Hľadať", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Prosím vložte nasledovný rámček použitím klávesnice (", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(V tem dokumentu ni zaznamkov)", DlgLnkEMail : "Elektronski naslov", DlgLnkEMailSubject : "Predmet sporočila", DlgLnkEMailBody : "Vsebina sporočila", @@ -262,7 +271,7 @@ DlgLnkPopTop : "Lega na vrhu", DlnLnkMsgNoUrl : "Vnesite URL povezave", DlnLnkMsgNoEMail : "Vnesite elektronski naslov", DlnLnkMsgNoAnchor : "Izberite zaznamek", -DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING +DlnLnkMsgInvPopName : "Ime pojavnega okna se mora začeti s črko ali številko in ne sme vsebovati presledkov", // Color Dialog DlgColorTitle : "Izberite barvo", @@ -322,6 +331,9 @@ DlgCellBackColor : "Barva ozadja", DlgCellBorderColor : "Barva obrobe", DlgCellBtnSelect : "Izberi...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Najdi in zamenjaj", + // Find Dialog DlgFindTitle : "Najdi", DlgFindFindBtn : "Najdi", @@ -344,10 +356,9 @@ PasteAsText : "Prilepi kot golo besedilo", PasteFromWord : "Prilepi iz Worda", DlgPasteMsg2 : "Prosim prilepite v sleči okvir s pomočjo tipkovnice (Ctrl+V) in pritisnite V redu.", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteSec : "Zaradi varnostnih nastavitev vašega brskalnika urejevalnik ne more neposredno dostopati do odložišča. Vsebino odložišča ponovno prilepite v to okno.", DlgPasteIgnoreFont : "Prezri obliko pisave", DlgPasteRemoveStyles : "Odstrani nastavitve stila", -DlgPasteCleanBox : "Počisti okvir", // Color Picker ColorAutomatic : "Samodejno", @@ -381,9 +392,9 @@ IeSpellDownload : "Črkovalnik ni nameščen. Ali ga želite prenesti sedaj?", // Button Dialog DlgButtonText : "Besedilo (Vrednost)", DlgButtonType : "Tip", -DlgButtonTypeBtn : "Button", //MISSING -DlgButtonTypeSbm : "Submit", //MISSING -DlgButtonTypeRst : "Reset", //MISSING +DlgButtonTypeBtn : "Gumb", +DlgButtonTypeSbm : "Potrdi", +DlgButtonTypeRst : "Ponastavi", // Checkbox and Radio Button Dialogs DlgCheckboxName : "Ime", @@ -432,7 +443,7 @@ DlgHiddenValue : "Vrednost", // Bulleted List Dialog BulletedListProp : "Lastnosti označenega seznama", NumberedListProp : "Lastnosti oštevilčenega seznama", -DlgLstStart : "Start", //MISSING +DlgLstStart : "Začetek", DlgLstType : "Tip", DlgLstTypeCircle : "Pikica", DlgLstTypeDisc : "Kroglica", @@ -455,15 +466,15 @@ DlgDocLangDirLTR : "Od leve proti desni (LTR)", DlgDocLangDirRTL : "Od desne proti levi (RTL)", DlgDocLangCode : "Oznaka jezika", DlgDocCharSet : "Kodna tabela", -DlgDocCharSetCE : "Central European", //MISSING -DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING -DlgDocCharSetCR : "Cyrillic", //MISSING -DlgDocCharSetGR : "Greek", //MISSING -DlgDocCharSetJP : "Japanese", //MISSING -DlgDocCharSetKR : "Korean", //MISSING -DlgDocCharSetTR : "Turkish", //MISSING -DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING -DlgDocCharSetWE : "Western European", //MISSING +DlgDocCharSetCE : "Srednjeevropsko", +DlgDocCharSetCT : "Tradicionalno Kitajsko (Big5)", +DlgDocCharSetCR : "Cirilica", +DlgDocCharSetGR : "Grško", +DlgDocCharSetJP : "Japonsko", +DlgDocCharSetKR : "Korejsko", +DlgDocCharSetTR : "Turško", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Zahodnoevropsko", DlgDocCharSetOther : "Druga kodna tabela", DlgDocDocType : "Glava tipa dokumenta", @@ -493,12 +504,12 @@ DlgTemplatesTitle : "Vsebinske predloge", DlgTemplatesSelMsg : "Izberite predlogo, ki jo želite odpreti v urejevalniku
    (trenutna vsebina bo izgubljena):", DlgTemplatesLoading : "Nalagam seznam predlog. Prosim počakajte...", DlgTemplatesNoTpl : "(Ni pripravljenih predlog)", -DlgTemplatesReplace : "Replace actual contents", //MISSING +DlgTemplatesReplace : "Zamenjaj trenutno vsebino", // About Dialog DlgAboutAboutTab : "Vizitka", DlgAboutBrowserInfoTab : "Informacije o brskalniku", -DlgAboutLicenseTab : "License", //MISSING +DlgAboutLicenseTab : "Dovoljenja", DlgAboutVersion : "različica", DlgAboutInfo : "Za več informacij obiščite" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/sr-latn.js b/phpgwapi/js/fckeditor/editor/lang/sr-latn.js index 5fa8154e10..08a8e8d01c 100644 --- a/phpgwapi/js/fckeditor/editor/lang/sr-latn.js +++ b/phpgwapi/js/fckeditor/editor/lang/sr-latn.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Link", InsertLink : "Unesi/izmeni link", RemoveLink : "Ukloni link", Anchor : "Unesi/izmeni sidro", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "Slika", InsertImage : "Unesi/izmeni sliku", InsertFlashLbl : "Fleš", @@ -70,6 +71,7 @@ RightJustify : "Desno ravnanje", BlockJustify : "Obostrano ravnanje", DecreaseIndent : "Smanji levu marginu", IncreaseIndent : "Uvećaj levu marginu", +Blockquote : "Blockquote", //MISSING Undo : "Poni�ti akciju", Redo : "Ponovi akciju", NumberedListLbl : "Nabrojiva lista", @@ -103,20 +105,27 @@ SelectionField : "Izborno polje", ImageButton : "Dugme sa slikom", FitWindow : "Maximize the editor size", //MISSING +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "Izmeni link", CellCM : "Cell", //MISSING RowCM : "Row", //MISSING ColumnCM : "Column", //MISSING -InsertRow : "Unesi red", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "Obriši redove", -InsertColumn : "Unesi kolonu", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "Obriši kolone", -InsertCell : "Unesi ćelije", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "Obriši ćelije", MergeCells : "Spoj celije", -SplitCell : "Razdvoji celije", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "Delete Table", //MISSING CellProperties : "Osobine celije", TableProperties : "Osobine tabele", @@ -134,7 +143,7 @@ SelectionFieldProp : "Osobine izbornog polja", TextareaProp : "Osobine zone teksta", FormProp : "Osobine forme", -FontFormats : "Normal;Formatirano;Adresa;Naslov 1;Naslov 2;Naslov 3;Naslov 4;Naslov 5;Naslov 6", //REVIEW : Check _getfontformat.html +FontFormats : "Normal;Formatirano;Adresa;Naslov 1;Naslov 2;Naslov 3;Naslov 4;Naslov 5;Naslov 6", // Alerts and Messages ProcessingXHTML : "Obradujem XHTML. Malo strpljenja...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Odaberi sidro", DlgLnkAnchorByName : "Po nazivu sidra", DlgLnkAnchorById : "Po Id-ju elementa", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Nema dostupnih sidra)", DlgLnkEMail : "E-Mail adresa", DlgLnkEMailSubject : "Naslov", DlgLnkEMailBody : "Sadržaj poruke", @@ -322,6 +331,9 @@ DlgCellBackColor : "Boja pozadine", DlgCellBorderColor : "Boja okvira", DlgCellBtnSelect : "Odaberi...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "Pronađi", DlgFindFindBtn : "Pronađi", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Molimo Vas da zalepite unutar donje povrine koristeći tastaturn DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING DlgPasteIgnoreFont : "Ignoriši definicije fontova", DlgPasteRemoveStyles : "Ukloni definicije stilova", -DlgPasteCleanBox : "Obriši sve", // Color Picker ColorAutomatic : "Automatski", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "Informacije o pretraživacu", DlgAboutLicenseTab : "License", //MISSING DlgAboutVersion : "verzija", DlgAboutInfo : "Za više informacija posetite" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/sr.js b/phpgwapi/js/fckeditor/editor/lang/sr.js index e7aac2311e..96361c646d 100644 --- a/phpgwapi/js/fckeditor/editor/lang/sr.js +++ b/phpgwapi/js/fckeditor/editor/lang/sr.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Линк", InsertLink : "Унеси/измени линк", RemoveLink : "Уклони линк", Anchor : "Унеси/измени сидро", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "Слика", InsertImage : "Унеси/измени слику", InsertFlashLbl : "Флеш елемент", @@ -70,6 +71,7 @@ RightJustify : "Десно равнање", BlockJustify : "Обострано равнање", DecreaseIndent : "Смањи леву маргину", IncreaseIndent : "Увећај леву маргину", +Blockquote : "Blockquote", //MISSING Undo : "Поништи акцију", Redo : "Понови акцију", NumberedListLbl : "Набројиву листу", @@ -103,20 +105,27 @@ SelectionField : "Изборно поље", ImageButton : "Дугме са сликом", FitWindow : "Maximize the editor size", //MISSING +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "Промени линк", CellCM : "Cell", //MISSING RowCM : "Row", //MISSING ColumnCM : "Column", //MISSING -InsertRow : "Унеси ред", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "Обриши редове", -InsertColumn : "Унеси колону", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "Обриши колоне", -InsertCell : "Унеси ћелије", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "Обриши ћелије", MergeCells : "Спој ћелије", -SplitCell : "Раздвоји ћелије", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "Delete Table", //MISSING CellProperties : "Особине ћелије", TableProperties : "Особине табеле", @@ -134,7 +143,7 @@ SelectionFieldProp : "Особине изборног поља", TextareaProp : "Особине зоне текста", FormProp : "Особине форме", -FontFormats : "Normal;Formatirano;Adresa;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6", //REVIEW : Check _getfontformat.html +FontFormats : "Normal;Formatirano;Adresa;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6", // Alerts and Messages ProcessingXHTML : "Обрађујем XHTML. Maлo стрпљења...", @@ -229,7 +238,7 @@ DlgLnkURL : "УРЛ", DlgLnkAnchorSel : "Одабери сидро", DlgLnkAnchorByName : "По називу сидра", DlgLnkAnchorById : "Пo Ид-jу елемента", -DlgLnkNoAnchors : "<Нема доступних сидра>", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Нема доступних сидра)", DlgLnkEMail : "Адреса електронске поште", DlgLnkEMailSubject : "Наслов", DlgLnkEMailBody : "Садржај поруке", @@ -322,6 +331,9 @@ DlgCellBackColor : "Боја позадине", DlgCellBorderColor : "Боја оквира", DlgCellBtnSelect : "Oдабери...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "Пронађи", DlgFindFindBtn : "Пронађи", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Молимо Вас да залепите унутар доње DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING DlgPasteIgnoreFont : "Игнориши Font Face дефиниције", DlgPasteRemoveStyles : "Уклони дефиниције стилова", -DlgPasteCleanBox : "Обриши све", // Color Picker ColorAutomatic : "Аутоматски", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "Информације о претраживачу", DlgAboutLicenseTab : "License", //MISSING DlgAboutVersion : "верзија", DlgAboutInfo : "За више информација посетите" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/sv.js b/phpgwapi/js/fckeditor/editor/lang/sv.js index 3965029756..e3f0e71639 100644 --- a/phpgwapi/js/fckeditor/editor/lang/sv.js +++ b/phpgwapi/js/fckeditor/editor/lang/sv.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Länk", InsertLink : "Infoga/Redigera länk", RemoveLink : "Radera länk", Anchor : "Infoga/Redigera ankarlänk", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "Bild", InsertImage : "Infoga/Redigera bild", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "Högerjustera", BlockJustify : "Justera till marginaler", DecreaseIndent : "Minska indrag", IncreaseIndent : "Öka indrag", +Blockquote : "Blockquote", //MISSING Undo : "Ångra", Redo : "Gör om", NumberedListLbl : "Numrerad lista", @@ -102,21 +104,28 @@ Button : "Knapp", SelectionField : "Flervalslista", ImageButton : "Bildknapp", -FitWindow : "Maximize the editor size", //MISSING +FitWindow : "Anpassa till fönstrets storlek", +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "Redigera länk", -CellCM : "Cell", //MISSING -RowCM : "Row", //MISSING -ColumnCM : "Column", //MISSING -InsertRow : "Infoga rad", +CellCM : "Cell", +RowCM : "Rad", +ColumnCM : "Kolumn", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "Radera rad", -InsertColumn : "Infoga kolumn", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "Radera kolumn", -InsertCell : "Infoga cell", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "Radera celler", MergeCells : "Sammanfoga celler", -SplitCell : "Separera celler", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "Radera tabell", CellProperties : "Cellegenskaper", TableProperties : "Tabellegenskaper", @@ -134,7 +143,7 @@ SelectionFieldProp : "Egenskaper för flervalslista", TextareaProp : "Egenskaper för textruta", FormProp : "Egenskaper för formulär", -FontFormats : "Normal;Formaterad;Adress;Rubrik 1;Rubrik 2;Rubrik 3;Rubrik 4;Rubrik 5;Rubrik 6", //REVIEW : Check _getfontformat.html +FontFormats : "Normal;Formaterad;Adress;Rubrik 1;Rubrik 2;Rubrik 3;Rubrik 4;Rubrik 5;Rubrik 6;Normal (DIV)", // Alerts and Messages ProcessingXHTML : "Bearbetar XHTML. Var god vänta...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Välj ett ankare", DlgLnkAnchorByName : "efter ankarnamn", DlgLnkAnchorById : "efter objektid", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Inga ankare kunde hittas)", DlgLnkEMail : "E-postadress", DlgLnkEMailSubject : "Ämne", DlgLnkEMailBody : "Innehåll", @@ -262,7 +271,7 @@ DlgLnkPopTop : "Position från sidans topp", DlnLnkMsgNoUrl : "Var god ange länkens URL", DlnLnkMsgNoEMail : "Var god ange E-postadress", DlnLnkMsgNoAnchor : "Var god ange ett ankare", -DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING +DlnLnkMsgInvPopName : "Popup-rutans namn måste börja med en alfabetisk bokstav och får inte innehålla mellanslag", // Color Dialog DlgColorTitle : "Välj färg", @@ -322,6 +331,9 @@ DlgCellBackColor : "Bakgrundsfärg", DlgCellBorderColor : "Kantfärg", DlgCellBtnSelect : "Välj...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "Sök", DlgFindFindBtn : "Sök", @@ -344,10 +356,9 @@ PasteAsText : "Klistra in som vanlig text", PasteFromWord : "Klistra in från Word", DlgPasteMsg2 : "Var god och klistra in Er text i rutan nedan genom att använda (Ctrl+V) klicka sen på OK.", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteSec : "På grund av din webläsares säkerhetsinställningar kan verktyget inte få åtkomst till urklippsdatan. Var god och använd detta fönster istället.", DlgPasteIgnoreFont : "Ignorera typsnittsdefinitioner", DlgPasteRemoveStyles : "Radera Stildefinitioner", -DlgPasteCleanBox : "Töm rutans innehåll", // Color Picker ColorAutomatic : "Automatisk", @@ -381,9 +392,9 @@ IeSpellDownload : "Stavningskontrollen är ej installerad. Vill du göra det n // Button Dialog DlgButtonText : "Text (Värde)", DlgButtonType : "Typ", -DlgButtonTypeBtn : "Button", //MISSING -DlgButtonTypeSbm : "Submit", //MISSING -DlgButtonTypeRst : "Reset", //MISSING +DlgButtonTypeBtn : "Knapp", +DlgButtonTypeSbm : "Skicka", +DlgButtonTypeRst : "Återställ", // Checkbox and Radio Button Dialogs DlgCheckboxName : "Namn", @@ -455,15 +466,15 @@ DlgDocLangDirLTR : "Vänster till Höger", DlgDocLangDirRTL : "Höger till Vänster", DlgDocLangCode : "Språkkod", DlgDocCharSet : "Teckenuppsättningar", -DlgDocCharSetCE : "Central European", //MISSING -DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING -DlgDocCharSetCR : "Cyrillic", //MISSING -DlgDocCharSetGR : "Greek", //MISSING -DlgDocCharSetJP : "Japanese", //MISSING -DlgDocCharSetKR : "Korean", //MISSING -DlgDocCharSetTR : "Turkish", //MISSING -DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING -DlgDocCharSetWE : "Western European", //MISSING +DlgDocCharSetCE : "Central Europa", +DlgDocCharSetCT : "Traditionell Kinesisk (Big5)", +DlgDocCharSetCR : "Kyrillisk", +DlgDocCharSetGR : "Grekiska", +DlgDocCharSetJP : "Japanska", +DlgDocCharSetKR : "Koreanska", +DlgDocCharSetTR : "Turkiska", +DlgDocCharSetUN : "Unicode (UTF-8)", +DlgDocCharSetWE : "Väst Europa", DlgDocCharSetOther : "Övriga teckenuppsättningar", DlgDocDocType : "Sidhuvud", @@ -493,12 +504,12 @@ DlgTemplatesTitle : "Sidmallar", DlgTemplatesSelMsg : "Var god välj en mall att använda med editorn
    (allt nuvarande innehåll raderas):", DlgTemplatesLoading : "Laddar mallar. Var god vänta...", DlgTemplatesNoTpl : "(Ingen mall är vald)", -DlgTemplatesReplace : "Replace actual contents", //MISSING +DlgTemplatesReplace : "Ersätt aktuellt innehåll", // About Dialog DlgAboutAboutTab : "Om", DlgAboutBrowserInfoTab : "Webläsare", -DlgAboutLicenseTab : "License", //MISSING +DlgAboutLicenseTab : "Licens", DlgAboutVersion : "version", DlgAboutInfo : "För mer information se" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/th.js b/phpgwapi/js/fckeditor/editor/lang/th.js index 8c4319a157..8c849f2135 100644 --- a/phpgwapi/js/fckeditor/editor/lang/th.js +++ b/phpgwapi/js/fckeditor/editor/lang/th.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "ลิงค์เชื่อมโยงเว็บ อี InsertLink : "แทรก/แก้ไข ลิงค์", RemoveLink : "ลบ ลิงค์", Anchor : "แทรก/แก้ไข Anchor", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "รูปภาพ", InsertImage : "แทรก/แก้ไข รูปภาพ", InsertFlashLbl : "ไฟล์ Flash", @@ -70,6 +71,7 @@ RightJustify : "จัดชิดขวา", BlockJustify : "จัดพอดีหน้ากระดาษ", DecreaseIndent : "ลดระยะย่อหน้า", IncreaseIndent : "เพิ่มระยะย่อหน้า", +Blockquote : "Blockquote", //MISSING Undo : "ยกเลิกคำสั่ง", Redo : "ทำซ้ำคำสั่ง", NumberedListLbl : "ลำดับรายการแบบตัวเลข", @@ -103,20 +105,27 @@ SelectionField : "แถบตัวเลือก", ImageButton : "ปุ่มแบบรูปภาพ", FitWindow : "ขยายขนาดตัวอีดิตเตอร์", +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "แก้ไข ลิงค์", CellCM : "ช่องตาราง", RowCM : "แถว", ColumnCM : "คอลัมน์", -InsertRow : "แทรกแถว", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "ลบแถว", -InsertColumn : "แทรกสดมน์", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "ลบสดมน์", -InsertCell : "แทรกช่อง", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "ลบช่อง", MergeCells : "ผสานช่อง", -SplitCell : "แยกช่อง", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "ลบตาราง", CellProperties : "คุณสมบัติของช่อง", TableProperties : "คุณสมบัติของตาราง", @@ -134,7 +143,7 @@ SelectionFieldProp : "คุณสมบัติของ แถบตัวเ TextareaProp : "คุณสมบัติของ เท็กแอเรีย", FormProp : "คุณสมบัติของ แบบฟอร์ม", -FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Paragraph (DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Paragraph (DIV)", // Alerts and Messages ProcessingXHTML : "โปรแกรมกำลังทำงานด้วยเทคโนโลยี XHTML กรุณารอสักครู่...", @@ -229,7 +238,7 @@ DlgLnkURL : "ที่อยู่อ้างอิงออนไลน์ ( DlgLnkAnchorSel : "ระบุข้อมูลของจุดเชื่อมโยง (Anchor)", DlgLnkAnchorByName : "ชื่อ", DlgLnkAnchorById : "ไอดี", -DlgLnkNoAnchors : "(ยังไม่มีจุดเชื่อมโยงภายในหน้าเอกสารนี้)", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(ยังไม่มีจุดเชื่อมโยงภายในหน้าเอกสารนี้)", DlgLnkEMail : "อีเมล์ (E-Mail)", DlgLnkEMailSubject : "หัวเรื่อง", DlgLnkEMailBody : "ข้อความ", @@ -322,6 +331,9 @@ DlgCellBackColor : "สีพื้นหลัง", DlgCellBorderColor : "สีเส้นขอบ", DlgCellBtnSelect : "เลือก..", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "ค้นหา", DlgFindFindBtn : "ค้นหา", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "กรุณาใช้คีย์บอร์ดเท่า DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING DlgPasteIgnoreFont : "ไม่สนใจ Font Face definitions", DlgPasteRemoveStyles : "ลบ Styles definitions", -DlgPasteCleanBox : "ล้างข้อมูลใน Box", // Color Picker ColorAutomatic : "สีอัตโนมัติ", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "โปรแกรมท่องเว็บที่ DlgAboutLicenseTab : "ลิขสิทธิ์", DlgAboutVersion : "รุ่น", DlgAboutInfo : "For further information go to" //MISSING -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/tr.js b/phpgwapi/js/fckeditor/editor/lang/tr.js index 53b371ec71..cdf09f3368 100644 --- a/phpgwapi/js/fckeditor/editor/lang/tr.js +++ b/phpgwapi/js/fckeditor/editor/lang/tr.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Köprü", InsertLink : "Köprü Ekle/Düzenle", RemoveLink : "Köprü Kaldır", Anchor : "Çapa Ekle/Düzenle", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "Resim", InsertImage : "Resim Ekle/Düzenle", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "Sağa Dayalı", BlockJustify : "İki Kenara Yaslanmış", DecreaseIndent : "Sekme Azalt", IncreaseIndent : "Sekme Arttır", +Blockquote : "Blockquote", //MISSING Undo : "Geri Al", Redo : "Tekrarla", NumberedListLbl : "Numaralı Liste", @@ -103,20 +105,27 @@ SelectionField : "Seçim Menüsü", ImageButton : "Resimli Düğme", FitWindow : "Düzenleyici boyutunu büyüt", +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "Köprü Düzenle", CellCM : "Hücre", RowCM : "Satır", ColumnCM : "Sütun", -InsertRow : "Satır Ekle", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "Satır Sil", -InsertColumn : "Sütun Ekle", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "Sütun Sil", -InsertCell : "Hücre Ekle", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "Hücre Sil", MergeCells : "Hücreleri Birleştir", -SplitCell : "Hücre Böl", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "Tabloyu Sil", CellProperties : "Hücre Özellikleri", TableProperties : "Tablo Özellikleri", @@ -134,7 +143,7 @@ SelectionFieldProp : "Seçim Menüsü Özellikleri", TextareaProp : "Çok Satırlı Metin Özellikleri", FormProp : "Form Özellikleri", -FontFormats : "Normal;Biçimli;Adres;Başlık 1;Başlık 2;Başlık 3;Başlık 4;Başlık 5;Başlık 6;Paragraf (DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "Normal;Biçimli;Adres;Başlık 1;Başlık 2;Başlık 3;Başlık 4;Başlık 5;Başlık 6;Paragraf (DIV)", // Alerts and Messages ProcessingXHTML : "XHTML işleniyor. Lütfen bekleyin...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Çapa Seç", DlgLnkAnchorByName : "Çapa Adı ile", DlgLnkAnchorById : "Eleman Kimlik Numarası ile", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Bu belgede hiç çapa yok)", DlgLnkEMail : "E-Posta Adresi", DlgLnkEMailSubject : "İleti Konusu", DlgLnkEMailBody : "İleti Gövdesi", @@ -322,6 +331,9 @@ DlgCellBackColor : "Arka Plan Rengi", DlgCellBorderColor : "Kenar Rengi", DlgCellBtnSelect : "Seç...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "Bul", DlgFindFindBtn : "Bul", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Lütfen aşağıdaki kutunun içine yapıştırın. (Ctr DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING DlgPasteIgnoreFont : "Yazı Tipi tanımlarını yoksay", DlgPasteRemoveStyles : "Biçem Tanımlarını çıkar", -DlgPasteCleanBox : "Temizlik Kutusu", // Color Picker ColorAutomatic : "Otomatik", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "Gezgin Bilgisi", DlgAboutLicenseTab : "Lisans", DlgAboutVersion : "sürüm", DlgAboutInfo : "Daha fazla bilgi için:" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/uk.js b/phpgwapi/js/fckeditor/editor/lang/uk.js index cbaea5df82..376a1e9dd5 100644 --- a/phpgwapi/js/fckeditor/editor/lang/uk.js +++ b/phpgwapi/js/fckeditor/editor/lang/uk.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Посилання", InsertLink : "Вставити/Редагувати посилання", RemoveLink : "Знищити посилання", Anchor : "Вставити/Редагувати якір", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "Зображення", InsertImage : "Вставити/Редагувати зображення", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "По правому краю", BlockJustify : "По ширині", DecreaseIndent : "Зменшити відступ", IncreaseIndent : "Збільшити відступ", +Blockquote : "Blockquote", //MISSING Undo : "Повернути", Redo : "Повторити", NumberedListLbl : "Нумерований список", @@ -103,20 +105,27 @@ SelectionField : "Список", ImageButton : "Кнопка із зображенням", FitWindow : "Розвернути вікно редактора", +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "Вставити посилання", CellCM : "Осередок", RowCM : "Рядок", ColumnCM : "Колонка", -InsertRow : "Вставити строку", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "Видалити строки", -InsertColumn : "Вставити колонку", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "Видалити колонки", -InsertCell : "Вставити комірку", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "Видалити комірки", MergeCells : "Об'єднати комірки", -SplitCell : "Роз'єднати комірку", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "Видалити таблицю", CellProperties : "Властивості комірки", TableProperties : "Властивості таблиці", @@ -134,7 +143,7 @@ SelectionFieldProp : "Властивості списку", TextareaProp : "Властивості текстової області", FormProp : "Властивості форми", -FontFormats : "Нормальний;Форматований;Адреса;Заголовок 1;Заголовок 2;Заголовок 3;Заголовок 4;Заголовок 5;Заголовок 6", //REVIEW : Check _getfontformat.html +FontFormats : "Нормальний;Форматований;Адреса;Заголовок 1;Заголовок 2;Заголовок 3;Заголовок 4;Заголовок 5;Заголовок 6;Нормальний (DIV)", // Alerts and Messages ProcessingXHTML : "Обробка XHTML. Зачекайте, будь ласка...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Оберіть якір", DlgLnkAnchorByName : "За ім'ям якоря", DlgLnkAnchorById : "За ідентифікатором елемента", -DlgLnkNoAnchors : "<Немає якорів доступних в цьому документі>", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Немає якорів доступних в цьому документі)", DlgLnkEMail : "Адреса ел. пошти", DlgLnkEMailSubject : "Тема листа", DlgLnkEMailBody : "Тіло повідомлення", @@ -322,6 +331,9 @@ DlgCellBackColor : "Колір фона", DlgCellBorderColor : "Колір бордюра", DlgCellBtnSelect : "Оберіть...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "Пошук", DlgFindFindBtn : "Пошук", @@ -344,10 +356,9 @@ PasteAsText : "Вставити тільки текст", PasteFromWord : "Вставити з Word", DlgPasteMsg2 : "Будь-ласка, вставте з буфера обміну в цю область, користуючись комбінацією клавіш (Ctrl+V) та натисніть OK.", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteSec : "Редактор не може отримати прямий доступ до буферу обміну у зв'язку з налаштуваннями вашого браузера. Вам потрібно вставити інформацію повторно в це вікно.", DlgPasteIgnoreFont : "Ігнорувати налаштування шрифтів", DlgPasteRemoveStyles : "Видалити налаштування стилів", -DlgPasteCleanBox : "Очистити область", // Color Picker ColorAutomatic : "Автоматичний", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "Інформація браузера", DlgAboutLicenseTab : "Ліцензія", DlgAboutVersion : "Версія", DlgAboutInfo : "Додаткову інформацію дивіться на " -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/vi.js b/phpgwapi/js/fckeditor/editor/lang/vi.js index 5c2c608ec4..5cf09cb3bd 100644 --- a/phpgwapi/js/fckeditor/editor/lang/vi.js +++ b/phpgwapi/js/fckeditor/editor/lang/vi.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "Liên kết", InsertLink : "Chèn/Sửa Liên kết", RemoveLink : "Xoá Liên kết", Anchor : "Chèn/Sửa Neo", +AnchorDelete : "Remove Anchor", //MISSING InsertImageLbl : "Hình ảnh", InsertImage : "Chèn/Sửa Hình ảnh", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "Canh phải", BlockJustify : "Canh đều", DecreaseIndent : "Dịch ra ngoài", IncreaseIndent : "Dịch vào trong", +Blockquote : "Blockquote", //MISSING Undo : "Khôi phục thao tác", Redo : "Làm lại thao tác", NumberedListLbl : "Danh sách có thứ tự", @@ -103,20 +105,27 @@ SelectionField : "Ô chọn", ImageButton : "Nút hình ảnh", FitWindow : "Mở rộng tối đa kích thước trình biên tập", +ShowBlocks : "Show Blocks", //MISSING // Context Menu EditLink : "Sửa Liên kết", CellCM : "Ô", RowCM : "Hàng", ColumnCM : "Cột", -InsertRow : "Chèn Hàng", +InsertRowAfter : "Insert Row After", //MISSING +InsertRowBefore : "Insert Row Before", //MISSING DeleteRows : "Xoá Hàng", -InsertColumn : "Chèn Cột", +InsertColumnAfter : "Insert Column After", //MISSING +InsertColumnBefore : "Insert Column Before", //MISSING DeleteColumns : "Xoá Cột", -InsertCell : "Chèn Ô", +InsertCellAfter : "Insert Cell After", //MISSING +InsertCellBefore : "Insert Cell Before", //MISSING DeleteCells : "Xoá Ô", MergeCells : "Trộn Ô", -SplitCell : "Chia Ô", +MergeRight : "Merge Right", //MISSING +MergeDown : "Merge Down", //MISSING +HorizontalSplitCell : "Split Cell Horizontally", //MISSING +VerticalSplitCell : "Split Cell Vertically", //MISSING TableDelete : "Xóa Bảng", CellProperties : "Thuộc tính Ô", TableProperties : "Thuộc tính Bảng", @@ -134,7 +143,7 @@ SelectionFieldProp : "Thuộc tính Ô chọn", TextareaProp : "Thuộc tính Vùng văn bản", FormProp : "Thuộc tính Biểu mẫu", -FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)", // Alerts and Messages ProcessingXHTML : "Đang xử lý XHTML. Vui lòng đợi trong giây lát...", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "Chọn một Neo", DlgLnkAnchorByName : "Theo Tên Neo", DlgLnkAnchorById : "Theo Định danh Element", -DlgLnkNoAnchors : "", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(Không có Neo nào trong tài liệu)", DlgLnkEMail : "Thư điện tử", DlgLnkEMailSubject : "Tiêu đề Thông điệp", DlgLnkEMailBody : "Nội dung Thông điệp", @@ -322,6 +331,9 @@ DlgCellBackColor : "Màu nền", DlgCellBorderColor : "Màu viền", DlgCellBtnSelect : "Chọn...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "Find and Replace", //MISSING + // Find Dialog DlgFindTitle : "Tìm kiếm", DlgFindFindBtn : "Tìm kiếm", @@ -347,7 +359,6 @@ DlgPasteMsg2 : "Hãy dán nội dung vào trong khung bên dưới, sử dụng DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING DlgPasteIgnoreFont : "Chấp nhận các định dạng phông", DlgPasteRemoveStyles : "Gỡ bỏ các định dạng Styles", -DlgPasteCleanBox : "Xóa nội dung", // Color Picker ColorAutomatic : "Tự động", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "Thông tin trình duyệt", DlgAboutLicenseTab : "Giấy phép", DlgAboutVersion : "phiên bản", DlgAboutInfo : "Để biết thêm thông tin, hãy truy cập" -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/zh-cn.js b/phpgwapi/js/fckeditor/editor/lang/zh-cn.js index 6d6f4f4117..76d7dab73a 100644 --- a/phpgwapi/js/fckeditor/editor/lang/zh-cn.js +++ b/phpgwapi/js/fckeditor/editor/lang/zh-cn.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "超链接", InsertLink : "插入/编辑超链接", RemoveLink : "取消超链接", Anchor : "插入/编辑锚点链接", +AnchorDelete : "清除锚点链接", InsertImageLbl : "图象", InsertImage : "插入/编辑图象", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "右对齐", BlockJustify : "两端对齐", DecreaseIndent : "减少缩进量", IncreaseIndent : "增加缩进量", +Blockquote : "引用文字", Undo : "撤消", Redo : "重做", NumberedListLbl : "编号列表", @@ -103,20 +105,27 @@ SelectionField : "列表/菜单", ImageButton : "图像域", FitWindow : "全屏编辑", +ShowBlocks : "显示区块", // Context Menu EditLink : "编辑超链接", CellCM : "单元格", RowCM : "行", ColumnCM : "列", -InsertRow : "插入行", +InsertRowAfter : "下插入行", +InsertRowBefore : "上插入行", DeleteRows : "删除行", -InsertColumn : "插入列", +InsertColumnAfter : "右插入列", +InsertColumnBefore : "左插入列", DeleteColumns : "删除列", -InsertCell : "插入单元格", +InsertCellAfter : "右插入单元格", +InsertCellBefore : "左插入单元格", DeleteCells : "删除单元格", MergeCells : "合并单元格", -SplitCell : "拆分单元格", +MergeRight : "右合并单元格", +MergeDown : "下合并单元格", +HorizontalSplitCell : "橫拆分单元格", +VerticalSplitCell : "縱拆分单元格", TableDelete : "删除表格", CellProperties : "单元格属性", TableProperties : "表格属性", @@ -134,7 +143,7 @@ SelectionFieldProp : "菜单/列表属性", TextareaProp : "多行文本属性", FormProp : "表单属性", -FontFormats : "普通;已编排格式;地址;标题 1;标题 2;标题 3;标题 4;标题 5;标题 6;段落(DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "普通;已编排格式;地址;标题 1;标题 2;标题 3;标题 4;标题 5;标题 6;段落(DIV)", // Alerts and Messages ProcessingXHTML : "正在处理 XHTML,请稍等...", @@ -229,7 +238,7 @@ DlgLnkURL : "地址", DlgLnkAnchorSel : "选择一个锚点", DlgLnkAnchorByName : "按锚点名称", DlgLnkAnchorById : "按锚点 ID", -DlgLnkNoAnchors : "<此文档没有可用的锚点>", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(此文档没有可用的锚点)", DlgLnkEMail : "地址", DlgLnkEMailSubject : "主题", DlgLnkEMailBody : "内容", @@ -322,6 +331,9 @@ DlgCellBackColor : "背景颜色", DlgCellBorderColor : "边框颜色", DlgCellBtnSelect : "选择...", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "查找和替换", + // Find Dialog DlgFindTitle : "查找", DlgFindFindBtn : "查找", @@ -344,10 +356,9 @@ PasteAsText : "粘贴为无格式文本", PasteFromWord : "从 MS Word 粘贴", DlgPasteMsg2 : "请使用键盘快捷键(Ctrl+V)把内容粘贴到下面的方框里,再按 确定。", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteSec : "因为你的浏览器的安全设置原因,本编辑器不能直接访问你的剪贴板内容,你需要在本窗口重新粘贴一次。", DlgPasteIgnoreFont : "忽略 Font 标签", DlgPasteRemoveStyles : "清理 CSS 样式", -DlgPasteCleanBox : "清空上面内容", // Color Picker ColorAutomatic : "自动", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "浏览器信息", DlgAboutLicenseTab : "许可证", DlgAboutVersion : "版本", DlgAboutInfo : "要获得更多信息请访问 " -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/lang/zh.js b/phpgwapi/js/fckeditor/editor/lang/zh.js index b5cd2397ef..46747df1e2 100644 --- a/phpgwapi/js/fckeditor/editor/lang/zh.js +++ b/phpgwapi/js/fckeditor/editor/lang/zh.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -45,6 +45,7 @@ InsertLinkLbl : "超連結", InsertLink : "插入/編輯超連結", RemoveLink : "移除超連結", Anchor : "插入/編輯錨點", +AnchorDelete : "移除錨點", InsertImageLbl : "影像", InsertImage : "插入/編輯影像", InsertFlashLbl : "Flash", @@ -70,6 +71,7 @@ RightJustify : "靠右對齊", BlockJustify : "左右對齊", DecreaseIndent : "減少縮排", IncreaseIndent : "增加縮排", +Blockquote : "块引用", Undo : "復原", Redo : "重複", NumberedListLbl : "編號清單", @@ -103,20 +105,27 @@ SelectionField : "清單/選單", ImageButton : "影像按鈕", FitWindow : "編輯器最大化", +ShowBlocks : "顯示區塊", // Context Menu EditLink : "編輯超連結", CellCM : "儲存格", RowCM : "列", ColumnCM : "欄", -InsertRow : "插入列", +InsertRowAfter : "向下插入列", +InsertRowBefore : "向上插入列", DeleteRows : "刪除列", -InsertColumn : "插入欄", +InsertColumnAfter : "向右插入欄", +InsertColumnBefore : "向左插入欄", DeleteColumns : "刪除欄", -InsertCell : "插入儲存格", +InsertCellAfter : "向右插入儲存格", +InsertCellBefore : "向左插入儲存格", DeleteCells : "刪除儲存格", MergeCells : "合併儲存格", -SplitCell : "分割儲存格", +MergeRight : "向右合併儲存格", +MergeDown : "向下合併儲存格", +HorizontalSplitCell : "橫向分割儲存格", +VerticalSplitCell : "縱向分割儲存格", TableDelete : "刪除表格", CellProperties : "儲存格屬性", TableProperties : "表格屬性", @@ -134,7 +143,7 @@ SelectionFieldProp : "清單/選單屬性", TextareaProp : "文字區域屬性", FormProp : "表單屬性", -FontFormats : "本文;已格式化;位址;標題 1;標題 2;標題 3;標題 4;標題 5;標題 6;本文 (DIV)", //REVIEW : Check _getfontformat.html +FontFormats : "一般;已格式化;位址;標題 1;標題 2;標題 3;標題 4;標題 5;標題 6;一般 (DIV)", // Alerts and Messages ProcessingXHTML : "處理 XHTML 中,請稍候…", @@ -229,7 +238,7 @@ DlgLnkURL : "URL", DlgLnkAnchorSel : "請選擇錨點", DlgLnkAnchorByName : "依錨點名稱", DlgLnkAnchorById : "依元件 ID", -DlgLnkNoAnchors : "<本文件尚無可用之錨點>", //REVIEW : Change < and > with ( and ) +DlgLnkNoAnchors : "(本文件尚無可用之錨點)", DlgLnkEMail : "電子郵件", DlgLnkEMailSubject : "郵件主旨", DlgLnkEMailBody : "郵件內容", @@ -322,6 +331,9 @@ DlgCellBackColor : "背景顏色", DlgCellBorderColor : "邊框顏色", DlgCellBtnSelect : "請選擇…", +// Find and Replace Dialog +DlgFindAndReplaceTitle : "尋找與取代", + // Find Dialog DlgFindTitle : "尋找", DlgFindFindBtn : "尋找", @@ -344,10 +356,9 @@ PasteAsText : "貼為純文字格式", PasteFromWord : "自 Word 貼上", DlgPasteMsg2 : "請使用快捷鍵 (Ctrl+V) 貼到下方區域中並按下 確定", -DlgPasteSec : "Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.", //MISSING +DlgPasteSec : "因為瀏覽器的安全性設定,本編輯器無法直接存取您的剪貼簿資料,請您自行在本視窗進行貼上動作。", DlgPasteIgnoreFont : "移除字型設定", DlgPasteRemoveStyles : "移除樣式設定", -DlgPasteCleanBox : "清除文字區域", // Color Picker ColorAutomatic : "自動", @@ -501,4 +512,4 @@ DlgAboutBrowserInfoTab : "瀏覽器資訊", DlgAboutLicenseTab : "許可證", DlgAboutVersion : "版本", DlgAboutInfo : "想獲得更多資訊請至 " -}; \ No newline at end of file +}; diff --git a/phpgwapi/js/fckeditor/editor/plugins/autogrow/fckplugin.js b/phpgwapi/js/fckeditor/editor/plugins/autogrow/fckplugin.js index 7ce1c1cc23..8873b059f7 100644 --- a/phpgwapi/js/fckeditor/editor/plugins/autogrow/fckplugin.js +++ b/phpgwapi/js/fckeditor/editor/plugins/autogrow/fckplugin.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -63,6 +63,13 @@ function FCKAutoGrow_Check() return ; window.frameElement.height = iMainFrameSize ; + + // Gecko browsers use an onresize handler to update the innermost + // IFRAME's height. If the document is modified before the onresize + // is triggered, the plugin will miscalculate the new height. Thus, + // forcibly trigger onresize. #1336 + if ( typeof window.onresize == 'function' ) + window.onresize() ; } } @@ -89,4 +96,4 @@ function FCKAutoGrow_CheckEditorStatus( sender, status ) FCKAutoGrow_Check() ; } -FCK.Events.AttachEvent( 'OnStatusChange', FCKAutoGrow_CheckEditorStatus ) ; \ No newline at end of file +FCK.Events.AttachEvent( 'OnStatusChange', FCKAutoGrow_CheckEditorStatus ) ; diff --git a/phpgwapi/js/fckeditor/editor/_source/internals/fckundo_gecko.js b/phpgwapi/js/fckeditor/editor/plugins/bbcode/_sample/sample.config.js similarity index 66% rename from phpgwapi/js/fckeditor/editor/_source/internals/fckundo_gecko.js rename to phpgwapi/js/fckeditor/editor/plugins/bbcode/_sample/sample.config.js index 7cf7fe8b0d..782e669dc2 100644 --- a/phpgwapi/js/fckeditor/editor/_source/internals/fckundo_gecko.js +++ b/phpgwapi/js/fckeditor/editor/plugins/bbcode/_sample/sample.config.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -18,10 +18,9 @@ * * == END LICENSE == * - * Fake implementation to ignore calls on Gecko. + * Sample custom configuration settings used by the BBCode plugin. It simply + * loads the plugin. All the rest is done by the plugin itself. */ -var FCKUndo = new Object() ; - -FCKUndo.SaveUndoStep = function() -{} \ No newline at end of file +// Add the BBCode plugin. +FCKConfig.Plugins.Add( 'bbcode' ) ; diff --git a/phpgwapi/js/fckeditor/editor/plugins/bbcode/_sample/sample.html b/phpgwapi/js/fckeditor/editor/plugins/bbcode/_sample/sample.html new file mode 100644 index 0000000000..246f3a5174 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/plugins/bbcode/_sample/sample.html @@ -0,0 +1,67 @@ + + + + + FCKeditor - BBCode Sample + + + + + + +

    + FCKeditor - BBCode Sample

    +

    + This is a sample of custom Data Processor implementation for (very) basic BBCode + syntax. Only [b], [i], [u] and + [url] may be used. It may be extended, but this is out of this + sample purpose. +

    +

    + Note that the input and output of the editor is not HTML, but BBCode +

    +
    +
    + +
    + +
    + + diff --git a/phpgwapi/js/fckeditor/editor/plugins/bbcode/fckplugin.js b/phpgwapi/js/fckeditor/editor/plugins/bbcode/fckplugin.js new file mode 100644 index 0000000000..640f820e88 --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/plugins/bbcode/fckplugin.js @@ -0,0 +1,123 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * This is a sample implementation for a custom Data Processor for basic BBCode. + */ + +FCK.DataProcessor = +{ + /* + * Returns a string representing the HTML format of "data". The returned + * value will be loaded in the editor. + * The HTML must be from to , eventually including + * the DOCTYPE. + * @param {String} data The data to be converted in the + * DataProcessor specific format. + */ + ConvertToHtml : function( data ) + { + // Convert < and > to their HTML entities. + data = data.replace( //g, '>' ) ; + + // Convert line breaks to
    . + data = data.replace( /(?:\r\n|\n|\r)/g, '
    ' ) ; + + // [url] + data = data.replace( /\[url\](.+?)\[\/url]/gi, '
    . + // Do that before getDocumentHead because WebKit moves + // elements to the at this point. + var div = doc.createElement( 'div' ) ; + div.innerHTML = headInnerHtml ; + + // Move the
    nodes to . + FCKDomTools.MoveChildren( div, getDocumentHead( doc ) ) ; + } + + doc.body.innerHTML = html.match( /([\s\S]*)<\/body>/i )[1] ; + + //prevent clicking on hyperlinks and navigating away + doc.addEventListener('click', function( ev ) + { + ev.preventDefault() ; + ev.stopPropagation() ; + }, true ) ; + }, + + Panel_Contructor : function( doc, baseLocation ) + { + var head = getDocumentHead( doc ) ; + + // Set the href. + head.appendChild( doc.createElement('base') ).href = baseLocation ; + + doc.body.style.margin = '0px' ; + doc.body.style.padding = '0px' ; + }, + + ToolbarSet_GetOutElement : function( win, outMatch ) + { + var toolbarTarget = win.parent ; + + var targetWindowParts = outMatch[1].split( '.' ) ; + while ( targetWindowParts.length > 0 ) + { + var part = targetWindowParts.shift() ; + if ( part.length > 0 ) + toolbarTarget = toolbarTarget[ part ] ; + } + + toolbarTarget = toolbarTarget.document.getElementById( outMatch[2] ) ; + }, + + ToolbarSet_InitOutFrame : function( doc ) + { + var head = getDocumentHead( doc ) ; + + head.appendChild( doc.createElement('base') ).href = window.document.location ; + + var targetWindow = doc.defaultView; + + targetWindow.adjust = function() + { + targetWindow.frameElement.height = doc.body.scrollHeight; + } ; + + targetWindow.onresize = targetWindow.adjust ; + targetWindow.setTimeout( targetWindow.adjust, 0 ) ; + + doc.body.style.overflow = 'hidden'; + doc.body.innerHTML = document.getElementById( 'xToolbarSpace' ).innerHTML ; + } + } ; + })(); + + /* + * ### Overrides + */ + ( function() + { + // Save references for override reuse. + var _Original_FCKPanel_Window_OnFocus = FCKPanel_Window_OnFocus ; + var _Original_FCKPanel_Window_OnBlur = FCKPanel_Window_OnBlur ; + var _Original_FCK_StartEditor = FCK.StartEditor ; + + FCKPanel_Window_OnFocus = function( e, panel ) + { + // Call the original implementation. + _Original_FCKPanel_Window_OnFocus.call( this, e, panel ) ; + + if ( panel._focusTimer ) + clearTimeout( panel._focusTimer ) ; + } + + FCKPanel_Window_OnBlur = function( e, panel ) + { + // Delay the execution of the original function. + panel._focusTimer = FCKTools.SetTimeout( _Original_FCKPanel_Window_OnBlur, 100, this, [ e, panel ] ) ; + } + + FCK.StartEditor = function() + { + // Force pointing to the CSS files instead of using the inline CSS cached styles. + window.FCK_InternalCSS = FCKConfig.FullBasePath + 'css/fck_internal.css' ; + window.FCK_ShowTableBordersCSS = FCKConfig.FullBasePath + 'css/fck_showtableborders_gecko.css' ; + + _Original_FCK_StartEditor.apply( this, arguments ) ; + } + })(); +} diff --git a/phpgwapi/js/fckeditor/editor/js/fckeditorcode_gecko.js b/phpgwapi/js/fckeditor/editor/js/fckeditorcode_gecko.js index 474639dfcd..907100c5a7 100644 --- a/phpgwapi/js/fckeditor/editor/js/fckeditorcode_gecko.js +++ b/phpgwapi/js/fckeditor/editor/js/fckeditorcode_gecko.js @@ -1,98 +1,108 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben - * + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * * == BEGIN LICENSE == - * + * * Licensed under the terms of any of the following licenses at your * choice: - * + * * - GNU General Public License Version 2 or later (the "GPL") * http://www.gnu.org/licenses/gpl.html - * + * * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") * http://www.gnu.org/licenses/lgpl.html - * + * * - Mozilla Public License Version 1.1 or later (the "MPL") * http://www.mozilla.org/MPL/MPL-1.1.html - * + * * == END LICENSE == - * + * * This file has been compressed for better performance. The original source * can be found at "editor/_source". */ -var FCK_STATUS_NOTLOADED=window.parent.FCK_STATUS_NOTLOADED=0;var FCK_STATUS_ACTIVE=window.parent.FCK_STATUS_ACTIVE=1;var FCK_STATUS_COMPLETE=window.parent.FCK_STATUS_COMPLETE=2;var FCK_TRISTATE_OFF=window.parent.FCK_TRISTATE_OFF=0;var FCK_TRISTATE_ON=window.parent.FCK_TRISTATE_ON=1;var FCK_TRISTATE_DISABLED=window.parent.FCK_TRISTATE_DISABLED=-1;var FCK_UNKNOWN=window.parent.FCK_UNKNOWN=-9;var FCK_TOOLBARITEM_ONLYICON=window.parent.FCK_TOOLBARITEM_ONLYICON=0;var FCK_TOOLBARITEM_ONLYTEXT=window.parent.FCK_TOOLBARITEM_ONLYTEXT=1;var FCK_TOOLBARITEM_ICONTEXT=window.parent.FCK_TOOLBARITEM_ICONTEXT=2;var FCK_EDITMODE_WYSIWYG=window.parent.FCK_EDITMODE_WYSIWYG=0;var FCK_EDITMODE_SOURCE=window.parent.FCK_EDITMODE_SOURCE=1;var FCK_IMAGES_PATH='images/';var FCK_SPACER_PATH='images/spacer.gif';var CTRL=1000;var SHIFT=2000;var ALT=4000; -String.prototype.Contains=function(A){return (this.indexOf(A)>-1);};String.prototype.Equals=function(){var A=arguments;if (A.length==1&&A[0].pop) A=A[0];for (var i=0;iC) return false;if (B){var E=new RegExp(A+'$','i');return E.test(this);}else return (D==0||this.substr(C-D,D)==A);};String.prototype.Remove=function(A,B){var s='';if (A>0) s=this.substring(0,A);if (A+B0?'':'';var A=FCK.KeystrokeHandler=new FCKKeystrokeHandler();A.OnKeystroke=_FCK_KeystrokeHandler_OnKeystroke;A.SetKeystrokes(FCKConfig.Keystrokes);if (FCKBrowserInfo.IsIE7){if ((CTRL+86/*V*/) in A.Keystrokes) A.SetKeystrokes([CTRL+86,true]);if ((SHIFT+45/*INS*/) in A.Keystrokes) A.SetKeystrokes([SHIFT+45,true]);};this.EditingArea=new FCKEditingArea(document.getElementById('xEditingArea'));this.EditingArea.FFSpellChecker=false;FCKListsLib.Setup();this.SetHTML(this.GetLinkedFieldValue(),true);},Focus:function(){FCK.EditingArea.Focus();},SetStatus:function(A){this.Status=A;if (A==1){FCKFocusManager.AddWindow(window,true);if (FCKBrowserInfo.IsIE) FCKFocusManager.AddWindow(window.frameElement,true);if (FCKConfig.StartupFocus) FCK.Focus();};this.Events.FireEvent('OnStatusChange',A);},FixBody:function(){var A=FCKConfig.EnterMode;if (A!='p'&&A!='div') return;var B=this.EditorDocument;if (!B) return;var C=B.body;if (!C) return;FCKDomTools.TrimNode(C);var D=C.firstChild;var E;while (D){var F=false;switch (D.nodeType){case 1:if (!FCKListsLib.BlockElements[D.nodeName.toLowerCase()]) F=true;break;case 3:if (E||D.nodeValue.Trim().length>0) F=true;};if (F){var G=D.parentNode;if (!E) E=G.insertBefore(B.createElement(A),D);E.appendChild(G.removeChild(D));D=E.nextSibling;}else{if (E){FCKDomTools.TrimNode(E);E=null;};D=D.nextSibling;}};if (E) FCKDomTools.TrimNode(E);},GetXHTML:function(A){if (FCK.EditMode==1) return FCK.EditingArea.Textarea.value;this.FixBody();var B;var C=FCK.EditorDocument;if (!C) return null;if (FCKConfig.FullPage){B=FCKXHtml.GetXHTML(C.getElementsByTagName('html')[0],true,A);if (FCK.DocTypeDeclaration&&FCK.DocTypeDeclaration.length>0) B=FCK.DocTypeDeclaration+'\n'+B;if (FCK.XmlDeclaration&&FCK.XmlDeclaration.length>0) B=FCK.XmlDeclaration+'\n'+B;}else{B=FCKXHtml.GetXHTML(C.body,false,A);if (FCKConfig.IgnoreEmptyParagraphValue&&FCKRegexLib.EmptyOutParagraph.test(B)) B='';};B=FCK.ProtectEventsRestore(B);if (FCKBrowserInfo.IsIE) B=B.replace(FCKRegexLib.ToReplace,'$1');return FCKConfig.ProtectedSource.Revert(B);},UpdateLinkedField:function(){FCK.LinkedField.value=FCK.GetXHTML(FCKConfig.FormatOutput);FCK.Events.FireEvent('OnAfterLinkedFieldUpdate');},RegisteredDoubleClickHandlers:{},OnDoubleClick:function(A){var B=FCK.RegisteredDoubleClickHandlers[A.tagName];if (B) B(A);},RegisterDoubleClickHandler:function(A,B){FCK.RegisteredDoubleClickHandlers[B.toUpperCase()]=A;},OnAfterSetHTML:function(){FCKDocumentProcessor.Process(FCK.EditorDocument);FCKUndo.SaveUndoStep();FCK.Events.FireEvent('OnSelectionChange');FCK.Events.FireEvent('OnAfterSetHTML');},ProtectUrls:function(A){A=A.replace(FCKRegexLib.ProtectUrlsA,'$& _fcksavedurl=$1');A=A.replace(FCKRegexLib.ProtectUrlsImg,'$& _fcksavedurl=$1');return A;},ProtectEvents:function(A){return A.replace(FCKRegexLib.TagsWithEvent,_FCK_ProtectEvents_ReplaceTags);},ProtectEventsRestore:function(A){return A.replace(FCKRegexLib.ProtectedEvents,_FCK_ProtectEvents_RestoreEvents);},ProtectTags:function(A){var B=FCKConfig.ProtectedTags;if (FCKBrowserInfo.IsIE) B+=B.length>0?'|ABBR':'ABBR';var C;if (B.length>0){C=new RegExp('<('+B+')(?!\w|:)','gi');A=A.replace(C,'','gi');A=A.replace(C,'<\/FCK:$1>');};B='META';if (FCKBrowserInfo.IsIE) B+='|HR';C=new RegExp('<(('+B+')(?=\s|>)[\s\S]*?)/?>','gi');A=A.replace(C,'');return A;},SetHTML:function(A,B){this.EditingArea.Mode=FCK.EditMode;if (FCK.EditMode==0){A=FCKConfig.ProtectedSource.Protect(A);A=A.replace(FCKRegexLib.InvalidSelfCloseTags,'$1>');A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);A=FCK.ProtectTags(A);if (FCKBrowserInfo.IsGecko){A=A.replace(FCKRegexLib.StrongOpener,'');A=A.replace(FCKRegexLib.EmOpener,'');};this._ForceResetIsDirty=(B===true);var C='';if (FCKConfig.FullPage){if (!FCKRegexLib.HeadOpener.test(A)){if (!FCKRegexLib.HtmlOpener.test(A)) A=''+A+'';A=A.replace(FCKRegexLib.HtmlOpener,'$&');};FCK.DocTypeDeclaration=A.match(FCKRegexLib.DocTypeTag);if (FCKBrowserInfo.IsIE) C=FCK._GetBehaviorsStyle();else if (FCKConfig.ShowBorders) C='';C+='';C=A.replace(FCKRegexLib.HeadCloser,C+'$&');if (FCK.TempBaseTag.length>0&&!FCKRegexLib.HasBaseTag.test(A)) C=C.replace(FCKRegexLib.HeadOpener,'$&'+FCK.TempBaseTag);}else{C=FCKConfig.DocType+'';if (FCKBrowserInfo.IsIE) C+=FCK._GetBehaviorsStyle();else if (FCKConfig.ShowBorders) C+='';C+=FCK.TempBaseTag;var D='0) D+=' id="'+FCKConfig.BodyId+'"';if (FCKConfig.BodyClass&&FCKConfig.BodyClass.length>0) D+=' class="'+FCKConfig.BodyClass+'"';C+=''+D+'>';if (FCKBrowserInfo.IsGecko&&(A.length==0||FCKRegexLib.EmptyParagraph.test(A))) C+=GECKO_BOGUS;else C+=A;C+='';};this.EditingArea.OnLoad=_FCK_EditingArea_OnLoad;this.EditingArea.Start(C);}else{FCK.EditorWindow=null;FCK.EditorDocument=null;this.EditingArea.OnLoad=null;this.EditingArea.Start(A);this.EditingArea.Textarea._FCKShowContextMenu=true;FCK.EnterKeyHandler=null;if (B) this.ResetIsDirty();FCK.KeystrokeHandler.AttachToElement(this.EditingArea.Textarea);this.EditingArea.Textarea.focus();FCK.Events.FireEvent('OnAfterSetHTML');};if (FCKBrowserInfo.IsGecko) window.onresize();},HasFocus:false,RedirectNamedCommands:{},ExecuteNamedCommand:function(A,B,C){FCKUndo.SaveUndoStep();if (!C&&FCK.RedirectNamedCommands[A]!=null) FCK.ExecuteRedirectedNamedCommand(A,B);else{FCK.Focus();FCK.EditorDocument.execCommand(A,false,B);FCK.Events.FireEvent('OnSelectionChange');};FCKUndo.SaveUndoStep();},GetNamedCommandState:function(A){try{if (!FCK.EditorDocument.queryCommandEnabled(A)) return -1;else return FCK.EditorDocument.queryCommandState(A)?1:0;}catch (e){return 0;}},GetNamedCommandValue:function(A){var B='';var C=FCK.GetNamedCommandState(A);if (C==-1) return null;try{B=this.EditorDocument.queryCommandValue(A);}catch(e) {};return B?B:'';},PasteFromWord:function(){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteFromWord,'dialog/fck_paste.html',400,330,'Word');},Preview:function(){var A=FCKConfig.ScreenWidth*0.8;var B=FCKConfig.ScreenHeight*0.7;var C=(FCKConfig.ScreenWidth-A)/2;var D=window.open('',null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+A+',height='+B+',left='+C);var E;if (FCKConfig.FullPage){if (FCK.TempBaseTag.length>0) E=FCK.TempBaseTag+FCK.GetXHTML();else E=FCK.GetXHTML();}else{E=FCKConfig.DocType+''+FCK.TempBaseTag+''+FCKLang.Preview+''+_FCK_GetEditorAreaStyleTags()+''+FCK.GetXHTML()+'';};D.document.write(E);D.document.close();},SwitchEditMode:function(A){var B=(FCK.EditMode==0);var C=FCK.IsDirty();var D;if (B){if (!A&&FCKBrowserInfo.IsIE) FCKUndo.SaveUndoStep();D=FCK.GetXHTML(FCKConfig.FormatSource);if (D==null) return false;}else D=this.EditingArea.Textarea.value;FCK.EditMode=B?1:0;FCK.SetHTML(D,!C);FCK.Focus();FCKTools.RunFunction(FCK.ToolbarSet.RefreshModeState,FCK.ToolbarSet);return true;},CreateElement:function(A){var e=FCK.EditorDocument.createElement(A);return FCK.InsertElementAndGetIt(e);},InsertElementAndGetIt:function(e){e.setAttribute('FCKTempLabel','true');this.InsertElement(e);var A=FCK.EditorDocument.getElementsByTagName(e.tagName);for (var i=0;i/g,/\r/g,/\n/g],[''',''','"','=','<','>',' ',' '])+'"';};function _FCK_ProtectEvents_RestoreEvents(A,B){return B.ReplaceAll([/'/g,/"/g,/=/g,/</g,/>/g,/ /g,/ /g,/'/g],["'",'"','=','<','>','\r','\n','&']);};function _FCK_EditingArea_OnLoad(){FCK.EditorWindow=FCK.EditingArea.Window;FCK.EditorDocument=FCK.EditingArea.Document;FCK.InitializeBehaviors();if (!FCKConfig.DisableEnterKeyHandler) FCK.EnterKeyHandler=new FCKEnterKey(FCK.EditorWindow,FCKConfig.EnterMode,FCKConfig.ShiftEnterMode);FCK.KeystrokeHandler.AttachToElement(FCK.EditorDocument);if (FCK._ForceResetIsDirty) FCK.ResetIsDirty();if (FCKBrowserInfo.IsIE&&FCK.HasFocus) FCK.EditorDocument.body.setActive();FCK.OnAfterSetHTML();if (FCK.Status!=0) return;FCK.SetStatus(1);};function _FCK_GetEditorAreaStyleTags(){var A='';var B=FCKConfig.EditorAreaCSS;for (var i=0;i';return A;};function _FCK_KeystrokeHandler_OnKeystroke(A,B){if (FCK.Status!=2) return false;if (FCK.EditMode==0){if (B=='Paste') return!FCK.Events.FireEvent('OnPaste');}else{if (B.Equals('Paste','Undo','Redo','SelectAll')) return false;};var C=FCK.Commands.GetCommand(B);return (C.Execute.apply(C,FCKTools.ArgumentsToArray(arguments,2))!==false);};(function(){var A=window.parent.document;var B=A.getElementById(FCK.Name);var i=0;while (B||i==0){if (B&&B.tagName.toLowerCase().Equals('input','textarea')){FCK.LinkedField=B;break;};B=A.getElementsByName(FCK.Name)[i++];}})();var FCKTempBin={Elements:[],AddElement:function(A){var B=this.Elements.length;this.Elements[B]=A;return B;},RemoveElement:function(A){var e=this.Elements[A];this.Elements[A]=null;return e;},Reset:function(){var i=0;while (i');A=A.replace(FCKRegexLib.EmOpener,'');var B=FCKSelection.Delete();var C=B.getRangeAt(0);var D=C.createContextualFragment(A);var E=D.lastChild;C.insertNode(D);FCKSelection.SelectNode(E);FCKSelection.Collapse(false);this.Focus();};FCK.InsertElement=function(A){var B=FCKSelection.Delete();var C=B.getRangeAt(0);C.insertNode(A);FCKSelection.SelectNode(A);FCKSelection.Collapse(false);this.Focus();};FCK.PasteAsPlainText=function(){FCKTools.RunFunction(FCKDialog.OpenDialog,FCKDialog,['FCKDialog_Paste',FCKLang.PasteAsText,'dialog/fck_paste.html',400,330,'PlainText']);};FCK.GetClipboardHTML=function(){return '';};FCK.CreateLink=function(A){FCK.ExecuteNamedCommand('Unlink');if (A.length>0){var B='javascript:void(0);/*'+(new Date().getTime())+'*/';FCK.ExecuteNamedCommand('CreateLink',B);var C=this.EditorDocument.evaluate("//a[@href='"+B+"']",this.EditorDocument.body,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue;if (C){C.href=A;return C;}};return null;}; -var FCKConfig=FCK.Config={};if (document.location.protocol=='file:'){FCKConfig.BasePath=decodeURIComponent(document.location.pathname.substr(1));FCKConfig.BasePath=FCKConfig.BasePath.replace(/\\/gi, '/');FCKConfig.BasePath='file://'+FCKConfig.BasePath.substring(0,FCKConfig.BasePath.lastIndexOf('/')+1);FCKConfig.FullBasePath=FCKConfig.BasePath;}else{FCKConfig.BasePath=document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')+1);FCKConfig.FullBasePath=document.location.protocol+'//'+document.location.host+FCKConfig.BasePath;};FCKConfig.EditorPath=FCKConfig.BasePath.replace(/editor\/$/,'');try{FCKConfig.ScreenWidth=screen.width;FCKConfig.ScreenHeight=screen.height;}catch (e){FCKConfig.ScreenWidth=800;FCKConfig.ScreenHeight=600;};FCKConfig.ProcessHiddenField=function(){this.PageConfig={};var A=window.parent.document.getElementById(FCK.Name+'___Config');if (!A) return;var B=A.value.split('&');for (var i=0;i0&&!isNaN(E)) this.PageConfig[D]=parseInt(E,10);else this.PageConfig[D]=E;}};function FCKConfig_LoadPageConfig(){var A=FCKConfig.PageConfig;for (var B in A) FCKConfig[B]=A[B];};function FCKConfig_PreProcess(){var A=FCKConfig;if (A.AllowQueryStringDebug){try{if ((/fckdebug=true/i).test(window.top.location.search)) A.Debug=true;}catch (e) {/*Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error).*/}};if (!A.PluginsPath.EndsWith('/')) A.PluginsPath+='/';if (typeof(A.EditorAreaCSS)=='string') A.EditorAreaCSS=[A.EditorAreaCSS];var B=A.ToolbarComboPreviewCSS;if (!B||B.length==0) A.ToolbarComboPreviewCSS=A.EditorAreaCSS;else if (typeof(B)=='string') A.ToolbarComboPreviewCSS=[B];};FCKConfig.ToolbarSets={};FCKConfig.Plugins={};FCKConfig.Plugins.Items=[];FCKConfig.Plugins.Add=function(A,B,C){FCKConfig.Plugins.Items.AddItem([A,B,C]);};FCKConfig.ProtectedSource={};FCKConfig.ProtectedSource.RegexEntries=[//g,//gi,//gi];FCKConfig.ProtectedSource.Add=function(A){this.RegexEntries.AddItem(A);};FCKConfig.ProtectedSource.Protect=function(A){function _Replace(protectedSource){var B=FCKTempBin.AddElement(protectedSource);return '';};for (var i=0;i|>)/g,_Replace);} -var FCKDebug={};FCKDebug._GetWindow=function(){if (!this.DebugWindow||this.DebugWindow.closed) this.DebugWindow=window.open(FCKConfig.BasePath+'fckdebug.html','FCKeditorDebug','menubar=no,scrollbars=yes,resizable=yes,location=no,toolbar=no,width=600,height=500',true);return this.DebugWindow;};FCKDebug.Output=function(A,B,C){if (!FCKConfig.Debug) return;try{this._GetWindow().Output(A,B);}catch (e) {}};FCKDebug.OutputObject=function(A,B){if (!FCKConfig.Debug) return;try{this._GetWindow().OutputObject(A,B);}catch (e) {}} -var FCKDomTools={MoveChildren:function(A,B){if (A==B) return;var C;while ((C=A.firstChild)) B.appendChild(A.removeChild(C));},TrimNode:function(A,B){this.LTrimNode(A);this.RTrimNode(A,B);},LTrimNode:function(A){var B;while ((B=A.firstChild)){if (B.nodeType==3){var C=B.nodeValue.LTrim();var D=B.nodeValue.length;if (C.length==0){A.removeChild(B);continue;}else if (C.length0) break;if (A.lastChild) A=A.lastChild;else return this.GetPreviousSourceElement(A,B,C,D);};return null;},GetNextSourceElement:function(A,B,C,D){if (!A) return null;if (A.nextSibling) A=A.nextSibling;else return this.GetNextSourceElement(A.parentNode,B,C,D);while (A){if (A.nodeType==1){if (C&&A.nodeName.IEquals(C)) break;if (!D||!A.nodeName.IEquals(D)) return A;}else if (B&&A.nodeType==3&&A.nodeValue.RTrim().length>0) break;if (A.firstChild) A=A.firstChild;else return this.GetNextSourceElement(A,B,C,D);};return null;},InsertAfterNode:function(A,B){return A.parentNode.insertBefore(B,A.nextSibling);},GetParents:function(A){var B=[];while (A){B.splice(0,0,A);A=A.parentNode;};return B;},GetIndexOf:function(A){var B=A.parentNode?A.parentNode.firstChild:null;var C=-1;while (B){C++;if (B==A) return C;B=B.nextSibling;};return-1;}}; -var GECKO_BOGUS='
    ';var FCKTools={};FCKTools.CreateBogusBR=function(A){var B=A.createElement('br');B.setAttribute('type','_moz');return B;};FCKTools.AppendStyleSheet=function(A,B){if (typeof(B)=='string') return this._AppendStyleSheet(A,B);else{var C=[];for (var i=0;i/g,'>');return A;};FCKTools.HTMLDecode=function(A){if (!A) return '';A=A.replace(/>/g,'>');A=A.replace(/</g,'<');A=A.replace(/&/g,'&');return A;};FCKTools.AddSelectOption=function(A,B,C){var D=FCKTools.GetElementDocument(A).createElement("OPTION");D.text=B;D.value=C;A.options.add(D);return D;};FCKTools.RunFunction=function(A,B,C,D){if (A) this.SetTimeout(A,0,B,C,D);};FCKTools.SetTimeout=function(A,B,C,D,E){return (E||window).setTimeout(function(){if (D) A.apply(C,[].concat(D));else A.apply(C);},B);};FCKTools.SetInterval=function(A,B,C,D,E){return (E||window).setInterval(function(){A.apply(C,D||[]);},B);};FCKTools.ConvertStyleSizeToHtml=function(A){return A.EndsWith('%')?A:parseInt(A,10);};FCKTools.ConvertHtmlSizeToStyle=function(A){return A.EndsWith('%')?A:(A+'px');};FCKTools.GetElementAscensor=function(A,B){var e=A;var C=","+B.toUpperCase()+",";while (e){if (C.indexOf(","+e.nodeName.toUpperCase()+",")!=-1) return e;e=e.parentNode;};return null;};FCKTools.CreateEventListener=function(A,B){var f=function(){var C=[];for (var i=0;i0) B[B.length]=D;C(parent.childNodes[i]);}};C(A);return B;};FCKTools.RemoveOuterTags=function(e){var A=e.ownerDocument.createDocumentFragment();for (var i=0;i0){B.Class=A.className;A.className='';};var C=A.getAttribute('style');if (C&&C.length>0){B.Inline=C;A.setAttribute('style','',0);};return B;};FCKTools.RestoreStyles=function(A,B){A.className=B.Class||'';if (B.Inline) A.setAttribute('style',B.Inline,0);else A.removeAttribute('style',0);};FCKTools.RegisterDollarFunction=function(A){A.$=function(id){return this.document.getElementById(id);};};FCKTools.AppendElement=function(A,B){return A.appendChild(A.ownerDocument.createElement(B));};FCKTools.GetElementPosition=function(A,B){var c={ X:0,Y:0 };var C=B||window;var D=FCKTools.GetElementWindow(A);while (A){var E=D.getComputedStyle(A,'').position;if (E&&E!='static'&&A.style.zIndex!=FCKConfig.FloatingPanelsZIndex) break;c.X+=A.offsetLeft-A.scrollLeft;c.Y+=A.offsetTop-A.scrollTop;if (A.offsetParent) A=A.offsetParent;else{if (D!=C){A=D.frameElement;if (A) D=FCKTools.GetElementWindow(A);}else{c.X+=A.scrollLeft;c.Y+=A.scrollTop;break;}}};return c;} -var FCKeditorAPI;function InitializeAPI(){var A=window.parent;if (!(FCKeditorAPI=A.FCKeditorAPI)){var B='var FCKeditorAPI = {Version : "2.4.1",VersionBuild : "14797",__Instances : new Object(),GetInstance : function( name ){return this.__Instances[ name ];},_FormSubmit : function(){for ( var name in FCKeditorAPI.__Instances ){var oEditor = FCKeditorAPI.__Instances[ name ] ;if ( oEditor.GetParentForm && oEditor.GetParentForm() == this )oEditor.UpdateLinkedField() ;}this._FCKOriginalSubmit() ;},_FunctionQueue : {Functions : new Array(),IsRunning : false,Add : function( f ){this.Functions.push( f );if ( !this.IsRunning )this.StartNext();},StartNext : function(){var aQueue = this.Functions ;if ( aQueue.length > 0 ){this.IsRunning = true;aQueue[0].call();}else this.IsRunning = false;},Remove : function( f ){var aQueue = this.Functions;var i = 0, fFunc;while( (fFunc = aQueue[ i ]) ){if ( fFunc == f )aQueue.splice( i,1 );i++ ;}this.StartNext();}}}';if (A.execScript) A.execScript(B,'JavaScript');else{if (FCKBrowserInfo.IsGecko10){eval.call(A,B);}else if (FCKBrowserInfo.IsSafari){var C=A.document;var D=C.createElement('script');D.appendChild(C.createTextNode(B));C.documentElement.appendChild(D);}else A.eval(B);};FCKeditorAPI=A.FCKeditorAPI;};FCKeditorAPI.__Instances[FCK.Name]=FCK;};function _AttachFormSubmitToAPI(){var A=FCK.GetParentForm();if (A){FCKTools.AddEventListener(A,'submit',FCK.UpdateLinkedField);if (!A._FCKOriginalSubmit&&(typeof(A.submit)=='function'||(!A.submit.tagName&&!A.submit.length))){A._FCKOriginalSubmit=A.submit;A.submit=FCKeditorAPI._FormSubmit;}}};function FCKeditorAPI_Cleanup(){delete FCKeditorAPI.__Instances[FCK.Name];};FCKTools.AddEventListener(window,'unload',FCKeditorAPI_Cleanup); -var FCKImagePreloader=function(){this._Images=[];};FCKImagePreloader.prototype={AddImages:function(A){if (typeof(A)=='string') A=A.split(';');this._Images=this._Images.concat(A);},Start:function(){var A=this._Images;this._PreloadCount=A.length;for (var i=0;i]*\>)([\s\S]*)(\<\/body\>[\s\S]*)/i,ToReplace:/___fcktoreplace:([\w]+)/ig,MetaHttpEquiv:/http-equiv\s*=\s*["']?([^"' ]+)/i,HasBaseTag:/]*>/i,HeadOpener:/]*>/i,HeadCloser:/<\/head\s*>/i,FCK_Class:/(\s*FCK__[A-Za-z]*\s*)/,ElementName:/(^[a-z_:][\w.\-:]*\w$)|(^[a-z_]$)/,ForceSimpleAmpersand:/___FCKAmp___/g,SpaceNoClose:/\/>/g,EmptyParagraph:/^<([^ >]+)[^>]*>\s*(<\/\1>)?$/,EmptyOutParagraph:/^<([^ >]+)[^>]*>(?:\s*| )(<\/\1>)?$/,TagBody:/>])/gi,StrongCloser:/<\/STRONG>/gi,EmOpener:/])/gi,EmCloser:/<\/EM>/gi,GeckoEntitiesMarker:/#\?-\:/g,ProtectUrlsImg:/]+))/gi,ProtectUrlsA:/]+))/gi,Html4DocType:/HTML 4\.0 Transitional/i,DocTypeTag:/]*>/i,TagsWithEvent:/<[^\>]+ on\w+[\s\r\n]*=[\s\r\n]*?('|")[\s\S]+?\>/g,EventAttributes:/\s(on\w+)[\s\r\n]*=[\s\r\n]*?('|")([\s\S]*?)\2/g,ProtectedEvents:/\s\w+_fckprotectedatt="([^"]+)"/g,StyleProperties:/\S+\s*:/g,InvalidSelfCloseTags:/(<(?!base|meta|link|hr|br|param|img|area|input)([a-zA-Z0-9:]+)[^>]*)\/>/gi}; -var FCKListsLib={BlockElements:{ address:1,blockquote:1,center:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,noscript:1,ol:1,p:1,pre:1,script:1,table:1,ul:1 },NonEmptyBlockElements:{ p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,address:1,pre:1,ol:1,ul:1,li:1,td:1,th:1 },InlineChildReqElements:{ abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1 },EmptyElements:{ base:1,meta:1,link:1,hr:1,br:1,param:1,img:1,area:1,input:1 },PathBlockElements:{ address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,ol:1,ul:1,li:1,dt:1,de:1 },PathBlockLimitElements:{ body:1,td:1,th:1,caption:1,form:1 },Setup:function(){if (FCKConfig.EnterMode=='div') this.PathBlockElements.div=1;else this.PathBlockLimitElements.div=1;}}; -var FCKLanguageManager=FCK.Language={AvailableLanguages:{af:'Afrikaans',ar:'Arabic',bg:'Bulgarian',bn:'Bengali/Bangla',bs:'Bosnian',ca:'Catalan',cs:'Czech',da:'Danish',de:'German',el:'Greek',en:'English','en-au':'English (Australia)','en-ca':'English (Canadian)','en-uk':'English (United Kingdom)',eo:'Esperanto',es:'Spanish',et:'Estonian',eu:'Basque',fa:'Persian',fi:'Finnish',fo:'Faroese',fr:'French',gl:'Galician',he:'Hebrew',hi:'Hindi',hr:'Croatian',hu:'Hungarian',it:'Italian',ja:'Japanese',km:'Khmer',ko:'Korean',lt:'Lithuanian',lv:'Latvian',mn:'Mongolian',ms:'Malay',nb:'Norwegian Bokmal',nl:'Dutch',no:'Norwegian',pl:'Polish',pt:'Portuguese (Portugal)','pt-br':'Portuguese (Brazil)',ro:'Romanian',ru:'Russian',sk:'Slovak',sl:'Slovenian',sr:'Serbian (Cyrillic)','sr-latn':'Serbian (Latin)',sv:'Swedish',th:'Thai',tr:'Turkish',uk:'Ukrainian',vi:'Vietnamese',zh:'Chinese Traditional','zh-cn':'Chinese Simplified'},GetActiveLanguage:function(){if (FCKConfig.AutoDetectLanguage){var A;if (navigator.userLanguage) A=navigator.userLanguage.toLowerCase();else if (navigator.language) A=navigator.language.toLowerCase();else{return FCKConfig.DefaultLanguage;};if (A.length>=5){A=A.substr(0,5);if (this.AvailableLanguages[A]) return A;};if (A.length>=2){A=A.substr(0,2);if (this.AvailableLanguages[A]) return A;}};return this.DefaultLanguage;},TranslateElements:function(A,B,C,D){var e=A.getElementsByTagName(B);var E,s;for (var i=0;i0) C+='|'+FCKConfig.AdditionalNumericEntities;FCKXHtmlEntities.EntitiesRegex=new RegExp(C,'g');} -var FCKXHtml={};FCKXHtml.CurrentJobNum=0;FCKXHtml.GetXHTML=function(A,B,C){FCKXHtmlEntities.Initialize();this._NbspEntity=(FCKConfig.ProcessHTMLEntities?'nbsp':'#160');var D=FCK.IsDirty();this._CreateNode=FCKConfig.ForceStrongEm?FCKXHtml_CreateNode_StrongEm:FCKXHtml_CreateNode_Normal;FCKXHtml.SpecialBlocks=[];this.XML=FCKTools.CreateXmlObject('DOMDocument');this.MainNode=this.XML.appendChild(this.XML.createElement('xhtml'));FCKXHtml.CurrentJobNum++;if (B) this._AppendNode(this.MainNode,A);else this._AppendChildNodes(this.MainNode,A,false);var E=this._GetMainXmlString();this.XML=null;E=E.substr(7,E.length-15).Trim();if (FCKBrowserInfo.IsGecko) E=E.replace(/$/,'');E=E.replace(FCKRegexLib.SpaceNoClose,' />');if (FCKConfig.ForceSimpleAmpersand) E=E.replace(FCKRegexLib.ForceSimpleAmpersand,'&');if (C) E=FCKCodeFormatter.Format(E);for (var i=0;i0;if (C) A.appendChild(this.XML.createTextNode(B.replace(FCKXHtmlEntities.EntitiesRegex,FCKXHtml_GetEntity)));return C;};function FCKXHtml_GetEntity(A){var B=FCKXHtmlEntities.Entities[A]||('#'+A.charCodeAt(0));return '#?-:'+B+';';};FCKXHtml._RemoveAttribute=function(A,B,C){var D=A.attributes.getNamedItem(C);if (D&&B.test(D.nodeValue)){var E=D.nodeValue.replace(B,'');if (E.length==0) A.attributes.removeNamedItem(C);else D.nodeValue=E;}};FCKXHtml.TagProcessors={img:function(A,B){if (!A.attributes.getNamedItem('alt')) FCKXHtml._AppendAttribute(A,'alt','');var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'src',C);return A;},a:function(A,B){if (B.innerHTML.Trim().length==0&&!B.name) return false;var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);if (FCKBrowserInfo.IsIE){FCKXHtml._RemoveAttribute(A,FCKRegexLib.FCK_Class,'class');if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);};A=FCKXHtml._AppendChildNodes(A,B,false);return A;},script:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/javascript');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.text)));return A;},style:function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/css');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.innerHTML)));return A;},title:function(A,B){A.appendChild(FCKXHtml.XML.createTextNode(FCK.EditorDocument.title));return A;},table:function(A,B){if (FCKBrowserInfo.IsIE) FCKXHtml._RemoveAttribute(A,FCKRegexLib.FCK_Class,'class');A=FCKXHtml._AppendChildNodes(A,B,false);return A;},ol:function(A,B,C){if (B.innerHTML.Trim().length==0) return false;var D=C.lastChild;if (D&&D.nodeType==3) D=D.previousSibling;if (D&&D.nodeName.toUpperCase()=='LI'){B._fckxhtmljob=null;FCKXHtml._AppendNode(D,B);return false;};A=FCKXHtml._AppendChildNodes(A,B);return A;},span:function(A,B){if (B.innerHTML.length==0) return false;A=FCKXHtml._AppendChildNodes(A,B,false);return A;},iframe:function(A,B){var C=B.innerHTML;if (FCKBrowserInfo.IsGecko) C=FCKTools.HTMLDecode(C);C=C.replace(/\s_fcksavedurl="[^"]*"/g,'');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(C)));return A;}};FCKXHtml.TagProcessors.ul=FCKXHtml.TagProcessors.ol; -FCKXHtml._GetMainXmlString=function(){var A=new XMLSerializer();return A.serializeToString(this.MainNode);};FCKXHtml._AppendAttributes=function(A,B,C){var D=B.attributes;for (var n=0;n]*\>/gi;A.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;A.NewLineTags=/\<(BR|HR)[^\>]*\>/gi;A.MainTags=/\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi;A.LineSplitter=/\s*\n+\s*/g;A.IncreaseIndent=/^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \/\>]/i;A.DecreaseIndent=/^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \>]/i;A.FormatIndentatorRemove=new RegExp('^'+FCKConfig.FormatIndentator);A.ProtectedTags=/(]*>)([\s\S]*?)(<\/PRE>)/gi;};FCKCodeFormatter._ProtectData=function(A,B,C,D){return B+'___FCKpd___'+FCKCodeFormatter.ProtectedData.AddItem(C)+D;};FCKCodeFormatter.Format=function(A){if (!this.Regex) this.Init();FCKCodeFormatter.ProtectedData=[];var B=A.replace(this.Regex.ProtectedTags,FCKCodeFormatter._ProtectData);B=B.replace(this.Regex.BlocksOpener,'\n$&');B=B.replace(this.Regex.BlocksCloser,'$&\n');B=B.replace(this.Regex.NewLineTags,'$&\n');B=B.replace(this.Regex.MainTags,'\n$&\n');var C='';var D=B.split(this.Regex.LineSplitter);B='';for (var i=0;i0) C.removeChild(C.childNodes[0]);if (this.Mode==0){var E=this.IFrame=D.createElement('iframe');E.src='javascript:void(0)';E.frameBorder=0;E.width=E.height='100%';C.appendChild(E);if (FCKBrowserInfo.IsIE) A=A.replace(/(]*?)\s*\/?>(?!\s*<\/base>)/gi,'$1>');else if (!B){if (FCKBrowserInfo.IsGecko) A=A.replace(/(]*>)\s*(<\/body>)/i,'$1'+GECKO_BOGUS+'$2');var F=A.match(FCKRegexLib.BodyContents);if (F){A=F[1]+' '+F[3];this._BodyHTML=F[2];}else this._BodyHTML=A;};this.Window=E.contentWindow;var G=this.Document=this.Window.document;G.open();G.write(A);G.close();if (FCKBrowserInfo.IsGecko10&&!B){this.Start(A,true);return;};this.Window._FCKEditingArea=this;if (FCKBrowserInfo.IsGecko10) this.Window.setTimeout(FCKEditingArea_CompleteStart,500);else FCKEditingArea_CompleteStart.call(this.Window);}else{var H=this.Textarea=D.createElement('textarea');H.className='SourceField';H.dir='ltr';H.style.width=H.style.height='100%';H.style.border='none';C.appendChild(H);H.value=A;FCKTools.RunFunction(this.OnLoad);}};function FCKEditingArea_CompleteStart(){if (!this.document.body){this.setTimeout(FCKEditingArea_CompleteStart,50);return;};var A=this._FCKEditingArea;A.MakeEditable();FCKTools.RunFunction(A.OnLoad);};FCKEditingArea.prototype.MakeEditable=function(){var A=this.Document;if (FCKBrowserInfo.IsIE){A.body.contentEditable=true;}else{try{A.body.spellcheck=(this.FFSpellChecker!==false);if (this._BodyHTML){A.body.innerHTML=this._BodyHTML;this._BodyHTML=null;};A.designMode='on';try{A.execCommand('styleWithCSS',false,FCKConfig.GeckoUseSPAN);}catch (e){A.execCommand('useCSS',false,!FCKConfig.GeckoUseSPAN);};A.execCommand('enableObjectResizing',false,!FCKConfig.DisableObjectResizing);A.execCommand('enableInlineTableEditing',false,!FCKConfig.DisableFFTableHandles);}catch (e) {}}};FCKEditingArea.prototype.Focus=function(){try{if (this.Mode==0){if (FCKBrowserInfo.IsIE&&this.Document.hasFocus()) return;if (FCKBrowserInfo.IsSafari) this.IFrame.focus();else{this.Window.focus();}}else{var A=FCKTools.GetElementDocument(this.Textarea);if ((!A.hasFocus||A.hasFocus())&&A.activeElement==this.Textarea) return;this.Textarea.focus();}}catch(e) {}};function FCKEditingArea_Cleanup(){this.TargetElement=null;this.IFrame=null;this.Document=null;this.Textarea=null;if (this.Window){this.Window._FCKEditingArea=null;this.Window=null;}}; -var FCKKeystrokeHandler=function(A){this.Keystrokes={};this.CancelCtrlDefaults=(A!==false);};FCKKeystrokeHandler.prototype.AttachToElement=function(A){FCKTools.AddEventListenerEx(A,'keydown',_FCKKeystrokeHandler_OnKeyDown,this);if (FCKBrowserInfo.IsGecko10||FCKBrowserInfo.IsOpera||(FCKBrowserInfo.IsGecko&&FCKBrowserInfo.IsMac)) FCKTools.AddEventListenerEx(A,'keypress',_FCKKeystrokeHandler_OnKeyPress,this);};FCKKeystrokeHandler.prototype.SetKeystrokes=function(){for (var i=0;i40))){B._CancelIt=true;if (A.preventDefault) return A.preventDefault();A.returnValue=false;A.cancelBubble=true;return false;};return true;};function _FCKKeystrokeHandler_OnKeyPress(A,B){if (B._CancelIt){if (A.preventDefault) return A.preventDefault();return false;};return true;} -var FCKListHandler={OutdentListItem:function(A){var B=A.parentNode;if (B.tagName.toUpperCase().Equals('UL','OL')){var C=FCKTools.GetElementDocument(A);var D=new FCKDocumentFragment(C);var E=D.RootNode;var F=false;var G=FCKDomTools.GetFirstChild(A,['UL','OL']);if (G){F=true;var H;while ((H=G.firstChild)) E.appendChild(G.removeChild(H));FCKDomTools.RemoveNode(G);};var I;var J=false;while ((I=A.nextSibling)){if (!F&&I.nodeType==1&&I.nodeName.toUpperCase()=='LI') J=F=true;E.appendChild(I.parentNode.removeChild(I));if (!J&&I.nodeType==1&&I.nodeName.toUpperCase().Equals('UL','OL')) FCKDomTools.RemoveNode(I,true);};var K=B.parentNode.tagName.toUpperCase();var L=(K=='LI');if (L||K.Equals('UL','OL')){if (F){var G=B.cloneNode(false);D.AppendTo(G);A.appendChild(G);}else if (L) D.InsertAfterNode(B.parentNode);else D.InsertAfterNode(B);if (L) FCKDomTools.InsertAfterNode(B.parentNode,B.removeChild(A));else FCKDomTools.InsertAfterNode(B,B.removeChild(A));}else{if (F){var N=B.cloneNode(false);D.AppendTo(N);FCKDomTools.InsertAfterNode(B,N);};var O=C.createElement(FCKConfig.EnterMode=='p'?'p':'div');FCKDomTools.MoveChildren(B.removeChild(A),O);FCKDomTools.InsertAfterNode(B,O);if (FCKConfig.EnterMode=='br'){if (FCKBrowserInfo.IsGecko) O.parentNode.insertBefore(FCKTools.CreateBogusBR(C),O);else FCKDomTools.InsertAfterNode(O,FCKTools.CreateBogusBR(C));FCKDomTools.RemoveNode(O,true);}};if (this.CheckEmptyList(B)) FCKDomTools.RemoveNode(B,true);}},CheckEmptyList:function(A){return (FCKDomTools.GetFirstChild(A,'LI')==null);},CheckListHasContents:function(A){var B=A.firstChild;while (B){switch (B.nodeType){case 1:if (!B.nodeName.IEquals('UL','LI')) return true;break;case 3:if (B.nodeValue.Trim().length>0) return true;};B=B.nextSibling;};return false;}}; -var FCKElementPath=function(A){var B=null;var C=null;var D=[];var e=A;while (e){if (e.nodeType==1){if (!this.LastElement) this.LastElement=e;var E=e.nodeName.toLowerCase();if (!C){if (!B&&FCKListsLib.PathBlockElements[E]!=null) B=e;if (FCKListsLib.PathBlockLimitElements[E]!=null) C=e;};D.push(e);if (E=='body') break;};e=e.parentNode;};this.Block=B;this.BlockLimit=C;this.Elements=D;}; -var FCKDomRange=function(A){this.Window=A;};FCKDomRange.prototype={_UpdateElementInfo:function(){if (!this._Range) this.Release(true);else{var A=this._Range.startContainer;var B=this._Range.endContainer;var C=new FCKElementPath(A);this.StartContainer=C.LastElement;this.StartBlock=C.Block;this.StartBlockLimit=C.BlockLimit;if (A!=B) C=new FCKElementPath(B);this.EndContainer=C.LastElement;this.EndBlock=C.Block;this.EndBlockLimit=C.BlockLimit;}},CreateRange:function(){return new FCKW3CRange(this.Window.document);},DeleteContents:function(){if (this._Range){this._Range.deleteContents();this._UpdateElementInfo();}},ExtractContents:function(){if (this._Range){var A=this._Range.extractContents();this._UpdateElementInfo();return A;}},CheckIsCollapsed:function(){if (this._Range) return this._Range.collapsed;},Collapse:function(A){if (this._Range) this._Range.collapse(A);this._UpdateElementInfo();},Clone:function(){var A=FCKTools.CloneObject(this);if (this._Range) A._Range=this._Range.cloneRange();return A;},MoveToNodeContents:function(A){if (!this._Range) this._Range=this.CreateRange();this._Range.selectNodeContents(A);this._UpdateElementInfo();},MoveToElementStart:function(A){this.SetStart(A,1);this.SetEnd(A,1);},MoveToElementEditStart:function(A){var B;while ((B=A.firstChild)&&B.nodeType==1&&FCKListsLib.EmptyElements[B.nodeName.toLowerCase()]==null) A=B;this.MoveToElementStart(A);},InsertNode:function(A){if (this._Range) this._Range.insertNode(A);},CheckIsEmpty:function(A){if (this.CheckIsCollapsed()) return true;var B=this.Window.document.createElement('div');this._Range.cloneContents().AppendTo(B);FCKDomTools.TrimNode(B,A);return (B.innerHTML.length==0);},CheckStartOfBlock:function(){var A=this.Clone();A.Collapse(true);A.SetStart(A.StartBlock||A.StartBlockLimit,1);var B=A.CheckIsEmpty();A.Release();return B;},CheckEndOfBlock:function(A){var B=this.Clone();B.Collapse(false);B.SetEnd(B.EndBlock||B.EndBlockLimit,2);var C=B.CheckIsCollapsed();if (!C){var D=this.Window.document.createElement('div');B._Range.cloneContents().AppendTo(D);FCKDomTools.TrimNode(D,true);C=true;var E=D;while ((E=E.lastChild)){if (E.previousSibling||E.nodeType!=1||FCKListsLib.InlineChildReqElements[E.nodeName.toLowerCase()]==null){C=false;break;}}};B.Release();if (A) this.Select();return C;},CreateBookmark:function(){var A={StartId:'fck_dom_range_start_'+(new Date()).valueOf()+'_'+Math.floor(Math.random()*1000),EndId:'fck_dom_range_end_'+(new Date()).valueOf()+'_'+Math.floor(Math.random()*1000)};var B=this.Window.document;var C;var D;if (!this.CheckIsCollapsed()){C=B.createElement('span');C.id=A.EndId;C.innerHTML=' ';D=this.Clone();D.Collapse(false);D.InsertNode(C);};C=B.createElement('span');C.id=A.StartId;C.innerHTML=' ';D=this.Clone();D.Collapse(true);D.InsertNode(C);return A;},MoveToBookmark:function(A,B){var C=this.Window.document;var D=C.getElementById(A.StartId);var E=C.getElementById(A.EndId);this.SetStart(D,3);if (!B) FCKDomTools.RemoveNode(D);if (E){this.SetEnd(E,3);if (!B) FCKDomTools.RemoveNode(E);}else this.Collapse(true);},SetStart:function(A,B){var C=this._Range;if (!C) C=this._Range=this.CreateRange();switch(B){case 1:C.setStart(A,0);break;case 2:C.setStart(A,A.childNodes.length);break;case 3:C.setStartBefore(A);break;case 4:C.setStartAfter(A);};this._UpdateElementInfo();},SetEnd:function(A,B){var C=this._Range;if (!C) C=this._Range=this.CreateRange();switch(B){case 1:C.setEnd(A,0);break;case 2:C.setEnd(A,A.childNodes.length);break;case 3:C.setEndBefore(A);break;case 4:C.setEndAfter(A);};this._UpdateElementInfo();},Expand:function(A){var B,oSibling;switch (A){case 'block_contents':if (this.StartBlock) this.SetStart(this.StartBlock,1);else{B=this._Range.startContainer;if (B.nodeType==1){if (!(B=B.childNodes[this._Range.startOffset])) B=B.firstChild;};if (!B) return;while (true){oSibling=B.previousSibling;if (!oSibling){if (B.parentNode!=this.StartBlockLimit) B=B.parentNode;else break;}else if (oSibling.nodeType!=1||!(/^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DT|DE)$/).test(oSibling.nodeName.toUpperCase())){B=oSibling;}else break;};this._Range.setStartBefore(B);};if (this.EndBlock) this.SetEnd(this.EndBlock,2);else{B=this._Range.endContainer;if (B.nodeType==1) B=B.childNodes[this._Range.endOffset]||B.lastChild;if (!B) return;while (true){oSibling=B.nextSibling;if (!oSibling){if (B.parentNode!=this.EndBlockLimit) B=B.parentNode;else break;}else if (oSibling.nodeType!=1||!(/^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DT|DE)$/).test(oSibling.nodeName.toUpperCase())){B=oSibling;}else break;};this._Range.setEndAfter(B);};this._UpdateElementInfo();}},Release:function(A){if (!A) this.Window=null;this.StartContainer=null;this.StartBlock=null;this.StartBlockLimit=null;this.EndContainer=null;this.EndBlock=null;this.EndBlockLimit=null;this._Range=null;}}; -FCKDomRange.prototype.MoveToSelection=function(){this.Release(true);var A=this.Window.getSelection();if (A.rangeCount==1){this._Range=FCKW3CRange.CreateFromRange(this.Window.document,A.getRangeAt(0));this._UpdateElementInfo();}};FCKDomRange.prototype.Select=function(){var A=this._Range;if (A){var B=this.Window.document.createRange();B.setStart(A.startContainer,A.startOffset);try{B.setEnd(A.endContainer,A.endOffset);}catch (e){if (e.toString().Contains('NS_ERROR_ILLEGAL_VALUE')){A.collapse(true);B.setEnd(A.endContainer,A.endOffset);}else throw(e);};var C=this.Window.getSelection();C.removeAllRanges();C.addRange(B);}}; -var FCKDocumentFragment=function(A,B){this.RootNode=B||A.createDocumentFragment();};FCKDocumentFragment.prototype={AppendTo:function(A){A.appendChild(this.RootNode);},InsertAfterNode:function(A){FCKDomTools.InsertAfterNode(A,this.RootNode);}} -var FCKW3CRange=function(A){this._Document=A;this.startContainer=null;this.startOffset=null;this.endContainer=null;this.endOffset=null;this.collapsed=true;};FCKW3CRange.CreateRange=function(A){return new FCKW3CRange(A);};FCKW3CRange.CreateFromRange=function(A,B){var C=FCKW3CRange.CreateRange(A);C.setStart(B.startContainer,B.startOffset);C.setEnd(B.endContainer,B.endOffset);return C;};FCKW3CRange.prototype={_UpdateCollapsed:function(){this.collapsed=(this.startContainer==this.endContainer&&this.startOffset==this.endOffset);},setStart:function(A,B){this.startContainer=A;this.startOffset=B;if (!this.endContainer){this.endContainer=A;this.endOffset=B;};this._UpdateCollapsed();},setEnd:function(A,B){this.endContainer=A;this.endOffset=B;if (!this.startContainer){this.startContainer=A;this.startOffset=B;};this._UpdateCollapsed();},setStartAfter:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setStartBefore:function(A){this.setStart(A.parentNode,FCKDomTools.GetIndexOf(A));},setEndAfter:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A)+1);},setEndBefore:function(A){this.setEnd(A.parentNode,FCKDomTools.GetIndexOf(A));},collapse:function(A){if (A){this.endContainer=this.startContainer;this.endOffset=this.startOffset;}else{this.startContainer=this.endContainer;this.startOffset=this.endOffset;};this.collapsed=true;},selectNodeContents:function(A){this.setStart(A,0);this.setEnd(A,A.nodeType==3?A.data.length:A.childNodes.length);},insertNode:function(A){var B=this.startContainer;var C=this.startOffset;if (B.nodeType==3){B.splitText(C);if (B==this.endContainer) this.setEnd(B.nextSibling,this.endOffset-this.startOffset);FCKDomTools.InsertAfterNode(B,A);return;}else{B.insertBefore(A,B.childNodes[C]||null);if (B==this.endContainer){this.endOffset++;this.collapsed=false;}}},deleteContents:function(){if (this.collapsed) return;this._ExecContentsAction(0);},extractContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(1,A);return A;},cloneContents:function(){var A=new FCKDocumentFragment(this._Document);if (!this.collapsed) this._ExecContentsAction(2,A);return A;},_ExecContentsAction:function(A,B){var C=this.startContainer;var D=this.endContainer;var E=this.startOffset;var F=this.endOffset;var G=false;var H=false;if (D.nodeType==3) D=D.splitText(F);else{if (D.childNodes.length>0){if (F>D.childNodes.length-1){D=FCKDomTools.InsertAfterNode(D.lastChild,this._Document.createTextNode(''));H=true;}else D=D.childNodes[F];}};if (C.nodeType==3){C.splitText(E);if (C==D) D=C.nextSibling;}else{if (C.childNodes.length>0&&E<=C.childNodes.length-1){if (E==0){C=C.insertBefore(this._Document.createTextNode(''),C.firstChild);G=true;}else C=C.childNodes[E].previousSibling;}};var I=FCKDomTools.GetParents(C);var J=FCKDomTools.GetParents(D);var i,topStart,topEnd;for (i=0;i0&&levelStartNode!=D) levelClone=K.appendChild(levelStartNode.cloneNode(levelStartNode==D));if (!I[k]||levelStartNode.parentNode!=I[k].parentNode){currentNode=levelStartNode.previousSibling;while(currentNode){if (currentNode==I[k]||currentNode==C) break;currentSibling=currentNode.previousSibling;if (A==2) K.insertBefore(currentNode.cloneNode(true),K.firstChild);else{currentNode.parentNode.removeChild(currentNode);if (A==1) K.insertBefore(currentNode,K.firstChild);};currentNode=currentSibling;}};if (K) K=levelClone;};if (A==2){var L=this.startContainer;if (L.nodeType==3){L.data+=L.nextSibling.data;L.parentNode.removeChild(L.nextSibling);};var M=this.endContainer;if (M.nodeType==3&&M.nextSibling){M.data+=M.nextSibling.data;M.parentNode.removeChild(M.nextSibling);}}else{if (topStart&&topEnd&&(C.parentNode!=topStart.parentNode||D.parentNode!=topEnd.parentNode)) this.setStart(topEnd.parentNode,FCKDomTools.GetIndexOf(topEnd));this.collapse(true);};if(G) C.parentNode.removeChild(C);if(H&&D.parentNode) D.parentNode.removeChild(D);},cloneRange:function(){return FCKW3CRange.CreateFromRange(this._Document,this);},toString:function(){var A=this.cloneContents();var B=this._Document.createElement('div');A.AppendTo(B);return B.textContent||B.innerText;}}; -var FCKEnterKey=function(A,B,C){this.Window=A;this.EnterMode=B||'p';this.ShiftEnterMode=C||'br';var D=new FCKKeystrokeHandler(false);D._EnterKey=this;D.OnKeystroke=FCKEnterKey_OnKeystroke;D.SetKeystrokes([[13,'Enter'],[SHIFT+13,'ShiftEnter'],[8,'Backspace'],[46,'Delete']]);D.AttachToElement(A.document);};function FCKEnterKey_OnKeystroke(A,B){var C=this._EnterKey;try{switch (B){case 'Enter':return C.DoEnter();break;case 'ShiftEnter':return C.DoShiftEnter();break;case 'Backspace':return C.DoBackspace();break;case 'Delete':return C.DoDelete();}}catch (e){};return false;};FCKEnterKey.prototype.DoEnter=function(A,B){this._HasShift=(B===true);var C=A||this.EnterMode;if (C=='br') return this._ExecuteEnterBr();else return this._ExecuteEnterBlock(C);};FCKEnterKey.prototype.DoShiftEnter=function(){return this.DoEnter(this.ShiftEnterMode,true);};FCKEnterKey.prototype.DoBackspace=function(){var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (!B.CheckIsCollapsed()) return false;var C=B.StartBlock;var D=B.EndBlock;if (B.StartBlockLimit==B.EndBlockLimit&&C&&D){if (!B.CheckIsCollapsed()){var E=B.CheckEndOfBlock();B.DeleteContents();if (C!=D){B.SetStart(D,1);B.SetEnd(D,1);};B.Select();A=(C==D);};if (B.CheckStartOfBlock()){var F=B.StartBlock;var G=FCKDomTools.GetPreviousSourceElement(F,true,['BODY',B.StartBlockLimit.nodeName],['UL','OL']);A=this._ExecuteBackspace(B,G,F);}else if (FCKBrowserInfo.IsGecko){B.Select();}};B.Release();return A;};FCKEnterKey.prototype._ExecuteBackspace=function(A,B,C){var D=false;if (!B&&C.nodeName.IEquals('LI')&&C.parentNode.parentNode.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};if (B&&B.nodeName.IEquals('LI')){var E=FCKDomTools.GetLastChild(B,['UL','OL']);while (E){B=FCKDomTools.GetLastChild(E,'LI');E=FCKDomTools.GetLastChild(B,['UL','OL']);}};if (B&&C){if (C.nodeName.IEquals('LI')&&!B.nodeName.IEquals('LI')){this._OutdentWithSelection(C,A);return true;};var F=C.parentNode;var G=B.nodeName.toLowerCase();if (FCKListsLib.EmptyElements[G]!=null||G=='table'){FCKDomTools.RemoveNode(B);D=true;}else{FCKDomTools.RemoveNode(C);while (F.innerHTML.Trim().length==0){var H=F.parentNode;H.removeChild(F);F=H;};FCKDomTools.TrimNode(C);FCKDomTools.TrimNode(B);A.SetStart(B,2);A.Collapse(true);var I=A.CreateBookmark();FCKDomTools.MoveChildren(C,B);A.MoveToBookmark(I);A.Select();D=true;}};return D;};FCKEnterKey.prototype.DoDelete=function(){var A=false;var B=new FCKDomRange(this.Window);B.MoveToSelection();if (B.CheckIsCollapsed()&&B.CheckEndOfBlock(FCKBrowserInfo.IsGecko)){var C=B.StartBlock;var D=FCKDomTools.GetNextSourceElement(C,true,[B.StartBlockLimit.nodeName],['UL','OL']);A=this._ExecuteBackspace(B,C,D);};B.Release();return A;};FCKEnterKey.prototype._ExecuteEnterBlock=function(A,B){var C=B||new FCKDomRange(this.Window);if (!B) C.MoveToSelection();if (C.StartBlockLimit==C.EndBlockLimit){if (!C.StartBlock) this._FixBlock(C,true,A);if (!C.EndBlock) this._FixBlock(C,false,A);var D=C.StartBlock;var E=C.EndBlock;if (!C.CheckIsEmpty()) C.DeleteContents();if (D==E){var F;var G=C.CheckStartOfBlock();var H=C.CheckEndOfBlock();if (G&&!H){F=D.cloneNode(false);if (FCKBrowserInfo.IsGeckoLike) F.innerHTML=GECKO_BOGUS;D.parentNode.insertBefore(F,D);if (FCKBrowserInfo.IsIE){C.MoveToNodeContents(F);C.Select();};C.MoveToElementEditStart(D);}else{if (H){var I=D.tagName.toUpperCase();if (G&&I=='LI'){this._OutdentWithSelection(D,C);C.Release();return true;}else{if ((/^H[1-6]$/).test(I)||this._HasShift) F=this.Window.document.createElement(A);else{F=D.cloneNode(false);this._RecreateEndingTree(D,F);};if (FCKBrowserInfo.IsGeckoLike){F.innerHTML=GECKO_BOGUS;if (G) D.innerHTML=GECKO_BOGUS;}}}else{C.SetEnd(D,2);var J=C.ExtractContents();F=D.cloneNode(false);FCKDomTools.TrimNode(J.RootNode);if (J.RootNode.firstChild.nodeType==1&&J.RootNode.firstChild.tagName.toUpperCase().Equals('UL','OL')) F.innerHTML=GECKO_BOGUS;J.AppendTo(F);if (FCKBrowserInfo.IsGecko){this._AppendBogusBr(D);this._AppendBogusBr(F);}};if (F){FCKDomTools.InsertAfterNode(D,F);C.MoveToElementEditStart(F);if (FCKBrowserInfo.IsGecko) F.scrollIntoView(false);}}}else{C.MoveToElementEditStart(E);};C.Select();};C.Release();return true;};FCKEnterKey.prototype._ExecuteEnterBr=function(A){var B=new FCKDomRange(this.Window);B.MoveToSelection();if (B.StartBlockLimit==B.EndBlockLimit){B.DeleteContents();B.MoveToSelection();var C=B.CheckStartOfBlock();var D=B.CheckEndOfBlock();var E=B.StartBlock?B.StartBlock.tagName.toUpperCase():'';var F=this._HasShift;if (!F&&E=='LI') return this._ExecuteEnterBlock(null,B);if (!F&&D&&(/^H[1-6]$/).test(E)){FCKDebug.Output('BR - Header');FCKDomTools.InsertAfterNode(B.StartBlock,this.Window.document.createElement('br'));if (FCKBrowserInfo.IsGecko) FCKDomTools.InsertAfterNode(B.StartBlock,this.Window.document.createTextNode(''));B.SetStart(B.StartBlock.nextSibling,FCKBrowserInfo.IsIE?3:1);}else{FCKDebug.Output('BR - No Header');var G=this.Window.document.createElement('br');B.InsertNode(G);if (FCKBrowserInfo.IsGecko) FCKDomTools.InsertAfterNode(G,this.Window.document.createTextNode(''));if (D&&FCKBrowserInfo.IsGecko) this._AppendBogusBr(G.parentNode);if (FCKBrowserInfo.IsIE) B.SetStart(G,4);else B.SetStart(G.nextSibling,1);};B.Collapse(true);B.Select();};B.Release();return true;};FCKEnterKey.prototype._FixBlock=function(A,B,C){var D=A.CreateBookmark();A.Collapse(B);A.Expand('block_contents');var E=this.Window.document.createElement(C);A.ExtractContents().AppendTo(E);FCKDomTools.TrimNode(E);A.InsertNode(E);A.MoveToBookmark(D);};FCKEnterKey.prototype._AppendBogusBr=function(A){var B=A.getElementsByTagName('br');if (B) B=B[B.legth-1];if (!B||B.getAttribute('type',2)!='_moz') A.appendChild(FCKTools.CreateBogusBR(this.Window.document));};FCKEnterKey.prototype._RecreateEndingTree=function(A,B){while ((A=A.lastChild)&&A.nodeType==1&&FCKListsLib.InlineChildReqElements[A.nodeName.toLowerCase()]!=null) B=B.insertBefore(A.cloneNode(false),B.firstChild);};FCKEnterKey.prototype._OutdentWithSelection=function(A,B){var C=B.CreateBookmark();FCKListHandler.OutdentListItem(A);B.MoveToBookmark(C);B.Select();} -var FCKDocumentProcessor={};FCKDocumentProcessor._Items=[];FCKDocumentProcessor.AppendNew=function(){var A={};this._Items.AddItem(A);return A;};FCKDocumentProcessor.Process=function(A){var B,i=0;while((B=this._Items[i++])) B.ProcessDocument(A);};var FCKDocumentProcessor_CreateFakeImage=function(A,B){var C=FCK.EditorDocument.createElement('IMG');C.className=A;C.src=FCKConfig.FullBasePath+'images/spacer.gif';C.setAttribute('_fckfakelement','true',0);C.setAttribute('_fckrealelement',FCKTempBin.AddElement(B),0);return C;};if (FCKBrowserInfo.IsIE||FCKBrowserInfo.IsOpera){var FCKAnchorsProcessor=FCKDocumentProcessor.AppendNew();FCKAnchorsProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('A');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.name.length>0){if (C.innerHTML!=''){if (FCKBrowserInfo.IsIE) C.className+=' FCK__AnchorC';}else{var D=FCKDocumentProcessor_CreateFakeImage('FCK__Anchor',C.cloneNode(true));D.setAttribute('_fckanchor','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}}}};var FCKPageBreaksProcessor=FCKDocumentProcessor.AppendNew();FCKPageBreaksProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('DIV');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.style.pageBreakAfter=='always'&&C.childNodes.length==1&&C.childNodes[0].style&&C.childNodes[0].style.display=='none'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',C.cloneNode(true));C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};var FCKFlashProcessor=FCKDocumentProcessor.AppendNew();FCKFlashProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('EMBED');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){var D=C.attributes['type'];if ((C.src&&C.src.EndsWith('.swf',true))||(D&&D.nodeValue=='application/x-shockwave-flash')){var E=C.cloneNode(true);if (FCKBrowserInfo.IsIE){var F=['scale','play','loop','menu','wmode','quality'];for (var G=0;G0) A.style.width=FCKTools.ConvertHtmlSizeToStyle(B.width);if (B.height>0) A.style.height=FCKTools.ConvertHtmlSizeToStyle(B.height);};FCK.GetRealElement=function(A){var e=FCKTempBin.Elements[A.getAttribute('_fckrealelement')];if (A.getAttribute('_fckflash')){if (A.style.width.length>0) e.width=FCKTools.ConvertStyleSizeToHtml(A.style.width);if (A.style.height.length>0) e.height=FCKTools.ConvertStyleSizeToHtml(A.style.height);};return e;};if (FCKBrowserInfo.IsIE){FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('HR');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){var D=A.createElement('hr');D.mergeAttributes(C,true);FCKDomTools.InsertAfterNode(C,D);C.parentNode.removeChild(C);}}};FCKDocumentProcessor.AppendNew().ProcessDocument=function(A){var B=A.getElementsByTagName('INPUT');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.type=='hidden'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__InputHidden',C.cloneNode(true));D.setAttribute('_fckinputhidden','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}} -var FCKSelection=FCK.Selection={}; -FCKSelection.GetType=function(){this._Type='Text';var A;try { A=FCK.EditorWindow.getSelection();}catch (e) {};if (A&&A.rangeCount==1){var B=A.getRangeAt(0);if (B.startContainer==B.endContainer&&(B.endOffset-B.startOffset)==1&&B.startContainer.nodeType!=Node.TEXT_NODE) this._Type='Control';};return this._Type;};FCKSelection.GetSelectedElement=function(){if (this.GetType()=='Control'){var A=FCK.EditorWindow.getSelection();return A.anchorNode.childNodes[A.anchorOffset];};return null;};FCKSelection.GetParentElement=function(){if (this.GetType()=='Control') return FCKSelection.GetSelectedElement().parentNode;else{var A=FCK.EditorWindow.getSelection();if (A){var B=A.anchorNode;while (B&&B.nodeType!=1) B=B.parentNode;return B;}};return null;};FCKSelection.SelectNode=function(A){var B=FCK.EditorDocument.createRange();B.selectNode(A);var C=FCK.EditorWindow.getSelection();C.removeAllRanges();C.addRange(B);};FCKSelection.Collapse=function(A){var B=FCK.EditorWindow.getSelection();if (A==null||A===true) B.collapseToStart();else B.collapseToEnd();};FCKSelection.HasAncestorNode=function(A){var B=this.GetSelectedElement();if (!B&&FCK.EditorWindow){try { B=FCK.EditorWindow.getSelection().getRangeAt(0).startContainer;}catch(e){}};while (B){if (B.nodeType==1&&B.tagName==A) return true;B=B.parentNode;};return false;};FCKSelection.MoveToAncestorNode=function(A){var B;var C=this.GetSelectedElement();if (!C) C=FCK.EditorWindow.getSelection().getRangeAt(0).startContainer;while (C){if (C.nodeName==A) return C;C=C.parentNode;};return null;};FCKSelection.Delete=function(){var A=FCK.EditorWindow.getSelection();for (var i=0;i=0;i--){var D=B.rows[i];if (C==0&&D.cells.length==1){FCKTableHandler.DeleteRows(D);continue;};if (D.cells[C]) D.removeChild(D.cells[C]);}};FCKTableHandler.InsertCell=function(A){var B=A?A:FCKSelection.MoveToAncestorNode('TD');if (!B) return null;var C=FCK.EditorDocument.createElement('TD');if (FCKBrowserInfo.IsGecko) C.innerHTML=GECKO_BOGUS;if (B.cellIndex==B.parentNode.cells.length-1){B.parentNode.appendChild(C);}else{B.parentNode.insertBefore(C,B.nextSibling);};return C;};FCKTableHandler.DeleteCell=function(A){if (A.parentNode.cells.length==1){FCKTableHandler.DeleteRows(FCKTools.GetElementAscensor(A,'TR'));return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteCells=function(){var A=FCKTableHandler.GetSelectedCells();for (var i=A.length-1;i>=0;i--){FCKTableHandler.DeleteCell(A[i]);}};FCKTableHandler.MergeCells=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length<2) return;if (A[0].parentNode!=A[A.length-1].parentNode) return;var B=isNaN(A[0].colSpan)?1:A[0].colSpan;var C='';var D=FCK.EditorDocument.createDocumentFragment();for (var i=A.length-1;i>=0;i--){var E=A[i];for (var c=E.childNodes.length-1;c>=0;c--){var F=E.removeChild(E.childNodes[c]);if ((F.hasAttribute&&F.hasAttribute('_moz_editor_bogus_node'))||(F.getAttribute&&F.getAttribute('type',2)=='_moz')) continue;D.insertBefore(F,D.firstChild);};if (i>0){B+=isNaN(E.colSpan)?1:E.colSpan;FCKTableHandler.DeleteCell(E);}};A[0].colSpan=B;if (FCKBrowserInfo.IsGecko&&D.childNodes.length==0) A[0].innerHTML=GECKO_BOGUS;else A[0].appendChild(D);};FCKTableHandler.SplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=this._CreateTableMap(A[0].parentNode.parentNode);var C=FCKTableHandler._GetCellIndexSpan(B,A[0].parentNode.rowIndex,A[0]);var D=this._GetCollumnCells(B,C);for (var i=0;i1) E.rowSpan=A[0].rowSpan;}else{if (isNaN(D[i].colSpan)) D[i].colSpan=2;else D[i].colSpan+=1;}}};FCKTableHandler._GetCellIndexSpan=function(A,B,C){if (A.length';};FCKStyleDef.prototype.GetCloserTag=function(){return '';};FCKStyleDef.prototype.RemoveFromSelection=function(){if (FCKSelection.GetType()=='Control') this._RemoveMe(FCK.ToolbarSet.CurrentInstance.Selection.GetSelectedElement());else this._RemoveMe(FCK.ToolbarSet.CurrentInstance.Selection.GetParentElement());} -FCKStyleDef.prototype.ApplyToSelection=function(){if (FCKSelection.GetType()=='Text'&&!this.IsObjectElement){var A=FCK.ToolbarSet.CurrentInstance.EditorWindow.getSelection();var e=FCK.ToolbarSet.CurrentInstance.EditorDocument.createElement(this.Element);for (var i=0;i');else if (A=='div'&&FCKBrowserInfo.IsGecko) FCK.ExecuteNamedCommand('FormatBlock','div');else FCK.ExecuteNamedCommand('FormatBlock','<'+A+'>');};FCKFormatBlockCommand.prototype.GetState=function(){return FCK.GetNamedCommandValue('FormatBlock');};var FCKPreviewCommand=function(){this.Name='Preview';};FCKPreviewCommand.prototype.Execute=function(){FCK.Preview();};FCKPreviewCommand.prototype.GetState=function(){return 0;};var FCKSaveCommand=function(){this.Name='Save';};FCKSaveCommand.prototype.Execute=function(){var A=FCK.GetParentForm();if (typeof(A.onsubmit)=='function'){var B=A.onsubmit();if (B!=null&&B===false) return;};A.submit();};FCKSaveCommand.prototype.GetState=function(){return 0;};var FCKNewPageCommand=function(){this.Name='NewPage';};FCKNewPageCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();FCK.SetHTML('');FCKUndo.Typing=true;};FCKNewPageCommand.prototype.GetState=function(){return 0;};var FCKSourceCommand=function(){this.Name='Source';};FCKSourceCommand.prototype.Execute=function(){if (FCKConfig.SourcePopup){var A=FCKConfig.ScreenWidth*0.65;var B=FCKConfig.ScreenHeight*0.65;FCKDialog.OpenDialog('FCKDialog_Source',FCKLang.Source,'dialog/fck_source.html',A,B,null,null,true);}else FCK.SwitchEditMode();};FCKSourceCommand.prototype.GetState=function(){return (FCK.EditMode==0?0:1);};var FCKUndoCommand=function(){this.Name='Undo';};FCKUndoCommand.prototype.Execute=function(){if (FCKBrowserInfo.IsIE) FCKUndo.Undo();else FCK.ExecuteNamedCommand('Undo');};FCKUndoCommand.prototype.GetState=function(){if (FCKBrowserInfo.IsIE) return (FCKUndo.CheckUndoState()?0:-1);else return FCK.GetNamedCommandState('Undo');};var FCKRedoCommand=function(){this.Name='Redo';};FCKRedoCommand.prototype.Execute=function(){if (FCKBrowserInfo.IsIE) FCKUndo.Redo();else FCK.ExecuteNamedCommand('Redo');};FCKRedoCommand.prototype.GetState=function(){if (FCKBrowserInfo.IsIE) return (FCKUndo.CheckRedoState()?0:-1);else return FCK.GetNamedCommandState('Redo');};var FCKPageBreakCommand=function(){this.Name='PageBreak';};FCKPageBreakCommand.prototype.Execute=function(){var e=FCK.EditorDocument.createElement('DIV');e.style.pageBreakAfter='always';e.innerHTML=' ';var A=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',e);A=FCK.InsertElement(A);};FCKPageBreakCommand.prototype.GetState=function(){return 0;};var FCKUnlinkCommand=function(){this.Name='Unlink';};FCKUnlinkCommand.prototype.Execute=function(){if (FCKBrowserInfo.IsGecko){var A=FCK.Selection.MoveToAncestorNode('A');if (A) FCK.Selection.SelectNode(A);};FCK.ExecuteNamedCommand(this.Name);if (FCKBrowserInfo.IsGecko) FCK.Selection.Collapse(true);};FCKUnlinkCommand.prototype.GetState=function(){var A=FCK.GetNamedCommandState(this.Name);if (A==0&&FCK.EditMode==0){var B=FCKSelection.MoveToAncestorNode('A');var C=(B&&B.name.length>0&&B.href.length==0);if (C) A=-1;};return A;};var FCKSelectAllCommand=function(){this.Name='SelectAll';};FCKSelectAllCommand.prototype.Execute=function(){if (FCK.EditMode==0){FCK.ExecuteNamedCommand('SelectAll');}else{var A=FCK.EditingArea.Textarea;if (FCKBrowserInfo.IsIE){A.createTextRange().execCommand('SelectAll');}else{A.selectionStart=0;A.selectionEnd=A.value.length;};A.focus();}};FCKSelectAllCommand.prototype.GetState=function(){return 0;};var FCKPasteCommand=function(){this.Name='Paste';};FCKPasteCommand.prototype={Execute:function(){if (FCKBrowserInfo.IsIE) FCK.Paste();else FCK.ExecuteNamedCommand('Paste');},GetState:function(){return FCK.GetNamedCommandState('Paste');}}; -var FCKSpellCheckCommand=function(){this.Name='SpellCheck';this.IsEnabled=(FCKConfig.SpellChecker=='SpellerPages');};FCKSpellCheckCommand.prototype.Execute=function(){FCKDialog.OpenDialog('FCKDialog_SpellCheck','Spell Check','dialog/fck_spellerpages.html',440,480);};FCKSpellCheckCommand.prototype.GetState=function(){return this.IsEnabled?0:-1;} -var FCKTextColorCommand=function(A){this.Name=A=='ForeColor'?'TextColor':'BGColor';this.Type=A;var B;if (FCKBrowserInfo.IsIE) B=window;else if (FCK.ToolbarSet._IFrame) B=FCKTools.GetElementWindow(FCK.ToolbarSet._IFrame);else B=window.parent;this._Panel=new FCKPanel(B,true);this._Panel.AppendStyleSheet(FCKConfig.SkinPath+'fck_editor.css');this._Panel.MainNode.className='FCK_Panel';this._CreatePanelBody(this._Panel.Document,this._Panel.MainNode);FCKTools.DisableSelection(this._Panel.Document.body);};FCKTextColorCommand.prototype.Execute=function(A,B,C){FCK._ActiveColorPanelType=this.Type;this._Panel.Show(A,B,C);};FCKTextColorCommand.prototype.SetColor=function(A){if (FCK._ActiveColorPanelType=='ForeColor') FCK.ExecuteNamedCommand('ForeColor',A);else if (FCKBrowserInfo.IsGeckoLike){if (FCKBrowserInfo.IsGecko&&!FCKConfig.GeckoUseSPAN) FCK.EditorDocument.execCommand('useCSS',false,false);FCK.ExecuteNamedCommand('hilitecolor',A);if (FCKBrowserInfo.IsGecko&&!FCKConfig.GeckoUseSPAN) FCK.EditorDocument.execCommand('useCSS',false,true);}else FCK.ExecuteNamedCommand('BackColor',A);delete FCK._ActiveColorPanelType;};FCKTextColorCommand.prototype.GetState=function(){return 0;};function FCKTextColorCommand_OnMouseOver() { this.className='ColorSelected';};function FCKTextColorCommand_OnMouseOut() { this.className='ColorDeselected';};function FCKTextColorCommand_OnClick(){this.className='ColorDeselected';this.Command.SetColor('#'+this.Color);this.Command._Panel.Hide();};function FCKTextColorCommand_AutoOnClick(){this.className='ColorDeselected';this.Command.SetColor('');this.Command._Panel.Hide();};function FCKTextColorCommand_MoreOnClick(){this.className='ColorDeselected';this.Command._Panel.Hide();FCKDialog.OpenDialog('FCKDialog_Color',FCKLang.DlgColorTitle,'dialog/fck_colorselector.html',400,330,this.Command.SetColor);};FCKTextColorCommand.prototype._CreatePanelBody=function(A,B){function CreateSelectionDiv(){var C=A.createElement("DIV");C.className='ColorDeselected';C.onmouseover=FCKTextColorCommand_OnMouseOver;C.onmouseout=FCKTextColorCommand_OnMouseOut;return C;};var D=B.appendChild(A.createElement("TABLE"));D.className='ForceBaseFont';D.style.tableLayout='fixed';D.cellPadding=0;D.cellSpacing=0;D.border=0;D.width=150;var E=D.insertRow(-1).insertCell(-1);E.colSpan=8;var C=E.appendChild(CreateSelectionDiv());C.innerHTML='\n \n \n \n \n
    '+FCKLang.ColorAutomatic+'
    ';C.Command=this;C.onclick=FCKTextColorCommand_AutoOnClick;var G=FCKConfig.FontColors.toString().split(',');var H=0;while (H
    ';C.Command=this;C.onclick=FCKTextColorCommand_OnClick;}};E=D.insertRow(-1).insertCell(-1);E.colSpan=8;C=E.appendChild(CreateSelectionDiv());C.innerHTML='
    '+FCKLang.ColorMoreColors+'
    ';C.Command=this;C.onclick=FCKTextColorCommand_MoreOnClick;} -var FCKPastePlainTextCommand=function(){this.Name='PasteText';};FCKPastePlainTextCommand.prototype.Execute=function(){FCK.PasteAsPlainText();};FCKPastePlainTextCommand.prototype.GetState=function(){return FCK.GetNamedCommandState('Paste');}; -var FCKPasteWordCommand=function(){this.Name='PasteWord';};FCKPasteWordCommand.prototype.Execute=function(){FCK.PasteFromWord();};FCKPasteWordCommand.prototype.GetState=function(){if (FCKConfig.ForcePasteAsPlainText) return -1;else return FCK.GetNamedCommandState('Paste');}; -var FCKTableCommand=function(A){this.Name=A;};FCKTableCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();switch (this.Name){case 'TableInsertRow':FCKTableHandler.InsertRow();break;case 'TableDeleteRows':FCKTableHandler.DeleteRows();break;case 'TableInsertColumn':FCKTableHandler.InsertColumn();break;case 'TableDeleteColumns':FCKTableHandler.DeleteColumns();break;case 'TableInsertCell':FCKTableHandler.InsertCell();break;case 'TableDeleteCells':FCKTableHandler.DeleteCells();break;case 'TableMergeCells':FCKTableHandler.MergeCells();break;case 'TableSplitCell':FCKTableHandler.SplitCell();break;case 'TableDelete':FCKTableHandler.DeleteTable();break;default:alert(FCKLang.UnknownCommand.replace(/%1/g,this.Name));}};FCKTableCommand.prototype.GetState=function(){return 0;} -var FCKStyleCommand=function(){this.Name='Style';this.StylesLoader=new FCKStylesLoader();this.StylesLoader.Load(FCKConfig.StylesXmlPath);this.Styles=this.StylesLoader.Styles;};FCKStyleCommand.prototype.Execute=function(A,B){FCKUndo.SaveUndoStep();if (B.Selected) B.Style.RemoveFromSelection();else B.Style.ApplyToSelection();FCKUndo.SaveUndoStep();FCK.Focus();FCK.Events.FireEvent("OnSelectionChange");};FCKStyleCommand.prototype.GetState=function(){if (!FCK.EditorDocument) return -1;var A=FCK.EditorDocument.selection;if (FCKSelection.GetType()=='Control'){var e=FCKSelection.GetSelectedElement();if (e) return this.StylesLoader.StyleGroups[e.tagName]?0:-1;};return 0;};FCKStyleCommand.prototype.GetActiveStyles=function(){var A=[];if (FCKSelection.GetType()=='Control') this._CheckStyle(FCKSelection.GetSelectedElement(),A,false);else this._CheckStyle(FCKSelection.GetParentElement(),A,true);return A;};FCKStyleCommand.prototype._CheckStyle=function(A,B,C){if (!A) return;if (A.nodeType==1){var D=this.StylesLoader.StyleGroups[A.tagName];if (D){for (var i=0;i<\/body><\/html>');B.close();FCKTools.AddEventListenerEx(D,'focus',FCKPanel_Window_OnFocus,this);FCKTools.AddEventListenerEx(D,'blur',FCKPanel_Window_OnBlur,this);};B.dir=FCKLang.Dir;B.oncontextmenu=FCKTools.CancelEvent;this.MainNode=B.body.appendChild(B.createElement('DIV'));this.MainNode.style.cssFloat=this.IsRTL?'right':'left';};FCKPanel.prototype.AppendStyleSheet=function(A){FCKTools.AppendStyleSheet(this.Document,A);};FCKPanel.prototype.Preload=function(x,y,A){if (this._Popup) this._Popup.show(x,y,0,0,A);};FCKPanel.prototype.Show=function(x,y,A,B,C){var D;if (this._Popup){this._Popup.show(x,y,0,0,A);this.MainNode.style.width=B?B+'px':'';this.MainNode.style.height=C?C+'px':'';D=this.MainNode.offsetWidth;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=(x*-1)+A.offsetWidth-D;};this._Popup.show(x,y,D,this.MainNode.offsetHeight,A);if (this.OnHide){if (this._Timer) CheckPopupOnHide.call(this,true);this._Timer=FCKTools.SetInterval(CheckPopupOnHide,100,this);}}else{if (typeof(FCKFocusManager)!='undefined') FCKFocusManager.Lock();if (this.ParentPanel) this.ParentPanel.Lock();this.MainNode.style.width=B?B+'px':'';this.MainNode.style.height=C?C+'px':'';D=this.MainNode.offsetWidth;if (!B) this._IFrame.width=1;if (!C) this._IFrame.height=1;D=this.MainNode.offsetWidth;var E=FCKTools.GetElementPosition(A.nodeType==9?(FCKTools.IsStrictMode(A)?A.documentElement:A.body):A,this._Window);if (this.IsRTL&&!this.IsContextMenu) x=(x*-1);x+=E.X;y+=E.Y;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=x+A.offsetWidth-D;}else{var F=FCKTools.GetViewPaneSize(this._Window);var G=FCKTools.GetScrollPosition(this._Window);var H=F.Height+G.Y;var I=F.Width+G.X;if ((x+D)>I) x-=x+D-I;if ((y+this.MainNode.offsetHeight)>H) y-=y+this.MainNode.offsetHeight-H;};if (x<0) x=0;this._IFrame.style.left=x+'px';this._IFrame.style.top=y+'px';var J=D;var K=this.MainNode.offsetHeight;this._IFrame.width=J;this._IFrame.height=K;this._IFrame.contentWindow.focus();};this._IsOpened=true;FCKTools.RunFunction(this.OnShow,this);};FCKPanel.prototype.Hide=function(A){if (this._Popup) this._Popup.hide();else{if (!this._IsOpened) return;if (typeof(FCKFocusManager)!='undefined') FCKFocusManager.Unlock();this._IFrame.width=this._IFrame.height=0;this._IsOpened=false;if (this.ParentPanel) this.ParentPanel.Unlock();if (!A) 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 A=this._Popup?FCKTools.GetDocumentWindow(this.Document):this._Window;var B=new FCKPanel(A,true);B.ParentPanel=this;return B;};FCKPanel.prototype.Lock=function(){this._LockCounter++;};FCKPanel.prototype.Unlock=function(){if (--this._LockCounter==0&&!this.HasFocus) this.Hide();};function FCKPanel_Window_OnFocus(e,A){A.HasFocus=true;};function FCKPanel_Window_OnBlur(e,A){A.HasFocus=false;if (A._LockCounter==0) FCKTools.RunFunction(A.Hide,A);};function CheckPopupOnHide(A){if (A||!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;} -var FCKIcon=function(A){var B=A?typeof(A):'undefined';switch (B){case 'number':this.Path=FCKConfig.SkinPath+'fck_strip.gif';this.Size=16;this.Position=A;break;case 'undefined':this.Path=FCK_SPACER_PATH;break;case 'string':this.Path=A;break;default:this.Path=A[0];this.Size=A[1];this.Position=A[2];}};FCKIcon.prototype.CreateIconElement=function(A){var B,eIconImage;if (this.Position){var C='-'+((this.Position-1)*this.Size)+'px';if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path;eIconImage.style.top=C;}else{B=A.createElement('IMG');B.src=FCK_SPACER_PATH;B.style.backgroundPosition='0px '+C;B.style.backgroundImage='url('+this.Path+')';}}else{B=A.createElement('DIV');eIconImage=B.appendChild(A.createElement('IMG'));eIconImage.src=this.Path?this.Path:FCK_SPACER_PATH;};B.className='TB_Button_Image';return B;} -var FCKToolbarButtonUI=function(A,B,C,D,E,F){this.Name=A;this.Label=B||A;this.Tooltip=C||this.Label;this.Style=E||0;this.State=F||0;this.Icon=new FCKIcon(D);if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarButtonUI_Cleanup);};FCKToolbarButtonUI.prototype._CreatePaddingElement=function(A){var B=A.createElement('IMG');B.className='TB_Button_Padding';B.src=FCK_SPACER_PATH;return B;};FCKToolbarButtonUI.prototype.Create=function(A){var B=this.MainElement;if (B){FCKToolbarButtonUI_Cleanup.call(this);if (B.parentNode) B.parentNode.removeChild(B);B=this.MainElement=null;};var C=FCKTools.GetElementDocument(A);B=this.MainElement=C.createElement('DIV');B._FCKButton=this;B.title=this.Tooltip;if (FCKBrowserInfo.IsGecko) B.onmousedown=FCKTools.CancelEvent;this.ChangeState(this.State,true);if (this.Style==0&&!this.ShowArrow){B.appendChild(this.Icon.CreateIconElement(C));}else{var D=B.appendChild(C.createElement('TABLE'));D.cellPadding=0;D.cellSpacing=0;var E=D.insertRow(-1);var F=E.insertCell(-1);if (this.Style==0||this.Style==2) F.appendChild(this.Icon.CreateIconElement(C));else F.appendChild(this._CreatePaddingElement(C));if (this.Style==1||this.Style==2){F=E.insertCell(-1);F.className='TB_Button_Text';F.noWrap=true;F.appendChild(C.createTextNode(this.Label));};if (this.ShowArrow){if (this.Style!=0){E.insertCell(-1).appendChild(this._CreatePaddingElement(C));};F=E.insertCell(-1);var G=F.appendChild(C.createElement('IMG'));G.src=FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif';G.width=5;G.height=3;};F=E.insertCell(-1);F.appendChild(this._CreatePaddingElement(C));};A.appendChild(B);};FCKToolbarButtonUI.prototype.ChangeState=function(A,B){if (!B&&this.State==A) return;var e=this.MainElement;switch (parseInt(A,10)){case 0:e.className='TB_Button_Off';e.onmouseover=FCKToolbarButton_OnMouseOverOff;e.onmouseout=FCKToolbarButton_OnMouseOutOff;e.onclick=FCKToolbarButton_OnClick;break;case 1:e.className='TB_Button_On';e.onmouseover=FCKToolbarButton_OnMouseOverOn;e.onmouseout=FCKToolbarButton_OnMouseOutOn;e.onclick=FCKToolbarButton_OnClick;break;case -1:e.className='TB_Button_Disabled';e.onmouseover=null;e.onmouseout=null;e.onclick=null;break;};this.State=A;};function FCKToolbarButtonUI_Cleanup(){if (this.MainElement){this.MainElement._FCKButton=null;this.MainElement=null;}};function FCKToolbarButton_OnMouseOverOn(){this.className='TB_Button_On_Over';};function FCKToolbarButton_OnMouseOutOn(){this.className='TB_Button_On';};function FCKToolbarButton_OnMouseOverOff(){this.className='TB_Button_Off_Over';};function FCKToolbarButton_OnMouseOutOff(){this.className='TB_Button_Off';};function FCKToolbarButton_OnClick(e){if (this._FCKButton.OnClick) this._FCKButton.OnClick(this._FCKButton);}; -var FCKToolbarButton=function(A,B,C,D,E,F,G){this.CommandName=A;this.Label=B;this.Tooltip=C;this.Style=D;this.SourceView=E?true:false;this.ContextSensitive=F?true:false;if (G==null) this.IconPath=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(G)=='number') this.IconPath=[FCKConfig.SkinPath+'fck_strip.gif',16,G];};FCKToolbarButton.prototype.Create=function(A){this._UIButton=new FCKToolbarButtonUI(this.CommandName,this.Label,this.Tooltip,this.IconPath,this.Style);this._UIButton.OnClick=this.Click;this._UIButton._ToolbarButton=this;this._UIButton.Create(A);};FCKToolbarButton.prototype.RefreshState=function(){var A=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (A==this._UIButton.State) return;this._UIButton.ChangeState(A);};FCKToolbarButton.prototype.Click=function(){var A=this._ToolbarButton||this;FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(A.CommandName).Execute();};FCKToolbarButton.prototype.Enable=function(){this.RefreshState();};FCKToolbarButton.prototype.Disable=function(){this._UIButton.ChangeState(-1);} -var FCKSpecialCombo=function(A,B,C,D,E){this.FieldWidth=B||100;this.PanelWidth=C||150;this.PanelMaxHeight=D||150;this.Label=' ';this.Caption=A;this.Tooltip=A;this.Style=2;this.Enabled=true;this.Items={};this._Panel=new FCKPanel(E||window,true);this._Panel.AppendStyleSheet(FCKConfig.SkinPath+'fck_editor.css');this._PanelBox=this._Panel.MainNode.appendChild(this._Panel.Document.createElement('DIV'));this._PanelBox.className='SC_Panel';this._PanelBox.style.width=this.PanelWidth+'px';this._PanelBox.innerHTML='
    ';this._ItemsHolderEl=this._PanelBox.getElementsByTagName('TD')[0];if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKSpecialCombo_Cleanup);};function FCKSpecialCombo_ItemOnMouseOver(){this.className+=' SC_ItemOver';};function FCKSpecialCombo_ItemOnMouseOut(){this.className=this.originalClass;};function FCKSpecialCombo_ItemOnClick(){this.className=this.originalClass;this.FCKSpecialCombo._Panel.Hide();this.FCKSpecialCombo.SetLabel(this.FCKItemLabel);if (typeof(this.FCKSpecialCombo.OnSelect)=='function') this.FCKSpecialCombo.OnSelect(this.FCKItemID,this);};FCKSpecialCombo.prototype.AddItem=function(A,B,C,D){var E=this._ItemsHolderEl.appendChild(this._Panel.Document.createElement('DIV'));E.className=E.originalClass='SC_Item';E.innerHTML=B;E.FCKItemID=A;E.FCKItemLabel=C||A;E.FCKSpecialCombo=this;E.Selected=false;if (FCKBrowserInfo.IsIE) E.style.width='100%';if (D) E.style.backgroundColor=D;E.onmouseover=FCKSpecialCombo_ItemOnMouseOver;E.onmouseout=FCKSpecialCombo_ItemOnMouseOut;E.onclick=FCKSpecialCombo_ItemOnClick;this.Items[A.toString().toLowerCase()]=E;return E;};FCKSpecialCombo.prototype.SelectItem=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];if (B){B.className=B.originalClass='SC_ItemSelected';B.Selected=true;}};FCKSpecialCombo.prototype.SelectItemByLabel=function(A,B){for (var C in this.Items){var D=this.Items[C];if (D.FCKItemLabel==A){D.className=D.originalClass='SC_ItemSelected';D.Selected=true;if (B) this.SetLabel(A);}}};FCKSpecialCombo.prototype.DeselectAll=function(A){for (var i in this.Items){this.Items[i].className=this.Items[i].originalClass='SC_Item';this.Items[i].Selected=false;};if (A) this.SetLabel('');};FCKSpecialCombo.prototype.SetLabelById=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];this.SetLabel(B?B.FCKItemLabel:'');};FCKSpecialCombo.prototype.SetLabel=function(A){this.Label=A.length==0?' ':A;if (this._LabelEl){this._LabelEl.innerHTML=this.Label;FCKTools.DisableSelection(this._LabelEl);}};FCKSpecialCombo.prototype.SetEnabled=function(A){this.Enabled=A;this._OuterTable.className=A?'':'SC_FieldDisabled';};FCKSpecialCombo.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this._OuterTable=A.appendChild(B.createElement('TABLE'));C.cellPadding=0;C.cellSpacing=0;C.insertRow(-1);var D;var E;switch (this.Style){case 0:D='TB_ButtonType_Icon';E=false;break;case 1:D='TB_ButtonType_Text';E=false;break;case 2:E=true;break;};if (this.Caption&&this.Caption.length>0&&E){var F=C.rows[0].insertCell(-1);F.innerHTML=this.Caption;F.className='SC_FieldCaption';};var G=FCKTools.AppendElement(C.rows[0].insertCell(-1),'div');if (E){G.className='SC_Field';G.style.width=this.FieldWidth+'px';G.innerHTML='
     
    ';this._LabelEl=G.getElementsByTagName('label')[0];this._LabelEl.innerHTML=this.Label;}else{G.className='TB_Button_Off';G.innerHTML='
    '+this.Caption+'
    ';};G.SpecialCombo=this;G.onmouseover=FCKSpecialCombo_OnMouseOver;G.onmouseout=FCKSpecialCombo_OnMouseOut;G.onclick=FCKSpecialCombo_OnClick;FCKTools.DisableSelection(this._Panel.Document.body);};function FCKSpecialCombo_Cleanup(){this._LabelEl=null;this._OuterTable=null;this._ItemsHolderEl=null;this._PanelBox=null;if (this.Items){for (var A in this.Items) this.Items[A]=null;}};function FCKSpecialCombo_OnMouseOver(){if (this.SpecialCombo.Enabled){switch (this.SpecialCombo.Style){case 0:this.className='TB_Button_On_Over';break;case 1:this.className='TB_Button_On_Over';break;case 2:this.className='SC_Field SC_FieldOver';break;}}};function FCKSpecialCombo_OnMouseOut(){switch (this.SpecialCombo.Style){case 0:this.className='TB_Button_Off';break;case 1:this.className='TB_Button_Off';break;case 2:this.className='SC_Field';break;}};function FCKSpecialCombo_OnClick(e){var A=this.SpecialCombo;if (A.Enabled){var B=A._Panel;var C=A._PanelBox;var D=A._ItemsHolderEl;var E=A.PanelMaxHeight;if (A.OnBeforeClick) A.OnBeforeClick(A);if (FCKBrowserInfo.IsIE) B.Preload(0,this.offsetHeight,this);if (D.offsetHeight>E) C.style.height=E+'px';else C.style.height='';B.Show(0,this.offsetHeight,this);}}; -var FCKToolbarSpecialCombo=function(){this.SourceView=false;this.ContextSensitive=true;this._LastValue=null;};function FCKToolbarSpecialCombo_OnSelect(A,B){FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).Execute(A,B);};FCKToolbarSpecialCombo.prototype.Create=function(A){this._Combo=new FCKSpecialCombo(this.GetLabel(),this.FieldWidth,this.PanelWidth,this.PanelMaxHeight,FCKBrowserInfo.IsIE?window:FCKTools.GetElementWindow(A).parent);this._Combo.Tooltip=this.Tooltip;this._Combo.Style=this.Style;this.CreateItems(this._Combo);this._Combo.Create(A);this._Combo.CommandName=this.CommandName;this._Combo.OnSelect=FCKToolbarSpecialCombo_OnSelect;};function FCKToolbarSpecialCombo_RefreshActiveItems(A,B){A.DeselectAll();A.SelectItem(B);A.SetLabelById(B);};FCKToolbarSpecialCombo.prototype.RefreshState=function(){var A;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B!=-1){A=1;if (this.RefreshActiveItems) this.RefreshActiveItems(this._Combo,B);else{if (this._LastValue!=B){this._LastValue=B;FCKToolbarSpecialCombo_RefreshActiveItems(this._Combo,B);}}}else A=-1;if (A==this.State) return;if (A==-1){this._Combo.DeselectAll();this._Combo.SetLabel('');};this.State=A;this._Combo.SetEnabled(A!=-1);};FCKToolbarSpecialCombo.prototype.Enable=function(){this.RefreshState();};FCKToolbarSpecialCombo.prototype.Disable=function(){this.State=-1;this._Combo.DeselectAll();this._Combo.SetLabel('');this._Combo.SetEnabled(false);}; -var FCKToolbarFontsCombo=function(A,B){this.CommandName='FontName';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;};FCKToolbarFontsCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarFontsCombo.prototype.GetLabel=function(){return FCKLang.Font;};FCKToolbarFontsCombo.prototype.CreateItems=function(A){var B=FCKConfig.FontNames.split(';');for (var i=0;i'+B[i]+'
    ');} -var FCKToolbarFontSizeCombo=function(A,B){this.CommandName='FontSize';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;};FCKToolbarFontSizeCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarFontSizeCombo.prototype.GetLabel=function(){return FCKLang.FontSize;};FCKToolbarFontSizeCombo.prototype.CreateItems=function(A){A.FieldWidth=70;var B=FCKConfig.FontSizes.split(';');for (var i=0;i'+C[1]+'',C[1]);}} -var FCKToolbarFontFormatCombo=function(A,B){this.CommandName='FontFormat';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:2;this.NormalLabel='Normal';this.PanelWidth=190;};FCKToolbarFontFormatCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarFontFormatCombo.prototype.GetLabel=function(){return FCKLang.FontFormat;};FCKToolbarFontFormatCombo.prototype.CreateItems=function(A){var B=A._Panel.Document;FCKTools.AppendStyleSheet(B,FCKConfig.ToolbarComboPreviewCSS);if (FCKConfig.BodyId&&FCKConfig.BodyId.length>0) B.body.id=FCKConfig.BodyId;if (FCKConfig.BodyClass&&FCKConfig.BodyClass.length>0) B.body.className+=' '+FCKConfig.BodyClass;var C=FCKLang['FontFormats'].split(';');var D={p:C[0],pre:C[1],address:C[2],h1:C[3],h2:C[4],h3:C[5],h4:C[6],h5:C[7],h6:C[8],div:C[9]};var E=FCKConfig.FontFormats.split(';');for (var i=0;i<'+F+'>'+G+'
    $1' ) ; + data = data.replace( /\[url\=([^\]]+)](.+?)\[\/url]/gi, '$2' ) ; + + // [b] + data = data.replace( /\[b\](.+?)\[\/b]/gi, '$1' ) ; + + // [i] + data = data.replace( /\[i\](.+?)\[\/i]/gi, '$1' ) ; + + // [u] + data = data.replace( /\[u\](.+?)\[\/u]/gi, '$1' ) ; + + return '' + data + '' ; + }, + + /* + * 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 = rootNode.innerHTML ; + + // Convert
    to line breaks. + data = data.replace( /]).*?>/gi, '\r\n') ; + + // [url] + data = data.replace( /(.+?)<\/a>/gi, '[url=$2]$3[/url]') ; + + // [b] + data = data.replace( /<(?:b|strong)>/gi, '[b]') ; + data = data.replace( /<\/(?:b|strong)>/gi, '[/b]') ; + + // [i] + data = data.replace( /<(?:i|em)>/gi, '[i]') ; + data = data.replace( /<\/(?:i|em)>/gi, '[/i]') ; + + // [u] + data = data.replace( //gi, '[u]') ; + data = data.replace( /<\/u>/gi, '[/u]') ; + + // Remove remaining tags. + data = data.replace( /<[^>]+>/g, '') ; + + 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 ; + } +} ; + +// This Data Processor doesn't support

    , so let's use
    . +FCKConfig.EnterMode = 'br' ; + +// To avoid pasting invalid markup (which is discarded in any case), let's +// force pasting to plain text. +FCKConfig.ForcePasteAsPlainText = true ; + +// Rename the "Source" buttom to "BBCode". +FCKToolbarItems.RegisterItem( 'Source', new FCKToolbarButton( 'Source', 'BBCode', null, FCK_TOOLBARITEM_ICONTEXT, true, true, 1 ) ) ; + +// Let's enforce the toolbar to the limits of this Data Processor. A custom +// toolbar set may be defined in the configuration file with more or less entries. +FCKConfig.ToolbarSets["Default"] = [ + ['Source'], + ['Bold','Italic','Underline','-','Link'], + ['About'] +] ; diff --git a/phpgwapi/js/fckeditor/editor/plugins/dragresizetable/fckplugin.js b/phpgwapi/js/fckeditor/editor/plugins/dragresizetable/fckplugin.js new file mode 100644 index 0000000000..984812656e --- /dev/null +++ b/phpgwapi/js/fckeditor/editor/plugins/dragresizetable/fckplugin.js @@ -0,0 +1,527 @@ +var FCKDragTableHandler = +{ + "_DragState" : 0, + "_LeftCell" : null, + "_RightCell" : null, + "_MouseMoveMode" : 0, // 0 - find candidate cells for resizing, 1 - drag to resize + "_ResizeBar" : null, + "_OriginalX" : null, + "_MinimumX" : null, + "_MaximumX" : null, + "_LastX" : null, + "_TableMap" : null, + "_doc" : document, + "_IsInsideNode" : function( w, domNode, pos ) + { + var myCoords = FCKTools.GetWindowPosition( w, domNode ) ; + var xMin = myCoords.x ; + var yMin = myCoords.y ; + var xMax = parseInt( xMin, 10 ) + parseInt( domNode.offsetWidth, 10 ) ; + var yMax = parseInt( yMin, 10 ) + parseInt( domNode.offsetHeight, 10 ) ; + if ( pos.x >= xMin && pos.x <= xMax && pos.y >= yMin && pos.y <= yMax ) + return true; + return false; + }, + "_GetBorderCells" : function( w, tableNode, tableMap, mouse ) + { + // Enumerate all the cells in the table. + var cells = [] ; + for ( var i = 0 ; i < tableNode.rows.length ; i++ ) + { + var r = tableNode.rows[i] ; + for ( var j = 0 ; j < r.cells.length ; j++ ) + cells.push( r.cells[j] ) ; + } + + if ( cells.length < 1 ) + return null ; + + // Get the cells whose right or left border is nearest to the mouse cursor's x coordinate. + var minRxDist = null ; + var lxDist = null ; + var minYDist = null ; + var rbCell = null ; + var lbCell = null ; + for ( var i = 0 ; i < cells.length ; i++ ) + { + var pos = FCKTools.GetWindowPosition( w, cells[i] ) ; + var rightX = pos.x + parseInt( cells[i].clientWidth, 10 ) ; + var rxDist = mouse.x - rightX ; + var yDist = mouse.y - ( pos.y + ( cells[i].clientHeight / 2 ) ) ; + if ( minRxDist == null || + ( Math.abs( rxDist ) <= Math.abs( minRxDist ) && + ( minYDist == null || Math.abs( yDist ) <= Math.abs( minYDist ) ) ) ) + { + minRxDist = rxDist ; + minYDist = yDist ; + rbCell = cells[i] ; + } + } + /* + var rowNode = FCKTools.GetElementAscensor( rbCell, "tr" ) ; + var cellIndex = rbCell.cellIndex + 1 ; + if ( cellIndex >= rowNode.cells.length ) + return null ; + lbCell = rowNode.cells.item( cellIndex ) ; + */ + var rowIdx = rbCell.parentNode.rowIndex ; + var colIdx = FCKTableHandler._GetCellIndexSpan( tableMap, rowIdx, rbCell ) ; + var colSpan = isNaN( rbCell.colSpan ) ? 1 : rbCell.colSpan ; + lbCell = tableMap[rowIdx][colIdx + colSpan] ; + + if ( ! lbCell ) + return null ; + + // Abort if too far from the border. + lxDist = mouse.x - FCKTools.GetWindowPosition( w, lbCell ).x ; + if ( lxDist < 0 && minRxDist < 0 && minRxDist < -2 ) + return null ; + if ( lxDist > 0 && minRxDist > 0 && lxDist > 3 ) + return null ; + + return { "leftCell" : rbCell, "rightCell" : lbCell } ; + }, + "_GetResizeBarPosition" : function() + { + var row = FCKTools.GetElementAscensor( this._RightCell, "tr" ) ; + return FCKTableHandler._GetCellIndexSpan( this._TableMap, row.rowIndex, this._RightCell ) ; + }, + "_ResizeBarMouseDownListener" : function( evt ) + { + if ( ! evt ) + evt = window.event ; + if ( FCKDragTableHandler._LeftCell ) + FCKDragTableHandler._MouseMoveMode = 1 ; + if ( FCKBrowserInfo.IsIE ) + FCKDragTableHandler._ResizeBar.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 50 ; + else + FCKDragTableHandler._ResizeBar.style.opacity = 0.5 ; + FCKDragTableHandler._OriginalX = evt.clientX ; + + // Calculate maximum and minimum x-coordinate delta. + var borderIndex = FCKDragTableHandler._GetResizeBarPosition() ; + var offset = FCKDragTableHandler._GetIframeOffset(); + var table = FCKTools.GetElementAscensor( FCKDragTableHandler._LeftCell, "table" ); + var minX = null ; + var maxX = null ; + for ( var r = 0 ; r < FCKDragTableHandler._TableMap.length ; r++ ) + { + var leftCell = FCKDragTableHandler._TableMap[r][borderIndex - 1] ; + var rightCell = FCKDragTableHandler._TableMap[r][borderIndex] ; + var leftPosition = FCKTools.GetWindowPosition( FCK.EditorWindow, leftCell ) ; + var rightPosition = FCKTools.GetWindowPosition( FCK.EditorWindow, rightCell ) ; + var leftPadding = FCKDragTableHandler._GetCellPadding( table, leftCell ) ; + var rightPadding = FCKDragTableHandler._GetCellPadding( table, rightCell ) ; + if ( minX == null || leftPosition.x + leftPadding > minX ) + minX = leftPosition.x + leftPadding ; + if ( maxX == null || rightPosition.x + rightCell.clientWidth - rightPadding < maxX ) + maxX = rightPosition.x + rightCell.clientWidth - rightPadding ; + } + + FCKDragTableHandler._MinimumX = minX + offset.x ; + FCKDragTableHandler._MaximumX = maxX + offset.x ; + FCKDragTableHandler._LastX = null ; + }, + "_ResizeBarMouseUpListener" : function( evt ) + { + if ( ! evt ) + evt = window.event ; + FCKDragTableHandler._MouseMoveMode = 0 ; + FCKDragTableHandler._HideResizeBar() ; + + if ( FCKDragTableHandler._LastX == null ) + return ; + + // Calculate the delta value. + var deltaX = FCKDragTableHandler._LastX - FCKDragTableHandler._OriginalX ; + + // Then, build an array of current column width values. + // This algorithm can be very slow if the cells have insane colSpan values. (e.g. colSpan=1000). + var table = FCKTools.GetElementAscensor( FCKDragTableHandler._LeftCell, "table" ) ; + var colArray = [] ; + var tableMap = FCKDragTableHandler._TableMap ; + for ( var i = 0 ; i < tableMap.length ; i++ ) + { + for ( var j = 0 ; j < tableMap[i].length ; j++ ) + { + var cell = tableMap[i][j] ; + var width = FCKDragTableHandler._GetCellWidth( table, cell ) ; + var colSpan = isNaN( cell.colSpan) ? 1 : cell.colSpan ; + if ( colArray.length <= j ) + colArray.push( { width : width / colSpan, colSpan : colSpan } ) ; + else + { + var guessItem = colArray[j] ; + if ( guessItem.colSpan > colSpan ) + { + guessItem.width = width / colSpan ; + guessItem.colSpan = colSpan ; + } + } + } + } + + // Find out the equivalent column index of the two cells selected for resizing. + colIndex = FCKDragTableHandler._GetResizeBarPosition() ; + + // Note that colIndex must be at least 1 here, so it's safe to subtract 1 from it. + colIndex-- ; + + // Modify the widths in the colArray according to the mouse coordinate delta value. + colArray[colIndex].width += deltaX ; + colArray[colIndex + 1].width -= deltaX ; + + // Clear all cell widths, delete all elements from the table. + for ( var r = 0 ; r < table.rows.length ; r++ ) + { + var row = table.rows.item( r ) ; + for ( var c = 0 ; c < row.cells.length ; c++ ) + { + var cell = row.cells.item( c ) ; + cell.width = "" ; + cell.style.width = "" ; + } + } + var colElements = table.getElementsByTagName( "col" ) ; + for ( var i = colElements.length - 1 ; i >= 0 ; i-- ) + colElements[i].parentNode.removeChild( colElements[i] ) ; + + // Set new cell widths. + var processedCells = [] ; + for ( var i = 0 ; i < tableMap.length ; i++ ) + { + for ( var j = 0 ; j < tableMap[i].length ; j++ ) + { + var cell = tableMap[i][j] ; + if ( cell._Processed ) + continue ; + if ( tableMap[i][j-1] != cell ) + cell.width = colArray[j].width ; + else + cell.width = parseInt( cell.width, 10 ) + parseInt( colArray[j].width, 10 ) ; + if ( tableMap[i][j+1] != cell ) + { + processedCells.push( cell ) ; + cell._Processed = true ; + } + } + } + for ( var i = 0 ; i < processedCells.length ; i++ ) + { + if ( FCKBrowserInfo.IsIE ) + processedCells[i].removeAttribute( '_Processed' ) ; + else + delete processedCells[i]._Processed ; + } + + FCKDragTableHandler._LastX = null ; + }, + "_ResizeBarMouseMoveListener" : function( evt ) + { + if ( ! evt ) + evt = window.event ; + if ( FCKDragTableHandler._MouseMoveMode == 0 ) + return FCKDragTableHandler._MouseFindHandler( FCK, evt ) ; + else + return FCKDragTableHandler._MouseDragHandler( FCK, evt ) ; + }, + // Calculate the padding of a table cell. + // It returns the value of paddingLeft + paddingRight of a table cell. + // This function is used, in part, to calculate the width parameter that should be used for setting cell widths. + // The equation in question is clientWidth = paddingLeft + paddingRight + width. + // So that width = clientWidth - paddingLeft - paddingRight. + // The return value of this function must be pixel accurate acorss all supported browsers, so be careful if you need to modify it. + "_GetCellPadding" : function( table, cell ) + { + var attrGuess = parseInt( table.cellPadding, 10 ) * 2 ; + var cssGuess = null ; + if ( typeof( window.getComputedStyle ) == "function" ) + { + var styleObj = window.getComputedStyle( cell, null ) ; + cssGuess = parseInt( styleObj.getPropertyValue( "padding-left" ), 10 ) + + parseInt( styleObj.getPropertyValue( "padding-right" ), 10 ) ; + } + else + cssGuess = parseInt( cell.currentStyle.paddingLeft, 10 ) + parseInt (cell.currentStyle.paddingRight, 10 ) ; + + var cssRuntime = cell.style.padding ; + if ( isFinite( cssRuntime ) ) + cssGuess = parseInt( cssRuntime, 10 ) * 2 ; + else + { + cssRuntime = cell.style.paddingLeft ; + if ( isFinite( cssRuntime ) ) + cssGuess = parseInt( cssRuntime, 10 ) ; + cssRuntime = cell.style.paddingRight ; + if ( isFinite( cssRuntime ) ) + cssGuess += parseInt( cssRuntime, 10 ) ; + } + + attrGuess = parseInt( attrGuess, 10 ) ; + cssGuess = parseInt( cssGuess, 10 ) ; + if ( isNaN( attrGuess ) ) + attrGuess = 0 ; + if ( isNaN( cssGuess ) ) + cssGuess = 0 ; + return Math.max( attrGuess, cssGuess ) ; + }, + // Calculate the real width of the table cell. + // The real width of the table cell is the pixel width that you can set to the width attribute of the table cell and after + // that, the table cell should be of exactly the same width as before. + // The real width of a table cell can be calculated as: + // width = clientWidth - paddingLeft - paddingRight. + "_GetCellWidth" : function( table, cell ) + { + var clientWidth = cell.clientWidth ; + if ( isNaN( clientWidth ) ) + clientWidth = 0 ; + return clientWidth - this._GetCellPadding( table, cell ) ; + }, + "MouseMoveListener" : function( FCK, evt ) + { + if ( FCKDragTableHandler._MouseMoveMode == 0 ) + return FCKDragTableHandler._MouseFindHandler( FCK, evt ) ; + else + return FCKDragTableHandler._MouseDragHandler( FCK, evt ) ; + }, + "_MouseFindHandler" : function( FCK, evt ) + { + if ( FCK.MouseDownFlag ) + return ; + var node = evt.srcElement || evt.target ; + try + { + if ( ! node || node.nodeType != 1 ) + { + this._HideResizeBar() ; + return ; + } + } + catch ( e ) + { + this._HideResizeBar() ; + return ; + } + + // Since this function might be called from the editing area iframe or the outer fckeditor iframe, + // the mouse point coordinates from evt.clientX/Y can have different reference points. + // We need to resolve the mouse pointer position relative to the editing area iframe. + var mouseX = evt.clientX ; + var mouseY = evt.clientY ; + if ( FCKTools.GetElementDocument( node ) == document ) + { + var offset = this._GetIframeOffset() ; + mouseX -= offset.x ; + mouseY -= offset.y ; + } + + + if ( this._ResizeBar && this._LeftCell ) + { + var leftPos = FCKTools.GetWindowPosition( FCK.EditorWindow, this._LeftCell ) ; + var rightPos = FCKTools.GetWindowPosition( FCK.EditorWindow, this._RightCell ) ; + var rxDist = mouseX - ( leftPos.x + this._LeftCell.clientWidth ) ; + var lxDist = mouseX - rightPos.x ; + var inRangeFlag = false ; + if ( lxDist >= 0 && rxDist <= 0 ) + inRangeFlag = true ; + else if ( rxDist > 0 && lxDist <= 3 ) + inRangeFlag = true ; + else if ( lxDist < 0 && rxDist >= -2 ) + inRangeFlag = true ; + if ( inRangeFlag ) + { + this._ShowResizeBar( FCK.EditorWindow, + FCKTools.GetElementAscensor( this._LeftCell, "table" ), + { "x" : mouseX, "y" : mouseY } ) ; + return ; + } + } + + var tagName = node.tagName.toLowerCase() ; + if ( tagName != "table" && tagName != "td" && tagName != "th" ) + { + if ( this._LeftCell ) + this._LeftCell = this._RightCell = this._TableMap = null ; + this._HideResizeBar() ; + return ; + } + node = FCKTools.GetElementAscensor( node, "table" ) ; + var tableMap = FCKTableHandler._CreateTableMap( node ) ; + var cellTuple = this._GetBorderCells( FCK.EditorWindow, node, tableMap, { "x" : mouseX, "y" : mouseY } ) ; + + if ( cellTuple == null ) + { + if ( this._LeftCell ) + this._LeftCell = this._RightCell = this._TableMap = null ; + this._HideResizeBar() ; + } + else + { + this._LeftCell = cellTuple["leftCell"] ; + this._RightCell = cellTuple["rightCell"] ; + this._TableMap = tableMap ; + this._ShowResizeBar( FCK.EditorWindow, + FCKTools.GetElementAscensor( this._LeftCell, "table" ), + { "x" : mouseX, "y" : mouseY } ) ; + } + }, + "_MouseDragHandler" : function( FCK, evt ) + { + var mouse = { "x" : evt.clientX, "y" : evt.clientY } ; + + // Convert mouse coordinates in reference to the outer iframe. + var node = evt.srcElement || evt.target ; + if ( FCKTools.GetElementDocument( node ) == FCK.EditorDocument ) + { + var offset = this._GetIframeOffset() ; + mouse.x += offset.x ; + mouse.y += offset.y ; + } + + // Calculate the mouse position delta and see if we've gone out of range. + if ( mouse.x >= this._MaximumX - 5 ) + mouse.x = this._MaximumX - 5 ; + if ( mouse.x <= this._MinimumX + 5 ) + mouse.x = this._MinimumX + 5 ; + + var docX = mouse.x + FCKTools.GetScrollPosition( window ).X ; + this._ResizeBar.style.left = ( docX - this._ResizeBar.offsetWidth / 2 ) + "px" ; + this._LastX = mouse.x ; + }, + "_ShowResizeBar" : function( w, table, mouse ) + { + if ( this._ResizeBar == null ) + { + this._ResizeBar = this._doc.createElement( "div" ) ; + var paddingBar = this._ResizeBar ; + var paddingStyles = { 'position' : 'absolute', 'cursor' : 'e-resize' } ; + if ( FCKBrowserInfo.IsIE ) + paddingStyles.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=10,enabled=true)" ; + else + paddingStyles.opacity = 0.10 ; + FCKDomTools.SetElementStyles( paddingBar, paddingStyles ) ; + this._avoidStyles( paddingBar ); + paddingBar.setAttribute('_fcktemp', true); + this._doc.body.appendChild( paddingBar ) ; + FCKTools.AddEventListener( paddingBar, "mousemove", this._ResizeBarMouseMoveListener ) ; + FCKTools.AddEventListener( paddingBar, "mousedown", this._ResizeBarMouseDownListener ) ; + FCKTools.AddEventListener( document, "mouseup", this._ResizeBarMouseUpListener ) ; + FCKTools.AddEventListener( FCK.EditorDocument, "mouseup", this._ResizeBarMouseUpListener ) ; + + // IE doesn't let the tranparent part of the padding block to receive mouse events unless there's something inside. + // So we need to create a spacer image to fill the block up. + var filler = this._doc.createElement( "img" ) ; + filler.setAttribute('_fcktemp', true); + filler.border = 0 ; + filler.src = FCKConfig.BasePath + "images/spacer.gif" ; + filler.style.position = "absolute" ; + paddingBar.appendChild( filler ) ; + + // Disable drag and drop, and selection for the filler image. + var disabledListener = function( evt ) + { + if ( ! evt ) + evt = window.event ; + if ( evt.preventDefault ) + evt.preventDefault() ; + else + evt.returnValue = false ; + } + FCKTools.AddEventListener( filler, "dragstart", disabledListener ) ; + FCKTools.AddEventListener( filler, "selectstart", disabledListener ) ; + } + + var paddingBar = this._ResizeBar ; + var offset = this._GetIframeOffset() ; + var tablePos = this._GetTablePosition( w, table ) ; + var barHeight = table.offsetHeight ; + var barTop = offset.y + tablePos.y ; + // Do not let the resize bar intrude into the toolbar area. + if ( tablePos.y < 0 ) + { + barHeight += tablePos.y ; + barTop -= tablePos.y ; + } + var bw = parseInt( table.border, 10 ) ; + if ( isNaN( bw ) ) + bw = 0 ; + var cs = parseInt( table.cellSpacing, 10 ) ; + if ( isNaN( cs ) ) + cs = 0 ; + var barWidth = Math.max( bw+100, cs+100 ) ; + var paddingStyles = + { + 'top' : barTop + 'px', + 'height' : barHeight + 'px', + 'width' : barWidth + 'px', + 'left' : ( offset.x + mouse.x + FCKTools.GetScrollPosition( w ).X - barWidth / 2 ) + 'px' + } ; + if ( FCKBrowserInfo.IsIE ) + paddingBar.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 10 ; + else + paddingStyles.opacity = 0.1 ; + + FCKDomTools.SetElementStyles( paddingBar, paddingStyles ) ; + var filler = paddingBar.getElementsByTagName( "img" )[0] ; + + FCKDomTools.SetElementStyles( filler, + { + width : paddingBar.offsetWidth + 'px', + height : barHeight + 'px' + } ) ; + + barWidth = Math.max( bw, cs, 3 ) ; + var visibleBar = null ; + if ( paddingBar.getElementsByTagName( "div" ).length < 1 ) + { + visibleBar = this._doc.createElement( "div" ) ; + this._avoidStyles( visibleBar ); + visibleBar.setAttribute('_fcktemp', true); + paddingBar.appendChild( visibleBar ) ; + } + else + visibleBar = paddingBar.getElementsByTagName( "div" )[0] ; + + FCKDomTools.SetElementStyles( visibleBar, + { + position : 'absolute', + backgroundColor : 'blue', + width : barWidth + 'px', + height : barHeight + 'px', + left : '50px', + top : '0px' + } ) ; + }, + "_HideResizeBar" : function() + { + if ( this._ResizeBar ) + // IE bug: display : none does not hide the resize bar for some reason. + // so set the position to somewhere invisible. + FCKDomTools.SetElementStyles( this._ResizeBar, + { + top : '-100000px', + left : '-100000px' + } ) ; + }, + "_GetIframeOffset" : function () + { + return FCKTools.GetDocumentPosition( window, FCK.EditingArea.IFrame ) ; + }, + "_GetTablePosition" : function ( w, table ) + { + return FCKTools.GetWindowPosition( w, table ) ; + }, + "_avoidStyles" : function( element ) + { + FCKDomTools.SetElementStyles( element, + { + padding : '0', + backgroundImage : 'none', + border : '0' + } ) ; + } + +}; + +FCK.Events.AttachEvent( "OnMouseMove", FCKDragTableHandler.MouseMoveListener ) ; diff --git a/phpgwapi/js/fckeditor/editor/plugins/placeholder/fck_placeholder.html b/phpgwapi/js/fckeditor/editor/plugins/placeholder/fck_placeholder.html index 63b24175c1..359a7a12eb 100644 --- a/phpgwapi/js/fckeditor/editor/plugins/placeholder/fck_placeholder.html +++ b/phpgwapi/js/fckeditor/editor/plugins/placeholder/fck_placeholder.html @@ -1,7 +1,7 @@ - + -<% - -Function RemoveExtension( fileName ) - RemoveExtension = Left( fileName, InStrRev( fileName, "." ) - 1 ) -End Function - -%> \ No newline at end of file +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2003-2008 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + * + * Placholder Spanish language file. + */ +FCKLang.PlaceholderBtn = 'Insertar/Editar contenedor' ; +FCKLang.PlaceholderDlgTitle = 'Propiedades del contenedor ' ; +FCKLang.PlaceholderDlgName = 'Nombre de contenedor' ; +FCKLang.PlaceholderErrNoName = 'Por favor escriba el nombre de contenedor' ; +FCKLang.PlaceholderErrNameInUse = 'El nombre especificado ya esta en uso' ; diff --git a/phpgwapi/js/fckeditor/editor/plugins/placeholder/lang/fr.js b/phpgwapi/js/fckeditor/editor/plugins/placeholder/lang/fr.js index ea2caaca94..c64809c739 100644 --- a/phpgwapi/js/fckeditor/editor/plugins/placeholder/lang/fr.js +++ b/phpgwapi/js/fckeditor/editor/plugins/placeholder/lang/fr.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -18,10 +18,10 @@ * * == END LICENSE == * - * Placholder Italian language file. + * Placeholder French language file. */ -FCKLang.PlaceholderBtn = 'Insérer/Modifier Substitut' ; -FCKLang.PlaceholderDlgTitle = 'Propriétés de Substitut' ; -FCKLang.PlaceholderDlgName = 'Nom de Substitut' ; -FCKLang.PlaceholderErrNoName = 'Veuillez saisir le nom de Substitut' ; -FCKLang.PlaceholderErrNameInUse = 'Ce nom est déjà utilisé' ; \ No newline at end of file +FCKLang.PlaceholderBtn = "Insérer/Modifier l'Espace réservé" ; +FCKLang.PlaceholderDlgTitle = "Propriétés de l'Espace réservé" ; +FCKLang.PlaceholderDlgName = "Nom de l'Espace réservé" ; +FCKLang.PlaceholderErrNoName = "Veuillez saisir le nom de l'Espace réservé" ; +FCKLang.PlaceholderErrNameInUse = "Ce nom est déjà utilisé" ; diff --git a/phpgwapi/js/fckeditor/editor/plugins/placeholder/lang/it.js b/phpgwapi/js/fckeditor/editor/plugins/placeholder/lang/it.js index 51d75c034b..117507333f 100644 --- a/phpgwapi/js/fckeditor/editor/plugins/placeholder/lang/it.js +++ b/phpgwapi/js/fckeditor/editor/plugins/placeholder/lang/it.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * diff --git a/phpgwapi/js/fckeditor/editor/plugins/placeholder/lang/pl.js b/phpgwapi/js/fckeditor/editor/plugins/placeholder/lang/pl.js index bc55b38012..1b68fd3308 100644 --- a/phpgwapi/js/fckeditor/editor/plugins/placeholder/lang/pl.js +++ b/phpgwapi/js/fckeditor/editor/plugins/placeholder/lang/pl.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -24,4 +24,4 @@ FCKLang.PlaceholderBtn = 'Wstaw/Edytuj nagłówek' ; FCKLang.PlaceholderDlgTitle = 'Właśności nagłówka' ; FCKLang.PlaceholderDlgName = 'Nazwa nagłówka' ; FCKLang.PlaceholderErrNoName = 'Proszę wprowadzić nazwę nagłówka' ; -FCKLang.PlaceholderErrNameInUse = 'Podana nazwa jest już w użyciu' ; \ No newline at end of file +FCKLang.PlaceholderErrNameInUse = 'Podana nazwa jest już w użyciu' ; diff --git a/phpgwapi/js/fckeditor/editor/plugins/simplecommands/fckplugin.js b/phpgwapi/js/fckeditor/editor/plugins/simplecommands/fckplugin.js index cd25b6a268..59eae89d8e 100644 --- a/phpgwapi/js/fckeditor/editor/plugins/simplecommands/fckplugin.js +++ b/phpgwapi/js/fckeditor/editor/plugins/simplecommands/fckplugin.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * diff --git a/phpgwapi/js/fckeditor/editor/plugins/tablecommands/fckplugin.js b/phpgwapi/js/fckeditor/editor/plugins/tablecommands/fckplugin.js index 88dac9cdd4..890f277c5e 100644 --- a/phpgwapi/js/fckeditor/editor/plugins/tablecommands/fckplugin.js +++ b/phpgwapi/js/fckeditor/editor/plugins/tablecommands/fckplugin.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -19,14 +19,15 @@ * == END LICENSE == * * This plugin register the required Toolbar items to be able to insert the - * toolbar commands in the toolbar. + * table commands in the toolbar. */ -FCKToolbarItems.RegisterItem( 'TableInsertRow' , new FCKToolbarButton( 'TableInsertRow' , FCKLang.InsertRow, null, null, null, null, 62 ) ) ; -FCKToolbarItems.RegisterItem( 'TableDeleteRows' , new FCKToolbarButton( 'TableDeleteRows' , FCKLang.DeleteRows, null, null, null, null, 63 ) ) ; -FCKToolbarItems.RegisterItem( 'TableInsertColumn' , new FCKToolbarButton( 'TableInsertColumn' , FCKLang.InsertColumn, null, null, null, null, 64 ) ) ; -FCKToolbarItems.RegisterItem( 'TableDeleteColumns' , new FCKToolbarButton( 'TableDeleteColumns', FCKLang.DeleteColumns, null, null, null, null, 65 ) ) ; -FCKToolbarItems.RegisterItem( 'TableInsertCell' , new FCKToolbarButton( 'TableInsertCell' , FCKLang.InsertCell, null, null, null, null, 58 ) ) ; -FCKToolbarItems.RegisterItem( 'TableDeleteCells' , new FCKToolbarButton( 'TableDeleteCells' , FCKLang.DeleteCells, null, null, null, null, 59 ) ) ; -FCKToolbarItems.RegisterItem( 'TableMergeCells' , new FCKToolbarButton( 'TableMergeCells' , FCKLang.MergeCells, null, null, null, null, 60 ) ) ; -FCKToolbarItems.RegisterItem( 'TableSplitCell' , new FCKToolbarButton( 'TableSplitCell' , FCKLang.SplitCell, null, null, null, null, 61 ) ) ; \ No newline at end of file +FCKToolbarItems.RegisterItem( 'TableInsertRowAfter' , new FCKToolbarButton( 'TableInsertRowAfter' , FCKLang.InsertRowAfter, null, null, null, true, 62 ) ) ; +FCKToolbarItems.RegisterItem( 'TableDeleteRows' , new FCKToolbarButton( 'TableDeleteRows' , FCKLang.DeleteRows, null, null, null, true, 63 ) ) ; +FCKToolbarItems.RegisterItem( 'TableInsertColumnAfter' , new FCKToolbarButton( 'TableInsertColumnAfter' , FCKLang.InsertColumnAfter, null, null, null, true, 64 ) ) ; +FCKToolbarItems.RegisterItem( 'TableDeleteColumns' , new FCKToolbarButton( 'TableDeleteColumns', FCKLang.DeleteColumns, null, null, null, true, 65 ) ) ; +FCKToolbarItems.RegisterItem( 'TableInsertCellAfter' , new FCKToolbarButton( 'TableInsertCellAfter' , FCKLang.InsertCellAfter, null, null, null, true, 58 ) ) ; +FCKToolbarItems.RegisterItem( 'TableDeleteCells' , new FCKToolbarButton( 'TableDeleteCells' , FCKLang.DeleteCells, null, null, null, true, 59 ) ) ; +FCKToolbarItems.RegisterItem( 'TableMergeCells' , new FCKToolbarButton( 'TableMergeCells' , FCKLang.MergeCells, null, null, null, true, 60 ) ) ; +FCKToolbarItems.RegisterItem( 'TableHorizontalSplitCell' , new FCKToolbarButton( 'TableHorizontalSplitCell' , FCKLang.SplitCell, null, null, null, true, 61 ) ) ; +FCKToolbarItems.RegisterItem( 'TableCellProp' , new FCKToolbarButton( 'TableCellProp' , FCKLang.CellProperties, null, null, null, true, 57 ) ) ; diff --git a/phpgwapi/js/fckeditor/editor/skins/_fckviewstrips.html b/phpgwapi/js/fckeditor/editor/skins/_fckviewstrips.html index d592f0e02d..620f00ea5f 100644 --- a/phpgwapi/js/fckeditor/editor/skins/_fckviewstrips.html +++ b/phpgwapi/js/fckeditor/editor/skins/_fckviewstrips.html @@ -1,7 +1,7 @@ - + + + + + #CreateHtml()# + + + @@ -62,9 +76,9 @@ // display the html editor or a plain textarea? if( isCompatible() ) - showHTMLEditor(); + return getHtmlEditor(); else - showTextArea(); + return getTextArea(); @@ -86,70 +100,48 @@ if( not this.checkBrowser ) return true; - // check for Internet Explorer ( >= 5.5 ) - if( find( "msie", sAgent ) and not find( "mac", sAgent ) and not find( "opera", sAgent ) ) - { - // try to extract IE version - stResult = reFind( "msie ([5-9]\.[0-9])", sAgent, 1, true ); - if( arrayLen( stResult.pos ) eq 2 ) - { - // get IE Version - sBrowserVersion = mid( sAgent, stResult.pos[2], stResult.len[2] ); - return ( sBrowserVersion GTE 5.5 ); - } - } - // check for Gecko ( >= 20030210+ ) - else if( find( "gecko/", sAgent ) ) - { - // try to extract Gecko version date - stResult = reFind( "gecko/(200[3-9][0-1][0-9][0-3][0-9])", sAgent, 1, true ); - if( arrayLen( stResult.pos ) eq 2 ) - { - // get Gecko build (i18n date) - sBrowserVersion = mid( sAgent, stResult.pos[2], stResult.len[2] ); - return ( sBrowserVersion GTE 20030210 ); - } - } - - return false; + return FCKeditor_IsCompatibleBrowser(); + + + - // append unit "px" for numeric width and/or height values - if( isNumeric( this.width ) ) - this.width = this.width & "px"; - if( isNumeric( this.height ) ) - this.height = this.height & "px"; + if( Find( "%", this.width ) gt 0) + sWidthCSS = this.width; + else + sWidthCSS = this.width & "px"; + + if( Find( "%", this.width ) gt 0) + sHeightCSS = this.height; + else + sHeightCSS = this.height & "px"; + + result = "" & chr(13) & chr(10); - - -

    - -
    -
    - + + + - var sURL = ""; - // try to fix the basePath, if ending slash is missing if( len( this.basePath) and right( this.basePath, 1 ) is not "/" ) this.basePath = this.basePath & "/"; @@ -162,14 +154,12 @@ sURL = sURL & "&Toolbar=" & this.toolbarSet; - -
    - - - -
    -
    - + + result = result & "" & chr(13) & chr(10); + result = result & "" & chr(13) & chr(10); + result = result & "" & chr(13) & chr(10); + +
    + + + + + + - var sParams = ""; - var key = ""; - var fieldValue = ""; - var fieldLabel = ""; - var lConfigKeys = ""; - var iPos = ""; - /** * CFML doesn't store casesensitive names for structure keys, but the configuration names must be casesensitive for js. * So we need to find out the correct case for the configuration keys. * We "fix" this by comparing the caseless configuration keys to a list of all available configuration options in the correct case. * changed 20041206 hk@lwd.de (improvements are welcome!) */ - lConfigKeys = lConfigKeys & "CustomConfigurationsPath,EditorAreaCSS,DocType,BaseHref,FullPage,Debug,SkinPath,PluginsPath,AutoDetectLanguage,DefaultLanguage,ContentLangDirection,EnableXHTML,EnableSourceXHTML,ProcessHTMLEntities,IncludeLatinEntities,IncludeGreekEntities"; - lConfigKeys = lConfigKeys & ",FillEmptyBlocks,FormatSource,FormatOutput,FormatIndentator,GeckoUseSPAN,StartupFocus,ForcePasteAsPlainText,ForceSimpleAmpersand,TabSpaces,ShowBorders,UseBROnCarriageReturn"; - lConfigKeys = lConfigKeys & ",ToolbarStartExpanded,ToolbarCanCollapse,ToolbarSets,ContextMenu,FontColors,FontNames,FontSizes,FontFormats,StylesXmlPath,SpellChecker,IeSpellDownloadUrl,MaxUndoLevels"; - lConfigKeys = lConfigKeys & ",LinkBrowser,LinkBrowserURL,LinkBrowserWindowWidth,LinkBrowserWindowHeight"; - lConfigKeys = lConfigKeys & ",LinkUpload,LinkUploadURL,LinkUploadWindowWidth,LinkUploadWindowHeight,LinkUploadAllowedExtensions,LinkUploadDeniedExtensions"; - lConfigKeys = lConfigKeys & ",ImageBrowser,ImageBrowserURL,ImageBrowserWindowWidth,ImageBrowserWindowHeight,SmileyPath,SmileyImages,SmileyColumns,SmileyWindowWidth,SmileyWindowHeight"; + lConfigKeys = lConfigKeys & "CustomConfigurationsPath,EditorAreaCSS,ToolbarComboPreviewCSS,DocType"; + lConfigKeys = lConfigKeys & ",BaseHref,FullPage,Debug,AllowQueryStringDebug,SkinPath"; + lConfigKeys = lConfigKeys & ",PreloadImages,PluginsPath,AutoDetectLanguage,DefaultLanguage,ContentLangDirection"; + lConfigKeys = lConfigKeys & ",ProcessHTMLEntities,IncludeLatinEntities,IncludeGreekEntities,ProcessNumericEntities,AdditionalNumericEntities"; + lConfigKeys = lConfigKeys & ",FillEmptyBlocks,FormatSource,FormatOutput,FormatIndentator"; + lConfigKeys = lConfigKeys & ",StartupFocus,ForcePasteAsPlainText,AutoDetectPasteFromWord,ForceSimpleAmpersand"; + lConfigKeys = lConfigKeys & ",TabSpaces,ShowBorders,SourcePopup,ToolbarStartExpanded,ToolbarCanCollapse"; + lConfigKeys = lConfigKeys & ",IgnoreEmptyParagraphValue,PreserveSessionOnFileBrowser,FloatingPanelsZIndex,TemplateReplaceAll,TemplateReplaceCheckbox"; + lConfigKeys = lConfigKeys & ",ToolbarLocation,ToolbarSets,EnterMode,ShiftEnterMode,Keystrokes"; + lConfigKeys = lConfigKeys & ",ContextMenu,BrowserContextMenuOnCtrl,FontColors,FontNames,FontSizes"; + lConfigKeys = lConfigKeys & ",FontFormats,StylesXmlPath,TemplatesXmlPath,SpellChecker,IeSpellDownloadUrl"; + lConfigKeys = lConfigKeys & ",SpellerPagesServerScript,FirefoxSpellChecker,MaxUndoLevels,DisableObjectResizing,DisableFFTableHandles"; + lConfigKeys = lConfigKeys & ",LinkDlgHideTarget,LinkDlgHideAdvanced,ImageDlgHideLink,ImageDlgHideAdvanced,FlashDlgHideAdvanced"; + lConfigKeys = lConfigKeys & ",ProtectedTags,BodyId,BodyClass,DefaultLinkTarget,CleanWordKeepsStructure"; + lConfigKeys = lConfigKeys & ",LinkBrowser,LinkBrowserURL,LinkBrowserWindowWidth,LinkBrowserWindowHeight,ImageBrowser"; + lConfigKeys = lConfigKeys & ",ImageBrowserURL,ImageBrowserWindowWidth,ImageBrowserWindowHeight,FlashBrowser,FlashBrowserURL"; + lConfigKeys = lConfigKeys & ",FlashBrowserWindowWidth,FlashBrowserWindowHeight,LinkUpload,LinkUploadURL,LinkUploadWindowWidth"; + lConfigKeys = lConfigKeys & ",LinkUploadWindowHeight,LinkUploadAllowedExtensions,LinkUploadDeniedExtensions,ImageUpload,ImageUploadURL"; + lConfigKeys = lConfigKeys & ",ImageUploadAllowedExtensions,ImageUploadDeniedExtensions,FlashUpload,FlashUploadURL,FlashUploadAllowedExtensions"; + lConfigKeys = lConfigKeys & ",FlashUploadDeniedExtensions,SmileyPath,SmileyImages,SmileyColumns,SmileyWindowWidth,SmileyWindowHeight"; for( key in this.config ) { @@ -226,4 +229,4 @@ - \ No newline at end of file + diff --git a/phpgwapi/js/fckeditor/fckeditor.cfm b/phpgwapi/js/fckeditor/fckeditor.cfm index 8dff8aeab2..dc3f999564 100644 --- a/phpgwapi/js/fckeditor/fckeditor.cfm +++ b/phpgwapi/js/fckeditor/fckeditor.cfm @@ -1,7 +1,7 @@ - + -
    -
    - \ No newline at end of file + diff --git a/phpgwapi/js/fckeditor/fckeditor.egwconfig.js b/phpgwapi/js/fckeditor/fckeditor.egwconfig.js new file mode 100644 index 0000000000..25164b6191 --- /dev/null +++ b/phpgwapi/js/fckeditor/fckeditor.egwconfig.js @@ -0,0 +1,68 @@ +FCKConfig.ToolbarSets["egw_simple"] = [ + ['Bold','Italic','Underline'], + ['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'], + ['UnorderedList','OrderedList','Outdent','Indent','Undo','Redo'], + ['FitWindow'], + '/', + ['FontFormat','FontName','FontSize'], + ['TextColor','BGColor'] +] ; +FCKConfig.ToolbarSets["egw_simple_spellcheck"] = [ + ['Bold','Italic','Underline'], + ['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'], + ['UnorderedList','OrderedList','Outdent','Indent','Undo','Redo'], + ['FitWindow','SpellCheck'], + '/', + ['FontFormat','FontName','FontSize'], + ['TextColor','BGColor'] +] ; +FCKConfig.ToolbarSets["egw_extended"] = [ + ['Bold','Italic','Underline'], + ['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'], + ['UnorderedList','OrderedList','Outdent','Indent','Undo','Redo'], + ['Link','Unlink','Anchor'], + ['Find','Replace'], + ['FitWindow','Image','Table'], + '/', + ['FontFormat','FontName','FontSize'], + ['TextColor','BGColor'] +] ; +FCKConfig.ToolbarSets["egw_extended_spellcheck"] = [ + ['Bold','Italic','Underline'], + ['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'], + ['UnorderedList','OrderedList','Outdent','Indent','Undo','Redo'], + ['Link','Unlink','Anchor'], + ['Find','Replace'], + ['FitWindow','SpellCheck','Image','Table'], + '/', + ['FontFormat','FontName','FontSize'], + ['TextColor','BGColor'] +] ; +FCKConfig.ToolbarSets["egw_advanced"] = [ + ['Source','DocProps','-','Save','NewPage','Preview','-','Templates'], + ['Cut','Copy','Paste','PasteText','PasteWord','-','Print'], + ['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'], + '/', + ['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'], + ['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'], + ['UnorderedList','OrderedList','-','Outdent','Indent'], + ['Link','Unlink','Anchor'], + ['FitWindow','Image',/*'Flash',*/'Table','Rule',/*'Smiley',*/'SpecialChar','PageBreak'], //,'UniversalKey' + '/', + ['Style','FontFormat','FontName','FontSize'], + ['TextColor','BGColor'] +] ; +FCKConfig.ToolbarSets["egw_advanced_spellcheck"] = [ + ['Source','DocProps','-','Save','NewPage','Preview','-','Templates'], + ['Cut','Copy','Paste','PasteText','PasteWord','-','Print','SpellCheck'], + ['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'], + '/', + ['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'], + ['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'], + ['UnorderedList','OrderedList','-','Outdent','Indent'], + ['Link','Unlink','Anchor'], + ['FitWindow','Image',/*'Flash',*/'Table','Rule',/*'Smiley',*/'SpecialChar','PageBreak'], //,'UniversalKey' + '/', + ['Style','FontFormat','FontName','FontSize'], + ['TextColor','BGColor'] +] ; diff --git a/phpgwapi/js/fckeditor/fckeditor.js b/phpgwapi/js/fckeditor/fckeditor.js index 23481c45d2..d520322135 100644 --- a/phpgwapi/js/fckeditor/fckeditor.js +++ b/phpgwapi/js/fckeditor/fckeditor.js @@ -1,6 +1,6 @@ /* * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2007 Frederico Caldeira Knabben + * Copyright (C) 2003-2008 Frederico Caldeira Knabben * * == BEGIN LICENSE == * @@ -34,11 +34,9 @@ var FCKeditor = function( instanceName, width, height, toolbarSet, value ) this.Height = height || '200' ; this.ToolbarSet = toolbarSet || 'Default' ; this.Value = value || '' ; - this.BasePath = '/fckeditor/' ; + this.BasePath = FCKeditor.BasePath ; this.CheckBrowser = true ; this.DisplayErrors = true ; - this.EnableSafari = false ; // This is a temporary property, while Safari support is under development. - this.EnableOpera = false ; // This is a temporary property, while Opera support is under development. this.Config = new Object() ; @@ -46,8 +44,23 @@ var FCKeditor = function( instanceName, width, height, toolbarSet, value ) this.OnError = null ; // function( source, errorNumber, errorDescription ) } -FCKeditor.prototype.Version = '2.4.1' ; -FCKeditor.prototype.VersionBuild = '14797' ; +/** + * This is the default BasePath used by all editor instances. + */ +FCKeditor.BasePath = '/fckeditor/' ; + +/** + * The minimum height used when replacing textareas. + */ +FCKeditor.MinHeight = 200 ; + +/** + * The minimum width used when replacing textareas. + */ +FCKeditor.MinWidth = 750 ; + +FCKeditor.prototype.Version = '2.6' ; +FCKeditor.prototype.VersionBuild = '18638' ; FCKeditor.prototype.Create = function() { @@ -63,7 +76,7 @@ FCKeditor.prototype.CreateHtml = function() return '' ; } - var sHtml = '
    ' ; + var sHtml = '' ; if ( !this.CheckBrowser || this._IsCompatibleBrowser() ) { @@ -78,8 +91,6 @@ FCKeditor.prototype.CreateHtml = function() sHtml += ' -
    '); /if; return(@#out); /define_tag; define_tag('isCompatibleBrowser'); - local('result' = true); - (client_browser >> 'Apple' || client_browser >> 'Opera' || client_browser >> 'KHTML') ? #result = false; + local('result' = false); + if (client_browser->Find("MSIE") && !client_browser->Find("mac") && !client_browser->Find("Opera")); + #result = client_browser->Substring(client_browser->Find("MSIE")+5,3)>=5.5; + /if; + if (client_browser->Find("Gecko/")); + #result = client_browser->Substring(client_browser->Find("Gecko/")+6,8)>=20030210; + /if; + if (client_browser->Find("Opera/")); + #result = client_browser->Substring(client_browser->Find("Opera/")+6,4)>=9.5; + /if; + if (client_browser->Find("AppleWebKit/")); + #result = client_browser->Substring(client_browser->Find("AppleWebKit/")+12,3)>=522; + /if; return(#result); /define_tag; diff --git a/phpgwapi/js/fckeditor/fckeditor.php b/phpgwapi/js/fckeditor/fckeditor.php index e18bdeca47..76353c9ed0 100644 --- a/phpgwapi/js/fckeditor/fckeditor.php +++ b/phpgwapi/js/fckeditor/fckeditor.php @@ -1,7 +1,7 @@ = 5.5) ; + } + else if ( strpos($sAgent, 'Gecko/') !== false ) + { + $iVersion = (int)substr($sAgent, strpos($sAgent, 'Gecko/') + 6, 8) ; + return ($iVersion >= 20030210) ; + } + else if ( strpos($sAgent, 'Opera/') !== false ) + { + $fVersion = (float)substr($sAgent, strpos($sAgent, 'Opera/') + 6, 4) ; + return ($fVersion >= 9.5) ; + } + else if ( preg_match( "|AppleWebKit/(\d+)|i", $sAgent, $matches ) ) + { + $iVersion = $matches[1] ; + return ( $matches[1] >= 522 ) ; + } + else + return false ; +} + +if ( !function_exists('version_compare') || version_compare( phpversion(), '5', '<' ) ) include_once( 'fckeditor_php4.php' ) ; else include_once( 'fckeditor_php5.php' ) ; - -?> diff --git a/phpgwapi/js/fckeditor/fckeditor.pl b/phpgwapi/js/fckeditor/fckeditor.pl index fd150684fd..2427982d7e 100644 --- a/phpgwapi/js/fckeditor/fckeditor.pl +++ b/phpgwapi/js/fckeditor/fckeditor.pl @@ -1,6 +1,6 @@ -##### +##### # FCKeditor - The text editor for Internet - http://www.fckeditor.net -# Copyright (C) 2003-2007 Frederico Caldeira Knabben +# Copyright (C) 2003-2008 Frederico Caldeira Knabben # # == BEGIN LICENSE == # @@ -63,7 +63,7 @@ sub CreateHtml { $HtmlValue = &specialchar_cnv($Value); - $Html = '
    ' ; + $Html = '' ; if(&IsCompatible()) { $Link = $BasePath . "editor/fckeditor.html?InstanceName=$InstanceName"; if($ToolbarSet ne '') { @@ -93,7 +93,6 @@ sub CreateHtml } $Html .= ""; } - $Html .= '
    '; return($Html); } @@ -107,6 +106,11 @@ sub IsCompatible } elsif($sAgent =~ /Gecko\//i) { $iVersion = substr($sAgent,index($sAgent,'Gecko/') + 6,8); return($iVersion >= 20030210) ; + } elsif($sAgent =~ /Opera\//i) { + $iVersion = substr($sAgent,index($sAgent,'Opera/') + 6,4); + return($iVersion >= 9.5) ; + } elsif($sAgent =~ /AppleWebKit\/(\d+)/i) { + return($1 >= 522) ; } else { return(0); # 2.0 PR fix } diff --git a/phpgwapi/js/fckeditor/fckeditor.py b/phpgwapi/js/fckeditor/fckeditor.py index 18baf2dae6..b565b94084 100644 --- a/phpgwapi/js/fckeditor/fckeditor.py +++ b/phpgwapi/js/fckeditor/fckeditor.py @@ -1,6 +1,6 @@ -""" +""" FCKeditor - The text editor for Internet - http://www.fckeditor.net -Copyright (C) 2003-2007 Frederico Caldeira Knabben +Copyright (C) 2003-2008 Frederico Caldeira Knabben == BEGIN LICENSE == @@ -23,6 +23,7 @@ This is the integration file for Python. import cgi import os +import re import string def escape(text, replace=string.replace): @@ -56,7 +57,7 @@ class FCKeditor(object): def CreateHtml(self): HtmlValue = escape(self.Value) - Html = "
    " + Html = "" if (self.IsCompatible()): File = "fckeditor.html" @@ -104,7 +105,6 @@ class FCKeditor(object): HeightCSS, HtmlValue ) - Html += "
    " return Html def IsCompatible(self): @@ -124,6 +124,18 @@ class FCKeditor(object): if (iVersion >= 20030210): return True return False + elif (sAgent.find("Opera/") >= 0): + i = sAgent.find("Opera/") + iVersion = float(sAgent[i+6:i+6+4]) + if (iVersion >= 9.5): + return True + return False + elif (sAgent.find("AppleWebKit/") >= 0): + p = re.compile('AppleWebKit\/(\d+)', re.IGNORECASE) + m = p.search(sAgent) + if (m.group(1) >= 522): + return True + return False else: return False @@ -146,4 +158,3 @@ class FCKeditor(object): else: sParams += "%s=%s" % (k, v) return sParams - diff --git a/phpgwapi/js/fckeditor/fckeditor_php4.php b/phpgwapi/js/fckeditor/fckeditor_php4.php index 73bae6c200..f7f6a20c63 100644 --- a/phpgwapi/js/fckeditor/fckeditor_php4.php +++ b/phpgwapi/js/fckeditor/fckeditor_php4.php @@ -1,7 +1,7 @@ Config['EnterMode'] = 'br'; + * + * @var array + */ var $Config ; - // PHP 4 Contructor + /** + * Main Constructor. + * Refer to the _samples/php directory for examples. + * + * @param string $instanceName + */ function FCKeditor( $instanceName ) { $this->InstanceName = $instanceName ; @@ -48,16 +93,30 @@ class FCKeditor $this->Config = array() ; } + /** + * Display FCKeditor. + * + */ function Create() { echo $this->CreateHtml() ; } + /** + * Return the HTML code required to run FCKeditor. + * + * @return string + */ function CreateHtml() { $HtmlValue = htmlspecialchars( $this->Value ) ; - $Html = '
    ' ; + $Html = '' ; + + if ( !isset( $_GET ) ) { + global $HTTP_GET_VARS ; + $_GET = $HTTP_GET_VARS ; + } if ( $this->IsCompatible() ) { @@ -95,34 +154,25 @@ class FCKeditor $Html .= "" ; } - $Html .= '
    ' ; - return $Html ; } + /** + * Returns true if browser is compatible with FCKeditor. + * + * @return boolean + */ function IsCompatible() { - global $HTTP_USER_AGENT ; - - if ( isset( $HTTP_USER_AGENT ) ) - $sAgent = $HTTP_USER_AGENT ; - else - $sAgent = $_SERVER['HTTP_USER_AGENT'] ; - - if ( strpos($sAgent, 'MSIE') !== false && strpos($sAgent, 'mac') === false && strpos($sAgent, 'Opera') === false ) - { - $iVersion = (float)substr($sAgent, strpos($sAgent, 'MSIE') + 5, 3) ; - return ($iVersion >= 5.5) ; - } - else if ( strpos($sAgent, 'Gecko/') !== false ) - { - $iVersion = (int)substr($sAgent, strpos($sAgent, 'Gecko/') + 6, 8) ; - return ($iVersion >= 20030210) ; - } - else - return false ; + return FCKeditor_IsCompatibleBrowser() ; } + /** + * Get settings from Config array as a single string. + * + * @access protected + * @return string + */ function GetConfigFieldString() { $sParams = '' ; @@ -146,6 +196,14 @@ class FCKeditor return $sParams ; } + /** + * Encode characters that may break the configuration string + * generated by GetConfigFieldString(). + * + * @access protected + * @param string $valueToEncode + * @return string + */ function EncodeConfig( $valueToEncode ) { $chars = array( @@ -156,5 +214,3 @@ class FCKeditor return strtr( $valueToEncode, $chars ) ; } } - -?> diff --git a/phpgwapi/js/fckeditor/fckeditor_php5.php b/phpgwapi/js/fckeditor/fckeditor_php5.php index 00623a7862..ab3afe2dbd 100644 --- a/phpgwapi/js/fckeditor/fckeditor_php5.php +++ b/phpgwapi/js/fckeditor/fckeditor_php5.php @@ -1,7 +1,7 @@ Config['EnterMode'] = 'br'; + * + * @var array + */ + public $Config ; - // PHP 5 Constructor (by Marcus Bointon ) - function __construct( $instanceName ) + /** + * Main Constructor. + * Refer to the _samples/php directory for examples. + * + * @param string $instanceName + */ + public function __construct( $instanceName ) { $this->InstanceName = $instanceName ; $this->BasePath = '/fckeditor/' ; @@ -48,16 +93,25 @@ class FCKeditor $this->Config = array() ; } - function Create() + /** + * Display FCKeditor. + * + */ + public function Create() { echo $this->CreateHtml() ; } - function CreateHtml() + /** + * Return the HTML code required to run FCKeditor. + * + * @return string + */ + public function CreateHtml() { $HtmlValue = htmlspecialchars( $this->Value ) ; - $Html = '
    ' ; + $Html = '' ; if ( $this->IsCompatible() ) { @@ -95,35 +149,26 @@ class FCKeditor $Html .= "" ; } - $Html .= '
    ' ; - return $Html ; } - function IsCompatible() + /** + * Returns true if browser is compatible with FCKeditor. + * + * @return boolean + */ + public function IsCompatible() { - global $HTTP_USER_AGENT ; - - if ( isset( $HTTP_USER_AGENT ) ) - $sAgent = $HTTP_USER_AGENT ; - else - $sAgent = $_SERVER['HTTP_USER_AGENT'] ; - - if ( strpos($sAgent, 'MSIE') !== false && strpos($sAgent, 'mac') === false && strpos($sAgent, 'Opera') === false ) - { - $iVersion = (float)substr($sAgent, strpos($sAgent, 'MSIE') + 5, 3) ; - return ($iVersion >= 5.5) ; - } - else if ( strpos($sAgent, 'Gecko/') !== false ) - { - $iVersion = (int)substr($sAgent, strpos($sAgent, 'Gecko/') + 6, 8) ; - return ($iVersion >= 20030210) ; - } - else - return false ; + return FCKeditor_IsCompatibleBrowser() ; } - function GetConfigFieldString() + /** + * Get settings from Config array as a single string. + * + * @access protected + * @return string + */ + public function GetConfigFieldString() { $sParams = '' ; $bFirst = true ; @@ -146,7 +191,15 @@ class FCKeditor return $sParams ; } - function EncodeConfig( $valueToEncode ) + /** + * Encode characters that may break the configuration string + * generated by GetConfigFieldString(). + * + * @access protected + * @param string $valueToEncode + * @return string + */ + public function EncodeConfig( $valueToEncode ) { $chars = array( '&' => '%26', @@ -156,5 +209,3 @@ class FCKeditor return strtr( $valueToEncode, $chars ) ; } } - -?> diff --git a/phpgwapi/js/fckeditor/fckpackager.xml b/phpgwapi/js/fckeditor/fckpackager.xml index 04b79d4ff8..60d370749b 100644 --- a/phpgwapi/js/fckeditor/fckpackager.xml +++ b/phpgwapi/js/fckeditor/fckpackager.xml @@ -1,7 +1,7 @@ - + + + + + + + + + + + + + + + + + + + + - - - - - \ No newline at end of file + diff --git a/phpgwapi/js/fckeditor/fcktemplates.xml b/phpgwapi/js/fckeditor/fcktemplates.xml index 61ee132ec6..4c5b55a865 100644 --- a/phpgwapi/js/fckeditor/fcktemplates.xml +++ b/phpgwapi/js/fckeditor/fcktemplates.xml @@ -1,7 +1,7 @@ - + + +function FCKeditor_IsCompatibleBrowser() +{ + sAgent = lCase( cgi.HTTP_USER_AGENT ); + isCompatibleBrowser = false; + + // check for Internet Explorer ( >= 5.5 ) + if( find( "msie", sAgent ) and not find( "mac", sAgent ) and not find( "opera", sAgent ) ) + { + // try to extract IE version + stResult = reFind( "msie ([5-9]\.[0-9])", sAgent, 1, true ); + if( arrayLen( stResult.pos ) eq 2 ) + { + // get IE Version + sBrowserVersion = mid( sAgent, stResult.pos[2], stResult.len[2] ); + if( sBrowserVersion GTE 5.5 ) + isCompatibleBrowser = true; + } + } + // check for Gecko ( >= 20030210+ ) + else if( find( "gecko/", sAgent ) ) + { + // try to extract Gecko version date + stResult = reFind( "gecko/(200[3-9][0-1][0-9][0-3][0-9])", sAgent, 1, true ); + if( arrayLen( stResult.pos ) eq 2 ) + { + // get Gecko build (i18n date) + sBrowserVersion = mid( sAgent, stResult.pos[2], stResult.len[2] ); + if( sBrowserVersion GTE 20030210 ) + isCompatibleBrowser = true; + } + } + else if( find( "opera/", sAgent ) ) + { + // try to extract Opera version + stResult = reFind( "opera/([0-9]+\.[0-9]+)", sAgent, 1, true ); + if( arrayLen( stResult.pos ) eq 2 ) + { + if ( mid( sAgent, stResult.pos[2], stResult.len[2] ) gte 9.5) + isCompatibleBrowser = true; + } + } + else if( find( "applewebkit", sAgent ) ) + { + // try to extract Gecko version date + stResult = reFind( "applewebkit/([0-9]+)", sAgent, 1, true ); + if( arrayLen( stResult.pos ) eq 2 ) + { + if( mid( sAgent, stResult.pos[2], stResult.len[2] ) gte 522 ) + isCompatibleBrowser = true; + } + } + return isCompatibleBrowser; +} + diff --git a/phpgwapi/js/fckeditor/htaccess.txt b/phpgwapi/js/fckeditor/htaccess.txt deleted file mode 100644 index 33c3f6f812..0000000000 --- a/phpgwapi/js/fckeditor/htaccess.txt +++ /dev/null @@ -1,44 +0,0 @@ -# -# 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 == -# -# ----------------------------------------------------------------------------- -# -# On some specific Linux installations you could face problems with Firefox. -# It could give you errors when loading the editor saying that some illegal -# characters were found (three strange chars in the beginning of the file). -# This could happen if you map the .js or .css files to PHP, for example. -# -# Those characters are the Byte Order Mask (BOM) of the Unicode encoded files. -# All FCKeditor files are Unicode encoded. -# -# Just rename this file to ".htaccess" and leave it in the editor directory. -# There are no security issues on doing it. It just sets the ".js" and ".css" -# files to their correct content types. -# - -AddType application/x-javascript .js -AddType text/css .css - -# -# If PHP is mapped to handle XML files, you could have some issues. The -# following will disable it. -# - -AddType text/xml .xml diff --git a/phpgwapi/js/fckeditor/license.txt b/phpgwapi/js/fckeditor/license.txt index 32601e8c63..43ac59d82d 100644 --- a/phpgwapi/js/fckeditor/license.txt +++ b/phpgwapi/js/fckeditor/license.txt @@ -1,5 +1,5 @@ -FCKeditor - The text editor for Internet - http://www.fckeditor.net -Copyright (C) 2003-2007 Frederico Caldeira Knabben +FCKeditor - The text editor for Internet - http://www.fckeditor.net +Copyright (C) 2003-2008 Frederico Caldeira Knabben Licensed under the terms of any of the following licenses at your choice: @@ -1244,4 +1244,3 @@ EXHIBIT A -Mozilla Public License. the notices in the Source Code files of the Original Code. You should use the text of this Exhibit A rather than the text found in the Original Code Source Code for Your Modifications.] -