mirror of
https://github.com/piskelapp/piskel.git
synced 2023-08-10 21:12:52 +03:00
6528c7724b
!! NOT STABLE !! Initial implementation. No UI update yet. Check js/model/Piskel.js and js/model/Layer.js for an overview of the new API. Piskels can be saved on the existing service. Previous piskels cannot be loaded. This should be fixed soon.
88 lines
2.8 KiB
JavaScript
88 lines
2.8 KiB
JavaScript
(function () {
|
|
var ns = $.namespace("pskl.service");
|
|
|
|
ns.LocalStorageService = function (piskelController) {
|
|
|
|
if(piskelController === undefined) {
|
|
throw "Bad LocalStorageService initialization: <undefined piskelController>";
|
|
}
|
|
this.piskelController = piskelController;
|
|
this.localStorageThrottler_ = null;
|
|
};
|
|
|
|
/**
|
|
* @public
|
|
*/
|
|
ns.LocalStorageService.prototype.init = function(piskelController) {
|
|
$.subscribe(Events.LOCALSTORAGE_REQUEST, $.proxy(this.persistToLocalStorageRequest_, this));
|
|
};
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
ns.LocalStorageService.prototype.persistToLocalStorageRequest_ = function () {
|
|
// Persist to localStorage when drawing. We throttle localStorage accesses
|
|
// for high frequency drawing (eg mousemove).
|
|
if(this.localStorageThrottler_ !== null) {
|
|
window.clearTimeout(this.localStorageThrottler_);
|
|
}
|
|
this.localStorageThrottler_ = window.setTimeout($.proxy(function() {
|
|
this.persistToLocalStorage_();
|
|
this.localStorageThrottler_ = null;
|
|
}, this), 1000);
|
|
};
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
ns.LocalStorageService.prototype.persistToLocalStorage_ = function() {
|
|
|
|
console.log('[LocalStorage service]: Snapshot stored');
|
|
window.localStorage.snapShot = this.piskelController.serialize();
|
|
};
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
ns.LocalStorageService.prototype.restoreFromLocalStorage_ = function() {
|
|
|
|
this.piskelController.deserialize(window.localStorage.snapShot);
|
|
this.piskelController.setCurrentFrameIndex(0);
|
|
};
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
ns.LocalStorageService.prototype.cleanLocalStorage_ = function() {
|
|
console.log('[LocalStorage service]: Snapshot removed');
|
|
delete window.localStorage.snapShot;
|
|
};
|
|
|
|
/**
|
|
* @public
|
|
*/
|
|
ns.LocalStorageService.prototype.displayRestoreNotification = function() {
|
|
if(window.localStorage && window.localStorage.snapShot) {
|
|
var reloadLink = "<a href='#' class='localstorage-restore onclick='pskl.app.restoreFromLocalStorage()'>reload</a>";
|
|
var discardLink = "<a href='#' class='localstorage-discard' onclick='pskl.app.cleanLocalStorage()'>discard</a>";
|
|
var content = "Non saved version found. " + reloadLink + " or " + discardLink;
|
|
|
|
$.publish(Events.SHOW_NOTIFICATION, [{
|
|
"content": content,
|
|
"behavior": $.proxy(function(rootNode) {
|
|
rootNode = $(rootNode);
|
|
rootNode.click($.proxy(function(evt) {
|
|
var target = $(evt.target);
|
|
if(target.hasClass("localstorage-restore")) {
|
|
this.restoreFromLocalStorage_();
|
|
}
|
|
else if (target.hasClass("localstorage-discard")) {
|
|
this.cleanLocalStorage_();
|
|
}
|
|
$.publish(Events.HIDE_NOTIFICATION);
|
|
}, this));
|
|
}, this)
|
|
}]);
|
|
}
|
|
};
|
|
})(); |