<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>The source code</title> <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" /> <script type="text/javascript" src="../resources/prettify/prettify.js"></script> <style type="text/css"> .highlight { display: block; background-color: #ddd; } </style> <script type="text/javascript"> function highlight() { document.getElementById(location.hash.replace(/#/, "")).className = "highlight"; } </script> </head> <body onload="prettyPrint(); highlight();"> <pre class="prettyprint lang-js"><span id='Ext-util-Memento'>/** </span> * @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 { <span id='Ext-util-Memento-property-data'> /** </span> * @property data * The collection of captured properties. * @private */ data: null, <span id='Ext-util-Memento-property-target'> /** </span> * @property target * The default target object for capture/restore (passed to the constructor). */ target: null, <span id='Ext-util-Memento-method-constructor'> /** </span> * 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) { if (target) { this.target = target; if (props) { this.capture(props); } } }, <span id='Ext-util-Memento-method-capture'> /** </span> * 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); }, <span id='Ext-util-Memento-method-remove'> /** </span> * 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); }, <span id='Ext-util-Memento-method-restore'> /** </span> * 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); } }, <span id='Ext-util-Memento-method-restoreAll'> /** </span> * 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; for (prop in data) { if (data.hasOwnProperty(prop)) { restoreValue(t, prop, data[prop]); } } if (clear !== false) { delete me.data; } } }; }())); </pre> </body> </html>