Fix inserting multiple media files via clipboard
authorMatthias Schmidt <gravatronics@live.com>
Mon, 10 May 2021 07:55:48 +0000 (09:55 +0200)
committerMatthias Schmidt <gravatronics@live.com>
Mon, 10 May 2021 07:55:48 +0000 (09:55 +0200)
See 57324f3a91d806572be58cc6b3e7fb169fc26580

ts/WoltLabSuite/Core/Acp/Ui/CodeMirror/Media.ts
ts/WoltLabSuite/Core/Media/Data.ts
ts/WoltLabSuite/Core/Media/Manager/Editor.ts
wcfsetup/install/files/js/WoltLabSuite/Core/Acp/Ui/CodeMirror/Media.js
wcfsetup/install/files/js/WoltLabSuite/Core/Media/Manager/Editor.js

index 5559b12a1cffe3615d9d3ff6e44e6e0b3e439398..48e439de9a1ee8308568a4070510a82776160692 100644 (file)
@@ -17,11 +17,16 @@ class AcpUiCodeMirrorMedia {
     });
   }
 
-  protected insert(mediaList: Map<number, Media>, insertType: MediaInsertType, thumbnailSize: string): void {
+  protected insert(mediaList: Map<number, Media>, insertType: MediaInsertType, thumbnailSize?: string): void {
     switch (insertType) {
       case MediaInsertType.Separate: {
+        let sizeArgument = "";
+        if (thumbnailSize) {
+          sizeArgument = ` size="${thumbnailSize}"`;
+        }
+
         const content = Array.from(mediaList.values())
-          .map((item) => `{{ media="${item.mediaID}" size="${thumbnailSize}" }}`)
+          .map((item) => `{{ media="${item.mediaID}"${sizeArgument} }}`)
           .join("");
 
         (this.element as any).codemirror.replaceSelection(content);
index 5484d7ee573617b6d9c5b9303fdcea0bfa0c39b2..24ad9739232d990782e2bd91469ce8fe38e867d3 100644 (file)
@@ -44,7 +44,7 @@ export const enum MediaInsertType {
 
 export interface MediaManagerEditorOptions extends MediaManagerOptions {
   buttonClass?: string;
-  callbackInsert: (media: Map<number, Media>, insertType: MediaInsertType, thumbnailSize: string) => void;
+  callbackInsert: (media: Map<number, Media>, insertType: MediaInsertType, thumbnailSize?: string) => void;
   editor?: RedactorEditor;
 }
 
index 1c5817cc938776709e4cc7b02cbd51059a5daab5..7fcbfc700423b36dd5cff6d356758119e9d28662 100644 (file)
@@ -216,9 +216,11 @@ class MediaManagerEditor extends MediaManager<MediaManagerEditorOptions> {
     }
 
     if (this._options.callbackInsert !== null) {
-      this._options.callbackInsert(this._mediaToInsert, MediaInsertType.Separate, thumbnailSize!);
+      this._options.callbackInsert(this._mediaToInsert, MediaInsertType.Separate, thumbnailSize);
     } else {
       this._options.editor!.buffer.set();
+
+      this._mediaToInsert.forEach((media) => this._insertMediaItem(thumbnailSize, media));
     }
 
     if (this._mediaToInsertByClipboard) {
@@ -237,7 +239,7 @@ class MediaManagerEditor extends MediaManager<MediaManagerEditorOptions> {
   /**
    * Inserts a single media item into the editor.
    */
-  protected _insertMediaItem(thumbnailSize: string, media: Media): void {
+  protected _insertMediaItem(thumbnailSize: string | undefined, media: Media): void {
     if (media.isImage) {
       let available = "";
       ["small", "medium", "large", "original"].some((size) => {
index 17d0d9630e672faae9efcef2040ff333072ff9eb..e4427a3b3cbe40cdaa9585339cb2150749d4c667 100644 (file)
@@ -15,8 +15,12 @@ define(["require", "exports", "tslib", "../../../Media/Manager/Editor", "../../.
         insert(mediaList, insertType, thumbnailSize) {
             switch (insertType) {
                 case "separate" /* Separate */: {
+                    let sizeArgument = "";
+                    if (thumbnailSize) {
+                        sizeArgument = ` size="${thumbnailSize}"`;
+                    }
                     const content = Array.from(mediaList.values())
-                        .map((item) => `{{ media="${item.mediaID}" size="${thumbnailSize}" }}`)
+                        .map((item) => `{{ media="${item.mediaID}"${sizeArgument} }}`)
                         .join("");
                     this.element.codemirror.replaceSelection(content);
                 }
index e394df54b4ee66fc780d2ef9a388d39e4d25d50b..719b0f47c4f1c036ac63e9eeadffe3a351e14465 100644 (file)
@@ -169,6 +169,7 @@ define(["require", "exports", "tslib", "./Base", "../../Core", "../../Event/Hand
             }
             else {
                 this._options.editor.buffer.set();
+                this._mediaToInsert.forEach((media) => this._insertMediaItem(thumbnailSize, media));
             }
             if (this._mediaToInsertByClipboard) {
                 Clipboard.unmark("com.woltlab.wcf.media", Array.from(this._mediaToInsert.keys()));