Add massive collection of CSS, JavaScript and theme assets that were previously excluded: **CSS Files (681 total):** - HVAC plugin-specific styles (hvac-*.css): 34 files including dashboard, certificates, registration, mobile nav, accessibility fixes, animations, and welcome popup - Theme framework files (Astra, builder systems, layouts): 200+ files - Plugin compatibility styles (WooCommerce, WPForms, Elementor, Contact Form 7): 150+ files - WordPress core and editor styles: 50+ files - Responsive and RTL language support: 200+ files **JavaScript Files (400+ total):** - HVAC plugin functionality (hvac-*.js): 27 files including menu systems, dashboard enhancements, profile sharing, mobile responsive features, accessibility, and animations - Framework and library files: jQuery plugins, GSAP, AOS, Swiper, Chart.js, Lottie, Isotope - Plugin compatibility scripts: WPForms, WooCommerce, Elementor, Contact Form 7, LifterLMS - WordPress core functionality: customizer, admin, block editor compatibility - Third-party integrations: Stripe, SMTP, analytics, search functionality **Assets:** - Certificate background images and logos - Comprehensive theme styling infrastructure - Mobile-responsive design systems - Cross-browser compatibility assets - Performance-optimized minified versions **Updated .gitignore:** - Fixed asset directory whitelisting patterns to properly include CSS/JS/images - Added proper directory structure recognition (!/assets/css/, !/assets/js/, etc.) - Maintains security by excluding sensitive files while including essential assets This commit provides the complete frontend infrastructure needed for: - Full theme functionality and styling - Plugin feature implementations - Mobile responsiveness and accessibility - Cross-browser compatibility - Performance optimization - Developer workflow support
758 lines
17 KiB
JavaScript
758 lines
17 KiB
JavaScript
/* global wpforms_education, WPFormsBuilder, wpf */
|
|
|
|
/**
|
|
* WPForms Education Core.
|
|
*
|
|
* @since 1.6.6
|
|
*/
|
|
|
|
// noinspection ES6ConvertVarToLetConst
|
|
/**
|
|
* @param wpforms_education.activate_confirm
|
|
* @param wpforms_education.activate_prompt
|
|
* @param wpforms_education.activating
|
|
* @param wpforms_education.addon_activated
|
|
* @param wpforms_education.addon_error
|
|
* @param wpforms_education.addon_incompatible.title
|
|
* @param wpforms_education.addon_incompatible.button_text
|
|
* @param wpforms_education.addon_incompatible.button_url
|
|
* @param wpforms_education.ajax_url
|
|
* @param wpforms_education.can_activate_addons
|
|
* @param wpforms_education.can_install_addons
|
|
* @param wpforms_education.cancel
|
|
* @param wpforms_education.close
|
|
* @param wpforms_education.install_confirm
|
|
* @param wpforms_education.install_prompt
|
|
* @param wpforms_education.installing
|
|
* @param wpforms_education.nonce
|
|
* @param wpforms_education.ok
|
|
* @param wpforms_education.plugin_activated
|
|
* @param wpforms_education.save_confirm
|
|
* @param wpforms_education.save_prompt
|
|
* @param wpforms_education.saving
|
|
* @param wpforms_education.thanks_for_interest
|
|
* @param wpforms_education.upgrade
|
|
* @param wpforms_education.upgrade.modal
|
|
* @param wpforms_education.upgrade.url
|
|
* @param wpforms_education.upgrade.url_template
|
|
*/
|
|
|
|
var WPFormsEducation = window.WPFormsEducation || {}; // eslint-disable-line no-var
|
|
|
|
WPFormsEducation.core = window.WPFormsEducation.core || ( function( document, window, $ ) {
|
|
/**
|
|
* Spinner markup.
|
|
*
|
|
* @since 1.7.0
|
|
*
|
|
* @type {string}
|
|
*/
|
|
const spinner = '<i class="wpforms-loading-spinner wpforms-loading-white wpforms-loading-inline"></i>';
|
|
|
|
/**
|
|
* Public functions and properties.
|
|
*
|
|
* @since 1.6.6
|
|
*
|
|
* @type {Object}
|
|
*/
|
|
const app = {
|
|
|
|
/**
|
|
* Start the engine.
|
|
*
|
|
* @since 1.6.6
|
|
*/
|
|
init() {
|
|
$( app.ready );
|
|
},
|
|
|
|
/**
|
|
* Document ready.
|
|
*
|
|
* @since 1.6.6
|
|
*/
|
|
ready() {
|
|
app.events();
|
|
},
|
|
|
|
/**
|
|
* Register JS events.
|
|
*
|
|
* @since 1.6.6
|
|
*/
|
|
events() {
|
|
app.dismissEvents();
|
|
app.openModalButtonClick();
|
|
app.setDykColspan();
|
|
app.gotoAdvancedTabClick();
|
|
app.proFieldDelete();
|
|
},
|
|
|
|
/**
|
|
* Open education modal.
|
|
*
|
|
* @since 1.7.0
|
|
*/
|
|
openModalButtonClick() {
|
|
$( document )
|
|
.on( 'click', '.education-modal:not(.wpforms-add-fields-button)', app.openModalButtonHandler )
|
|
.on( 'mousedown', '.education-modal.wpforms-add-fields-button', app.openModalButtonHandler )
|
|
.on( 'click', '.education-action-button', app.actionButtonHandler );
|
|
},
|
|
|
|
/**
|
|
* Action button click handler.
|
|
*
|
|
* @since 1.9.4.2
|
|
*
|
|
* @param {Event} event Event.
|
|
*/
|
|
actionButtonHandler( event ) {
|
|
event.preventDefault();
|
|
|
|
const $this = $( this );
|
|
const action = $this.data( 'action' );
|
|
|
|
// Currently, only the upgrade action is supported.
|
|
if ( action !== 'upgrade' ) {
|
|
return;
|
|
}
|
|
|
|
const utmContent = $this.data( 'utm-content' );
|
|
const type = $this.data( 'license' );
|
|
|
|
window.open( WPFormsEducation.core.getUpgradeURL( utmContent, type ), '_blank' );
|
|
},
|
|
|
|
/**
|
|
* Open education modal handler.
|
|
*
|
|
* @since 1.8.0
|
|
*
|
|
* @param {Event} event Event.
|
|
*/
|
|
openModalButtonHandler( event ) {
|
|
event.preventDefault();
|
|
|
|
const $this = $( this );
|
|
|
|
switch ( $this.data( 'action' ) ) {
|
|
case 'activate':
|
|
app.activateModal( $this );
|
|
break;
|
|
case 'install':
|
|
app.installModal( $this );
|
|
break;
|
|
case 'incompatible':
|
|
app.incompatibleModal( $this );
|
|
break;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Hide Pro fields notice when all disabled fields deleted.
|
|
*
|
|
* @since 1.9.4
|
|
*/
|
|
proFieldDelete() {
|
|
$( '#wpforms-builder' ).on(
|
|
'wpformsFieldDelete',
|
|
function() {
|
|
if ( ! $( '.wpforms-field-wrap .wpforms-field-is-pro' ).length ) {
|
|
$( '.wpforms-preview .wpforms-pro-fields-notice' ).addClass( 'wpforms-hidden' );
|
|
}
|
|
}
|
|
);
|
|
},
|
|
|
|
/**
|
|
* Dismiss button events.
|
|
*
|
|
* @since 1.6.6
|
|
*/
|
|
dismissEvents() {
|
|
$( document ).on( 'click', '.wpforms-dismiss-container .wpforms-dismiss-button', function() {
|
|
const $this = $( this ),
|
|
$cont = $this.closest( '.wpforms-dismiss-container' ),
|
|
data = {
|
|
action: 'wpforms_education_dismiss',
|
|
nonce: wpforms_education.nonce,
|
|
section: $this.data( 'section' ),
|
|
page: typeof window.pagenow === 'string' ? window.pagenow : '',
|
|
};
|
|
let $out = $cont.find( '.wpforms-dismiss-out' );
|
|
|
|
if ( $cont.hasClass( 'wpforms-dismiss-out' ) ) {
|
|
$out = $cont;
|
|
}
|
|
|
|
if ( $out.length > 0 ) {
|
|
$out.addClass( 'out' );
|
|
setTimeout(
|
|
function() {
|
|
$cont.remove();
|
|
},
|
|
300
|
|
);
|
|
} else {
|
|
$cont.remove();
|
|
}
|
|
|
|
$.post( wpforms_education.ajax_url, data );
|
|
} );
|
|
},
|
|
|
|
/**
|
|
* Calculate and dynamically set the DYK block cell colspan attribute.
|
|
*
|
|
* @since 1.7.3
|
|
*/
|
|
setDykColspan() {
|
|
$( '#adv-settings' ).on(
|
|
'change',
|
|
'input.hide-column-tog',
|
|
function() {
|
|
const $dykCell = $( '.wpforms-dyk td' ),
|
|
colCount = $( '.wp-list-table thead .manage-column' ).not( '.hidden' ).length;
|
|
|
|
$dykCell.attr( 'colspan', colCount );
|
|
}
|
|
);
|
|
},
|
|
|
|
/**
|
|
* Go to Advanced tab when click on the link in Calculations educational notice.
|
|
*
|
|
* @since 1.8.4.1
|
|
*/
|
|
gotoAdvancedTabClick() {
|
|
$( document )
|
|
.on( 'click', '.wpforms-educational-alert.wpforms-calculations a', function( e ) {
|
|
const $a = $( this );
|
|
|
|
if ( $a.attr( 'href' ) !== '#advanced-tab' ) {
|
|
return;
|
|
}
|
|
|
|
e.preventDefault();
|
|
|
|
$a.closest( '.wpforms-field-option' )
|
|
.find( '.wpforms-field-option-group-advanced .wpforms-field-option-group-toggle' )
|
|
.trigger( 'click' );
|
|
} );
|
|
},
|
|
|
|
/**
|
|
* Get UTM content for different elements.
|
|
*
|
|
* @since 1.6.9
|
|
*
|
|
* @param {jQuery} $el Element.
|
|
*
|
|
* @return {string} UTM content string.
|
|
*/
|
|
getUTMContentValue( $el ) {
|
|
// UTM content for Fields.
|
|
if ( $el.hasClass( 'wpforms-add-fields-button' ) ) {
|
|
return $el.data( 'utm-content' ) + ' Field';
|
|
}
|
|
|
|
// UTM content for Templates.
|
|
if ( $el.hasClass( 'wpforms-template-select' ) ) {
|
|
return app.slugToUTMContent( $el.data( 'slug' ) );
|
|
}
|
|
|
|
// UTM content for Addons (sidebar).
|
|
if ( $el.hasClass( 'wpforms-panel-sidebar-section' ) ) {
|
|
return app.slugToUTMContent( $el.data( 'slug' ) ) + ' Addon';
|
|
}
|
|
|
|
// UTM content by default with fallback `data-name`.
|
|
return $el.data( 'utm-content' ) || $el.data( 'name' );
|
|
},
|
|
|
|
/**
|
|
* Convert slug to UTM content.
|
|
*
|
|
* @since 1.6.9
|
|
*
|
|
* @param {string} slug Slug.
|
|
*
|
|
* @return {string} UTM content string.
|
|
*/
|
|
slugToUTMContent( slug ) {
|
|
if ( ! slug ) {
|
|
return '';
|
|
}
|
|
|
|
return slug.toString()
|
|
|
|
// Replace all non-alphanumeric characters with space.
|
|
.replace( /[^a-z\d ]/gi, ' ' )
|
|
|
|
// Uppercase each word.
|
|
.replace( /\b[a-z]/g, function( char ) {
|
|
return char.toUpperCase();
|
|
} );
|
|
},
|
|
|
|
/**
|
|
* Get upgrade URL according to the UTM content and license type.
|
|
*
|
|
* @since 1.6.9
|
|
*
|
|
* @param {string} utmContent UTM content.
|
|
* @param {string} type Feature license type: pro or elite.
|
|
*
|
|
* @return {string} Upgrade URL.
|
|
*/
|
|
getUpgradeURL( utmContent, type ) {
|
|
let baseURL = wpforms_education.upgrade[ type ].url;
|
|
|
|
if ( utmContent.toLowerCase().indexOf( 'template' ) > -1 ) {
|
|
baseURL = wpforms_education.upgrade[ type ].url_template;
|
|
}
|
|
|
|
// Test if the base URL already contains `?`.
|
|
let appendChar = /(\?)/.test( baseURL ) ? '&' : '?';
|
|
|
|
// If the upgrade link is changed by partners, appendChar has to be encoded.
|
|
if ( baseURL.indexOf( 'https://wpforms.com' ) === -1 ) {
|
|
appendChar = encodeURIComponent( appendChar );
|
|
}
|
|
|
|
return baseURL + appendChar + 'utm_content=' + encodeURIComponent( utmContent.trim() );
|
|
},
|
|
|
|
/**
|
|
* Upgrade modal second state.
|
|
*
|
|
* @since 1.6.6
|
|
*
|
|
* @param {string} type Feature license type: pro or elite.
|
|
*/
|
|
upgradeModalThankYou: ( type ) => {
|
|
$.alert( {
|
|
title: wpforms_education.thanks_for_interest,
|
|
content: wpforms_education.upgrade[ type ].modal,
|
|
icon: 'fa fa-info-circle',
|
|
type: 'blue',
|
|
boxWidth: '565px',
|
|
buttons: {
|
|
confirm: {
|
|
text: wpforms_education.ok,
|
|
btnClass: 'btn-confirm',
|
|
keys: [ 'enter' ],
|
|
},
|
|
},
|
|
} );
|
|
},
|
|
|
|
/**
|
|
* Get spinner markup.
|
|
*
|
|
* @since 1.7.6
|
|
*
|
|
* @return {string} Spinner markup.
|
|
*/
|
|
getSpinner: () => {
|
|
return spinner;
|
|
},
|
|
|
|
/**
|
|
* Addon activate modal.
|
|
*
|
|
* @since 1.7.0
|
|
*
|
|
* @param {jQuery} $button jQuery button element.
|
|
*/
|
|
activateModal( $button ) {
|
|
const feature = $button.data( 'name' ),
|
|
message = $button.data( 'message' );
|
|
|
|
const canActivateAddons = wpforms_education.can_activate_addons;
|
|
|
|
$.alert( {
|
|
title: false,
|
|
content: message ? message : wpforms_education.activate_prompt.replace( /%name%/g, feature ),
|
|
icon: 'fa fa-info-circle',
|
|
type: 'blue',
|
|
buttons: {
|
|
confirm: {
|
|
text: wpforms_education.activate_confirm,
|
|
btnClass: 'btn-confirm' + ( ! canActivateAddons ? ' hidden' : '' ),
|
|
keys: [ 'enter' ],
|
|
isHidden: ! canActivateAddons,
|
|
action() {
|
|
this.$$confirm
|
|
.prop( 'disabled', true )
|
|
.html( spinner + wpforms_education.activating );
|
|
|
|
this.$$cancel
|
|
.prop( 'disabled', true );
|
|
|
|
app.activateAddon( $button, this );
|
|
|
|
return false;
|
|
},
|
|
},
|
|
cancel: {
|
|
text: wpforms_education.cancel,
|
|
},
|
|
},
|
|
} );
|
|
},
|
|
|
|
/**
|
|
* Activate addon via AJAX.
|
|
*
|
|
* @since 1.7.0
|
|
*
|
|
* @param {jQuery} $button jQuery button element.
|
|
* @param {Object} previousModal Previous modal instance.
|
|
*/
|
|
activateAddon( $button, previousModal ) {
|
|
const path = $button.data( 'path' ),
|
|
pluginType = $button.data( 'type' ),
|
|
nonce = $button.data( 'nonce' ),
|
|
hideOnSuccess = $button.data( 'hide-on-success' );
|
|
|
|
$.post(
|
|
wpforms_education.ajax_url,
|
|
{
|
|
action: 'wpforms_activate_addon',
|
|
nonce,
|
|
plugin: path,
|
|
type: pluginType,
|
|
},
|
|
function( res ) {
|
|
previousModal.close();
|
|
|
|
if ( res.success ) {
|
|
if ( hideOnSuccess ) {
|
|
$button.hide();
|
|
}
|
|
|
|
app.saveModal( pluginType === 'plugin' ? wpforms_education.plugin_activated : wpforms_education.addon_activated );
|
|
} else {
|
|
$.alert( {
|
|
title: false,
|
|
content: res.data,
|
|
icon: 'fa fa-exclamation-circle',
|
|
type: 'orange',
|
|
buttons: {
|
|
confirm: {
|
|
text: wpforms_education.close,
|
|
btnClass: 'btn-confirm',
|
|
keys: [ 'enter' ],
|
|
},
|
|
},
|
|
} );
|
|
}
|
|
}
|
|
);
|
|
},
|
|
|
|
/**
|
|
* Ask user if they would like to save form and refresh form builder.
|
|
*
|
|
* @since 1.7.0
|
|
*
|
|
* @param {string} title Modal title.
|
|
* @param {string|boolean} content Modal content.
|
|
* @param {Object} args Additional arguments.
|
|
*/
|
|
saveModal( title, content = false, args = undefined ) {
|
|
title = title || wpforms_education.addon_activated;
|
|
content = content || wpforms_education.save_prompt;
|
|
|
|
$.alert( {
|
|
title: title.replace( /\.$/, '' ), // Remove a dot in the title end.
|
|
content,
|
|
icon: 'fa fa-check-circle',
|
|
type: 'green',
|
|
buttons: {
|
|
confirm: {
|
|
text: args?.saveConfirm || wpforms_education.save_confirm,
|
|
btnClass: 'btn-confirm',
|
|
keys: [ 'enter' ],
|
|
action() {
|
|
if ( typeof WPFormsBuilder === 'undefined' ) {
|
|
location.reload();
|
|
|
|
return;
|
|
}
|
|
|
|
this.$$confirm
|
|
.prop( 'disabled', true )
|
|
.html( spinner + wpforms_education.saving );
|
|
|
|
this.$$cancel
|
|
.prop( 'disabled', true );
|
|
|
|
if ( WPFormsBuilder.formIsSaved() ) {
|
|
app.redirect( args?.redirectUrl );
|
|
|
|
return;
|
|
}
|
|
|
|
const saveForm = WPFormsBuilder.formSave( false );
|
|
|
|
if ( ! saveForm ) {
|
|
return true;
|
|
}
|
|
|
|
saveForm.done( function() {
|
|
app.redirect( args?.redirectUrl );
|
|
} );
|
|
|
|
return false;
|
|
},
|
|
},
|
|
cancel: {
|
|
text: wpforms_education.close,
|
|
},
|
|
},
|
|
} );
|
|
},
|
|
|
|
/**
|
|
* Redirect to URL or reload the page.
|
|
*
|
|
* @since 1.9.2
|
|
*
|
|
* @param {string} url Redirect URL.
|
|
*/
|
|
redirect( url ) {
|
|
if ( url ) {
|
|
location.href = url;
|
|
} else {
|
|
location.reload();
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Addon install modal.
|
|
*
|
|
* @since 1.7.0
|
|
*
|
|
* @param {jQuery} $button jQuery button element.
|
|
*/
|
|
installModal( $button ) {
|
|
const feature = $button.data( 'name' ),
|
|
url = $button.data( 'url' );
|
|
|
|
if ( ! url || '' === url ) {
|
|
wpf.debug( `Couldn't install the ${ feature } addon: Empty install URL.` );
|
|
return;
|
|
}
|
|
|
|
const canInstallAddons = wpforms_education.can_install_addons,
|
|
message = $button.data( 'message' );
|
|
|
|
$.alert( {
|
|
title: false,
|
|
content: message ? message : wpforms_education.install_prompt.replace( /%name%/g, feature ),
|
|
icon: 'fa fa-info-circle',
|
|
type: 'blue',
|
|
boxWidth: '425px',
|
|
buttons: {
|
|
confirm: {
|
|
text: wpforms_education.install_confirm,
|
|
btnClass: 'btn-confirm' + ( ! canInstallAddons ? ' hidden' : '' ),
|
|
keys: [ 'enter' ],
|
|
isHidden: ! canInstallAddons,
|
|
action() {
|
|
this.$$confirm.prop( 'disabled', true )
|
|
.html( spinner + wpforms_education.installing );
|
|
|
|
this.$$cancel
|
|
.prop( 'disabled', true );
|
|
|
|
app.installAddon( $button, this );
|
|
|
|
return false;
|
|
},
|
|
},
|
|
cancel: {
|
|
text: wpforms_education.cancel,
|
|
},
|
|
},
|
|
} );
|
|
},
|
|
|
|
/**
|
|
* Inform customer about incompatible addon modal.
|
|
*
|
|
* @since 1.9.4
|
|
*
|
|
* @param {jQuery} $button jQuery button element.
|
|
*/
|
|
incompatibleModal( $button ) {
|
|
const title = wpforms_education.addon_incompatible.title;
|
|
const content = $button.data( 'message' ) || wpforms_education.addon_error;
|
|
|
|
$.alert( {
|
|
title,
|
|
content,
|
|
icon: 'fa fa-exclamation-circle',
|
|
type: 'orange',
|
|
buttons: {
|
|
confirm: {
|
|
text: wpforms_education.addon_incompatible.button_text,
|
|
btnClass: 'btn-confirm',
|
|
keys: [ 'enter' ],
|
|
action() {
|
|
if ( typeof WPFormsBuilder === 'undefined' ) {
|
|
app.redirect( wpforms_education.addon_incompatible.button_url );
|
|
|
|
return false;
|
|
}
|
|
|
|
this.$$confirm
|
|
.prop( 'disabled', true )
|
|
.html( spinner + this.$$confirm.text() );
|
|
|
|
this.$$cancel
|
|
.prop( 'disabled', true );
|
|
|
|
if ( WPFormsBuilder.formIsSaved() ) {
|
|
app.redirect( wpforms_education.addon_incompatible.button_url );
|
|
|
|
return false;
|
|
}
|
|
|
|
const saveForm = WPFormsBuilder.formSave( false );
|
|
|
|
if ( ! saveForm ) {
|
|
return false;
|
|
}
|
|
|
|
saveForm.done( function() {
|
|
app.redirect( wpforms_education.addon_incompatible.button_url );
|
|
} );
|
|
|
|
return false;
|
|
},
|
|
},
|
|
cancel: {
|
|
text: wpforms_education.cancel,
|
|
},
|
|
},
|
|
} );
|
|
},
|
|
|
|
/**
|
|
* Install addon via AJAX.
|
|
*
|
|
* @since 1.7.0
|
|
*
|
|
* @param {jQuery} $button Button object.
|
|
* @param {Object} previousModal Previous modal instance.
|
|
*/
|
|
installAddon( $button, previousModal ) {
|
|
const url = $button.data( 'url' ),
|
|
pluginType = $button.data( 'type' ),
|
|
nonce = $button.data( 'nonce' ),
|
|
hideOnSuccess = $button.data( 'hide-on-success' );
|
|
|
|
$.post(
|
|
wpforms_education.ajax_url,
|
|
{
|
|
action: 'wpforms_install_addon',
|
|
nonce,
|
|
plugin: url,
|
|
type: pluginType,
|
|
},
|
|
function( res ) {
|
|
previousModal.close();
|
|
|
|
if ( res.success ) {
|
|
if ( hideOnSuccess ) {
|
|
$button.hide();
|
|
}
|
|
|
|
app.saveModal( res.data.msg );
|
|
} else {
|
|
let message = res.data;
|
|
|
|
if ( 'object' === typeof res.data ) {
|
|
message = wpforms_education.addon_error;
|
|
}
|
|
|
|
$.alert( {
|
|
title: false,
|
|
content: message,
|
|
icon: 'fa fa-exclamation-circle',
|
|
type: 'orange',
|
|
buttons: {
|
|
confirm: {
|
|
text: wpforms_education.close,
|
|
btnClass: 'btn-confirm',
|
|
keys: [ 'enter' ],
|
|
},
|
|
},
|
|
} );
|
|
}
|
|
}
|
|
);
|
|
},
|
|
|
|
/**
|
|
* Get upgrade modal width.
|
|
*
|
|
* @since 1.7.3
|
|
*
|
|
* @param {boolean} isVideoModal Upgrade a modal type (with video or not).
|
|
*
|
|
* @return {string} Modal width in pixels.
|
|
*/
|
|
getUpgradeModalWidth( isVideoModal ) {
|
|
const windowWidth = $( window ).width();
|
|
|
|
if ( windowWidth <= 300 ) {
|
|
return '250px';
|
|
}
|
|
|
|
if ( windowWidth <= 750 ) {
|
|
return '350px';
|
|
}
|
|
|
|
if ( ! isVideoModal || windowWidth <= 1024 ) {
|
|
return '550px';
|
|
}
|
|
|
|
return windowWidth > 1070 ? '1040px' : '994px';
|
|
},
|
|
|
|
/**
|
|
* Error modal.
|
|
*
|
|
* @since 1.7.6
|
|
*
|
|
* @param {string} title Modal title.
|
|
* @param {string} content Modal content.
|
|
*/
|
|
errorModal( title, content ) {
|
|
$.alert( {
|
|
title: title || false,
|
|
content,
|
|
icon: 'fa fa-exclamation-circle',
|
|
type: 'orange',
|
|
buttons: {
|
|
confirm: {
|
|
text: wpforms_education.close,
|
|
btnClass: 'btn-confirm',
|
|
keys: [ 'enter' ],
|
|
},
|
|
},
|
|
} );
|
|
},
|
|
};
|
|
|
|
// Provide access to public functions/properties.
|
|
return app;
|
|
}( document, window, jQuery ) );
|
|
|
|
WPFormsEducation.core.init();
|