summaryrefslogtreecommitdiff
path: root/addons/web_editor/static/lib/summernote/src/js
diff options
context:
space:
mode:
authorChristophe Matthieu <chm@odoo.com>2015-03-18 20:50:42 +0100
committerChristophe Matthieu <chm@odoo.com>2015-07-10 17:00:14 +0200
commit7f2977183321958a5d0af1e6210eef955497b89a (patch)
tree28815a44b4b20681a0de352aaf3345c58c72e980 /addons/web_editor/static/lib/summernote/src/js
parent9221eb5b6df489cb3b345ca3c91cf5fe197c7286 (diff)
[FIX] summernote: wrong history managment fixed to use in normal field editor
Diffstat (limited to 'addons/web_editor/static/lib/summernote/src/js')
-rw-r--r--addons/web_editor/static/lib/summernote/src/js/EventHandler.js2
-rw-r--r--addons/web_editor/static/lib/summernote/src/js/editing/History.js54
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