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 - - - - -
-
Remove formatting
-
-
- Cleaning Area -
- - -
-
-
- Cleaning options -
- - -
-
- - -
-
- - -
-
- - -
-
-
- - -
-
-
- - 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(/]*>.*<\/style[^>]*>/gi, ""). - replace(/]*>.*<\/title[^>]*>/gi, ""); - // remove comments - html = html.replace(/