]> git.immae.eu Git - github/shaarli/Shaarli.git/blobdiff - assets/common/js/shaare-batch.js
Merge pull request #1693 from ArthurHoaro/fix/bulk-add-delete
[github/shaarli/Shaarli.git] / assets / common / js / shaare-batch.js
index 9f61299327ccc4ca387fd74b2f02e639c84d8fde..4a1fdb2ed928ac59962c7bded70554ab3631bf4f 100644 (file)
@@ -4,7 +4,11 @@ const sendBookmarkForm = (basePath, formElement) => {
 
   const formData = new FormData();
   [...inputs].forEach((input) => {
-    formData.append(input.getAttribute('name'), input.value);
+    if (input.getAttribute('type') === 'checkbox') {
+      formData.append(input.getAttribute('name'), input.checked);
+    } else {
+      formData.append(input.getAttribute('name'), input.value);
+    }
   });
 
   return new Promise((resolve, reject) => {
@@ -15,7 +19,7 @@ const sendBookmarkForm = (basePath, formElement) => {
         alert(`An error occurred. Return code: ${xhr.status}`);
         reject();
       } else {
-        formElement.remove();
+        formElement.closest('.edit-link-container').remove();
         resolve();
       }
     };
@@ -26,13 +30,13 @@ const sendBookmarkForm = (basePath, formElement) => {
 const sendBookmarkDelete = (buttonElement, formElement) => (
   new Promise((resolve, reject) => {
     const xhr = new XMLHttpRequest();
-    xhr.open('GET', buttonElement.href);
+    xhr.open('GET', `${buttonElement.href}&source=batch`);
     xhr.onload = () => {
-      if (xhr.status !== 200) {
+      if (xhr.status !== 204) {
         alert(`An error occurred. Return code: ${xhr.status}`);
         reject();
       } else {
-        formElement.remove();
+        formElement.closest('.edit-link-container').remove();
         resolve();
       }
     };
@@ -80,9 +84,23 @@ const redirectIfEmptyBatch = (basePath, formElements, path) => {
       saveAllButton.addEventListener('click', (e) => {
         e.preventDefault();
 
+        const forms = [...getForms()];
+        const nbForm = forms.length;
+        let current = 0;
+        const progressBar = document.querySelector('.progressbar > div');
+        const progressBarCurrent = document.querySelector('.progressbar-current');
+
+        document.querySelector('.dark-layer').style.display = 'block';
+        document.querySelector('.progressbar-max').innerHTML = nbForm;
+        progressBarCurrent.innerHTML = current;
+
         const promises = [];
-        [...getForms()].forEach((formElement) => {
-          promises.push(sendBookmarkForm(basePath, formElement));
+        forms.forEach((formElement) => {
+          promises.push(sendBookmarkForm(basePath, formElement).then(() => {
+            current += 1;
+            progressBar.style.width = `${(current * 100) / nbForm}%`;
+            progressBarCurrent.innerHTML = current;
+          }));
         });
 
         Promise.all(promises).then(() => {