Browse Source

Add more storage events

`storage:start:store`, `storage:start:load`, `storage🔚store`, `storage🔚load`
pull/1045/head
Artur Arseniev 8 years ago
parent
commit
87d752e471
  1. 5
      src/editor/index.js
  2. 38
      src/storage_manager/index.js
  3. 13
      src/storage_manager/model/RemoteStorage.js

5
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

38
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}

13
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) {

Loading…
Cancel
Save