diff options
| author | Christophe Simonis <chs@odoo.com> | 2019-02-26 16:39:30 +0100 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2019-02-26 16:39:30 +0100 |
| commit | ff9c9341d6ed4e9ab18a0aa02e79441999d658f1 (patch) | |
| tree | 47ffd01e071d3783cff6013cfc4b6c3d8e47a841 /addons/web_editor/static/src/js | |
| parent | bc84fdf71b15ad419f8693861aea682ee751f85c (diff) | |
| parent | fcb972db9dc778eeaf7d6b6ba3638c78d93998ad (diff) | |
[MERGE] forward port branch saas-12.2 up to fcb972db9dc
Diffstat (limited to 'addons/web_editor/static/src/js')
| -rw-r--r-- | addons/web_editor/static/src/js/wysiwyg/plugin/keyboard.js | 30 | ||||
| -rw-r--r-- | addons/web_editor/static/src/js/wysiwyg/plugin/media.js | 3 |
2 files changed, 23 insertions, 10 deletions
diff --git a/addons/web_editor/static/src/js/wysiwyg/plugin/keyboard.js b/addons/web_editor/static/src/js/wysiwyg/plugin/keyboard.js index 3db30752277..0cb451c100d 100644 --- a/addons/web_editor/static/src/js/wysiwyg/plugin/keyboard.js +++ b/addons/web_editor/static/src/js/wysiwyg/plugin/keyboard.js @@ -42,7 +42,6 @@ var KeyboardPlugin = AbstractPlugin.extend({ range = direction === 'prev' ? this._insertInvisibleCharAfterSingleBR(range) : range; range = this._rerangeOutOfBR(range, direction); range = this._cleanRangeAfterDeletion(range); - range = this._replaceEmptyParentWithEmptyP(range); return range; }, /** @@ -219,8 +218,15 @@ var KeyboardPlugin = AbstractPlugin.extend({ * @returns {Boolean} true if case handled */ _handleDeletion: function (direction) { - var didDeleteNodes = this.context.invoke('HelperPlugin.deleteSelection') var range = this.context.invoke('editor.createRange'); + range = direction === 'prev' && this._replaceEmptyParentWithEmptyP(range); + if (range) { + range = this._afterDeletion(range, direction); + range.select(); + return true; + } + var didDeleteNodes = this.context.invoke('HelperPlugin.deleteSelection'); + range = this.context.invoke('editor.createRange'); var wasOnStartOfBR = direction === 'prev' && !range.so && range.sc.tagName === 'BR'; this._removeNextEmptyUnbreakable(range.sc); @@ -837,23 +843,27 @@ var KeyboardPlugin = AbstractPlugin.extend({ * * @private * @param {Object} range - * @returns {Object} range + * @returns {Object|undefined} range */ _replaceEmptyParentWithEmptyP: function (range) { - if (range.sc === this.editable || range.sc.parentNode === this.editable) { - return range; + var node = range.sc.childElementCount === 1 && range.sc.firstChild.tagName === 'BR' ? range.sc.firstChild : range.sc; + if (node === this.editable || !node.parentNode || node.parentNode === this.editable) { + return; } - var node = dom.isVoid(range.sc) && range.sc.parentNode ? range.sc.parentNode : range.sc; - var parentOnlyHasNode = node.parentNode && this.context.invoke('HelperPlugin.onlyContains', node.parentNode, node); - if (dom.isEmpty(node) && node.tagName !== 'LI' && parentOnlyHasNode) { + if ( + dom.isEmpty(node) && + this.context.invoke('HelperPlugin.onlyContains', node.parentNode, node) && + ['LI', 'P'].indexOf(node.parentNode.tagName) === -1 + ) { var emptyP = this.document.createElement('p'); var br = this.document.createElement('br'); $(emptyP).append(br); - $(node).before(emptyP).remove(); + $(node.parentNode).before(emptyP).remove(); range.sc = range.ec = br; range.so = range.eo = 0; + return range.collapse(true); } - return range; + return; }, /** * Replace all leading space from a text node with one non-breakable space. diff --git a/addons/web_editor/static/src/js/wysiwyg/plugin/media.js b/addons/web_editor/static/src/js/wysiwyg/plugin/media.js index b4d484af805..e60cfbe8039 100644 --- a/addons/web_editor/static/src/js/wysiwyg/plugin/media.js +++ b/addons/web_editor/static/src/js/wysiwyg/plugin/media.js @@ -151,6 +151,9 @@ var MediaPlugin = AbstractPlugin.extend({ * @param {Object} data contains the media to insert */ insertMedia: function (previous, data) { + if (!data.media) { + return; + } var newMedia = data.media; this._wrapCommand(function () { this.$editable.focus(); |
