Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/RemoveFormat/locallang.xml
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/RemoveFormat/locallang.xml (révision 7096)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/RemoveFormat/locallang.xml (copie de travail)
@@ -14,6 +14,7 @@
+
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/RemoveFormat/popups/removeformat.html
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/RemoveFormat/popups/removeformat.html (révision 7096)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/RemoveFormat/popups/removeformat.html (copie de travail)
@@ -1,124 +0,0 @@
-
-
-
-
- Remove formatting
-
-
-
-
-
-
-
Index: typo3/sysext/rtehtmlarea/htmlarea/plugins/RemoveFormat/remove-format.js
===================================================================
--- typo3/sysext/rtehtmlarea/htmlarea/plugins/RemoveFormat/remove-format.js (révision 7096)
+++ typo3/sysext/rtehtmlarea/htmlarea/plugins/RemoveFormat/remove-format.js (copie de travail)
@@ -30,48 +30,39 @@
* TYPO3 SVN ID: $Id$
*/
RemoveFormat = HTMLArea.Plugin.extend({
-
- constructor : function(editor, pluginName) {
+ constructor: function(editor, pluginName) {
this.base(editor, pluginName);
},
-
/*
* This function gets called by the class constructor
*/
- configurePlugin : function(editor) {
-
+ configurePlugin: function(editor) {
/*
* Registering plugin "About" information
*/
var pluginInformation = {
- version : "1.7",
- developer : "Stanislas Rolland",
- developerUrl : "http://www.sjbr.ca/",
- copyrightOwner : "Stanislas Rolland",
- sponsor : "SJBR",
- sponsorUrl : "http://www.sjbr.ca/",
- license : "GPL"
+ version : '2.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 = "RemoveFormat";
+ var buttonId = 'RemoveFormat';
var buttonConfiguration = {
id : buttonId,
- tooltip : this.localize(buttonId+"Tooltip"),
- action : "onButtonPress",
+ tooltip : this.localize(buttonId + 'Tooltip'),
+ action : 'onButtonPress',
dialog : true
};
this.registerButton(buttonConfiguration);
-
- this.popupWidth = 370;
- this.popupHeight = 260;
-
return true;
},
-
/*
* This function gets called when the button was pressed.
*
@@ -80,105 +71,211 @@
*
* @return boolean false if action is completed
*/
- onButtonPress : function (editor, id, target) {
+ onButtonPress: function (editor, id, target) {
// Could be a button or its hotkey
var buttonId = this.translateHotKey(id);
buttonId = buttonId ? buttonId : id;
-
- this.dialog = this.openDialog("RemoveFormat", this.makeUrlFromPopupName("removeformat"), "applyRequest", null, {width:this.popupWidth, height:this.popupHeight});
+ // Open dialogue window
+ this.openDialogue(
+ buttonId,
+ 'Remove formatting',
+ this.getWindowDimensions(
+ {
+ width: 260,
+ height:260
+ },
+ buttonId
+ )
+ );
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
+ *
+ * @return void
+ */
+ 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: buttonId,
+ listeners: {
+ close: {
+ fn: this.onClose,
+ scope: this
+ }
+ },
+ items: [{
+ xtype: 'fieldset',
+ title: this.localize('Cleaning Area'),
+ defaultType: 'radio',
+ labelWidth: 150,
+ defaults: {
+ labelSeparator: ''
+ },
+ items: [{
+ itemId: 'selection',
+ fieldLabel: this.localize('Selection'),
+ name: 'htmlarea-removeFormat-area'
+ },{
+ itemId: 'allContent',
+ fieldLabel: this.localize('All'),
+ checked: true,
+ name: 'htmlarea-removeFormat-area'
+ }
+ ]
+ },{
+ xtype: 'fieldset',
+ defaultType: 'checkbox',
+ title: this.localize('Cleaning options'),
+ labelWidth: 150,
+ defaults: {
+ labelSeparator: ''
+ },
+ items: [{
+ itemId: 'formatting',
+ fieldLabel: this.localize('Formatting:')
+ },{
+ itemId: 'msWordFormatting',
+ fieldLabel: this.localize('MS Word Formatting:'),
+ checked: true
+ },{
+ itemId: 'spaces',
+ fieldLabel: this.localize('Spaces')
+ },{
+ itemId: 'images',
+ fieldLabel: this.localize('Images:')
+ },{
+ itemId: 'allHtml',
+ fieldLabel: this.localize('All HTML:')
+ }
+ ]
+ }
+ ],
+ buttons: [
+ this.buildButtonConfig('OK', this.onOK),
+ this.buildButtonConfig('Cancel', this.onCancel)
+ ]
+ });
+ this.show();
+ },
+ /*
+ * Handler when the OK button is pressed
+ */
+ onOK: function () {
+ var fields = [
+ 'selection',
+ 'allContent',
+ 'formatting',
+ 'msWordFormatting',
+ 'spaces',
+ 'images',
+ 'allHtml'
+ ];
+ var params = {};
+ Ext.each(fields, function (field) {
+ params[field] = this.dialog.find('itemId', field)[0].getValue();
+ }, this);
+ if (params['allHtml'] || params['formatting'] || params['spaces'] || params['images'] || params['msWordFormatting']) {
+ this.applyRequest(params);
+ } else {
+ Ext.MessageBox.alert('', this.localize('Select the type of formatting you wish to remove.'));
+ }
+ return false;
+ },
+ /*
* Perform the cleaning request
- * .
+ * @param object params: the values of the form fields
+ *
+ * @return void
*/
- applyRequest : function(param) {
-
+ applyRequest: function(params) {
var editor = this.editor;
- editor.focusEditor();
-
- if (param) {
-
- if (param["cleaning_area"] == "all") {
- var html = editor._doc.body.innerHTML;
- } else {
- var html = editor.getSelectedHTML();
- }
-
- if (html) {
-
- if (param["html_all"]== true) {
- html = html.replace(/<[\!]*?[^<>]*?>/g, "");
- }
-
- if (param["formatting"] == true) {
- // remove font, b, strong, i, em, u, strike, span and other tags
- var regF1 = new RegExp("<\/?(abbr|acronym|b[^a-zA-Z]|big|cite|code|em[^a-zA-Z]|font|i[^a-zA-Z]|q|s[^a-zA-Z]|samp|small|span|strike|strong|sub|sup|u[^a-zA-Z]|var)[^>]*>", "gi");
- html = html.replace(regF1, "");
- // keep tags, strip attributes
- var regF2 = new RegExp(" style=\"[^>\"]*\"", "gi");
- var regF3 = new RegExp(" (class|align|cellpadding|cellspacing|frame|bgcolor)=(([^>\s\"]+)|(\"[^>\"]*\"))", "gi");
- html = html.replace(regF2, "").replace(regF3, "");
- }
-
- if (param["images"] == true) {
- // remove any IMG tag
- html = html.replace(/<\/?img[^>]*>/gi, ""); //remove img tags
- }
-
- if (param["ms_formatting"] == true) {
- // make one line
- var regMS1 = new RegExp("(\r\n|\n|\r)", "g");
- html = html.replace(regMS1, " ");
- //clean up tags
- var regMS2 = new RegExp("<(b[^r]|strong|i|em|p|li|ul) [^>]*>", "gi");
- html = html.replace(regMS2, "<$1>");
- // keep tags, strip attributes
- var regMS3 = new RegExp(" style=\"[^>\"]*\"", "gi");
- var regMS4 = new RegExp(" (class|align)=(([^>\s\"]+)|(\"[^>\"]*\"))", "gi");
- html = html.replace(regMS3, "").replace(regMS4, "");
- // mozilla doesn't like tags
- html = html.replace(//gi, "").replace(/<\/em>/gi, "");
- // kill unwanted tags: span, div, ?xml:, st1:, [a-z]:, meta, link
- html = html.replace(/<\/?span[^>]*>/gi, "").
- replace(/<\/?div[^>]*>/gi, "").
- replace(/<\?xml:[^>]*>/gi, "").
- replace(/<\/?st1:[^>]*>/gi, "").
- replace(/<\/?[a-z]:[^>]*>/g, "").
- replace(/<\/?meta[^>]*>/g, "").
- replace(/<\/?link[^>]*>/g, "");
- // remove unwanted tags and their contents: style, title
- html = html.replace(/