mirror of
https://github.com/piskelapp/piskel.git
synced 2023-08-10 21:12:52 +03:00
Refactoring localStorageService into a prototype based class
This commit is contained in:
parent
b761750766
commit
de3fa1ea01
@ -1,96 +0,0 @@
|
|||||||
/*
|
|
||||||
* @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
|
|
||||||
* TODO(vince): Move that away from LocalStorageService
|
|
||||||
*/
|
|
||||||
var restoreFromLocalStorage_ = function() {
|
|
||||||
|
|
||||||
frameSheet_.deserialize(window.localStorage.snapShot);
|
|
||||||
frameSheet_.setCurrentFrameIndex(0);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @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);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
})();
|
|
@ -72,7 +72,8 @@ $.namespace("pskl");
|
|||||||
this.keyManager = new pskl.KeyManager();
|
this.keyManager = new pskl.KeyManager();
|
||||||
|
|
||||||
pskl.NotificationService.init();
|
pskl.NotificationService.init();
|
||||||
pskl.LocalStorageService.init(frameSheet);
|
this.localStorageService = new pskl.service.LocalStorageService(frameSheet);
|
||||||
|
this.localStorageService.init();
|
||||||
|
|
||||||
// TODO: Add comments
|
// TODO: Add comments
|
||||||
var framesheetId = this.getFramesheetIdFromUrl();
|
var framesheetId = this.getFramesheetIdFromUrl();
|
||||||
@ -81,7 +82,7 @@ $.namespace("pskl");
|
|||||||
this.loadFramesheetFromService(framesheetId);
|
this.loadFramesheetFromService(framesheetId);
|
||||||
} else {
|
} else {
|
||||||
this.finishInit();
|
this.finishInit();
|
||||||
pskl.LocalStorageService.displayRestoreNotification();
|
this.localStorageService.displayRestoreNotification();
|
||||||
}
|
}
|
||||||
|
|
||||||
var drawingLoop = new pskl.rendering.DrawingLoop();
|
var drawingLoop = new pskl.rendering.DrawingLoop();
|
||||||
|
181
js/service/LocalStorageService.js
Normal file
181
js/service/LocalStorageService.js
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
(function () {
|
||||||
|
var ns = $.namespace("pskl.service");
|
||||||
|
|
||||||
|
ns.LocalStorageService = function (framesheet_) {
|
||||||
|
|
||||||
|
if(framesheet_ === undefined) {
|
||||||
|
throw "Bad LocalStorageService initialization: <undefined frameSheet>";
|
||||||
|
}
|
||||||
|
this.framesheet = framesheet_;
|
||||||
|
this.localStorageThrottler_ = null;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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.framesheet.serialize();
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
ns.LocalStorageService.prototype.restoreFromLocalStorage_ = function() {
|
||||||
|
|
||||||
|
this.framesheet.deserialize(window.localStorage.snapShot);
|
||||||
|
this.framesheet.setCurrentFrameIndex(0);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
ns.LocalStorageService.prototype.cleanLocalStorage_ = function() {
|
||||||
|
console.log('[LocalStorage service]: Snapshot removed');
|
||||||
|
delete window.localStorage.snapShot;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
ns.LocalStorageService.prototype.init = function(framesheet_) {
|
||||||
|
|
||||||
|
$.subscribe(Events.LOCALSTORAGE_REQUEST, $.proxy(this.persistToLocalStorageRequest_, this));
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
ns.LocalStorageService.prototype.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": $.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)
|
||||||
|
}]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 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
|
||||||
|
* TODO(vince): Move that away from LocalStorageService
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
|
||||||
|
var restoreFromLocalStorage_ = function() {
|
||||||
|
|
||||||
|
frameSheet_.deserialize(window.localStorage.snapShot);
|
||||||
|
frameSheet_.setCurrentFrameIndex(0);
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @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);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};*/
|
||||||
|
})();
|
Loading…
Reference in New Issue
Block a user