whatsappicloudtweetdeckhipchattelegramhangoutsslackgmailskypefacebook-workplaceoutlookemailmicrosoft-teamsdiscordmessengercustom-servicesmacoslinuxwindowsinbox
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
4.4 KiB
136 lines
4.4 KiB
9 years ago
|
/**
|
||
|
* @class Ext.util.Memento
|
||
|
* This class manages a set of captured properties from an object. These captured properties
|
||
|
* can later be restored to an object.
|
||
|
*/
|
||
|
Ext.define('Ext.util.Memento', (function () {
|
||
|
|
||
|
function captureOne (src, target, prop, prefix) {
|
||
|
src[prefix ? prefix + prop : prop] = target[prop];
|
||
|
}
|
||
|
|
||
|
function removeOne (src, target, prop) {
|
||
|
delete src[prop];
|
||
|
}
|
||
|
|
||
|
function restoreOne (src, target, prop, prefix) {
|
||
|
var name = prefix ? prefix + prop : prop,
|
||
|
value = src[name];
|
||
|
|
||
|
if (value || src.hasOwnProperty(name)) {
|
||
|
restoreValue(target, prop, value);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function restoreValue (target, prop, value) {
|
||
|
if (Ext.isDefined(value)) {
|
||
|
target[prop] = value;
|
||
|
} else {
|
||
|
delete target[prop];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function doMany (doOne, src, target, props, prefix) {
|
||
|
if (src) {
|
||
|
if (Ext.isArray(props)) {
|
||
|
var p, pLen = props.length;
|
||
|
for (p = 0; p < pLen; p++) {
|
||
|
doOne(src, target, props[p], prefix);
|
||
|
}
|
||
|
} else {
|
||
|
doOne(src, target, props, prefix);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return {
|
||
|
/**
|
||
|
* @property data
|
||
|
* The collection of captured properties.
|
||
|
* @private
|
||
|
*/
|
||
|
data: null,
|
||
|
|
||
|
/**
|
||
|
* @property target
|
||
|
* The default target object for capture/restore (passed to the constructor).
|
||
|
*/
|
||
|
target: null,
|
||
|
|
||
|
/**
|
||
|
* Creates a new memento and optionally captures properties from the target object.
|
||
|
* @param {Object} target The target from which to capture properties. If specified in the
|
||
|
* constructor, this target becomes the default target for all other operations.
|
||
|
* @param {String/String[]} props The property or array of properties to capture.
|
||
|
*/
|
||
|
constructor: function (target, props) {
|
||
|
this.data = {};
|
||
|
|
||
|
if (target) {
|
||
|
this.target = target;
|
||
|
if (props) {
|
||
|
this.capture(props);
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Captures the specified properties from the target object in this memento.
|
||
|
* @param {String/String[]} props The property or array of properties to capture.
|
||
|
* @param {Object} target The object from which to capture properties.
|
||
|
*/
|
||
|
capture: function (props, target, prefix) {
|
||
|
var me = this;
|
||
|
doMany(captureOne, me.data || (me.data = {}), target || me.target, props, prefix);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Removes the specified properties from this memento. These properties will not be
|
||
|
* restored later without re-capturing their values.
|
||
|
* @param {String/String[]} props The property or array of properties to remove.
|
||
|
*/
|
||
|
remove: function (props) {
|
||
|
doMany(removeOne, this.data, null, props);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Restores the specified properties from this memento to the target object.
|
||
|
* @param {String/String[]} props The property or array of properties to restore.
|
||
|
* @param {Boolean} clear True to remove the restored properties from this memento or
|
||
|
* false to keep them (default is true).
|
||
|
* @param {Object} target The object to which to restore properties.
|
||
|
*/
|
||
|
restore: function (props, clear, target, prefix) {
|
||
|
doMany(restoreOne, this.data, target || this.target, props, prefix);
|
||
|
if (clear !== false) {
|
||
|
this.remove(props);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Restores all captured properties in this memento to the target object.
|
||
|
* @param {Boolean} clear True to remove the restored properties from this memento or
|
||
|
* false to keep them (default is true).
|
||
|
* @param {Object} target The object to which to restore properties.
|
||
|
*/
|
||
|
restoreAll: function (clear, target) {
|
||
|
var me = this,
|
||
|
t = target || this.target,
|
||
|
data = me.data,
|
||
|
prop;
|
||
|
|
||
|
clear = clear !== false;
|
||
|
|
||
|
for (prop in data) {
|
||
|
if (data.hasOwnProperty(prop)) {
|
||
|
restoreValue(t, prop, data[prop]);
|
||
|
if (clear) {
|
||
|
delete data[prop];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
};
|
||
|
}()));
|