]>
git.immae.eu Git - github/shaarli/Shaarli.git/blob - shaare-batch.js
4a1fdb2ed928ac59962c7bded70554ab3631bf4f
1 const sendBookmarkForm
= (basePath
, formElement
) => {
2 const inputs
= formElement
3 .querySelectorAll('input[type="text"], textarea, input[type="checkbox"], input[type="hidden"]');
5 const formData
= new FormData();
6 [...inputs
].forEach((input
) => {
7 if (input
.getAttribute('type') === 'checkbox') {
8 formData
.append(input
.getAttribute('name'), input
.checked
);
10 formData
.append(input
.getAttribute('name'), input
.value
);
14 return new Promise((resolve
, reject
) => {
15 const xhr
= new XMLHttpRequest();
16 xhr
.open('POST', `${basePath}/admin/shaare`);
18 if (xhr
.status
!== 200) {
19 alert(`An error occurred. Return code: ${xhr.status}`);
22 formElement
.closest('.edit-link-container').remove();
30 const sendBookmarkDelete
= (buttonElement
, formElement
) => (
31 new Promise((resolve
, reject
) => {
32 const xhr
= new XMLHttpRequest();
33 xhr
.open('GET', `${buttonElement.href}&source=batch`);
35 if (xhr
.status
!== 204) {
36 alert(`An error occurred. Return code: ${xhr.status}`);
39 formElement
.closest('.edit-link-container').remove();
47 const redirectIfEmptyBatch
= (basePath
, formElements
, path
) => {
48 if (formElements
== null || formElements
.length
=== 0) {
49 window
.location
.href
= `${basePath}${path}`;
54 const basePath
= document
.querySelector('input[name="js_base_path"]').value
;
55 const getForms
= () => document
.querySelectorAll('form[name="linkform"]');
57 const cancelButtons
= document
.querySelectorAll('[name="cancel-batch-link"]');
58 if (cancelButtons
!= null) {
59 [...cancelButtons
].forEach((cancelButton
) => {
60 cancelButton
.addEventListener('click', (e
) => {
62 e
.target
.closest('form[name="linkform"]').remove();
63 redirectIfEmptyBatch(basePath
, getForms(), '/admin/add-shaare');
68 const saveButtons
= document
.querySelectorAll('[name="save_edit"]');
69 if (saveButtons
!= null) {
70 [...saveButtons
].forEach((saveButton
) => {
71 saveButton
.addEventListener('click', (e
) => {
74 const formElement
= e
.target
.closest('form[name="linkform"]');
75 sendBookmarkForm(basePath
, formElement
)
76 .then(() => redirectIfEmptyBatch(basePath
, getForms(), '/'));
81 const saveAllButtons
= document
.querySelectorAll('[name="save_edit_batch"]');
82 if (saveAllButtons
!= null) {
83 [...saveAllButtons
].forEach((saveAllButton
) => {
84 saveAllButton
.addEventListener('click', (e
) => {
87 const forms
= [...getForms()];
88 const nbForm
= forms
.length
;
90 const progressBar
= document
.querySelector('.progressbar > div');
91 const progressBarCurrent
= document
.querySelector('.progressbar-current');
93 document
.querySelector('.dark-layer').style
.display
= 'block';
94 document
.querySelector('.progressbar-max').innerHTML
= nbForm
;
95 progressBarCurrent
.innerHTML
= current
;
98 forms
.forEach((formElement
) => {
99 promises
.push(sendBookmarkForm(basePath
, formElement
).then(() => {
101 progressBar
.style
.width
= `${(current * 100) / nbForm}%`;
102 progressBarCurrent
.innerHTML
= current
;
106 Promise
.all(promises
).then(() => {
107 window
.location
.href
= basePath
|| '/';
113 const deleteButtons
= document
.querySelectorAll('[name="delete_link"]');
114 if (deleteButtons
!= null) {
115 [...deleteButtons
].forEach((deleteButton
) => {
116 deleteButton
.addEventListener('click', (e
) => {
119 const formElement
= e
.target
.closest('form[name="linkform"]');
120 sendBookmarkDelete(e
.target
, formElement
)
121 .then(() => redirectIfEmptyBatch(basePath
, getForms(), '/'));