| 1 |
jQuery(document).ready(function ($) { |
| 2 |
|
| 3 |
const prefix = WZSettingsAdmin.prefix || 'wz'; |
| 4 |
|
| 5 |
// File browser. |
| 6 |
$('.file-browser').on('click', function (event) { |
| 7 |
event.preventDefault(); |
| 8 |
|
| 9 |
var self = $(this); |
| 10 |
|
| 11 |
// Create the media frame. |
| 12 |
var file_frame = wp.media.frames.file_frame = wp.media({ |
| 13 |
title: self.data('uploader_title'), |
| 14 |
button: { |
| 15 |
text: self.data('uploader_button_text'), |
| 16 |
}, |
| 17 |
multiple: false |
| 18 |
}); |
| 19 |
|
| 20 |
file_frame.on('select', function () { |
| 21 |
attachment = file_frame.state().get('selection').first().toJSON(); |
| 22 |
self.prev('.file-url').val(attachment.url).change(); |
| 23 |
}); |
| 24 |
|
| 25 |
// Finally, open the modal |
| 26 |
file_frame.open(); |
| 27 |
}); |
| 28 |
|
| 29 |
$(function () { |
| 30 |
$("#post-body-content").tabs({ |
| 31 |
create: function (event, ui) { |
| 32 |
$(ui.tab.find("a")).addClass("nav-tab-active"); |
| 33 |
}, |
| 34 |
activate: function (event, ui) { |
| 35 |
$(ui.oldTab.find("a")).removeClass("nav-tab-active"); |
| 36 |
$(ui.newTab.find("a")).addClass("nav-tab-active"); |
| 37 |
} |
| 38 |
}); |
| 39 |
}); |
| 40 |
|
| 41 |
// Initialize ColorPicker. |
| 42 |
$('.color-field').each(function (i, element) { |
| 43 |
$(element).wpColorPicker(); |
| 44 |
}); |
| 45 |
|
| 46 |
// Reset default thumbnail - uses plugin-specific localized data. |
| 47 |
$('.reset-default-thumb').on('click', function () { |
| 48 |
var settingsKey = WZSettingsAdmin.settings_key || ''; |
| 49 |
var thumbDefault = (typeof window[WZSettingsAdmin.prefix + '_admin'] !== 'undefined') |
| 50 |
? window[WZSettingsAdmin.prefix + '_admin'].thumb_default |
| 51 |
: ''; |
| 52 |
$('#' + settingsKey + '\\[thumb_default\\]').val(thumbDefault); |
| 53 |
}); |
| 54 |
|
| 55 |
// Reset formmodified on submit. |
| 56 |
$('#' + prefix + '-settings-form').on('submit', function () { |
| 57 |
formmodified = 0; |
| 58 |
}); |
| 59 |
|
| 60 |
// Initialize Repeater Fields. |
| 61 |
$('.wz-repeater-wrapper').each(function () { |
| 62 |
var wrapper = $(this); |
| 63 |
var itemsContainer = wrapper.find('.wz-repeater-items'); |
| 64 |
var index = parseInt(wrapper.data('index'), 10) || 0; |
| 65 |
var liveUpdateField = wrapper.data('live-update-field') || 'name'; |
| 66 |
var fallbackTitle = wrapper.data('fallback-title') || ''; |
| 67 |
var liveUpdateOptions = wrapper.data('live-update-field-options') || {}; |
| 68 |
|
| 69 |
function reindexItems() { |
| 70 |
itemsContainer.find('.wz-repeater-item').each(function (idx) { |
| 71 |
$(this).find(':input').each(function () { |
| 72 |
var name = $(this).attr('name'); |
| 73 |
if (name) { |
| 74 |
name = name.replace(/\[\d+\](?=\[(?:fields|row_id)\])/, '[' + idx + ']'); |
| 75 |
$(this).attr('name', name); |
| 76 |
} |
| 77 |
}); |
| 78 |
}); |
| 79 |
} |
| 80 |
|
| 81 |
// Add Item. |
| 82 |
wrapper.on('click', '.add-item', function () { |
| 83 |
var templateEl = wrapper.find('.repeater-template').get(0); |
| 84 |
if (!templateEl) { |
| 85 |
return; |
| 86 |
} |
| 87 |
var template = templateEl.innerHTML; |
| 88 |
var uniqueId = 'row_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9); |
| 89 |
template = template.replace(/{{INDEX}}/g, index); |
| 90 |
template = template.replace(/{{ROW_ID}}/g, uniqueId); |
| 91 |
itemsContainer.append(template); |
| 92 |
index++; |
| 93 |
var newItem = itemsContainer.find('.wz-repeater-item:last'); |
| 94 |
itemsContainer.find('.repeater-item-header:last .toggle-icon').text('\u25b2'); |
| 95 |
itemsContainer.find('.repeater-item-content:last').css('display', 'block'); |
| 96 |
if (window.WZInitTomSelect) { |
| 97 |
window.WZInitTomSelect(newItem.get(0)); |
| 98 |
} |
| 99 |
document.dispatchEvent(new CustomEvent('wz:repeater-item-added', { detail: { container: newItem.get(0) } })); |
| 100 |
}); |
| 101 |
|
| 102 |
// Remove Item. |
| 103 |
wrapper.on('click', '.remove-item', function () { |
| 104 |
$(this).closest('.wz-repeater-item').remove(); |
| 105 |
reindexItems(); |
| 106 |
}); |
| 107 |
|
| 108 |
// Move Up. |
| 109 |
wrapper.on('click', '.move-up', function () { |
| 110 |
var item = $(this).closest('.wz-repeater-item'); |
| 111 |
var prev = item.prev(); |
| 112 |
if (prev.length) { |
| 113 |
item.insertBefore(prev); |
| 114 |
reindexItems(); |
| 115 |
} |
| 116 |
}); |
| 117 |
|
| 118 |
// Move Down. |
| 119 |
wrapper.on('click', '.move-down', function () { |
| 120 |
var item = $(this).closest('.wz-repeater-item'); |
| 121 |
var next = item.next(); |
| 122 |
if (next.length) { |
| 123 |
item.insertAfter(next); |
| 124 |
reindexItems(); |
| 125 |
} |
| 126 |
}); |
| 127 |
|
| 128 |
// Toggle Accordion. |
| 129 |
wrapper.on('click', '.repeater-item-header', function () { |
| 130 |
var $this = $(this); |
| 131 |
var $toggleIcon = $this.find('.toggle-icon'); |
| 132 |
var $content = $this.next('.repeater-item-content'); |
| 133 |
if ($content.is(':visible')) { |
| 134 |
$content.slideUp(); |
| 135 |
$toggleIcon.text('\u25bc'); |
| 136 |
} else { |
| 137 |
$content.slideDown(); |
| 138 |
$toggleIcon.text('\u25b2'); |
| 139 |
} |
| 140 |
}); |
| 141 |
|
| 142 |
// Live update repeater title when the specified field changes. |
| 143 |
// Handles text inputs (input event), selects (change event, uses option text), |
| 144 |
// and TomSelect-enhanced inputs (change event, uses displayed text or value). |
| 145 |
function updateRepeaterTitle($field) { |
| 146 |
var newName; |
| 147 |
var val = $field.val(); |
| 148 |
if ($field.is('select')) { |
| 149 |
// Ignore placeholder options (empty value). |
| 150 |
newName = val ? $field.find('option:selected').text().trim() : ''; |
| 151 |
} else { |
| 152 |
newName = val ? (liveUpdateOptions[val] || val) : ''; |
| 153 |
} |
| 154 |
$field.closest('.wz-repeater-item').find('.repeater-title').text(newName || fallbackTitle); |
| 155 |
} |
| 156 |
|
| 157 |
wrapper.on('input change', '.wz-repeater-item :input[name$="[fields][' + liveUpdateField + ']"]', function () { |
| 158 |
updateRepeaterTitle($(this)); |
| 159 |
}); |
| 160 |
}); |
| 161 |
|
| 162 |
}); |
| 163 |
|