1
0
mirror of https://github.com/nileshtrivedi/better synced 2025-06-27 09:03:11 +02:00

feat: options to add, edit, remove source lists

This commit is contained in:
Mitesh Shah
2020-09-12 21:10:59 +05:30
parent 17a069bee5
commit 4489a30e50
3 changed files with 110 additions and 50 deletions

View File

@ -1,4 +1,4 @@
var DEFAULT_LIST_URL = let DEFAULT_LIST_URL =
"https://cdn.jsdelivr.net/gh/nileshtrivedi/better/defaultlist.json"; "https://cdn.jsdelivr.net/gh/nileshtrivedi/better/defaultlist.json";
var BETTER_ALTERNATIVES = []; var BETTER_ALTERNATIVES = [];
@ -29,11 +29,15 @@ function fetchAllLists(listUrls) {
} }
function onStartup() { function onStartup() {
chrome.storage.sync.get(["betterSourceURL"], function (result) { chrome.storage.sync.get(["betterSourceUrls"], function (result) {
var listUrl = result.betterSourceURL || DEFAULT_LIST_URL; let betterSourceUrls = [];
// Uncomment this when testing list changes locally if (result && result.betterSourceUrls) {
// listUrl = "/defaultlist.json"; betterSourceUrls = JSON.parse(result.betterSourceUrls);
fetchAllLists([listUrl, "/lists/t1.json", "/lists/t2.json"]); }
if (betterSourceUrls.length === 0) {
betterSourceUrls = [DEFAULT_LIST_URL];
}
fetchAllLists(betterSourceUrls);
}); });
} }

View File

@ -1,39 +1,49 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head>
<style>
body {
margin: 40px auto;
max-width:650px;
line-height:1.6;
font-size:18px;
color:#444;
padding:0 10px
}
h1,h2,h3 {
line-height:1.2
}
input[type=url] { <head>
<style>
body {
margin: 40px auto;
max-width: 650px;
line-height: 1.6;
font-size: 18px;
color: #444;
padding: 0 10px
}
h1,
h2,
h3 {
line-height: 1.2
}
input[type=url] {
width: 100%; width: 100%;
padding: 12px 20px; padding: 12px 20px;
margin: 8px 0; margin: 8px 0;
box-sizing: border-box; box-sizing: border-box;
} }
button { button {
padding: 5px 5px; padding: 5px 5px;
font-size: 16px; font-size: 16px;
} }
</style> </style>
</head> </head>
<body>
<body>
<div> <div>
<h3>Choose a different source of suggestions!</h3> <h3>Choose a different source of suggestions!</h3>
<!-- TODO: Fetch the current option value and set in URL field below --> <!-- TODO: Fetch the current option value and set in URL field below -->
<input id="betterSourceText" type="url" placeholder="https://cdn.jsdelivr.net/gh/nileshtrivedi/better/defaultlist.json" /> <div id="betterSourceInputContainer">
</div>
<button id="addSourceButton">Add a new source +</button>
<button id="betterSourceSubmit" value="Save">Save</button> <button id="betterSourceSubmit" value="Save">Save</button>
</div> </div>
</body> <p><small>To delete a source: empty the field, hit save, and refresh the page.</small></p>
<script src="options.js"></script> </body>
<script src="options.js"></script>
</html> </html>

View File

@ -1,14 +1,60 @@
let input = document.getElementById('betterSourceText'); let DEFAULT_LIST_URL =
let submit = document.getElementById('betterSourceSubmit'); "https://cdn.jsdelivr.net/gh/nileshtrivedi/better/defaultlist.json";
let addSourceButton = document.getElementById("addSourceButton");
let submit = document.getElementById("betterSourceSubmit");
let betterSourceInputContainer = document.getElementById(
"betterSourceInputContainer"
);
submit.addEventListener('click', function() { function storePrefs(sourceUrls) {
chrome.storage.sync.set({betterSourceURL: input.value}, function() { sourceUrls = sourceUrls.filter((url) => url != "");
console.log('Set betterSource = ' + input.value); let prefs = {
betterSourceUrls: JSON.stringify(sourceUrls),
};
chrome.storage.sync.set(prefs, function () {
console.log("Saved", prefs);
}); });
}
chrome.runtime.sendMessage({type: 'reloadList', url: input.value}, (response) => { function addUrlInput(value) {
let newInput = document.createElement("input");
newInput.setAttribute("name", "url[]");
newInput.setAttribute("type", "url");
newInput.setAttribute("placeholder", "https://source.com/list.json");
if (value) {
newInput.setAttribute("value", value);
}
betterSourceInputContainer.appendChild(newInput);
}
addSourceButton.addEventListener("click", function (e) {
e.preventDefault();
addUrlInput(null);
});
submit.addEventListener("click", function () {
let $sourceUrls = document.querySelectorAll("[name='url[]']");
let sourceUrls = Array.from($sourceUrls).map((elem) => elem.value);
storePrefs(sourceUrls);
chrome.runtime.sendMessage({ type: "reloadList" }, (response) => {
if (response) { if (response) {
console.log("BETTER_ALTERNATIVES list is reloaded"); console.log("BETTER_ALTERNATIVES list is reloaded");
} }
}); });
}); });
chrome.storage.sync.get(["betterSourceUrls"], (result) => {
// populate input fields from stored sources or show default source
let betterSourceUrls = [];
if (result && result.betterSourceUrls) {
betterSourceUrls = JSON.parse(result.betterSourceUrls);
}
if (betterSourceUrls.length === 0) {
betterSourceUrls = [DEFAULT_LIST_URL];
}
betterSourceUrls.map((sourceUrl) => {
addUrlInput(sourceUrl);
});
});