Add basic support for thumbnails for the file element
authorAlexander Ebert <ebert@woltlab.com>
Sat, 2 Mar 2024 16:26:26 +0000 (17:26 +0100)
committerAlexander Ebert <ebert@woltlab.com>
Sat, 8 Jun 2024 10:19:38 +0000 (12:19 +0200)
ts/WoltLabSuite/Core/Component/Attachment/List.ts
ts/WoltLabSuite/Core/Component/File/woltlab-core-file.ts
wcfsetup/install/files/js/WoltLabSuite/Core/Component/Attachment/List.js
wcfsetup/install/files/js/WoltLabSuite/Core/Component/File/woltlab-core-file.js

index 6aaa6e219adead802eeafd06e072a05d9e814d0e..36f31a69935ef42d7b12fe8d9da0a13197d935b5 100644 (file)
@@ -1,14 +1,19 @@
 import WoltlabCoreFileElement from "../File/woltlab-core-file";
 
 function upload(fileList: HTMLElement, file: WoltlabCoreFileElement): void {
-  // TODO: Any sort of upload indicator, meter, spinner, whatever?
   const element = document.createElement("li");
   element.classList.add("attachment__list__item");
   element.append(file);
   fileList.append(element);
 
   void file.ready.then(() => {
-    // TODO: Do something?
+    const thumbnail = file.thumbnails.find((thumbnail) => {
+      return thumbnail.identifier === "tiny";
+    });
+
+    if (thumbnail !== undefined) {
+      file.thumbnail = thumbnail;
+    }
   });
 }
 
@@ -30,7 +35,6 @@ export function setup(container: HTMLElement): void {
   }
 
   uploadButton.addEventListener("uploadStart", (event: CustomEvent<WoltlabCoreFileElement>) => {
-    // TODO: How do we keep track of the files being uploaded?
     upload(fileList!, event.detail);
   });
 }
index 0aadb05ea1a099a4de283341f3fc9335225064d5..3f66d707a1d0f99c0dc9faecf5af59dc198cfb16 100644 (file)
@@ -227,6 +227,14 @@ export class WoltlabCoreFileElement extends HTMLElement {
     this.#readyResolve();
   }
 
+  set thumbnail(thumbnail: Thumbnail) {
+    if (!this.#thumbnails.includes(thumbnail)) {
+      return;
+    }
+
+    this.#replaceWithImage(thumbnail.link);
+  }
+
   get thumbnails(): Thumbnail[] {
     return [...this.#thumbnails];
   }
index 24f55c43e0bd36b47289d59af34262b1f31774b0..af4e0241f576f3e80c51f90f93613d7dd1005d4d 100644 (file)
@@ -3,13 +3,17 @@ define(["require", "exports"], function (require, exports) {
     Object.defineProperty(exports, "__esModule", { value: true });
     exports.setup = void 0;
     function upload(fileList, file) {
-        // TODO: Any sort of upload indicator, meter, spinner, whatever?
         const element = document.createElement("li");
         element.classList.add("attachment__list__item");
         element.append(file);
         fileList.append(element);
         void file.ready.then(() => {
-            // TODO: Do something?
+            const thumbnail = file.thumbnails.find((thumbnail) => {
+                return thumbnail.identifier === "tiny";
+            });
+            if (thumbnail !== undefined) {
+                file.thumbnail = thumbnail;
+            }
         });
     }
     function setup(container) {
@@ -28,7 +32,6 @@ define(["require", "exports"], function (require, exports) {
             uploadButton.insertAdjacentElement("afterend", fileList);
         }
         uploadButton.addEventListener("uploadStart", (event) => {
-            // TODO: How do we keep track of the files being uploaded?
             upload(fileList, event.detail);
         });
     }
index cdae36bada5cb0aefd7a7e2b0f97a035378b9162..5339e47a56eb1a81a699e5a4de905bf06389565f 100644 (file)
@@ -180,6 +180,12 @@ define(["require", "exports"], function (require, exports) {
             this.#rebuildElement();
             this.#readyResolve();
         }
+        set thumbnail(thumbnail) {
+            if (!this.#thumbnails.includes(thumbnail)) {
+                return;
+            }
+            this.#replaceWithImage(thumbnail.link);
+        }
         get thumbnails() {
             return [...this.#thumbnails];
         }