jQuery(document).ready(function ($) { $(".bizhub-customizer-repeater").each(function () { var $repeater = $(this); var $input = $repeater.siblings(".bizhub-customizer-repeater-field"); var fields = JSON.parse($input.attr("data-fields") || "[]"); function updateValue() { var items = []; $repeater.find(".bizhub-customizer-repeater-item").each(function () { var item = {}; $(this).find("input:not([type=hidden]), textarea").each(function () { var key = $(this).attr("name"); item[key] = $(this).val(); }); var $imageField = $(this).find('input[name="image"]'); if ($imageField.length) { item["image"] = $imageField.val(); } items.push(item); }); $input.val(JSON.stringify(items)).trigger("change"); } function generateItem(itemData = {}) { var newItem = $('
  • '); fields.forEach(function (field) { var key = field.id; var value = itemData[key] || ""; if (field.type === "text") { newItem.append(``); } else if (field.type === "textarea") { newItem.append(``); } else if (field.type === "image") { var previewImage = ``; var imageInput = ``; var uploadButton = ''; newItem.append(previewImage + imageInput + uploadButton ); } else if (field.type === "url") { newItem.append(``); } }); newItem.append(''); return newItem; } // Ensure the list is cleared each time the customizer section is loaded var savedItems = JSON.parse($input.val() || "[]"); var $list = $repeater.find(".bizhub-customizer-repeater-list"); // Clear the list before appending saved items $list.empty(); // Add each saved item to the repeater list savedItems.forEach(function (itemData) { var newItem = generateItem(itemData); $list.append(newItem); }); // Event handler for "Add Item" button $repeater.on("click", ".bizhub-customizer-repeater-add", function () { var newItem = generateItem(); $repeater.find(".bizhub-customizer-repeater-list").append(newItem); updateValue(); }); // Event handler for "Remove" button $repeater.on("click", ".bizhub-customizer-repeater-remove", function () { $(this).closest(".bizhub-customizer-repeater-item").remove(); updateValue(); }); // Handle Image Upload (WordPress Media Uploader) $repeater.on("click", ".bizhub-upload-image-button", function (e) { e.preventDefault(); var button = $(this); var imageField = button.siblings('input[type="hidden"]'); var previewImage = button.siblings(".bizhub-preview-image"); var mediaUploader = wp.media({ title: wp.i18n.__("Select or Upload Image", "bizhub"), button: { text: wp.i18n.__("Use this Image", "bizhub") }, multiple: false, }); mediaUploader.on("select", function () { var attachment = mediaUploader.state().get("selection").first().toJSON(); imageField.val(attachment.url); previewImage.attr("src", attachment.url).show(); updateValue(); }); mediaUploader.open(); }); // Auto-update input fields $repeater.on("input", "input, textarea", function () { updateValue(); }); }); });