diff options
| author | Christophe Matthieu <chm@odoo.com> | 2015-01-13 11:37:56 +0100 |
|---|---|---|
| committer | Christophe Matthieu <chm@odoo.com> | 2015-01-16 16:38:08 +0100 |
| commit | d28b9a3fee3fbf745848084f70597a734b8ba673 (patch) | |
| tree | ce6c89a240290e2b660f287f4b70f89a070bcf0a /addons/website/static/src/js/website.editor.js | |
| parent | cf8f4415a733d124a87464ec7cdd1b8a2a406f28 (diff) | |
[FIX] website editor: Holding shift key and right arrow key works well, but unable to do the opposite. Can't select text from right side to left. Fix re-range.
Diffstat (limited to 'addons/website/static/src/js/website.editor.js')
| -rw-r--r-- | addons/website/static/src/js/website.editor.js | 46 |
1 files changed, 35 insertions, 11 deletions
diff --git a/addons/website/static/src/js/website.editor.js b/addons/website/static/src/js/website.editor.js index 031af63ea78..a916aa0b0ff 100644 --- a/addons/website/static/src/js/website.editor.js +++ b/addons/website/static/src/js/website.editor.js @@ -359,21 +359,25 @@ define(['summernote/summernote'], function () { ////////////////////////////////////////////////////////////////////////////////////////////////////////// /* fix ie and re-range to don't break snippet*/ + var initial_data = {}; function reRangeSelectKey (event) { - if ((!event.keyCode || event.shiftKey) && !$(event.target).is("input, textarea, select")) { + initial_data.range = null; + if (event.shiftKey && event.keyCode >= 37 && event.keyCode <= 40 && !$(event.target).is("input, textarea, select")) { var r = range.create(); if (r) { - r.reRange().select(); + var rng = r.reRange(event.keyCode <= 38); + if (r !== rng) { + rng.select(); + } } } } - function reRangeSelect (event, dx, dy) { var r = range.create(); if (!r || r.isCollapsed()) return; // check if the user move the caret on up or down - var data = r.reRange(dy < 0); + var data = r.reRange(dy < 0 || (dy === 0 && dx < 0)); if (data.sc !== r.sc || data.so !== r.so || data.ec !== r.ec || data.eo !== r.eo) { setTimeout(function () { @@ -385,19 +389,39 @@ define(['summernote/summernote'], function () { $(data.sc).closest('.o_editable').data('range', r); return r; } - var cursor_mousedown; $(document).mousedown(function (event) { - cursor_mousedown = event; + if (!$(event.target).closest(".o_editable").length) { + return; + } + var r = range.create(); + if (initial_data.range && event.shiftKey) { + initial_data.range.select(); + } + if (event.shiftKey) { + var rect = r && r.getClientRects(); + initial_data.rect = rect && rect.length ? rect[0] : { top: 0, left: 0 }; + } + initial_data.event = event; + }); + $(document).mouseup(function (event) { + if (!$(event.target).closest(".o_editable").length) { + return; + } + if (!initial_data.range || !event.shiftKey) { + setTimeout(function () { + initial_data.range = range.create(); + },0); + } }); function summernote_mouseup (event) { if ($(event.target).closest("#website-top-navbar, .note-popover").length) { return; } // don't rerange if simple click - if (cursor_mousedown) { - var dx = event.clientX-cursor_mousedown.clientX; - var dy = event.clientY-cursor_mousedown.clientY; - if (10 < Math.pow(dx, 2)+Math.pow(dy, 2) ) { + if (initial_data.event) { + var dx = event.clientX - (event.shiftKey ? initial_data.rect.left : initial_data.event.clientX); + var dy = event.clientY - (event.shiftKey ? initial_data.rect.top : initial_data.event.clientY); + if (10 < Math.pow(dx, 2)+Math.pow(dy, 2)) { reRangeSelect(event, dx, dy); } } @@ -484,7 +508,7 @@ define(['summernote/summernote'], function () { oLayoutInfo.editor.on('dblclick', 'img, .media_iframe_video, span.fa, i.fa, span.fa', function (event) { new website.editor.MediaDialog(oLayoutInfo.editor, event.target).appendTo(document.body); }); - $(document).on("keydown keyup", reRangeSelectKey); + $(document).on("keyup", reRangeSelectKey); var clone_data = false; var $node = oLayoutInfo.editor; |
