Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/clone/wp-conte.../plugins/wpforms-.../assets/js/admin/builder
File: admin-builder.js
if ( addButton.hasClass( 'wpforms-entry-preview-adding' ) ) {
[3500] Fix | Delete
return;
[3501] Fix | Delete
}
[3502] Fix | Delete
[3503] Fix | Delete
const $fields = $( '#wpforms-panel-fields .wpforms-field-wrap > .wpforms-field' ),
[3504] Fix | Delete
position = options?.position ? options.position : $fields.length,
[3505] Fix | Delete
needPageBreakBefore = app.isEntryPreviewFieldRequiresPageBreakBefore( $fields, position ),
[3506] Fix | Delete
needPageBreakAfter = app.isEntryPreviewFieldRequiresPageBreakAfter( $fields, position );
[3507] Fix | Delete
[3508] Fix | Delete
addButton.addClass( 'wpforms-entry-preview-adding' );
[3509] Fix | Delete
[3510] Fix | Delete
if ( ! options ) {
[3511] Fix | Delete
options = {};
[3512] Fix | Delete
}
[3513] Fix | Delete
[3514] Fix | Delete
options.passed = true;
[3515] Fix | Delete
[3516] Fix | Delete
if ( ! needPageBreakBefore && ! needPageBreakAfter ) {
[3517] Fix | Delete
app.fieldAdd( 'entry-preview', options ).done( function( res ) {
[3518] Fix | Delete
app.lockEntryPreviewFieldsPosition( res.data.field.id );
[3519] Fix | Delete
} );
[3520] Fix | Delete
[3521] Fix | Delete
return;
[3522] Fix | Delete
}
[3523] Fix | Delete
[3524] Fix | Delete
if ( needPageBreakBefore ) {
[3525] Fix | Delete
app.addPageBreakAndEntryPreviewFields( options, position );
[3526] Fix | Delete
[3527] Fix | Delete
return;
[3528] Fix | Delete
}
[3529] Fix | Delete
[3530] Fix | Delete
app.addEntryPreviewAndPageBreakFields( options, position );
[3531] Fix | Delete
},
[3532] Fix | Delete
[3533] Fix | Delete
/**
[3534] Fix | Delete
* Add the entry preview field after the page break field.
[3535] Fix | Delete
* We should wait for the page break adding to avoid id duplication.
[3536] Fix | Delete
*
[3537] Fix | Delete
* @since 1.6.9
[3538] Fix | Delete
*
[3539] Fix | Delete
* @param {Object} options Field options.
[3540] Fix | Delete
*/
[3541] Fix | Delete
addEntryPreviewFieldAfterPageBreak( options ) {
[3542] Fix | Delete
const checkExist = setInterval( function() {
[3543] Fix | Delete
if ( $( '#wpforms-panel-fields .wpforms-field-wrap' ).find( '.wpforms-pagebreak-bottom, .wpforms-pagebreak-top' ).length === 2 ) {
[3544] Fix | Delete
app.fieldAdd( 'entry-preview', options ).done( function( res ) {
[3545] Fix | Delete
app.lockEntryPreviewFieldsPosition( res.data.field.id );
[3546] Fix | Delete
} );
[3547] Fix | Delete
clearInterval( checkExist );
[3548] Fix | Delete
}
[3549] Fix | Delete
}, 100 );
[3550] Fix | Delete
},
[3551] Fix | Delete
[3552] Fix | Delete
/**
[3553] Fix | Delete
* Add the entry preview field after the page break field.
[3554] Fix | Delete
*
[3555] Fix | Delete
* @since 1.6.9
[3556] Fix | Delete
*
[3557] Fix | Delete
* @param {Object} options Field options.
[3558] Fix | Delete
* @param {number} position The field position.
[3559] Fix | Delete
*/
[3560] Fix | Delete
addPageBreakAndEntryPreviewFields( options, position ) {
[3561] Fix | Delete
const hasPageBreak = $( '#wpforms-panel-fields .wpforms-field-wrap > .wpforms-field-pagebreak' ).length >= 3;
[3562] Fix | Delete
[3563] Fix | Delete
app.fieldAdd( 'pagebreak', { position } ).done( function( res ) {
[3564] Fix | Delete
options.position = hasPageBreak ? position + 1 : position + 2;
[3565] Fix | Delete
app.addEntryPreviewFieldAfterPageBreak( options );
[3566] Fix | Delete
[3567] Fix | Delete
const $pageBreakOptions = $( '#wpforms-field-option-' + res.data.field.id ),
[3568] Fix | Delete
$pageBreakPrevToggle = $pageBreakOptions.find( '.wpforms-field-option-row-prev_toggle' ),
[3569] Fix | Delete
$pageBreakPrevToggleField = $pageBreakPrevToggle.find( 'input' );
[3570] Fix | Delete
[3571] Fix | Delete
$pageBreakPrevToggleField.attr( 'checked', 'checked' ).trigger( 'change' );
[3572] Fix | Delete
$pageBreakPrevToggle.addClass( 'wpforms-entry-preview-block' );
[3573] Fix | Delete
} );
[3574] Fix | Delete
},
[3575] Fix | Delete
[3576] Fix | Delete
/**
[3577] Fix | Delete
* Duplicate field.
[3578] Fix | Delete
*
[3579] Fix | Delete
* @since 1.2.9
[3580] Fix | Delete
*
[3581] Fix | Delete
* @param {string} id Field id.
[3582] Fix | Delete
*/
[3583] Fix | Delete
fieldDuplicate( id ) {
[3584] Fix | Delete
const $field = $( `#wpforms-field-${ id }` );
[3585] Fix | Delete
[3586] Fix | Delete
if ( $field.hasClass( 'no-duplicate' ) ) {
[3587] Fix | Delete
$.alert( {
[3588] Fix | Delete
title: wpforms_builder.field_locked,
[3589] Fix | Delete
content: wpforms_builder.field_locked_no_duplicate_msg,
[3590] Fix | Delete
icon: 'fa fa-info-circle',
[3591] Fix | Delete
type: 'blue',
[3592] Fix | Delete
buttons: {
[3593] Fix | Delete
confirm: {
[3594] Fix | Delete
text: wpforms_builder.close,
[3595] Fix | Delete
btnClass: 'btn-confirm',
[3596] Fix | Delete
keys: [ 'enter' ],
[3597] Fix | Delete
},
[3598] Fix | Delete
},
[3599] Fix | Delete
} );
[3600] Fix | Delete
[3601] Fix | Delete
return;
[3602] Fix | Delete
}
[3603] Fix | Delete
[3604] Fix | Delete
$.confirm( {
[3605] Fix | Delete
title: false,
[3606] Fix | Delete
content: wpforms_builder.duplicate_confirm,
[3607] Fix | Delete
icon: 'fa fa-exclamation-circle',
[3608] Fix | Delete
type: 'orange',
[3609] Fix | Delete
buttons: {
[3610] Fix | Delete
confirm: {
[3611] Fix | Delete
text: wpforms_builder.ok,
[3612] Fix | Delete
btnClass: 'btn-confirm',
[3613] Fix | Delete
keys: [ 'enter' ],
[3614] Fix | Delete
action() {
[3615] Fix | Delete
// Disable the current button to avoid firing multiple click events.
[3616] Fix | Delete
// By default, "jconfirm" tends to destroy any modal DOM element upon button click.
[3617] Fix | Delete
this.$$confirm.prop( 'disabled', true );
[3618] Fix | Delete
[3619] Fix | Delete
const beforeEvent = WPFormsUtils.triggerEvent( $builder, 'wpformsBeforeFieldDuplicate', [ id, $field ] );
[3620] Fix | Delete
[3621] Fix | Delete
// Allow callbacks on `wpformsFieldBeforeDuplicate` to cancel field duplication.
[3622] Fix | Delete
if ( beforeEvent.isDefaultPrevented() ) {
[3623] Fix | Delete
return;
[3624] Fix | Delete
}
[3625] Fix | Delete
[3626] Fix | Delete
const newFieldId = app.fieldDuplicateRoutine( id ),
[3627] Fix | Delete
$newField = $( `#wpforms-field-${ newFieldId }` );
[3628] Fix | Delete
[3629] Fix | Delete
// Lastly, update the next ID stored in the database.
[3630] Fix | Delete
app.increaseNextFieldIdAjaxRequest();
[3631] Fix | Delete
[3632] Fix | Delete
WPFormsUtils.triggerEvent( $builder, 'wpformsFieldDuplicated', [ id, $field, newFieldId, $newField ] );
[3633] Fix | Delete
},
[3634] Fix | Delete
},
[3635] Fix | Delete
cancel: {
[3636] Fix | Delete
text: wpforms_builder.cancel,
[3637] Fix | Delete
},
[3638] Fix | Delete
},
[3639] Fix | Delete
} );
[3640] Fix | Delete
},
[3641] Fix | Delete
[3642] Fix | Delete
/**
[3643] Fix | Delete
* Update the next ID stored in the database.
[3644] Fix | Delete
*
[3645] Fix | Delete
* @since 1.7.7
[3646] Fix | Delete
*/
[3647] Fix | Delete
increaseNextFieldIdAjaxRequest() {
[3648] Fix | Delete
/* eslint-disable camelcase */
[3649] Fix | Delete
$.post(
[3650] Fix | Delete
wpforms_builder.ajax_url,
[3651] Fix | Delete
{
[3652] Fix | Delete
form_id: s.formID,
[3653] Fix | Delete
field_id: elements.$nextFieldId.val(),
[3654] Fix | Delete
nonce: wpforms_builder.nonce,
[3655] Fix | Delete
action: 'wpforms_builder_increase_next_field_id',
[3656] Fix | Delete
}
[3657] Fix | Delete
);
[3658] Fix | Delete
},
[3659] Fix | Delete
[3660] Fix | Delete
/**
[3661] Fix | Delete
* Duplicate field routine.
[3662] Fix | Delete
*
[3663] Fix | Delete
* @since 1.7.7
[3664] Fix | Delete
*
[3665] Fix | Delete
* @param {number|string} id Field ID.
[3666] Fix | Delete
*
[3667] Fix | Delete
* @return {number} New field ID.
[3668] Fix | Delete
*/
[3669] Fix | Delete
fieldDuplicateRoutine( id ) { // eslint-disable-line max-lines-per-function, complexity
[3670] Fix | Delete
const $field = $( `#wpforms-field-${ id }` ),
[3671] Fix | Delete
$fieldOptions = $( `#wpforms-field-option-${ id }` ),
[3672] Fix | Delete
$fieldActive = elements.$sortableFieldsWrap.find( '>.active' ),
[3673] Fix | Delete
$visibleOptions = elements.$fieldOptions.find( '>:visible' ),
[3674] Fix | Delete
$visibleTab = $visibleOptions.find( '>.active' ),
[3675] Fix | Delete
type = $field.data( 'field-type' ),
[3676] Fix | Delete
fieldOptionsClass = $fieldOptions.attr( 'class' ),
[3677] Fix | Delete
isModernDropdown = app.dropdownField.helpers.isModernSelect( $field.find( '> .choices .primary-input' ) );
[3678] Fix | Delete
[3679] Fix | Delete
// Restore tooltips before cloning.
[3680] Fix | Delete
wpf.restoreTooltips( $fieldOptions );
[3681] Fix | Delete
[3682] Fix | Delete
// Force Modern Dropdown conversion to classic before cloning.
[3683] Fix | Delete
if ( isModernDropdown ) {
[3684] Fix | Delete
app.dropdownField.helpers.convertModernToClassic( id );
[3685] Fix | Delete
}
[3686] Fix | Delete
[3687] Fix | Delete
let newFieldOptions = $fieldOptions.html();
[3688] Fix | Delete
[3689] Fix | Delete
const $newField = $field.clone(),
[3690] Fix | Delete
newFieldID = parseInt( elements.$nextFieldId.val(), 10 ),
[3691] Fix | Delete
$fieldLabel = $( `#wpforms-field-option-${ id }-label` ),
[3692] Fix | Delete
fieldLabelVal = $fieldLabel.length ? $fieldLabel.val() : $( `#wpforms-field-option-${ id }-name` ).val(),
[3693] Fix | Delete
nextID = newFieldID + 1,
[3694] Fix | Delete
regex = {};
[3695] Fix | Delete
[3696] Fix | Delete
const newFieldLabel = fieldLabelVal !== ''
[3697] Fix | Delete
? `${ fieldLabelVal } ${ wpforms_builder.duplicate_copy }`
[3698] Fix | Delete
: `${ wpforms_builder.field } #${ id } ${ wpforms_builder.duplicate_copy }`;
[3699] Fix | Delete
[3700] Fix | Delete
regex.fieldOptionsID = new RegExp( 'ID #' + id, 'g' );
[3701] Fix | Delete
regex.fieldID = new RegExp( 'fields\\[' + id + '\\]', 'g' );
[3702] Fix | Delete
regex.dataFieldID = new RegExp( 'data-field-id="' + id + '"', 'g' );
[3703] Fix | Delete
regex.referenceID = new RegExp( 'data-reference="' + id + '"', 'g' );
[3704] Fix | Delete
regex.elementID = new RegExp( '\\b(id|for)="wpforms-(.*?)' + id + '(.*?)"', 'ig' );
[3705] Fix | Delete
[3706] Fix | Delete
// Toggle visibility states.
[3707] Fix | Delete
$field.after( $newField );
[3708] Fix | Delete
$fieldActive.removeClass( 'active' );
[3709] Fix | Delete
$newField.addClass( 'active' ).attr( {
[3710] Fix | Delete
id: `wpforms-field-${ newFieldID }`,
[3711] Fix | Delete
'data-field-id': newFieldID,
[3712] Fix | Delete
} );
[3713] Fix | Delete
[3714] Fix | Delete
// Various regexes to adjust the field options to work with the new field ID.
[3715] Fix | Delete
regex.elementIdReplace = function( match, p1, p2, p3, offset, string ) { // eslint-disable-line no-unused-vars
[3716] Fix | Delete
return `${ p1 }="wpforms-${ p2 }${ newFieldID }${ p3 }"`;
[3717] Fix | Delete
};
[3718] Fix | Delete
[3719] Fix | Delete
newFieldOptions = newFieldOptions.replace( regex.fieldOptionsID, `ID #${ newFieldID }` );
[3720] Fix | Delete
newFieldOptions = newFieldOptions.replace( regex.fieldID, `fields[${ newFieldID }]` );
[3721] Fix | Delete
newFieldOptions = newFieldOptions.replace( regex.dataFieldID, `data-field-id="${ newFieldID }"` );
[3722] Fix | Delete
newFieldOptions = newFieldOptions.replace( regex.referenceID, `data-reference="${ newFieldID }"` );
[3723] Fix | Delete
newFieldOptions = newFieldOptions.replace( regex.elementID, regex.elementIdReplace );
[3724] Fix | Delete
[3725] Fix | Delete
// Hide all field options panels.
[3726] Fix | Delete
$visibleOptions.hide();
[3727] Fix | Delete
[3728] Fix | Delete
// Add a new field options panel.
[3729] Fix | Delete
$fieldOptions.after( `<div class="${ fieldOptionsClass }" id="wpforms-field-option-${ newFieldID }" data-field-id="${ newFieldID }">${ newFieldOptions }</div>` );
[3730] Fix | Delete
[3731] Fix | Delete
// Get a new field options panel.
[3732] Fix | Delete
const $newFieldOptions = $( `#wpforms-field-option-${ newFieldID }` );
[3733] Fix | Delete
[3734] Fix | Delete
// If the user duplicates an active field.
[3735] Fix | Delete
if ( $fieldActive.data( 'field-id' ) === id && $visibleTab.length ) {
[3736] Fix | Delete
// The following will help identify which tab from the sidebar panel settings is currently being viewed,
[3737] Fix | Delete
// i.e., "General," "Advanced," "Smart Logic," etc.
[3738] Fix | Delete
const visibleTabClassName = $visibleTab.attr( 'class' ).match( /wpforms-field-option-group-\S*/i )[ 0 ];
[3739] Fix | Delete
const $newFieldOptionsTab = $newFieldOptions.find( `>.${ visibleTabClassName }` );
[3740] Fix | Delete
[3741] Fix | Delete
// Remove any left-over state from previously duplicated options.
[3742] Fix | Delete
$newFieldOptions.find( '>' ).removeClass( 'active' );
[3743] Fix | Delete
[3744] Fix | Delete
// Set active tab to the same tab that was active before the duplication.
[3745] Fix | Delete
$newFieldOptionsTab.addClass( 'active' );
[3746] Fix | Delete
}
[3747] Fix | Delete
[3748] Fix | Delete
// If the user duplicates an inactive field.
[3749] Fix | Delete
if ( $fieldActive.data( 'field-id' ) !== id && $visibleTab.length ) {
[3750] Fix | Delete
// Remove active class from the current active tab.
[3751] Fix | Delete
$newFieldOptions.find( '>' ).removeClass( 'active' );
[3752] Fix | Delete
[3753] Fix | Delete
// Set active tab to "General".
[3754] Fix | Delete
$newFieldOptions.find( '>.wpforms-field-option-group-basic' ).addClass( 'active' );
[3755] Fix | Delete
}
[3756] Fix | Delete
[3757] Fix | Delete
// Copy over values.
[3758] Fix | Delete
$fieldOptions.find( ':input' ).each( function( index, el ) { // eslint-disable-line complexity, no-unused-vars
[3759] Fix | Delete
const $this = $( this ),
[3760] Fix | Delete
name = $this.attr( 'name' );
[3761] Fix | Delete
[3762] Fix | Delete
if ( ! name ) {
[3763] Fix | Delete
return 'continue';
[3764] Fix | Delete
}
[3765] Fix | Delete
[3766] Fix | Delete
const newName = name.replace( regex.fieldID, `fields[${ newFieldID }]` ),
[3767] Fix | Delete
type = $this.attr( 'type' );
[3768] Fix | Delete
[3769] Fix | Delete
if ( type === 'checkbox' || type === 'radio' ) {
[3770] Fix | Delete
if ( $this.is( ':checked' ) ) {
[3771] Fix | Delete
$newFieldOptions.find( `[name="${ newName }"]` )
[3772] Fix | Delete
.prop( 'checked', true )
[3773] Fix | Delete
.attr( 'checked', 'checked' );
[3774] Fix | Delete
} else {
[3775] Fix | Delete
$newFieldOptions.find( `[name="${ newName }"]` )
[3776] Fix | Delete
.prop( 'checked', false )
[3777] Fix | Delete
.attr( 'checked', false );
[3778] Fix | Delete
}
[3779] Fix | Delete
[3780] Fix | Delete
return;
[3781] Fix | Delete
}
[3782] Fix | Delete
[3783] Fix | Delete
if ( $this.is( 'select' ) ) {
[3784] Fix | Delete
if ( $this.find( 'option:selected' ).length ) {
[3785] Fix | Delete
const optionVal = $this.find( 'option:selected' ).val();
[3786] Fix | Delete
[3787] Fix | Delete
$newFieldOptions.find( `[name="${ newName }"]` )
[3788] Fix | Delete
.find( `[value="${ optionVal }"]` )
[3789] Fix | Delete
.prop( 'selected', true );
[3790] Fix | Delete
}
[3791] Fix | Delete
[3792] Fix | Delete
return;
[3793] Fix | Delete
}
[3794] Fix | Delete
[3795] Fix | Delete
const value = $this.val();
[3796] Fix | Delete
[3797] Fix | Delete
if ( value === '' && $this.hasClass( 'wpforms-money-input' ) ) {
[3798] Fix | Delete
$newFieldOptions.find( `[name="${ newName }"]` ).val(
[3799] Fix | Delete
wpf.numberFormat( '0', wpforms_builder.currency_decimals, wpforms_builder.currency_decimal, wpforms_builder.currency_thousands )
[3800] Fix | Delete
);
[3801] Fix | Delete
} else {
[3802] Fix | Delete
// We've removed the empty value check here.
[3803] Fix | Delete
// If we are duplicating a field with no value, we should respect that.
[3804] Fix | Delete
$newFieldOptions.find( `[name="${ newName }"]` ).val( value );
[3805] Fix | Delete
}
[3806] Fix | Delete
} );
[3807] Fix | Delete
[3808] Fix | Delete
// ID adjustments.
[3809] Fix | Delete
$newFieldOptions.find( '.wpforms-field-option-hidden-id' ).val( newFieldID );
[3810] Fix | Delete
elements.$nextFieldId.val( nextID );
[3811] Fix | Delete
[3812] Fix | Delete
const $newFieldLabel = type === 'html' ? $( `#wpforms-field-option-${ newFieldID }-name` ) : $( `#wpforms-field-option-${ newFieldID }-label` );
[3813] Fix | Delete
[3814] Fix | Delete
// Adjust the label to indicate this is a copy.
[3815] Fix | Delete
$newFieldLabel.val( newFieldLabel ).trigger( 'input' );
[3816] Fix | Delete
[3817] Fix | Delete
// Fire field adds custom event.
[3818] Fix | Delete
$builder.trigger( 'wpformsFieldAdd', [ newFieldID, type ] );
[3819] Fix | Delete
[3820] Fix | Delete
// Re-init tooltips for a new field options panel.
[3821] Fix | Delete
wpf.initTooltips();
[3822] Fix | Delete
[3823] Fix | Delete
// Re-init Modern Dropdown.
[3824] Fix | Delete
if ( isModernDropdown ) {
[3825] Fix | Delete
app.dropdownField.helpers.convertClassicToModern( id );
[3826] Fix | Delete
app.dropdownField.helpers.convertClassicToModern( newFieldID );
[3827] Fix | Delete
}
[3828] Fix | Delete
[3829] Fix | Delete
// Re-init instance in choices related fields.
[3830] Fix | Delete
app.fieldChoiceUpdate( $newField.data( 'field-type' ), newFieldID );
[3831] Fix | Delete
[3832] Fix | Delete
// Re-init color pickers.
[3833] Fix | Delete
app.loadColorPickers();
[3834] Fix | Delete
[3835] Fix | Delete
return newFieldID;
[3836] Fix | Delete
},
[3837] Fix | Delete
[3838] Fix | Delete
/**
[3839] Fix | Delete
* Add the entry preview field before the page break field.
[3840] Fix | Delete
*
[3841] Fix | Delete
* @since 1.6.9
[3842] Fix | Delete
*
[3843] Fix | Delete
* @param {Object} options Field options.
[3844] Fix | Delete
* @param {number} position The field position.
[3845] Fix | Delete
*/
[3846] Fix | Delete
addEntryPreviewAndPageBreakFields( options, position ) {
[3847] Fix | Delete
app.fieldAdd( 'entry-preview', options ).done( function( res ) {
[3848] Fix | Delete
const entryPreviewId = res.data.field.id;
[3849] Fix | Delete
[3850] Fix | Delete
app.fieldAdd( 'pagebreak', { position: position + 1 } ).done( function( res ) {
[3851] Fix | Delete
app.lockEntryPreviewFieldsPosition( entryPreviewId );
[3852] Fix | Delete
[3853] Fix | Delete
const $pageBreakField = $( '#wpforms-field-' + res.data.field.id ),
[3854] Fix | Delete
$nextField = $pageBreakField.nextAll( '.wpforms-field-pagebreak, .wpforms-field-entry-preview' ).first();
[3855] Fix | Delete
[3856] Fix | Delete
if ( $nextField.hasClass( 'wpforms-field-entry-preview' ) ) {
[3857] Fix | Delete
app.lockEntryPreviewFieldsPosition( $nextField.data( 'field-id' ) );
[3858] Fix | Delete
}
[3859] Fix | Delete
} );
[3860] Fix | Delete
} );
[3861] Fix | Delete
},
[3862] Fix | Delete
[3863] Fix | Delete
/**
[3864] Fix | Delete
* Stick an entry preview field after adding.
[3865] Fix | Delete
*
[3866] Fix | Delete
* @since 1.6.9
[3867] Fix | Delete
*
[3868] Fix | Delete
* @param {number} id ID.
[3869] Fix | Delete
*/
[3870] Fix | Delete
lockEntryPreviewFieldsPosition( id ) {
[3871] Fix | Delete
const $entryPreviewField = $( '#wpforms-field-' + id ),
[3872] Fix | Delete
$pageBreakField = $entryPreviewField.prevAll( '.wpforms-field-pagebreak:not(.wpforms-pagebreak-bottom)' ).first(),
[3873] Fix | Delete
$nextPageBreakField = $entryPreviewField.nextAll( '.wpforms-field-pagebreak' ).first(),
[3874] Fix | Delete
nextPageBreakFieldId = $nextPageBreakField.data( 'field-id' ),
[3875] Fix | Delete
$pageBreakOptions = $( '#wpforms-field-option-' + nextPageBreakFieldId ),
[3876] Fix | Delete
$pageBreakPrevToggle = $pageBreakOptions.find( '.wpforms-field-option-row-prev_toggle' ),
[3877] Fix | Delete
$pageBreakPrevToggleField = $pageBreakPrevToggle.find( 'input' );
[3878] Fix | Delete
[3879] Fix | Delete
$entryPreviewField.addClass( 'wpforms-field-not-draggable' );
[3880] Fix | Delete
$pageBreakField.addClass( 'wpforms-field-not-draggable wpforms-field-entry-preview-not-deleted' );
[3881] Fix | Delete
$pageBreakPrevToggleField.prop( 'checked', 'checked' ).trigger( 'change' );
[3882] Fix | Delete
$pageBreakPrevToggle.addClass( 'wpforms-entry-preview-block' );
[3883] Fix | Delete
$( '#wpforms-add-fields-entry-preview' ).removeClass( 'wpforms-entry-preview-adding' );
[3884] Fix | Delete
[3885] Fix | Delete
$builder.trigger( 'wpformsFieldDragToggle', [ id, $entryPreviewField.data( 'field-type' ) ] );
[3886] Fix | Delete
$builder.trigger( 'wpformsFieldDragToggle', [ $pageBreakField.data( 'field-id' ), $pageBreakField.data( 'field-type' ) ] );
[3887] Fix | Delete
},
[3888] Fix | Delete
[3889] Fix | Delete
/**
[3890] Fix | Delete
* An entry preview field requires a page break that locates before.
[3891] Fix | Delete
*
[3892] Fix | Delete
* @since 1.6.9
[3893] Fix | Delete
*
[3894] Fix | Delete
* @param {jQuery} $fields List of fields in the form preview.
[3895] Fix | Delete
* @param {number} position The field position.
[3896] Fix | Delete
*
[3897] Fix | Delete
* @return {boolean} True if we need to add a page break field before.
[3898] Fix | Delete
*/
[3899] Fix | Delete
isEntryPreviewFieldRequiresPageBreakBefore( $fields, position ) {
[3900] Fix | Delete
const $beforeFields = $fields.slice( 0, position ).filter( '.wpforms-field-pagebreak,.wpforms-field-entry-preview' );
[3901] Fix | Delete
let needPageBreakBefore = true;
[3902] Fix | Delete
[3903] Fix | Delete
if ( ! $beforeFields.length ) {
[3904] Fix | Delete
return needPageBreakBefore;
[3905] Fix | Delete
}
[3906] Fix | Delete
[3907] Fix | Delete
$( $beforeFields.get().reverse() ).each( function() {
[3908] Fix | Delete
const $this = $( this );
[3909] Fix | Delete
[3910] Fix | Delete
if ( $this.hasClass( 'wpforms-field-entry-preview' ) ) {
[3911] Fix | Delete
return false;
[3912] Fix | Delete
}
[3913] Fix | Delete
[3914] Fix | Delete
if ( $this.hasClass( 'wpforms-field-pagebreak' ) && ! $this.hasClass( 'wpforms-field-stick' ) ) {
[3915] Fix | Delete
needPageBreakBefore = false;
[3916] Fix | Delete
[3917] Fix | Delete
return false;
[3918] Fix | Delete
}
[3919] Fix | Delete
} );
[3920] Fix | Delete
[3921] Fix | Delete
return needPageBreakBefore;
[3922] Fix | Delete
},
[3923] Fix | Delete
[3924] Fix | Delete
/**
[3925] Fix | Delete
* An entry preview field requires a page break that locates after.
[3926] Fix | Delete
*
[3927] Fix | Delete
* @since 1.6.9
[3928] Fix | Delete
*
[3929] Fix | Delete
* @param {jQuery} $fields List of fields in the form preview.
[3930] Fix | Delete
* @param {number} position The field position.
[3931] Fix | Delete
*
[3932] Fix | Delete
* @return {boolean} True if we need to add a page break field after.
[3933] Fix | Delete
*/
[3934] Fix | Delete
isEntryPreviewFieldRequiresPageBreakAfter( $fields, position ) {
[3935] Fix | Delete
const $afterFields = $fields.slice( position ).filter( '.wpforms-field-pagebreak,.wpforms-field-entry-preview' );
[3936] Fix | Delete
let needPageBreakAfter = Boolean( $afterFields.length );
[3937] Fix | Delete
[3938] Fix | Delete
if ( ! $afterFields.length ) {
[3939] Fix | Delete
return needPageBreakAfter;
[3940] Fix | Delete
}
[3941] Fix | Delete
[3942] Fix | Delete
$afterFields.each( function() {
[3943] Fix | Delete
const $this = $( this );
[3944] Fix | Delete
[3945] Fix | Delete
if ( $this.hasClass( 'wpforms-field-entry-preview' ) ) {
[3946] Fix | Delete
return false;
[3947] Fix | Delete
}
[3948] Fix | Delete
[3949] Fix | Delete
if ( $this.hasClass( 'wpforms-field-pagebreak' ) ) {
[3950] Fix | Delete
needPageBreakAfter = false;
[3951] Fix | Delete
[3952] Fix | Delete
return false;
[3953] Fix | Delete
}
[3954] Fix | Delete
} );
[3955] Fix | Delete
[3956] Fix | Delete
return needPageBreakAfter;
[3957] Fix | Delete
},
[3958] Fix | Delete
[3959] Fix | Delete
/**
[3960] Fix | Delete
* Add new field.
[3961] Fix | Delete
*
[3962] Fix | Delete
* @since 1.0.0
[3963] Fix | Delete
* @since 1.6.4 Added hCaptcha support.
[3964] Fix | Delete
*
[3965] Fix | Delete
* @param {string} type Field type.
[3966] Fix | Delete
* @param {Object} options Additional options.
[3967] Fix | Delete
*
[3968] Fix | Delete
* @return {Promise|void} jQuery.post() promise interface.
[3969] Fix | Delete
*/
[3970] Fix | Delete
fieldAdd( type, options ) { // eslint-disable-line max-lines-per-function
[3971] Fix | Delete
const $btn = $( `#wpforms-add-fields-${ type }` );
[3972] Fix | Delete
[3973] Fix | Delete
if ( $btn.hasClass( 'upgrade-modal' ) || $btn.hasClass( 'education-modal' ) || $btn.hasClass( 'warning-modal' ) ) {
[3974] Fix | Delete
return;
[3975] Fix | Delete
}
[3976] Fix | Delete
[3977] Fix | Delete
if ( [ 'captcha_turnstile', 'captcha_hcaptcha', 'captcha_recaptcha', 'captcha_none' ].includes( type ) ) {
[3978] Fix | Delete
app.captchaUpdate();
[3979] Fix | Delete
[3980] Fix | Delete
return;
[3981] Fix | Delete
}
[3982] Fix | Delete
[3983] Fix | Delete
adding = true;
[3984] Fix | Delete
[3985] Fix | Delete
WPForms.Admin.Builder.DragFields.disableDragAndDrop();
[3986] Fix | Delete
app.disableFormActions();
[3987] Fix | Delete
[3988] Fix | Delete
if ( app.isUncheckedEntryPreviewField( type, options ) ) {
[3989] Fix | Delete
app.addEntryPreviewField( type, options );
[3990] Fix | Delete
[3991] Fix | Delete
return;
[3992] Fix | Delete
}
[3993] Fix | Delete
[3994] Fix | Delete
const defaults = {
[3995] Fix | Delete
position: 'bottom',
[3996] Fix | Delete
$sortable: 'base',
[3997] Fix | Delete
placeholder: false,
[3998] Fix | Delete
scroll: true,
[3999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function