Files
BetterYGG/options/options.js
2019-05-30 23:34:14 +02:00

227 lines
7.7 KiB
JavaScript

var storedValues = [
'yggToken',
'discordWebhookUrl',
'discordUserName',
'displayDiscord',
'displayAddCategories',
'defaultCategories',
'categories',
'searchSort',
'searchOrder'
];
var yggToken = document.getElementById('yggToken');
var discordWebhookUrl = document.getElementById('discordWebhookUrl');
var discordUserName = document.getElementById('discordUserName');
var displayDiscord = document.getElementById('displayDiscord');
var displayAddCategories = document.getElementById('displayAddCategories');
var discordIntegration = document.getElementById('discordIntegrationSection');
var displayAddCategoriesSection = document.getElementById('displayAddCategoriesSection');
var addCategories = document.getElementById('addCategoriesSection');
var categoriesTable = document.getElementById('categoriesTable').children[1];
var buttonSaveCategories = document.getElementById('saveCategories');
var buttonRestoreCategories = document.getElementById('restoreCategories');
var defaultCategories = [];
var categories = [];
var searchSort = document.getElementById('searchSort');
var searchOrder = document.getElementById('searchOrder');
chrome.storage.sync.get(storedValues, function (value) {
if (value.yggToken) {
yggToken.value = value.yggToken;
}
if (value.discordWebhookUrl) {
discordWebhookUrl.value = value.discordWebhookUrl;
}
if (value.discordUserName) {
discordUserName.value = value.discordUserName;
}
if (value.displayDiscord) {
displayDiscord.checked = value.displayDiscord;
if (displayDiscord.checked) {
discordIntegration.style.display = "block";
displayAddCategoriesSection.style.display = "block";
if (displayAddCategories.checked) {
addCategories.style.display = "block";
}
} else {
discordIntegration.style.display = "none";
displayAddCategoriesSection.style.display = "none";
addCategories.style.display = "none";
}
if (value.displayAddCategories) {
displayAddCategories.checked = value.displayAddCategories;
if (displayAddCategories.checked) {
addCategories.style.display = "block";
} else {
addCategories.style.display = "none";
}
}
}
if (value.categories) {
categories = value.categories;
makeCategoriesTable(categories);
}
if (value.defaultCategories) {
defaultCategories = value.defaultCategories;
buttonSaveCategories.addEventListener('click', saveCategories);
buttonRestoreCategories.addEventListener('click', restoreDefaultCategories);
}
if (value.searchSort) {
document.querySelector('#searchSort option[value=' + value.searchSort + ']').selected = "selected";
}
if (value.searchOrder) {
document.querySelector('#searchOrder option[value=' + value.searchOrder + ']').selected = "selected";
}
});
function addToStorage(name, value) {
chrome.storage.sync.set({[name]: value});
}
document.addEventListener('DOMContentLoaded', function () {
yggToken.addEventListener('input', function () {
addToStorage('yggToken', this.value);
});
discordWebhookUrl.addEventListener('input', function () {
addToStorage('discordWebhookUrl', this.value);
});
discordUserName.addEventListener('input', function () {
addToStorage('discordUserName', this.value);
});
displayDiscord.addEventListener('input', function () {
addToStorage('displayDiscord', this.checked);
if (this.checked) {
discordIntegration.style.display = "block";
displayAddCategoriesSection.style.display = "block";
if (displayAddCategories.checked) {
addCategories.style.display = "block";
}
} else {
discordIntegration.style.display = "none";
displayAddCategoriesSection.style.display = "none";
addCategories.style.display = "none";
}
});
displayAddCategories.addEventListener('input', function () {
addToStorage('displayAddCategories', this.checked);
if (this.checked) {
addCategories.style.display = "block";
} else {
addCategories.style.display = "none";
}
});
searchSort.addEventListener('change', function () {
addToStorage('searchSort', this.options[this.selectedIndex].value);
});
searchOrder.addEventListener('change', function () {
addToStorage('searchOrder', this.options[this.selectedIndex].value);
});
});
/***********************/
/* Element constructor */
/***********************/
function makeCategoriesArray() {
var lines = Array.from(categoriesTable.children);
var categoriesArray = [];
for (var i in lines) {
var line = lines[i];
var name = line.getElementsByTagName('input').namedItem('name').value;
var season = line.getElementsByTagName('input').namedItem('season').checked;
var urls = line.getElementsByTagName('textarea').namedItem('urls').value;
var urlsArray = urls.split('\n').filter(x => x !== '');
if (name !== '') {
categoriesArray.push({
name: name,
season: season,
urls: urlsArray
});
}
}
return categoriesArray;
}
function makeCategoriesTable(categories) {
var tbody = document.createElement('tbody');
for (var i in categories) {
var line = categories[i];
var tr = getTr(line.name, line.season, line.urls, "Supprimer", deleteLine);
tbody.appendChild(tr);
}
tr = getTr('', false, [], "Ajouter", addLine);
tbody.appendChild(tr);
categoriesTable.parentNode.replaceChild(tbody, categoriesTable);
categoriesTable = tbody;
}
function getTr(name, season, urls, buttonText, buttonOnClick) {
var tr = document.createElement('tr');
var tdName = document.createElement('td');
var inputName = document.createElement('input');
inputName.type = "text";
inputName.name = "name";
inputName.value = name;
tdName.appendChild(inputName);
tr.appendChild(tdName);
var tdSeason = document.createElement('td');
var inputSeason = document.createElement('input');
inputSeason.type = "checkbox";
inputSeason.name = "season";
inputSeason.checked = season;
tdSeason.appendChild(inputSeason);
tr.appendChild(tdSeason);
var tdUrls = document.createElement('td');
var textareaUrls = document.createElement('textarea');
textareaUrls.name = "urls";
textareaUrls.rows = "5";
textareaUrls.cols = "75";
textareaUrls.value = urls.join('\n');
tdUrls.appendChild(textareaUrls);
tr.appendChild(tdUrls);
var tdTrash = document.createElement('td');
var button = document.createElement('button');
button.innerText = buttonText;
button.addEventListener("click", buttonOnClick);
tdTrash.appendChild(button);
tr.appendChild(tdTrash);
return tr;
}
/*******************/
/* Events Handlers */
/*******************/
function addLine() {
this.innerText = "Supprimer";
this.removeEventListener("click", addLine);
this.addEventListener("click", deleteLine);
var tr = getTr('', false, [], "Ajouter", addLine);
categoriesTable.appendChild(tr);
}
function deleteLine() {
this.parentElement.parentElement.remove();
}
function saveCategories() {
categories = makeCategoriesArray();
addToStorage('categories', categories);
makeCategoriesTable(categories);
}
function restoreDefaultCategories() {
categories = defaultCategories;
addToStorage('categories', categories);
makeCategoriesTable(categories);
}