[FIX] web_editor: translatable after pasted translation
Fixes same issue asb836e00d70but for `<div/>` tag. When we translate html content, all text and (currently) this subset of inline tags are allowed inside translations: 'abbr', 'b', 'bdi', 'bdo', 'br', 'cite', 'code', 'data', 'del', 'dfn', 'em', 'font', 'i', 'ins', 'kbd', 'keygen', 'mark', 'math', 'meter', 'output', 'progress', 'q', 'ruby', 's', 'samp', 'small', 'span', 'strong', 'sub', 'sup', 'time', 'u', 'var', 'wbr', 'text'. Inb836e00d70an issue was fixed that `<p/>` would possibly get inside translation when copy-pasting, testing some scenario in current chromium browser (83.0) it seems the pasted content contains `<div/>` tags. opw-2259367 opw-2260711 closes #52592 closes odoo/odoo#52932 X-original-commit: eed9fb771521143c0b514d96b5efdcb9715051f0 Signed-off-by: Nicolas Lempereur (nle) <nle@odoo.com>
This commit is contained in:
@@ -72,6 +72,7 @@ var AttributeTranslateDialog = Dialog.extend({
|
||||
var WysiwygTranslate = WysiwygMultizone.extend({
|
||||
custom_events: _.extend({}, WysiwygMultizone.prototype.custom_events || {}, {
|
||||
ready_to_save: '_onSave',
|
||||
rte_change: '_onChange',
|
||||
}),
|
||||
|
||||
/**
|
||||
@@ -125,7 +126,9 @@ var WysiwygTranslate = WysiwygMultizone.extend({
|
||||
self.$editables_attr = self._getEditableArea().filter('.o_translatable_attribute');
|
||||
self.$editables_attribute = $('.o_editable_translatable_attribute');
|
||||
|
||||
self.$editables_attribute.on('change', self._onChange.bind(self));
|
||||
self.$editables_attribute.on('change', function () {
|
||||
self.trigger_up('rte_change', {target: this});
|
||||
});
|
||||
|
||||
self._markTranslatableNodes();
|
||||
});
|
||||
@@ -199,11 +202,11 @@ var WysiwygTranslate = WysiwygMultizone.extend({
|
||||
* @param {Jquery Event} [ev]
|
||||
*/
|
||||
_onChange: function (ev) {
|
||||
var $node = $(ev && ev.target || this._getFocusedEditable());
|
||||
var $node = $(ev.data.target);
|
||||
if (!$node.length) {
|
||||
return;
|
||||
}
|
||||
$node.find('p').each(function () { // remove <p/> element which might have been inserted because of copy-paste
|
||||
$node.find('div,p').each(function () { // remove P,DIV elements which might have been inserted because of copy-paste
|
||||
var $p = $(this);
|
||||
$p.after($p.html()).remove();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user