diff --git a/src/editor/index.js b/src/editor/index.js index c4ba3cf7e..cf5881301 100644 --- a/src/editor/index.js +++ b/src/editor/index.js @@ -39,10 +39,13 @@ * * `styleManager:change:{propertyName}` - As above but for a specific style property * ## Storages * * `storage:start` - Before the storage request is started + * * `storage:start:store` - Before the store request. The object to store is passed as an argumnet (which you can edit) + * * `storage:start:load` - Before the load request. Items to load are passed as an argumnet (which you can edit) * * `storage:load` - Triggered when something was loaded from the storage, loaded object passed as an argumnet * * `storage:store` - Triggered when something is stored to the storage, stored object passed as an argumnet - * * `storage:store:before` - Before the store. The object to store is passed as an argumnet (which you can edit) * * `storage:end` - After the storage request is ended + * * `storage:end:store` - After the store request + * * `storage:end:load` - After the load request * * `storage:error` - On any error on storage request, passes the error as an argument * ## Canvas * * `canvas:dragenter` - When something is dragged inside the canvas, `DataTransfer` instance passed as an argument diff --git a/src/storage_manager/index.js b/src/storage_manager/index.js index c895597c7..1fd24cb98 100644 --- a/src/storage_manager/index.js +++ b/src/storage_manager/index.js @@ -14,6 +14,8 @@ module.exports = () => { let em; var storages = {}; var defaultStorages = {}; + const eventStart = 'storage:start'; + const eventEnd = 'storage:end'; return { /** @@ -175,13 +177,18 @@ module.exports = () => { store(data, clb) { const st = this.get(this.getCurrent()); const toStore = {}; - em && em.trigger('storage:store:before', data); + this.onStart('store', data); for (let key in data) { toStore[c.id + key] = data[key]; } - return st ? st.store(toStore, clb) : null; + return st + ? st.store(toStore, res => { + clb && clb(res); + this.onEnd('store', res); + }) + : null; }, /** @@ -202,9 +209,11 @@ module.exports = () => { var result = {}; if (typeof keys === 'string') keys = [keys]; + this.onStart('load', keys); - for (var i = 0, len = keys.length; i < len; i++) + for (var i = 0, len = keys.length; i < len; i++) { keysF.push(c.id + keys[i]); + } if (st) { st.load(keysF, res => { @@ -216,6 +225,7 @@ module.exports = () => { } clb && clb(result); + this.onEnd('load', result); }); } else { clb && clb(result); @@ -240,6 +250,28 @@ module.exports = () => { return this.get(this.getCurrent()); }, + /** + * On start callback + * @private + */ + onStart(ctx, data) { + if (em) { + em.trigger(eventStart); + ctx && em.trigger(`${eventStart}:${ctx}`, data); + } + }, + + /** + * On end callback + * @private + */ + onEnd(ctx, data) { + if (em) { + em.trigger(eventEnd); + ctx && em.trigger(`${eventEnd}:${ctx}`, data); + } + }, + /** * Check if autoload is possible * @return {Boolean} diff --git a/src/storage_manager/model/RemoteStorage.js b/src/storage_manager/model/RemoteStorage.js index da5a56b1c..fdf53aed3 100644 --- a/src/storage_manager/model/RemoteStorage.js +++ b/src/storage_manager/model/RemoteStorage.js @@ -21,7 +21,6 @@ module.exports = require('backbone').Model.extend({ const em = this.get('em'); const before = this.get('beforeSend'); before && before(); - em && em.trigger('storage:start'); }, /** @@ -33,17 +32,6 @@ module.exports = require('backbone').Model.extend({ const em = this.get('em'); console.error(err); em && em.trigger('storage:error', err); - this.onEnd(err); - }, - - /** - * Triggered after the request is ended - * @param {Object|string} res End result - * @private - */ - onEnd(res) { - const em = this.get('em'); - em && em.trigger('storage:end', res); }, /** @@ -60,7 +48,6 @@ module.exports = require('backbone').Model.extend({ complete && complete(res); clb && clb(res); em && em.trigger('storage:response', res); - this.onEnd(text); }, store(data, clb) {