Skip to content

Commit d5c612d

Browse files
committed
MetadataHelpers: structural rework
Agent-assisted experimental change, allows external reuse of this logic
1 parent d7f66c3 commit d5c612d

1 file changed

Lines changed: 46 additions & 16 deletions

File tree

src/wwwroot/js/genpage/helpers/metadatahelpers.js

Lines changed: 46 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -232,31 +232,36 @@ function parseMetadata(data, callback) {
232232
let metadataKeyFormatCleaners = [];
233233
let 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

Comments
 (0)