about summary refs log tree commit diff stats
path: root/src/assets
diff options
context:
space:
mode:
authorManeraKai <manerakai@protonmail.com>2022-02-06 08:45:12 +0300
committerManeraKai <manerakai@protonmail.com>2022-02-06 08:45:12 +0300
commit5cc8ed3f6034a379c29af2388dc59b30751b0f03 (patch)
treef3f9a9bf24cebbbe59062d90634688eece2984ee /src/assets
parentAdded default and custom instances to piped (diff)
downloadlibredirect-5cc8ed3f6034a379c29af2388dc59b30751b0f03.zip
Combined the instances methods to one function
Diffstat (limited to 'src/assets')
-rw-r--r--src/assets/javascripts/helpers/common.js99
1 files changed, 98 insertions, 1 deletions
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 =
+    [
+      `<div>Toggle All<input type="checkbox" id="${name}-toogle-all" /></div>`,
+      ...nameHelper.getRedirects()[name].normal.map((x) => `<div>${x}<input type="checkbox" id="${x}" /></div>`),
+    ].join('\n<hr>\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) => `<div>${x}<button class="add" id="clear-${x}">
+                              <svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px"
+                              fill="currentColor">
+                                  <path d="M0 0h24v24H0V0z" fill="none" />
+                                  <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z" />
+                              </svg>
+                          </button>
+                      </div>
+                      <hr>`
+      ).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,
 };