| Index: third_party/WebKit/Source/devtools/front_end/resources/DOMStorageModel.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/resources/DOMStorageModel.js b/third_party/WebKit/Source/devtools/front_end/resources/DOMStorageModel.js
|
| index 27da87cc6647863aa7ba0cdcfde97baa15634488..697012aa8ed1f62114bf1da2f81d5816aa4da733 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/resources/DOMStorageModel.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/resources/DOMStorageModel.js
|
| @@ -26,346 +26,321 @@
|
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
| * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| */
|
| -
|
| /**
|
| - * @constructor
|
| - * @extends {WebInspector.Object}
|
| - * @param {!WebInspector.DOMStorageModel} model
|
| - * @param {string} securityOrigin
|
| - * @param {boolean} isLocalStorage
|
| + * @unrestricted
|
| */
|
| -WebInspector.DOMStorage = function(model, securityOrigin, isLocalStorage)
|
| -{
|
| +WebInspector.DOMStorage = class extends WebInspector.Object {
|
| + /**
|
| + * @param {!WebInspector.DOMStorageModel} model
|
| + * @param {string} securityOrigin
|
| + * @param {boolean} isLocalStorage
|
| + */
|
| + constructor(model, securityOrigin, isLocalStorage) {
|
| + super();
|
| this._model = model;
|
| this._securityOrigin = securityOrigin;
|
| this._isLocalStorage = isLocalStorage;
|
| + }
|
| +
|
| + /**
|
| + * @param {string} securityOrigin
|
| + * @param {boolean} isLocalStorage
|
| + * @return {!DOMStorageAgent.StorageId}
|
| + */
|
| + static storageId(securityOrigin, isLocalStorage) {
|
| + return {securityOrigin: securityOrigin, isLocalStorage: isLocalStorage};
|
| + }
|
| +
|
| + /** @return {!DOMStorageAgent.StorageId} */
|
| + get id() {
|
| + return WebInspector.DOMStorage.storageId(this._securityOrigin, this._isLocalStorage);
|
| + }
|
| +
|
| + /** @return {string} */
|
| + get securityOrigin() {
|
| + return this._securityOrigin;
|
| + }
|
| +
|
| + /** @return {boolean} */
|
| + get isLocalStorage() {
|
| + return this._isLocalStorage;
|
| + }
|
| +
|
| + /**
|
| + * @param {function(?Protocol.Error, !Array.<!DOMStorageAgent.Item>):void=} callback
|
| + */
|
| + getItems(callback) {
|
| + this._model._agent.getDOMStorageItems(this.id, callback);
|
| + }
|
| +
|
| + /**
|
| + * @param {string} key
|
| + * @param {string} value
|
| + */
|
| + setItem(key, value) {
|
| + this._model._agent.setDOMStorageItem(this.id, key, value);
|
| + }
|
| +
|
| + /**
|
| + * @param {string} key
|
| + */
|
| + removeItem(key) {
|
| + this._model._agent.removeDOMStorageItem(this.id, key);
|
| + }
|
| };
|
|
|
| -/**
|
| - * @param {string} securityOrigin
|
| - * @param {boolean} isLocalStorage
|
| - * @return {!DOMStorageAgent.StorageId}
|
| - */
|
| -WebInspector.DOMStorage.storageId = function(securityOrigin, isLocalStorage)
|
| -{
|
| - return { securityOrigin: securityOrigin, isLocalStorage: isLocalStorage };
|
| -};
|
|
|
| /** @enum {symbol} */
|
| WebInspector.DOMStorage.Events = {
|
| - DOMStorageItemsCleared: Symbol("DOMStorageItemsCleared"),
|
| - DOMStorageItemRemoved: Symbol("DOMStorageItemRemoved"),
|
| - DOMStorageItemAdded: Symbol("DOMStorageItemAdded"),
|
| - DOMStorageItemUpdated: Symbol("DOMStorageItemUpdated")
|
| -};
|
| -
|
| -WebInspector.DOMStorage.prototype = {
|
| -
|
| - /** @return {!DOMStorageAgent.StorageId} */
|
| - get id()
|
| - {
|
| - return WebInspector.DOMStorage.storageId(this._securityOrigin, this._isLocalStorage);
|
| - },
|
| -
|
| - /** @return {string} */
|
| - get securityOrigin()
|
| - {
|
| - return this._securityOrigin;
|
| - },
|
| -
|
| - /** @return {boolean} */
|
| - get isLocalStorage()
|
| - {
|
| - return this._isLocalStorage;
|
| - },
|
| -
|
| - /**
|
| - * @param {function(?Protocol.Error, !Array.<!DOMStorageAgent.Item>):void=} callback
|
| - */
|
| - getItems: function(callback)
|
| - {
|
| - this._model._agent.getDOMStorageItems(this.id, callback);
|
| - },
|
| -
|
| - /**
|
| - * @param {string} key
|
| - * @param {string} value
|
| - */
|
| - setItem: function(key, value)
|
| - {
|
| - this._model._agent.setDOMStorageItem(this.id, key, value);
|
| - },
|
| -
|
| - /**
|
| - * @param {string} key
|
| - */
|
| - removeItem: function(key)
|
| - {
|
| - this._model._agent.removeDOMStorageItem(this.id, key);
|
| - },
|
| -
|
| - __proto__: WebInspector.Object.prototype
|
| + DOMStorageItemsCleared: Symbol('DOMStorageItemsCleared'),
|
| + DOMStorageItemRemoved: Symbol('DOMStorageItemRemoved'),
|
| + DOMStorageItemAdded: Symbol('DOMStorageItemAdded'),
|
| + DOMStorageItemUpdated: Symbol('DOMStorageItemUpdated')
|
| };
|
|
|
| /**
|
| - * @constructor
|
| - * @extends {WebInspector.SDKModel}
|
| - * @param {!WebInspector.Target} target
|
| - * @param {!WebInspector.SecurityOriginManager} securityOriginManager
|
| + * @unrestricted
|
| */
|
| -WebInspector.DOMStorageModel = function(target, securityOriginManager)
|
| -{
|
| - WebInspector.SDKModel.call(this, WebInspector.DOMStorageModel, target);
|
| +WebInspector.DOMStorageModel = class extends WebInspector.SDKModel {
|
| + /**
|
| + * @param {!WebInspector.Target} target
|
| + * @param {!WebInspector.SecurityOriginManager} securityOriginManager
|
| + */
|
| + constructor(target, securityOriginManager) {
|
| + super(WebInspector.DOMStorageModel, target);
|
|
|
| this._securityOriginManager = securityOriginManager;
|
| /** @type {!Object.<string, !WebInspector.DOMStorage>} */
|
| this._storages = {};
|
| this._agent = target.domstorageAgent();
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Target} target
|
| + * @return {!WebInspector.DOMStorageModel}
|
| + */
|
| + static fromTarget(target) {
|
| + var model = /** @type {?WebInspector.DOMStorageModel} */ (target.model(WebInspector.DOMStorageModel));
|
| + if (!model) {
|
| + model = new WebInspector.DOMStorageModel(target, WebInspector.SecurityOriginManager.fromTarget(target));
|
| + }
|
| + return model;
|
| + }
|
| +
|
| + enable() {
|
| + if (this._enabled)
|
| + return;
|
| +
|
| + this.target().registerDOMStorageDispatcher(new WebInspector.DOMStorageDispatcher(this));
|
| + this._securityOriginManager.addEventListener(
|
| + WebInspector.SecurityOriginManager.Events.SecurityOriginAdded, this._securityOriginAdded, this);
|
| + this._securityOriginManager.addEventListener(
|
| + WebInspector.SecurityOriginManager.Events.SecurityOriginRemoved, this._securityOriginRemoved, this);
|
| +
|
| + for (var securityOrigin of this._securityOriginManager.securityOrigins())
|
| + this._addOrigin(securityOrigin);
|
| + this._agent.enable();
|
| +
|
| + this._enabled = true;
|
| + }
|
| +
|
| + /**
|
| + * @param {string} origin
|
| + */
|
| + clearForOrigin(origin) {
|
| + if (!this._enabled)
|
| + return;
|
| + this._removeOrigin(origin);
|
| + this._addOrigin(origin);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Event} event
|
| + */
|
| + _securityOriginAdded(event) {
|
| + this._addOrigin(/** @type {string} */ (event.data));
|
| + }
|
| +
|
| + /**
|
| + * @param {string} securityOrigin
|
| + */
|
| + _addOrigin(securityOrigin) {
|
| + var localStorageKey = this._storageKey(securityOrigin, true);
|
| + console.assert(!this._storages[localStorageKey]);
|
| + var localStorage = new WebInspector.DOMStorage(this, securityOrigin, true);
|
| + this._storages[localStorageKey] = localStorage;
|
| + this.dispatchEventToListeners(WebInspector.DOMStorageModel.Events.DOMStorageAdded, localStorage);
|
| +
|
| + var sessionStorageKey = this._storageKey(securityOrigin, false);
|
| + console.assert(!this._storages[sessionStorageKey]);
|
| + var sessionStorage = new WebInspector.DOMStorage(this, securityOrigin, false);
|
| + this._storages[sessionStorageKey] = sessionStorage;
|
| + this.dispatchEventToListeners(WebInspector.DOMStorageModel.Events.DOMStorageAdded, sessionStorage);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Event} event
|
| + */
|
| + _securityOriginRemoved(event) {
|
| + this._removeOrigin(/** @type {string} */ (event.data));
|
| + }
|
| +
|
| + /**
|
| + * @param {string} securityOrigin
|
| + */
|
| + _removeOrigin(securityOrigin) {
|
| + var localStorageKey = this._storageKey(securityOrigin, true);
|
| + var localStorage = this._storages[localStorageKey];
|
| + console.assert(localStorage);
|
| + delete this._storages[localStorageKey];
|
| + this.dispatchEventToListeners(WebInspector.DOMStorageModel.Events.DOMStorageRemoved, localStorage);
|
| +
|
| + var sessionStorageKey = this._storageKey(securityOrigin, false);
|
| + var sessionStorage = this._storages[sessionStorageKey];
|
| + console.assert(sessionStorage);
|
| + delete this._storages[sessionStorageKey];
|
| + this.dispatchEventToListeners(WebInspector.DOMStorageModel.Events.DOMStorageRemoved, sessionStorage);
|
| + }
|
| +
|
| + /**
|
| + * @param {string} securityOrigin
|
| + * @param {boolean} isLocalStorage
|
| + * @return {string}
|
| + */
|
| + _storageKey(securityOrigin, isLocalStorage) {
|
| + return JSON.stringify(WebInspector.DOMStorage.storageId(securityOrigin, isLocalStorage));
|
| + }
|
| +
|
| + /**
|
| + * @param {!DOMStorageAgent.StorageId} storageId
|
| + */
|
| + _domStorageItemsCleared(storageId) {
|
| + var domStorage = this.storageForId(storageId);
|
| + if (!domStorage)
|
| + return;
|
| +
|
| + var eventData = {};
|
| + domStorage.dispatchEventToListeners(WebInspector.DOMStorage.Events.DOMStorageItemsCleared, eventData);
|
| + }
|
| +
|
| + /**
|
| + * @param {!DOMStorageAgent.StorageId} storageId
|
| + * @param {string} key
|
| + */
|
| + _domStorageItemRemoved(storageId, key) {
|
| + var domStorage = this.storageForId(storageId);
|
| + if (!domStorage)
|
| + return;
|
| +
|
| + var eventData = {key: key};
|
| + domStorage.dispatchEventToListeners(WebInspector.DOMStorage.Events.DOMStorageItemRemoved, eventData);
|
| + }
|
| +
|
| + /**
|
| + * @param {!DOMStorageAgent.StorageId} storageId
|
| + * @param {string} key
|
| + * @param {string} value
|
| + */
|
| + _domStorageItemAdded(storageId, key, value) {
|
| + var domStorage = this.storageForId(storageId);
|
| + if (!domStorage)
|
| + return;
|
| +
|
| + var eventData = {key: key, value: value};
|
| + domStorage.dispatchEventToListeners(WebInspector.DOMStorage.Events.DOMStorageItemAdded, eventData);
|
| + }
|
| +
|
| + /**
|
| + * @param {!DOMStorageAgent.StorageId} storageId
|
| + * @param {string} key
|
| + * @param {string} oldValue
|
| + * @param {string} value
|
| + */
|
| + _domStorageItemUpdated(storageId, key, oldValue, value) {
|
| + var domStorage = this.storageForId(storageId);
|
| + if (!domStorage)
|
| + return;
|
| +
|
| + var eventData = {key: key, oldValue: oldValue, value: value};
|
| + domStorage.dispatchEventToListeners(WebInspector.DOMStorage.Events.DOMStorageItemUpdated, eventData);
|
| + }
|
| +
|
| + /**
|
| + * @param {!DOMStorageAgent.StorageId} storageId
|
| + * @return {!WebInspector.DOMStorage}
|
| + */
|
| + storageForId(storageId) {
|
| + return this._storages[JSON.stringify(storageId)];
|
| + }
|
| +
|
| + /**
|
| + * @return {!Array.<!WebInspector.DOMStorage>}
|
| + */
|
| + storages() {
|
| + var result = [];
|
| + for (var id in this._storages)
|
| + result.push(this._storages[id]);
|
| + return result;
|
| + }
|
| };
|
|
|
| /** @enum {symbol} */
|
| WebInspector.DOMStorageModel.Events = {
|
| - DOMStorageAdded: Symbol("DOMStorageAdded"),
|
| - DOMStorageRemoved: Symbol("DOMStorageRemoved")
|
| -};
|
| -
|
| -WebInspector.DOMStorageModel.prototype = {
|
| - enable: function()
|
| - {
|
| - if (this._enabled)
|
| - return;
|
| -
|
| - this.target().registerDOMStorageDispatcher(new WebInspector.DOMStorageDispatcher(this));
|
| - this._securityOriginManager.addEventListener(WebInspector.SecurityOriginManager.Events.SecurityOriginAdded, this._securityOriginAdded, this);
|
| - this._securityOriginManager.addEventListener(WebInspector.SecurityOriginManager.Events.SecurityOriginRemoved, this._securityOriginRemoved, this);
|
| -
|
| - for (var securityOrigin of this._securityOriginManager.securityOrigins())
|
| - this._addOrigin(securityOrigin);
|
| - this._agent.enable();
|
| -
|
| - this._enabled = true;
|
| - },
|
| -
|
| - /**
|
| - * @param {string} origin
|
| - */
|
| - clearForOrigin: function(origin)
|
| - {
|
| - if (!this._enabled)
|
| - return;
|
| - this._removeOrigin(origin);
|
| - this._addOrigin(origin);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Event} event
|
| - */
|
| - _securityOriginAdded: function(event)
|
| - {
|
| - this._addOrigin(/** @type {string} */ (event.data));
|
| - },
|
| -
|
| - /**
|
| - * @param {string} securityOrigin
|
| - */
|
| - _addOrigin: function(securityOrigin)
|
| - {
|
| - var localStorageKey = this._storageKey(securityOrigin, true);
|
| - console.assert(!this._storages[localStorageKey]);
|
| - var localStorage = new WebInspector.DOMStorage(this, securityOrigin, true);
|
| - this._storages[localStorageKey] = localStorage;
|
| - this.dispatchEventToListeners(WebInspector.DOMStorageModel.Events.DOMStorageAdded, localStorage);
|
| -
|
| - var sessionStorageKey = this._storageKey(securityOrigin, false);
|
| - console.assert(!this._storages[sessionStorageKey]);
|
| - var sessionStorage = new WebInspector.DOMStorage(this, securityOrigin, false);
|
| - this._storages[sessionStorageKey] = sessionStorage;
|
| - this.dispatchEventToListeners(WebInspector.DOMStorageModel.Events.DOMStorageAdded, sessionStorage);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Event} event
|
| - */
|
| - _securityOriginRemoved: function(event)
|
| - {
|
| - this._removeOrigin(/** @type {string} */ (event.data));
|
| - },
|
| -
|
| - /**
|
| - * @param {string} securityOrigin
|
| - */
|
| - _removeOrigin: function(securityOrigin)
|
| - {
|
| - var localStorageKey = this._storageKey(securityOrigin, true);
|
| - var localStorage = this._storages[localStorageKey];
|
| - console.assert(localStorage);
|
| - delete this._storages[localStorageKey];
|
| - this.dispatchEventToListeners(WebInspector.DOMStorageModel.Events.DOMStorageRemoved, localStorage);
|
| -
|
| - var sessionStorageKey = this._storageKey(securityOrigin, false);
|
| - var sessionStorage = this._storages[sessionStorageKey];
|
| - console.assert(sessionStorage);
|
| - delete this._storages[sessionStorageKey];
|
| - this.dispatchEventToListeners(WebInspector.DOMStorageModel.Events.DOMStorageRemoved, sessionStorage);
|
| - },
|
| -
|
| - /**
|
| - * @param {string} securityOrigin
|
| - * @param {boolean} isLocalStorage
|
| - * @return {string}
|
| - */
|
| - _storageKey: function(securityOrigin, isLocalStorage)
|
| - {
|
| - return JSON.stringify(WebInspector.DOMStorage.storageId(securityOrigin, isLocalStorage));
|
| - },
|
| -
|
| - /**
|
| - * @param {!DOMStorageAgent.StorageId} storageId
|
| - */
|
| - _domStorageItemsCleared: function(storageId)
|
| - {
|
| - var domStorage = this.storageForId(storageId);
|
| - if (!domStorage)
|
| - return;
|
| -
|
| - var eventData = {};
|
| - domStorage.dispatchEventToListeners(WebInspector.DOMStorage.Events.DOMStorageItemsCleared, eventData);
|
| - },
|
| -
|
| - /**
|
| - * @param {!DOMStorageAgent.StorageId} storageId
|
| - * @param {string} key
|
| - */
|
| - _domStorageItemRemoved: function(storageId, key)
|
| - {
|
| - var domStorage = this.storageForId(storageId);
|
| - if (!domStorage)
|
| - return;
|
| -
|
| - var eventData = { key: key };
|
| - domStorage.dispatchEventToListeners(WebInspector.DOMStorage.Events.DOMStorageItemRemoved, eventData);
|
| - },
|
| -
|
| - /**
|
| - * @param {!DOMStorageAgent.StorageId} storageId
|
| - * @param {string} key
|
| - * @param {string} value
|
| - */
|
| - _domStorageItemAdded: function(storageId, key, value)
|
| - {
|
| - var domStorage = this.storageForId(storageId);
|
| - if (!domStorage)
|
| - return;
|
| -
|
| - var eventData = { key: key, value: value };
|
| - domStorage.dispatchEventToListeners(WebInspector.DOMStorage.Events.DOMStorageItemAdded, eventData);
|
| - },
|
| -
|
| - /**
|
| - * @param {!DOMStorageAgent.StorageId} storageId
|
| - * @param {string} key
|
| - * @param {string} oldValue
|
| - * @param {string} value
|
| - */
|
| - _domStorageItemUpdated: function(storageId, key, oldValue, value)
|
| - {
|
| - var domStorage = this.storageForId(storageId);
|
| - if (!domStorage)
|
| - return;
|
| -
|
| - var eventData = { key: key, oldValue: oldValue, value: value };
|
| - domStorage.dispatchEventToListeners(WebInspector.DOMStorage.Events.DOMStorageItemUpdated, eventData);
|
| - },
|
| -
|
| - /**
|
| - * @param {!DOMStorageAgent.StorageId} storageId
|
| - * @return {!WebInspector.DOMStorage}
|
| - */
|
| - storageForId: function(storageId)
|
| - {
|
| - return this._storages[JSON.stringify(storageId)];
|
| - },
|
| -
|
| - /**
|
| - * @return {!Array.<!WebInspector.DOMStorage>}
|
| - */
|
| - storages: function()
|
| - {
|
| - var result = [];
|
| - for (var id in this._storages)
|
| - result.push(this._storages[id]);
|
| - return result;
|
| - },
|
| -
|
| - __proto__: WebInspector.SDKModel.prototype
|
| + DOMStorageAdded: Symbol('DOMStorageAdded'),
|
| + DOMStorageRemoved: Symbol('DOMStorageRemoved')
|
| };
|
|
|
| /**
|
| - * @constructor
|
| * @implements {DOMStorageAgent.Dispatcher}
|
| - * @param {!WebInspector.DOMStorageModel} model
|
| + * @unrestricted
|
| */
|
| -WebInspector.DOMStorageDispatcher = function(model)
|
| -{
|
| +WebInspector.DOMStorageDispatcher = class {
|
| + /**
|
| + * @param {!WebInspector.DOMStorageModel} model
|
| + */
|
| + constructor(model) {
|
| this._model = model;
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {!DOMStorageAgent.StorageId} storageId
|
| + */
|
| + domStorageItemsCleared(storageId) {
|
| + this._model._domStorageItemsCleared(storageId);
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {!DOMStorageAgent.StorageId} storageId
|
| + * @param {string} key
|
| + */
|
| + domStorageItemRemoved(storageId, key) {
|
| + this._model._domStorageItemRemoved(storageId, key);
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {!DOMStorageAgent.StorageId} storageId
|
| + * @param {string} key
|
| + * @param {string} value
|
| + */
|
| + domStorageItemAdded(storageId, key, value) {
|
| + this._model._domStorageItemAdded(storageId, key, value);
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {!DOMStorageAgent.StorageId} storageId
|
| + * @param {string} key
|
| + * @param {string} oldValue
|
| + * @param {string} value
|
| + */
|
| + domStorageItemUpdated(storageId, key, oldValue, value) {
|
| + this._model._domStorageItemUpdated(storageId, key, oldValue, value);
|
| + }
|
| };
|
|
|
| -WebInspector.DOMStorageDispatcher.prototype = {
|
| -
|
| - /**
|
| - * @override
|
| - * @param {!DOMStorageAgent.StorageId} storageId
|
| - */
|
| - domStorageItemsCleared: function(storageId)
|
| - {
|
| - this._model._domStorageItemsCleared(storageId);
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @param {!DOMStorageAgent.StorageId} storageId
|
| - * @param {string} key
|
| - */
|
| - domStorageItemRemoved: function(storageId, key)
|
| - {
|
| - this._model._domStorageItemRemoved(storageId, key);
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @param {!DOMStorageAgent.StorageId} storageId
|
| - * @param {string} key
|
| - * @param {string} value
|
| - */
|
| - domStorageItemAdded: function(storageId, key, value)
|
| - {
|
| - this._model._domStorageItemAdded(storageId, key, value);
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @param {!DOMStorageAgent.StorageId} storageId
|
| - * @param {string} key
|
| - * @param {string} oldValue
|
| - * @param {string} value
|
| - */
|
| - domStorageItemUpdated: function(storageId, key, oldValue, value)
|
| - {
|
| - this._model._domStorageItemUpdated(storageId, key, oldValue, value);
|
| - },
|
| -};
|
| +WebInspector.DOMStorageModel._symbol = Symbol('DomStorage');
|
|
|
| -WebInspector.DOMStorageModel._symbol = Symbol("DomStorage");
|
|
|
| -/**
|
| - * @param {!WebInspector.Target} target
|
| - * @return {!WebInspector.DOMStorageModel}
|
| - */
|
| -WebInspector.DOMStorageModel.fromTarget = function(target)
|
| -{
|
| - var model = /** @type {?WebInspector.DOMStorageModel} */ (target.model(WebInspector.DOMStorageModel));
|
| - if (!model) {
|
| - model = new WebInspector.DOMStorageModel(target, WebInspector.SecurityOriginManager.fromTarget(target));
|
| - }
|
| - return model;
|
| -};
|
|
|