mirror of
https://github.com/piskelapp/piskel.git
synced 2023-08-10 21:12:52 +03:00
d7044dc44d
Partial cleanup of piskel: new events and constant move palette and color picker in ToolSelector create Notifcation.js and move user message in it create LocalStorageService and move LS stuff in it
95 lines
2.6 KiB
JavaScript
95 lines
2.6 KiB
JavaScript
/*
|
|
* @provide pskl.LocalStrageService
|
|
*
|
|
* @require Constants
|
|
* @require Events
|
|
*/
|
|
$.namespace("pskl");
|
|
|
|
pskl.LocalStorageService = (function() {
|
|
|
|
var frameSheet_;
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
var localStorageThrottler_ = null;
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
var persistToLocalStorageRequest_ = function() {
|
|
// Persist to localStorage when drawing. We throttle localStorage accesses
|
|
// for high frequency drawing (eg mousemove).
|
|
if(localStorageThrottler_ != null) {
|
|
window.clearTimeout(localStorageThrottler_);
|
|
}
|
|
localStorageThrottler_ = window.setTimeout(function() {
|
|
persistToLocalStorage_();
|
|
localStorageThrottler_ = null;
|
|
}, 1000);
|
|
};
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
var persistToLocalStorage_ = function() {
|
|
console.log('[LocalStorage service]: Snapshot stored')
|
|
window.localStorage['snapShot'] = frameSheet_.serialize();
|
|
};
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
var restoreFromLocalStorage_ = function() {
|
|
frameSheet_.deserialize(window.localStorage['snapShot']);
|
|
// Model updated, redraw everything:
|
|
$.publish(Events.REFRESH);
|
|
};
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
var cleanLocalStorage_ = function() {
|
|
console.log('[LocalStorage service]: Snapshot removed')
|
|
delete window.localStorage['snapShot'];
|
|
};
|
|
|
|
return {
|
|
init: function(frameSheet) {
|
|
|
|
if(frameSheet == undefined) {
|
|
throw "Bad LocalStorageService initialization: <undefined frameSheet>"
|
|
}
|
|
frameSheet_ = frameSheet;
|
|
|
|
$.subscribe(Events.LOCALSTORAGE_REQUEST, persistToLocalStorageRequest_);
|
|
},
|
|
|
|
// TODO(vincz): Find a good place to put this UI rendering, a service should not render UI.
|
|
displayRestoreNotification: function() {
|
|
if(window.localStorage && window.localStorage['snapShot']) {
|
|
var reloadLink = "<a href='#' class='localstorage-restore onclick='piskel.restoreFromLocalStorage()'>reload</a>";
|
|
var discardLink = "<a href='#' class='localstorage-discard' onclick='piskel.cleanLocalStorage()'>discard</a>";
|
|
var content = "Non saved version found. " + reloadLink + " or " + discardLink;
|
|
|
|
$.publish(Events.SHOW_NOTIFICATION, [{
|
|
"content": content,
|
|
"behavior": function(rootNode) {
|
|
rootNode = $(rootNode);
|
|
rootNode.click(function(evt) {
|
|
var target = $(evt.target);
|
|
if(target.hasClass("localstorage-restore")) {
|
|
restoreFromLocalStorage_();
|
|
}
|
|
else if (target.hasClass("localstorage-discard")) {
|
|
cleanLocalStorage_();
|
|
}
|
|
$.publish(Events.HIDE_NOTIFICATION);
|
|
});
|
|
}
|
|
}]);
|
|
}
|
|
}
|
|
};
|
|
})(); |