UNPKG

summernote-webpack

Version:
110 lines (92 loc) 2.54 kB
define(['summernote/base/core/range'], function (range) { /** * @class editing.History * * Editor History * */ var History = function ($editable) { var stack = [], stackOffset = -1; var editable = $editable[0]; var makeSnapshot = function () { var rng = range.create(editable); var emptyBookmark = {s: {path: [], offset: 0}, e: {path: [], offset: 0}}; return { contents: $editable.html(), bookmark: (rng ? rng.bookmark(editable) : emptyBookmark) }; }; var applySnapshot = function (snapshot) { if (snapshot.contents !== null) { $editable.html(snapshot.contents); } if (snapshot.bookmark !== null) { range.createFromBookmark(editable, snapshot.bookmark).select(); } }; /** * @method rewind * Rewinds the history stack back to the first snapshot taken. * Leaves the stack intact, so that "Redo" can still be used. */ this.rewind = function () { // Create snap shot if not yet recorded if ($editable.html() !== stack[stackOffset].contents) { this.recordUndo(); } // Return to the first available snapshot. stackOffset = 0; // Apply that snapshot. applySnapshot(stack[stackOffset]); }; /** * @method reset * Resets the history stack completely; reverting to an empty editor. */ this.reset = function () { // Clear the stack. stack = []; // Restore stackOffset to its original value. stackOffset = -1; // Clear the editable area. $editable.html(''); // Record our first snapshot (of nothing). this.recordUndo(); }; /** * undo */ this.undo = function () { // Create snap shot if not yet recorded if ($editable.html() !== stack[stackOffset].contents) { this.recordUndo(); } if (0 < stackOffset) { stackOffset--; applySnapshot(stack[stackOffset]); } }; /** * redo */ this.redo = function () { if (stack.length - 1 > stackOffset) { stackOffset++; applySnapshot(stack[stackOffset]); } }; /** * recorded undo */ this.recordUndo = function () { stackOffset++; // Wash out stack after stackOffset if (stack.length > stackOffset) { stack = stack.slice(0, stackOffset); } // Create new snapshot and push it to the end stack.push(makeSnapshot()); }; }; return History; });