From 5cc8ed3f6034a379c29af2388dc59b30751b0f03 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Sun, 6 Feb 2022 08:45:12 +0300 Subject: Combined the instances methods to one function --- src/assets/javascripts/helpers/common.js | 99 +++++++++++++++++++++++++++++++- 1 file changed, 98 insertions(+), 1 deletion(-) (limited to 'src/assets') diff --git a/src/assets/javascripts/helpers/common.js b/src/assets/javascripts/helpers/common.js index 313808a9..5ff47976 100644 --- a/src/assets/javascripts/helpers/common.js +++ b/src/assets/javascripts/helpers/common.js @@ -23,7 +23,7 @@ function updateInstances() { if (request.status === 200) { const instances = JSON.parse(request.responseText); - youtubeHelper.setInvidiousRedirects(instances.invidious); + nameHelper.setInvidiousRedirects(instances.invidious); twitterHelper.setRedirects(instances.nitter); @@ -50,8 +50,105 @@ function isFirefox() { return typeof InstallTrigger !== "undefined"; } +function processDefaultCustomInstances( + name, + nameHelper, + document, + getNameRedirectsChecks, + setNameRedirectsChecks, + getNameCustomRedirects, + setNameCustomRedirects +) { + + let nameCustomInstances = []; + let nameCheckListElement = document.getElementById(`${name}-checklist`); + let nameDefaultRedirects; + + function calcNameCheckBoxes() { + let isTrue = true; + for (const item of nameHelper.getRedirects()[name].normal) + if (!nameDefaultRedirects.includes(item)) { + isTrue = false; + break; + } + for (const element of nameCheckListElement.getElementsByTagName('input')) + element.checked = nameDefaultRedirects.includes(element.id) + document.getElementById(`${name}-toogle-all`).checked = isTrue; + } + + nameDefaultRedirects = getNameRedirectsChecks(); + nameCheckListElement.innerHTML = + [ + `
Toggle All
`, + ...nameHelper.getRedirects()[name].normal.map((x) => `
${x}
`), + ].join('\n
\n'); + + calcNameCheckBoxes(); + document.getElementById(`${name}-toogle-all`).addEventListener("change", (event) => { + if (event.target.checked) + nameDefaultRedirects = [...nameHelper.getRedirects()[name].normal]; + else + nameDefaultRedirects = []; + setNameRedirectsChecks(nameDefaultRedirects); + calcNameCheckBoxes(); + }); + + for (let element of nameCheckListElement.getElementsByTagName('input')) { + if (element.id != `${name}-toogle-all`) + document.getElementById(element.id).addEventListener("change", (event) => { + if (event.target.checked) + nameDefaultRedirects.push(element.id) + else { + let index = nameDefaultRedirects.indexOf(element.id); + if (index > -1) nameDefaultRedirects.splice(index, 1); + } + setNameRedirectsChecks(nameDefaultRedirects); + calcNameCheckBoxes(); + }); + } + + nameCustomInstances = getNameCustomRedirects(); + function calcNameCustomInstances() { + document.getElementById(`${name}-custom-checklist`).innerHTML = + nameCustomInstances.map( + (x) => `
${x} +
+
` + ).join('\n'); + + for (const item of nameCustomInstances) { + document.getElementById(`clear-${item}`).addEventListener("click", () => { + let index = nameCustomInstances.indexOf(item); + if (index > -1) nameCustomInstances.splice(index, 1); + setNameCustomRedirects(nameCustomInstances); + calcNameCustomInstances(); + }); + } + } + calcNameCustomInstances(); + document.getElementById(`custom-${name}-instance-form`).addEventListener("submit", (event) => { + event.preventDefault(); + let nameCustomInstanceInput = document.getElementById(`${name}-custom-instance`); + let val = nameCustomInstanceInput.value + if (nameCustomInstanceInput.validity.valid && !nameHelper.getRedirects()[name].normal.includes(val) && val.trim() != '') { + if (!nameCustomInstances.includes(val)) { + nameCustomInstances.push(val) + setNameCustomRedirects(nameCustomInstances); + } + calcNameCustomInstances(); + } + }) +} + export default { getRandomInstance, updateInstances, isFirefox, + processDefaultCustomInstances, }; -- cgit 1.4.1