From 7a9054bb3f033c98067b3196378311dae54c5fbf Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Tue, 20 Jan 2026 01:31:53 +0000
Subject: [PATCH] =OperationQueue refactor to the JVBase/managers/queue namespace

---
 inc/meta/MetaForm.php |  153 ++++++++++++++++++++++++++++-----------------------
 1 files changed, 84 insertions(+), 69 deletions(-)

diff --git a/inc/meta/MetaForm.php b/inc/meta/MetaForm.php
index 51959aa..bfb93eb 100644
--- a/inc/meta/MetaForm.php
+++ b/inc/meta/MetaForm.php
@@ -212,6 +212,7 @@
 		<div class="field <?= esc_attr($field['type']) ?> <?= esc_attr($name) ?>"
 			<?= $conditional ?>
 			 data-field="<?= esc_attr($name) ?>"
+			 data-field-type="<?=esc_attr($field['type'])?>"
 			<?= $validationAttrs ?>>
 
 			<?php $this->renderLabel($name, $field); ?>
@@ -366,6 +367,7 @@
 		<div class="field <?= esc_attr($field['type']) ?> <?= esc_attr($name) ?>"
 			<?= $conditional ?>
 			 data-field="<?= esc_attr($name) ?>"
+			 data-field-type="<?=esc_attr($field['type'])?>"
 			<?= $validationAttrs ?>>
 
 			<?php $this->renderLabel($name, $field); ?>
@@ -424,6 +426,7 @@
 		<div class="field <?= esc_attr($field['type']) ?> <?= esc_attr($name) ?> row"
 			<?= $conditional ?>
 			 data-field="<?= esc_attr($name) ?>"
+			 data-field-type="<?=esc_attr($field['type'])?>"
 			<?= $validationAttrs ?>>
 
 			<?php $this->renderLabel($name, $field); ?>
@@ -474,6 +477,7 @@
 		<div class="field <?= esc_attr($field['type']) ?> <?= esc_attr($name) ?>"
 			<?= $conditional ?>
 			 data-field="<?= esc_attr($name) ?>"
+			 data-field-type="<?=esc_attr($field['type'])?>"
 			<?= $validationAttrs ?>>
 
 			<?php $this->renderLabel($name, $field); ?>
@@ -514,6 +518,7 @@
 		<div class="field <?= esc_attr($field['type']) ?> <?= esc_attr($name) ?>"
 			<?= $conditional ?>
 			 data-field="<?= esc_attr($name) ?>"
+			 data-field-type="<?=esc_attr($field['type'])?>"
 			<?= $validationAttrs ?>>
 
 			<fieldset>
@@ -559,6 +564,7 @@
 		<div class="field <?= esc_attr($field['type']) ?> <?= esc_attr($name) ?>"
 			<?= $conditional ?>
 			 data-field="<?= esc_attr($name) ?>"
+			 data-field-type="<?=esc_attr($field['type'])?>"
 			<?= $validationAttrs ?>>
 
 			<fieldset>
@@ -600,6 +606,7 @@
 		<div class="field true-false <?= esc_attr($name) ?> row btw"
 			<?= $conditional ?>
 			 data-field="<?= esc_attr($name) ?>"
+			 data-field-type="<?=esc_attr($field['type'])?>"
 			<?= $validationAttrs ?>>
 
 			<label class="toggle-switch row" <?= $describedBy ?>>
@@ -642,6 +649,7 @@
 		?>
 		<div class="field repeater <?=$name?>"
 			 data-field="<?= esc_attr($name); ?>"
+			 data-field-type="<?=esc_attr($field['type'])?>"
 			<?= $describedBy ?>
 			<?= $row_label ? 'data-label="' . esc_attr($row_label) . '"' : ''; ?>
 			<?=$conditional?>>
@@ -663,7 +671,7 @@
 				?>
 			</div>
 
-			<template class="<?=uniqid('repeaterTemplate')?>">
+			<template class="<?=uniqid('repeaterRow')?>">
 				<?php $this->renderRepeaterRow($field['fields'], array(), '', '', $rowTitle); ?>
 			</template>
 
@@ -756,7 +764,8 @@
 		?>
 		<<?= $fieldset?> class="field group <?= esc_attr($name) ?>"
 			<?= $conditional ?>
-				  data-field="<?= esc_attr($name) ?>"
+		  	data-field="<?= esc_attr($name) ?>"
+			data-field-type="<?=esc_attr($field['type'])?>"
 			<?= $validationAttrs ?>
 			<?= $describedBy ?>>
 			<<?=$legend?>><?= esc_html($field['label']) ?></<?=$legend?>>
@@ -880,6 +889,8 @@
 		}
 		?>
 		<div class="field upload <?= esc_attr($name) ?>"
+			 data-field="<?=esc_attr($name)?>"
+			 data-field-type="upload"
 			<?= $dataAttrString ?>
 			<?= $conditional ?>>
 
@@ -1100,71 +1111,72 @@
 		$dataID = ($id) ? ['id' => $id] : '';
 		?>
 		<div class="item upload"<?= ($id) ? ' data-id="'.$id.'"' : '' ?>>
-				<div class="preview">
-					<?php jvbRenderProgressBar('',true) ?>
-					<input type="checkbox" class="upload-select" name="select-item" id="select-item<?=$addID?>">
-					<label for="select-item<?=$addID?>" aria-label="Select image">
-						<?= ($attachment) ?: '<img>
-						<video></video>
-						<span></span>' ?>
-					</label>
-					<div class="item-actions row btw">
-						<div class="radio-button">
-							<input type="radio" class="featured btn" name="featured" id="featured" hidden>
-							<label for="featured">
-								<?=jvbIcon('star')?>
-								<?=jvbIcon('star', ['style' => 'fill'])?>
-								<span class="screen-reader-text">Set as featured image</span>
-							</label>
-						</div>
-
-						<button type="button" data-action="delete-upload" title="Remove from Group">
-							<?=jvbIcon('trash')?>
-						</button>
+			<div class="preview">
+				<?php jvbRenderProgressBar('',true) ?>
+				<input type="checkbox" class="upload-select" name="select-item" id="select-item<?=$addID?>">
+				<label for="select-item<?=$addID?>" aria-label="Select image">
+					<?= ($attachment) ?: '<img>
+                <video></video>
+                <span></span>' ?>
+				</label>
+				<div class="item-actions row btw">
+					<div class="radio-button">
+						<input type="radio" class="featured btn" name="featured" id="featured" hidden>
+						<label for="featured">
+							<?=jvbIcon('star')?>
+							<?=jvbIcon('star', ['style' => 'fill'])?>
+							<span class="screen-reader-text">Set as featured image</span>
+						</label>
 					</div>
+
+					<button type="button" data-action="delete-upload" title="Remove from Group">
+						<?=jvbIcon('trash')?>
+					</button>
 				</div>
-				<details>
-					<summary class="row btw"><?=jvbIcon('pencil-simple')?><span>Edit Info</span></summary>
+			</div>
+			<details>
+				<summary class="row btw"><?=jvbIcon('pencil-simple')?><span>Edit Info</span></summary>
 
-		<?php
+				<?php
+				$fields = array_key_exists('fields', $config) ? $config['fields'] : [];
 
-		$fields = array_key_exists('fields', $config) ? $config['fields'] : [];
-		$fields = array_merge([
-			'upload_data'	=> [
-				'type'	=> 'group',
-				'wrap'	=> 'details',
-				'label'	=> 'Image Info',
-				'hint'	=> 'These will be automatically generated if left blank.',
-				'fields'	=> [
-					'image-title'.$addID => [
-						'type'	=> 'text',
-						'label'	=> 'Image Title',
-						'value'	=> $title,
-						'data'	=> $dataID
-					],
-					'image-alt-text'.$addID => [
-						'type'	=> 'text',
-						'label'	=> 'Alt Text',
-						'value'	=> $alt,
-						'hint'	=> 'Alt text helps the visually impaired, as well as some benefits for SEO.',
-						'data'	=> $dataID
-					],
-					'image-caption'.$addID => [
-						'type'	=> 'textarea',
-						'value'	=> $caption,
-						'label'	=> 'Image Caption',
-						'data'	=> $dataID
-					]
-				]
-			]
-		], $fields);
+				// Only add image_data if not already provided
+				if (!array_key_exists('image_data', $fields)) {
+					$fields['image_data'] = [
+						'type'   => 'group',
+						'wrap'   => 'details',
+						'label'  => 'Image Info',
+						'hint'   => 'These will be automatically generated if left blank.',
+						'fields' => [
+							'image-title'.$addID => [
+								'type'  => 'text',
+								'label' => 'Image Title',
+								'value' => $title,
+								'data'  => $dataID
+							],
+							'image-alt-text'.$addID => [
+								'type'  => 'text',
+								'label' => 'Alt Text',
+								'value' => $alt,
+								'hint'  => 'Alt text helps the visually impaired, as well as some benefits for SEO.',
+								'data'  => $dataID
+							],
+							'image-caption'.$addID => [
+								'type'  => 'textarea',
+								'value' => $caption,
+								'label' => 'Image Caption',
+								'data'  => $dataID
+							]
+						]
+					];
+				}
 
-		$meta = new MetaManager($id);
-		foreach ($fields as $field => $config) {
-			$meta->render('form', $field, $config);
-		}
-		?>
-				</details>
+				$meta = new MetaManager($id);
+				foreach ($fields as $field => $config) {
+					$meta->render('form', $field, $config);
+				}
+				?>
+			</details>
 		</div>
 		<?php
 	}
@@ -1182,7 +1194,7 @@
 					<?php jvbRenderProgressBar('',true) ?>
 					<input type="checkbox" class="upload-select" name="select-item" id="select-item<?=$addID?>">
 					<label for="select-item<?=$addID?>" aria-label="Select image">
-						<?= ($attachment) ? $attachment : '<img>
+						<?= ($attachment) ?: '<img>
 						<video></video>
 						<span></span>'; ?>
 					</label>
@@ -1255,7 +1267,7 @@
 					<?php jvbRenderProgressBar('',true) ?>
 					<input type="checkbox" class="upload-select" name="select-item" id="select-item<?=$addID?>">
 					<label for="select-item<?=$addID?>" aria-label="Select image">
-						<?= ($attachment) ? $attachment : '<img>
+						<?= ($attachment) ?: '<img>
 						<video></video>
 						<span></span>'; ?>
 					</label>
@@ -1351,13 +1363,12 @@
 	 * Generic selector field renderer
 	 * Handles both taxonomy and post selectors with consistent structure
 	 */
-	private function renderSelectorField(string $name, mixed $value, array $field, string $type): void
+	public function renderSelectorField(string $name, mixed $value, array $field, string $type): void
 	{
 		$conditional = $this->handleConditionalField($field);
 		$validationAttrs = $this->buildValidationAttributes($field);
 		$describedBy = (!empty($field['description'])) ? ' aria-describedby="' . $name . '-help"' : '';
 
-		$isSimple = (array_key_exists('mode', $field) && $field['mode']==='simple');
 		// Parse selected values
 		$value = (is_array($value)) ? array_filter(array_map('absint', $value)): $value;
 		$selected = ($value === '') ? [] : (is_array($value) ? $value : explode(',', $value));
@@ -1411,7 +1422,8 @@
 		<div class="field selector <?= esc_attr($type) ?> <?= esc_attr($name) ?>"
 			<?= $conditional ?>
 			 data-field="<?= esc_attr($name) ?>"
-			 data-type="selector" data-subtype="<?= esc_attr($type)?>"
+			 data-field-type="selector"
+			 data-type="<?=esc_attr($field['type'])?>"
 			<?= $validationAttrs ?>
 			<?= $describedBy ?>>
 
@@ -1477,6 +1489,7 @@
 
 		<div class="field location <?= esc_attr($field_id) ?>"
 			 data-field="<?= esc_attr($field_id) ?>"
+			 data-field-type="<?=esc_attr($field['type'])?>"
 			 data-location-field-init="<?= $json_config ?>"<?=$describedBy?>>
 
 			<?php
@@ -1639,6 +1652,7 @@
 		?>
 		<div class="field tag-list <?= esc_attr($name) ?>"
 			 data-field="<?= esc_attr($name) ?>"
+			 data-field-type="<?=esc_attr($field['type'])?>"
 			 data-tag-format="<?= esc_attr($tagFormat) ?>"
 			<?= $describedBy ?>
 			<?= $conditional ?>
@@ -1681,7 +1695,7 @@
 			</div>
 
 			<!-- Template for new tags -->
-			<template class="tag-template">
+			<template class="<?=uniqid('tagListItem')?>">
 				<?php $this->renderTagItem($field['fields'], [], '', $name, $tagFormat); ?>
 			</template>
 
@@ -1715,7 +1729,8 @@
 				<input type="hidden"
 					   name="<?= esc_attr($full_name) ?>"
 					   value="<?= esc_attr($value) ?>"
-					   data-field="<?= esc_attr($field_name) ?>" />
+					   data-field="<?= esc_attr($field_name) ?>"
+					   data-field-type="<?=esc_attr($field_config['type'])?>" />
 			<?php endforeach; ?>
 
 			<button type="button" class="remove-tag" aria-label="Remove">

--
Gitblit v1.10.0