From 53c583464d29cea40323d7328487843292b6fdb0 Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Thu, 23 Aug 2018 13:57:19 +0300 Subject: [PATCH] Simplify code --- manifest.json | 1 - options.html | 1 + options.js | 81 ++++++++++++++++++++------------------------------- storage.js | 24 +++++++++++++++ 4 files changed, 56 insertions(+), 51 deletions(-) create mode 100644 storage.js diff --git a/manifest.json b/manifest.json index 0bb8cda..1b9bf19 100644 --- a/manifest.json +++ b/manifest.json @@ -15,7 +15,6 @@ "permissions": [ "activeTab", "notifications", - "tabs", "storage", "" ], diff --git a/options.html b/options.html index 8f18f54..58fbec7 100644 --- a/options.html +++ b/options.html @@ -35,6 +35,7 @@ + diff --git a/options.js b/options.js index 10a648a..ff6c3f2 100644 --- a/options.js +++ b/options.js @@ -5,51 +5,33 @@ const PATTERN_ROW = (addr, pattern) => ` `; +function defaultPatterns() { + return [ + { server: '', pattern: '.*' }, + ]; +} + +function setPatterns(patterns) { + if (!patterns || patterns.length === 0) { + patterns = defaultPatterns(); + } + + console.log('PATTERNS', patterns); + + var reducer = (acc, item) => acc + PATTERN_ROW(item.server, item.pattern); + + var html = patterns.reduce(reducer, ''); + + document.querySelector(".js-pattern-rows").innerHTML = html; +} + function restoreOptions() { - - function parseJsonPatterns(jsonPatterns) { - console.log('JSON PATTERNS', jsonPatterns); - - if (!jsonPatterns.patterns) { - return []; + PatternStorage.get().then( + setPatterns, + (error) => { + console.log(`Error: ${error}`) } - try { - return JSON.parse(jsonPatterns.patterns); - } catch (e) { - return []; - } - } - - function defaultPatterns() { - return [ - {server: '', pattern: '.*'}, - ]; - } - - function setPatterns(jsonPatterns) { - patterns = parseJsonPatterns(jsonPatterns); - - if (patterns.length === 0) { - patterns = defaultPatterns(); - } - - console.log('PATTERNS', patterns); - - var html = ''; - - patterns.forEach(item => { - html += PATTERN_ROW(item.server, item.pattern); - }); - - document.querySelector(".js-pattern-rows").innerHTML = html; - } - - function onError(error) { - console.log(`Error: ${error}`); - } - - var getting = browser.storage.local.get("patterns"); - getting.then(setPatterns, onError); + ); } function saveOptions(evt) { @@ -59,19 +41,18 @@ function saveOptions(evt) { rows.forEach(row => { var server = row.querySelector('[name="server"]').value; var pattern = row.querySelector('[name="pattern"]').value; - patterns.push({server: server, pattern: pattern}); + if (server) { + patterns.push({server: server, pattern: pattern}); + } }); - console.log('PATTERNS', patterns); - - browser.storage.local.set({ patterns: JSON.stringify(patterns) }); + PatternStorage.set(patterns); } function addRow(evt) { evt.preventDefault(); - var html = document.querySelector(".js-pattern-rows").innerHTML; - html += PATTERN_ROW('', ''); - document.querySelector(".js-pattern-rows").innerHTML = html; + var el = document.querySelector(".js-pattern-rows"); + el.innerHTML += PATTERN_ROW('', ''); } document.addEventListener("DOMContentLoaded", restoreOptions); diff --git a/storage.js b/storage.js new file mode 100644 index 0000000..6a7f487 --- /dev/null +++ b/storage.js @@ -0,0 +1,24 @@ +function PropertyStorage(name) { + parse = function (data) { + var propertyData = data[name]; + if (!propertyData) { + return null; + } + try { + return JSON.parse(propertyData); + } catch (e) { + return null; + } + }; + + this.get = function () { + var getting = browser.storage.local.get(name); + return getting.then(parse); + }; + + this.set = function (value) { + return browser.storage.local.set({ patterns: JSON.stringify(value) }); + }; +} + +PatternStorage = new PropertyStorage('patterns');