From 2586e0e6f89dc98fd9cc7cb7f31faa27cdf849c0 Mon Sep 17 00:00:00 2001 From: Vanilagy <1696106+Vanilagy@users.noreply.github.com> Date: Sat, 6 Sep 2025 02:15:42 +0200 Subject: [PATCH] Display tags in metadata example --- examples/metadata-extraction/index.html | 2 +- .../metadata-extraction.ts | 44 ++++++++++++++++++- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/examples/metadata-extraction/index.html b/examples/metadata-extraction/index.html index e6deed9..64e4c0f 100644 --- a/examples/metadata-extraction/index.html +++ b/examples/metadata-extraction/index.html @@ -57,7 +57,7 @@ @reference "../base.css"; ul { - @apply py-1 px-4 bg-gray-500/10 rounded-lg; + @apply py-1 px-4 bg-gray-500/10 rounded-lg max-w-lg; } b { diff --git a/examples/metadata-extraction/metadata-extraction.ts b/examples/metadata-extraction/metadata-extraction.ts index 8cef42c..a071e95 100644 --- a/examples/metadata-extraction/metadata-extraction.ts +++ b/examples/metadata-extraction/metadata-extraction.ts @@ -80,6 +80,37 @@ const extractMetadata = (resource: File | string) => { : {} ), }))), + 'Metadata tags': input.getMetadataTags().then((tags) => { + const result = { + 'Title': tags.title, + 'Description': tags.description, + 'Artist': tags.artist, + 'Album': tags.album, + 'Album artist': tags.albumArtist, + 'Track number': tags.trackNumber, + 'Tracks total': tags.tracksTotal, + 'Disc number': tags.discNumber, + 'Discs total': tags.discsTotal, + 'Genre': tags.genre, + 'Date': tags.date?.toISOString().slice(0, 10), + 'Lyrics': tags.lyrics, + 'Comment': tags.comment, + 'Images': tags.images?.map((image) => { + const blob = new Blob([image.data], { type: image.mimeType }); + const element = new Image(); + element.src = URL.createObjectURL(blob); + + return element; + }), + 'Raw tag count': tags.raw && Object.keys(tags.raw).length, + }; + + if (Object.values(result).some(x => x !== undefined)) { + return result; + } else { + return undefined; + } + }), }; fileNameElement.textContent = resource instanceof File ? resource.name : resource; @@ -93,7 +124,9 @@ const extractMetadata = (resource: File | string) => { // Creates an HTML element to display any given value const renderValue = (value: unknown) => { - if (Array.isArray(value)) { + if (value instanceof HTMLElement) { + return value; + } else if (Array.isArray(value)) { const arrayAsObject: Record = Object.fromEntries( value.map((item, index) => [(index + 1).toString(), item]), ); @@ -116,6 +149,7 @@ const renderObject = (object: Record) => { for (const key of keys) { const value = object[key]; const listItem = document.createElement('li'); + listItem.style.wordBreak = 'break-word'; const keySpan = document.createElement('b'); keySpan.textContent = `${key}: `; @@ -132,6 +166,10 @@ const renderObject = (object: Record) => { // Replace the loading text with the resolved value listItem.removeChild(loadingSpan); listItem.appendChild(renderValue(resolvedValue)); + + if (resolvedValue === undefined) { + listElement.removeChild(listItem); + } }).catch((error) => { console.error(error); @@ -146,7 +184,9 @@ const renderObject = (object: Record) => { listItem.appendChild(renderValue(value)); } - listElement.appendChild(listItem); + if (value !== undefined) { + listElement.appendChild(listItem); + } } return listElement;