@@ -232,31 +232,36 @@ function parseMetadata(data, callback) {
232232let metadataKeyFormatCleaners = [ ] ;
233233let promptCidMatcher = new RegExp ( '\<(.*?)//cid=\\d+>' , 'g' ) ;
234234
235- function formatMetadata ( metadata ) {
235+ function formatMetadataEntry ( entry ) {
236+ return `<span class="param_view_block tag-text tag-type-${ entry . hash } ${ entry . added } "><span class="param_view_name" title="${ escapeHtmlNoBr ( entry . keyTitle ) } ">${ escapeHtml ( entry . key ) } </span>: ${ entry . valueHtml } ${ entry . extras } </span>` ;
237+ }
238+
239+ function getFormattedMetadataEntries ( metadata ) {
236240 if ( ! metadata ) {
237- return '' ;
241+ return { entries : [ ] , error : '' } ;
238242 }
239243 let data ;
240244 try {
241245 let readable = interpretMetadata ( metadata ) ;
242246 if ( ! readable ) {
243- return '' ;
247+ return { entries : [ ] , error : '' } ;
244248 }
245249 data = JSON . parse ( readable ) ;
246250 }
247251 catch ( e ) {
248252 console . log ( `Error parsing metadata '${ metadata } ': ${ e } ` ) ;
249- return `Broken metadata: ${ escapeHtml ( metadata ) } ` ;
253+ return { entries : [ ] , error : `Broken metadata: ${ escapeHtml ( metadata ) } ` } ;
250254 }
251- let result = '' ;
252255 function appendObject ( obj ) {
256+ let result = [ ] ;
253257 if ( obj ) {
254258 for ( let key of Object . keys ( obj ) ) {
255259 let val = obj [ key ] ;
256260 if ( val !== null && val !== '' ) { // According to javascript, 0 == '', so have to === to block that. Argh.
257261 for ( let cleaner of metadataKeyFormatCleaners ) {
258262 key = cleaner ( key ) ;
259263 }
264+ let id = key ;
260265 let hash = Math . abs ( hashCode ( key . toLowerCase ( ) . replaceAll ( ' ' , '' ) . replaceAll ( '_' , '' ) ) ) % 10 ;
261266 let title = '' ;
262267 let keyTitle = '' ;
@@ -283,18 +288,31 @@ function formatMetadata(metadata) {
283288 }
284289 }
285290 }
286- result += `<span class="param_view_block tag-text tag-type- ${ hash } ${ added } "><span class="param_view_name" title=" ${ escapeHtmlNoBr ( keyTitle ) } "> ${ escapeHtml ( key ) } </span>: ` ;
291+ let valueHtml , compareValue ;
287292 if ( typeof val == 'object' ) {
288- appendObject ( val ) ;
293+ valueHtml = appendObject ( val ) . map ( entry => formatMetadataEntry ( entry ) ) . join ( ', ' ) ;
294+ compareValue = JSON . stringify ( val ) ;
289295 }
290296 else {
291- result += `<span class="param_view tag-text-soft tag-type-${ hash } " title="${ escapeHtmlNoBr ( title ) } ">${ escapeHtml ( `${ val } ` ) } </span>` ;
297+ valueHtml = `<span class="param_view tag-text-soft tag-type-${ hash } " title="${ escapeHtmlNoBr ( title ) } ">${ escapeHtml ( `${ val } ` ) } </span>` ;
298+ compareValue = `${ val } ` ;
292299 }
293- result += ` ${ extras } </span>, ` ;
300+ result . push ( { id : id , key : key , keyTitle : keyTitle , hash : hash , added : added , extras : extras , valueHtml : valueHtml , compareValue : compareValue } ) ;
294301 }
295302 }
296303 }
304+ return result ;
297305 } ;
306+ let entries = [ ] ;
307+ function appendEntries ( newEntries , breakAfter = false ) {
308+ if ( newEntries . length == 0 ) {
309+ return ;
310+ }
311+ if ( breakAfter ) {
312+ newEntries [ newEntries . length - 1 ] . breakAfter = true ;
313+ }
314+ entries . push ( ...newEntries ) ;
315+ }
298316 if ( 'swarm_version' in data . sui_image_params && 'sui_extra_data' in data ) {
299317 data . sui_extra_data [ 'Swarm Version' ] = data . sui_image_params . swarm_version ;
300318 delete data . sui_image_params . swarm_version ;
@@ -308,13 +326,11 @@ function formatMetadata(metadata) {
308326 delete data . sui_extra_data . original_prompt ;
309327 }
310328 }
311- appendObject ( { 'prompt' : prompt } ) ;
312- result += '\n<br>' ;
329+ appendEntries ( appendObject ( { 'prompt' : prompt } ) , true ) ;
313330 delete data . sui_image_params . prompt ;
314331 }
315332 if ( 'negativeprompt' in data . sui_image_params && data . sui_image_params . negativeprompt ) {
316- appendObject ( { 'negativeprompt' : data . sui_image_params . negativeprompt } ) ;
317- result += '\n<br>' ;
333+ appendEntries ( appendObject ( { 'negativeprompt' : data . sui_image_params . negativeprompt } ) , true ) ;
318334 delete data . sui_image_params . negativeprompt ;
319335 }
320336 if ( 'loras' in data . sui_image_params && 'loraweights' in data . sui_image_params ) {
@@ -362,15 +378,29 @@ function formatMetadata(metadata) {
362378 for ( let key of Object . keys ( data . sui_image_params ) ) {
363379 paramMap [ key ] = data . sui_image_params [ key ] ;
364380 }
365- appendObject ( paramMap ) ;
366- result += '\n<br>' ;
381+ appendEntries ( appendObject ( paramMap ) , true ) ;
367382 if ( 'sui_extra_data' in data ) {
368383 if ( 'prep_time' in data . sui_extra_data && 'generation_time' in data . sui_extra_data ) {
369384 data . sui_extra_data [ 'Generation Time' ] = `${ data . sui_extra_data . prep_time } prep, ${ data . sui_extra_data . generation_time } gen` ;
370385 delete data . sui_extra_data . prep_time ;
371386 delete data . sui_extra_data . generation_time ;
372387 }
373- appendObject ( data . sui_extra_data ) ;
388+ appendEntries ( appendObject ( data . sui_extra_data ) ) ;
389+ }
390+ return { entries : entries , error : '' } ;
391+ }
392+
393+ function formatMetadata ( metadata ) {
394+ let formatted = getFormattedMetadataEntries ( metadata ) ;
395+ if ( formatted . error ) {
396+ return formatted . error ;
397+ }
398+ let result = '' ;
399+ for ( let entry of formatted . entries ) {
400+ result += `${ formatMetadataEntry ( entry ) } , ` ;
401+ if ( entry . breakAfter ) {
402+ result += '\n<br>' ;
403+ }
374404 }
375405 return result ;
376406}
0 commit comments