glitch-images/scripts/workers/settingsworker.js
2015-12-23 23:09:12 +01:00

91 lines
1.9 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

importScripts( '../lib/localforage.nopromises.js' );
var settings;
var defaultSettings;
var storageKey = 'settings';
self.addEventListener( 'message', receivedMessageEvent, false );
function receivedMessageEvent ( event ) {
if ( event && event.data ) {
if ( event.data.load ) {
load();
}
if ( event.data.save ) {
save( event.data.save );
}
if ( event.data.setStorageKey ) {
setStorageKey( event.data.setStorageKey );
}
if ( event.data.setDefaultSettings ) {
setDefaultSettings( event.data.setDefaultSettings );
}
}
}
function sendMessage ( type, data ) {
if ( typeof type === 'string' ) {
if ( typeof data === 'undefined' ) {
data = type;
}
var message = { };
message[type] = data;
self.postMessage( message );
}
}
function sendError ( err ) {
sendMessage( 'error', err );
}
function setStorageKey ( newKey ) {
if ( newKey ) {
storageKey = newKey;
}
}
function setDefaultSettings ( newDefaultSettings ) {
if ( newDefaultSettings ) {
defaultSettings = newDefaultSettings;
}
}
function load () {
localforage.getItem( storageKey, function ( err, loadedSettings ) {
if ( err ) {
sendError( 'settings.error.load' );
console && console.log( 'localforage error', err );
} else {
if ( ! loadedSettings && defaultSettings ) {
settings = defaultSettings;
save( defaultSettings );
} else {
settings = loadedSettings;
sendMessage( 'update', settings );
}
}
} );
}
function save ( newSettings ) {
if ( newSettings ) {
localforage.setItem( storageKey, newSettings, function ( err, savedSettings ) {
if ( err ) {
sendError( 'settings.error.save' );
console && console.log( 'localforage error', err );
} else {
if ( savedSettings ) {
settings = savedSettings || defaultSettings;
sendMessage( 'update', settings );
} else {
console && console.log( 'no data was saved', savedSettings );
}
}
} );
}
}