From a230d6929f65d67ddf33f7ca0b51ae1084dd18ce Mon Sep 17 00:00:00 2001 From: Kushagra Gour Date: Mon, 6 Nov 2017 10:23:43 +0530 Subject: [PATCH] Add a database proxy --- src/db.js | 27 +++++++++++++++++++++++++++ src/index.html | 1 + src/script.js | 43 ++++++++++++++++++++----------------------- src/utils.js | 2 ++ 4 files changed, 50 insertions(+), 23 deletions(-) create mode 100644 src/db.js diff --git a/src/db.js b/src/db.js new file mode 100644 index 0000000..7d81e71 --- /dev/null +++ b/src/db.js @@ -0,0 +1,27 @@ +(() => { + var local = { + get: (obj, cb) => { + if (typeof obj === 'string') { + setTimeout(() => cb(window.localStorage.getItem(obj)), 100); + } else { + const retVal = {}; + Object.keys(obj).forEach(key => { + let val = window.localStorage.getItem(key); + retVal[key] = + val === undefined || val === null ? obj[key] : JSON.parse(val); + }); + setTimeout(() => cb(retVal), 100); + } + }, + set: (obj, cb) => { + Object.keys(obj).forEach(key => { + window.localStorage.setItem(key, JSON.stringify(obj[key])); + }); + setTimeout(() => cb(), 100); + } + }; + window.db = { + local: chrome && chrome.storage ? chrome.storage.local : local, + sync: chrome && chrome.storage ? chrome.storage.sync : local + }; +})(); diff --git a/src/index.html b/src/index.html index 2c9803c..cc136d2 100644 --- a/src/index.html +++ b/src/index.html @@ -584,6 +584,7 @@ + diff --git a/src/script.js b/src/script.js index 50797c9..3bb7c92 100644 --- a/src/script.js +++ b/src/script.js @@ -302,7 +302,7 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal const d = deferred(); var obj = {}; obj[setting] = value; - chrome.storage.local.set(obj, d.resolve); + db.local.set(obj, d.resolve); return d.promise; } @@ -322,13 +322,13 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal }); // Push into the items hash if its a new item being saved if (isNewItem) { - chrome.storage.local.get( + db.local.get( { items: {} }, function(result) { result.items[currentItem.id] = true; - chrome.storage.local.set({ + db.local.set({ items: result.items }); } @@ -1008,13 +1008,11 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal if (js) { contents += '\n\n'; @@ -1089,15 +1087,14 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal // CSP from affecting it. writeFile('script.js', blobjs, function() { writeFile('preview.html', blob, function() { - const frameSrc = - 'filesystem:chrome-extension://' + - chrome.i18n.getMessage('@@extension_id') + - '/temporary/' + - 'preview.html'; + var origin = chrome.i18n.getMessage() + ? `chrome-extension://${chrome.i18n.getMessage('@@extension_id')}` + : `${location.origin}`; + var src = `filesystem:${origin}/temporary/preview.html`; if (scope.detachedWindow) { - scope.detachedWindow.postMessage(frame.src, '*'); + scope.detachedWindow.postMessage(src, '*'); } else { - frame.src = frameSrc; + frame.src = src; } }); }); @@ -2014,7 +2011,7 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal ) { hasSeenNotifications = true; notificationsBtn.classList.remove('has-new'); - chrome.storage.sync.set( + db.sync.set( { lastSeenVersion: version }, @@ -2307,7 +2304,7 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal $('#demo-frame').classList.remove('pointer-none'); }); - chrome.storage.local.get( + db.local.get( { layoutMode: 1, code: '' @@ -2322,7 +2319,7 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal ); // Get synced `preserveLastCode` setting to get back last code (or not). - chrome.storage.sync.get( + db.sync.get( { preserveLastCode: true, replaceNewTab: false, @@ -2349,7 +2346,7 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal if (result.preserveLastCode && lastCode) { unsavedEditCount = 0; if (lastCode.id) { - chrome.storage.local.get(lastCode.id, function(itemResult) { + db.local.get(lastCode.id, function(itemResult) { utils.log('Load item ', lastCode.id); currentItem = itemResult[lastCode.id]; refreshEditor(); @@ -2389,7 +2386,7 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal ); // Check for new version notifications - chrome.storage.sync.get( + db.sync.get( { lastSeenVersion: '' }, @@ -2401,7 +2398,7 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal trackEvent('ui', 'onboardModalSeen', version); document.cookie = 'onboarded=1'; } - chrome.storage.sync.set( + db.sync.set( { lastSeenVersion: version }, @@ -2409,7 +2406,7 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal ); // set some initial preferences on closing the onboard modal utils.once(document, 'overlaysClosed', function() { - chrome.storage.sync.set( + db.sync.set( { replaceNewTab: onboardShowInTabOptionBtn.classList.contains( 'selected' diff --git a/src/utils.js b/src/utils.js index ce68e50..0091128 100644 --- a/src/utils.js +++ b/src/utils.js @@ -180,4 +180,6 @@ log: log, once: once }; + + window.chrome.i18n = { getMessage: () => {} }; })();