Skip to content

Commit 5ceba57

Browse files
committed
refactor: Consolidate repeater field JavaScript and improve live title update selector
1 parent 9e9e6ea commit 5ceba57

1 file changed

Lines changed: 25 additions & 30 deletions

File tree

includes/admin/settings/class-settings-form.php

Lines changed: 25 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -862,10 +862,12 @@ public function callback_repeater( $args ) {
862862
</div>
863863

864864
<script>
865-
jQuery(document).ready(function($) {
866-
var wrapper = $('#<?php echo esc_js( $args['id'] ); ?>-wrapper');
867-
var itemsContainer = wrapper.find('.<?php echo esc_js( $args['id'] ); ?>-items');
868-
var index = <?php echo esc_js( (string) count( $value ) ); ?>;
865+
jQuery(document).ready(function($) {
866+
var wrapper = $('#<?php echo esc_js( $args['id'] ); ?>-wrapper');
867+
var itemsContainer = wrapper.find('.<?php echo esc_js( $args['id'] ); ?>-items');
868+
var index = <?php echo esc_js( (string) count( $value ) ); ?>;
869+
var liveUpdateField = '<?php echo esc_js( ! empty( $args['live_update_field'] ) ? $args['live_update_field'] : 'name' ); ?>';
870+
var fallbackTitle = '<?php echo esc_js( ! empty( $args['new_item_text'] ) ? $args['new_item_text'] : $this->translation_strings['repeater_new_item'] ); ?>';
869871

870872
// Add Item
871873
wrapper.on('click', '.add-item', function() {
@@ -931,20 +933,28 @@ public function callback_repeater( $args ) {
931933
}
932934
});
933935

934-
// Reindex Items After Adding, Removing, or Moving
935-
function reindexItems() {
936-
itemsContainer.find('.wz-repeater-item').each(function(idx) {
936+
// Reindex Items After Adding, Removing, or Moving
937+
function reindexItems() {
938+
itemsContainer.find('.wz-repeater-item').each(function(idx) {
937939
$(this).find(':input').each(function() {
938940
var name = $(this).attr('name');
939-
if (name) {
940-
name = name.replace(/\[\d+\]/, '[' + idx + ']');
941-
$(this).attr('name', name);
942-
}
941+
if (name) {
942+
name = name.replace(/\[\d+\](?=\[(?:fields|row_id)\])/, '[' + idx + ']');
943+
$(this).attr('name', name);
944+
}
945+
});
943946
});
947+
}
948+
949+
// Live update repeater title when the specified field changes.
950+
wrapper.on('input', '.wz-repeater-item :input[name$="[fields][' + liveUpdateField + ']"]', function() {
951+
var $this = $(this);
952+
var newName = $this.val();
953+
var $repeaterTitle = $this.closest('.wz-repeater-item').find('.repeater-title');
954+
$repeaterTitle.text(newName || fallbackTitle);
944955
});
945-
}
946-
});
947-
</script>
956+
});
957+
</script>
948958
<?php
949959
$html = ob_get_clean();
950960
$html .= $this->get_field_description( $args );
@@ -1050,22 +1060,7 @@ public function render_repeater_item( $args, $index, $item = null ) {
10501060
</div>
10511061
</div>
10521062

1053-
<script>
1054-
jQuery(document).ready(function($) {
1055-
var wrapper = $('#<?php echo esc_js( $args['id'] ); ?>-wrapper');
1056-
var itemsContainer = wrapper.find('.<?php echo esc_js( $args['id'] ); ?>-items');
1057-
1058-
// Live update repeater title when the specified field changes
1059-
var liveUpdateField = '<?php echo esc_js( ! empty( $args['live_update_field'] ) ? $args['live_update_field'] : 'name' ); ?>';
1060-
wrapper.on('input', '.wz-repeater-item input[name$="[fields][' + liveUpdateField + ']"]', function() {
1061-
var $this = $(this);
1062-
var newName = $this.val();
1063-
var $repeaterTitle = $this.closest('.wz-repeater-item').find('.repeater-title');
1064-
$repeaterTitle.text(newName || '<?php echo esc_js( $fallback_title ); ?>'); // Update title or set default if empty
1065-
});
1066-
});
1067-
</script>
1068-
<?php
1063+
<?php
10691064
}
10701065

10711066

0 commit comments

Comments
 (0)