Index: typo3/sysext/rtehtmlarea/ext_emconf.php
===================================================================
--- typo3/sysext/rtehtmlarea/ext_emconf.php (révision 9312)
+++ typo3/sysext/rtehtmlarea/ext_emconf.php (copie de travail)
@@ -48,6 +48,7 @@
),
'suggests' => array(
'rtehtmlarea_api_manual' => '',
+ 'setup' => '',
),
),
'suggests' => array(
Index: typo3/sysext/rtehtmlarea/ext_localconf.php
===================================================================
--- typo3/sysext/rtehtmlarea/ext_localconf.php (révision 9312)
+++ typo3/sysext/rtehtmlarea/ext_localconf.php (copie de travail)
@@ -240,6 +240,7 @@
$TYPO3_CONF_VARS['EXTCONF'][$_EXTKEY]['plugins']['PlainText']['objectReference'] = 'EXT:'.$_EXTKEY.'/extensions/PlainText/class.tx_rtehtmlarea_plaintext.php:&tx_rtehtmlarea_plaintext';
$TYPO3_CONF_VARS['EXTCONF'][$_EXTKEY]['plugins']['PlainText']['addIconsToSkin'] = 0;
$TYPO3_CONF_VARS['EXTCONF'][$_EXTKEY]['plugins']['PlainText']['disableInFE'] = 0;
+$TYPO3_CONF_VARS['EXTCONF'][$_EXTKEY]['plugins']['PlainText']['contextHelpFile'] = 'EXT:' . $_EXTKEY . '/extensions/PlainText/locallang_csh.xml';
$TYPO3_CONF_VARS['EXTCONF'][$_EXTKEY]['plugins']['DefaultClean'] = array();
$TYPO3_CONF_VARS['EXTCONF'][$_EXTKEY]['plugins']['DefaultClean']['objectReference'] = 'EXT:'.$_EXTKEY.'/extensions/DefaultClean/class.tx_rtehtmlarea_defaultclean.php:&tx_rtehtmlarea_defaultclean';
$TYPO3_CONF_VARS['EXTCONF'][$_EXTKEY]['plugins']['TYPO3HtmlParser'] = array();
Index: typo3/sysext/rtehtmlarea/ext_tables.php
===================================================================
--- typo3/sysext/rtehtmlarea/ext_tables.php (révision 9312)
+++ typo3/sysext/rtehtmlarea/ext_tables.php (copie de travail)
@@ -4,6 +4,7 @@
// Add static template for Click-enlarge rendering
t3lib_extMgm::addStaticFile($_EXTKEY,'static/clickenlarge/','Clickenlarge Rendering');
+ // Add acronyms table
$TCA['tx_rtehtmlarea_acronym'] = Array (
'ctrl' => Array (
'title' => 'LLL:EXT:rtehtmlarea/locallang_db.xml:tx_rtehtmlarea_acronym',
@@ -25,7 +26,27 @@
// Add contextual help files
foreach ($TYPO3_CONF_VARS['EXTCONF'][$_EXTKEY]['plugins'] as $pluginName => $config) {
if ($config['contextHelpFile']) {
- t3lib_extMgm::addLLrefForTCAdescr('xEXT_' . $_EXTKEY . '_' . $pluginName, $TYPO3_CONF_VARS['EXTCONF'][$_EXTKEY]['plugins']['RemoveFormat']['contextHelpFile']);
+ t3lib_extMgm::addLLrefForTCAdescr('xEXT_' . $_EXTKEY . '_' . $pluginName, $TYPO3_CONF_VARS['EXTCONF'][$_EXTKEY]['plugins'][$pluginName]['contextHelpFile']);
}
}
+
+ // Extend TYPO3 User Settings Configuration
+if (TYPO3_MODE === 'BE' && t3lib_extMgm::isLoaded('setup') && is_array($GLOBALS['TYPO3_USER_SETTINGS'])) {
+ $GLOBALS['TYPO3_USER_SETTINGS']['columns'] = array_merge(
+ $GLOBALS['TYPO3_USER_SETTINGS']['columns'],
+ array(
+ 'rteCleanPasteBehaviour' => array(
+ 'type' => 'select',
+ 'label' => 'LLL:EXT:rtehtmlarea/htmlarea/plugins/PlainText/locallang.xml:rteCleanPasteBehaviour',
+ 'items' => array(
+ 'plainText' => 'LLL:EXT:rtehtmlarea/htmlarea/plugins/PlainText/locallang.xml:plainText',
+ 'pasteStructure' => 'LLL:EXT:rtehtmlarea/htmlarea/plugins/PlainText/locallang.xml:pasteStructure',
+ 'pasteFormat' => 'LLL:EXT:rtehtmlarea/htmlarea/plugins/PlainText/locallang.xml:pasteFormat',
+ ),
+ 'csh' => 'xEXT_rtehtmlarea_PlainText:behaviour',
+ ),
+ )
+ );
+ $GLOBALS['TYPO3_USER_SETTINGS']['showitem'] .= ',--div--;LLL:EXT:rtehtmlarea/locallang.xml:rteSettings,rteResize,rteMaxHeight,rteCleanPasteBehaviour';
+}
?>
\ No newline at end of file
Index: typo3/sysext/rtehtmlarea/extensions/PlainText/class.tx_rtehtmlarea_plaintext.php
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/PlainText/class.tx_rtehtmlarea_plaintext.php (révision 9312)
+++ typo3/sysext/rtehtmlarea/extensions/PlainText/class.tx_rtehtmlarea_plaintext.php (copie de travail)
@@ -38,12 +38,13 @@
protected $thisConfig; // Reference to RTE PageTSConfig
protected $toolbar; // Reference to RTE toolbar array
protected $LOCAL_LANG; // Frontend language array
- protected $pluginButtons = 'pasteastext';
+ protected $pluginButtons = 'pastetoggle,pastebehaviour';
protected $convertToolbarForHtmlAreaArray = array (
- 'pasteastext' => 'PlainText',
+ 'pastetoggle' => 'PasteToggle',
+ 'pastebehaviour' => 'PasteBehaviour',
);
- public function main($parentObject) {
- // Opera has no onPaste event to hook on
+ public function main ($parentObject) {
+ // Opera has no onPaste event to handle
return parent::main($parentObject) && $this->htmlAreaRTE->client['browser'] != 'opera';
}
/**
@@ -59,8 +60,37 @@
*/
public function buildJavascriptConfiguration($RTEcounter) {
$registerRTEinJavascriptString = '';
+ $button = 'pastebehaviour';
+ // Get current TYPO3 User Setting, if available
+ if (TYPO3_MODE === 'BE' && t3lib_extMgm::isLoaded('setup') && is_array($GLOBALS['TYPO3_USER_SETTINGS']) && is_object($GLOBALS['BE_USER'])) {
+ if (!is_array($this->thisConfig['buttons.']) || !is_array($this->thisConfig['buttons.'][$button.'.'])) {
+ $registerRTEinJavascriptString .= '
+ RTEarea[' . $RTEcounter . '].buttons.' . $button . ' = new Object();';
+ }
+ $registerRTEinJavascriptString .= '
+ RTEarea[' . $RTEcounter . '].buttons.' . $button . '.current = "' . (isset($GLOBALS['BE_USER']->uc['rteCleanPasteBehaviour']) ? $GLOBALS['BE_USER']->uc['rteCleanPasteBehaviour'] : 'plainText') . '";';
+ }
return $registerRTEinJavascriptString;
}
+ /**
+ * Return an updated array of toolbar enabled buttons
+ *
+ * @param array $show: array of toolbar elements that will be enabled, unless modified here
+ *
+ * @return array toolbar button array, possibly updated
+ */
+ public function applyToolbarConstraints ($show) {
+ $removeButtons = array();
+ // Remove pastebehaviour button if pastetoggle is not configured
+ if (!in_array('pastetoggle', $show)) {
+ $removeButtons[] = 'pastebehaviour';
+ }
+ // Remove pastebehaviour button if TYPO3 User Settings are available
+ if (TYPO3_MODE === 'BE' && t3lib_extMgm::isLoaded('setup') && is_array($GLOBALS['TYPO3_USER_SETTINGS']) && is_object($GLOBALS['BE_USER'])) {
+ $removeButtons[] = 'pastebehaviour';
+ }
+ return array_diff($show, $removeButtons);
+ }
}
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/PlainText/class.tx_rtehtmlarea_plaintext.php']) {
include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/PlainText/class.tx_rtehtmlarea_plaintext.php']);
Index: typo3/sysext/rtehtmlarea/extensions/PlainText/locallang_csh.xml
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/PlainText/locallang_csh.xml (révision 0)
+++ typo3/sysext/rtehtmlarea/extensions/PlainText/locallang_csh.xml (révision 0)
@@ -0,0 +1,56 @@
+
+
+
+ CSH for Plain Text Extension of htmlArea RTE
+ CSH
+ xEXT_rtehtmlarea_PlainText
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: typo3/sysext/rtehtmlarea/extensions/PlainText/skin/htmlarea.css
===================================================================
--- typo3/sysext/rtehtmlarea/extensions/PlainText/skin/htmlarea.css (révision 9312)
+++ typo3/sysext/rtehtmlarea/extensions/PlainText/skin/htmlarea.css (copie de travail)
@@ -1,6 +1,10 @@
/* Selectors for the PlainText extension of htmlArea RTE */
/* TYPO3 SVN ID: $Id: htmlarea.css 8281 2010-07-26 23:18:50Z stan $ */
-.htmlarea-action-paste-as-plain-text {
- background-image: url('images/paste-as-plain-text.gif') !important;
+.htmlarea-action-paste-toggle {
+ background-image: url('images/paste-toggle.gif') !important;
background-position: 0 0 !important;
}
+.htmlarea-action-paste-behaviour {
+ background-image: url('images/paste-behaviour.gif') !important;
+ background-position: 0 0 !important;
+}
Index: typo3/sysext/rtehtmlarea/extensions/PlainText/skin/images/paste-as-plain-text.gif
===================================================================
Impossible d'afficher : fichier considéré comme binaire.
svn:mime-type = application/octet-stream
Index: typo3/sysext/rtehtmlarea/extensions/PlainText/skin/images/paste-behaviour.gif
===================================================================
Impossible d'afficher : fichier considéré comme binaire.
svn:mime-type = application/octet-stream
Modification de propriétés sur typo3\sysext\rtehtmlarea\extensions\PlainText\skin\images\paste-behaviour.gif
___________________________________________________________________
Ajouté : svn:mime-type
+ application/octet-stream
Index: typo3/sysext/rtehtmlarea/extensions/PlainText/skin/images/paste-toggle.gif
===================================================================
Impossible d'afficher : fichier considéré comme binaire.
svn:mime-type = application/octet-stream
Modification de propriétés sur typo3\sysext\rtehtmlarea\extensions\PlainText\skin\images\paste-toggle.gif
___________________________________________________________________
Ajouté : svn:mime-type
+ application/octet-stream
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/PlainText/locallang.xml
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/PlainText/locallang.xml (révision 9312)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/PlainText/locallang.xml (copie de travail)
@@ -6,9 +6,21 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/PlainText/plain-text.js
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/PlainText/plain-text.js (révision 9312)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/PlainText/plain-text.js (copie de travail)
@@ -37,6 +37,7 @@
* This function gets called by the class constructor
*/
configurePlugin: function(editor) {
+ this.buttonsConfiguration = this.editorConfiguration.buttons;
/*
* Registering plugin "About" information
*/
@@ -45,43 +46,86 @@
developer : 'Stanislas Rolland',
developerUrl : 'http://www.sjbr.ca/',
copyrightOwner : 'Stanislas Rolland',
- sponsor : 'SJBR',
- sponsorUrl : 'http://www.sjbr.ca/',
+ sponsor : 'Otto van Bruggen',
+ sponsorUrl : 'http://www.webspinnerij.nl',
license : 'GPL'
};
this.registerPluginInformation(pluginInformation);
/*
- * Registering the button
+ * Registering the buttons
*/
- var buttonId = 'PlainText';
- var buttonConfiguration = {
- id : buttonId,
- tooltip : this.localize(buttonId + 'Tooltip'),
- iconCls : 'htmlarea-action-paste-as-plain-text',
- action : 'onButtonPress'
- };
- this.registerButton(buttonConfiguration);
+ Ext.iterate(this.buttonList, function (buttonId, buttonConf) {
+ var buttonConfiguration = {
+ id : buttonId,
+ tooltip : this.localize(buttonId + 'Tooltip'),
+ iconCls : 'htmlarea-action-' + buttonConf[1],
+ action : 'onButtonPress',
+ dialog : buttonConf[2]
+ };
+ this.registerButton(buttonConfiguration);
+ }, this);
return true;
},
/*
+ * The list of buttons added by this plugin
+ */
+ buttonList: {
+ PasteToggle: ['pastetoggle', 'paste-toggle', false],
+ PasteBehaviour: ['pastebehaviour', 'paste-behaviour', true]
+ },
+ /*
+ * Cleaner configurations
+ */
+ cleanerConfig: {
+ pasteStructure: {
+ keepTags: /^(a|p|h[0-6]|pre|address|blockquote|div|hr|br|table|thead|tbody|tfoot|caption|tr|th|td|ul|ol|dl|li|dt|dd)$/i,
+ removeAttributes: /^(id|on*|style|class|className|lang|align|valign|bgcolor|color|border|face|.*:.*)$/i
+ },
+ pasteFormat: {
+ keepTags: /^(a|p|h[0-6]|pre|address|blockquote|div|hr|br|table|thead|tbody|tfoot|caption|tr|th|td|ul|ol|dl|li|dt|dd|b|bdo|big|cite|code|del|dfn|em|i|ins|kbd|label|q|samp|small|strike|strong|sub|sup|tt|u|var)$/i,
+ removeAttributes: /^(id|on*|style|class|className|lang|align|valign|bgcolor|color|border|face|.*:.*)$/i
+ }
+ },
+ /*
* This function gets called when the plugin is generated
*/
onGenerate: function () {
- // Initialize state of toggle
- this.togglePasteAsPlainText(false);
+ // Create cleaners
+ if (this.buttonsConfiguration && this.buttonsConfiguration['pastebehaviour']) {
+ this.pasteBehaviourConfiguration = this.buttonsConfiguration['pastebehaviour'];
+ }
+ this.cleaners = {};
+ Ext.iterate(this.cleanerConfig, function (behaviour) {
+ if (this.pasteBehaviourConfiguration && this.pasteBehaviourConfiguration[behaviour]) {
+ if (this.pasteBehaviourConfiguration[behaviour].keepTags) {
+ this.cleanerConfig[behaviour].keepTags = new RegExp( '^(' + this.pasteBehaviourConfiguration[behaviour].keepTags.split(',').join('|') + ')$', 'i');
+ }
+ if (this.pasteBehaviourConfiguration[behaviour].removeAttributes) {
+ this.cleanerConfig[behaviour].removeAttributes = new RegExp( '^(' + this.pasteBehaviourConfiguration[behaviour].removeAttributes.split(',').join('|') + ')$', 'i');
+ }
+ }
+ this.cleaners[behaviour] = new HTMLArea.DOM.Walker(this.cleanerConfig[behaviour]);
+ }, this);
+ // Initial behaviour
+ this.currentBehaviour = 'plainText';
+ // May be set in TYPO3 User Settings
+ if (this.buttonsConfiguration && this.buttonsConfiguration['pastebehaviour'] && this.buttonsConfiguration['pastebehaviour']['current']) {
+ this.currentBehaviour = this.buttonsConfiguration['pastebehaviour']['current'];
+ }
// Start monitoring paste events
this.editor.iframe.mon(Ext.get(Ext.isIE ? this.editor.document.body : this.editor.document.documentElement), 'paste', this.onPaste, this);
},
/*
- * This function toggles the state of Paste as Plain text
+ * This function toggles the state of a button
*
- * @param boolean state: if defined, the specified state to set
+ * @param string buttonId: id of button to be toggled
*
* @return void
*/
- togglePasteAsPlainText: function (state) {
+ toggleButton: function (buttonId) {
// Set new state
- this.pasteAsPlainTextActive = (typeof(state) != 'undefined') ? state : !this.pasteAsPlainTextActive;
+ var button = this.getButton(buttonId);
+ button.setInactive(!button.inactive);
},
/*
* This function gets called when a button was pressed.
@@ -95,97 +139,342 @@
// Could be a button or its hotkey
var buttonId = this.translateHotKey(id);
buttonId = buttonId ? buttonId : id;
- this.togglePasteAsPlainText();
+ switch (buttonId) {
+ case 'PasteBehaviour':
+ // Open dialogue window
+ this.openDialogue(
+ buttonId,
+ 'PasteBehaviourTooltip',
+ this.getWindowDimensions(
+ {
+ width: 260,
+ height:260
+ },
+ buttonId
+ )
+ );
+ break;
+ case 'PasteToggle':
+ this.toggleButton(buttonId);
+ this.editor.focus();
+ break;
+ }
return false;
},
/*
- * This function gets called when the toolbar is updated
+ * 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
+ *
* @return void
*/
- onUpdateToolbar: function (button, mode, selectionEmpty, ancestors) {
- if (this.getEditorMode() === 'wysiwyg' && this.editor.isEditable()) {
- button.setInactive(!this.pasteAsPlainTextActive);
- }
+ openDialogue: function (buttonId, title, dimensions) {
+ this.dialog = new Ext.Window({
+ title: this.localize(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: {
+ close: {
+ fn: this.onClose,
+ scope: this
+ }
+ },
+ items: [{
+ xtype: 'fieldset',
+ defaultType: 'radio',
+ title: this.getHelpTip('behaviour', title),
+ labelWidth: 170,
+ defaults: {
+ labelSeparator: '',
+ name: buttonId
+ },
+ items: [{
+ itemId: 'plainText',
+ fieldLabel: this.getHelpTip('plainText', 'plainText'),
+ checked: (this.currentBehaviour === 'plainText')
+ },{
+ itemId: 'pasteStructure',
+ fieldLabel: this.getHelpTip('pasteStructure', 'pasteStructure'),
+ checked: (this.currentBehaviour === 'pasteStructure')
+ },{
+ itemId: 'pasteFormat',
+ fieldLabel: this.getHelpTip('pasteFormat', 'pasteFormat'),
+ checked: (this.currentBehaviour === 'pasteFormat')
+ }
+ ]
+ }
+ ],
+ buttons: [
+ this.buildButtonConfig('OK', this.onOK)
+ ]
+ });
+ this.show();
},
/*
+ * Handler invoked when the OK button of the Clean Paste Behaviour window is pressed
+ */
+ onOK: function () {
+ var fields = [
+ 'plainText',
+ 'pasteStructure',
+ 'pasteFormat'
+ ];
+ Ext.each(fields, function (field) {
+ if (this.dialog.find('itemId', field)[0].getValue()) {
+ this.currentBehaviour = field;
+ return false;
+ }
+ }, this);
+ this.close();
+ return false;
+ },
+ /*
* Handler for paste event
+ *
+ * @param object event: the paste event
+ *
+ * @return boolean false, if the event was handled, true otherwise
*/
onPaste: function (event) {
- if (this.pasteAsPlainTextActive) {
- this.grabClipboardText(event);
- if (this.clipboardText) {
- // Direct access to the clipboard text was possible
- this.pasteAsPlainText();
- } else {
- // Get the text content from the hidden section
- // after the paste operation is completed
- this.getClipboardText.defer(10, this);
+ if (!this.getButton('PasteToggle').inactive) {
+ switch (this.currentBehaviour) {
+ case 'plainText':
+ // Only IE and WebKit will allow access to the clipboard content, in plain text only however
+ if (Ext.isIE || Ext.isWebKit) {
+ var clipboardText = this.grabClipboardText(event);
+ if (clipboardText) {
+ this.editor.insertHTML(clipboardText);
+ }
+ return !this.clipboardText;
+ }
+ case 'pasteStructure':
+ case 'pasteFormat':
+ if (Ext.isIE) {
+ // Save the current selection
+ this.editor.focus();
+ this.bookmark = this.editor.getBookmark(this.editor._createRange(this.editor._getSelection()));
+ // Show the pasting pad
+ this.openPastingPad(
+ 'PasteToggle',
+ this.currentBehaviour,
+ this.getWindowDimensions(
+ {
+ width: 550,
+ height: 550
+ },
+ 'PasteToggle'
+ ));
+ event.browserEvent.returnValue = false;
+ return false;
+ } else {
+ // Redirect the paste operation to a hidden section
+ this.redirectPaste();
+ // Process the content of the hidden section after the paste operation is completed
+ // WebKit seems to be pondering a very long time over what is happenning here...
+ this.processPastedContent.defer(Ext.isWebKit ? 500 : 50, this);
+ }
+ break;
+ default:
+ break;
}
- return !this.clipboardText;
}
+ return true;
},
/*
- * Grab the text content directly from the clipboard or
- * redirect the paste operation towards a hidden section
+ * Grab the text content directly from the clipboard
+ * If successful, stop the paste event
*
* @param object event: the paste event
*
- * @return void
+ * @return string clipboard content, in plain text, if access was granted
*/
grabClipboardText: function (event) {
- this.clipboardText = null;
- // Check if browser supports direct plaintext access (IE and WebKit)
+ var clipboardText = '';
+ // Grab the text content
if (window.clipboardData || event.browserEvent.clipboardData || event.browserEvent.dataTransfer) {
- // Grab the text content
- this.clipboardText = (window.clipboardData || event.browserEvent.clipboardData || event.browserEvent.dataTransfer).getData('Text');
- if (this.clipboardText) {
- // Stop the event
- event.stopEvent();
- } else {
- TYPO3.Dialog.InformationDialog({
- title: this.localize('Paste-as-Plain-Text'),
- msg: this.localize('Access-to-clipboard-denied')
- });
- }
+ clipboardText = (window.clipboardData || event.browserEvent.clipboardData || event.browserEvent.dataTransfer).getData('text');
+ }
+ if (clipboardText) {
+ // Stop the event
+ event.stopEvent();
} else {
- // When direct access was not possible
- // Save the current selection
- var selection = this.editor._getSelection();
- var range = this.editor._createRange(selection);
- this.bookmark = this.editor.getBookmark(range);
- // Create and append hidden section
- this.hiddenSection = this.editor.document.createElement('div');
- this.hiddenSection.id = this.editorId + 'htmlarea-paste-hidden-section';
- this.hiddenSection.style.position = 'absolute';
- this.hiddenSection.style.left = -10000;
- this.hiddenSection.style.top = this.editor.document.body.scrollTop;
- this.hiddenSection.style.overflow = 'hidden';
- this.hiddenSection = this.editor.document.body.appendChild(this.hiddenSection);
- // Move the selection to the hidden section and
- // let the browser paste into the hidden section
- this.editor.selectNodeContents(this.hiddenSection, true);
+ // If the user denied access to the clipboard, let the browser paste without intervention
+ TYPO3.Dialog.InformationDialog({
+ title: this.localize('Paste-as-Plain-Text'),
+ msg: this.localize('Access-to-clipboard-denied')
+ });
}
+ return clipboardText;
},
/*
- * If the paste operation was redirected towards a hidden section
- * get the text content from the section
+ * Redirect the paste operation towards a hidden section
*
* @return void
*/
- getClipboardText: function () {
- // Get the text content
- this.clipboardText = this.hiddenSection.textContent;
- // Delete the hidden section
- HTMLArea.removeFromParent(this.hiddenSection);
+ redirectPaste: function () {
+ this.editor.focus();
+ // Save the current selection
+ this.bookmark = this.editor.getBookmark(this.editor._createRange(this.editor._getSelection()));
+ // Create and append hidden section
+ var hiddenSection = this.editor.document.createElement('div');
+ HTMLArea.DOM.addClass(hiddenSection, 'htmlarea-paste-hidden-section');
+ hiddenSection.setAttribute('style', 'position: absolute; left: -10000px; top: ' + this.editor.document.body.scrollTop + 'px; overflow: hidden;');
+ hiddenSection = this.editor.document.body.appendChild(hiddenSection);
+ if (Ext.isWebKit) {
+ hiddenSection.innerHTML = ' ';
+ }
+ // Move the selection to the hidden section and let the browser paste into the hidden section
+ this.editor.selectNodeContents(hiddenSection);
+ },
+ /*
+ * Process the pasted content that was redirected towards a hidden section
+ * and insert it at the original selection
+ *
+ * @return void
+ */
+ processPastedContent: function () {
+ this.editor.focus();
+ // Get the hidden section
+ var divs = this.editor.document.getElementsByClassName('htmlarea-paste-hidden-section');
+ var hiddenSection = divs[0];
+ // Delete any other hidden sections
+ for (var i = divs.length; --i >= 1;) {
+ HTMLArea.removeFromParent(divs[i]);
+ }
+ var content = '';
+ switch (this.currentBehaviour) {
+ case 'plainText':
+ // Get plain text content
+ content = hiddenSection.textContent;
+ break;
+ case 'pasteStructure':
+ case 'pasteFormat':
+ // Get clean content
+ content = this.cleaners[this.currentBehaviour].render(hiddenSection, false);
+ break;
+ }
+ // Remove the hidden section from the document
+ HTMLArea.removeFromParent(hiddenSection);
// Restore the selection
this.editor.selectRange(this.editor.moveToBookmark(this.bookmark));
- this.pasteAsPlainText();
+ // Insert the cleaned content
+ if (content) {
+ this.editor.execCommand('insertHTML', false, content);
+ }
},
/*
- * Paste as plain text
+ * Open the pasting pad window (for IE)
+ *
+ * @param string buttonId: the button id
+ * @param string title: the window title
+ * @param object dimensions: the opening dimensions of the window
+ *
+ * @return void
*/
- pasteAsPlainText: function () {
- this.editor.insertHTML(this.clipboardText);
+ openPastingPad: function (buttonId, title, dimensions) {
+ this.dialog = new Ext.Window({
+ title: this.getHelpTip(title, title),
+ cls: 'htmlarea-window',
+ bodyCssClass: 'pasting-pad',
+ 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: {
+ afterrender: {
+ // The document will not be immediately ready
+ fn: function (event) { this.onPastingPadAfterRender.defer(100, this, [event]); },
+ scope: this
+ },
+ close: {
+ fn: this.onClose,
+ scope: this
+ }
+ },
+ items: [{
+ xtype: 'tbtext',
+ text: this.getHelpTip('pasteInPastingPad', 'pasteInPastingPad'),
+ style: {
+ marginBottom: '5px'
+ }
+ },{
+ // The iframe
+ xtype: 'box',
+ itemId: 'pasting-pad-iframe',
+ autoEl: {
+ name: 'contentframe',
+ tag: 'iframe',
+ cls: 'contentframe',
+ src: Ext.isGecko ? 'javascript:void(0);' : HTMLArea.editorUrl + 'popups/blank.html'
+ }
+ }
+ ],
+ buttons: [
+ this.buildButtonConfig('OK', this.onPastingPadOK),
+ this.buildButtonConfig('Cancel', this.onCancel)
+ ]
+ });
+ this.show();
+ },
+ /*
+ * Handler invoked after the pasting pad iframe has been rendered
+ */
+ onPastingPadAfterRender: function () {
+ var iframe = this.dialog.getComponent('pasting-pad-iframe').getEl().dom;
+ var pastingPadDocument = iframe.contentWindow ? iframe.contentWindow.document : iframe.contentDocument;
+ this.pastingPadBody = pastingPadDocument.body;
+ this.pastingPadBody.contentEditable = true;
+ // Start monitoring paste events
+ this.dialog.mon(Ext.get(this.pastingPadBody), 'paste', this.onPastingPadPaste, this);
+ this.pastingPadBody.focus();
+ },
+ /*
+ * Handler invoked when content is pasted into the pasting pad
+ */
+ onPastingPadPaste: function (event) {
+ // Let the paste operation complete before cleaning
+ this.cleanPastingPadContents.defer(50, this);
+ },
+ /*
+ * Clean the contents of the pasting pad
+ */
+ cleanPastingPadContents: function () {
+ this.pastingPadBody.innerHTML = this.cleaners[this.currentBehaviour].render(this.pastingPadBody, false);
+ this.pastingPadBody.focus();
+ },
+ /*
+ * Handler invoked when the OK button of the Pasting Pad window is pressed
+ */
+ onPastingPadOK: function () {
+ // Restore the selection
+ this.editor.focus();
+ this.restoreSelection();
+ // Insert the cleaned pasting pad content
+ this.editor.insertHTML(this.pastingPadBody.innerHTML);
+ this.close();
+ return false;
+ },
+ /*
+ * This function gets called when the toolbar is updated
+ */
+ onUpdateToolbar: function (button, mode, selectionEmpty, ancestors) {
+ if (mode === 'wysiwyg' && this.editor.isEditable()) {
+ switch (button.itemId) {
+ case 'PasteToggle':
+ button.setTooltip({
+ title: this.localize((button.inactive ? 'enable' : 'disable') + this.currentBehaviour)
+ });
+ break;
+ }
+ }
}
});
Index: typo3/sysext/rtehtmlarea/htmlarea/skins/default/htmlarea.css
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/skins/default/htmlarea.css (révision 9312)
+++ typo3/sysext/rtehtmlarea/htmlarea/skins/default/htmlarea.css (copie de travail)
@@ -438,84 +438,85 @@
background-position: 0 -15px;
}
/* Action icon selectors for toolbar, context menu and window headers */
-.htmlarea-action-abbreviation-edit { background-position: 0 0 !important; }
-.htmlarea-action-bidi-override { background-position: 0 -58px !important; }
-.htmlarea-action-big { background-position: 0 -116px !important; }
-.htmlarea-action-blockquote { background-position: 0 -174px !important; }
-.htmlarea-action-bold { background-position: 0 -232px !important; }
-.htmlarea-action-cell-delete { background-position: 0 -290px !important; }
-.htmlarea-action-cell-edit-properties { background-position: 0 -348px !important; }
-.htmlarea-action-cell-insert-after { background-position: 0 -406px !important; }
-.htmlarea-action-cell-insert-before { background-position: 0 -464px !important; }
-.htmlarea-action-cell-merge { background-position: 0 -522px !important; }
-.htmlarea-action-cell-split { background-position: 0 -580px !important; }
-.htmlarea-action-character-insert-from-map { background-position: 0 -638px !important; }
-.htmlarea-action-citation { background-position: 0 -696px !important; }
-.htmlarea-action-code { background-position: 0 -754px !important; }
-.htmlarea-action-color-background { background-position: 0 -812px !important; }
-.htmlarea-action-color-foreground { background-position: 0 -870px !important; }
-.htmlarea-action-column-delete { background-position: 0 -928px !important; }
-.htmlarea-action-column-edit-properties { background-position: 0 -986px !important; }
-.htmlarea-action-column-insert-after { background-position: 0 -1044px !important; }
-.htmlarea-action-column-insert-before { background-position: 0 -1102px !important; }
-.htmlarea-action-column-split { background-position: 0 -1160px !important; }
-.htmlarea-action-copy { background-position: 0 -1218px !important; }
-.htmlarea-action-cut { background-position: 0 -1276px !important; }
-.htmlarea-action-definition-list-item { background-position: 0 -1334px !important; }
-.htmlarea-action-definition-list { background-position: 0 -1392px !important; }
-.htmlarea-action-definition { background-position: 0 -1450px !important; }
-.htmlarea-action-delete-item { background-position: 0 -1508px !important; }
-.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-as-plain-text { background-position: 0 -2842px !important; }
-.htmlarea-action-paste { background-position: 0 -2900px !important; }
-.htmlarea-action-quotation { background-position: 0 -2958px !important; }
-.htmlarea-action-redo { background-position: 0 -3016px !important; }
-.htmlarea-action-remove-format { background-position: 0 -3074px !important; }
-.htmlarea-action-row-delete { background-position: 0 -3132px !important; }
-.htmlarea-action-row-edit-properties { background-position: 0 -3190px !important; }
-.htmlarea-action-row-insert-above { background-position: 0 -3248px !important; }
-.htmlarea-action-row-insert-under { background-position: 0 -3306px !important; }
-.htmlarea-action-row-split { background-position: 0 -3364px !important; }
-.htmlarea-action-sample { background-position: 0 -3422px !important; }
-.htmlarea-action-small { background-position: 0 -3480px !important; }
-.htmlarea-action-smiley-insert { background-position: 0 -3538px !important; }
-.htmlarea-action-span { background-position: 0 -3596px !important; }
-.htmlarea-action-spell-check { background-position: 0 -3654px !important; }
-.htmlarea-action-strike-through { background-position: 0 -3712px !important; }
-.htmlarea-action-strong { background-position: 0 -3770px !important; }
-.htmlarea-action-subscript { background-position: 0 -3828px !important; }
-.htmlarea-action-superscript { background-position: 0 -3886px !important; }
-.htmlarea-action-table-edit-properties { background-position: 0 -3944px !important; }
-.htmlarea-action-table-insert { background-position: 0 -4002px !important; }
-.htmlarea-action-table-restyle { background-position: 0 -4060px !important; }
-.htmlarea-action-table-show-borders { background-position: 0 -4118px !important; }
-.htmlarea-action-tag-insert { background-position: 0 -4176px !important; }
-.htmlarea-action-text-direction-left-to-right { background-position: 0 -4234px !important; }
-.htmlarea-action-text-direction-right-to-left { background-position: 0 -4292px !important; }
-.htmlarea-action-underline { background-position: 0 -4350px !important; }
-.htmlarea-action-undo { background-position: 0 -4408px !important; }
-.htmlarea-action-unlink { background-position: 0 -4466px !important; }
-.htmlarea-action-unordered-list { background-position: 0 -4524px !important; }
-.htmlarea-action-user-element-edit { background-position: 0 -4582px !important; }
-.htmlarea-action-variable { background-position: 0 -4640px !important; }
+.htmlarea-action-abbreviation-edit{ background-position: 0 0 !important; }
+.htmlarea-action-bidi-override{ background-position: 0 -58px !important; }
+.htmlarea-action-big{ background-position: 0 -116px !important; }
+.htmlarea-action-blockquote{ background-position: 0 -174px !important; }
+.htmlarea-action-bold{ background-position: 0 -232px !important; }
+.htmlarea-action-cell-delete{ background-position: 0 -290px !important; }
+.htmlarea-action-cell-edit-properties{ background-position: 0 -348px !important; }
+.htmlarea-action-cell-insert-after{ background-position: 0 -406px !important; }
+.htmlarea-action-cell-insert-before{ background-position: 0 -464px !important; }
+.htmlarea-action-cell-merge{ background-position: 0 -522px !important; }
+.htmlarea-action-cell-split{ background-position: 0 -580px !important; }
+.htmlarea-action-character-insert-from-map{ background-position: 0 -638px !important; }
+.htmlarea-action-citation{ background-position: 0 -696px !important; }
+.htmlarea-action-code{ background-position: 0 -754px !important; }
+.htmlarea-action-color-background{ background-position: 0 -812px !important; }
+.htmlarea-action-color-foreground{ background-position: 0 -870px !important; }
+.htmlarea-action-column-delete{ background-position: 0 -928px !important; }
+.htmlarea-action-column-edit-properties{ background-position: 0 -986px !important; }
+.htmlarea-action-column-insert-after{ background-position: 0 -1044px !important; }
+.htmlarea-action-column-insert-before{ background-position: 0 -1102px !important; }
+.htmlarea-action-column-split{ background-position: 0 -1160px !important; }
+.htmlarea-action-copy{ background-position: 0 -1218px !important; }
+.htmlarea-action-cut{ background-position: 0 -1276px !important; }
+.htmlarea-action-definition-list-item{ background-position: 0 -1334px !important; }
+.htmlarea-action-definition-list{ background-position: 0 -1392px !important; }
+.htmlarea-action-definition{ background-position: 0 -1450px !important; }
+.htmlarea-action-delete-item{ background-position: 0 -1508px !important; }
+.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; }
Index: typo3/sysext/rtehtmlarea/htmlarea/skins/default/images/actions/paste-as-plain-text.gif
===================================================================
Impossible d'afficher : fichier considéré comme binaire.
svn:mime-type = application/octet-stream
Index: typo3/sysext/rtehtmlarea/htmlarea/skins/default/images/actions/paste-behaviour.gif
===================================================================
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\paste-behaviour.gif
___________________________________________________________________
Ajouté : svn:mime-type
+ application/octet-stream
Index: typo3/sysext/rtehtmlarea/htmlarea/skins/default/images/actions/paste-toggle.gif
===================================================================
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\paste-toggle.gif
___________________________________________________________________
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.xml
===================================================================
--- typo3/sysext/rtehtmlarea/locallang.xml (révision 9312)
+++ typo3/sysext/rtehtmlarea/locallang.xml (copie de travail)
@@ -18,6 +18,9 @@
+
+
+
Index: typo3/sysext/t3skin/rtehtmlarea/htmlarea.css
===================================================================
--- typo3/sysext/t3skin/rtehtmlarea/htmlarea.css (révision 9312)
+++ typo3/sysext/t3skin/rtehtmlarea/htmlarea.css (copie de travail)
@@ -443,84 +443,85 @@
background-position: 0 -15px;
}
/* Action icon selectors for toolbar, context menu and window headers */
-.htmlarea-action-abbreviation-edit { background-position: 0 0 !important; }
-.htmlarea-action-bidi-override { background-position: 0 -58px !important; }
-.htmlarea-action-big { background-position: 0 -116px !important; }
-.htmlarea-action-blockquote { background-position: 0 -174px !important; }
-.htmlarea-action-bold { background-position: 0 -232px !important; }
-.htmlarea-action-cell-delete { background-position: 0 -290px !important; }
-.htmlarea-action-cell-edit-properties { background-position: 0 -348px !important; }
-.htmlarea-action-cell-insert-after { background-position: 0 -406px !important; }
-.htmlarea-action-cell-insert-before { background-position: 0 -464px !important; }
-.htmlarea-action-cell-merge { background-position: 0 -522px !important; }
-.htmlarea-action-cell-split { background-position: 0 -580px !important; }
-.htmlarea-action-character-insert-from-map { background-position: 0 -638px !important; }
-.htmlarea-action-citation { background-position: 0 -696px !important; }
-.htmlarea-action-code { background-position: 0 -754px !important; }
-.htmlarea-action-color-background { background-position: 0 -812px !important; }
-.htmlarea-action-color-foreground { background-position: 0 -870px !important; }
-.htmlarea-action-column-delete { background-position: 0 -928px !important; }
-.htmlarea-action-column-edit-properties { background-position: 0 -986px !important; }
-.htmlarea-action-column-insert-after { background-position: 0 -1044px !important; }
-.htmlarea-action-column-insert-before { background-position: 0 -1102px !important; }
-.htmlarea-action-column-split { background-position: 0 -1160px !important; }
-.htmlarea-action-copy { background-position: 0 -1218px !important; }
-.htmlarea-action-cut { background-position: 0 -1276px !important; }
-.htmlarea-action-definition-list-item { background-position: 0 -1334px !important; }
-.htmlarea-action-definition-list { background-position: 0 -1392px !important; }
-.htmlarea-action-definition { background-position: 0 -1450px !important; }
-.htmlarea-action-delete-item { background-position: 0 -1508px !important; }
-.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-as-plain-text { background-position: 0 -2842px !important; }
-.htmlarea-action-paste { background-position: 0 -2900px !important; }
-.htmlarea-action-quotation { background-position: 0 -2958px !important; }
-.htmlarea-action-redo { background-position: 0 -3016px !important; }
-.htmlarea-action-remove-format { background-position: 0 -3074px !important; }
-.htmlarea-action-row-delete { background-position: 0 -3132px !important; }
-.htmlarea-action-row-edit-properties { background-position: 0 -3190px !important; }
-.htmlarea-action-row-insert-above { background-position: 0 -3248px !important; }
-.htmlarea-action-row-insert-under { background-position: 0 -3306px !important; }
-.htmlarea-action-row-split { background-position: 0 -3364px !important; }
-.htmlarea-action-sample { background-position: 0 -3422px !important; }
-.htmlarea-action-small { background-position: 0 -3480px !important; }
-.htmlarea-action-smiley-insert { background-position: 0 -3538px !important; }
-.htmlarea-action-span { background-position: 0 -3596px !important; }
-.htmlarea-action-spell-check { background-position: 0 -3654px !important; }
-.htmlarea-action-strike-through { background-position: 0 -3712px !important; }
-.htmlarea-action-strong { background-position: 0 -3770px !important; }
-.htmlarea-action-subscript { background-position: 0 -3828px !important; }
-.htmlarea-action-superscript { background-position: 0 -3886px !important; }
-.htmlarea-action-table-edit-properties { background-position: 0 -3944px !important; }
-.htmlarea-action-table-insert { background-position: 0 -4002px !important; }
-.htmlarea-action-table-restyle { background-position: 0 -4060px !important; }
-.htmlarea-action-table-show-borders { background-position: 0 -4118px !important; }
-.htmlarea-action-tag-insert { background-position: 0 -4176px !important; }
-.htmlarea-action-text-direction-left-to-right { background-position: 0 -4234px !important; }
-.htmlarea-action-text-direction-right-to-left { background-position: 0 -4292px !important; }
-.htmlarea-action-underline { background-position: 0 -4350px !important; }
-.htmlarea-action-undo { background-position: 0 -4408px !important; }
-.htmlarea-action-unlink { background-position: 0 -4466px !important; }
-.htmlarea-action-unordered-list { background-position: 0 -4524px !important; }
-.htmlarea-action-user-element-edit { background-position: 0 -4582px !important; }
-.htmlarea-action-variable { background-position: 0 -4640px !important; }
+.htmlarea-action-abbreviation-edit{ background-position: 0 0 !important; }
+.htmlarea-action-bidi-override{ background-position: 0 -58px !important; }
+.htmlarea-action-big{ background-position: 0 -116px !important; }
+.htmlarea-action-blockquote{ background-position: 0 -174px !important; }
+.htmlarea-action-bold{ background-position: 0 -232px !important; }
+.htmlarea-action-cell-delete{ background-position: 0 -290px !important; }
+.htmlarea-action-cell-edit-properties{ background-position: 0 -348px !important; }
+.htmlarea-action-cell-insert-after{ background-position: 0 -406px !important; }
+.htmlarea-action-cell-insert-before{ background-position: 0 -464px !important; }
+.htmlarea-action-cell-merge{ background-position: 0 -522px !important; }
+.htmlarea-action-cell-split{ background-position: 0 -580px !important; }
+.htmlarea-action-character-insert-from-map{ background-position: 0 -638px !important; }
+.htmlarea-action-citation{ background-position: 0 -696px !important; }
+.htmlarea-action-code{ background-position: 0 -754px !important; }
+.htmlarea-action-color-background{ background-position: 0 -812px !important; }
+.htmlarea-action-color-foreground{ background-position: 0 -870px !important; }
+.htmlarea-action-column-delete{ background-position: 0 -928px !important; }
+.htmlarea-action-column-edit-properties{ background-position: 0 -986px !important; }
+.htmlarea-action-column-insert-after{ background-position: 0 -1044px !important; }
+.htmlarea-action-column-insert-before{ background-position: 0 -1102px !important; }
+.htmlarea-action-column-split{ background-position: 0 -1160px !important; }
+.htmlarea-action-copy{ background-position: 0 -1218px !important; }
+.htmlarea-action-cut{ background-position: 0 -1276px !important; }
+.htmlarea-action-definition-list-item{ background-position: 0 -1334px !important; }
+.htmlarea-action-definition-list{ background-position: 0 -1392px !important; }
+.htmlarea-action-definition{ background-position: 0 -1450px !important; }
+.htmlarea-action-delete-item{ background-position: 0 -1508px !important; }
+.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; }
Index: typo3/sysext/t3skin/rtehtmlarea/images/actions/paste-as-plain-text.gif
===================================================================
Impossible d'afficher : fichier considéré comme binaire.
svn:mime-type = application/octet-stream
Index: typo3/sysext/t3skin/rtehtmlarea/images/actions/paste-behaviour.gif
===================================================================
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\paste-behaviour.gif
___________________________________________________________________
Ajouté : svn:mime-type
+ application/octet-stream
Index: typo3/sysext/t3skin/rtehtmlarea/images/actions/paste-toggle.gif
===================================================================
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\paste-toggle.gif
___________________________________________________________________
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