Use a DocumentFragment when building the attachmentsView in PDFAttachmentViewer.render

This approach is already used in other parts of the code-base, see e.g. `PDFOutlineViewer`, and has the advantage of only invalidating the DOM once rather than for every attachment item.
This commit is contained in:
Jonas Jenwald 2020-08-03 12:11:46 +02:00
parent 00a8b42e67
commit 24d8933023

View File

@ -129,23 +129,22 @@ class PDFAttachmentViewer {
* @param {PDFAttachmentViewerRenderParameters} params * @param {PDFAttachmentViewerRenderParameters} params
*/ */
render({ attachments, keepRenderedCapability = false }) { render({ attachments, keepRenderedCapability = false }) {
let attachmentsCount = 0;
if (this.attachments) { if (this.attachments) {
this.reset(keepRenderedCapability === true); this.reset(keepRenderedCapability === true);
} }
this.attachments = attachments || null; this.attachments = attachments || null;
if (!attachments) { if (!attachments) {
this._dispatchEvent(attachmentsCount); this._dispatchEvent(/* attachmentsCount = */ 0);
return; return;
} }
const names = Object.keys(attachments).sort(function (a, b) { const names = Object.keys(attachments).sort(function (a, b) {
return a.toLowerCase().localeCompare(b.toLowerCase()); return a.toLowerCase().localeCompare(b.toLowerCase());
}); });
attachmentsCount = names.length; const attachmentsCount = names.length;
const fragment = document.createDocumentFragment();
for (let i = 0; i < attachmentsCount; i++) { for (let i = 0; i < attachmentsCount; i++) {
const item = attachments[names[i]]; const item = attachments[names[i]];
const filename = removeNullCharacters(getFilenameFromUrl(item.filename)); const filename = removeNullCharacters(getFilenameFromUrl(item.filename));
@ -164,8 +163,9 @@ class PDFAttachmentViewer {
} }
div.appendChild(button); div.appendChild(button);
this.container.appendChild(div); fragment.appendChild(div);
} }
this.container.appendChild(fragment);
this._dispatchEvent(attachmentsCount); this._dispatchEvent(attachmentsCount);
} }