| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 | <!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>
 |