diff --git a/manifest.json b/manifest.json index 2f0a845..0bb8cda 100644 --- a/manifest.json +++ b/manifest.json @@ -3,6 +3,9 @@ "name": "Postify", "version": "1.0", "description": "Post current url to external web-server.", + "icons": { + "48": "icons/postify-48.png" + }, "applications": { "gecko": { "id": "postify@mozilla.org", @@ -13,10 +16,11 @@ "activeTab", "notifications", "tabs", + "storage", "" ], "background": { - "scripts": ["postify.js"] + "scripts": ["storage.js", "postify.js"] }, "browser_action": { "default_icon": "icons/postify-32.png", @@ -28,5 +32,8 @@ "default": "Ctrl+Shift+D" } } + }, + "options_ui": { + "page": "options.html" } } \ No newline at end of file diff --git a/options.html b/options.html new file mode 100644 index 0000000..8f18f54 --- /dev/null +++ b/options.html @@ -0,0 +1,42 @@ + + + + + + + + + + + +
+ +

+ Specify servers and url patterns. +

+ + + + + + + + + + +
Server addressUrl pattern
+ + + + +
+ + + + + + \ No newline at end of file diff --git a/options.js b/options.js new file mode 100644 index 0000000..10a648a --- /dev/null +++ b/options.js @@ -0,0 +1,79 @@ +const PATTERN_ROW = (addr, pattern) => ` + + + + +`; + +function restoreOptions() { + + function parseJsonPatterns(jsonPatterns) { + console.log('JSON PATTERNS', jsonPatterns); + + if (!jsonPatterns.patterns) { + return []; + } + 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) { + evt.preventDefault(); + var patterns = []; + var rows = document.querySelectorAll(".js-pattern-rows tr"); + rows.forEach(row => { + var server = row.querySelector('[name="server"]').value; + var pattern = row.querySelector('[name="pattern"]').value; + patterns.push({server: server, pattern: pattern}); + }); + + console.log('PATTERNS', patterns); + + browser.storage.local.set({ patterns: JSON.stringify(patterns) }); +} + +function addRow(evt) { + evt.preventDefault(); + var html = document.querySelector(".js-pattern-rows").innerHTML; + html += PATTERN_ROW('', ''); + document.querySelector(".js-pattern-rows").innerHTML = html; +} + +document.addEventListener("DOMContentLoaded", restoreOptions); +document.querySelector(".js-submit").addEventListener("click", saveOptions); +document.querySelector(".js-add").addEventListener("click", addRow);