Browse Source

Improve `storage:error` event and add 2 other events

Other events are `storage:error:load` and `storage:error:store`
pull/1042/merge
Artur Arseniev 9 years ago
parent
commit
eb404769ee
  1. 2
      src/editor/index.js
  2. 59
      src/storage_manager/index.js

2
src/editor/index.js

@ -48,6 +48,8 @@
* * `storage:end:store` - After the store request * * `storage:end:store` - After the store request
* * `storage:end:load` - After the load request * * `storage:end:load` - After the load request
* * `storage:error` - On any error on storage request, passes the error as an argument * * `storage:error` - On any error on storage request, passes the error as an argument
* * `storage:error:store` - Error on store request, passes the error as an argument
* * `storage:error:load` - Error on load request, passes the error as an argument
* ## Canvas * ## Canvas
* * `canvas:dragenter` - When something is dragged inside the canvas, `DataTransfer` instance passed as an argument * * `canvas:dragenter` - When something is dragged inside the canvas, `DataTransfer` instance passed as an argument
* * `canvas:dragover` - When something is dragging on canvas, `DataTransfer` instance passed as an argument * * `canvas:dragover` - When something is dragging on canvas, `DataTransfer` instance passed as an argument

59
src/storage_manager/index.js

@ -16,6 +16,7 @@ module.exports = () => {
var defaultStorages = {}; var defaultStorages = {};
const eventStart = 'storage:start'; const eventStart = 'storage:start';
const eventEnd = 'storage:end'; const eventEnd = 'storage:end';
const eventError = 'storage:error';
return { return {
/** /**
@ -111,15 +112,17 @@ module.exports = () => {
* @return {this} * @return {this}
* @example * @example
* storageManager.add('local2', { * storageManager.add('local2', {
* load: function(keys, clb) { * load: function(keys, clb, clbErr) {
* var res = {}; * var res = {};
* for (var i = 0, len = keys.length; i < len; i++){ * for (var i = 0, len = keys.length; i < len; i++){
* var v = localStorage.getItem(keys[i]); * var v = localStorage.getItem(keys[i]);
* if(v) res[keys[i]] = v; * if(v) res[keys[i]] = v;
* } * }
* clb(res); // might be called inside some async method * clb(res); // might be called inside some async method
* // In case of errors...
* // clbErr('Went something wrong');
* }, * },
* store: function(data, clb) { * store: function(data, clb, clbErr) {
* for(var key in data) * for(var key in data)
* localStorage.setItem(key, data[key]); * localStorage.setItem(key, data[key]);
* clb(); // might be called inside some async method * clb(); // might be called inside some async method
@ -184,10 +187,16 @@ module.exports = () => {
} }
return st return st
? st.store(toStore, res => { ? st.store(
clb && clb(res); toStore,
this.onEnd('store', res); res => {
}) clb && clb(res);
this.onEnd('store', res);
},
err => {
this.onError('store', err);
}
)
: null; : null;
}, },
@ -216,17 +225,23 @@ module.exports = () => {
} }
if (st) { if (st) {
st.load(keysF, res => { st.load(
// Restore keys name keysF,
var reg = new RegExp('^' + c.id + ''); res => {
for (var itemKey in res) { // Restore keys name
var itemKeyR = itemKey.replace(reg, ''); var reg = new RegExp('^' + c.id + '');
result[itemKeyR] = res[itemKey]; for (var itemKey in res) {
} var itemKeyR = itemKey.replace(reg, '');
result[itemKeyR] = res[itemKey];
}
clb && clb(result); clb && clb(result);
this.onEnd('load', result); this.onEnd('load', result);
}); },
err => {
this.onError('load', err);
}
);
} else { } else {
clb && clb(result); clb && clb(result);
} }
@ -272,6 +287,18 @@ module.exports = () => {
} }
}, },
/**
* On error callback
* @private
*/
onError(ctx, data) {
if (em) {
em.trigger(eventError, data);
ctx && em.trigger(`${eventError}:${ctx}`, data);
this.onEnd(ctx, data);
}
},
/** /**
* Check if autoload is possible * Check if autoload is possible
* @return {Boolean} * @return {Boolean}

Loading…
Cancel
Save