]>
Commit | Line | Data |
---|---|---|
5d8de758 A |
1 | const sendBookmarkForm = (basePath, formElement) => { |
2 | const inputs = formElement | |
3 | .querySelectorAll('input[type="text"], textarea, input[type="checkbox"], input[type="hidden"]'); | |
4 | ||
5 | const formData = new FormData(); | |
6 | [...inputs].forEach((input) => { | |
7 | formData.append(input.getAttribute('name'), input.value); | |
8 | }); | |
9 | ||
10 | return new Promise((resolve, reject) => { | |
11 | const xhr = new XMLHttpRequest(); | |
12 | xhr.open('POST', `${basePath}/admin/shaare`); | |
13 | xhr.onload = () => { | |
14 | if (xhr.status !== 200) { | |
15 | alert(`An error occurred. Return code: ${xhr.status}`); | |
16 | reject(); | |
17 | } else { | |
6a716758 | 18 | formElement.closest('.edit-link-container').remove(); |
5d8de758 A |
19 | resolve(); |
20 | } | |
21 | }; | |
22 | xhr.send(formData); | |
23 | }); | |
24 | }; | |
25 | ||
26 | const sendBookmarkDelete = (buttonElement, formElement) => ( | |
27 | new Promise((resolve, reject) => { | |
28 | const xhr = new XMLHttpRequest(); | |
29 | xhr.open('GET', buttonElement.href); | |
30 | xhr.onload = () => { | |
31 | if (xhr.status !== 200) { | |
32 | alert(`An error occurred. Return code: ${xhr.status}`); | |
33 | reject(); | |
34 | } else { | |
6a716758 | 35 | formElement.closest('.edit-link-container').remove(); |
5d8de758 A |
36 | resolve(); |
37 | } | |
38 | }; | |
39 | xhr.send(); | |
40 | }) | |
41 | ); | |
42 | ||
43 | const redirectIfEmptyBatch = (basePath, formElements, path) => { | |
44 | if (formElements == null || formElements.length === 0) { | |
45 | window.location.href = `${basePath}${path}`; | |
46 | } | |
47 | }; | |
48 | ||
49 | (() => { | |
50 | const basePath = document.querySelector('input[name="js_base_path"]').value; | |
51 | const getForms = () => document.querySelectorAll('form[name="linkform"]'); | |
52 | ||
53 | const cancelButtons = document.querySelectorAll('[name="cancel-batch-link"]'); | |
54 | if (cancelButtons != null) { | |
55 | [...cancelButtons].forEach((cancelButton) => { | |
56 | cancelButton.addEventListener('click', (e) => { | |
57 | e.preventDefault(); | |
58 | e.target.closest('form[name="linkform"]').remove(); | |
59 | redirectIfEmptyBatch(basePath, getForms(), '/admin/add-shaare'); | |
60 | }); | |
61 | }); | |
62 | } | |
63 | ||
64 | const saveButtons = document.querySelectorAll('[name="save_edit"]'); | |
65 | if (saveButtons != null) { | |
66 | [...saveButtons].forEach((saveButton) => { | |
67 | saveButton.addEventListener('click', (e) => { | |
68 | e.preventDefault(); | |
69 | ||
70 | const formElement = e.target.closest('form[name="linkform"]'); | |
71 | sendBookmarkForm(basePath, formElement) | |
72 | .then(() => redirectIfEmptyBatch(basePath, getForms(), '/')); | |
73 | }); | |
74 | }); | |
75 | } | |
76 | ||
77 | const saveAllButtons = document.querySelectorAll('[name="save_edit_batch"]'); | |
78 | if (saveAllButtons != null) { | |
79 | [...saveAllButtons].forEach((saveAllButton) => { | |
80 | saveAllButton.addEventListener('click', (e) => { | |
81 | e.preventDefault(); | |
82 | ||
6a716758 A |
83 | const forms = [...getForms()]; |
84 | const nbForm = forms.length; | |
85 | let current = 0; | |
86 | const progressBar = document.querySelector('.progressbar > div'); | |
87 | const progressBarCurrent = document.querySelector('.progressbar-current'); | |
88 | ||
89 | document.querySelector('.dark-layer').style.display = 'block'; | |
90 | document.querySelector('.progressbar-max').innerHTML = nbForm; | |
91 | progressBarCurrent.innerHTML = current; | |
92 | ||
5d8de758 | 93 | const promises = []; |
6a716758 A |
94 | forms.forEach((formElement) => { |
95 | promises.push(sendBookmarkForm(basePath, formElement).then(() => { | |
96 | current += 1; | |
97 | progressBar.style.width = `${(current * 100) / nbForm}%`; | |
98 | progressBarCurrent.innerHTML = current; | |
99 | })); | |
5d8de758 A |
100 | }); |
101 | ||
102 | Promise.all(promises).then(() => { | |
103 | window.location.href = basePath || '/'; | |
104 | }); | |
105 | }); | |
106 | }); | |
107 | } | |
108 | ||
109 | const deleteButtons = document.querySelectorAll('[name="delete_link"]'); | |
110 | if (deleteButtons != null) { | |
111 | [...deleteButtons].forEach((deleteButton) => { | |
112 | deleteButton.addEventListener('click', (e) => { | |
113 | e.preventDefault(); | |
114 | ||
115 | const formElement = e.target.closest('form[name="linkform"]'); | |
116 | sendBookmarkDelete(e.target, formElement) | |
117 | .then(() => redirectIfEmptyBatch(basePath, getForms(), '/')); | |
118 | }); | |
119 | }); | |
120 | } | |
121 | })(); |