diff --git a/SB.js b/SB.js index 336e7057..86582311 100644 --- a/SB.js +++ b/SB.js @@ -9,39 +9,37 @@ SB = { // Function setup +// Allows a map to be conveted into json form +// Currently used for local storage Map.prototype.toJSON = function() { return Array.from(this.entries()); }; +// Proxy Map changes to Map in SB.localConfig +// Saves the changes to chrome.storage in json form class MapIO { constructor(id) { - this.id = id; - this.map = SB.localConfig[this.id]; + // The name of the item in the array + this.id = id; + // A local copy of the map (SB.config.mapname.map) + this.map = SB.localConfig[this.id]; } - set(key, value) { + // Proxy to map this.map.set(key, value); - - SB.config.handler.set(undefined, this.id, encodeStoredItem(this.map)); - + // Store updated map locally + chrome.storage.sync.set({ + [this.id]: encodeStoredItem(this.map) + }); return this.map; } - + get(key) { - return this.map.get(key); - } - - has(key) { - return this.map.has(key); + return this.map.get(key); } - deleteProperty(key) { - if (this.map.has(key)) { - this.map.delete(key); - return true; - } else { - return false; - } + has(key) { + return this.map.has(key); } size() { @@ -49,9 +47,19 @@ class MapIO { } delete(key) { + // Proxy to map this.map.delete(key); + // Store updated map locally + chrome.storage.sync.set({ + [this.id]: encodeStoredItem(this.map) + }); + } - SB.config.handler.set(undefined, this.id, encodeStoredItem(this.map)); + clear() { + this.map.clear(); + chrome.storage.sync.set({ + [this.id]: encodeStoredItem(this.map) + }); } } @@ -62,8 +70,9 @@ class MapIO { * @param {*} data */ function encodeStoredItem(data) { - if(!(data instanceof Map)) return data; - return JSON.stringify(data); + // if data is Map convert to json for storing + if(!(data instanceof Map)) return data; + return JSON.stringify(data); } /** @@ -115,9 +124,9 @@ function configProxy() { }, deleteProperty(obj, prop) { - chrome.storage.sync.remove(prop); + chrome.storage.sync.remove(prop); } - + }; return new Proxy({handler}, handler);