Skip to content

Commit 51cded8

Browse files
fix: resolve cloneable field issues with select_advanced and switch (#1644)
1 parent 6027d90 commit 51cded8

1 file changed

Lines changed: 22 additions & 17 deletions

File tree

js/clone.js

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
// Name attribute
1616
var name = this.name;
17-
if ( name && ! $field.closest( '.rwmb-group-clone' ).length ) {
17+
if ( name && !$field.closest( '.rwmb-group-clone' ).length ) {
1818
$field.attr( 'name', cloneIndex.replace( index, name, '[', ']', false ) );
1919
}
2020

@@ -60,7 +60,7 @@
6060
var regex = new RegExp( cloneIndex.escapeRegex( before ) + '(\\d+)' + cloneIndex.escapeRegex( after ) + end ),
6161
newValue = before + index + after;
6262

63-
return regex.test( value ) ? value.replace( regex, newValue ) : (alternative ? value + newValue : value );
63+
return regex.test( value ) ? value.replace( regex, newValue ) : ( alternative ? value + newValue : value );
6464
},
6565

6666
/**
@@ -94,7 +94,7 @@
9494

9595
// Object holds all method related to fields' value when clone.
9696
var cloneValue = {
97-
setDefault: function() {
97+
setDefault: function () {
9898
var $field = $( this );
9999

100100
if ( true !== $field.data( 'clone-default' ) ) {
@@ -107,25 +107,30 @@
107107
if ( 'radio' === type ) {
108108
$field.prop( 'checked', $field.val() === defaultValue );
109109
} else if ( $field.hasClass( 'rwmb-checkbox' ) || $field.hasClass( 'rwmb-switch' ) ) {
110-
$field.prop( 'checked', !! defaultValue );
110+
$field.prop( 'checked', !!defaultValue );
111111
} else if ( $field.hasClass( 'rwmb-checkbox_list' ) ) {
112112
var value = $field.val();
113113
$field.prop( 'checked', Array.isArray( defaultValue ) ? -1 !== defaultValue.indexOf( value ) : value == defaultValue );
114114
} else if ( $field.is( 'select' ) ) {
115115
$field.find( 'option[value="' + defaultValue + '"]' ).prop( 'selected', true );
116-
} else if ( ! $field.hasClass( 'rwmb-hidden' ) ) {
116+
} else if ( !$field.hasClass( 'rwmb-hidden' ) ) {
117117
$field.val( defaultValue );
118118
}
119119
},
120-
clear: function() {
120+
clear: function () {
121121
const $field = $( this ),
122122
type = $field.attr( 'type' );
123123

124124
if ( 'radio' === type || 'checkbox' === type ) {
125125
$field.prop( 'checked', false );
126126
} else if ( $field.is( 'select' ) ) {
127-
$field.prop( 'selectedIndex', 0 );
128-
} else if ( ! $field.hasClass( 'rwmb-hidden' ) ) {
127+
if ( $field.attr( 'multiple' ) ) {
128+
$field.find( 'option' ).prop( 'selected', false );
129+
$field.val( null ).trigger( 'change' );
130+
} else {
131+
$field.prop( 'selectedIndex', 0 );
132+
}
133+
} else if ( !$field.hasClass( 'rwmb-hidden' ) ) {
129134
$field.val( '' );
130135
}
131136
}
@@ -146,20 +151,20 @@
146151
$template.find( rwmb.inputSelectors ).each( function () {
147152
this.id = this.id.includes( '_rwmb_template' ) ? this.id : this.id + '_rwmb_template';
148153
} );
149-
154+
150155
// Clear fields' values.
151-
var $inputs = $clone.find( rwmb.inputSelectors );
156+
var $inputs = $clone.find( rwmb.inputSelectors );
152157
let count = $container.children( '.rwmb-clone' ).length;
153-
158+
154159
// The first clone should keep the default values.
155160
if ( count > 1 ) {
156161
$inputs.each( cloneValue.clear );
157162
}
158-
163+
159164
$clone = $clone.removeClass( 'rwmb-clone-template' );
160165
// Remove validation errors.
161166
$clone.find( 'p.rwmb-error' ).remove();
162-
167+
163168
// Insert clone.
164169
$clone.insertAfter( $last );
165170
count++;
@@ -195,7 +200,7 @@
195200
let offset = 1;
196201

197202
// Add the first clone if data-clone-empty-start = false
198-
const cloneEmptyStart = $container[0].dataset.cloneEmptyStart ?? 0;
203+
const cloneEmptyStart = $container[ 0 ].dataset.cloneEmptyStart ?? 0;
199204

200205
// If clone-empty-start is true, we need at least 1 item.
201206
if ( cloneEmptyStart == 1 ) {
@@ -235,7 +240,7 @@
235240

236241
toggleRemoveButtons( $container );
237242
toggleAddButton( $container );
238-
sortClones.apply( $container[0] );
243+
sortClones.apply( $container[ 0 ] );
239244
}
240245

241246
function removeClone( e ) {
@@ -279,7 +284,7 @@
279284
// Make the placeholder has the same height as dragged item
280285
ui.placeholder.height( ui.item.outerHeight() );
281286
},
282-
stop: function( event, ui ) {
287+
stop: function ( event, ui ) {
283288
ui.item.trigger( 'mb_init_editors' );
284289
ui.item.find( rwmb.inputSelectors ).first().trigger( 'mb_change' );
285290
}
@@ -310,4 +315,4 @@
310315
rwmb.sortClones = sortClones;
311316
rwmb.toggleRemoveButtons = toggleRemoveButtons;
312317
rwmb.toggleAddButton = toggleAddButton;
313-
} )( jQuery, rwmb );
318+
}( jQuery, rwmb ) );

0 commit comments

Comments
 (0)