PKL\uәiiadmin/builder/templates.min.jsnuW+Avar WPForms=window.WPForms||{};WPForms.Admin=WPForms.Admin||{},WPForms.Admin.Builder=WPForms.Admin.Builder||{},WPForms.Admin.Builder.Templates=WPForms.Admin.Builder.Templates||function(r,e){"use strict";var i={previews:new Map},n={init:function(){e(r).ready(n.ready)},ready:function(){e("#wpforms-panel-providers").trigger("WPForms.Admin.Builder.Templates.ready")},add:function(r){r.forEach(function(r){"string"==typeof r&&i.previews.set(r,wp.template(r))})},get:function(r){var e=i.previews.get(r);return void 0!==e?e:function(){return""}}};return n}(document,(window,jQuery)),WPForms.Admin.Builder.Templates.init();PKL\5MUUadmin/builder/providers.jsnuW+A/* global WPForms, jQuery, Map, wpforms_builder, wpforms_builder_providers, _ */ var WPForms = window.WPForms || {}; WPForms.Admin = WPForms.Admin || {}; WPForms.Admin.Builder = WPForms.Admin.Builder || {}; /** * WPForms Providers module. * * @since 1.4.7 */ WPForms.Admin.Builder.Providers = WPForms.Admin.Builder.Providers || ( function( document, window, $ ) { 'use strict'; /** * Private functions and properties. * * @since 1.4.7 * * @type {Object} */ var __private = { /** * Internal cache storage, do not use it directly, but app.cache.{(get|set|delete|clear)()} instead. * Key is the provider slug, value is a Map, that will have it's own key as a connection id (or not). * * @since 1.4.7 * * @type {Object.} */ cache: {}, /** * Config contains all configuration properties. * * @since 1.4.7 * * @type {Object.} */ config: { /** * List of default templates that should be compiled. * * @since 1.4.7 * * @type {string[]} */ templates: [ 'wpforms-providers-builder-content-connection-fields', 'wpforms-providers-builder-content-connection-conditionals' ] } }; /** * Public functions and properties. * * @since 1.4.7 * * @type {Object} */ var app = { /** * Panel holder. * * @since 1.5.9 * * @type {object} */ panelHolder: {}, /** * Form holder. * * @since 1.4.7 * * @type {object} */ form: $( '#wpforms-builder-form' ), /** * Spinner HTML. * * @since 1.4.7 * * @type {object} */ spinner: '', /** * All ajax requests are grouped together with own properties. * * @since 1.4.7 */ ajax: { /** * Merge custom AJAX data object with defaults. * * @since 1.4.7 * @since 1.5.9 Added a new parameter - provider * * @param {string} provider Current provider slug. * @param {object} custom AJAX data object with custom settings. * * @returns {Object} */ _mergeData: function( provider, custom ) { var data = { id: $( '#wpforms-builder-form' ).data( 'id' ), nonce: wpforms_builder.nonce, action: 'wpforms_builder_provider_ajax_' + provider, }; $.extend( data, custom ); return data; }, /** * Make an AJAX request. It's basically a wrapper around jQuery.ajax, but with some defaults. * * @since 1.4.7 * * @param {string} provider Current provider slug. * @param {*} custom Object of user-defined $.ajax()-compatible parameters. * * @return {Promise} */ request: function( provider, custom ) { var $holder = app.getProviderHolder( provider ), $lock = $holder.find( '.wpforms-builder-provider-connections-save-lock' ), $error = $holder.find( '.wpforms-builder-provider-connections-error' ); var params = { url: wpforms_builder.ajax_url, type: 'post', dataType: 'json', beforeSend: function() { $holder.addClass( 'loading' ); $lock.val( 1 ); $error.hide(); }, }; custom.data = app.ajax._mergeData( provider, custom.data || {} ); $.extend( params, custom ); return $.ajax( params ) .fail( function( jqXHR, textStatus, errorThrown ) { /* * Right now we are logging into browser console. * In future that might be something better. */ console.error( 'provider:', provider ); console.error( jqXHR ); console.error( textStatus ); $lock.val( 1 ); $error.show(); } ) .always( function( dataOrjqXHR, textStatus, jqXHROrerrorThrown ) { $holder.removeClass( 'loading' ); if ( 'success' === textStatus ) { $lock.val( 0 ); } } ); } }, /** * Temporary in-memory cache handling for all providers. * * @since 1.4.7 */ cache: { /** * Get the value from cache by key. * * @since 1.4.7 * @since 1.5.9 Added a new parameter - provider. * * @param {string} provider Current provider slug. * @param {string} key Cache key. * * @returns {*} Null if some error occurs. */ get: function( provider, key ) { if ( typeof __private.cache[ provider ] === 'undefined' || ! ( __private.cache[ provider ] instanceof Map ) ) { return null; } return __private.cache[ provider ].get( key ); }, /** * Get the value from cache by key and an ID. * Useful when Object is stored under key and we need specific value. * * @since 1.4.7 * @since 1.5.9 Added a new parameter - provider. * * @param {string} provider Current provider slug. * @param {string} key Cache key. * @param {string} id Cached object ID. * * @returns {*} Null if some error occurs. */ getById: function( provider, key, id ) { if ( typeof this.get( provider, key )[ id ] === 'undefined' ) { return null; } return this.get( provider, key )[ id ]; }, /** * Save the data to cache. * * @since 1.4.7 * @since 1.5.9 Added a new parameter - provider. * * @param {string} provider Current provider slug. * @param {string} key Intended to be a string, but can be everything that Map supports as a key. * @param {*} value Data you want to save in cache. * * @returns {Map} All the cache for the provider. IE11 returns 'undefined' for an undefined reason. */ set: function( provider, key, value ) { if ( typeof __private.cache[ provider ] === 'undefined' || ! ( __private.cache[ provider ] instanceof Map ) ) { __private.cache[ provider ] = new Map(); } return __private.cache[ provider ].set( key, value ); }, /** * Add the data to cache to a particular key. * * @since 1.4.7 * @since 1.5.9 Added a new parameter - provider. * * @example app.cache.as('provider').addTo('connections', connection_id, connection); * * @param {string} provider Current provider slug. * @param {string} key Intended to be a string, but can be everything that Map supports as a key. * @param {string} id ID for a value that should be added to a certain key. * @param {*} value Data you want to save in cache. * * @returns {Map} All the cache for the provider. IE11 returns 'undefined' for an undefined reason. */ addTo: function( provider, key, id, value ) { if ( typeof __private.cache[ provider ] === 'undefined' || ! ( __private.cache[ provider ] instanceof Map ) ) { __private.cache[ provider ] = new Map(); this.set( provider, key, {} ); } var data = this.get( provider, key ); data[ id ] = value; return this.set( provider, key, data ); }, /** * Delete the cache by key. * * @since 1.4.7 * @since 1.5.9 Added a new parameter - provider. * * @param {string} provider Current provider slug. * @param {string} key Cache key. * * @returns boolean|null True on success, null on data holder failure, false on error. */ delete: function( provider, key ) { if ( typeof __private.cache[ provider ] === 'undefined' || ! ( __private.cache[ provider ] instanceof Map ) ) { return null; } return __private.cache[ provider ].delete( key ); }, /** * Delete particular data from a certain key. * * @since 1.4.7 * @since 1.5.9 Added a new parameter - provider. * * @example app.cache.as('provider').deleteFrom('connections', connection_id); * * @param {string} provider Current provider slug. * @param {string} key Intended to be a string, but can be everything that Map supports as a key. * @param {string} id ID for a value that should be delete from a certain key. * * @returns {Map} All the cache for the provider. IE11 returns 'undefined' for an undefined reason. */ deleteFrom: function( provider, key, id ) { if ( typeof __private.cache[ provider ] === 'undefined' || ! ( __private.cache[ provider ] instanceof Map ) ) { return null; } var data = this.get( provider, key ); delete data[ id ]; return this.set( provider, key, data ); }, /** * Clear all the cache data. * * @since 1.4.7 * @since 1.5.9 Added a new parameter - provider. * * @param {string} provider Current provider slug. */ clear: function( provider ) { if ( typeof __private.cache[ provider ] === 'undefined' || ! ( __private.cache[ provider ] instanceof Map ) ) { return; } __private.cache[ provider ].clear(); } }, /** * Start the engine. DOM is not ready yet, use only to init something. * * @since 1.4.7 */ init: function() { // Do that when DOM is ready. $( document ).ready( app.ready ); }, /** * DOM is fully loaded. * Should be hooked into in addons, that need to work with DOM, templates etc. * * @since 1.4.7 */ ready: function() { app.panelHolder = $( '#wpforms-panel-providers' ); app.Templates = WPForms.Admin.Builder.Templates; app.Templates.add( __private.config.templates ); app.bindActions(); app.ui.bindActions(); app.panelHolder.trigger( 'WPForms.Admin.Builder.Providers.ready' ); }, /** * Process all generic actions/events, mostly custom that were fired by our API. * * @since 1.4.7 */ bindActions: function() { // On Form save - notify user about required fields. $( document ).on( 'wpformsSaved', function() { var $connectionBlocks = $( '#wpforms-panel-providers' ).find( '.wpforms-builder-provider-connection' ); if ( ! $connectionBlocks.length ) { return; } // We need to show him "Required fields empty" popup only once. var isShownOnce = false; $connectionBlocks.each( function() { var isRequiredEmpty = false; // Do the actual required fields check. $( this ).find( 'input.wpforms-required, select.wpforms-required, textarea.wpforms-required' ).each( function() { var value = $( this ).val(); if ( _.isEmpty( value ) ) { $( this ).addClass( 'wpforms-error' ); isRequiredEmpty = true; } else { $( this ).removeClass( 'wpforms-error' ); } } ); // Notify user. if ( isRequiredEmpty && ! isShownOnce ) { var $titleArea = $( this ).closest( '.wpforms-builder-provider' ).find( '.wpforms-builder-provider-title' ).clone(); $titleArea.find( 'button' ).remove(); var msg = wpforms_builder.provider_required_flds; $.alert( { title: wpforms_builder.heads_up, content: msg.replace( '{provider}', '' + $titleArea.text().trim() + '' ), icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_builder.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], }, }, } ); // Save that we have already showed the user, so we won't bug it anymore. isShownOnce = true; } } ); } ); /* * Update form state when each connection is loaded into the DOM. * This will prevent a please-save-prompt to appear, when navigating * out and back to Marketing tab without doing any changes anywhere. */ $( '#wpforms-panel-providers' ).on( 'connectionRendered', function() { if ( wpf.initialSave === true ) { wpf.savedState = wpf.getFormState( '#wpforms-builder-form'); } } ); }, /** * All methods that modify UI of a page. * * @since 1.4.7 */ ui: { /** * Process UI related actions/events: click, change etc - that are triggered from UI. * * @since 1.4.7 */ bindActions: function() { // CONNECTION: ADD/DELETE. app.panelHolder .on( 'click', '.js-wpforms-builder-provider-account-add', function( e ) { e.preventDefault(); app.ui.account.setProvider( $( this ).data( 'provider' ) ); app.ui.account.add(); } ) .on( 'click', '.js-wpforms-builder-provider-connection-add', function( e ) { e.preventDefault(); app.ui.connectionAdd( $( this ).data( 'provider' ) ); } ) .on( 'click', '.js-wpforms-builder-provider-connection-delete', function( e ) { var $btn = $( this ); e.preventDefault(); app.ui.connectionDelete( $btn.closest( '.wpforms-builder-provider' ).data( 'provider' ), $btn.closest( '.wpforms-builder-provider-connection' ) ); } ); // CONNECTION: FIELDS - ADD/DELETE. app.panelHolder .on( 'click', '.js-wpforms-builder-provider-connection-fields-add', function( e ) { e.preventDefault(); var $table = $( this ).parents( '.wpforms-builder-provider-connection-fields-table' ), $clone = $table.find( 'tr' ).last().clone( true ), nextID = parseInt( /\[(\d+)\]/g.exec( $clone.find( '.wpforms-builder-provider-connection-field-name' ).attr( 'name' ) )[ 1 ], 10 ) + 1; // Clear the row and increment the counter. $clone.find( '.wpforms-builder-provider-connection-field-name' ) .attr( 'name', $clone.find( '.wpforms-builder-provider-connection-field-name' ).attr( 'name' ).replace( /\[fields_meta\]\[(\d+)\]/g, '[fields_meta][' + nextID + ']' ) ) .val( '' ); $clone.find( '.wpforms-builder-provider-connection-field-value' ) .attr( 'name', $clone.find( '.wpforms-builder-provider-connection-field-value' ).attr( 'name' ).replace( /\[fields_meta\]\[(\d+)\]/g, '[fields_meta][' + nextID + ']' ) ) .val( '' ); // Re-enable "delete" button. $clone.find( '.js-wpforms-builder-provider-connection-fields-delete' ).removeClass( 'hidden' ); // Put it back to the table. $table.find( 'tbody' ).append( $clone.get( 0 ) ); } ) .on( 'click', '.js-wpforms-builder-provider-connection-fields-delete', function( e ) { e.preventDefault(); var $row = $( this ).parents( '.wpforms-builder-provider-connection-fields-table tr' ); $row.remove(); } ); // CONNECTION: Rendered. $( '#wpforms-panel-providers' ).on( 'connectionRendered', function( e, provider, connectionId ) { wpf.initTooltips(); } ); }, /** * Add a connection to a page. * This is a multi-step process, where the 1st step is always the same for all providers. * * @since 1.4.7 * @since 1.5.9 Added a new parameter - provider. * * @param {string} provider Current provider slug. */ connectionAdd: function( provider ) { $.confirm( { title: false, content: wpforms_builder_providers.prompt_connection.replace( /%type%/g, 'connection' ) + '' + '

' + wpforms_builder_providers.error_name + '

', backgroundDismiss: false, closeIcon: false, icon: 'fa fa-info-circle', type: 'blue', buttons: { confirm: { text: wpforms_builder.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], action: function() { var name = this.$content.find( '#wpforms-builder-provider-connection-name' ).val().trim(), error = this.$content.find( '.error' ); if ( name === '' ) { error.show(); return false; } else { app.getProviderHolder( provider ).trigger( 'connectionCreate', [ name ] ); } } }, cancel: { text: wpforms_builder.cancel, }, }, } ); }, /** * What to do with UI when connection is deleted. * * @since 1.4.7 * @since 1.5.9 Added a new parameter - provider. * * @param {string} provider Current provider slug. * @param {Object} $connection jQuery DOM element for a connection. */ connectionDelete: function( provider, $connection ) { $.confirm( { title: false, content: wpforms_builder_providers.confirm_connection, icon: 'fa fa-exclamation-circle', type: 'orange', buttons: { confirm: { text: wpforms_builder.ok, btnClass: 'btn-confirm', keys: [ 'enter' ], action: function() { // We need this BEFORE removing, as some handlers might need DOM element. app.getProviderHolder( provider ).trigger( 'connectionDelete', [ $connection ] ); $connection.fadeOut( 'fast', function() { $( this ).remove(); app.getProviderHolder( provider ).trigger( 'connectionDeleted', [ $connection ] ); } ); } }, cancel: { text: wpforms_builder.cancel } } } ); }, /** * Account specific methods. * * @since 1.4.8 * @since 1.5.8 Added binding `onClose` event. */ account: { /** * Current provider in the context of account creation. * * @since 1.4.8 * * @param {String} */ provider: '', /** * Preserve a list of action to perform when new account creation form is submitted. * Provider specific. * * @since 1.4.8 * * @param {Array} */ submitHandlers: [], /** * Set the account specific provider. * * @since 1.4.8 * * @param {String} provider */ setProvider: function( provider ) { this.provider = provider; }, /** * Add an account for provider. * * @since 1.4.8 */ add: function() { var account = this; $.confirm( { title: false, smoothContent: true, content: function() { var modal = this; return app.ajax .request( account.provider, { data: { task: 'account_template_get', }, } ) .done( function( response ) { if ( ! response.success ) { return; } if ( response.data.title.length ) { modal.setTitle( response.data.title ); } if ( response.data.content.length ) { modal.setContent( response.data.content ); } if ( response.data.type.length ) { modal.setType( response.data.type ); } app.getProviderHolder( account.provider ).trigger( 'accountAddModal.content.done', [ modal, account.provider, response ] ); } ) .fail( function() { app.getProviderHolder( account.provider ).trigger( 'accountAddModal.content.fail', [ modal, account.provider ] ); } ) .always( function() { app.getProviderHolder( account.provider ).trigger( 'accountAddModal.content.always', [ modal, account.provider ] ); } ); }, contentLoaded: function( data, status, xhr ) { var modal = this; // Data is already set in content. this.buttons.add.enable(); this.buttons.cancel.enable(); app.getProviderHolder( account.provider ).trigger( 'accountAddModal.contentLoaded', [ modal ] ); }, // Before the modal is displayed. onOpenBefore: function() { var modal = this; modal.buttons.add.disable(); modal.buttons.cancel.disable(); modal.$body.addClass( 'wpforms-providers-account-add-modal' ); app.getProviderHolder( account.provider ).trigger( 'accountAddModal.onOpenBefore', [ modal ] ); }, // Before the modal is hidden. onClose: function() { // If an account was configured successfully - show a modal with adding a new connection. if ( true === app.ui.account.isConfigured( account.provider ) ) { app.ui.connectionAdd( account.provider ); } }, icon: 'fa fa-info-circle', type: 'blue', buttons: { add: { text: wpforms_builder.provider_add_new_acc_btn, btnClass: 'btn-confirm', keys: [ 'enter' ], action: function() { var modal = this; app.getProviderHolder( account.provider ).trigger( 'accountAddModal.buttons.add.action.before', [ modal ] ); if ( ! _.isEmpty( account.provider ) && typeof account.submitHandlers[ account.provider ] !== 'undefined' ) { return account.submitHandlers[ account.provider ]( modal ); } }, }, cancel: { text: wpforms_builder.cancel, }, }, } ); }, /** * Register a template for Add New Account modal window. * * @since 1.4.8 */ registerAddHandler: function( provider, handler ) { if ( typeof provider === 'string' && typeof handler === 'function' ) { this.submitHandlers[ provider ] = handler; } }, /** * Check whether the defined provider is configured or not. * * @since 1.5.8 * @since 1.5.9 Added a new parameter - provider. * * @param {string} provider Current provider slug. * * @returns {boolean} Account status. */ isConfigured: function( provider ) { // Check if `Add New Account` button is hidden. return app.getProviderHolder( provider ).find( '.js-wpforms-builder-provider-account-add' ).hasClass( 'hidden' ); }, }, }, /** * Get a jQuery DOM object, that has all the provider-related DOM inside. * * @since 1.4.7 * * @returns {Object} jQuery DOM element. */ getProviderHolder: function( provider ) { return $( '#' + provider + '-provider' ); } }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); // Initialize. WPForms.Admin.Builder.Providers.init(); PKL\Qnnadmin/builder/templates.jsnuW+A/* global WPForms, jQuery, Map, wpforms_builder, wpforms_builder_providers, _ */ var WPForms = window.WPForms || {}; WPForms.Admin = WPForms.Admin || {}; WPForms.Admin.Builder = WPForms.Admin.Builder || {}; WPForms.Admin.Builder.Templates = WPForms.Admin.Builder.Templates || (function ( document, window, $ ) { 'use strict'; /** * Private functions and properties. * * @since 1.4.8 * * @type {Object} */ var __private = { /** * All templating functions for providers are stored here in a Map. * Key is a template name, value - Underscore.js templating function. * * @since 1.4.8 * * @type {Map} */ previews: new Map() }; /** * Public functions and properties. * * @since 1.4.8 * * @type {Object} */ var app = { /** * Start the engine. DOM is not ready yet, use only to init something. * * @since 1.4.8 */ init: function () { // Do that when DOM is ready. $( document ).ready( app.ready ); }, /** * DOM is fully loaded. * * @since 1.4.8 */ ready: function () { $( '#wpforms-panel-providers' ).trigger( 'WPForms.Admin.Builder.Templates.ready' ); }, /** * Register and compile all templates. * All data is saved in a Map. * * @since 1.4.8 * * @param {string[]} templates Array of template names. */ add: function ( templates ) { templates.forEach( function ( template ) { if ( typeof template === 'string' ) { __private.previews.set( template, wp.template( template ) ); } } ); }, /** * Get a templating function (to compile later with data). * * @since 1.4.8 * * @param {string} template ID of a template to retrieve from a cache. * * @returns {*} A callable that after compiling will always return a string. */ get: function ( template ) { var preview = __private.previews.get( template ); if ( typeof preview !== 'undefined' ) { return preview; } return function () { return ''; }; } }; // Provide access to public functions/properties. return app; })( document, window, jQuery ); // Initialize. WPForms.Admin.Builder.Templates.init(); PKL\admin/builder/providers.min.jsnuW+Avar WPForms=window.WPForms||{};WPForms.Admin=WPForms.Admin||{},WPForms.Admin.Builder=WPForms.Admin.Builder||{},WPForms.Admin.Builder.Providers=WPForms.Admin.Builder.Providers||function(e,c){"use strict";var i={cache:{},config:{templates:["wpforms-providers-builder-content-connection-fields","wpforms-providers-builder-content-connection-conditionals"]}},a={panelHolder:{},form:c("#wpforms-builder-form"),spinner:'',ajax:{_mergeData:function(e,r){var n={id:c("#wpforms-builder-form").data("id"),nonce:wpforms_builder.nonce,action:"wpforms_builder_provider_ajax_"+e};return c.extend(n,r),n},request:function(o,e){var t=a.getProviderHolder(o),i=t.find(".wpforms-builder-provider-connections-save-lock"),d=t.find(".wpforms-builder-provider-connections-error"),r={url:wpforms_builder.ajax_url,type:"post",dataType:"json",beforeSend:function(){t.addClass("loading"),i.val(1),d.hide()}};return e.data=a.ajax._mergeData(o,e.data||{}),c.extend(r,e),c.ajax(r).fail(function(e,r,n){console.error("provider:",o),console.error(e),console.error(r),i.val(1),d.show()}).always(function(e,r,n){t.removeClass("loading"),"success"===r&&i.val(0)})}},cache:{get:function(e,r){return void 0!==i.cache[e]&&i.cache[e]instanceof Map?i.cache[e].get(r):null},getById:function(e,r,n){return void 0===this.get(e,r)[n]?null:this.get(e,r)[n]},set:function(e,r,n){return void 0!==i.cache[e]&&i.cache[e]instanceof Map||(i.cache[e]=new Map),i.cache[e].set(r,n)},addTo:function(e,r,n,o){void 0!==i.cache[e]&&i.cache[e]instanceof Map||(i.cache[e]=new Map,this.set(e,r,{}));var t=this.get(e,r);return t[n]=o,this.set(e,r,t)},delete:function(e,r){return void 0!==i.cache[e]&&i.cache[e]instanceof Map?i.cache[e].delete(r):null},deleteFrom:function(e,r,n){if(void 0===i.cache[e]||!(i.cache[e]instanceof Map))return null;var o=this.get(e,r);return delete o[n],this.set(e,r,o)},clear:function(e){void 0!==i.cache[e]&&i.cache[e]instanceof Map&&i.cache[e].clear()}},init:function(){c(e).ready(a.ready)},ready:function(){a.panelHolder=c("#wpforms-panel-providers"),a.Templates=WPForms.Admin.Builder.Templates,a.Templates.add(i.config.templates),a.bindActions(),a.ui.bindActions(),a.panelHolder.trigger("WPForms.Admin.Builder.Providers.ready")},bindActions:function(){c(e).on("wpformsSaved",function(){var e=c("#wpforms-panel-providers").find(".wpforms-builder-provider-connection");if(e.length){var o=!1;e.each(function(){var r=!1;if(c(this).find("input.wpforms-required, select.wpforms-required, textarea.wpforms-required").each(function(){var e=c(this).val();_.isEmpty(e)?(c(this).addClass("wpforms-error"),r=!0):c(this).removeClass("wpforms-error")}),r&&!o){var e=c(this).closest(".wpforms-builder-provider").find(".wpforms-builder-provider-title").clone();e.find("button").remove();var n=wpforms_builder.provider_required_flds;c.alert({title:wpforms_builder.heads_up,content:n.replace("{provider}",""+e.text().trim()+""),icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"]}}}),o=!0}})}}),c("#wpforms-panel-providers").on("connectionRendered",function(){!0===wpf.initialSave&&(wpf.savedState=wpf.getFormState("#wpforms-builder-form"))})},ui:{bindActions:function(){a.panelHolder.on("click",".js-wpforms-builder-provider-account-add",function(e){e.preventDefault(),a.ui.account.setProvider(c(this).data("provider")),a.ui.account.add()}).on("click",".js-wpforms-builder-provider-connection-add",function(e){e.preventDefault(),a.ui.connectionAdd(c(this).data("provider"))}).on("click",".js-wpforms-builder-provider-connection-delete",function(e){var r=c(this);e.preventDefault(),a.ui.connectionDelete(r.closest(".wpforms-builder-provider").data("provider"),r.closest(".wpforms-builder-provider-connection"))}),a.panelHolder.on("click",".js-wpforms-builder-provider-connection-fields-add",function(e){e.preventDefault();var r=c(this).parents(".wpforms-builder-provider-connection-fields-table"),n=r.find("tr").last().clone(!0),o=parseInt(/\[(\d+)\]/g.exec(n.find(".wpforms-builder-provider-connection-field-name").attr("name"))[1],10)+1;n.find(".wpforms-builder-provider-connection-field-name").attr("name",n.find(".wpforms-builder-provider-connection-field-name").attr("name").replace(/\[fields_meta\]\[(\d+)\]/g,"[fields_meta]["+o+"]")).val(""),n.find(".wpforms-builder-provider-connection-field-value").attr("name",n.find(".wpforms-builder-provider-connection-field-value").attr("name").replace(/\[fields_meta\]\[(\d+)\]/g,"[fields_meta]["+o+"]")).val(""),n.find(".js-wpforms-builder-provider-connection-fields-delete").removeClass("hidden"),r.find("tbody").append(n.get(0))}).on("click",".js-wpforms-builder-provider-connection-fields-delete",function(e){e.preventDefault(),c(this).parents(".wpforms-builder-provider-connection-fields-table tr").remove()}),c("#wpforms-panel-providers").on("connectionRendered",function(e,r,n){wpf.initTooltips()})},connectionAdd:function(n){c.confirm({title:!1,content:wpforms_builder_providers.prompt_connection.replace(/%type%/g,"connection")+'

'+wpforms_builder_providers.error_name+"

",backgroundDismiss:!1,closeIcon:!1,icon:"fa fa-info-circle",type:"blue",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){var e=this.$content.find("#wpforms-builder-provider-connection-name").val().trim(),r=this.$content.find(".error");if(""===e)return r.show(),!1;a.getProviderHolder(n).trigger("connectionCreate",[e])}},cancel:{text:wpforms_builder.cancel}}})},connectionDelete:function(e,r){c.confirm({title:!1,content:wpforms_builder_providers.confirm_connection,icon:"fa fa-exclamation-circle",type:"orange",buttons:{confirm:{text:wpforms_builder.ok,btnClass:"btn-confirm",keys:["enter"],action:function(){a.getProviderHolder(e).trigger("connectionDelete",[r]),r.fadeOut("fast",function(){c(this).remove(),a.getProviderHolder(e).trigger("connectionDeleted",[r])})}},cancel:{text:wpforms_builder.cancel}}})},account:{provider:"",submitHandlers:[],setProvider:function(e){this.provider=e},add:function(){var o=this;c.confirm({title:!1,smoothContent:!0,content:function(){var r=this;return a.ajax.request(o.provider,{data:{task:"account_template_get"}}).done(function(e){e.success&&(e.data.title.length&&r.setTitle(e.data.title),e.data.content.length&&r.setContent(e.data.content),e.data.type.length&&r.setType(e.data.type),a.getProviderHolder(o.provider).trigger("accountAddModal.content.done",[r,o.provider,e]))}).fail(function(){a.getProviderHolder(o.provider).trigger("accountAddModal.content.fail",[r,o.provider])}).always(function(){a.getProviderHolder(o.provider).trigger("accountAddModal.content.always",[r,o.provider])})},contentLoaded:function(e,r,n){this.buttons.add.enable(),this.buttons.cancel.enable(),a.getProviderHolder(o.provider).trigger("accountAddModal.contentLoaded",[this])},onOpenBefore:function(){this.buttons.add.disable(),this.buttons.cancel.disable(),this.$body.addClass("wpforms-providers-account-add-modal"),a.getProviderHolder(o.provider).trigger("accountAddModal.onOpenBefore",[this])},onClose:function(){!0===a.ui.account.isConfigured(o.provider)&&a.ui.connectionAdd(o.provider)},icon:"fa fa-info-circle",type:"blue",buttons:{add:{text:wpforms_builder.provider_add_new_acc_btn,btnClass:"btn-confirm",keys:["enter"],action:function(){if(a.getProviderHolder(o.provider).trigger("accountAddModal.buttons.add.action.before",[this]),!_.isEmpty(o.provider)&&void 0!==o.submitHandlers[o.provider])return o.submitHandlers[o.provider](this)}},cancel:{text:wpforms_builder.cancel}}})},registerAddHandler:function(e,r){"string"==typeof e&&"function"==typeof r&&(this.submitHandlers[e]=r)},isConfigured:function(e){return a.getProviderHolder(e).find(".js-wpforms-builder-provider-account-add").hasClass("hidden")}}},getProviderHolder:function(e){return c("#"+e+"-provider")}};return a}(document,(window,jQuery)),WPForms.Admin.Builder.Providers.init();PKL\44!admin/challenge/challenge-core.jsnuW+A/* globals wp */ /** * WPForms Challenge function. * * @since 1.5.0 */ 'use strict'; if ( typeof WPFormsChallenge === 'undefined' ) { var WPFormsChallenge = {}; } WPFormsChallenge.core = window.WPFormsChallenge.core || ( function( document, window, $ ) { /** * Timer functions and properties. * * @since 1.5.0 * * @type {Object} */ var timer = { /** * Number of minutes to complete the challenge. * * @since 1.5.0 * * @type {number} */ initialSecondsLeft: WPFormsChallenge.admin.l10n.minutes_left * 60, /** * Load timer ID. * * @since 1.5.0 * * @returns {string} ID from setInterval(). */ loadId: function() { return localStorage.getItem( 'wpformsChallengeTimerId' ); }, /** * Save timer ID. * * @since 1.5.0 * * @param {number|string} id setInterval() ID to save. */ saveId: function( id ) { localStorage.setItem( 'wpformsChallengeTimerId', id ); }, /** * Run the timer. * * @since 1.5.0 * * @param {number} secondsLeft Number of seconds left to complete the Challenge. * * @returns {string} ID from setInterval(). */ run: function( secondsLeft ) { if ( 5 === app.loadStep() ) { return; } var timerId = setInterval( function() { app.updateTimerUI( secondsLeft ); secondsLeft --; if ( 0 > secondsLeft ) { timer.saveSecondsLeft( 0 ); clearInterval( timerId ); } }, 1000 ); timer.saveId( timerId ); return timerId; }, /** * Pause the timer. * * @since 1.5.0 */ pause: function() { var timerId; var elSeconds; var secondsLeft = timer.getSecondsLeft(); if ( 0 === secondsLeft || 5 === app.loadStep() ) { return; } timerId = timer.loadId(); clearInterval( timerId ); elSeconds = $( '#wpforms-challenge-timer' ).data( 'seconds-left' ); if ( elSeconds ) { timer.saveSecondsLeft( elSeconds ); } }, /** * Resume the timer. * * @since 1.5.0 */ resume: function() { var timerId; var secondsLeft = timer.getSecondsLeft(); if ( 0 === secondsLeft || 5 === app.loadStep() ) { return; } timerId = timer.loadId(); if ( timerId ) { clearInterval( timerId ); } timer.run( secondsLeft ); }, /** * Clear all frontend saved timer data. * * @since 1.5.0 */ clear: function() { localStorage.removeItem( 'wpformsChallengeSecondsLeft' ); localStorage.removeItem( 'wpformsChallengeTimerId' ); localStorage.removeItem( 'wpformsChallengeTimerStatus' ); $( '#wpforms-challenge-timer' ).removeData( 'seconds-left' ); }, /** * Get number of seconds left to complete the Challenge. * * @since 1.5.0 * * @returns {number} Number of seconds left to complete the Challenge. */ getSecondsLeft: function() { var secondsLeft = localStorage.getItem( 'wpformsChallengeSecondsLeft' ); secondsLeft = parseInt( secondsLeft, 10 ) || 0; return secondsLeft; }, /** * Get number of seconds spent completing the Challenge. * * @since 1.5.0 * * @param {number} secondsLeft Number of seconds left to complete the Challenge. * * @returns {number} Number of seconds spent completing the Challenge. */ getSecondsSpent: function( secondsLeft ) { secondsLeft = secondsLeft || timer.getSecondsLeft(); return timer.initialSecondsLeft - secondsLeft; }, /** * Save number of seconds left to complete the Challenge. * * @since 1.5.0 * * @param {number|string} secondsLeft Number of seconds left to complete the Challenge. */ saveSecondsLeft: function( secondsLeft ) { localStorage.setItem( 'wpformsChallengeSecondsLeft', secondsLeft ); }, /** * Get 'minutes' part of timer display. * * @since 1.5.0 * * @param {number} secondsLeft Number of seconds left to complete the Challenge. * * @returns {number} 'Minutes' part of timer display. */ getMinutesFormatted: function( secondsLeft ) { secondsLeft = secondsLeft || timer.getSecondsLeft(); return Math.floor( secondsLeft / 60 ); }, /** * Get 'seconds' part of timer display. * * @since 1.5.0 * * @param {number} secondsLeft Number of seconds left to complete the Challenge. * * @returns {number} 'Seconds' part of timer display. */ getSecondsFormatted: function( secondsLeft ) { secondsLeft = secondsLeft || timer.getSecondsLeft(); return secondsLeft % 60; }, /** * Get formatted timer for display. * * @since 1.5.0 * * @param {number} secondsLeft Number of seconds left to complete the Challenge. * * @returns {string} Formatted timer for display. */ getFormatted: function( secondsLeft ) { secondsLeft = secondsLeft || timer.getSecondsLeft(); var timerMinutes = timer.getMinutesFormatted( secondsLeft ); var timerSeconds = timer.getSecondsFormatted( secondsLeft ); return timerMinutes + ( 9 < timerSeconds ? ':' : ':0' ) + timerSeconds; }, }; /** * Public functions and properties. * * @since 1.5.0 * * @type {Object} */ var app = { /** * Public timer functions and properties. * * @since 1.5.0 */ timer: timer, /** * Start the engine. * * @since 1.5.0 */ init: function() { $( document ).ready( app.ready ); $( window ).load( app.load ); }, /** * Document ready. * * @since 1.5.0 */ ready: function() { app.setup(); app.events(); }, /** * Window load. * * @since 1.5.0 */ load: function() { app.timer.run( app.timer.getSecondsLeft() ); }, /** * Initial setup. * * @since 1.5.0 */ setup: function() { var secondsLeft; var timerId = app.timer.loadId(); if ( timerId ) { clearInterval( timerId ); secondsLeft = app.timer.getSecondsLeft(); } if ( ! timerId && 0 === app.loadStep() ) { secondsLeft = app.timer.initialSecondsLeft; } app.refreshStep(); app.updateListUI(); app.updateTimerUI( secondsLeft ); }, /** * Register JS events. * * @since 1.5.0 */ events: function() { $( [ window, document ] ).blur( function() { app.timer.pause(); } ); $( [ window, document ] ).focus( function() { app.timer.resume(); } ); $( '.wpforms-challenge-cancel' ).click( function() { app.timer.pause(); app.cancelChallenge(); } ); }, /** * Get last saved step. * * @since 1.5.0 * * @returns {number} Last saved step. */ loadStep: function() { var step = localStorage.getItem( 'wpformsChallengeStep' ); step = parseInt( step, 10 ) || 0; return step; }, /** * Save Challenge step. * * @param {number|string} step Step to save. * * @returns {Object} jqXHR object from saveChallengeOption(). */ saveStep: function( step ) { localStorage.setItem( 'wpformsChallengeStep', step ); return WPFormsChallenge.admin.saveChallengeOption( { step: step } ); }, /** * Update a step with backend data.. * * @since 1.5.0 */ refreshStep: function() { var savedStep = $( '.wpforms-challenge' ).data( 'wpforms-challenge-saved-step' ); savedStep = parseInt( savedStep, 10 ) || 0; // Step saved on a backend has a priority. if ( app.loadStep() !== savedStep ) { app.saveStep( savedStep ); } }, /** * Complete Challenge step. * * @since 1.5.0 * * @param {number|string} step Step to complete. * * @returns {Object} jqXHR object from saveStep(). */ stepCompleted: function( step ) { app.updateListUI( step ); app.updateTooltipUI( step ); return app.saveStep( step ); }, /** * Initialize Challenge tooltips. * * @since 1.5.0 * * @param {number|string} step Last saved step. * @param {string} anchor Element selector to bind tooltip to. * @param {Object} args Tooltipster arguments. */ initTooltips: function( step, anchor, args ) { var $dot = $( ' ' ); var tooltipsterArgs = { content : $( '#tooltip-content' + step ), trigger : null, interactive : true, animationDuration: 0, delay : 0, theme : [ 'tooltipster-default', 'wpforms-challenge-tooltip' ], functionReady : function( instance, helper ) { $( helper.tooltip ).addClass( 'wpforms-challenge-tooltip-step' + step ); // Reposition is needed to render max-width CSS correctly. instance.reposition(); }, }; if ( typeof args === 'object' && args !== null ) { $.extend( tooltipsterArgs, args ); } $dot.insertAfter( anchor ).tooltipster( tooltipsterArgs ); }, /** * Update tooltips appearance. * * @since 1.5.0 * * @param {number|string} step Last saved step. */ updateTooltipUI: function( step ) { var nextStep; step = step || app.loadStep(); nextStep = step + 1; $( '.wpforms-challenge-dot' ).each( function( i, el ) { var $el = $( el ); var elStep = $el.data( 'wpforms-challenge-step' ); if ( elStep < nextStep ) { $el.addClass( 'wpforms-challenge-dot-completed' ); } if ( elStep > nextStep ) { $el.addClass( 'wpforms-challenge-dot-next' ); } if ( elStep === nextStep ) { $el.removeClass( 'wpforms-challenge-dot-completed wpforms-challenge-dot-next' ); } // Zero timeout is needed to properly detect $el visibility. setTimeout( function() { if ( $el.is( ':visible' ) && elStep === nextStep ) { $el.tooltipster( 'open' ); } else { $el.tooltipster( 'close' ); } }, 0 ); } ); }, /** * Update Challenge task list appearance. * * @since 1.5.0 * * @param {number|string} step Last saved step. */ updateListUI: function( step ) { step = step || app.loadStep(); $( '.wpforms-challenge-list li:lt(' + step + ')' ).addClass( 'wpforms-challenge-item-completed' ); $( '.wpforms-challenge-list li:eq(' + step + ')' ).addClass( 'wpforms-challenge-item-current' ); $( '.wpforms-challenge-bar div' ).css( 'width', ( step * 20 ) + '%' ); }, /** * Update Challenge timer appearance. * * @since 1.5.0 * * @param {number} secondsLeft Number of seconds left to complete the Challenge. */ updateTimerUI: function( secondsLeft ) { if ( ! secondsLeft || isNaN( secondsLeft ) || '0' === secondsLeft ) { secondsLeft = 0; } app.timer.saveSecondsLeft( secondsLeft ); $( '#wpforms-challenge-timer' ).text( app.timer.getFormatted( secondsLeft ) ).data( 'seconds-left', secondsLeft ); }, /** * Remove Challenge interface. * * @since 1.5.0 */ removeChallengeUI: function() { $( '.wpforms-challenge-dot' ).remove(); $( '.wpforms-challenge' ).remove(); }, /** * Clear all Challenge frontend saved data. * * @since 1.5.0 */ clearLocalStorage: function() { localStorage.removeItem( 'wpformsChallengeStep' ); app.timer.clear(); }, /** * Cancel Challenge after stating it. * * @since 1.5.0 */ cancelChallenge: function() { var optionData = { status : 'canceled', seconds_spent: app.timer.getSecondsSpent(), seconds_left : app.timer.getSecondsLeft(), feedback_sent: false, }; app.removeChallengeUI(); app.clearLocalStorage(); if ( typeof WPFormsBuilder !== 'undefined' ) { WPFormsChallenge.admin.saveChallengeOption( optionData ) .done( WPFormsBuilder.formSave ) // Save the form before reloading if we're in a WPForms Builder. .done( location.reload.bind( location ) ); // Reload the page to remove WPForms Challenge JS. } else { WPFormsChallenge.admin.saveChallengeOption( optionData ) .done( app.triggerPageSave ); // Assume we're on form embed page. } }, /** * Check if we're in Gutenberg editor. * * @since 1.5.0 * * @returns {boolean} Is Gutenberg or not. */ isGutenberg: function() { return typeof wp !== 'undefined' && wp.hasOwnProperty( 'blocks' ); }, /** * Trigger form embed page save potentially reloading it. * * @since 1.5.0 */ triggerPageSave: function() { if ( app.isGutenberg() ) { app.gutenbergPageSave(); // TODO: Find a way to reload Gutenberg editor after save. } else { $( '#post #publish' ).trigger( 'click' ); } }, /** * Save page for Gutenberg * * @since 1.5.2 */ gutenbergPageSave: function() { // use MutationObserver to wait while guttenberg create panel with Publish button var obs = { targetNode : $('.block-editor .edit-post-layout')[0], config : { childList: true }, }; obs.callback = function ( mutationsList, observer ) { var mutation; for (var i in mutationsList) { mutation = mutationsList[i]; if ( mutation.type === 'childList' ) { var $btn = $( '.block-editor .editor-post-publish-button'); if ($btn.length > 0) { $btn.trigger( 'click' ); observer.disconnect(); } } } } obs.observer = new MutationObserver( obs.callback ); obs.observer.observe( obs.targetNode, obs.config ); $( '.block-editor .edit-post-toggle-publish-panel__button').trigger( 'click' ); } }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); WPFormsChallenge.core.init(); PKL\Ni &admin/challenge/challenge-admin.min.jsnuW+A"use strict";if(void 0===WPFormsChallenge)var WPFormsChallenge={};WPFormsChallenge.admin=window.WPFormsChallenge.admin||function(n,o){var l={l10n:wpforms_challenge_admin,init:function(){o(n).ready(l.ready)},ready:function(){l.events()},events:function(){o(".wpforms-challenge-skip").click(function(){l.skipChallenge()}),o(".block-timer .caret-icon").click(function(){l.toggleList(o(this))})},toggleList:function(n){var e=o(".wpforms-challenge-list-block");e.length&&n.length&&(n.hasClass("closed")?(e.show(),n.removeClass("closed")):(e.hide(),n.addClass("closed")))},skipChallenge:function(){var n={status:"skipped",seconds_spent:0,seconds_left:60*l.l10n.minutes_left};o(".wpforms-challenge").remove(),l.saveChallengeOption(n).done(location.reload.bind(location))},saveChallengeOption:function(n){var e={action:"wpforms_challenge_save_option",option_data:n,_wpnonce:l.l10n.nonce};return o.post(ajaxurl,e,function(n){n.success||console.error("Error saving WPForms Challenge option.")})}};return l}(document,(window,jQuery)),WPFormsChallenge.admin.init();PKL\= &admin/challenge/challenge-embed.min.jsnuW+A"use strict";if(void 0===WPFormsChallenge)var WPFormsChallenge={};WPFormsChallenge.embed=window.WPFormsChallenge.embed||function(e,o,n){var t={init:function(){n(e).ready(t.ready),n(o).load(t.load)},ready:function(){t.setup(),t.events()},load:function(){"undefined"!=typeof tinymce&&null!==tinymce.activeEditor&&(tinymce.dom.Event.bind(tinymce.activeEditor.getWin(),"blur",function(){WPFormsChallenge.core.timer.pause()}),tinymce.dom.Event.bind(tinymce.activeEditor.getWin(),"focus",function(){WPFormsChallenge.core.timer.resume()})),WPFormsChallenge.core.isGutenberg()?WPFormsChallenge.core.initTooltips(5,".block-editor .components-notice-list",{side:"bottom"}):WPFormsChallenge.core.initTooltips(5,".wpforms-insert-form-button",{side:"right"}),WPFormsChallenge.core.updateTooltipUI()},setup:function(){5===WPFormsChallenge.core.loadStep()&&t.showPopup(),n(".wpforms-challenge").show()},events:function(){n(".wpforms-challenge-step5-done").click(function(){WPFormsChallenge.core.timer.pause(),WPFormsChallenge.core.stepCompleted(5),t.showPopup()}),n(".wpforms-challenge-popup-close").click(function(){t.completeChallenge()}),n(".wpforms-challenge-popup-rate-btn").click(function(){t.completeChallenge()}),n("#wpforms-challenge-contact-form").submit(function(e){e.preventDefault(),t.submitContactForm().done(t.completeChallenge)})},showPopup:function(){var e=WPFormsChallenge.core.timer.getSecondsLeft();if(n(".wpforms-challenge-popup-container").show(),0 0 ) { WPFormsChallenge.admin.saveChallengeOption( { form_id: formId } ); } } ); }, /** * Save the second step before a template is selected. * * @since 1.5.0 * * @param {string} el Element selector. * @param {Object} e Event. */ builderTemplateSelect: function( el, e ) { var step = WPFormsChallenge.core.loadStep(); if ( 0 === step || 1 === step ) { WPFormsChallenge.core.stepCompleted( 2 ) .done( WPFormsBuilder.templateSelect.bind( null, el, e ) ); return; } WPFormsBuilder.templateSelect( el, e ); }, /** * Save the form and redirect to form embed page. * * @since 1.5.0 */ saveFormAndRedirect: function() { WPFormsBuilder.formSave().success( app.embedPageRedirect ); }, /** * Redirect to form embed page. * * @since 1.5.0 * * @param {Object} formSaveResponse AJAX response from a form saving method. */ embedPageRedirect: function( formSaveResponse ) { // Do not redirect if the form wasn't saved correctly. if ( ! formSaveResponse.success ) { return; } var data = { action : 'wpforms_challenge_embed_page_url', _wpnonce: WPFormsChallenge.admin.l10n.nonce, }; $.post( ajaxurl, data, function( response ) { if ( response.success ) { window.location = response.data; } } ); }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); // Initialize. WPFormsChallenge.builder.init(); PKL\ȹ MM"admin/challenge/challenge-embed.jsnuW+A/* globals ajaxurl, tinymce */ /** * WPForms Challenge function. * * @since 1.5.0 */ 'use strict'; if ( typeof WPFormsChallenge === 'undefined' ) { var WPFormsChallenge = {}; } WPFormsChallenge.embed = window.WPFormsChallenge.embed || ( function( document, window, $ ) { /** * Public functions and properties. * * @since 1.5.0 * * @type {Object} */ var app = { /** * Start the engine. * * @since 1.5.0 */ init: function() { $( document ).ready( app.ready ); $( window ).load( app.load ); }, /** * Document ready. * * @since 1.5.0 */ ready: function() { app.setup(); app.events(); }, /** * Window load. * * @since 1.5.0 */ load: function() { // TinyMCE's iframe is treated like a separate window and needs its own 'blur' and 'focus' events. if ( typeof tinymce !== 'undefined' && tinymce.activeEditor !== null ) { tinymce.dom.Event.bind( tinymce.activeEditor.getWin(), 'blur', function() { WPFormsChallenge.core.timer.pause(); } ); tinymce.dom.Event.bind( tinymce.activeEditor.getWin(), 'focus', function() { WPFormsChallenge.core.timer.resume(); } ); } if ( WPFormsChallenge.core.isGutenberg() ) { WPFormsChallenge.core.initTooltips( 5, '.block-editor .components-notice-list', { side: 'bottom' } ); } else { WPFormsChallenge.core.initTooltips( 5, '.wpforms-insert-form-button', { side: 'right' } ); } WPFormsChallenge.core.updateTooltipUI(); }, /** * Initial setup. * * @since 1.5.0 */ setup: function() { if ( 5 === WPFormsChallenge.core.loadStep() ) { app.showPopup(); } $( '.wpforms-challenge' ).show(); }, /** * Register JS events. * * @since 1.5.0 */ events: function() { $( '.wpforms-challenge-step5-done' ).click( function() { WPFormsChallenge.core.timer.pause(); WPFormsChallenge.core.stepCompleted( 5 ); app.showPopup(); } ); $( '.wpforms-challenge-popup-close' ).click( function() { app.completeChallenge(); } ); $( '.wpforms-challenge-popup-rate-btn' ).click( function() { app.completeChallenge(); } ); $( '#wpforms-challenge-contact-form' ).submit( function( e ) { e.preventDefault(); app.submitContactForm() .done( app.completeChallenge ); } ); }, /** * Show either 'Congratulations' or 'Contact Us' popup. * * @since 1.5.0 */ showPopup: function() { var secondsLeft = WPFormsChallenge.core.timer.getSecondsLeft(); $( '.wpforms-challenge-popup-container' ).show(); if ( 0 < secondsLeft ) { var secondsSpent = WPFormsChallenge.core.timer.getSecondsSpent( secondsLeft ); $( '#wpforms-challenge-congrats-minutes' ) .text( WPFormsChallenge.core.timer.getMinutesFormatted( secondsSpent ) ); $( '#wpforms-challenge-congrats-seconds' ) .text( WPFormsChallenge.core.timer.getSecondsFormatted( secondsSpent ) ); $( '#wpforms-challenge-congrats-popup' ).show(); } else { $( '#wpforms-challenge-contact-popup' ).show(); } }, /** * Hide the popoup. * * @since 1.5.0 */ hidePopup: function() { $( '.wpforms-challenge-popup-container' ).hide(); $( '.wpforms-challenge-popup' ).hide(); }, /** * Complete Challenge. * * @since 1.5.0 */ completeChallenge: function() { var optionData = { status : 'completed', seconds_spent: WPFormsChallenge.core.timer.getSecondsSpent(), seconds_left : WPFormsChallenge.core.timer.getSecondsLeft(), }; app.hidePopup(); WPFormsChallenge.core.removeChallengeUI(); WPFormsChallenge.core.clearLocalStorage(); WPFormsChallenge.admin.saveChallengeOption( optionData ) .done( WPFormsChallenge.core.triggerPageSave ); // Save and reload the page to remove WPForms Challenge JS. }, /** * Register JS events. * * @since 1.5.0 * * @returns {Object} jqXHR object from AJAX call. */ submitContactForm: function() { var $form = $( '#wpforms-challenge-contact-form' ); var data = { action : 'wpforms_challenge_send_contact_form', _wpnonce : WPFormsChallenge.admin.l10n.nonce, contact_data: { message : $form.find( '.wpforms-challenge-contact-message' ).val(), contact_me: $form.find( '.wpforms-challenge-contact-permission' ).prop( 'checked' ), }, }; return $.post( ajaxurl, data, function( response ) { if ( ! response.success ) { console.error( 'Error sending WPForms Challenge Contact Form.' ); } } ); }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); // Initialize. WPFormsChallenge.embed.init(); PKL\;L "admin/challenge/challenge-admin.jsnuW+A/* globals wpforms_challenge_admin, ajaxurl */ /** * WPForms Challenge Admin function. * * @since 1.5.0 */ 'use strict'; if ( typeof WPFormsChallenge === 'undefined' ) { var WPFormsChallenge = {}; } WPFormsChallenge.admin = window.WPFormsChallenge.admin || ( function( document, window, $ ) { /** * Public functions and properties. * * @since 1.5.0 * * @type {Object} */ var app = { l10n: wpforms_challenge_admin, /** * Start the engine. * * @since 1.5.0 */ init: function() { $( document ).ready( app.ready ); }, /** * Document ready. * * @since 1.5.0 */ ready: function() { app.events(); }, /** * Register JS events. * * @since 1.5.0 */ events: function() { $( '.wpforms-challenge-skip' ).click( function() { app.skipChallenge(); } ); $( '.block-timer .caret-icon' ).click( function() { app.toggleList( $( this ) ); } ); }, /** * Register JS events. * * @since 1.5.0 * * @param {Object} $caretIcon Caret icon jQuery element. */ toggleList: function( $caretIcon ) { var $listBlock = $( '.wpforms-challenge-list-block' ); if ( ! $listBlock.length || ! $caretIcon.length ) { return; } if ( $caretIcon.hasClass( 'closed' ) ) { $listBlock.show(); $caretIcon.removeClass( 'closed' ); } else { $listBlock.hide(); $caretIcon.addClass( 'closed' ); } }, /** * Skip the Challenge without starting it. * * @since 1.5.0 */ skipChallenge: function() { var optionData = { status : 'skipped', seconds_spent: 0, seconds_left : app.l10n.minutes_left * 60, }; $( '.wpforms-challenge' ).remove(); app.saveChallengeOption( optionData ) .done( location.reload.bind( location ) ); // Reload the page to remove WPForms Challenge JS. }, /** * Set Challenge parameter(s) to Challenge option. * * @since 1.5.0 * * @param {Object} optionData Query using option schema keys. */ saveChallengeOption: function( optionData ) { var data = { action : 'wpforms_challenge_save_option', option_data: optionData, _wpnonce : app.l10n.nonce, }; return $.post( ajaxurl, data, function( response ) { if ( ! response.success ) { console.error( 'Error saving WPForms Challenge option.' ); } } ); }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); WPFormsChallenge.admin.init(); PKL\w"%admin/challenge/challenge-core.min.jsnuW+A"use strict";if(void 0===WPFormsChallenge)var WPFormsChallenge={};WPFormsChallenge.core=window.WPFormsChallenge.core||function(e,t,l){var n={initialSecondsLeft:60*WPFormsChallenge.admin.l10n.minutes_left,loadId:function(){return localStorage.getItem("wpformsChallengeTimerId")},saveId:function(e){localStorage.setItem("wpformsChallengeTimerId",e)},run:function(e){if(5!==o.loadStep()){var t=setInterval(function(){o.updateTimerUI(e),--e<0&&(n.saveSecondsLeft(0),clearInterval(t))},1e3);return n.saveId(t),t}},pause:function(){var e,t;0!==n.getSecondsLeft()&&5!==o.loadStep()&&(e=n.loadId(),clearInterval(e),(t=l("#wpforms-challenge-timer").data("seconds-left"))&&n.saveSecondsLeft(t))},resume:function(){var e,t=n.getSecondsLeft();0!==t&&5!==o.loadStep()&&((e=n.loadId())&&clearInterval(e),n.run(t))},clear:function(){localStorage.removeItem("wpformsChallengeSecondsLeft"),localStorage.removeItem("wpformsChallengeTimerId"),localStorage.removeItem("wpformsChallengeTimerStatus"),l("#wpforms-challenge-timer").removeData("seconds-left")},getSecondsLeft:function(){var e=localStorage.getItem("wpformsChallengeSecondsLeft");return e=parseInt(e,10)||0},getSecondsSpent:function(e){return e=e||n.getSecondsLeft(),n.initialSecondsLeft-e},saveSecondsLeft:function(e){localStorage.setItem("wpformsChallengeSecondsLeft",e)},getMinutesFormatted:function(e){return e=e||n.getSecondsLeft(),Math.floor(e/60)},getSecondsFormatted:function(e){return(e=e||n.getSecondsLeft())%60},getFormatted:function(e){e=e||n.getSecondsLeft();var t=n.getMinutesFormatted(e),o=n.getSecondsFormatted(e);return t+(9 '),a={content:l("#tooltip-content"+o),trigger:null,interactive:!0,animationDuration:0,delay:0,theme:["tooltipster-default","wpforms-challenge-tooltip"],functionReady:function(e,t){l(t.tooltip).addClass("wpforms-challenge-tooltip-step"+o),e.reposition()}};"object"==typeof t&&null!==t&&l.extend(a,t),n.insertAfter(e).tooltipster(a)},updateTooltipUI:function(e){var a;e=e||o.loadStep(),a=e+1,l(".wpforms-challenge-dot").each(function(e,t){var o=l(t),n=o.data("wpforms-challenge-step");n ( { value: value.ID, label: value.post_title } ) ); let jsx; formOptions.unshift( { value: '', label: wpforms_gutenberg_form_selector.i18n.form_select } ); function selectForm( value ) { setAttributes( { formId: value } ); } function toggleDisplayTitle( value ) { setAttributes( { displayTitle: value } ); } function toggleDisplayDesc( value ) { setAttributes( { displayDesc: value } ); } jsx = [

{ wpforms_gutenberg_form_selector.i18n.panel_notice_head }
{ wpforms_gutenberg_form_selector.i18n.panel_notice_text }
{ wpforms_gutenberg_form_selector.i18n.panel_notice_link }

]; if ( formId ) { jsx.push( ); } else { jsx.push(

{ wpforms_gutenberg_form_selector.i18n.title }

); } return jsx; }, save() { return null; }, } ); PKL\TMM#admin/gutenberg/formselector.min.jsnuW+A!function n(l,s,c){function m(t,e){if(!s[t]){if(!l[t]){var r="function"==typeof require&&require;if(!e&&r)return r(t,!0);if(i)return i(t,!0);throw new Error("Cannot find module '"+t+"'")}var o=s[t]={exports:{}};l[t][0].call(o.exports,function(e){var r=l[t][1][e];return m(r||e)},o,o.exports,n,l,s,c)}return s[t].exports}for(var i="function"==typeof require&&require,e=0;e'+e+"

")}},stepInstallPluginStatus:function(){var t={action:"wpforms_analytics_page_check_plugin_status",nonce:wpforms_admin.nonce};i.post(wpforms_admin.ajax_url,t).done(r.stepInstallPluginStatusDone)},stepInstallPluginStatusDone:function(t){if(t.success)if(o.$stepSetup.removeClass("grey"),o.$stepSetupBtn=o.$stepSetup.find("button"),0admin/pages/analytics.jsnuW+A/* global wpforms_pluginlanding, wpforms_admin */ /** * Analytics Sub-page. * * @since 1.5.7 */ 'use strict'; var WPFormsPagesAnalytics = window.WPFormsPagesAnalytics || ( function( document, window, $ ) { /** * Elements. * * @since 1.5.7 * * @type {object} */ var el = {}; /** * Public functions and properties. * * @since 1.5.7 * * @type {object} */ var app = { /** * Start the engine. * * @since 1.5.7 */ init: function() { $( document ).ready( app.ready ); }, /** * Document ready. * * @since 1.5.7 */ ready: function() { app.initVars(); app.events(); }, /** * Init variables. * * @since 1.5.7 */ initVars: function() { el = { $stepInstall: $( 'section.step-install' ), $stepInstallNum: $( 'section.step-install .num img' ), $stepSetup: $( 'section.step-setup' ), $stepSetupNum: $( 'section.step-setup .num img' ), $stepAddon: $( 'section.step-addon' ), $stepAddonNum: $( 'section.step-addon .num img' ), }; }, /** * Register JS events. * * @since 1.5.7 */ events: function() { // Step 'Install' button click. el.$stepInstall.on( 'click', 'button', app.stepInstallClick ); // Step 'Setup' button click. el.$stepSetup.on( 'click', 'button', app.gotoURL ); // Step 'Addon' button click. el.$stepAddon.on( 'click', 'button', app.gotoURL ); }, /** * Step 'Install' button click. * * @since 1.5.7 * */ stepInstallClick: function() { var $btn = $( this ), action = $btn.attr( 'data-action' ), plugin = $btn.attr( 'data-plugin' ), ajaxAction = ''; if ( $btn.hasClass( 'disabled' ) ) { return; } switch ( action ) { case 'activate': ajaxAction = 'wpforms_activate_addon'; $btn.text( wpforms_pluginlanding.activating ); break; case 'install': ajaxAction = 'wpforms_install_addon'; $btn.text( wpforms_pluginlanding.installing ); break; case 'goto-url': window.location.href = $btn.attr( 'data-url' ); return; default: return; } $btn.addClass( 'disabled' ); app.showSpinner( el.$stepInstallNum ); var data = { action: ajaxAction, nonce : wpforms_admin.nonce, plugin: plugin, type : 'plugin', }; $.post( wpforms_admin.ajax_url, data ) .done( function( res ) { app.stepInstallDone( res, $btn, action ); } ) .always( function() { app.hideSpinner( el.$stepInstallNum ); } ); }, /** * Done part of the step 'Install'. * * @since 1.5.7 * * @param {object} res Result of $.post() query. * @param {jQuery} $btn Button. * @param {string} action Action (for more info look at the app.stepInstallClick() function). */ stepInstallDone: function( res, $btn, action ) { if ( res.success ) { el.$stepInstallNum.attr( 'src', el.$stepInstallNum.attr( 'src' ).replace( 'step-1.', 'step-complete.' ) ); $btn.addClass( 'grey' ).text( wpforms_pluginlanding.activated ); app.stepInstallPluginStatus(); } else { var url = 'install' === action ? wpforms_pluginlanding.mi_manual_install_url : wpforms_pluginlanding.mi_manual_activate_url, msg = 'install' === action ? wpforms_pluginlanding.error_could_not_install : wpforms_pluginlanding.error_could_not_activate, btn = 'install' === action ? wpforms_pluginlanding.download_now : wpforms_pluginlanding.plugins_page; $btn.removeClass( 'grey disabled' ).text( btn ).attr( 'data-action', 'goto-url' ).attr( 'data-url', url ); $btn.after( '

' + msg + '

' ); } }, /** * Callback for step 'Install' completion. * * @since 1.5.7 */ stepInstallPluginStatus: function() { var data = { action: 'wpforms_analytics_page_check_plugin_status', nonce : wpforms_admin.nonce, }; $.post( wpforms_admin.ajax_url, data ).done( app.stepInstallPluginStatusDone ); }, /** * Done part of the callback for step 'Install' completion. * * @since 1.5.7 * * @param {object} res Result of $.post() query. */ stepInstallPluginStatusDone: function( res ) { if ( ! res.success ) { return; } el.$stepSetup.removeClass( 'grey' ); el.$stepSetupBtn = el.$stepSetup.find( 'button' ); if ( res.data.setup_status > 0 ) { el.$stepSetupNum.attr( 'src', el.$stepSetupNum.attr( 'src' ).replace( 'step-2.svg', 'step-complete.svg' ) ); el.$stepAddon.removeClass( 'grey' ); el.$stepAddon.find( 'button' ).attr( 'data-url', res.data.step3_button_url ).removeClass( 'grey' ).removeClass( 'disabled' ); if ( res.data.license_level === 'pro' ) { var buttonText = res.data.addon_installed > 0 ? wpforms_pluginlanding.activate_now : wpforms_pluginlanding.install_now; el.$stepAddon.find( 'button' ).text( buttonText ); } } else { el.$stepSetupBtn.removeClass( 'grey' ).removeClass( 'disabled' ); } }, /** * Go to URL by click on the button. * * @since 1.5.7 */ gotoURL: function() { var $btn = $( this ); if ( $btn.hasClass( 'disabled' ) ) { return; } window.location.href = $btn.attr( 'data-url' ); }, /** * Display spinner. * * @since 1.5.7 * * @param {jQuery} $el Section number image jQuery object. */ showSpinner: function( $el ) { $el.siblings( '.loader' ).removeClass( 'hidden' ); }, /** * Hide spinner. * * @since 1.5.7 * * @param {jQuery} $el Section number image jQuery object. */ hideSpinner: function( $el ) { $el.siblings( '.loader' ).addClass( 'hidden' ); }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); // Initialize. WPFormsPagesAnalytics.init(); PKL\֖[OOadmin/pages/smtp.jsnuW+A/* global wpforms_pluginlanding, wpforms_admin */ /** * SMTP Sub-page. * * @since 1.5.7 */ 'use strict'; var WPFormsPagesSMTP = window.WPFormsPagesSMTP || ( function( document, window, $ ) { /** * Elements. * * @since 1.5.7 * * @type {object} */ var el = {}; /** * Public functions and properties. * * @since 1.5.7 * * @type {object} */ var app = { /** * Start the engine. * * @since 1.5.7 */ init: function() { $( document ).ready( app.ready ); }, /** * Document ready. * * @since 1.5.7 */ ready: function() { app.initVars(); app.events(); }, /** * Init variables. * * @since 1.5.7 */ initVars: function() { el = { $stepInstall: $( 'section.step-install' ), $stepInstallNum: $( 'section.step-install .num img' ), $stepSetup: $( 'section.step-setup' ), $stepSetupNum: $( 'section.step-setup .num img' ), }; }, /** * Register JS events. * * @since 1.5.7 */ events: function() { // Step 'Install' button click. el.$stepInstall.on( 'click', 'button', app.stepInstallClick ); // Step 'Setup' button click. el.$stepSetup.on( 'click', 'button', app.gotoURL ); }, /** * Step 'Install' button click. * * @since 1.5.7 */ stepInstallClick: function() { var $btn = $( this ), action = $btn.attr( 'data-action' ), plugin = $btn.attr( 'data-plugin' ), ajaxAction = ''; if ( $btn.hasClass( 'disabled' ) ) { return; } switch ( action ) { case 'activate': ajaxAction = 'wpforms_activate_addon'; $btn.text( wpforms_pluginlanding.activating ); break; case 'install': ajaxAction = 'wpforms_install_addon'; $btn.text( wpforms_pluginlanding.installing ); break; case 'goto-url': window.location.href = $btn.attr( 'data-url' ); return; default: return; } $btn.addClass( 'disabled' ); app.showSpinner( el.$stepInstallNum ); var data = { action: ajaxAction, nonce : wpforms_admin.nonce, plugin: plugin, type : 'plugin', }; $.post( wpforms_admin.ajax_url, data ) .done( function( res ) { app.stepInstallDone( res, $btn, action ); } ) .always( function() { app.hideSpinner( el.$stepInstallNum ); } ); }, /** * Done part of the 'Install' step. * * @since 1.5.7 * * @param {object} res Result of $.post() query. * @param {jQuery} $btn Button. * @param {string} action Action (for more info look at the app.stepInstallClick() function). */ stepInstallDone: function( res, $btn, action ) { if ( res.success ) { el.$stepInstallNum.attr( 'src', el.$stepInstallNum.attr( 'src' ).replace( 'step-1.', 'step-complete.' ) ); $btn.addClass( 'grey' ).text( wpforms_pluginlanding.activated ); app.stepInstallPluginStatus(); } else { var url = 'install' === action ? wpforms_pluginlanding.manual_install_url : wpforms_pluginlanding.manual_activate_url, msg = 'install' === action ? wpforms_pluginlanding.error_could_not_install : wpforms_pluginlanding.error_could_not_activate, btn = 'install' === action ? wpforms_pluginlanding.download_now : wpforms_pluginlanding.plugins_page; $btn.removeClass( 'grey disabled' ).text( btn ).attr( 'data-action', 'goto-url' ).attr( 'data-url', url ); $btn.after( '

' + msg + '

' ); } }, /** * Callback for step 'Install' completion. * * @since 1.5.7 * */ stepInstallPluginStatus: function() { var data = { action: 'wpforms_smtp_page_check_plugin_status', nonce : wpforms_admin.nonce, }; $.post( wpforms_admin.ajax_url, data ) .done( app.stepInstallPluginStatusDone ); }, /** * Done part of the callback for step 'Install' completion. * * @since 1.5.7 * * @param {object} res Result of $.post() query. */ stepInstallPluginStatusDone: function( res ) { if ( ! res.success ) { return; } el.$stepSetup.removeClass( 'grey' ); el.$stepSetupBtn = el.$stepSetup.find( 'button' ); el.$stepSetupBtn.removeClass( 'grey disabled' ); if ( res.data.setup_status > 0 ) { el.$stepSetupNum.attr( 'src', el.$stepSetupNum.attr( 'src' ).replace( 'step-2.svg', 'step-complete.svg' ) ); el.$stepSetupBtn.text( wpforms_pluginlanding.smtp_settings_button ); } }, /** * Go to URL by click on the button. * * @since 1.5.7 */ gotoURL: function() { var $btn = $( this ); if ( $btn.hasClass( 'disabled' ) ) { return; } window.location.href = $btn.attr( 'data-url' ); }, /** * Display spinner. * * @since 1.5.7 * * @param {jQuery} $el Section number image jQuery object. */ showSpinner: function( $el ) { $el.siblings( '.loader' ).removeClass( 'hidden' ); }, /** * Hide spinner. * * @since 1.5.7 * * @param {jQuery} $el Section number image jQuery object. */ hideSpinner: function( $el ) { $el.siblings( '.loader' ).addClass( 'hidden' ); }, }; // Provide access to public functions/properties. return app; }( document, window, jQuery ) ); // Initialize. WPFormsPagesSMTP.init(); PKL\ P; ; admin/pages/smtp.min.jsnuW+A"use strict";var WPFormsPagesSMTP=window.WPFormsPagesSMTP||function(t,l,i){var o={},p={init:function(){i(t).ready(p.ready)},ready:function(){p.initVars(),p.events()},initVars:function(){o={$stepInstall:i("section.step-install"),$stepInstallNum:i("section.step-install .num img"),$stepSetup:i("section.step-setup"),$stepSetupNum:i("section.step-setup .num img")}},events:function(){o.$stepInstall.on("click","button",p.stepInstallClick),o.$stepSetup.on("click","button",p.gotoURL)},stepInstallClick:function(){var n=i(this),s=n.attr("data-action"),t=n.attr("data-plugin"),a="";if(!n.hasClass("disabled")){switch(s){case"activate":a="wpforms_activate_addon",n.text(wpforms_pluginlanding.activating);break;case"install":a="wpforms_install_addon",n.text(wpforms_pluginlanding.installing);break;case"goto-url":return void(l.location.href=n.attr("data-url"));default:return}n.addClass("disabled"),p.showSpinner(o.$stepInstallNum);var e={action:a,nonce:wpforms_admin.nonce,plugin:t,type:"plugin"};i.post(wpforms_admin.ajax_url,e).done(function(t){p.stepInstallDone(t,n,s)}).always(function(){p.hideSpinner(o.$stepInstallNum)})}},stepInstallDone:function(t,n,s){if(t.success)o.$stepInstallNum.attr("src",o.$stepInstallNum.attr("src").replace("step-1.","step-complete.")),n.addClass("grey").text(wpforms_pluginlanding.activated),p.stepInstallPluginStatus();else{var a="install"===s?wpforms_pluginlanding.manual_install_url:wpforms_pluginlanding.manual_activate_url,e="install"===s?wpforms_pluginlanding.error_could_not_install:wpforms_pluginlanding.error_could_not_activate,l="install"===s?wpforms_pluginlanding.download_now:wpforms_pluginlanding.plugins_page;n.removeClass("grey disabled").text(l).attr("data-action","goto-url").attr("data-url",a),n.after('

'+e+"

")}},stepInstallPluginStatus:function(){var t={action:"wpforms_smtp_page_check_plugin_status",nonce:wpforms_admin.nonce};i.post(wpforms_admin.ajax_url,t).done(p.stepInstallPluginStatusDone)},stepInstallPluginStatusDone:function(t){t.success&&(o.$stepSetup.removeClass("grey"),o.$stepSetupBtn=o.$stepSetup.find("button"),o.$stepSetupBtn.removeClass("grey disabled"),0{:admin/pages/analytics.jsnuW+APKL\֖[OOXQadmin/pages/smtp.jsnuW+APKL\ P; ; eadmin/pages/smtp.min.jsnuW+APKlp