]> git.immae.eu Git - github/shaarli/Shaarli.git/commitdiff
Bulk creation: displays a progress bar when saving all displayed forms
authorArthurHoaro <arthur@hoa.ro>
Fri, 23 Oct 2020 10:53:49 +0000 (12:53 +0200)
committerArthurHoaro <arthur@hoa.ro>
Tue, 27 Oct 2020 19:11:30 +0000 (20:11 +0100)
assets/common/js/shaare-batch.js
assets/default/scss/shaarli.scss
tpl/default/editlink.batch.html

index 9f61299327ccc4ca387fd74b2f02e639c84d8fde..557325ee373f9c85fc6287674f110096f379e7f1 100644 (file)
@@ -15,7 +15,7 @@ const sendBookmarkForm = (basePath, formElement) => {
         alert(`An error occurred. Return code: ${xhr.status}`);
         reject();
       } else {
-        formElement.remove();
+        formElement.closest('.edit-link-container').remove();
         resolve();
       }
     };
@@ -32,7 +32,7 @@ const sendBookmarkDelete = (buttonElement, formElement) => (
         alert(`An error occurred. Return code: ${xhr.status}`);
         reject();
       } else {
-        formElement.remove();
+        formElement.closest('.edit-link-container').remove();
         resolve();
       }
     };
@@ -80,9 +80,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(() => {
index 7c85dee8cde371a9045a6e884f8acc590c795d82..a7f091e95d938f8ce9c6d10202f2288867fb7390 100644 (file)
@@ -1793,6 +1793,29 @@ input[name='save_edit_batch'] {
   }
 }
 
+.dark-layer {
+  display: none;
+  position: fixed;
+  height: 100%;
+  width: 100%;
+  z-index: 998;
+  background-color: rgba(0, 0, 0, .75);
+  color: #fff;
+
+  .screen-center {
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+    text-align: center;
+    min-height: 100vh;
+  }
+
+  .progressbar {
+    width: 33%;
+  }
+}
+
 .addlink-batch-form-block {
   .pure-alert {
     margin: 25px 0 0 0;
index 71985c1aa17d28f6937a91b5d50191967f6b88da..b1f8e5bd9ef8559c4bad528dc20127312f92891b 100644 (file)
@@ -4,6 +4,15 @@
   {include="includes"}
 </head>
 <body>
+<div class="dark-layer">
+  <div class="screen-center">
+    <div><span class="progressbar-current"></span> / <span class="progressbar-max"></span></div>
+    <div class="progressbar">
+      <div></div>
+    </div>
+  </div>
+</div>
+
 {include="page.header"}
 
 <div class="center">