windowsinboxwhatsappicloudtweetdeckhipchattelegramhangoutsslackgmailskypefacebook-workplaceoutlookemailmicrosoft-teamsdiscordmessengercustom-servicesmacoslinux
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.
135 lines
4.4 KiB
135 lines
4.4 KiB
/** |
|
* @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]; |
|
} |
|
} |
|
} |
|
|
|
} |
|
}; |
|
}()));
|
|
|