diff options
| author | Christophe Matthieu <chm@odoo.com> | 2015-03-18 20:50:42 +0100 |
|---|---|---|
| committer | Christophe Matthieu <chm@odoo.com> | 2015-07-10 17:00:14 +0200 |
| commit | 7f2977183321958a5d0af1e6210eef955497b89a (patch) | |
| tree | 28815a44b4b20681a0de352aaf3345c58c72e980 /addons/web_editor/static/lib/summernote/src | |
| parent | 9221eb5b6df489cb3b345ca3c91cf5fe197c7286 (diff) | |
[FIX] summernote: wrong history managment fixed to use in normal field editor
Diffstat (limited to 'addons/web_editor/static/lib/summernote/src')
| -rw-r--r-- | addons/web_editor/static/lib/summernote/src/js/EventHandler.js | 2 | ||||
| -rw-r--r-- | addons/web_editor/static/lib/summernote/src/js/editing/History.js | 54 |
2 files changed, 48 insertions, 8 deletions
diff --git a/addons/web_editor/static/lib/summernote/src/js/EventHandler.js b/addons/web_editor/static/lib/summernote/src/js/EventHandler.js index fe9eaf334f2..068ceff735f 100644 --- a/addons/web_editor/static/lib/summernote/src/js/EventHandler.js +++ b/addons/web_editor/static/lib/summernote/src/js/EventHandler.js @@ -397,7 +397,7 @@ define([ var hToolbarAndPopoverClick = function (event) { var $btn = $(event.target).closest('[data-event]'); - if ($btn.length) { + if ($btn.length && !$btn.is(':disabled')) { var eventName = $btn.attr('data-event'), value = $btn.attr('data-value'), hide = $btn.attr('data-hide'); diff --git a/addons/web_editor/static/lib/summernote/src/js/editing/History.js b/addons/web_editor/static/lib/summernote/src/js/editing/History.js index ef8dd6016f1..5a3bb4dd176 100644 --- a/addons/web_editor/static/lib/summernote/src/js/editing/History.js +++ b/addons/web_editor/static/lib/summernote/src/js/editing/History.js @@ -1,10 +1,10 @@ -define(['summernote/core/range'], function (range) { +define(['summernote/core/range', 'summernote/core/dom'], function (range, dom) { /** * History * @class */ var History = function ($editable) { - var stack = [], stackOffset = -1; + var stack = [], stackOffset = -1, hasUndo = false; var editable = $editable[0]; var makeSnapshot = function () { @@ -13,7 +13,7 @@ define(['summernote/core/range'], function (range) { return { contents: $editable.html(), - bookmark: (rng ? rng.bookmark(editable) : emptyBookmark) + bookmark: (rng && dom.ancestor(rng.sc, dom.isEditable) ? rng.bookmark(editable) : emptyBookmark) }; }; @@ -27,12 +27,20 @@ define(['summernote/core/range'], function (range) { }; this.undo = function () { - if (0 < stackOffset) { + if (0 < stackOffset || (stack.length - 1 === stackOffset && hasUndo)) { + if (stack.length - 1 === stackOffset) { + this.recordUndo(); + } stackOffset--; applySnapshot(stack[stackOffset]); + hasUndo = !!stackOffset; } }; + this.hasUndo = function () { + return 0 < stackOffset || hasUndo; + }; + this.redo = function () { if (stack.length - 1 > stackOffset) { stackOffset++; @@ -40,16 +48,48 @@ define(['summernote/core/range'], function (range) { } }; + this.hasRedo = function () { + return stack.length - 1 > stackOffset; + }; + + var last; this.recordUndo = function () { - stackOffset++; + var key = event; + if (event && !event.metaKey && !event.ctrlKey && !event.altKey && event.type === "keydown") { + key = event.type + "-"; + if (event.which === 8 || event.which === 46) key += 'delete'; + else if (event.which === 13) key += 'enter'; + else key += 'other'; + if (key === last) return; + hasUndo = true; + } + last = key; // Wash out stack after stackOffset - if (stack.length > stackOffset) { - stack = stack.slice(0, stackOffset); + if (stack.length > stackOffset+1) { + stack = stack.slice(0, stackOffset+1); + } + + if (stack[stackOffset] && stack[stackOffset].contents === $editable.html()) { + return; } + stackOffset++; + // Create new snapshot and push it to the end stack.push(makeSnapshot()); + return true; + }; + + this.splitNext = function () { + last = false; + }; + + this.reset = function () { + last = false; + stack = []; + stackOffset = -1; + this.recordUndo(); }; // Create first undo stack |
