Index: typo3/sysext/rtehtmlarea/class.tx_rtehtmlarea_base.php =================================================================== --- typo3/sysext/rtehtmlarea/class.tx_rtehtmlarea_base.php (révision 9343) +++ typo3/sysext/rtehtmlarea/class.tx_rtehtmlarea_base.php (copie de travail) @@ -568,7 +568,7 @@ bar, left, center, right, justifyfull, bar, orderedlist, unorderedlist, definitionlist, definitionitem, outdent, indent, bar, lefttoright, righttoleft, language, showlanguagemarks, bar, textcolor, bgcolor, textindicator, - bar, emoticon, insertcharacter, link, unlink, image, table,' . (($this->thisConfig['hideTableOperationsInToolbar'] && is_array($this->thisConfig['buttons.']) && is_array($this->thisConfig['buttons.']['toggleborders.']) && $this->thisConfig['buttons.']['toggleborders.']['keepInToolbar']) ? ' toggleborders,': '') . ' user, acronym, bar, findreplace, spellcheck, + bar, editelement, emoticon, insertcharacter, link, unlink, image, table,' . (($this->thisConfig['hideTableOperationsInToolbar'] && is_array($this->thisConfig['buttons.']) && is_array($this->thisConfig['buttons.']['toggleborders.']) && $this->thisConfig['buttons.']['toggleborders.']['keepInToolbar']) ? ' toggleborders,': '') . ' user, acronym, bar, findreplace, spellcheck, bar, chMode, inserttag, removeformat, bar, copy, cut, paste, pastetoggle, pastebehaviour, bar, undo, redo, bar, showhelp, about, linebreak, ' . ($this->thisConfig['hideTableOperationsInToolbar'] ? '': 'bar, toggleborders,') . ' bar, tableproperties, tablerestyle, bar, rowproperties, rowinsertabove, rowinsertunder, rowdelete, rowsplit, bar, columnproperties, columninsertbefore, columninsertafter, columndelete, columnsplit, bar, Index: typo3/sysext/rtehtmlarea/ext_localconf.php =================================================================== --- typo3/sysext/rtehtmlarea/ext_localconf.php (révision 9345) +++ typo3/sysext/rtehtmlarea/ext_localconf.php (copie de travail) @@ -104,6 +104,11 @@ // Editor Mode configuration $TYPO3_CONF_VARS['EXTCONF'][$_EXTKEY]['plugins']['EditorMode'] = array(); $TYPO3_CONF_VARS['EXTCONF'][$_EXTKEY]['plugins']['EditorMode']['objectReference'] = 'EXT:'.$_EXTKEY.'/extensions/EditorMode/class.tx_rtehtmlarea_editormode.php:&tx_rtehtmlarea_editormode'; + // General Element configuration +$TYPO3_CONF_VARS['EXTCONF'][$_EXTKEY]['plugins']['EditElement'] = array(); +$TYPO3_CONF_VARS['EXTCONF'][$_EXTKEY]['plugins']['EditElement']['objectReference'] = 'EXT:'.$_EXTKEY.'/extensions/EditElement/class.tx_rtehtmlarea_editelement.php:&tx_rtehtmlarea_editelement'; +$TYPO3_CONF_VARS['EXTCONF'][$_EXTKEY]['plugins']['EditElement']['addIconsToSkin'] = 0; +$TYPO3_CONF_VARS['EXTCONF'][$_EXTKEY]['plugins']['EditElement']['disableInFE'] = 0; // Inline Elements configuration $TYPO3_CONF_VARS['EXTCONF'][$_EXTKEY]['plugins']['DefaultInline'] = array(); $TYPO3_CONF_VARS['EXTCONF'][$_EXTKEY]['plugins']['DefaultInline']['objectReference'] = 'EXT:'.$_EXTKEY.'/extensions/DefaultInline/class.tx_rtehtmlarea_defaultinline.php:&tx_rtehtmlarea_defaultinline'; Index: typo3/sysext/rtehtmlarea/ext_tables.php =================================================================== --- typo3/sysext/rtehtmlarea/ext_tables.php (révision 9345) +++ typo3/sysext/rtehtmlarea/ext_tables.php (copie de travail) @@ -26,8 +26,10 @@ // Add contextual help files $htmlAreaRteContextHelpFiles = array( 'General' => 'EXT:' . $_EXTKEY . '/locallang_csh.xml', + 'EditElement' => 'EXT:' . $_EXTKEY . '/extensions/EditElement/locallang_csh.xml', + 'Language' => 'EXT:' . $_EXTKEY . '/extensions/Language/locallang_csh.xml', + 'PlainText' => 'EXT:' . $_EXTKEY . '/extensions/PlainText/locallang_csh.xml', 'RemoveFormat' => 'EXT:' . $_EXTKEY . '/extensions/RemoveFormat/locallang_csh.xml', - 'PlainText' => 'EXT:' . $_EXTKEY . '/extensions/PlainText/locallang_csh.xml', ); foreach ($htmlAreaRteContextHelpFiles as $key => $file) { t3lib_extMgm::addLLrefForTCAdescr('xEXT_' . $_EXTKEY . '_' . $key, $file); Index: typo3/sysext/rtehtmlarea/extensions/EditElement/class.tx_rtehtmlarea_editelement.php =================================================================== --- typo3/sysext/rtehtmlarea/extensions/EditElement/class.tx_rtehtmlarea_editelement.php (révision 0) +++ typo3/sysext/rtehtmlarea/extensions/EditElement/class.tx_rtehtmlarea_editelement.php (révision 0) @@ -0,0 +1,69 @@ + +* 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! +***************************************************************/ +/** + * Edit Element extension for htmlArea RTE + * + * @author Stanislas Rolland + * + * TYPO3 SVN ID: $Id: class.tx_rtehtmlarea_editelement.php $ + * + */ +class tx_rtehtmlarea_editelement extends tx_rtehtmlarea_api { + + protected $extensionKey = 'rtehtmlarea'; // The key of the extension that is extending htmlArea RTE + protected $pluginName = 'EditElement'; // The name of the plugin registered by the extension + protected $relativePathToLocallangFile = ''; // Path to this main locallang file of the extension relative to the extension dir. + protected $relativePathToSkin = 'extensions/EditElement/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 + // The comma-separated list of names of prerequisite plugins + protected $requiredPlugins = 'BlockStyle,TextStyle,Language'; + protected $pluginButtons = 'editelement'; + protected $convertToolbarForHtmlAreaArray = array ( + 'editelement' => 'EditElement', + ); + protected $acronymIndex = 0; + protected $abbreviationIndex = 0; + /** + * 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) { + $registerRTEinJavascriptString = ''; + return $registerRTEinJavascriptString; + } +} +if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/EditElement/class.tx_rtehtmlarea_editelement.php']) { + include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/EditElement/class.tx_rtehtmlarea_editelement.php']); +} +?> \ No newline at end of file Index: typo3/sysext/rtehtmlarea/extensions/EditElement/locallang_csh.xml =================================================================== --- typo3/sysext/rtehtmlarea/extensions/EditElement/locallang_csh.xml (révision 0) +++ typo3/sysext/rtehtmlarea/extensions/EditElement/locallang_csh.xml (révision 0) @@ -0,0 +1,53 @@ + + + + CSH for Edit Element Extension of htmlArea RTE + CSH + xEXT_rtehtmlarea_EditElement + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: typo3/sysext/rtehtmlarea/extensions/EditElement/skin/htmlarea.css =================================================================== --- typo3/sysext/rtehtmlarea/extensions/EditElement/skin/htmlarea.css (révision 0) +++ typo3/sysext/rtehtmlarea/extensions/EditElement/skin/htmlarea.css (révision 0) @@ -0,0 +1,6 @@ +/* Selectors for the Edit Element extension of htmlArea RTE */ +/* TYPO3 SVN ID: $Id: htmlarea.css $ */ +.htmlarea-action-element-edit { + background-image: url('images/element-edit.png') !important; + background-position: 0 0 !important; +} Index: typo3/sysext/rtehtmlarea/extensions/EditElement/skin/images/element-edit.png =================================================================== Impossible d'afficher : fichier considéré comme binaire. svn:mime-type = application/octet-stream Modification de propriétés sur typo3\sysext\rtehtmlarea\extensions\EditElement\skin\images\element-edit.png ___________________________________________________________________ Ajouté : svn:mime-type + application/octet-stream Index: typo3/sysext/rtehtmlarea/extensions/Language/locallang_csh.xml =================================================================== --- typo3/sysext/rtehtmlarea/extensions/Language/locallang_csh.xml (révision 0) +++ typo3/sysext/rtehtmlarea/extensions/Language/locallang_csh.xml (révision 0) @@ -0,0 +1,41 @@ + + + + CSH for Language Extension of htmlArea RTE + CSH + xEXT_rtehtmlarea_Language + + + + + + + + + + + + + + + + + + Index: typo3/sysext/rtehtmlarea/htmlarea/locallang_dialogs.xml =================================================================== --- typo3/sysext/rtehtmlarea/htmlarea/locallang_dialogs.xml (révision 9343) +++ typo3/sysext/rtehtmlarea/htmlarea/locallang_dialogs.xml (copie de travail) @@ -1,13 +1,14 @@ - Labels for dialogs of htmlArea RTE + Labels for dialogues of htmlArea RTE module + Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/EditElement/edit-element.js =================================================================== --- typo3/sysext/rtehtmlarea/htmlarea/plugins/EditElement/edit-element.js (révision 0) +++ typo3/sysext/rtehtmlarea/htmlarea/plugins/EditElement/edit-element.js (révision 0) @@ -0,0 +1,482 @@ +/*************************************************************** +* Copyright notice +* +* (c) 2010 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! +***************************************************************/ +/* + * EditElement plugin for htmlArea RTE + * + * TYPO3 SVN ID: $Id: acronym.js 8087 2010-07-04 20:18:10Z stan $ + */ +HTMLArea.EditElement = HTMLArea.Plugin.extend({ + constructor: function(editor, pluginName) { + this.base(editor, pluginName); + }, + /* + * This function gets called by the class constructor + */ + configurePlugin: function(editor) { + this.pageTSConfiguration = this.editorConfiguration.buttons.editelement; + this.removedFieldsets = (this.pageTSConfiguration && this.pageTSConfiguration.removeFieldsets) ? this.pageTSConfiguration.removeFieldsets : ''; + this.properties = (this.pageTSConfiguration && this.pageTSConfiguration.properties) ? this.pageTSConfiguration.properties : ''; + this.removedProperties = (this.properties && this.properties.removed) ? this.properties.removed : ''; + /* + * Registering plugin "About" information + */ + var pluginInformation = { + version : '1.0', + developer : 'Stanislas Rolland', + developerUrl : 'http://www.sjbr.ca/', + copyrightOwner : 'Stanislas Rolland', + sponsor : 'SJBR', + sponsorUrl : 'http://www.sjbr.ca/', + license : 'GPL' + }; + this.registerPluginInformation(pluginInformation); + /* + * Registering the button + */ + var buttonId = 'EditElement'; + var buttonConfiguration = { + id : buttonId, + tooltip : this.localize('editElement'), + action : 'onButtonPress', + dialog : true, + iconCls : 'htmlarea-action-element-edit' + }; + this.registerButton(buttonConfiguration); + return true; + }, + /* + * Sets of default configuration values for dialogue form fields + */ + configDefaults: { + combo: { + editable: true, + selectOnFocus: true, + typeAhead: true, + triggerAction: 'all', + forceSelection: true, + mode: 'local', + valueField: 'value', + displayField: 'text', + helpIcon: true, + tpl: '
{text}
' + } + }, + /* + * This function gets called when the button was pressed + * + * @param object editor: the editor instance + * @param string id: the button id or the key + * + * @return boolean false if action is completed + */ + onButtonPress: function(editor, id) { + // Could be a button or its hotkey + var buttonId = this.translateHotKey(id); + buttonId = buttonId ? buttonId : id; + // Get the parent element of the current selection + this.element = this.editor.getParentElement(); + if (this.element && !/^body$/i.test(this.element.nodeName)) { + // Open the dialogue window + this.openDialogue( + buttonId, + 'editElement', + this.getWindowDimensions( + { + width: 450 + }, + buttonId + ), + this.buildTabItemsConfig(this.element), + this.buildButtonsConfig(this.element, this.okHandler, this.deleteHandler) + ); + } + return false; + }, + /* + * Open the dialogue window + * + * @param string buttonId: the button id + * @param string title: the window title + * @param object dimensions: the opening dimensions of the window + * @param object tabItems: the configuration of the tabbed panel + * @param object buttonsConfig: the configuration of the buttons + * + * @return void + */ + openDialogue: function (buttonId, title, dimensions, tabItems, buttonsConfig) { + this.dialog = new Ext.Window({ + title: this.getHelpTip('', title), + cls: 'htmlarea-window', + border: false, + width: dimensions.width, + height: 'auto', + // As of ExtJS 3.1, JS error with IE when the window is resizable + resizable: !Ext.isIE, + iconCls: this.getButton(buttonId).iconCls, + listeners: { + render: { + fn: this.enableContextHelp + }, + close: { + fn: this.onClose, + scope: this + } + }, + items: { + xtype: 'tabpanel', + activeTab: 0, + defaults: { + xtype: 'container', + layout: 'form', + defaults: { + labelWidth: 150 + } + }, + listeners: { + tabchange: { + fn: this.syncHeight, + scope: this + } + }, + items: tabItems + }, + buttons: buttonsConfig + }); + this.show(); + }, + /* + * Build the dialogue tab items config + * + * @param object element: the element being edited, if any + * + * @return object the tab items configuration + */ + buildTabItemsConfig: function (element) { + var tabItems = []; + var generalTabItemConfig = []; + if (this.removedFieldsets.indexOf('identification') == -1) { + this.addConfigElement(this.buildIdentificationFieldsetConfig(element), generalTabItemConfig); + } + if (this.removedFieldsets.indexOf('style') == -1 && this.removedProperties.indexOf('className') == -1) { + this.addConfigElement(this.buildClassFieldsetConfig(element), generalTabItemConfig); + } + tabItems.push({ + title: this.localize('general'), + itemId: 'general', + items: generalTabItemConfig + }); + if (this.removedFieldsets.indexOf('language') == -1 && this.getPluginInstance('Language')) { + var languageTabItemConfig = []; + this.addConfigElement(this.buildLanguageFieldsetConfig(element), languageTabItemConfig); + tabItems.push({ + title: this.localize('Language'), + itemId: 'language', + items: languageTabItemConfig + }); + } + if (this.removedFieldsets.indexOf('events') == -1) { + var eventsTabItemConfig = []; + this.addConfigElement(this.buildEventsFieldsetConfig(element), eventsTabItemConfig); + tabItems.push({ + title: this.localize('events'), + itemId: 'events', + items: eventsTabItemConfig + }); + } + return tabItems; + }, + /* + * This function builds the configuration object for the Identification fieldset + * + * @param object element: the element being edited, if any + * + * @return object the fieldset configuration object + */ + buildIdentificationFieldsetConfig: function (element) { + var itemsConfig = []; + if (this.removedProperties.indexOf('id') == -1) { + itemsConfig.push({ + itemId: 'id', + fieldLabel: this.getHelpTip('id', 'id'), + value: element ? element.getAttribute('id') : '', + width: ((this.properties['id'] && this.properties['id'].width) ? this.properties['id'].width : 300) + }); + } + if (this.removedProperties.indexOf('title') == -1) { + itemsConfig.push({ + itemId: 'title', + fieldLabel: this.getHelpTip('title', 'title'), + value: element ? element.getAttribute('title') : '', + width: ((this.properties['title'] && this.properties['title'].width) ? this.properties['title'].width : 300) + }); + } + return { + xtype: 'fieldset', + title: this.localize('identification'), + defaultType: 'textfield', + labelWidth: 100, + defaults: { + labelSeparator: ':' + }, + items: itemsConfig + }; + }, + /* + * This function builds the configuration object for the CSS Class fieldset + * + * @param object element: the element being edited, if any + * + * @return object the fieldset configuration object + */ + buildClassFieldsetConfig: function (element) { + var itemsConfig = []; + var stylingCombo = this.buildStylingField('className', 'className', 'className'); + this.setStyleOptions(stylingCombo, element); + itemsConfig.push(stylingCombo); + return { + xtype: 'fieldset', + title: this.localize('className'), + labelWidth: 100, + defaults: { + labelSeparator: ':' + }, + items: itemsConfig + }; + }, + /* + * This function builds a style selection field + * + * @param string fieldName: the name of the field + * @param string fieldLabel: the label for the field + * @param string cshKey: the csh key + * + * @return object the style selection field object + */ + buildStylingField: function (fieldName, fieldLabel, cshKey) { + return new Ext.form.ComboBox(Ext.apply({ + xtype: 'combo', + itemId: fieldName, + fieldLabel: this.getHelpTip(fieldLabel, cshKey), + width: ((this.properties['className'] && this.properties['className'].width) ? this.properties['className'].width : 300), + store: new Ext.data.ArrayStore({ + autoDestroy: true, + fields: [ { name: 'text'}, { name: 'value'}, { name: 'style'} ], + data: [[this.localize('No style'), 'none']] + }) + }, { + tpl: '
{text}
' + }, this.configDefaults['combo'] + )); + }, + /* + * This function populates the class store and sets the selected option + * + * @param object: comboBox: the combobox object + * @param object element: the element being edited, if any + * + * @return object the fieldset configuration object + */ + setStyleOptions: function (comboBox, element) { + var nodeName = element.nodeName.toLowerCase(); + this.stylePlugin = this.getPluginInstance(HTMLArea.isBlockElement(element) ? 'BlockStyle' : 'TextStyle'); + if (comboBox && this.stylePlugin) { + var classNames = HTMLArea.DOM.getClassNames(element); + this.stylePlugin.buildDropDownOptions(comboBox, nodeName); + this.stylePlugin.setSelectedOption(comboBox, classNames, 'noUnknown'); + } + }, + /* + * This function builds the configuration object for the Language fieldset + * + * @param object element: the element being edited, if any + * + * @return object the fieldset configuration object + */ + buildLanguageFieldsetConfig: function (element) { + var itemsConfig = []; + var languagePlugin = this.getPluginInstance('Language'); + if (this.removedProperties.indexOf('language') == -1) { + var selectedLanguage = !Ext.isEmpty(element) ? languagePlugin.getLanguageAttribute(element) : 'none'; + function initLanguageStore (store) { + if (selectedLanguage !== 'none') { + store.removeAt(0); + store.insert(0, new store.recordType({ + text: languagePlugin.localize('Remove language mark'), + value: 'none' + })); + } + } + var languageStore = new Ext.data.JsonStore({ + autoDestroy: true, + autoLoad: true, + root: 'options', + fields: [ { name: 'text'}, { name: 'value'} ], + url: this.getDropDownConfiguration('Language').dataUrl, + listeners: { + load: initLanguageStore + } + }); + itemsConfig.push(Ext.apply({ + xtype: 'combo', + fieldLabel: languagePlugin.getHelpTip('languageCombo', 'Language'), + itemId: 'lang', + store: languageStore, + width: ((this.properties['language'] && this.properties['language'].width) ? this.properties['language'].width : 200), + value: selectedLanguage + }, this.configDefaults['combo'])); + } + if (this.removedProperties.indexOf('direction') == -1) { + itemsConfig.push(Ext.apply({ + xtype: 'combo', + fieldLabel: languagePlugin.getHelpTip('directionCombo', 'Text direction'), + itemId: 'dir', + store: new Ext.data.ArrayStore({ + autoDestroy: true, + fields: [ { name: 'text'}, { name: 'value'}], + data: [ + [languagePlugin.localize('Not set'), 'not set'], + [languagePlugin.localize('RightToLeft'), 'rtl'], + [languagePlugin.localize('LeftToRight'), 'ltr'] + ] + }), + width: ((this.properties['direction'] && this.properties['dirrection'].width) ? this.properties['direction'].width : 200), + value: !Ext.isEmpty(element) && element.dir ? element.dir : 'not set' + }, this.configDefaults['combo'])); + } + return { + xtype: 'fieldset', + title: this.localize('Language'), + labelWidth: 100, + defaults: { + labelSeparator: ':' + }, + items: itemsConfig + }; + }, + /* + * This function builds the configuration object for the Events fieldset + * + * @param object element: the element being edited, if any + * + * @return object the fieldset configuration object + */ + buildEventsFieldsetConfig: function (element) { + var itemsConfig = []; + var events = ['onkeydown', 'onkeypress', 'onkeyup', 'onclick', 'ondblclick', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup']; + if (!/^(base|bdo|br|frame|frameset|head|html|iframe|meta|param|script|style|title)$/i.test(element.nodeName)) { + Ext.each(events, function (event) { + if (this.removedProperties.indexOf(event) == -1) { + itemsConfig.push({ + itemId: event, + fieldLabel: this.getHelpTip(event, event), + value: element ? element.getAttribute(event) : '' + }); + } + }, this); + } + return itemsConfig.length ? { + xtype: 'fieldset', + title: this.getHelpTip('events', 'events'), + defaultType: 'textfield', + labelWidth: 100, + defaults: { + labelSeparator: ':', + width: ((this.properties['event'] && this.properties['event'].width) ? this.properties['event'].width : 300) + }, + items: itemsConfig + } : null; + }, + /* + * Build the dialogue buttons config + * + * @param object element: the element being edited, if any + * @param function okHandler: the handler for the ok button + * @param function deleteHandler: the handler for the delete button + * + * @return object the buttons configuration + */ + buildButtonsConfig: function (element, okHandler, deleteHandler) { + var buttonsConfig = [this.buildButtonConfig('OK', okHandler)]; + if (element) { + buttonsConfig.push(this.buildButtonConfig('Delete', deleteHandler)); + } + buttonsConfig.push(this.buildButtonConfig('Cancel', this.onCancel)); + return buttonsConfig; + }, + /* + * Handler when the ok button is pressed + */ + okHandler: function (button, event) { + this.restoreSelection(); + var textFields = this.dialog.findByType('textfield'); + Ext.each(textFields, function (field) { + this.element.setAttribute(field.getItemId(), field.getValue()); + }, this); + var comboFields = this.dialog.findByType('combo'); + Ext.each(comboFields, function (field) { + var itemId = field.getItemId(); + var value = field.getValue(); + switch (itemId) { + case 'className': + this.stylePlugin.applyClassChange(this.element, value); + break; + case 'lang': + this.getPluginInstance('Language').setLanguageAttributes(this.element, value); + break; + case 'dir': + this.element.setAttribute(itemId, (value == 'not set') ? '' : value); + break; + } + }, this); + this.close(); + event.stopEvent(); + }, + /* + * Handler when the delete button is pressed + */ + deleteHandler: function (button, event) { + this.restoreSelection(); + if (this.element) { + // Delete the element + HTMLArea.removeFromParent(this.element); + } + this.close(); + event.stopEvent(); + }, + /* + * This function gets called when the toolbar is updated + */ + onUpdateToolbar: function (button, mode, selectionEmpty, ancestors) { + if ((mode === 'wysiwyg') && this.editor.isEditable()) { + // Disable the button if the first ancestor is the document body + button.setDisabled(!ancestors.length || /^body$/i.test(ancestors[0].nodeName)); + if (this.dialog) { + this.dialog.focus(); + } + } + } +}); Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/EditElement/locallang.xml =================================================================== --- typo3/sysext/rtehtmlarea/htmlarea/plugins/EditElement/locallang.xml (révision 0) +++ typo3/sysext/rtehtmlarea/htmlarea/plugins/EditElement/locallang.xml (révision 0) @@ -0,0 +1,29 @@ + + + + + Labels for Edit Element plugin of htmlArea RTE + module + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/TextStyle/text-style.js =================================================================== --- typo3/sysext/rtehtmlarea/htmlarea/plugins/TextStyle/text-style.js (révision 9343) +++ typo3/sysext/rtehtmlarea/htmlarea/plugins/TextStyle/text-style.js (copie de travail) @@ -81,7 +81,7 @@ /* * 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)$/; + this.REInlineTags = /^(a|abbr|acronym|b|bdo|big|cite|code|del|dfn|em|i|img|ins|kbd|q|samp|small|span|strike|strong|sub|sup|tt|u|var)$/; // Allowed attributes on inline elements this.allowedAttributes = new Array("id", "title", "lang", "xml:lang", "dir", "class"); @@ -92,7 +92,7 @@ * Registering plugin "About" information */ var pluginInformation = { - version : '2.0', + version : '2.1', developer : 'Stanislas Rolland', developerUrl : 'http://www.sjbr.ca/', copyrightOwner : 'Stanislas Rolland', @@ -193,20 +193,26 @@ } } } 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.DOM.removeClass(parent, classNames[classNames.length-1]); - } - if (className !== "none") { - HTMLArea.DOM.addClass(parent, className); - } - // Remove the span tag if it has no more attribute - if ((parent.nodeName.toLowerCase() === "span") && !HTMLArea.hasAllowedAttributes(parent, this.allowedAttributes)) { - editor.removeMarkup(parent); - } + this.applyClassChange(parent, className); + } + }, + /* + * This function applies the class change to the node + */ + applyClassChange: function (node, className) { + // Add or remove class + if (node && !HTMLArea.isBlockElement(node)) { + if (className === 'none' && node.className && /\S/.test(node.className)) { + classNames = node.className.trim().split(' '); + HTMLArea.DOM.removeClass(node, classNames[classNames.length-1]); } + if (className !== 'none') { + HTMLArea.DOM.addClass(node, className); + } + // Remove the span tag if it has no more attribute + if (/^span$/i.test(node.nodeName) && !HTMLArea.hasAllowedAttributes(node, this.allowedAttributes)) { + this.editor.removeMarkup(node); + } } }, /* @@ -323,34 +329,62 @@ dropDown.setValue('none'); }, /* + * This function builds the options to be displayed in the dropDown box + */ + buildDropDownOptions: function (dropDown, nodeName) { + var store = dropDown.getStore(); + this.initializeDropDown(dropDown); + if (this.textStyles.isReady) { + var allowedClasses = {}; + if (this.REInlineTags.test(nodeName)) { + if (Ext.isDefined(this.cssArray[nodeName])) { + allowedClasses = this.cssArray[nodeName]; + } else if (this.showTagFreeClasses && Ext.isDefined(this.cssArray['all'])) { + allowedClasses = this.cssArray['all']; + } + } + Ext.iterate(allowedClasses, function (cssClass, value) { + store.add(new store.recordType({ + text: value, + value: cssClass, + style: (!this.editor.config.disablePCexamples && HTMLArea.classesValues && HTMLArea.classesValues[cssClass] && !HTMLArea.classesNoShow[cssClass]) ? HTMLArea.classesValues[cssClass] : null + })); + }, this); + } + }, + /* * This function sets the selected option of the dropDown box */ setSelectedOption: function (dropDown, classNames, noUnknown, defaultClass) { var store = dropDown.getStore(); - var index = store.findExact('value', classNames[classNames.length-1]); - if (index != -1) { - dropDown.setValue(classNames[classNames.length-1]); - if (!defaultClass) { - store.getAt(0).set('text', this.localize('Remove style')); + dropDown.setValue('none'); + if (classNames.length) { + var index = store.findExact('value', classNames[classNames.length-1]); + if (index != -1) { + dropDown.setValue(classNames[classNames.length-1]); + if (!defaultClass) { + store.getAt(0).set('text', this.localize('Remove style')); + } } - } - if (index == -1 && !noUnknown) { - store.add(new store.recordType({ - text: this.localize('Unknown style'), - value: classNames[classNames.length-1] - })); - index = store.getCount()-1; - dropDown.setValue(classNames[classNames.length-1]); - if (!defaultClass) { - store.getAt(0).set('text', this.localize('Remove style')); + if (index == -1 && !noUnknown) { + store.add(new store.recordType({ + text: this.localize('Unknown style'), + value: classNames[classNames.length-1] + })); + index = store.getCount()-1; + dropDown.setValue(classNames[classNames.length-1]); + if (!defaultClass) { + store.getAt(0).set('text', this.localize('Remove style')); + } } + store.each(function (option) { + if (("," + classNames.join(",") + ",").indexOf("," + option.get('value') + ",") != -1 && store.indexOf(option) != index) { + store.removeAt(store.indexOf(option)); + } + return true; + }); } - store.each(function (option) { - if (("," + classNames.join(",") + ",").indexOf("," + option.get('value') + ",") != -1 && store.indexOf(option) != index) { - store.removeAt(store.indexOf(option)); - } - return true; - }); + dropDown.setDisabled(!(store.getCount()>1)); }, /* * This function updates the current value of the dropdown list @@ -359,25 +393,7 @@ var editor = this.editor; var dropDown = this.getButton(dropDownId); if (dropDown) { - var store = dropDown.getStore(); - this.initializeDropDown(dropDown); - if (this.textStyles.isReady) { - var allowedClasses = {}; - if (this.REInlineTags.test(nodeName)) { - if (Ext.isDefined(this.cssArray[nodeName])) { - allowedClasses = this.cssArray[nodeName]; - } else if (this.showTagFreeClasses && Ext.isDefined(this.cssArray['all'])) { - allowedClasses = this.cssArray['all']; - } - } - Ext.iterate(allowedClasses, function (cssClass, value) { - store.add(new store.recordType({ - text: value, - value: cssClass, - style: (!this.editor.config.disablePCexamples && HTMLArea.classesValues && HTMLArea.classesValues[cssClass] && !HTMLArea.classesNoShow[cssClass]) ? HTMLArea.classesValues[cssClass] : null - })); - }, this); - } + this.buildDropDownOptions(dropDown, nodeName); if (classNames.length && (selectionEmpty || fullNodeSelected)) { this.setSelectedOption(dropDown, classNames); } Index: typo3/sysext/rtehtmlarea/htmlarea/skins/default/htmlarea.css =================================================================== --- typo3/sysext/rtehtmlarea/htmlarea/skins/default/htmlarea.css (révision 9343) +++ typo3/sysext/rtehtmlarea/htmlarea/skins/default/htmlarea.css (copie de travail) @@ -468,55 +468,56 @@ .htmlarea-action-deleted-text{ background-position: 0 -1566px !important; } .htmlarea-action-editor-show-about{ background-position: 0 -1624px !important; } .htmlarea-action-editor-toggle-mode{ background-position: 0 -1682px !important; } -.htmlarea-action-emphasis{ background-position: 0 -1740px !important; } -.htmlarea-action-find-replace{ background-position: 0 -1798px !important; } -.htmlarea-action-horizontal-rule-insert{ background-position: 0 -1856px !important; } -.htmlarea-action-image-edit{ background-position: 0 -1914px !important; } -.htmlarea-action-indent{ background-position: 0 -1972px !important; } -.htmlarea-action-inserted-text{ background-position: 0 -2030px !important; } -.htmlarea-action-italic{ background-position: 0 -2088px !important; } -.htmlarea-action-justify-center{ background-position: 0 -2146px !important; } -.htmlarea-action-justify-full{ background-position: 0 -2204px !important; } -.htmlarea-action-justify-left{ background-position: 0 -2262px !important; } -.htmlarea-action-justify-right{ background-position: 0 -2320px !important; } -.htmlarea-action-keyboard{ background-position: 0 -2378px !important; } -.htmlarea-action-language-marks-show{ background-position: 0 -2436px !important; } -.htmlarea-action-link-edit{ background-position: 0 -2494px !important; } -.htmlarea-action-mono-spaced{ background-position: 0 -2552px !important; } -.htmlarea-action-ordered-list{ background-position: 0 -2610px !important; } -.htmlarea-action-outdent{ background-position: 0 -2668px !important; } -.htmlarea-action-paragraph-insert-after{ background-position: 0 -2726px !important; } -.htmlarea-action-paragraph-insert-before{ background-position: 0 -2784px !important; } -.htmlarea-action-paste-behaviour{ background-position: 0 -2842px !important; } -.htmlarea-action-paste-toggle{ background-position: 0 -2900px !important; } -.htmlarea-action-paste{ background-position: 0 -2958px !important; } -.htmlarea-action-quotation{ background-position: 0 -3016px !important; } -.htmlarea-action-redo{ background-position: 0 -3074px !important; } -.htmlarea-action-remove-format{ background-position: 0 -3132px !important; } -.htmlarea-action-row-delete{ background-position: 0 -3190px !important; } -.htmlarea-action-row-edit-properties{ background-position: 0 -3248px !important; } -.htmlarea-action-row-insert-above{ background-position: 0 -3306px !important; } -.htmlarea-action-row-insert-under{ background-position: 0 -3364px !important; } -.htmlarea-action-row-split{ background-position: 0 -3422px !important; } -.htmlarea-action-sample{ background-position: 0 -3480px !important; } -.htmlarea-action-small{ background-position: 0 -3538px !important; } -.htmlarea-action-smiley-insert{ background-position: 0 -3596px !important; } -.htmlarea-action-span{ background-position: 0 -3654px !important; } -.htmlarea-action-spell-check{ background-position: 0 -3712px !important; } -.htmlarea-action-strike-through{ background-position: 0 -3770px !important; } -.htmlarea-action-strong{ background-position: 0 -3828px !important; } -.htmlarea-action-subscript{ background-position: 0 -3886px !important; } -.htmlarea-action-superscript{ background-position: 0 -3944px !important; } -.htmlarea-action-table-edit-properties{ background-position: 0 -4002px !important; } -.htmlarea-action-table-insert{ background-position: 0 -4060px !important; } -.htmlarea-action-table-restyle{ background-position: 0 -4118px !important; } -.htmlarea-action-table-show-borders{ background-position: 0 -4176px !important; } -.htmlarea-action-tag-insert{ background-position: 0 -4234px !important; } -.htmlarea-action-text-direction-left-to-right{ background-position: 0 -4292px !important; } -.htmlarea-action-text-direction-right-to-left{ background-position: 0 -4350px !important; } -.htmlarea-action-underline{ background-position: 0 -4408px !important; } -.htmlarea-action-undo{ background-position: 0 -4466px !important; } -.htmlarea-action-unlink{ background-position: 0 -4524px !important; } -.htmlarea-action-unordered-list{ background-position: 0 -4582px !important; } -.htmlarea-action-user-element-edit{ background-position: 0 -4640px !important; } -.htmlarea-action-variable{ background-position: 0 -4698px !important; } +.htmlarea-action-element-edit{ background-position: 0 -1740px !important; } +.htmlarea-action-emphasis{ background-position: 0 -1798px !important; } +.htmlarea-action-find-replace{ background-position: 0 -1856px !important; } +.htmlarea-action-horizontal-rule-insert{ background-position: 0 -1914px !important; } +.htmlarea-action-image-edit{ background-position: 0 -1972px !important; } +.htmlarea-action-indent{ background-position: 0 -2030px !important; } +.htmlarea-action-inserted-text{ background-position: 0 -2088px !important; } +.htmlarea-action-italic{ background-position: 0 -2146px !important; } +.htmlarea-action-justify-center{ background-position: 0 -2204px !important; } +.htmlarea-action-justify-full{ background-position: 0 -2262px !important; } +.htmlarea-action-justify-left{ background-position: 0 -2320px !important; } +.htmlarea-action-justify-right{ background-position: 0 -2378px !important; } +.htmlarea-action-keyboard{ background-position: 0 -2436px !important; } +.htmlarea-action-language-marks-show{ background-position: 0 -2494px !important; } +.htmlarea-action-link-edit{ background-position: 0 -2552px !important; } +.htmlarea-action-mono-spaced{ background-position: 0 -2610px !important; } +.htmlarea-action-ordered-list{ background-position: 0 -2668px !important; } +.htmlarea-action-outdent{ background-position: 0 -2726px !important; } +.htmlarea-action-paragraph-insert-after{ background-position: 0 -2784px !important; } +.htmlarea-action-paragraph-insert-before{ background-position: 0 -2842px !important; } +.htmlarea-action-paste-behaviour{ background-position: 0 -2900px !important; } +.htmlarea-action-paste-toggle{ background-position: 0 -2958px !important; } +.htmlarea-action-paste{ background-position: 0 -3016px !important; } +.htmlarea-action-quotation{ background-position: 0 -3074px !important; } +.htmlarea-action-redo{ background-position: 0 -3132px !important; } +.htmlarea-action-remove-format{ background-position: 0 -3190px !important; } +.htmlarea-action-row-delete{ background-position: 0 -3248px !important; } +.htmlarea-action-row-edit-properties{ background-position: 0 -3306px !important; } +.htmlarea-action-row-insert-above{ background-position: 0 -3364px !important; } +.htmlarea-action-row-insert-under{ background-position: 0 -3422px !important; } +.htmlarea-action-row-split{ background-position: 0 -3480px !important; } +.htmlarea-action-sample{ background-position: 0 -3538px !important; } +.htmlarea-action-small{ background-position: 0 -3596px !important; } +.htmlarea-action-smiley-insert{ background-position: 0 -3654px !important; } +.htmlarea-action-span{ background-position: 0 -3712px !important; } +.htmlarea-action-spell-check{ background-position: 0 -3770px !important; } +.htmlarea-action-strike-through{ background-position: 0 -3828px !important; } +.htmlarea-action-strong{ background-position: 0 -3886px !important; } +.htmlarea-action-subscript{ background-position: 0 -3944px !important; } +.htmlarea-action-superscript{ background-position: 0 -4002px !important; } +.htmlarea-action-table-edit-properties{ background-position: 0 -4060px !important; } +.htmlarea-action-table-insert{ background-position: 0 -4118px !important; } +.htmlarea-action-table-restyle{ background-position: 0 -4176px !important; } +.htmlarea-action-table-show-borders{ background-position: 0 -4234px !important; } +.htmlarea-action-tag-insert{ background-position: 0 -4292px !important; } +.htmlarea-action-text-direction-left-to-right{ background-position: 0 -4350px !important; } +.htmlarea-action-text-direction-right-to-left{ background-position: 0 -4408px !important; } +.htmlarea-action-underline{ background-position: 0 -4466px !important; } +.htmlarea-action-undo{ background-position: 0 -4524px !important; } +.htmlarea-action-unlink{ background-position: 0 -4582px !important; } +.htmlarea-action-unordered-list{ background-position: 0 -4640px !important; } +.htmlarea-action-user-element-edit{ background-position: 0 -4698px !important; } +.htmlarea-action-variable{ background-position: 0 -4756px !important; } Index: typo3/sysext/rtehtmlarea/htmlarea/skins/default/images/actions/element-edit.png =================================================================== Impossible d'afficher : fichier considéré comme binaire. svn:mime-type = application/octet-stream Modification de propriétés sur typo3\sysext\rtehtmlarea\htmlarea\skins\default\images\actions\element-edit.png ___________________________________________________________________ Ajouté : svn:mime-type + application/octet-stream Index: typo3/sysext/rtehtmlarea/htmlarea/skins/default/images/sprites/actions.gif =================================================================== Impossible d'afficher : fichier considéré comme binaire. svn:mime-type = application/octet-stream Index: typo3/sysext/rtehtmlarea/htmlarea/skins/default/images/sprites/actions.png =================================================================== Impossible d'afficher : fichier considéré comme binaire. svn:mime-type = application/octet-stream Index: typo3/sysext/rtehtmlarea/locallang_csh.xml =================================================================== --- typo3/sysext/rtehtmlarea/locallang_csh.xml (révision 9343) +++ typo3/sysext/rtehtmlarea/locallang_csh.xml (copie de travail) @@ -10,7 +10,12 @@ - + Index: typo3/sysext/t3skin/rtehtmlarea/htmlarea.css =================================================================== --- typo3/sysext/t3skin/rtehtmlarea/htmlarea.css (révision 9343) +++ typo3/sysext/t3skin/rtehtmlarea/htmlarea.css (copie de travail) @@ -473,55 +473,56 @@ .htmlarea-action-deleted-text{ background-position: 0 -1566px !important; } .htmlarea-action-editor-show-about{ background-position: 0 -1624px !important; } .htmlarea-action-editor-toggle-mode{ background-position: 0 -1682px !important; } -.htmlarea-action-emphasis{ background-position: 0 -1740px !important; } -.htmlarea-action-find-replace{ background-position: 0 -1798px !important; } -.htmlarea-action-horizontal-rule-insert{ background-position: 0 -1856px !important; } -.htmlarea-action-image-edit{ background-position: 0 -1914px !important; } -.htmlarea-action-indent{ background-position: 0 -1972px !important; } -.htmlarea-action-inserted-text{ background-position: 0 -2030px !important; } -.htmlarea-action-italic{ background-position: 0 -2088px !important; } -.htmlarea-action-justify-center{ background-position: 0 -2146px !important; } -.htmlarea-action-justify-full{ background-position: 0 -2204px !important; } -.htmlarea-action-justify-left{ background-position: 0 -2262px !important; } -.htmlarea-action-justify-right{ background-position: 0 -2320px !important; } -.htmlarea-action-keyboard{ background-position: 0 -2378px !important; } -.htmlarea-action-language-marks-show{ background-position: 0 -2436px !important; } -.htmlarea-action-link-edit{ background-position: 0 -2494px !important; } -.htmlarea-action-mono-spaced{ background-position: 0 -2552px !important; } -.htmlarea-action-ordered-list{ background-position: 0 -2610px !important; } -.htmlarea-action-outdent{ background-position: 0 -2668px !important; } -.htmlarea-action-paragraph-insert-after{ background-position: 0 -2726px !important; } -.htmlarea-action-paragraph-insert-before{ background-position: 0 -2784px !important; } -.htmlarea-action-paste-behaviour{ background-position: 0 -2842px !important; } -.htmlarea-action-paste-toggle{ background-position: 0 -2900px !important; } -.htmlarea-action-paste{ background-position: 0 -2958px !important; } -.htmlarea-action-quotation{ background-position: 0 -3016px !important; } -.htmlarea-action-redo{ background-position: 0 -3074px !important; } -.htmlarea-action-remove-format{ background-position: 0 -3132px !important; } -.htmlarea-action-row-delete{ background-position: 0 -3190px !important; } -.htmlarea-action-row-edit-properties{ background-position: 0 -3248px !important; } -.htmlarea-action-row-insert-above{ background-position: 0 -3306px !important; } -.htmlarea-action-row-insert-under{ background-position: 0 -3364px !important; } -.htmlarea-action-row-split{ background-position: 0 -3422px !important; } -.htmlarea-action-sample{ background-position: 0 -3480px !important; } -.htmlarea-action-small{ background-position: 0 -3538px !important; } -.htmlarea-action-smiley-insert{ background-position: 0 -3596px !important; } -.htmlarea-action-span{ background-position: 0 -3654px !important; } -.htmlarea-action-spell-check{ background-position: 0 -3712px !important; } -.htmlarea-action-strike-through{ background-position: 0 -3770px !important; } -.htmlarea-action-strong{ background-position: 0 -3828px !important; } -.htmlarea-action-subscript{ background-position: 0 -3886px !important; } -.htmlarea-action-superscript{ background-position: 0 -3944px !important; } -.htmlarea-action-table-edit-properties{ background-position: 0 -4002px !important; } -.htmlarea-action-table-insert{ background-position: 0 -4060px !important; } -.htmlarea-action-table-restyle{ background-position: 0 -4118px !important; } -.htmlarea-action-table-show-borders{ background-position: 0 -4176px !important; } -.htmlarea-action-tag-insert{ background-position: 0 -4234px !important; } -.htmlarea-action-text-direction-left-to-right{ background-position: 0 -4292px !important; } -.htmlarea-action-text-direction-right-to-left{ background-position: 0 -4350px !important; } -.htmlarea-action-underline{ background-position: 0 -4408px !important; } -.htmlarea-action-undo{ background-position: 0 -4466px !important; } -.htmlarea-action-unlink{ background-position: 0 -4524px !important; } -.htmlarea-action-unordered-list{ background-position: 0 -4582px !important; } -.htmlarea-action-user-element-edit{ background-position: 0 -4640px !important; } -.htmlarea-action-variable{ background-position: 0 -4698px !important; } +.htmlarea-action-element-edit{ background-position: 0 -1740px !important; } +.htmlarea-action-emphasis{ background-position: 0 -1798px !important; } +.htmlarea-action-find-replace{ background-position: 0 -1856px !important; } +.htmlarea-action-horizontal-rule-insert{ background-position: 0 -1914px !important; } +.htmlarea-action-image-edit{ background-position: 0 -1972px !important; } +.htmlarea-action-indent{ background-position: 0 -2030px !important; } +.htmlarea-action-inserted-text{ background-position: 0 -2088px !important; } +.htmlarea-action-italic{ background-position: 0 -2146px !important; } +.htmlarea-action-justify-center{ background-position: 0 -2204px !important; } +.htmlarea-action-justify-full{ background-position: 0 -2262px !important; } +.htmlarea-action-justify-left{ background-position: 0 -2320px !important; } +.htmlarea-action-justify-right{ background-position: 0 -2378px !important; } +.htmlarea-action-keyboard{ background-position: 0 -2436px !important; } +.htmlarea-action-language-marks-show{ background-position: 0 -2494px !important; } +.htmlarea-action-link-edit{ background-position: 0 -2552px !important; } +.htmlarea-action-mono-spaced{ background-position: 0 -2610px !important; } +.htmlarea-action-ordered-list{ background-position: 0 -2668px !important; } +.htmlarea-action-outdent{ background-position: 0 -2726px !important; } +.htmlarea-action-paragraph-insert-after{ background-position: 0 -2784px !important; } +.htmlarea-action-paragraph-insert-before{ background-position: 0 -2842px !important; } +.htmlarea-action-paste-behaviour{ background-position: 0 -2900px !important; } +.htmlarea-action-paste-toggle{ background-position: 0 -2958px !important; } +.htmlarea-action-paste{ background-position: 0 -3016px !important; } +.htmlarea-action-quotation{ background-position: 0 -3074px !important; } +.htmlarea-action-redo{ background-position: 0 -3132px !important; } +.htmlarea-action-remove-format{ background-position: 0 -3190px !important; } +.htmlarea-action-row-delete{ background-position: 0 -3248px !important; } +.htmlarea-action-row-edit-properties{ background-position: 0 -3306px !important; } +.htmlarea-action-row-insert-above{ background-position: 0 -3364px !important; } +.htmlarea-action-row-insert-under{ background-position: 0 -3422px !important; } +.htmlarea-action-row-split{ background-position: 0 -3480px !important; } +.htmlarea-action-sample{ background-position: 0 -3538px !important; } +.htmlarea-action-small{ background-position: 0 -3596px !important; } +.htmlarea-action-smiley-insert{ background-position: 0 -3654px !important; } +.htmlarea-action-span{ background-position: 0 -3712px !important; } +.htmlarea-action-spell-check{ background-position: 0 -3770px !important; } +.htmlarea-action-strike-through{ background-position: 0 -3828px !important; } +.htmlarea-action-strong{ background-position: 0 -3886px !important; } +.htmlarea-action-subscript{ background-position: 0 -3944px !important; } +.htmlarea-action-superscript{ background-position: 0 -4002px !important; } +.htmlarea-action-table-edit-properties{ background-position: 0 -4060px !important; } +.htmlarea-action-table-insert{ background-position: 0 -4118px !important; } +.htmlarea-action-table-restyle{ background-position: 0 -4176px !important; } +.htmlarea-action-table-show-borders{ background-position: 0 -4234px !important; } +.htmlarea-action-tag-insert{ background-position: 0 -4292px !important; } +.htmlarea-action-text-direction-left-to-right{ background-position: 0 -4350px !important; } +.htmlarea-action-text-direction-right-to-left{ background-position: 0 -4408px !important; } +.htmlarea-action-underline{ background-position: 0 -4466px !important; } +.htmlarea-action-undo{ background-position: 0 -4524px !important; } +.htmlarea-action-unlink{ background-position: 0 -4582px !important; } +.htmlarea-action-unordered-list{ background-position: 0 -4640px !important; } +.htmlarea-action-user-element-edit{ background-position: 0 -4698px !important; } +.htmlarea-action-variable{ background-position: 0 -4756px !important; } Index: typo3/sysext/t3skin/rtehtmlarea/images/actions/element-edit.png =================================================================== Impossible d'afficher : fichier considéré comme binaire. svn:mime-type = application/octet-stream Modification de propriétés sur typo3\sysext\t3skin\rtehtmlarea\images\actions\element-edit.png ___________________________________________________________________ Ajouté : svn:mime-type + application/octet-stream Index: typo3/sysext/t3skin/rtehtmlarea/images/sprites/actions.gif =================================================================== Impossible d'afficher : fichier considéré comme binaire. svn:mime-type = application/octet-stream Index: typo3/sysext/t3skin/rtehtmlarea/images/sprites/actions.png =================================================================== Impossible d'afficher : fichier considéré comme binaire. svn:mime-type = application/octet-stream