Manager.js
资源名称:oa.rar [点击查看]
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:4k
源码类别:
OA系统
开发平台:
Java
- /*
- Copyright (c) 2004-2006, The Dojo Foundation
- All Rights Reserved.
- Licensed under the Academic Free License version 2.1 or above OR the
- modified BSD license. For more information on Dojo licensing, see:
- http://dojotoolkit.org/community/licensing.shtml
- */
- dojo.provide("dojo.undo.Manager");
- dojo.require("dojo.lang.common");
- dojo.undo.Manager = function (parent) {
- this.clear();
- this._parent = parent;
- };
- dojo.extend(dojo.undo.Manager, {_parent:null, _undoStack:null, _redoStack:null, _currentManager:null, canUndo:false, canRedo:false, isUndoing:false, isRedoing:false, onUndo:function (manager, item) {
- }, onRedo:function (manager, item) {
- }, onUndoAny:function (manager, item) {
- }, onRedoAny:function (manager, item) {
- }, _updateStatus:function () {
- this.canUndo = this._undoStack.length > 0;
- this.canRedo = this._redoStack.length > 0;
- }, clear:function () {
- this._undoStack = [];
- this._redoStack = [];
- this._currentManager = this;
- this.isUndoing = false;
- this.isRedoing = false;
- this._updateStatus();
- }, undo:function () {
- if (!this.canUndo) {
- return false;
- }
- this.endAllTransactions();
- this.isUndoing = true;
- var top = this._undoStack.pop();
- if (top instanceof dojo.undo.Manager) {
- top.undoAll();
- } else {
- top.undo();
- }
- if (top.redo) {
- this._redoStack.push(top);
- }
- this.isUndoing = false;
- this._updateStatus();
- this.onUndo(this, top);
- if (!(top instanceof dojo.undo.Manager)) {
- this.getTop().onUndoAny(this, top);
- }
- return true;
- }, redo:function () {
- if (!this.canRedo) {
- return false;
- }
- this.isRedoing = true;
- var top = this._redoStack.pop();
- if (top instanceof dojo.undo.Manager) {
- top.redoAll();
- } else {
- top.redo();
- }
- this._undoStack.push(top);
- this.isRedoing = false;
- this._updateStatus();
- this.onRedo(this, top);
- if (!(top instanceof dojo.undo.Manager)) {
- this.getTop().onRedoAny(this, top);
- }
- return true;
- }, undoAll:function () {
- while (this._undoStack.length > 0) {
- this.undo();
- }
- }, redoAll:function () {
- while (this._redoStack.length > 0) {
- this.redo();
- }
- }, push:function (undo, redo, description) {
- if (!undo) {
- return;
- }
- if (this._currentManager == this) {
- this._undoStack.push({undo:undo, redo:redo, description:description});
- } else {
- this._currentManager.push.apply(this._currentManager, arguments);
- }
- this._redoStack = [];
- this._updateStatus();
- }, concat:function (manager) {
- if (!manager) {
- return;
- }
- if (this._currentManager == this) {
- for (var x = 0; x < manager._undoStack.length; x++) {
- this._undoStack.push(manager._undoStack[x]);
- }
- if (manager._undoStack.length > 0) {
- this._redoStack = [];
- }
- this._updateStatus();
- } else {
- this._currentManager.concat.apply(this._currentManager, arguments);
- }
- }, beginTransaction:function (description) {
- if (this._currentManager == this) {
- var mgr = new dojo.undo.Manager(this);
- mgr.description = description ? description : "";
- this._undoStack.push(mgr);
- this._currentManager = mgr;
- return mgr;
- } else {
- this._currentManager = this._currentManager.beginTransaction.apply(this._currentManager, arguments);
- }
- }, endTransaction:function (flatten) {
- if (this._currentManager == this) {
- if (this._parent) {
- this._parent._currentManager = this._parent;
- if (this._undoStack.length == 0 || flatten) {
- var idx = dojo.lang.find(this._parent._undoStack, this);
- if (idx >= 0) {
- this._parent._undoStack.splice(idx, 1);
- if (flatten) {
- for (var x = 0; x < this._undoStack.length; x++) {
- this._parent._undoStack.splice(idx++, 0, this._undoStack[x]);
- }
- this._updateStatus();
- }
- }
- }
- return this._parent;
- }
- } else {
- this._currentManager = this._currentManager.endTransaction.apply(this._currentManager, arguments);
- }
- }, endAllTransactions:function () {
- while (this._currentManager != this) {
- this.endTransaction();
- }
- }, getTop:function () {
- if (this._parent) {
- return this._parent.getTop();
- } else {
- return this;
- }
- }});