From 0dfe1d8afafc59c4a5559c498342668d5a58d6ef Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Thu, 23 Jul 2026 22:41:41 +0000
Subject: [PATCH] =Still working away at the Integrations overhaul
---
assets/js/concise/PopulateForm.js | 209 ++++++++++++++++++++++++++++++++++------------------
1 files changed, 137 insertions(+), 72 deletions(-)
diff --git a/assets/js/concise/PopulateForm.js b/assets/js/concise/PopulateForm.js
index edfda97..3cdbee2 100644
--- a/assets/js/concise/PopulateForm.js
+++ b/assets/js/concise/PopulateForm.js
@@ -38,7 +38,7 @@
for (let [name, value] of Object.entries(this.data.fields)) {
let field = form.querySelector(`[data-field="${name}"]`);
if (field) {
- this.populateField(field, name, value);
+ this.populateField(field, name, value, Object.hasOwn(this.data, 'prefix') ? this.data.prefix : null);
}
}
}
@@ -55,8 +55,9 @@
* @param {HTMLElement} field
* @param {string} name
* @param {mixed} value
+ * @param {string|null} prefix, to prefix the input name/id
*/
- populateField(field, name, value) {
+ populateField(field, name, value, prefix = null) {
let type = this.formHelper.getFieldType(field);
if (!type || this.isEmptyValue(name)) return;
@@ -86,13 +87,13 @@
};
if (Object.hasOwn(handlers, type)) {
- handlers[type](field, name, value);
+ handlers[type](field, name, value, prefix);
} else {
- this.populateText(field, name, value);
+ this.populateText(field, name, value, prefix);
}
}
- populateRepeater(field, name, value) {
+ populateRepeater(field, name, value, prefix = null) {
const container = field.querySelector('.repeater-items');
let template = field.querySelector('template')?.className ?? false;
if (!container || !template) return;
@@ -114,7 +115,9 @@
value.forEach((data, index) => {
const templateData = { ...data, index, repeater: field };
-
+ if (prefix) {
+ templateData.prefix = prefix;
+ }
const row = this.templates.create(template, templateData);
if (!row) return;
@@ -128,12 +131,12 @@
for (let [fieldName, fieldValue] of Object.entries(data)) {
let subField = row.querySelector(`[data-field="${fieldName}"]`);
if (subField) {
- this.populateField(subField, fieldName, fieldValue);
+ this.populateField(subField, fieldName, fieldValue, prefix);
}
}
});
}
- populateTagList(field, name, value) {
+ populateTagList(field, name, value, prefix = null) {
const container = field.querySelector('.tag-items');
let template = field.querySelector('template')?.className ?? false;
@@ -165,6 +168,10 @@
row.querySelectorAll('input[type="hidden"]').forEach(input => {
const key = input.dataset.field;
if (key && data[key] !== undefined) {
+ if (prefix) {
+ window.prefixInput(input, prefix, field,false, true);
+ }
+
input.value = data[key];
}
});
@@ -193,30 +200,38 @@
return data[format] ?? values[0] ?? 'New Item';
}
}
- populateGroup(field, name, value) {
+ populateGroup(field, name, value, prefix = null) {
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) {
- this.populateField(subField, subName, subValue);
+ this.populateField(subField, subName, subValue, prefix);
}
}
}
- populateLocation(field, name, value) {
+ populateLocation(field, name, value, prefix = null) {
const subFields = ['address', 'lat', 'lng', 'street', 'city', 'province', 'postal_code', 'country'];
subFields.forEach(subField => {
if (Object.hasOwn(value, subField)) {
let input = field.querySelector(`[data-location-field="${subField}"]`);
+
+ if (prefix && input) {
+ window.prefixInput(input, prefix, field,false, true);
+ }
if (input) input.value = String(value[subField]||'');
+
}
});
}
- populateTaxonomy(field, name, value) {
+ populateTaxonomy(field, name, value, prefix = null) {
let termIds = this.splitIDs(value);
const hiddenInput = field.querySelector(`input[type="hidden"][name="${name}"]`);
if (hiddenInput) {
+ if (prefix) {
+ window.prefixInput(hiddenInput, prefix, field,false, true);
+ }
hiddenInput.value = termIds.join(',');
if (window.jvbSelector) {
requestAnimationFrame(() => {
@@ -225,12 +240,12 @@
}
}
}
- populateUser(field, name, value) {
- this.populateTaxonomy(field, name, value);
+ populateUser(field, name, value, prefix = null) {
+ this.populateTaxonomy(field, name, value, prefix);
}
- populateUpload(field, name, value) {
+ populateUpload(field, name, value, prefix = null) {
if (field.dataset.subtype && field.dataset.subtype === 'timeline') {
- this.populateTimelineGallery(field,name,value);
+ this.populateTimelineGallery(field,name,value, prefix);
return;
}
@@ -238,6 +253,9 @@
if (ids.length === 0) return;
const hiddenInput = field.querySelector(`input[type="hidden"]`);
if (hiddenInput) {
+ if (prefix) {
+ window.prefixInput(hiddenInput, prefix, field,false, true);
+ }
hiddenInput.value = ids.join(',');
}
@@ -254,55 +272,67 @@
}
};
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, prefix = null) {
+ // 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 && prefix) {
+ window.prefixInput(input, prefix, element,false, true);
+ }
+ if (input && data[m]!=='') {
+ input.value = window.decodeHTMLEntities(data[m]);
+ }
+ }
+ }
+ populateTimelineGallery(field,name, value, prefix = null) {
+ 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) {
+ if (prefix) {
+ data.prefix = prefix;
+ }
+ 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) {
+ }
+ populateMultiValue(field, name, value, prefix = null) {
if (typeof value === 'string') {
try {
value = JSON.parse(value);
@@ -318,37 +348,69 @@
for (let option of select.options) {
option.selected = value.includes(option.value);
}
+
+ if (prefix) {
+ window.prefixInput(select, prefix, field,false, true);
+ }
return;
}
field.querySelectorAll(`input[type="checkbox"][name="${name}[]"], input[type="checkbox"][name="${name}"]`).forEach(checkbox => {
+
+ if (prefix) {
+ window.prefixInput(checkbox, prefix, field,false, true);
+ }
+
checkbox.checked = value.includes(checkbox.value);
});
}
- populateSingleValue(field, name, value) {
+ populateSingleValue(field, name, value, prefix = null) {
value = String(value || '');
let select = field.querySelector(`select[name="${name}"]`);
if (select) {
+ if (prefix) {
+ window.prefixInput(select, prefix, field,false, true);
+ }
select.value = value;
+
return;
}
let input = field.querySelector(`input[type="radio"][value="${value}"], input[type="checkbox"][value="${value}"]`)
|| field.querySelector(`[name="${name}"][value="${value}"]`);
if (input) {
+ if (prefix) {
+ window.prefixInput(input, prefix, field,false, true);
+ }
input.checked = true;
}
- }
- populateBoolean(field, name, value) {
- const input = field.querySelector(`[name="${name}"], input[type="checkbox"]`);
- if (input) {
- input.checked = Boolean(value);
+
+ if (prefix) {
+ field.querySelectorAll(`input[type="radio"],input[type="checkbox"], input[name="${name}"]`).forEach(i => {
+ if (i !== input) {
+ window.prefixInput(input, prefix, field, false, true);
+ }
+ });
}
}
- populateDate(field, name, value) {
+ populateBoolean(field, name, value, prefix = null) {
+ const input = field.querySelector(`[name="${name}"], input[type="checkbox"]`);
+ if (input) {
+ if (prefix) {
+ window.prefixInput(input, prefix, field,false, true);
+ }
+ input.checked = Boolean(value);
+
+ }
+ }
+ populateDate(field, name, value, prefix = null) {
const input = field.querySelector(`[name="${name}"], input`);
if (input) {
+ if (prefix) {
+ window.prefixInput(input, prefix, field,false, true);
+ }
+
if (typeof value === 'object' && Object.hasOwn(value, 'date')) {
value = value.date;
}
@@ -372,17 +434,22 @@
} catch (e) {
input.value = value;
}
+
}
}
- populateNumber(field, name, value) {
+ populateNumber(field, name, value, prefix = null) {
const input = field.querySelector(`[name="${name}"], input[type="number"]`);
if (input) {
+ if (prefix) {
+ window.prefixInput(input, prefix, field,false, true);
+ }
input.value = Number(value) || 0;
+
}
}
- populateTextarea(field, name, value) {
+ populateTextarea(field, name, value, prefix = null) {
let textarea = field.querySelector('textarea[data-editor], textarea');
- this.populateText(field, name, value);
+ this.populateText(field, name, value, prefix);
if (textarea?.dataset.editor) {
const editor = field.querySelector('.ql-editor');
@@ -393,22 +460,20 @@
}
}
}
- populateText(field, name, value) {
+ populateText(field, name, value, prefix = null) {
let input = field.querySelector(`[name="${name}"]`)
|| field.querySelector('textarea[data-editor]')
|| field.querySelector('input:not([type="hidden"]):not([type="file"]), textarea, select');
if (input) {
+ if (prefix) {
+ window.prefixInput(input, prefix, field,false, true);
+ }
input.value = window.decodeHTMLEntities(value??'');
}
}
/********************************************************************
UTILITY
********************************************************************/
- getFormHelper() {
- window.requestAnimationFrame(()=> {
- this.formHelper = window.jvbForm;
- });
- }
splitIDs(value) {
return String(value).split(',')
--
Gitblit v1.10.0