Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add confirm dialog to group Remove button #1208

Merged
merged 10 commits into from
Dec 31, 2018
11 changes: 6 additions & 5 deletions example-functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -517,11 +517,12 @@ function yourprefix_register_repeatable_group_field_metabox() {
'type' => 'group',
'description' => esc_html__( 'Generates reusable form entries', 'cmb2' ),
'options' => array(
'group_title' => esc_html__( 'Entry {#}', 'cmb2' ), // {#} gets replaced by row number
'add_button' => esc_html__( 'Add Another Entry', 'cmb2' ),
'remove_button' => esc_html__( 'Remove Entry', 'cmb2' ),
'sortable' => true,
// 'closed' => true, // true to have the groups closed by default
'group_title' => esc_html__( 'Entry {#}', 'cmb2' ), // {#} gets replaced by row number
'add_button' => esc_html__( 'Add Another Entry', 'cmb2' ),
'remove_button' => esc_html__( 'Remove Entry', 'cmb2' ),
'sortable' => true,
// 'closed' => true, // true to have the groups closed by default
// 'remove_confirm' => esc_html__( 'Are you sure you want to remove?', 'cmb2' ), // Performs confirmation before removing group.
),
) );

Expand Down
9 changes: 6 additions & 3 deletions includes/CMB2.php
Original file line number Diff line number Diff line change
Expand Up @@ -588,13 +588,15 @@ public function group_wrap_attributes( $field_group ) {
public function render_group_row( $field_group ) {

$field_group->peform_param_callback( 'before_group_row' );
$closed_class = $field_group->options( 'closed' ) ? ' closed' : '';
$closed_class = $field_group->options( 'closed' ) ? ' closed' : '';
$confirm_deletion = $field_group->options( 'remove_confirm' );
$confirm_deletion = ! empty( $confirm_deletion ) ? $confirm_deletion : '';

echo '
<div class="postbox cmb-row cmb-repeatable-grouping', $closed_class, '" data-iterator="', $field_group->index, '">';

if ( $field_group->args( 'repeatable' ) ) {
echo '<button type="button" data-selector="', $field_group->id(), '_repeat" class="dashicons-before dashicons-no-alt cmb-remove-group-row" title="', esc_attr( $field_group->options( 'remove_button' ) ), '"></button>';
echo '<button type="button" data-selector="', $field_group->id(), '_repeat" data-confirm="', esc_attr( $confirm_deletion ), '" class="dashicons-before dashicons-no-alt cmb-remove-group-row" title="', esc_attr( $field_group->options( 'remove_button' ) ), '"></button>';
}

echo '
Expand All @@ -617,11 +619,12 @@ public function render_group_row( $field_group ) {
$this->get_field( $field_args, $field_group )->render_field();
}
}

if ( $field_group->args( 'repeatable' ) ) {
echo '
<div class="cmb-row cmb-remove-field-row">
<div class="cmb-remove-row">
<button type="button" data-selector="', $field_group->id(), '_repeat" class="cmb-remove-group-row cmb-remove-group-row-button alignright button-secondary">', $field_group->options( 'remove_button' ), '</button>
<button type="button" data-selector="', $field_group->id(), '_repeat" data-confirm="', esc_attr( $confirm_deletion ), '" class="cmb-remove-group-row cmb-remove-group-row-button alignright button-secondary">', $field_group->options( 'remove_button' ), '</button>
</div>
</div>
';
Expand Down
5 changes: 3 additions & 2 deletions includes/CMB2_Field.php
Original file line number Diff line number Diff line change
Expand Up @@ -1345,8 +1345,9 @@ public function _set_field_defaults( $args ) {
*/
protected function set_field_defaults_group( $args ) {
$args['options'] = wp_parse_args( $args['options'], array(
'add_button' => esc_html__( 'Add Group', 'cmb2' ),
'remove_button' => esc_html__( 'Remove Group', 'cmb2' ),
'add_button' => esc_html__( 'Add Group', 'cmb2' ),
'remove_button' => esc_html__( 'Remove Group', 'cmb2' ),
'remove_confirm' => '',
) );

return $args;
Expand Down
22 changes: 14 additions & 8 deletions js/cmb2.js
Original file line number Diff line number Diff line change
Expand Up @@ -558,7 +558,7 @@ window.CMB2 = window.CMB2 || {};
$newInput.html( newVal );
}

if ( 'SELECT' === tagName && undefined !== typeof defVal ) {
if ( 'SELECT' === tagName && 'undefined' !== typeof defVal ) {
var $toSelect = $newInput.find( '[value="'+ defVal + '"]' );
if ( $toSelect.length ) {
$toSelect.attr( 'selected', 'selected' ).prop( 'selected', 'selected' );
Expand All @@ -567,7 +567,7 @@ window.CMB2 = window.CMB2 || {};

if ( checkable ) {
$newInput.removeAttr( 'checked' );
if ( undefined !== typeof defVal && oldVal === defVal ) {
if ( 'undefined' !== typeof defVal && oldVal === defVal ) {
$newInput.attr( 'checked', 'checked' ).prop( 'checked', 'checked' );
}
}
Expand Down Expand Up @@ -613,7 +613,7 @@ window.CMB2 = window.CMB2 || {};
var name = $this.attr( 'name' ); // get current name

// If name is defined
if ( typeof name !== 'undefined' ) {
if ( 'undefined' !== typeof name ) {
var prevNum = parseInt( $this.parents( '.cmb-repeatable-grouping' ).data( 'iterator' ), 10 );
var newNum = prevNum - 1; // Subtract 1 to get new iterator number

Expand Down Expand Up @@ -695,7 +695,14 @@ window.CMB2 = window.CMB2 || {};
cmb.removeGroupRow = function( evt ) {
evt.preventDefault();

var $this = $( this );
var $this = $( this );
var confirmation = $this.data('confirm');

// Process further only if deletion confirmation enabled and user agreed.
if ( confirmation && ! window.confirm( confirmation ) ) {
return;
}

var $table = $id( $this.data('selector') );
var $parent = $this.parents('.cmb-repeatable-grouping');
var number = $table.find('.cmb-repeatable-grouping').length;
Expand All @@ -706,13 +713,12 @@ window.CMB2 = window.CMB2 || {};

cmb.triggerElement( $table, 'cmb2_remove_group_row_start', $this );

// when a group is removed loop through all next groups and update fields names
// When a group is removed, loop through all next groups and update fields names.
$parent.nextAll( '.cmb-repeatable-grouping' ).find( cmb.repeatEls ).each( cmb.updateNameAttr );

$parent.remove();

cmb.triggerElement( $table, { type: 'cmb2_remove_row', group: true } );

};

cmb.removeAjaxRow = function( evt ) {
Expand Down Expand Up @@ -946,7 +952,7 @@ window.CMB2 = window.CMB2 || {};
if ( ! $selector.length ) {
return;
}
if ( typeof jQuery.wp === 'object' && typeof jQuery.wp.wpColorPicker === 'function' ) {
if ( 'object' === typeof jQuery.wp && 'function' === typeof jQuery.wp.wpColorPicker ) {

$selector.each( function() {
var $this = $( this );
Expand Down Expand Up @@ -1299,7 +1305,7 @@ window.CMB2 = window.CMB2 || {};
* @return {void}
*/
cmb.log = function() {
if ( l10n.script_debug && console && typeof console.log === 'function' ) {
if ( l10n.script_debug && console && 'function' === typeof console.log ) {
console.log.apply(console, arguments);
}
};
Expand Down
2 changes: 1 addition & 1 deletion js/cmb2.min.js

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions tests/test-cmb-core.php
Original file line number Diff line number Diff line change
Expand Up @@ -506,7 +506,7 @@ public function test_group_field_param_callbacks() {
</div>
before_group_row output
<div class="postbox cmb-row cmb-repeatable-grouping closed" data-iterator="0">
<button type="button" data-selector="group_field_repeat" class="dashicons-before dashicons-no-alt cmb-remove-group-row" title="Remove Group"></button>
<button type="button" data-selector="group_field_repeat" data-confirm="Are you sure you want to remove?" class="dashicons-before dashicons-no-alt cmb-remove-group-row" title="Remove Group"></button>
<div class="cmbhandle" title="Click to toggle"><br></div>
<h3 class="cmb-group-title cmbhandle-title"><span></span></h3>
<div class="inside cmb-td cmb-nested cmb-field-list">
Expand Down Expand Up @@ -538,7 +538,7 @@ public function test_group_field_param_callbacks() {
</div>
<div class="cmb-row cmb-remove-field-row">
<div class="cmb-remove-row">
<button type="button" data-selector="group_field_repeat" class="cmb-remove-group-row cmb-remove-group-row-button alignright button-secondary">Remove Group</button>
<button type="button" data-selector="group_field_repeat" data-confirm="Are you sure you want to remove?" class="cmb-remove-group-row cmb-remove-group-row-button alignright button-secondary">Remove Group</button>
</div>
</div>
</div>
Expand Down