Skip to content

Commit ca297a9

Browse files
authored
Refactor dropzone (#30232)
Simplify code and use `.files` elements
1 parent 1ef2eb5 commit ca297a9

File tree

1 file changed

+21
-29
lines changed

1 file changed

+21
-29
lines changed

web_src/js/features/repo-legacy.js

+21-29
Original file line numberDiff line numberDiff line change
@@ -358,11 +358,11 @@ async function onEditContent(event) {
358358
input.name = 'files';
359359
input.type = 'hidden';
360360
input.value = data.uuid;
361-
dropzone.querySelector('.files').insertAdjacentHTML('beforeend', input.outerHTML);
361+
dropzone.querySelector('.files').append(input);
362362
});
363363
this.on('removedfile', async (file) => {
364-
if (disableRemovedfileEvent) return;
365364
document.getElementById(file.uuid)?.remove();
365+
if (disableRemovedfileEvent) return;
366366
if (dropzone.getAttribute('data-remove-url') && !fileUuidDict[file.uuid].submitted) {
367367
try {
368368
await POST(dropzone.getAttribute('data-remove-url'), {data: new URLSearchParams({file: file.uuid})});
@@ -384,6 +384,7 @@ async function onEditContent(event) {
384384
disableRemovedfileEvent = true;
385385
dz.removeAllFiles(true);
386386
dropzone.querySelector('.files').innerHTML = '';
387+
for (const el of dropzone.querySelectorAll('.dz-preview')) el.remove();
387388
fileUuidDict = {};
388389
disableRemovedfileEvent = false;
389390

@@ -392,15 +393,17 @@ async function onEditContent(event) {
392393
dz.emit('addedfile', attachment);
393394
dz.emit('thumbnail', attachment, imgSrc);
394395
dz.emit('complete', attachment);
395-
dz.files.push(attachment);
396396
fileUuidDict[attachment.uuid] = {submitted: true};
397397
dropzone.querySelector(`img[src='${imgSrc}']`).style.maxWidth = '100%';
398398
const input = document.createElement('input');
399399
input.id = attachment.uuid;
400400
input.name = 'files';
401401
input.type = 'hidden';
402402
input.value = attachment.uuid;
403-
dropzone.querySelector('.files').insertAdjacentHTML('beforeend', input.outerHTML);
403+
dropzone.querySelector('.files').append(input);
404+
}
405+
if (!dropzone.querySelector('.dz-preview')) {
406+
dropzone.classList.remove('dz-started');
404407
}
405408
} catch (error) {
406409
console.error(error);
@@ -412,24 +415,24 @@ async function onEditContent(event) {
412415
return dz;
413416
};
414417

415-
const cancelAndReset = (dz) => {
418+
const cancelAndReset = (e) => {
419+
e.preventDefault();
416420
showElem(renderContent);
417421
hideElem(editContentZone);
418-
if (dz) {
419-
dz.emit('reload');
420-
}
422+
comboMarkdownEditor.attachedDropzoneInst?.emit('reload');
421423
};
422424

423-
const saveAndRefresh = async (dz) => {
425+
const saveAndRefresh = async (e) => {
426+
e.preventDefault();
424427
showElem(renderContent);
425428
hideElem(editContentZone);
426-
429+
const dropzoneInst = comboMarkdownEditor.attachedDropzoneInst;
427430
try {
428431
const params = new URLSearchParams({
429432
content: comboMarkdownEditor.value(),
430433
context: editContentZone.getAttribute('data-context'),
431434
});
432-
for (const file of dz.files) params.append('files[]', file.uuid);
435+
for (const fileInput of dropzoneInst?.element.querySelectorAll('.files [name=files]')) params.append('files[]', fileInput.value);
433436

434437
const response = await POST(editContentZone.getAttribute('data-update-url'), {data: params});
435438
const data = await response.json();
@@ -452,33 +455,22 @@ async function onEditContent(event) {
452455
} else {
453456
content.querySelector('.dropzone-attachments').outerHTML = data.attachments;
454457
}
455-
if (dz) {
456-
dz.emit('submit');
457-
dz.emit('reload');
458-
}
458+
dropzoneInst?.emit('submit');
459+
dropzoneInst?.emit('reload');
459460
initMarkupContent();
460461
initCommentContent();
461462
} catch (error) {
462463
console.error(error);
463464
}
464465
};
465466

466-
if (!editContentZone.innerHTML) {
467+
comboMarkdownEditor = getComboMarkdownEditor(editContentZone.querySelector('.combo-markdown-editor'));
468+
if (!comboMarkdownEditor) {
467469
editContentZone.innerHTML = document.getElementById('issue-comment-editor-template').innerHTML;
468470
comboMarkdownEditor = await initComboMarkdownEditor(editContentZone.querySelector('.combo-markdown-editor'));
469-
470-
const dropzone = editContentZone.querySelector('.dropzone');
471-
const dz = await setupDropzone(dropzone);
472-
editContentZone.querySelector('.cancel.button').addEventListener('click', (e) => {
473-
e.preventDefault();
474-
cancelAndReset(dz);
475-
});
476-
editContentZone.querySelector('.save.button').addEventListener('click', (e) => {
477-
e.preventDefault();
478-
saveAndRefresh(dz);
479-
});
480-
} else {
481-
comboMarkdownEditor = getComboMarkdownEditor(editContentZone.querySelector('.combo-markdown-editor'));
471+
comboMarkdownEditor.attachedDropzoneInst = await setupDropzone(editContentZone.querySelector('.dropzone'));
472+
editContentZone.querySelector('.cancel.button').addEventListener('click', cancelAndReset);
473+
editContentZone.querySelector('.save.button').addEventListener('click', saveAndRefresh);
482474
}
483475

484476
// Show write/preview tab and copy raw content as needed

0 commit comments

Comments
 (0)