summaryrefslogtreecommitdiff
path: root/addons/web_editor/static/src/js
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2019-02-26 16:39:30 +0100
committerChristophe Simonis <chs@odoo.com>2019-02-26 16:39:30 +0100
commitff9c9341d6ed4e9ab18a0aa02e79441999d658f1 (patch)
tree47ffd01e071d3783cff6013cfc4b6c3d8e47a841 /addons/web_editor/static/src/js
parentbc84fdf71b15ad419f8693861aea682ee751f85c (diff)
parentfcb972db9dc778eeaf7d6b6ba3638c78d93998ad (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.js30
-rw-r--r--addons/web_editor/static/src/js/wysiwyg/plugin/media.js3
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();