/* * @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: "; } 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 = "reload"; var discardLink = "discard"; 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); }); } }]); } } }; })();