From 38f1400bccd0a79bf0727cc00a44225c34bef4c9 Mon Sep 17 00:00:00 2001 From: Stanislas Rolland Date: Sun, 6 Jan 2008 08:40:23 +0000 Subject: [PATCH] * (major) Feature: Improved behaviour and configuration options for inline elements and text styling * Added feature 3708 (complete): support for * Fixed issue 5952 (complete): Usability Issue with classes wrapped with <> in select lists * Added feature 6034: Improvements of inlineCSS: adding classes to inline elements without additional span * Fixed issue 6839: sub and sup are added via CSS instead of tags in Safari git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@2865 709f56b5-9817-0410-a4d7-c38de5d9e867 --- ChangeLog | 6 + typo3/sysext/rtehtmlarea/ChangeLog | 5 + typo3/sysext/rtehtmlarea/doc/manual.sxw | Bin 78783 -> 78851 bytes typo3/sysext/rtehtmlarea/ext_localconf.php | 8 +- .../class.tx_rtehtmlarea_inlineelements.php | 220 ++++++ .../extensions/InlineElements/locallang.xml | 43 ++ .../InlineElements/skin/htmlarea.css | 23 + .../skin/images/bidioverride.gif | Bin 0 -> 97 bytes .../InlineElements/skin/images/big.gif | Bin 0 -> 217 bytes .../InlineElements/skin/images/bold.gif | Bin 0 -> 210 bytes .../InlineElements/skin/images/citation.gif | Bin 0 -> 365 bytes .../InlineElements/skin/images/code.gif | Bin 0 -> 216 bytes .../InlineElements/skin/images/definition.gif | Bin 0 -> 109 bytes .../skin/images/deletedtext.gif | Bin 0 -> 216 bytes .../InlineElements/skin/images/emphasis.gif | Bin 0 -> 209 bytes .../skin/images/insertedtext.gif | Bin 0 -> 221 bytes .../InlineElements/skin/images/italic.gif | Bin 0 -> 190 bytes .../InlineElements/skin/images/keyboard.gif | Bin 0 -> 370 bytes .../InlineElements/skin/images/monospaced.gif | Bin 0 -> 194 bytes .../InlineElements/skin/images/quotation.gif | Bin 0 -> 359 bytes .../InlineElements/skin/images/sample.gif | Bin 0 -> 588 bytes .../InlineElements/skin/images/small.gif | Bin 0 -> 206 bytes .../InlineElements/skin/images/span.gif | Bin 0 -> 116 bytes .../skin/images/strikethrough.gif | Bin 0 -> 120 bytes .../InlineElements/skin/images/strong.gif | Bin 0 -> 235 bytes .../InlineElements/skin/images/subscript.gif | Bin 0 -> 323 bytes .../skin/images/superscript.gif | Bin 0 -> 322 bytes .../InlineElements/skin/images/underline.gif | Bin 0 -> 138 bytes .../InlineElements/skin/images/variable.gif | Bin 0 -> 327 bytes .../class.tx_rtehtmlarea_textstyle.php | 61 ++ .../extensions/TextStyle/locallang.xml | 20 + .../plugins/InlineElements/inline-elements.js | 529 +++++++++++++++ .../plugins/InlineElements/locallang.xml | 46 ++ .../htmlarea/plugins/TextStyle/locallang.xml | 26 + .../htmlarea/plugins/TextStyle/text-style.js | 636 ++++++++++++++++++ .../rtehtmlarea/res/proc/pageTSConfig.txt | 11 +- 36 files changed, 1624 insertions(+), 10 deletions(-) create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/class.tx_rtehtmlarea_inlineelements.php create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/locallang.xml create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/htmlarea.css create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/bidioverride.gif create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/big.gif create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/bold.gif create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/citation.gif create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/code.gif create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/definition.gif create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/deletedtext.gif create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/emphasis.gif create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/insertedtext.gif create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/italic.gif create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/keyboard.gif create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/monospaced.gif create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/quotation.gif create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/sample.gif create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/small.gif create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/span.gif create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/strikethrough.gif create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/strong.gif create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/subscript.gif create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/superscript.gif create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/underline.gif create mode 100644 typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/variable.gif create mode 100644 typo3/sysext/rtehtmlarea/extensions/TextStyle/class.tx_rtehtmlarea_textstyle.php create mode 100644 typo3/sysext/rtehtmlarea/extensions/TextStyle/locallang.xml create mode 100644 typo3/sysext/rtehtmlarea/htmlarea/plugins/InlineElements/inline-elements.js create mode 100644 typo3/sysext/rtehtmlarea/htmlarea/plugins/InlineElements/locallang.xml create mode 100644 typo3/sysext/rtehtmlarea/htmlarea/plugins/TextStyle/locallang.xml create mode 100644 typo3/sysext/rtehtmlarea/htmlarea/plugins/TextStyle/text-style.js diff --git a/ChangeLog b/ChangeLog index e8bce82f20e4..68d0f47ec4df 100755 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,12 @@ * Feature/Cleanup: Acronym plugin of htmlArea RTE using new plugin API and enabled in IE7 * Fixed issue 6154: Plugin Acronym enables class abbr for span * Added feature 1927: Activate Acronym Plugin for IE + * (major) Feature: Improved behaviour and configuration options for inline elements and text styling + * Added feature 3708 (complete): support for + * Fixed issue 5952 (complete): Usability Issue with classes wrapped with <> in select lists + * Added feature 6034: Improvements of inlineCSS: adding classes to inline elements without additional span + * Fixed issue 6839: sub and sup are added via CSS instead of tags in Safari + 2008-01-05 Stanislas Rolland diff --git a/typo3/sysext/rtehtmlarea/ChangeLog b/typo3/sysext/rtehtmlarea/ChangeLog index 9fc9456cbdb9..7457bc6f5326 100644 --- a/typo3/sysext/rtehtmlarea/ChangeLog +++ b/typo3/sysext/rtehtmlarea/ChangeLog @@ -3,6 +3,11 @@ * Feature/Cleanup: Acronym plugin of htmlArea RTE using new plugin API and enabled in IE7 * Fixed issue 6154: Plugin Acronym enables class abbr for span * Added feature 1927: Activate Acronym Plugin for IE + * (major) Feature: Improved behaviour and configuration options for inline elements and text styling + * Added feature 3708 (complete): support for + * Fixed issue 5952 (complete): Usability Issue with classes wrapped with <> in select lists + * Added feature 6034: Improvements of inlineCSS: adding classes to inline elements without additional span + * Fixed issue 6839: sub and sup are added via CSS instead of tags in Safari 2008-01-05 Stanislas Rolland diff --git a/typo3/sysext/rtehtmlarea/doc/manual.sxw b/typo3/sysext/rtehtmlarea/doc/manual.sxw index 6c3429ee07bb8ea9f7739fafa81ab15c3d8af713..69756b4634cbfc5edf05d36dd4fffc865f0f466b 100644 GIT binary patch delta 60045 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 CC`#J^ delta 59839 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 diff --git a/typo3/sysext/rtehtmlarea/ext_localconf.php b/typo3/sysext/rtehtmlarea/ext_localconf.php index 7bb4caf73396..7ed167c31269 100644 --- a/typo3/sysext/rtehtmlarea/ext_localconf.php +++ b/typo3/sysext/rtehtmlarea/ext_localconf.php @@ -66,10 +66,10 @@ $TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['Acronym'] = array(); $TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['Acronym']['objectReference'] = 'EXT:'.$_EXTKEY.'/extensions/Acronym/class.tx_rtehtmlarea_acronym.php:&tx_rtehtmlarea_acronym'; $TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['Acronym']['addIconsToSkin'] = 0; $TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['Acronym']['disableInFE'] = 1; -//$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['InlineElements'] = array(); -//$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['InlineElements']['objectReference'] = 'EXT:'.$_EXTKEY.'/extensions/InlineElements/class.tx_rtehtmlarea_inlineelements.php:&tx_rtehtmlarea_inlineelements'; -//$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['TextStyle'] = array(); -//$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['TextStyle']['objectReference'] = 'EXT:'.$_EXTKEY.'/extensions/TextStyle/class.tx_rtehtmlarea_textstyle.php:&tx_rtehtmlarea_textstyle'; +$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['InlineElements'] = array(); +$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['InlineElements']['objectReference'] = 'EXT:'.$_EXTKEY.'/extensions/InlineElements/class.tx_rtehtmlarea_inlineelements.php:&tx_rtehtmlarea_inlineelements'; +$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['TextStyle'] = array(); +$TYPO3_CONF_VARS['EXTCONF']['rtehtmlarea']['plugins']['TextStyle']['objectReference'] = 'EXT:'.$_EXTKEY.'/extensions/TextStyle/class.tx_rtehtmlarea_textstyle.php:&tx_rtehtmlarea_textstyle'; $_EXTCONF = unserialize($_EXTCONF); // unserializing the configuration so we can use it here: diff --git a/typo3/sysext/rtehtmlarea/extensions/InlineElements/class.tx_rtehtmlarea_inlineelements.php b/typo3/sysext/rtehtmlarea/extensions/InlineElements/class.tx_rtehtmlarea_inlineelements.php new file mode 100644 index 000000000000..fecb4dbdb70f --- /dev/null +++ b/typo3/sysext/rtehtmlarea/extensions/InlineElements/class.tx_rtehtmlarea_inlineelements.php @@ -0,0 +1,220 @@ + +* All rights reserved +* +* This script is part of the Typo3 project. The Typo3 project is +* free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* The GNU General Public License can be found at +* http://www.gnu.org/copyleft/gpl.html. +* +* This script is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* This copyright notice MUST APPEAR in all copies of the script! +***************************************************************/ +/** + * InlineElements plugin for htmlArea RTE + * + * @author Stanislas Rolland + * + * TYPO3 CVS ID: $Id: class.tx_rtehtmlarea_pi1.php 2449 2007-08-15 08:12:19Z ingorenner $ + * + */ + +require_once(t3lib_extMgm::extPath('rtehtmlarea').'class.tx_rtehtmlareaapi.php'); + +class tx_rtehtmlarea_inlineelements extends tx_rtehtmlareaapi { + + protected $extensionKey = 'rtehtmlarea'; // The key of the extension that is extending htmlArea RTE + protected $pluginName = 'InlineElements'; // The name of the plugin registered by the extension + protected $relativePathToLocallangFile = 'extensions/InlineElements/locallang.xml'; // Path to this main locallang file of the extension relative to the extension dir. + protected $relativePathToSkin = 'extensions/InlineElements/skin/htmlarea.css'; // Path to the skin (css) file relative to the extension dir. + protected $htmlAreaRTE; // Reference to the invoking object + protected $thisConfig; // Reference to RTE PageTSConfig + protected $toolbar; // Reference to RTE toolbar array + protected $LOCAL_LANG; // Frontend language array + + protected $pluginButtons = 'formattext, bidioverride, big, bold, citation, code, definition, deletedtext, emphasis, insertedtext, italic, keyboard, quotation, sample, small, span, strikethrough, strong, subscript, superscript, underline, variable'; + + protected $convertToolbarForHtmlAreaArray = array ( + 'formattext' => 'FormatText', + 'bidioverride' => 'BiDiOverride', + 'big' => 'Big', + 'bold' => 'Bold', + 'citation' => 'Citation', + 'code' => 'Code', + 'definition' => 'Definition', + 'deletedtext' => 'DeletedText', + 'emphasis' => 'Emphasis', + 'insertedtext' => 'InsertedText', + 'italic' => 'Italic', + 'keyboard' => 'Keyboard', + 'monospaced' => 'MonoSpaced', + 'quotation' => 'Quotation', + 'sample' => 'Sample', + 'small' => 'Small', + 'span' => 'Span', + 'strikethrough' => 'StrikeThrough', + 'strong' => 'Strong', + 'subscript' => 'Subscript', + 'superscript' => 'Superscript', + 'underline' => 'Underline', + 'variable' => 'Variable', + ); + + private $defaultInlineElements = array( + 'none' => 'No markup', + 'b' => 'Bold', + 'bdo' => 'BiDi override', + 'big' => 'Large text', + 'cite' => 'Citation', + 'code' => 'Code', + 'del' => 'Deleted text', + 'dfn' => 'Definition', + 'em' => 'Emphasis', + 'i' => 'Italic', + 'ins' => 'Inserted text', + 'kbd' => 'Keyboard', + //'label' => 'Label', + 'q' => 'Quotation', + 'samp' => 'Sample', + 'small' => 'Small text', + 'span' => 'Style container', + 'strike' => 'Strike-through', + 'strong' => 'Strong emphasis', + 'sub' => 'Subscript', + 'sup' => 'Superscript', + 'tt' => 'Monospaced text', + 'u' => 'Underline', + 'var' => 'Variable', + ); + + private $defaultInlineElementsOrder = 'none, bidioverride, big, bold, citation, code, definition, deletedtext, emphasis, insertedtext, italic, keyboard, + monospaced, quotation, sample, small, span, strikethrough, strong, subscript, superscript, underline, variable'; + + private $buttonToInlineElement = array( + 'none' => 'none', + 'bidioverride' => 'bdo', + 'big' => 'big', + 'bold' => 'b', + 'citation' => 'cite', + 'code' => 'code', + 'definition' => 'dfn', + 'deletedtext' => 'del', + 'emphasis' => 'em', + 'insertedtext' => 'ins', + 'italic' => 'i', + 'keyboard' => 'kbd', + //'label' => 'label', + 'monospaced' => 'tt', + 'quotation' => 'q', + 'sample' => 'samp', + 'small' => 'small', + 'span' => 'span', + 'strikethrough' => 'strike', + 'strong' => 'strong', + 'subscript' => 'sub', + 'superscript' => 'sup', + 'underline' => 'u', + 'variable' => 'var', + ); + + /** + * Return JS configuration of the htmlArea plugins registered by the extension + * + * @param integer Relative id of the RTE editing area in the form + * + * @return string JS configuration for registered plugins + * + * The returned string will be a set of JS instructions defining the configuration that will be provided to the plugin(s) + * Each of the instructions should be of the form: + * RTEarea['.$RTEcounter.']["buttons"]["button-id"]["property"] = "value"; + */ + public function buildJavascriptConfiguration($RTEcounter) { + global $TSFE, $LANG; + + $registerRTEinJavascriptString = ''; + if (in_array('formattext', $this->toolbar)) { + if (!is_array( $this->thisConfig['buttons.']) || !is_array( $this->thisConfig['buttons.']['formattext.'])) { + $registerRTEinJavascriptString .= ' + RTEarea['.$RTEcounter.']["buttons"]["formattext"] = new Object();'; + } + + // Default inline elements + $hideItems = array(); + $restrictTo = array('*'); + $inlineElementsOrder = $this->defaultInlineElementsOrder; + $prefixLabelWithTag = false; + $postfixLabelWithTag = false; + + // Processing PageTSConfig + if (is_array($this->thisConfig['buttons.']) && is_array($this->thisConfig['buttons.']['formattext.'])) { + // Removing elements + if ($this->thisConfig['buttons.']['formattext.']['removeItems']) { + $hideItems = t3lib_div::trimExplode(',', $this->htmlAreaRTE->cleanList($this->thisConfig['buttons.']['formattext.']['removeItems']), 1); + } + // Restriction clause + if ($this->thisConfig['buttons.']['formattext.']['restrictToItems']) { + $restrictTo = t3lib_div::trimExplode(',', $this->htmlAreaRTE->cleanList('none,'.$this->thisConfig['buttons.']['formattext.']['restrictTo']), 1); + } + // Elements order + if ($this->thisConfig['buttons.']['formattext.']['orderItems']) { + $inlineElementsOrder = 'none,'.$this->thisConfig['buttons.']['formattext.']['orderItems']; + } + $prefixLabelWithTag = ($this->thisConfig['buttons.']['formattext.']['prefixLabelWithTag'])?true:$prefixLabelWithTag; + $postfixLabelWithTag = ($this->thisConfig['buttons.']['formattext.']['postfixLabelWithTag'])?true:$postfixLabelWithTag; + } + + $inlineElementsOrder = array_diff(t3lib_div::trimExplode(',', $this->htmlAreaRTE->cleanList($inlineElementsOrder), 1), $hideItems); + if (!in_array('*', $restrictTo)) { + $inlineElementsOrder = array_intersect($inlineElementsOrder, $restrictTo); + } + + // Localizing the options + $inlineElementsOptions = array(); + foreach ($inlineElementsOrder as $item) { + if ($this->htmlAreaRTE->is_FE()) { + $inlineElementsOptions[$this->buttonToInlineElement[$item]] = $TSFE->csConvObj->conv($TSFE->getLLL($this->defaultInlineElements[$this->buttonToInlineElement[$item]],$this->LOCAL_LANG), $TSFE->labelsCharset, $TSFE->renderCharset); + } else { + $inlineElementsOptions[$this->buttonToInlineElement[$item]] = $LANG->getLL($this->defaultInlineElements[$this->buttonToInlineElement[$item]]); + } + $inlineElementsOptions[$this->buttonToInlineElement[$item]] = (($prefixLabelWithTag && $item != 'none')?($this->buttonToInlineElement[$item].' - '):'') . $inlineElementsOptions[$this->buttonToInlineElement[$item]] . (($postfixLabelWithTag && $item != 'none')?(' - '.$this->buttonToInlineElement[$item]):''); + } + + $first = array_shift($inlineElementsOptions); + // Sorting the options + if (!is_array($this->thisConfig['buttons.']) || !is_array($this->thisConfig['buttons.']['formattext.']) || !$this->thisConfig['buttons.']['formattext.']['orderItems']) { + asort($inlineElementsOptions); + } + // Generating the javascript options + $JSInlineElements = '{ + "'. $first.'" : "none"'; + foreach ($inlineElementsOptions as $item => $label) { + $JSInlineElements .= ', + "' . $label . '" : "' . $item . '"'; + } + $JSInlineElements .= '};'; + + $registerRTEinJavascriptString .= ' + RTEarea['.$RTEcounter.'].buttons.formattext.dropDownOptions = '. $JSInlineElements; + } + return $registerRTEinJavascriptString; + } + + +} // end of class + +if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/InlineElements/class.tx_rtehtmlarea_inlineelements.php']) { + include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/InlineElements/class.tx_rtehtmlarea_inlineelements.php']); +} + +?> \ No newline at end of file diff --git a/typo3/sysext/rtehtmlarea/extensions/InlineElements/locallang.xml b/typo3/sysext/rtehtmlarea/extensions/InlineElements/locallang.xml new file mode 100644 index 000000000000..440e550fb3af --- /dev/null +++ b/typo3/sysext/rtehtmlarea/extensions/InlineElements/locallang.xml @@ -0,0 +1,43 @@ + + + + Labels for Inline Elements plugin of htmlArea RTE + module + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/htmlarea.css b/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/htmlarea.css new file mode 100644 index 000000000000..706dbda13333 --- /dev/null +++ b/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/htmlarea.css @@ -0,0 +1,23 @@ +/* Selectors for the InlineElements plugin of htmlArea RTE */ +.htmlarea .toolbar .BiDiOverride {background-image:url("images/bidioverride.gif");} +.htmlarea .toolbar .Big {background-image:url("images/big.gif");} +.htmlarea .toolbar .Bold {background-image:url("images/bold.gif");} +.htmlarea .toolbar .Citation {background-image:url("images/citation.gif");} +.htmlarea .toolbar .Code {background-image:url("images/code.gif");} +.htmlarea .toolbar .Definition {background-image:url("images/definition.gif");} +.htmlarea .toolbar .DeletedText {background-image:url("images/deletedtext.gif");} +.htmlarea .toolbar .Emphasis {background-image:url("images/emphasis.gif");} +.htmlarea .toolbar .InsertedText {background-image:url("images/insertedtext.gif");} +.htmlarea .toolbar .Italic {background-image:url("images/italic.gif");} +.htmlarea .toolbar .Keyboard {background-image:url("images/keyboard.gif");} +.htmlarea .toolbar .MonoSpaced {background-image:url("images/monospaced.gif");} +.htmlarea .toolbar .Quotation {background-image:url("images/quotation.gif");} +.htmlarea .toolbar .Sample {background-image:url("images/sample.gif");} +.htmlarea .toolbar .Small {background-image:url("images/small.gif");} +.htmlarea .toolbar .Span {background-image:url("images/span.gif");} +.htmlarea .toolbar .StrikeThrough {background-image:url("images/strikethrough.gif");} +.htmlarea .toolbar .Strong {background-image:url("images/strong.gif");} +.htmlarea .toolbar .Subscript {background-image:url("images/subscript.gif");} +.htmlarea .toolbar .Superscript {background-image:url("images/superscript.gif");} +.htmlarea .toolbar .Underline {background-image:url("images/underline.gif");} +.htmlarea .toolbar .Variable {background-image:url("images/variable.gif");} diff --git a/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/bidioverride.gif b/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/bidioverride.gif new file mode 100644 index 0000000000000000000000000000000000000000..46b5028570536207119b02f13ceba7fd3087e11a GIT binary patch literal 97 zcmZ?wbhEHb6k-r!n8*MGn(yC#(QW+ikT6m4CkrDx10#bDNEjr~z+}|ZZ+KGY_LUhS xdv4^lbZk~knD07OLc=WX)Hclv2Lv7Dx5Ow{Y~`q;Muh2*j10hIa601;&H7vN}k%gbpOq}PXj6z zsD$?Oj^-f$=@IYXq2ZN_9%Z|W2vzR68E{En+%l+qj O@;jrvu|Y|Z!5RR`rdKim literal 0 HcmV?d00001 diff --git a/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/bold.gif b/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/bold.gif new file mode 100644 index 0000000000000000000000000000000000000000..10df9315800466291895e09f3d0f12c81e8d2241 GIT binary patch literal 210 zcmZ?wbhEHb6k-r!IKlt~n(yC#5%TR6aIMx#m?q`hC>=goGpffpZKgsx_H(NnczC&~o0NCr&-=_Ujef3h&LGcYpffE0r4WMK7AQ0Pm^>|$Hu z)TTH`#YsTvh{lEvg5`|6s0K1K#>00VwJe*gdg literal 0 HcmV?d00001 diff --git a/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/citation.gif b/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/citation.gif new file mode 100644 index 0000000000000000000000000000000000000000..4b4267ca3a54f10bbf4fdf573bbe81f646ba7609 GIT binary patch literal 365 zcmZ?wbhEHb6k-r!xXJ(onvc${C@;=+cXu&1wK%q8!Ta~`@7{T!rmi(@LQ7Ck(9xsk zqN1YKFYIb>s@b$@v$M0))2rLEvvcOonfLhd^W*#0ojG&n$;Gu+R#r_l`ET#+*|=(M zP>|Qn6RV7kjc;7Jc<?4oC;cPYi5b4wDKp5~l>{p2|ES5~Rl5 zGlgNIk52nC*B~ukg@l#IA1C;UWVl|JKANI*Ca7v1gSy*?hYbyqXPzoni2DfT%1IRQ z@Jfj@>iMvXX_QLHaWH9#%Zf(&sdF4L1-?`dx LX!@jy3=Gx)vOz1x literal 0 HcmV?d00001 diff --git a/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/deletedtext.gif b/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/deletedtext.gif new file mode 100644 index 0000000000000000000000000000000000000000..9cbe8716d956c0d8612ccd4f61efdee471c5a4e8 GIT binary patch literal 216 zcmZ?wbhEHb6k-r!IKlt~n(yC#naRMQ8rjQboo$pcUoxQGp(M4A!+B7F{c_uvM2oYKo?{FZ;YW}JC zX95Qdn0h(ICh4Shv^XSP+HvVzhQxs_c8vFwDi*|Mt$$x$UgNj?`qPHYCKE*lYXGUQ BM|=PP literal 0 HcmV?d00001 diff --git a/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/emphasis.gif b/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/emphasis.gif new file mode 100644 index 0000000000000000000000000000000000000000..d87caf51f8e50438027149c475b92bcb73aa3ca6 GIT binary patch literal 209 zcmZ?wbhEHb6k-r!IKlt~ny=q{46Rx)lYv3NwQAq-E6cZ?eE#BH(Zo$E5#2ZMK2r*6 zPVHEo-m>`OwFm3=p4W@%l=7*6|NcwGr1iHSywr^BT(kZ7*1hLMy&Eg0ZwHx&3KV~` zFtP)!(g6vB>||i|TcFaHlG!(9k;QV!l#@XohcEQ`8+CrwHR|R*|EyVu$@%`mO&_N6 wbhk}b>4>OJ|w&G%OS>2#}q0mCcevMU8J=&e>^+esV% literal 0 HcmV?d00001 diff --git a/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/keyboard.gif b/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/keyboard.gif new file mode 100644 index 0000000000000000000000000000000000000000..9f56ce59505133d0784b537620eee1943043304e GIT binary patch literal 370 zcmZ?wbhEHb6k-r!xXJ(on$MrV*?;I*e&-Sf&s?~=eC68z z|NmdS`FQKrz5Mq1@4tV)_w3orH*fFWe{l5psdM-4UAcbe@X?beF5dqB{lB7b<(V^Q zHf-7^;7|Z^2w6b!CkrDx12=;XNH@q&3~c=eS~nOTN?`FgvqB}u%w5!bnPYB?l%IN= zr(mVFh~u`-lOaybT!#haxD9)`lw4=l+{&wXIwh#$Mp9*(3=4}eA5UX)w5W_AzYe#U zS{}ESqKJSHFQ>So(v}4jw;sVUB0QQwX3+e zwJ z)34!dA3l6sw)MoeZM&{ryVuh10 zZ7#?a)U_Sw^|L zn@4d%q?3^RbS7E$InJu8-OL(GoCUeX`MDRbc4A>>&Ua?mwb_TkY2TjxhYs%FePrkH J6C92V)&OfZkv9MU literal 0 HcmV?d00001 diff --git a/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/sample.gif b/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/sample.gif new file mode 100644 index 0000000000000000000000000000000000000000..efefac9577ddf6193d39ac971a9da24941931cf4 GIT binary patch literal 588 zcmZ?wbhEHb6k-r!c*Xz(ni^SuElLh+m~Vdn{!8P+6Kl`>UA^OMeD~4r85`$r`p~-J zuT#T$r|KPtEWJU z=G5`LeBRaGl@}Hs_}jJi-id4Pd)I$kzvtHSeXm=W-I}!T?}EJ#Tb5m%cj#}>lzT_7 zJX^ize(#zq8byC+Z@pQ*;MJW6FQ2{q(zW9Jl%;!*T>o7(<%~u3i+eAA`LtY`vi6!& z&$HUuS59944hkFE1I3>#jO+|73_2jIKykvrzOsR(so7pxOguJ1C#bo%DOAai*@9b2 zBfz+?NydefQAI%4gx^AYmLs=~xuLzc5SJ%U$ShwES0^^laACbLCe2ySqIO!rtgdeI zyo&0x_+so>MfH8%IV7yu4~lr%`ueI0Mk=z-VzD%mwXuW*3ltig82FSzW?XpS=*TN?<#R${kxQ$9cvw%zghvkD^3s(&EDY8F1~2Wq literal 0 HcmV?d00001 diff --git a/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/small.gif b/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/small.gif new file mode 100644 index 0000000000000000000000000000000000000000..f222a2a84b326434acbb7088ea8e082813c02f29 GIT binary patch literal 206 zcmZ?wbhEHb6k-r!IKlt~n(yC#shzn^z^i4;p-WyR^PjzVH(}+GQMqX zvt-+;-X(i)-F2 z3nM!NBZCe|7-S~{t9ODzUrOe@7cVtldM3JgO9dP|k(?UBsb|J`_)wEFhg7czi@T&H uTgSDBLfjE5liTxeGqLQ6*H7T#t3RLdF>zh5fAU=0AmrcpNl literal 0 HcmV?d00001 diff --git a/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/span.gif b/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/span.gif new file mode 100644 index 0000000000000000000000000000000000000000..f09920dd3bc5b4e37a22c0e346c09fc5c3243022 GIT binary patch literal 116 zcmZ?wbhEHb6k-r!Si}GXn!1hu-@pIjkT9Wi&3}*p7%2W^VPt1uV$cEcKx!G7Ej4!C z`4=!zLz>gj$8FdDd8R!nmN}=VE)+c)RG@R-FoD}_!;>9#+E#M{UNDPwIw-9dPf?OQ L8!0l0fx#L8hJYi* literal 0 HcmV?d00001 diff --git a/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/strikethrough.gif b/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/strikethrough.gif new file mode 100644 index 0000000000000000000000000000000000000000..e533be73bf9e9f8b7f977da07de8fc057e86733c GIT binary patch literal 120 zcmZ?wbhEHb6k-r!Si}GXn(yC#>FDTSNINrg=1hwc15xMs(7z}>%F)}c2SpMN_hm~yM$`Gag Q<4VSvInUPhvoKf#0EgZwP5=M^ literal 0 HcmV?d00001 diff --git a/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/strong.gif b/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/strong.gif new file mode 100644 index 0000000000000000000000000000000000000000..b78fc9c7f518a3892775edbc5a3b1ca6b50f17b4 GIT binary patch literal 235 zcmZ?wbhEHb6k-r!IKlt~n(yC#5%6lA$-vOj(IMbkEge2tD`A>UK#OKnk8#>e$-qu2 z-$sRy4#VWB0`9dIS#y-4r)tGc6!Ps<3TcxJngTKdH&Fb^!pP3R$e;sK0hzIMaWR|WwM4jCI%!rB804s0yl)@}l#v#|~@#BO>--K?J3lTgmtd}M- zN@cwhWtUHN;uK+P>2zW6VCZA)nJ}Thd*Y-?6Q?=%&zwH1Z`y*%v$~c#IWkxS0KKMQ ABme*a literal 0 HcmV?d00001 diff --git a/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/superscript.gif b/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/superscript.gif new file mode 100644 index 0000000000000000000000000000000000000000..1a5e4d0af4afaa4051009c7ec42c0361c7e12cea GIT binary patch literal 322 zcmZ?wbhEHb6k-r!xXJ(on(yC#G0d3HU|E>hzIMaWS6az)95Ob@1hfVe9Oznf!7g{M zK|q5;#Dai^2NBI{gKCxq)~(rf=96vVlJxHNjzx=2k|qXJTu=#X=W?pjj_LC#o}V#c zyG_Q_t%vRzr_GcK>T)hz;E=E&y>FXhP>+607syWP0mYvzjO+}I3_2hqL4IOji$Bm% z;GrYce`4W5gEciwecg{VW^gb~<#me?P*k7jks&=n#^$7;i?NT1ga_ZkWJc9?{w~!I yjy&%exmBGd>l@lTIy)J97#W=Ud-`2^Crq0>dCJ7;)0`*G>z&`-HP_jZ!5RP=N?pPL literal 0 HcmV?d00001 diff --git a/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/underline.gif b/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/underline.gif new file mode 100644 index 0000000000000000000000000000000000000000..e65b215aefb59a15c5e56e7220fa50fdc4e0ce1e GIT binary patch literal 138 zcmZ?wbhEHb6k-r!*vtR~n(yC#;c#zfbZV9gnafqQRX$Pve`;fa1hZ5>gXgF1G52PdL@i4FEq_DL?=K literal 0 HcmV?d00001 diff --git a/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/variable.gif b/typo3/sysext/rtehtmlarea/extensions/InlineElements/skin/images/variable.gif new file mode 100644 index 0000000000000000000000000000000000000000..9f955f86345059585bc4c5e07d7df82d5c5b925a GIT binary patch literal 327 zcmZ?wbhEHb6k-r!xXJ(on*VR4Y@6=;{{5E;)qcnKuKfOR-qDrm&z?NLclX|jC4Nh% z79QBP=;w=VpKf%$I$v{qWy0zyG5h96%<0Shf3N!T2Dfz!tFCU3|Mz6_|5s}-ZY?^0 za{s9nVS5&MUf!9vYhl{|*Xu8?4S(_C?SltTPp(SXHrxByfvxKoHiB%X22lLT!pP3R z%%B4@4CE&Uwv+>n1sWov9&#sIPKc!s8K;s>c+0c%`>UgQ22e +* All rights reserved +* +* This script is part of the Typo3 project. The Typo3 project is +* free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* The GNU General Public License can be found at +* http://www.gnu.org/copyleft/gpl.html. +* +* This script is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* This copyright notice MUST APPEAR in all copies of the script! +***************************************************************/ +/** + * TextStyle plugin for htmlArea RTE + * + * @author Stanislas Rolland + * + * TYPO3 SVN ID: $Id$ + * + */ + +require_once(t3lib_extMgm::extPath('rtehtmlarea').'class.tx_rtehtmlareaapi.php'); + +class tx_rtehtmlarea_textstyle extends tx_rtehtmlareaapi { + + protected $extensionKey = 'rtehtmlarea'; // The key of the extension that is extending htmlArea RTE + protected $pluginName = 'TextStyle'; // The name of the plugin registered by the extension + protected $relativePathToLocallangFile = 'extensions/TextStyle/locallang.xml'; // Path to this main locallang file of the extension relative to the extension dir. + protected $relativePathToSkin = ''; // Path to the skin (css) file relative to the extension dir. + protected $htmlAreaRTE; // Reference to the invoking object + protected $thisConfig; // Reference to RTE PageTSConfig + protected $toolbar; // Reference to RTE toolbar array + protected $LOCAL_LANG; // Frontend language array + + protected $pluginButtons = 'textstyle'; // The comma-seperated list of button names that the extension id adding to the htmlArea RTE tollbar + protected $pluginLabels = 'textstylelabel'; // The comma-seperated list of label names that the extension id adding to the htmlArea RTE tollbar + // The name-converting array, converting the button names used in the RTE PageTSConfing to the button id's used by the JS scripts + protected $convertToolbarForHtmlAreaArray = array ( + 'textstylelabel' => 'I[text_style]', + 'textstyle' => 'TextStyle', + ); + protected $requiresClassesConfiguration = true; // True if the extension requires the PageTSConfig Classes configuration + +} // end of class + +if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/TextStyle/class.tx_rtehtmlarea_textstyle.php']) { + include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/TextStyle/class.tx_rtehtmlarea_textstyle.php']); +} + +?> \ No newline at end of file diff --git a/typo3/sysext/rtehtmlarea/extensions/TextStyle/locallang.xml b/typo3/sysext/rtehtmlarea/extensions/TextStyle/locallang.xml new file mode 100644 index 000000000000..7fda2e48d3f7 --- /dev/null +++ b/typo3/sysext/rtehtmlarea/extensions/TextStyle/locallang.xml @@ -0,0 +1,20 @@ + + + + Labels for Text Style plugin of htmlArea RTE + module + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/typo3/sysext/rtehtmlarea/htmlarea/plugins/InlineElements/inline-elements.js b/typo3/sysext/rtehtmlarea/htmlarea/plugins/InlineElements/inline-elements.js new file mode 100644 index 000000000000..8d4965a8f310 --- /dev/null +++ b/typo3/sysext/rtehtmlarea/htmlarea/plugins/InlineElements/inline-elements.js @@ -0,0 +1,529 @@ +/*************************************************************** +* Copyright notice +* +* (c) 2007-2008 Stanislas Rolland +* All rights reserved +* +* This script is part of the TYPO3 project. The TYPO3 project is +* free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* The GNU General Public License can be found at +* http://www.gnu.org/copyleft/gpl.html. +* A copy is found in the textfile GPL.txt and important notices to the license +* from the author is found in LICENSE.txt distributed with these scripts. +* +* +* This script is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* +* This copyright notice MUST APPEAR in all copies of the script! +***************************************************************/ +/* + * Inline Elements Plugin for TYPO3 htmlArea RTE + * + * TYPO3 SVN ID: $Id$ + */ +/* + * Creation of the class of InlineElements plugins + */ +InlineElements = HTMLArea.Plugin.extend({ + /* + * Let the base class do some initialization work + */ + constructor : function(editor, pluginName) { + this.base(editor, pluginName); + }, + + /* + * This function gets called by the base constructor + */ + configurePlugin : function (editor) { + + this.allowedAttributes = new Array("id", "title", "lang", "xml:lang", "dir", (HTMLArea.is_gecko?"class":"className")); + + if (this.editorConfiguration.buttons.textstyle) { + this.tags = this.editorConfiguration.buttons.textstyle.tags; + } + + /* + * Registering plugin "About" information + */ + var pluginInformation = { + version : "1.0", + developer : "Stanislas Rolland", + developerUrl : "http://www.fructifor.ca/", + copyrightOwner : "Stanislas Rolland", + sponsor : this.localize("Technische Universitat Ilmenau"), + sponsorUrl : "http://www.tu-ilmenau.de/", + license : "GPL" + }; + this.registerPluginInformation(pluginInformation); + + /* + * Registering the dropdown list + */ + var buttonId = "FormatText"; + var dropDownConfiguration = { + id : buttonId, + tooltip : this.localize(buttonId + "-Tooltip"), + options : (this.editorConfiguration.buttons[buttonId.toLowerCase()]?this.editorConfiguration.buttons[buttonId.toLowerCase()]["dropDownOptions"]:null), + action : "onChange", + refresh : null + }; + this.registerDropDown(dropDownConfiguration); + + /* + * Registering the buttons + */ + var n = this.buttonList.length; + for (var i = 0; i < n; ++i) { + var button = this.buttonList[i]; + buttonId = button[0]; + var buttonConfiguration = { + id : buttonId, + tooltip : this.localize(buttonId + "-Tooltip"), + action : "onButtonPress", + context : button[1], + hide : false, + selection : false + }; + this.registerButton(buttonConfiguration); + } + }, + + /* + * The list of buttons added by this plugin + */ + buttonList : [ + ["BiDiOverride", null], + ["Big", null], + ["Bold", null], + ["Citation", null], + ["Code", null], + ["Definition", null], + ["DeletedText", null], + ["Emphasis", null], + ["InsertedText", null], + ["Italic", null], + ["Keyboard", null], + //["Label", null], + ["MonoSpaced", null], + ["Quotation", null], + ["Sample", null], + ["Small", null], + ["Span", null], + ["StrikeThrough", null], + ["Strong", null], + ["Subscript", null], + ["Superscript", null], + ["Underline", null], + ["Variable", null] + ], + + /* + * Conversion object: button names to corresponding tag names + */ + convertBtn : { + BiDiOverride : "bdo", + Big : "big", + Bold : "b", + Citation : "cite", + Code : "code", + Definition : "dfn", + DeletedText : "del", + Emphasis : "em", + InsertedText : "ins", + Italic : "i", + Keyboard : "kbd", + //Label : "label", + MonoSpaced : "tt", + Quotation : "q", + Sample : "samp", + Small : "small", + Span : "span", + StrikeThrough : "strike", + Strong : "strong", + Subscript : "sub", + Superscript : "sup", + Underline : "u", + Variable : "var" + }, + + /* + * Regular expression to check if an element is an inline elment + */ + REInlineElements : /^(b|bdo|big|cite|code|del|dfn|em|i|ins|kbd|label|q|samp|small|span|strike|strong|sub|sup|tt|u|var)$/, + + /* + * Function to check if an element is an inline elment + */ + isInlineElement : function (el) { + return el && (el.nodeType === 1) && this.REInlineElements.test(el.nodeName.toLowerCase()); + }, + + /* + * This function gets called when some inline element button was pressed. + */ + onButtonPress : function (editor, id) { + // Could be a button or its hotkey + var buttonId = this.translateHotKey(id); + buttonId = buttonId ? buttonId : id; + var obj = editor._toolbarObjects[buttonId]; + var element = this.convertBtn[buttonId]; + if (element) { + this.applyInlineElement(editor, element); + return false; + } else { + this.appendToLog("onButtonPress", "No element corresponding to button: " + buttonId); + } + }, + + /* + * This function gets called when some inline element was selected in the drop-down list + */ + onChange : function (editor, buttonId) { + var tbobj = editor._toolbarObjects[buttonId]; + var element = document.getElementById(tbobj.elementId).value; + this.applyInlineElement(editor, element, false); + }, + + /* + * This function applies to the selection the markup chosen in the drop-down list or corresponding to the button pressed + */ + applyInlineElement : function (editor, element) { + editor.focusEditor(); + var selection = editor._getSelection(); + var range = editor._createRange(selection); + var parent = editor.getParentElement(selection, range); + var ancestors = editor.getAllAncestors(); + var elementIsAncestor = false; + var selectionEmpty = editor._selectionEmpty(selection); + if (HTMLArea.is_ie) { + var bookmark = range.getBookmark(); + } + // Check if the chosen element is among the ancestors + for (var i = 0; i < ancestors.length; ++i) { + if ((ancestors[i].nodeType == 1) && (ancestors[i].nodeName.toLowerCase() == element)) { + elementIsAncestor = true; + var elementAncestorIndex = i; + break; + } + } + if (!selectionEmpty) { + // The selection is not empty. + for (var i = 0; i < ancestors.length; ++i) { + fullNodeSelected = (HTMLArea.is_ie && ((editor._statusBarTree.selected === ancestors[i] && ancestors[i].innerText === range.text) || (!editor._statusBarTree.selected && ancestors[i].innerText === range.text))) + || (HTMLArea.is_gecko && ((editor._statusBarTree.selected === ancestors[i] && ancestors[i].textContent === range.toString()) || (!editor._statusBarTree.selected && ancestors[i].textContent === range.toString()))); + if (fullNodeSelected) { + if (!HTMLArea.isBlockElement(ancestors[i])) { + parent = ancestors[i]; + } + break; + } + } + // Working around bug in Safari selectNodeContents + if (!fullNodeSelected && HTMLArea.is_safari && this.editor._statusBarTree.selected && this.isInlineElement(this.editor._statusBarTree.selected) && this.editor._statusBarTree.selected.textContent === range.toString()) { + fullNodeSelected = true; + parent = this.editor._statusBarTree.selected; + } + + var fullNodeTextSelected = (HTMLArea.is_gecko && parent.textContent === range.toString()) + || (HTMLArea.is_ie && parent.innerText === range.text); + if (fullNodeTextSelected && elementIsAncestor) { + fullNodeSelected = true; + } + if (element !== "none" && !(fullNodeSelected && elementIsAncestor)) { + // Add markup + if (HTMLArea.is_gecko) { + if (fullNodeSelected && editor._statusBarTree.selected) { + if (HTMLArea.is_safari) { + this.editor.selectNode(parent); + range = this.editor._createRange(this.editor._getSelection()); + } else { + range.selectNode(parent); + } + } + var newElement = this.editor._doc.createElement(element); + if (element === "bdo") { + newElement.setAttribute("dir", "rtl"); + } + // Sometimes Opera 9.25 raises a bad boundary points error + if (HTMLArea.is_opera) { + try { + range.surroundContents(newElement); + } catch(e) { + newElement.appendChild(range.extractContents()); + range.insertNode(newElement); + } + } else { + range.surroundContents(newElement); + } + // Sometimes Firefox inserts empty elements just outside the boundaries of the range + var neighbour = newElement.previousSibling; + if (neighbour && (neighbour.nodeType != 3) && !/\S/.test(neighbour.textContent)) { + HTMLArea.removeFromParent(neighbour); + } + neighbour = newElement.nextSibling; + if (neighbour && (neighbour.nodeType != 3) && !/\S/.test(neighbour.textContent)) { + HTMLArea.removeFromParent(neighbour); + } + if (fullNodeSelected && editor._statusBarTree.selected && !HTMLArea.is_safari) { + this.editor.selectNodeContents(newElement.lastChild, false); + } else { + this.editor.selectNodeContents(newElement, false); + } + range.detach(); + } else { + var tagopen = "<" + element + ">"; + var tagclose = ""; + if (fullNodeSelected) { + if (!editor._statusBarTree.selected) { + parent.innerHTML = tagopen + parent.innerHTML + tagclose; + if (element === "bdo") { + parent.firstChild.setAttribute("dir", "rtl"); + } + editor.selectNodeContents(parent, false); + } else { + var content = parent.outerHTML; + var newElement = this.remapMarkup(parent, element); + newElement.innerHTML = content; + editor.selectNodeContents(newElement, false); + } + } else { + var rangeStart = range.duplicate(); + rangeStart.collapse(true); + var parentStart = rangeStart.parentElement(); + var rangeEnd = range.duplicate(); + rangeEnd.collapse(true); + var newRange = editor._createRange(); + + var parentEnd = rangeEnd.parentElement(); + var upperParentStart = parentStart; + if (parentStart !== parent) { + while (upperParentStart.parentNode !== parent) { + upperParentStart = upperParentStart.parentNode; + } + } + + var newElement = editor._doc.createElement(element); + newElement.innerHTML = range.htmlText; + // IE eats spaces on the start boundary + if (range.htmlText.charAt(0) === "\x20") { + newElement.innerHTML = " " + newElement.innerHTML; + } + var newElementClone = newElement.cloneNode(true); + range.pasteHTML(newElement.outerHTML); + // IE inserts the element as the last child of the start container + if (parentStart !== parent + && parentStart.lastChild + && parentStart.lastChild.nodeType === 1 + && parentStart.lastChild.nodeName.toLowerCase() === element) { + parent.insertBefore(newElementClone, upperParentStart.nextSibling); + parentStart.removeChild(parentStart.lastChild); + // Sometimes an empty previous sibling was created + if (newElementClone.previousSibling + && newElementClone.previousSibling.nodeType === 1 + && !newElementClone.previousSibling.innerText) { + parent.removeChild(newElementClone.previousSibling); + } + // The bookmark will not work anymore + newRange.moveToElementText(newElementClone); + newRange.collapse(false); + newRange.select(); + } else { + // Working around IE boookmark bug + if (parentStart != parentEnd) { + var newRange = editor._createRange(); + if (newRange.moveToBookmark(bookmark)) { + newRange.collapse(false); + newRange.select(); + } + } else { + range.collapse(false); + } + } + parent.normalize(); + } + } + } else { + // A complete node is selected: remove the markup + if (fullNodeSelected) { + if (elementIsAncestor) { + parent = ancestors[elementAncestorIndex]; + } + this.removeMarkup(parent); + } + } + } else { + // Remove or remap markup when the selection is collapsed + if (parent && !HTMLArea.isBlockElement(parent)) { + if ((element === "none") || elementIsAncestor) { + if (elementIsAncestor) { + parent = ancestors[elementAncestorIndex]; + } + this.removeMarkup(parent); + } else { + var bookmark = this.editor.getBookmark(range); + var newElement = this.remapMarkup(parent, element); + this.editor.selectRange(this.editor.moveToBookmark(bookmark)); + } + } + } + }, + + /* + * This function remaps the given element to the specified tagname + */ + remapMarkup : function(element, tagName) { + var attributeValue; + var newElement = this.editor.convertNode(element, tagName); + if (tagName === "bdo") { + newElement.setAttribute("dir", "ltr"); + } + for (var i = 0; i < this.allowedAttributes.length; ++i) { + if (attributeValue = element.getAttribute(this.allowedAttributes[i])) { + newElement.setAttribute(this.allowedAttributes[i], attributeValue); + } + } + + if (this.tags && this.tags[tagName] && this.tags[tagName].allowedClasses) { + if (newElement.className && /\S/.test(newElement.className)) { + var allowedClasses = new RegExp( "^(" + this.tags[tagName].allowedClasses.trim().split(",").join("|") + ")$"); + classNames = newElement.className.trim().split(" "); + for (var i = 0; i < classNames.length; ++i) { + if (!allowedClasses.test(classNames[i])) { + HTMLArea._removeClass(newElement, classNames[i]); + } + } + } + } + return newElement; + }, + + /* + * This function removes the given markup element + */ + removeMarkup : function(element) { + var bookmark = this.editor.getBookmark(this.editor._createRange(this.editor._getSelection())); + var parent = element.parentNode; + while (element.firstChild) { + parent.insertBefore(element.firstChild, element); + } + parent.removeChild(element); + this.editor.selectRange(this.editor.moveToBookmark(bookmark)); + }, + + /* + * This function gets called when the toolbar is updated + */ + onUpdateToolbar : function () { + var editor = this.editor; + if (editor._editMode !== "textmode") { + var id, activeButton; + var tagName = false, endPointsInSameBlock = true, fullNodeSelected = false; + var sel = editor._getSelection(); + var range = editor._createRange(sel); + var parent = editor.getParentElement(sel); + if (parent && !HTMLArea.isBlockElement(parent)) { + tagName = parent.nodeName.toLowerCase(); + } + var selectionEmpty = editor._selectionEmpty(sel); + if (!selectionEmpty) { + var ancestors = editor.getAllAncestors(); + for (var i = 0; i < ancestors.length; ++i) { + fullNodeSelected = (editor._statusBarTree.selected === ancestors[i]) + && ((HTMLArea.is_gecko && ancestors[i].textContent === range.toString()) || (HTMLArea.is_ie && ancestors[i].innerText === range.text)); + if (fullNodeSelected) { + if (!HTMLArea.isBlockElement(ancestors[i])) { + tagName = ancestors[i].nodeName.toLowerCase(); + } + break; + } + } + // Working around bug in Safari selectNodeContents + if (!fullNodeSelected && HTMLArea.is_safari && this.editor._statusBarTree.selected && this.isInlineElement(this.editor._statusBarTree.selected) && this.editor._statusBarTree.selected.textContent === range.toString()) { + fullNodeSelected = true; + tagName = this.editor._statusBarTree.selected.nodeName.toLowerCase(); + } + } + var selectionInInlineElement = tagName && this.REInlineElements.test(tagName); + var disabled = !this.endPointsInSameBlock() || (fullNodeSelected && !tagName) || (selectionEmpty && !selectionInInlineElement); + + var obj = editor.config.customSelects["FormatText"]; + if ((typeof(obj) !== "undefined") && (typeof(editor._toolbarObjects[obj.id]) !== "undefined")) { + this.updateValue(editor, obj, tagName, selectionEmpty, fullNodeSelected, disabled); + } + + var ancestors = editor.getAllAncestors(); + var bl = this.buttonList; + for (var i = 0; i < bl.length; ++i) { + var btn = bl[i]; + id = btn[0]; + var obj = editor._toolbarObjects[id]; + if ((typeof(obj) !== "undefined")) { + activeButton = false; + for (var j = ancestors.length; --j >= 0;) { + var el = ancestors[j]; + if (!el) { continue; } + if (this.convertBtn[id] === el.nodeName.toLowerCase()) { + activeButton = true; + } + } + obj.state("active", activeButton); + obj.state("enabled", !disabled); + } + } + } + }, + + /* + * This function determines if the end poins of the current selection are within the same block + */ + endPointsInSameBlock : function() { + var selection = this.editor._getSelection(); + if (this.editor._selectionEmpty(selection)) { + return true; + } else { + var parent = this.editor.getParentElement(selection); + var endBlocks = this.editor.getEndBlocks(selection); + return (endBlocks.start === endBlocks.end && !/^(body|table|thead|tbody|tfoot|tr)$/i.test(parent.nodeName)); + } + }, + + /* + * This function updates the drop-down list of inline elemenents + */ + updateValue : function (editor, obj, tagName, selectionEmpty, fullNodeSelected, disabled) { + var select = document.getElementById(editor._toolbarObjects[obj.id]["elementId"]); + var options = select.options; + for (var i = options.length; --i >= 0;) { + options[i].selected = false; + } + select.selectedIndex = 0; + options[0].selected = true; + select.options[0].text = this.localize("No markup"); + for (i = options.length; --i >= 0;) { + if (tagName === options[i].value) { + if (selectionEmpty || fullNodeSelected) { + options[i].selected = true; + select.selectedIndex = i; + select.options[0].text = this.localize("Remove markup"); + } + break; + } + } + + select.disabled = !(options.length>1) || disabled; + select.className = ""; + if (select.disabled) { + select.className = "buttonDisabled"; + } + } +}); + diff --git a/typo3/sysext/rtehtmlarea/htmlarea/plugins/InlineElements/locallang.xml b/typo3/sysext/rtehtmlarea/htmlarea/plugins/InlineElements/locallang.xml new file mode 100644 index 000000000000..0856febba497 --- /dev/null +++ b/typo3/sysext/rtehtmlarea/htmlarea/plugins/InlineElements/locallang.xml @@ -0,0 +1,46 @@ + + + + + Labels for Inline Elements plugin of htmlArea RTE + module + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/typo3/sysext/rtehtmlarea/htmlarea/plugins/TextStyle/locallang.xml b/typo3/sysext/rtehtmlarea/htmlarea/plugins/TextStyle/locallang.xml new file mode 100644 index 000000000000..3c041dbf7f5f --- /dev/null +++ b/typo3/sysext/rtehtmlarea/htmlarea/plugins/TextStyle/locallang.xml @@ -0,0 +1,26 @@ + + + + + Labels for Text Style plugin of htmlArea RTE + module + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/typo3/sysext/rtehtmlarea/htmlarea/plugins/TextStyle/text-style.js b/typo3/sysext/rtehtmlarea/htmlarea/plugins/TextStyle/text-style.js new file mode 100644 index 000000000000..26752ed5a8da --- /dev/null +++ b/typo3/sysext/rtehtmlarea/htmlarea/plugins/TextStyle/text-style.js @@ -0,0 +1,636 @@ +/*************************************************************** +* Copyright notice +* +* (c) 2007 Stanislas Rolland +* All rights reserved +* +* This script is part of the TYPO3 project. The TYPO3 project is +* free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* The GNU General Public License can be found at +* http://www.gnu.org/copyleft/gpl.html. +* A copy is found in the textfile GPL.txt and important notices to the license +* from the author is found in LICENSE.txt distributed with these scripts. +* +* +* This script is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* +* This copyright notice MUST APPEAR in all copies of the script! +***************************************************************/ +/* + * Text Style Plugin for TYPO3 htmlArea RTE + * + * TYPO3 SVN ID: $Id$ + */ +/* + * Creation of the class of TextStyle plugins + */ +TextStyle = HTMLArea.Plugin.extend({ + /* + * Let the base class do some initialization work + */ + constructor : function(editor, pluginName) { + this.base(editor, pluginName); + }, + + /* + * This function gets called by the class constructor + */ + configurePlugin : function (editor) { + + this.cssLoaded = false; + this.cssTimeout = null; + this.cssParseCount = 0; + this.cssArray = new Object(); + + this.classesUrl = this.editorConfiguration.classesUrl; + this.pageTSconfiguration = this.editorConfiguration.buttons.textstyle; + this.tags = this.pageTSconfiguration.tags; + if (!this.tags) { + this.tags = new Object(); + } + if (typeof(this.editorConfiguration.classesTag) !== "undefined") { + if (this.editorConfiguration.classesTag.span) { + if (!this.tags.span) { + this.tags.span = new Object(); + } + if (!this.tags.span.allowedClasses) { + this.tags.span.allowedClasses = this.editorConfiguration.classesTag.span; + } + } + } + this.showTagFreeClasses = this.pageTSconfiguration.showTagFreeClasses || this.editorConfiguration.showTagFreeClasses; + this.prefixLabelWithClassName = this.pageTSconfiguration.prefixLabelWithClassName; + this.postfixLabelWithClassName = this.pageTSconfiguration.postfixLabelWithClassName; + + /* + * Regular expression to check if an element is an inline elment + */ + this.REInlineTags = /^(abbr|acronym|b|bdo|big|cite|code|del|dfn|em|i|ins|kbd|q|samp|small|span|strike|strong|sub|sup|tt|u|var)$/; + + /* + * Registering plugin "About" information + */ + var pluginInformation = { + version : "1.0", + developer : "Stanislas Rolland", + developerUrl : "http://www.fructifor.ca/", + copyrightOwner : "Stanislas Rolland", + sponsor : this.localize("Technische Universitat Ilmenau"), + sponsorUrl : "http://www.tu-ilmenau.de/", + license : "GPL" + }; + this.registerPluginInformation(pluginInformation); + + /* + * Registering the dropdown list + */ + var buttonId = "TextStyle"; + var dropDownConfiguration = { + id : buttonId, + tooltip : this.localize(buttonId + "-Tooltip"), + textMode : false, + options : {"":""}, + action : "onChange", + refresh : "generate", + context : null + }; + this.registerDropDown(dropDownConfiguration); + + return true; + }, + + isInlineElement : function (el) { + return el && (el.nodeType === 1) && this.REInlineTags.test(el.nodeName.toLowerCase()); + }, + + /* + * This function gets called when some style in the drop-down list applies it to the highlighted textt + */ + onChange : function (editor, buttonId) { + var select = document.getElementById(this.editor._toolbarObjects[buttonId].elementId); + var className = select.value; + var classNames = null; + var fullNodeSelected = false; + + this.editor.focusEditor(); + var selection = this.editor._getSelection(); + var range = this.editor._createRange(selection); + var parent = this.editor.getParentElement(); + var selectionEmpty = this.editor._selectionEmpty(selection); + var ancestors = this.editor.getAllAncestors(); + if (HTMLArea.is_ie) { + var bookmark = range.getBookmark(); + } + + if (!selectionEmpty) { + // The selection is not empty + for (var i = 0; i < ancestors.length; ++i) { + fullNodeSelected = (HTMLArea.is_ie && ((this.editor._statusBarTree.selected === ancestors[i] && ancestors[i].innerText === range.text) || (!this.editor._statusBarTree.selected && ancestors[i].innerText === range.text))) + || (HTMLArea.is_gecko && ((this.editor._statusBarTree.selected === ancestors[i] && ancestors[i].textContent === range.toString()) || (!this.editor._statusBarTree.selected && ancestors[i].textContent === range.toString()))); + if (fullNodeSelected) { + if (this.isInlineElement(ancestors[i])) { + parent = ancestors[i]; + } + break; + } + } + // Working around bug in Safari selectNodeContents + if (!fullNodeSelected && HTMLArea.is_safari && this.editor._statusBarTree.selected && this.isInlineElement(this.editor._statusBarTree.selected) && this.editor._statusBarTree.selected.textContent === range.toString()) { + fullNodeSelected = true; + parent = this.editor._statusBarTree.selected; + } + } + if (!selectionEmpty && !fullNodeSelected) { + // The selection is not empty, nor full element + if (className !== "none") { + // Add span element with class attribute + if (HTMLArea.is_gecko) { + var newElement = this.editor._doc.createElement("span"); + HTMLArea._addClass(newElement, className); + range.surroundContents(newElement); + newElement.normalize(); + parent.normalize(); + // Firefox sometimes inserts empty elements just outside the boundaries of the range + var neighbour = newElement.previousSibling; + if (neighbour && (neighbour.nodeType != 3) && !/\S/.test(neighbour.textContent)) { + HTMLArea.removeFromParent(neighbour); + } + neighbour = newElement.nextSibling; + if (neighbour && (neighbour.nodeType != 3) && !/\S/.test(neighbour.textContent)) { + HTMLArea.removeFromParent(neighbour); + } + this.editor.selectNodeContents(newElement, false); + range.detach(); + } else { + var rangeStart = range.duplicate(); + rangeStart.collapse(true); + var parentStart = rangeStart.parentElement(); + var rangeEnd = range.duplicate(); + rangeEnd.collapse(true); + var parentEnd = rangeEnd.parentElement(); + var newRange = editor._createRange(); + + var upperParentStart = parentStart; + if (parentStart !== parent) { + while (upperParentStart.parentNode !== parent) { + upperParentStart = upperParentStart.parentNode; + } + } + + var newElement = editor._doc.createElement("span"); + HTMLArea._addClass(newElement, className); + newElement.innerHTML = range.htmlText; + // IE eats spaces on the start boundary + if (range.htmlText.charAt(0) === "\x20") { + newElement.innerHTML = " " + newElement.innerHTML; + } + var newElementClone = newElement.cloneNode(true); + range.pasteHTML(newElement.outerHTML); + // IE inserts the element as the last child of the start container + if (parentStart !== parent + && parentStart.lastChild + && parentStart.lastChild.nodeType === 1 + && parentStart.lastChild.nodeName.toLowerCase() === "span") { + parent.insertBefore(newElementClone, upperParentStart.nextSibling); + parentStart.removeChild(parentStart.lastChild); + // Sometimes an empty previous sibling was created + if (newElementClone.previousSibling + && newElementClone.previousSibling.nodeType === 1 + && !newElementClone.previousSibling.innerText) { + parent.removeChild(newElementClone.previousSibling); + } + // The bookmark will not work anymore + newRange.moveToElementText(newElementClone); + newRange.collapse(false); + newRange.select(); + } else { + // Working around IE boookmark bug + if (parentStart != parentEnd) { + var newRange = editor._createRange(); + if (newRange.moveToBookmark(bookmark)) { + newRange.collapse(false); + newRange.select(); + } + } else { + range.collapse(false); + } + } + parent.normalize(); + } + } + } else { + // Add or remove class + if (parent && !HTMLArea.isBlockElement(parent)) { + if (className === "none" && parent.className && /\S/.test(parent.className)) { + classNames = parent.className.trim().split(" "); + HTMLArea._removeClass(parent, classNames[classNames.length-1]); + } + if (className !== "none") { + HTMLArea._addClass(parent, className); + } + // Remove the span tag if it has no more attribute + if ((parent.nodeName.toLowerCase() === "span") && !this.hasAllowedAttributes(parent)) { + this.removeMarkup(parent); + } + } + } + }, + + /* + * This function verifies if the element has any of the allowed attributes + */ + hasAllowedAttributes : function(element) { + var allowedAttributes = new Array("id", "title", "lang", "xml:lang", "dir", "class", "className"); + for (var i = 0; i < allowedAttributes.length; ++i) { + if (element.getAttribute(allowedAttributes[i])) { + return true; + } + } + return false; + }, + + /* + * This function removes the given markup element + */ + removeMarkup : function(element) { + var bookmark = this.editor.getBookmark(this.editor._createRange(this.editor._getSelection())); + var parent = element.parentNode; + while (element.firstChild) { + parent.insertBefore(element.firstChild, element); + } + parent.removeChild(element); + this.editor.selectRange(this.editor.moveToBookmark(bookmark)); + }, + + /* + * This function gets called when the plugin is generated + * Get the classes configuration and initiate the parsing of the style sheets + */ + onGenerate : function() { + this.generate(this.editor, "TextStyle"); + }, + + /* + * This function gets called on plugin generation, on toolbar update and on change mode + * Re-initiate the parsing of the style sheets, if not yet completed, and refresh our toolbar components + */ + generate : function(editor, dropDownId) { + if (this.cssLoaded) { + this.updateToolbar(dropDownId); + } else { + if (this.cssTimeout) { + if (editor._iframe.contentWindow) { + editor._iframe.contentWindow.clearTimeout(this.cssTimeout); + } else { + window.clearTimeout(this.cssTimeout); + } + this.cssTimeout = null; + } + if (this.classesUrl && (typeof(HTMLArea.classesLabels) === "undefined")) { + this.getJavascriptFile(this.classesUrl); + } + this.buildCssArray(editor, dropDownId); + } + }, + + buildCssArray : function(editor, dropDownId) { + this.cssArray = this.parseStyleSheet(); + if (!this.cssLoaded && (this.cssParseCount < 17)) { + var buildCssArrayLaterFunctRef = this.makeFunctionReference("buildCssArray"); + this.cssTimeout = editor._iframe.contentWindow ? editor._iframe.contentWindow.setTimeout(buildCssArrayLaterFunctRef, 200) : window.setTimeout(buildCssArrayLaterFunctRef, 200); + this.cssParseCount++; + } else { + this.cssTimeout = null; + this.cssLoaded = true; + this.cssArray = this.sortCssArray(this.cssArray); + this.updateToolbar(dropDownId); + } + }, + + parseStyleSheet : function() { + var iframe = this.editor._iframe.contentWindow ? this.editor._iframe.contentWindow.document : this.editor._iframe.contentDocument; + var newCssArray = new Object(); + this.cssLoaded = true; + for (var i = 0; i < iframe.styleSheets.length; i++) { + if (HTMLArea.is_gecko) { + try { + newCssArray = this.parseCssRule(iframe.styleSheets[i].cssRules, newCssArray); + } catch(e) { + this.cssLoaded = false; + } + } else { + try{ + // @import StyleSheets (IE) + if (iframe.styleSheets[i].imports) { + newCssArray = this.parseCssIEImport(iframe.styleSheets[i].imports, newCssArray); + } + if (iframe.styleSheets[i].rules) { + newCssArray = this.parseCssRule(iframe.styleSheets[i].rules, newCssArray); + } + } catch(e) { + this.cssLoaded = false; + } + } + } + return newCssArray; + }, + + parseCssIEImport : function(cssIEImport, cssArray) { + var newCssArray = new Object(); + newCssArray = cssArray; + for (var i=0; i < cssIEImport.length; i++) { + if (cssIEImport[i].imports) { + newCssArray = this.parseCssIEImport(cssIEImport[i].imports, newCssArray); + } + if (cssIEImport[i].rules) { + newCssArray = this.parseCssRule(cssIEImport[i].rules, newCssArray); + } + } + return newCssArray; + }, + + parseCssRule : function(cssRules, cssArray) { + var newCssArray = new Object(); + newCssArray = cssArray; + for (var rule = 0; rule < cssRules.length; rule++) { + // StyleRule + if (cssRules[rule].selectorText) { + newCssArray = this.parseSelectorText(cssRules[rule].selectorText, newCssArray); + } else { + // ImportRule (Mozilla) + if (cssRules[rule].styleSheet) { + newCssArray = this.parseCssRule(cssRules[rule].styleSheet.cssRules, newCssArray); + } + // MediaRule (Mozilla) + if (cssRules[rule].cssRules) { + newCssArray = this.parseCssRule(cssRules[rule].cssRules, newCssArray); + } + } + } + return newCssArray; + }, + + parseSelectorText : function(selectorText, cssArray) { + var cssElements = new Array(); + var cssElement = new Array(); + var tagName, className; + var newCssArray = new Object(); + newCssArray = cssArray; + if (selectorText.search(/:+/) == -1) { + // split equal Styles (Mozilla-specific) e.q. head, body {border:0px} + // for ie not relevant. returns allways one element + cssElements = selectorText.split(","); + for (var k = 0; k < cssElements.length; k++) { + cssElement = cssElements[k].split("."); + tagName = cssElement[0].toLowerCase().trim(); + if (!tagName) { + tagName = 'all'; + } + className = cssElement[1]; + if (!HTMLArea.reservedClassNames.test(className)) { + if (((tagName != "all") && (!this.tags || !this.tags[tagName])) + || ((tagName == "all") && (!this.tags || !this.tags[tagName]) && this.showTagFreeClasses) + || (this.tags && this.tags[tagName] && this.tags[tagName].allowedClasses.indexOf(className) != -1)) { + if (!newCssArray[tagName]) { + newCssArray[tagName] = new Object(); + } + if (className) { + cssName = className; + if (HTMLArea.classesLabels && HTMLArea.classesLabels[className]) { + cssName = this.prefixLabelWithClassName ? (className + " - " + HTMLArea.classesLabels[className]) : HTMLArea.classesLabels[className]; + cssName = this.postfixLabelWithClassName ? (cssName + " - " + className) : cssName; + } + } else { + className = 'none'; + cssName = this.localize("Element style"); + } + newCssArray[tagName][className] = cssName; + } + } + } + } + return newCssArray; + }, + + sortCssArray : function(cssArray) { + var newCssArray = new Object(); + for (var tagName in cssArray) { + if (cssArray.hasOwnProperty(tagName)) { + newCssArray[tagName] = new Object(); + var tagArrayKeys = new Array(); + for (var cssClass in cssArray[tagName]) { + if (cssArray[tagName].hasOwnProperty(cssClass)) { + tagArrayKeys.push(cssClass); + } + } + function compare(a, b) { + x = cssArray[tagName][a]; + y = cssArray[tagName][b]; + return ((x < y) ? -1 : ((x > y) ? 1 : 0)); + } + tagArrayKeys = tagArrayKeys.sort(compare); + for (var i = 0; i < tagArrayKeys.length; ++i) { + newCssArray[tagName][tagArrayKeys[i]] = cssArray[tagName][tagArrayKeys[i]]; + } + } + } + return newCssArray; + }, + + /* + * This function gets called when the toolbar is being updated + */ + onUpdateToolbar : function() { + if (this.editor._editMode !== "textmode") { + this.generate(this.editor, "TextStyle"); + } + }, + + /* + * This function gets called when the drop-down list needs to be refreshed + */ + updateToolbar : function(dropDownId) { + var editor = this.editor; + if (editor._editMode !== "textmode") { + var tagName = false, classNames = Array(), fullNodeSelected = false; + var selection = editor._getSelection(); + var range = editor._createRange(selection); + var parent = editor.getParentElement(selection); + var ancestors = editor.getAllAncestors(); + if (parent && !HTMLArea.isBlockElement(parent)) { + tagName = parent.nodeName.toLowerCase(); + if (parent.className && /\S/.test(parent.className)) { + classNames = parent.className.trim().split(" "); + } + } + var selectionEmpty = editor._selectionEmpty(selection); + if (!selectionEmpty) { + for (var i = 0; i < ancestors.length; ++i) { + fullNodeSelected = (editor._statusBarTree.selected === ancestors[i]) + && ((HTMLArea.is_gecko && ancestors[i].textContent === range.toString()) || (HTMLArea.is_ie && ancestors[i].innerText === range.text)); + if (fullNodeSelected) { + if (!HTMLArea.isBlockElement(ancestors[i])) { + tagName = ancestors[i].nodeName.toLowerCase(); + if (ancestors[i].className && /\S/.test(ancestors[i].className)) { + classNames = ancestors[i].className.trim().split(" "); + } + } + break; + } + } + // Working around bug in Safari selectNodeContents + if (!fullNodeSelected && HTMLArea.is_safari && this.editor._statusBarTree.selected && this.isInlineElement(this.editor._statusBarTree.selected) && this.editor._statusBarTree.selected.textContent === range.toString()) { + fullNodeSelected = true; + tagName = this.editor._statusBarTree.selected.nodeName.toLowerCase(); + if (this.editor._statusBarTree.selected.className && /\S/.test(this.editor._statusBarTree.selected.className)) { + classNames = this.editor._statusBarTree.selected.className.trim().split(" "); + } + } + } + var selectionInInlineElement = tagName && this.REInlineTags.test(tagName); + var disabled = !this.endPointsInSameBlock() || (fullNodeSelected && !tagName) || (selectionEmpty && !selectionInInlineElement); + if (!disabled && !tagName) { + tagName = "span"; + } + + this.updateValue(dropDownId, tagName, classNames, selectionEmpty, fullNodeSelected, disabled); + } + }, + + /* + * This function determines if the end poins of the current selection are within the same block + */ + endPointsInSameBlock : function() { + var selection = this.editor._getSelection(); + if (this.editor._selectionEmpty(selection)) { + return true; + } else { + var parent = this.editor.getParentElement(selection); + var endBlocks = this.editor.getEndBlocks(selection); + return (endBlocks.start === endBlocks.end && !/^(body|table|thead|tbody|tfoot|tr)$/i.test(parent.nodeName)); + } + }, + + updateValue : function(dropDownId, tagName, classNames, selectionEmpty, fullNodeSelected, disabled) { + var editor = this.editor; + var select = document.getElementById(editor._toolbarObjects[dropDownId]["elementId"]); + var cssArray = new Array(); + + while(select.options.length > 0) { + select.options[select.length-1] = null; + } + select.options[0] = new Option(this.localize("No style"),"none"); + if (this.REInlineTags.test(tagName)) { + // Get classes allowed for all tags + if (typeof(this.cssArray["all"]) !== "undefined") { + if (this.tags && this.tags[tagName]) { + var allowedClasses = this.tags[tagName].allowedClasses; + for (cssClass in this.cssArray["all"]) { + if (allowedClasses.indexOf(cssClass) !== -1) { + cssArray[cssClass] = this.cssArray["all"][cssClass]; + } + } + } else { + for (cssClass in this.cssArray["all"]) { + if (this.cssArray["all"].hasOwnProperty(cssClass)) { + cssArray[cssClass] = this.cssArray["all"][cssClass]; + } + } + } + } + // Merge classes allowed for tagName and sort the array + if (typeof(this.cssArray[tagName]) !== "undefined") { + if (this.tags && this.tags[tagName]) { + var allowedClasses = this.tags[tagName].allowedClasses; + for (var cssClass in this.cssArray[tagName]) { + if (allowedClasses.indexOf(cssClass) !== -1) { + cssArray[cssClass] = this.cssArray[tagName][cssClass]; + } + } + } else { + for (var cssClass in this.cssArray[tagName]) { + if (this.cssArray[tagName].hasOwnProperty(cssClass)) { + cssArray[cssClass] = this.cssArray[tagName][cssClass]; + } + } + } + var sortedCssArray = new Object(); + var cssArrayKeys = new Array(); + for (var cssClass in cssArray) { + if (cssArray.hasOwnProperty(cssClass)) { + cssArrayKeys.push(cssClass); + } + } + function compare(a, b) { + x = cssArray[a]; + y = cssArray[b]; + return ((x < y) ? -1 : ((x > y) ? 1 : 0)); + } + cssArrayKeys = cssArrayKeys.sort(compare); + for (var i = 0; i < cssArrayKeys.length; ++i) { + sortedCssArray[cssArrayKeys[i]] = cssArray[cssArrayKeys[i]]; + } + cssArray = sortedCssArray; + } + for (var cssClass in cssArray) { + if (cssArray.hasOwnProperty(cssClass) && cssArray[cssClass]) { + if (cssClass == "none") { + select.options[0] = new Option(cssArray[cssClass], cssClass); + } else { + select.options[select.options.length] = new Option(cssArray[cssClass], cssClass); + if (!editor.config.disablePCexamples && HTMLArea.classesValues && HTMLArea.classesValues[cssClass] && !HTMLArea.classesNoShow[cssClass]) { + select.options[select.options.length-1].setAttribute("style", HTMLArea.classesValues[cssClass]); + } + } + } + } + + select.selectedIndex = 0; + if (classNames.length && (selectionEmpty || fullNodeSelected)) { + for (i = select.options.length; --i >= 0;) { + if (classNames[classNames.length-1] == select.options[i].value) { + select.options[i].selected = true; + select.selectedIndex = i; + select.options[0].text = this.localize("Remove style"); + break; + } + } + if (select.selectedIndex == 0) { + select.options[select.options.length] = new Option(this.localize("Unknown style"), classNames[classNames.length-1]); + select.options[select.options.length-1].selected = true; + select.selectedIndex = select.options.length-1; + } + for (i = select.options.length; --i >= 0;) { + if (("," + classNames.join(",") + ",").indexOf("," + select.options[i].value + ",") !== -1) { + if (select.selectedIndex != i) { + select.options[i] = null; + } + } + } + } + } + select.disabled = !(select.options.length>1) || disabled; + select.className = ""; + if (select.disabled) { + select.className = "buttonDisabled"; + } + }, + + /* + * This function gets called when the editor has changed its mode to "wysiwyg" + */ + onMode : function(mode) { + if (mode === "wysiwyg") { + this.generate(this.editor, "TextStyle"); + } + } +}); + diff --git a/typo3/sysext/rtehtmlarea/res/proc/pageTSConfig.txt b/typo3/sysext/rtehtmlarea/res/proc/pageTSConfig.txt index 4880bdef0da9..a7c50fb2e8aa 100644 --- a/typo3/sysext/rtehtmlarea/res/proc/pageTSConfig.txt +++ b/typo3/sysext/rtehtmlarea/res/proc/pageTSConfig.txt @@ -55,6 +55,9 @@ RTE.default.proc { ## This is a list of additional attributes to keep keepPDIVattribs = id, title, dir, lang, xml:lang + ## DO NOT REMAP BOLD AND ITALIC TO STRONG AND EMPHASIS AND VICE VERSA + transformBoldAndItalicTags = 0 + ## CONTENT TO DATABASE entryHTMLparser_db = 1 entryHTMLparser_db { @@ -100,10 +103,12 @@ RTE.default.proc { q.allowedAttribs = id, title, dir, lang, xml:lang, class samp.allowedAttribs = id, title, dir, lang, xml:lang, class small.allowedAttribs = id, title, dir, lang, xml:lang, class + strike.allowedAttribs = id, title, dir, lang, xml:lang, class strong.allowedAttribs = id, title, dir, lang, xml:lang, class sub.allowedAttribs = id, title, dir, lang, xml:lang, class sup.allowedAttribs = id, title, dir, lang, xml:lang, class tt.allowedAttribs = id, title, dir, lang, xml:lang, class + u.allowedAttribs = id, title, dir, lang, xml:lang, class var.allowedAttribs = id, title, dir, lang, xml:lang, class } @@ -128,12 +133,6 @@ RTE.default.proc { exitHTMLparser_db = 1 exitHTMLparser_db { - ## REMAP B AND I TAGS - ## b and i tags are used by Mozilla/Firefox in editing mode. - ## This must be done on exit because the default HTMLparser_db parsing executes the reverse mapping. - tags.b.remap = strong - tags.i.remap = em - ## KEEP ALL TAGS ## Unwanted tags were removed on entry. ## Without this rule, the parser will remove all tags! Presumably, this rule will be more efficient than repeating the allowTags rule -- 2.20.1