1 <html><head><title>Roo/lib/UndoManager.js</title><link rel="stylesheet" type="text/css" href="../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty"><span class="jsdoc-comment">/**
2 * Originally based of this code... - refactored for Roo...
3 * https://github.com/aaalsaleh/undo-manager
6 * @author Abdulrahman Alsaleh
7 * @copyright 2015 Abdulrahman Alsaleh
8 * @license MIT License (c)
10 * Hackily modifyed by alan@roojs.com
17 * Documentation to be done....
22 * @class Roo.lib.UndoManager
23 * An undo manager implementation in JavaScript. It follows the W3C UndoManager and DOM Transaction
24 * Draft and the undocumented and disabled Mozilla Firefox's UndoManager implementation.
27 * <pre><code>
30 editor.undoManager = new Roo.lib.UndoManager(1000, editor);
32 </code></pre>
34 * For more information see this blog post with examples:
35 * <a href="http://www.cnitblog.com/seeyeah/archive/2011/12/30/38728.html/">DomHelper
36 - Create Elements using DOM, HTML fragments and Templates</a>.
38 * @param {Number} limit how far back to go ... use 1000?
39 * @param {Object} scope usually use document..
42 </span><span class="jsdoc-var">Roo.lib.UndoManager </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">limit</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">undoScopeHost</span><span class="jsdoc-syntax">)
44 </span><span class="jsdoc-var">this.stack </span><span class="jsdoc-syntax">= [];
45 </span><span class="jsdoc-var">this.limit </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">limit</span><span class="jsdoc-syntax">;
46 </span><span class="jsdoc-var">this.scope </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">undoScopeHost</span><span class="jsdoc-syntax">;
47 </span><span class="jsdoc-var">this.fireEvent </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">CustomEvent </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-string">'undefined' </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">undoScopeHost </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">undoScopeHost.dispatchEvent</span><span class="jsdoc-syntax">;
48 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">) {
49 </span><span class="jsdoc-var">this.bindEvents</span><span class="jsdoc-syntax">();
51 </span><span class="jsdoc-var">this.reset</span><span class="jsdoc-syntax">();
55 </span><span class="jsdoc-var">Roo.lib.UndoManager.prototype </span><span class="jsdoc-syntax">= {
57 </span><span class="jsdoc-var">limit </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
58 </span><span class="jsdoc-var">stack </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
59 </span><span class="jsdoc-var">scope </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
60 </span><span class="jsdoc-var">fireEvent </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
61 </span><span class="jsdoc-var">position </span><span class="jsdoc-syntax">: 0,
62 </span><span class="jsdoc-var">length </span><span class="jsdoc-syntax">: 0,
65 </span><span class="jsdoc-comment">/**
66 * To push and execute a transaction, the method undoManager.transact
67 * must be called by passing a transaction object as the first argument, and a merge
68 * flag as the second argument. A transaction object has the following properties:
71 <pre><code>
72 undoManager.transact({
74 execute: function() { ... },
75 undo: function() { ... },
76 // redo same as execute
77 redo: function() { this.execute(); }
81 undoManager.transact({
83 execute: function() { ... }, // this will be run...
84 undo: function() { ... }, // what to do when undo is run.
85 // redo same as execute
86 redo: function() { this.execute(); }
88 </code></pre>
91 * @param {Object} transaction The transaction to add to the stack.
92 * @return {String} The HTML fragment
96 </span><span class="jsdoc-var">transact </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">transaction</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">merge</span><span class="jsdoc-syntax">)
98 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">arguments.length </span><span class="jsdoc-syntax">< 2) {
99 </span><span class="jsdoc-keyword">throw new </span><span class="jsdoc-var">TypeError</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'Not enough arguments to UndoManager.transact.'</span><span class="jsdoc-syntax">);
102 </span><span class="jsdoc-var">transaction.execute</span><span class="jsdoc-syntax">();
104 </span><span class="jsdoc-var">this.stack.splice</span><span class="jsdoc-syntax">(0, </span><span class="jsdoc-var">this.position</span><span class="jsdoc-syntax">);
105 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">merge </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">this.length</span><span class="jsdoc-syntax">) {
106 </span><span class="jsdoc-var">this.stack</span><span class="jsdoc-syntax">[0]</span><span class="jsdoc-var">.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">transaction</span><span class="jsdoc-syntax">);
107 } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
108 </span><span class="jsdoc-var">this.stack.unshift</span><span class="jsdoc-syntax">([</span><span class="jsdoc-var">transaction</span><span class="jsdoc-syntax">]);
111 </span><span class="jsdoc-var">this.position </span><span class="jsdoc-syntax">= 0;
113 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.limit </span><span class="jsdoc-syntax">&& </span><span class="jsdoc-var">this.stack.length </span><span class="jsdoc-syntax">> </span><span class="jsdoc-var">this.limit</span><span class="jsdoc-syntax">) {
114 </span><span class="jsdoc-var">this.length </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.stack.length </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.limit</span><span class="jsdoc-syntax">;
115 } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
116 </span><span class="jsdoc-var">this.length </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.stack.length</span><span class="jsdoc-syntax">;
119 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">) {
120 </span><span class="jsdoc-var">this.scope.dispatchEvent</span><span class="jsdoc-syntax">(
121 </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">CustomEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'DOMTransaction'</span><span class="jsdoc-syntax">, {
122 </span><span class="jsdoc-var">detail</span><span class="jsdoc-syntax">: {
123 </span><span class="jsdoc-var">transactions</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.stack</span><span class="jsdoc-syntax">[0]</span><span class="jsdoc-var">.slice</span><span class="jsdoc-syntax">()
125 </span><span class="jsdoc-var">bubbles</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
126 </span><span class="jsdoc-var">cancelable</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false
127 </span><span class="jsdoc-syntax">})
131 </span><span class="jsdoc-comment">//Roo.log("transaction: pos:" + this.position + " len: " + this.length + " slen:" + this.stack.length);
134 </span><span class="jsdoc-syntax">},
136 </span><span class="jsdoc-var">undo </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">()
138 </span><span class="jsdoc-comment">//Roo.log("undo: pos:" + this.position + " len: " + this.length + " slen:" + this.stack.length);
140 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.position </span><span class="jsdoc-syntax">< </span><span class="jsdoc-var">this.length</span><span class="jsdoc-syntax">) {
141 </span><span class="jsdoc-keyword">for </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.stack</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">this.position</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.length </span><span class="jsdoc-syntax">- 1; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">>= 0; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">--) {
142 </span><span class="jsdoc-var">this.stack</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">this.position</span><span class="jsdoc-syntax">][</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.undo</span><span class="jsdoc-syntax">();
144 </span><span class="jsdoc-var">this.position</span><span class="jsdoc-syntax">++;
146 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">) {
147 </span><span class="jsdoc-var">this.scope.dispatchEvent</span><span class="jsdoc-syntax">(
148 </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">CustomEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'undo'</span><span class="jsdoc-syntax">, {
149 </span><span class="jsdoc-var">detail</span><span class="jsdoc-syntax">: {
150 </span><span class="jsdoc-var">transactions</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.stack</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">this.position </span><span class="jsdoc-syntax">- 1]</span><span class="jsdoc-var">.slice</span><span class="jsdoc-syntax">()
152 </span><span class="jsdoc-var">bubbles</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
153 </span><span class="jsdoc-var">cancelable</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false
154 </span><span class="jsdoc-syntax">})
160 </span><span class="jsdoc-var">redo </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">()
162 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.position </span><span class="jsdoc-syntax">> 0) {
163 </span><span class="jsdoc-keyword">for </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">= 0, </span><span class="jsdoc-var">n </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.stack</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">this.position </span><span class="jsdoc-syntax">- 1]</span><span class="jsdoc-var">.length</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">< </span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++) {
164 </span><span class="jsdoc-var">this.stack</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">this.position </span><span class="jsdoc-syntax">- 1][</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.redo</span><span class="jsdoc-syntax">();
166 </span><span class="jsdoc-var">this.position</span><span class="jsdoc-syntax">--;
168 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.fireEvent</span><span class="jsdoc-syntax">) {
169 </span><span class="jsdoc-var">this.scope.dispatchEvent</span><span class="jsdoc-syntax">(
170 </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">CustomEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'redo'</span><span class="jsdoc-syntax">, {
171 </span><span class="jsdoc-var">detail</span><span class="jsdoc-syntax">: {
172 </span><span class="jsdoc-var">transactions</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.stack</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">this.position</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.slice</span><span class="jsdoc-syntax">()
174 </span><span class="jsdoc-var">bubbles</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
175 </span><span class="jsdoc-var">cancelable</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false
176 </span><span class="jsdoc-syntax">})
182 </span><span class="jsdoc-var">item </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">)
184 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">index </span><span class="jsdoc-syntax">>= 0 && </span><span class="jsdoc-var">index </span><span class="jsdoc-syntax">< </span><span class="jsdoc-var">this.length</span><span class="jsdoc-syntax">) {
185 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this.stack</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">index</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.slice</span><span class="jsdoc-syntax">();
187 </span><span class="jsdoc-keyword">return null</span><span class="jsdoc-syntax">;
190 </span><span class="jsdoc-var">clearUndo </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">() {
191 </span><span class="jsdoc-var">this.stack.length </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.length </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.position</span><span class="jsdoc-syntax">;
194 </span><span class="jsdoc-var">clearRedo </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">() {
195 </span><span class="jsdoc-var">this.stack.splice</span><span class="jsdoc-syntax">(0, </span><span class="jsdoc-var">this.position</span><span class="jsdoc-syntax">);
196 </span><span class="jsdoc-var">this.position </span><span class="jsdoc-syntax">= 0;
197 </span><span class="jsdoc-var">this.length </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.stack.length</span><span class="jsdoc-syntax">;
199 </span><span class="jsdoc-comment">/**
200 * Reset the undo - probaly done on load to clear all history.
202 </span><span class="jsdoc-var">reset </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
204 </span><span class="jsdoc-var">this.stack </span><span class="jsdoc-syntax">= [];
205 </span><span class="jsdoc-var">this.position </span><span class="jsdoc-syntax">= 0;
206 </span><span class="jsdoc-var">this.length </span><span class="jsdoc-syntax">= 0;
207 </span><span class="jsdoc-var">this.current_html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.scope.innerHTML</span><span class="jsdoc-syntax">;
208 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.timer </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">) {
209 </span><span class="jsdoc-var">clearTimeout</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.timer</span><span class="jsdoc-syntax">);
211 </span><span class="jsdoc-var">this.timer </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
212 </span><span class="jsdoc-var">this.merge </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
213 </span><span class="jsdoc-var">this.addEvent</span><span class="jsdoc-syntax">();
216 </span><span class="jsdoc-var">current_html </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">,
217 </span><span class="jsdoc-var">timer </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
218 </span><span class="jsdoc-var">merge </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
221 </span><span class="jsdoc-comment">// this will handle the undo/redo on the element.?
222 </span><span class="jsdoc-var">bindEvents </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
224 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.scope</span><span class="jsdoc-syntax">;
225 </span><span class="jsdoc-var">el.undoManager </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
228 </span><span class="jsdoc-var">this.scope.addEventListener</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'keydown'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
229 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">((</span><span class="jsdoc-var">e.ctrlKey </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">e.metaKey</span><span class="jsdoc-syntax">) && </span><span class="jsdoc-var">e.keyCode </span><span class="jsdoc-syntax">=== 90) {
230 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e.shiftKey</span><span class="jsdoc-syntax">) {
231 </span><span class="jsdoc-var">el.undoManager.redo</span><span class="jsdoc-syntax">(); </span><span class="jsdoc-comment">// Ctrl/Command + Shift + Z
232 </span><span class="jsdoc-syntax">} </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
233 </span><span class="jsdoc-var">el.undoManager.undo</span><span class="jsdoc-syntax">(); </span><span class="jsdoc-comment">// Ctrl/Command + Z
234 </span><span class="jsdoc-syntax">}
236 </span><span class="jsdoc-var">e.preventDefault</span><span class="jsdoc-syntax">();
239 </span><span class="jsdoc-comment">/// ignore keyup..
240 </span><span class="jsdoc-var">this.scope.addEventListener</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'keyup'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
241 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">((</span><span class="jsdoc-var">e.ctrlKey </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">e.metaKey</span><span class="jsdoc-syntax">) && </span><span class="jsdoc-var">e.keyCode </span><span class="jsdoc-syntax">=== 90) {
242 </span><span class="jsdoc-var">e.preventDefault</span><span class="jsdoc-syntax">();
248 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">t </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
250 </span><span class="jsdoc-var">el.addEventListener</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'input'</span><span class="jsdoc-syntax">, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
251 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el.innerHTML </span><span class="jsdoc-syntax">== </span><span class="jsdoc-var">t.current_html</span><span class="jsdoc-syntax">) {
252 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
254 </span><span class="jsdoc-comment">// only record events every second.
255 </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">t.timer </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">) {
256 </span><span class="jsdoc-var">clearTimeout</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">t.timer</span><span class="jsdoc-syntax">);
257 </span><span class="jsdoc-var">t.timer </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
259 </span><span class="jsdoc-var">t.timer </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">setTimeout</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">() { </span><span class="jsdoc-var">t.merge </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">; }, 1000);
261 </span><span class="jsdoc-var">t.addEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">t.merge</span><span class="jsdoc-syntax">);
262 </span><span class="jsdoc-var">t.merge </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// ignore changes happening every second..
263 </span><span class="jsdoc-syntax">});
265 </span><span class="jsdoc-comment">/**
266 * Manually add an event.
267 * Normall called without arguements - and it will just get added to the stack.
271 </span><span class="jsdoc-var">addEvent </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">merge</span><span class="jsdoc-syntax">)
273 </span><span class="jsdoc-comment">//Roo.log("undomanager +" + (merge ? 'Y':'n'));
274 // not sure if this should clear the timer
275 </span><span class="jsdoc-var">merge </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">merge</span><span class="jsdoc-syntax">) == </span><span class="jsdoc-string">'undefined' </span><span class="jsdoc-syntax">? </span><span class="jsdoc-keyword">false </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">merge</span><span class="jsdoc-syntax">;
277 </span><span class="jsdoc-var">this.scope.undoManager.transact</span><span class="jsdoc-syntax">({
278 </span><span class="jsdoc-var">scope </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.scope</span><span class="jsdoc-syntax">,
279 </span><span class="jsdoc-var">oldHTML</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.current_html</span><span class="jsdoc-syntax">,
280 </span><span class="jsdoc-var">newHTML</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.scope.innerHTML</span><span class="jsdoc-syntax">,
281 </span><span class="jsdoc-comment">// nothing to execute (content already changed when input is fired)
282 </span><span class="jsdoc-var">execute</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">() { },
283 </span><span class="jsdoc-var">undo</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">() {
284 </span><span class="jsdoc-var">this.scope.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.current_html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.oldHTML</span><span class="jsdoc-syntax">;
286 </span><span class="jsdoc-var">redo</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">() {
287 </span><span class="jsdoc-var">this.scope.innerHTML </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.current_html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.newHTML</span><span class="jsdoc-syntax">;
289 }, </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">); </span><span class="jsdoc-comment">//merge);
291 </span><span class="jsdoc-var">this.merge </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">merge</span><span class="jsdoc-syntax">;
293 </span><span class="jsdoc-var">this.current_html </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.scope.innerHTML</span><span class="jsdoc-syntax">;
302 </span></code></body></html>