From f1d54ad6f692f5c338ca53c6e9d85034b439766e Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Wed, 17 Jun 2026 15:29:48 +0000
Subject: [PATCH] =Image meta populating correctly for multiple uploads!
---
assets/js/concise/PopulateForm.js | 115 +++++++++++++++++++++++++++++++++++----------------------
1 files changed, 70 insertions(+), 45 deletions(-)
diff --git a/assets/js/concise/PopulateForm.js b/assets/js/concise/PopulateForm.js
index be44bfa..b97c313 100644
--- a/assets/js/concise/PopulateForm.js
+++ b/assets/js/concise/PopulateForm.js
@@ -59,7 +59,7 @@
populateField(field, name, value) {
let type = this.formHelper.getFieldType(field);
- if (!type || this.isEmptyValue(name) || this.isEmptyValue(value)) return;
+ if (!type || this.isEmptyValue(name)) return;
const handlers = {
'repeater': this.populateRepeater.bind(this),
@@ -93,12 +93,23 @@
}
populateRepeater(field, name, value) {
- if (!value || !Array.isArray(value)) return;
-
const container = field.querySelector('.repeater-items');
let template = field.querySelector('template')?.className ?? false;
if (!container || !template) return;
+ // Normalize: server/store may return an object with numeric keys instead of an array
+ if (typeof value === 'string') {
+ try { value = JSON.parse(value); } catch(e) { value = []; }
+ }
+ if (value && !Array.isArray(value) && typeof value === 'object') {
+ value = Object.values(value);
+ }
+
+ if (!value || !Array.isArray(value) || value.length === 0) {
+ window.removeChildren(container);
+ return;
+ }
+
window.removeChildren(container);
value.forEach((data, index) => {
@@ -123,12 +134,23 @@
});
}
populateTagList(field, name, value) {
- if (!value || !Array.isArray(value)) return;
const container = field.querySelector('.tag-items');
let template = field.querySelector('template')?.className ?? false;
if (!container || !template) return;
+ if (typeof value === 'string') {
+ try { value = JSON.parse(value); } catch(e) { value = []; }
+ }
+ if (value && !Array.isArray(value) && typeof value === 'object') {
+ value = Object.values(value);
+ }
+
+ if (!value || !Array.isArray(value) || value.length === 0) {
+ window.removeChildren(container);
+ return;
+ }
+
window.removeChildren(container);
value.forEach((data, index) => {
@@ -173,7 +195,7 @@
}
populateGroup(field, name, value) {
if (!value || typeof value !== 'object') return;
-
+ console.log(value, 'Populating Group Value: ')
for (let [subName, subValue] of Object.entries(value)) {
let subField = field.querySelector(`[data-field="${subName}"]`);
if (subField) {
@@ -192,7 +214,6 @@
}
populateTaxonomy(field, name, value) {
let termIds = this.splitIDs(value);
- if (termIds.length === 0) return;
const hiddenInput = field.querySelector(`input[type="hidden"][name="${name}"]`);
if (hiddenInput) {
@@ -213,7 +234,6 @@
return;
}
- if (this.isEmptyValue(value)) return;
const ids = this.splitIDs(value);
if (ids.length === 0) return;
const hiddenInput = field.querySelector(`input[type="hidden"]`);
@@ -235,53 +255,58 @@
};
data.id = id;
grid.append(this.templates.create('uploadItem', data));
+ let items = grid.children;
+
+ let item = Array.from(items).filter(it => { return it.dataset.id === `${id}`});
+ item = item[0]??false;
+ if (item) {
+ this.populateUploadMeta(item, null, id);
+ }
});
}
-
- this.populateUploadMeta(field, name, value);
}
- populateUploadMeta(element, name, id) {
- // Find the image_data field group
- const imageDataField = element.querySelector('[data-field="image_data"]');
- if (!imageDataField) return;
- let data = this.data.images[id]??false;
- if (!data) return;
+ populateUploadMeta(element, name, id) {
+ // Find the image_data field group
+ const imageDataField = element.querySelector('[data-field="image_data"]');
+ if (!imageDataField) return;
+ let data = this.data.images[id]??false;
+ if (!data) return;
- // Set upload ID or attachment ID
- imageDataField.dataset.attachmentId = data.id;
- imageDataField.setAttribute('data-ignore', '');
+ // Set upload ID or attachment ID
+ imageDataField.dataset.attachmentId = data.id;
+ imageDataField.setAttribute('data-ignore', '');
- // Populate the metadata fields
- const meta = [
- 'image-title',
- 'image-alt-text',
- 'image-caption'
- ];
+ // Populate the metadata fields
+ const meta = [
+ 'image-title',
+ 'image-alt-text',
+ 'image-caption'
+ ];
- for (const m of meta) {
- const input = imageDataField.querySelector(`[data-field="${m}"] input, [data-field="${m}"] textarea`);
- if (input && data[m]!=='') {
- input.value = window.decodeHTMLEntities(data[m]);
+ for (const m of meta) {
+ const input = imageDataField.querySelector(`[data-field="image_data|${m}"] input, [data-field="image_data|${m}"] textarea`);
+ if (input && data[m]!=='') {
+ input.value = window.decodeHTMLEntities(data[m]);
+ }
+ }
+ }
+ populateTimelineGallery(field,name, value) {
+ if (!value || !Array.isArray(value) || value.length === 0) return;
+
+ let grid = field.querySelector('.item-grid');
+
+ if (grid) {
+ window.removeChildren(grid);
+
+ field.querySelector('.progress')?.remove();
+ for (let data of value) {
+ let point = this.templates.create('timelineItem', data);
+ if (point) {
+ grid.append(point);
}
}
}
- populateTimelineGallery(field,name, value) {
- if (!value || !Array.isArray(value) || value.length === 0) return;
-
- let grid = field.querySelector('.item-grid');
-
- if (grid) {
- window.removeChildren(grid);
-
- field.querySelector('.progress')?.remove();
- for (let data of value) {
- let point = this.templates.create('timelineItem', data);
- if (point) {
- grid.append(point);
- }
- }
- }
- }
+ }
populateMultiValue(field, name, value) {
if (typeof value === 'string') {
try {
--
Gitblit v1.10.0