| | |
| | | populate (form, data = {}) |
| | | { |
| | | this.data = data; |
| | | this.mergeRootData(); |
| | | this.form = form; |
| | | if (!this.formHelper) { |
| | | this.formHelper = window.jvbForm; |
| | |
| | | } |
| | | } |
| | | |
| | | mergeRootData(){ |
| | | let check = ['status','date','modified']; |
| | | check.forEach(ch =>{ |
| | | this.data.fields[`post_${ch}`] = this.data[ch]; |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @param {HTMLElement} field |
| | |
| | | } |
| | | } |
| | | populateUser(field, name, value) { |
| | | this.populateTaxonomyField(field, name, value); |
| | | this.populateTaxonomy(field, name, value); |
| | | } |
| | | populateUpload(field, name, value) { |
| | | if (name === 'timeline' || field.dataset.subtype && field.dataset.subtype === 'timeline') { |
| | |
| | | window.removeChildren(grid); |
| | | ids.forEach(id => { |
| | | let data = this.data.images[id]??{}; |
| | | data.field = { |
| | | config: { |
| | | showMeta: true |
| | | } |
| | | }; |
| | | data.id = id; |
| | | grid.append(this.templates.create('uploadItem', data)); |
| | | }); |
| | | } |
| | | |
| | | 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; |
| | | |
| | | // 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' |
| | | ]; |
| | | |
| | | for (const m of meta) { |
| | | const input = imageDataField.querySelector(`[data-field="${m}"] input, [data-field="${m}"] textarea`); |
| | | if (input && data[m]!=='') { |
| | | input.value = data[m]; |
| | | } |
| | | } |
| | | } |
| | | populateTimelineGallery(field,name, value) { |
| | | if (!value || !Array.isArray(value) || value.length === 0) return; |
| | | |
| | |
| | | video: 'video', |
| | | file: '.select-item span', |
| | | img: 'img', |
| | | details: 'details[data-field]', |
| | | imgAlt: '[name="image-alt-text"]', |
| | | imgTitle: '[name="image-title"]', |
| | | imgDesc: '[name="image-caption"]', |
| | | }, |
| | | manyRefs: { |
| | | fields: '.field', |
| | |
| | | el.dataset.itemId = data.id; |
| | | |
| | | if (refs.select) { |
| | | window.prefixInput(refs.select, `${data.id}-`); |
| | | let wrapper = refs.select.closest('.preview'); |
| | | window.prefixInput(refs.select, `${data.id}-`, wrapper); |
| | | } |
| | | if (refs.video) refs.video.remove(); |
| | | if (refs.file) refs.file.remove(); |
| | |
| | | refs.img.alt = imgData['image-alt-text']??''; |
| | | } |
| | | |
| | | if (refs.details) { |
| | | let imgData = p.data.images[data.post_thumbnail]; |
| | | |
| | | refs.details.setAttribute('data-ignore', ''); |
| | | refs.details.dataset.attachmentId = data.post_thumbnail; |
| | | if (Object.hasOwn(imgData, 'image-alt-text') && refs.alt) { |
| | | refs.alt.value = imgData['image-alt-text']; |
| | | } |
| | | if ((Object.hasOwn(imgData, 'image-title') || Object.hasOwn(data, 'file')) && refs.title) { |
| | | refs.title.value = imgData['image-title']||data.file.name; |
| | | } |
| | | if (Object.hasOwn(imgData, 'image-caption') && refs.description) { |
| | | refs.description.value = imgData['image-caption']; |
| | | } |
| | | } |
| | | |
| | | if (manyRefs.fields) { |
| | | for (let field of manyRefs.fields) { |
| | | if (field.dataset.fieldType === 'group') continue; |
| | | |
| | | if (field.dataset.field === 'post_thumbnail') { |
| | | field.remove(); |
| | | continue; |
| | | } |
| | | let name = field.dataset.field; |
| | | let value = data[name]??''; |
| | | if (!p.isEmptyValue(value)) { |
| | | p.populateField(field, name, value); |
| | | } |
| | | const input = field.querySelector('input:not([type="file"]), textarea'); |
| | | const input = field.querySelector('input:not([type="file"])'); |
| | | if (!input) continue; |
| | | window.prefixInput(input, `[${data.id}]`); |
| | | window.prefixInput(input, `[${data.id}]`, field); |
| | | } |
| | | |
| | | } |