From e284d5c6ad2d0fc429a06070c6d429ebb3027b81 Mon Sep 17 00:00:00 2001 From: Nilesh Date: Sun, 2 Aug 2020 23:04:43 +0530 Subject: [PATCH] WIP: Fetch list from URL --- background.js | 50 ++++++++++++++++++++++++++++++++++++++++++++---- contentscript.js | 23 +++++++++++----------- defaultlist.json | 3 +++ options.js | 2 +- 4 files changed, 61 insertions(+), 17 deletions(-) create mode 100644 defaultlist.json diff --git a/background.js b/background.js index ee4c7ab..8153469 100644 --- a/background.js +++ b/background.js @@ -1,5 +1,47 @@ +var DEFAULT_LIST_URL = 'https://cdn.jsdelivr.net/gh/nileshtrivedi/better/defaultlist.json' +var BETTER_ALTERNATIVES = []; + chrome.runtime.onInstalled.addListener(function() { - // chrome.storage.sync.set({color: '#3aa757'}, function() { - // console.log("The color is green."); - // }); - }); \ No newline at end of file + console.log('onInstalled....'); +}); + +// fetch and save data when chrome restarted, alarm will continue running when chrome is restarted +chrome.runtime.onStartup.addListener(() => { + console.log('onStartup....'); + onStartup(); +}); + + +function onStartup(){ + chrome.storage.sync.get(['betterSourceURL'], function(result) { + console.log('Value currently is ' + (result.betterSourceURL || DEFAULT_LIST_URL)); + + fetch((result.betterSourceURL || DEFAULT_LIST_URL)) + .then(response => response.json()) + .then(data => { + console.log("Got data: ", data); + BETTER_ALTERNATIVES = data; + chrome.storage.local.set({betterSourceData: data}, function() { + console.log('Set betterSource = ' + data); + }) + }); + }); +} + +function getMatch(url){ + var match = BETTER_ALTERNATIVES.find(pattern => url.match(new Regexp(pattern[0]))); + if(match) + return match[1]; + else return null; +} + +chrome.runtime.onMessage.addListener((msg, sender, response) => { + switch (msg.type) { + case 'getMatch': + response(getMatch(msg.url)); + break; + default: + response('unknown request'); + break; + } +}); \ No newline at end of file diff --git a/contentscript.js b/contentscript.js index 564f73e..bdac3d3 100644 --- a/contentscript.js +++ b/contentscript.js @@ -1,25 +1,18 @@ // document.body.style.border = "15px solid red"; /* + +IN PROGRESS: + +- List of alternatives should be loaded from a user-specified external source. Can be modified via options.html/options.js + TODO - Pop-up should be formatted to look better. - Pop-up should be dismissable (per URL / per domain). - Once dismissed, popup should not be shown on the same url/domain. Use cookies or localStorage for this. - - List of alternatives should be loaded from a user-specified external source. Can be modified via options.html/options.js - Since we're replacing innerHTML, we should protect against XSS attacks. */ -BETTER_ALTERNATIVES = [ - [ /https?:\/\/(www.)?google.com\/chrome/ , "A better alternative is Mozilla."] -] - -function findBetter(url) { - var match = BETTER_ALTERNATIVES.find(pattern => url.match(pattern[0])); - if(match) - return match[1]; - else return null; -} - function showBetter(alternative) { if(!alternative) return; let betterdiv = document.createElement("div"); @@ -37,3 +30,9 @@ function showBetter(alternative) { } showBetter(findBetter(document.location.href)); + +chrome.runtime.sendMessage({type: 'getMatch', url: document.location.href}, (response) => { + if (response) { + showBetter(response); + } +}); \ No newline at end of file diff --git a/defaultlist.json b/defaultlist.json new file mode 100644 index 0000000..95d0a82 --- /dev/null +++ b/defaultlist.json @@ -0,0 +1,3 @@ +[ + [ "https?:\/\/(www.)?google.com\/chrome" , "A better alternative is Mozilla."] +] \ No newline at end of file diff --git a/options.js b/options.js index 362f48d..c15bb43 100644 --- a/options.js +++ b/options.js @@ -2,7 +2,7 @@ let input = document.getElementById('betterSourceText'); let submit = document.getElementById('betterSourceSubmit'); submit.addEventListener('click', function() { - chrome.storage.sync.set({betterSource: input.value}, function() { + chrome.storage.sync.set({betterSourceURL: input.value}, function() { console.log('Set betterSource = ' + input.value); }) });