/
var
/
www
/
barefootlaw.org
/
wp-content
/
plugins
/
pods
/
ui
/
js
/
Upload File
HOME
/*@global PodsI18n */ ( function ( $ ) { var pods_changed = false, pods_form_field_names = [], methods = { validate : function () { var $containers = $( 'form.pods-submittable, .pods-validation' ), form_fields = 'input.pods-validate, select.pods-validate, textarea.pods-validate'; // handle required $containers.on( 'change keyup blur', form_fields.replace( ',', '.pods-validate-required,' ) + '.pods-validate-required', function () { var $el = $( this ); if ( !$el.is( ':visible' ) ) return; var label = ''; if ( 'undefined' != typeof $el.data( 'label' ) ) { label = $el.data( 'label' ); } else if ( 0 < $el.parent().find( 'label' ).length ) { label = $el.parent().find( 'label' ).html().trim(); } else { label = $el.prop( 'name' ).trim().replace( '_', ' ' ); } // TinyMCE support if ( 'object' == typeof tinyMCE && -1 < $el.prop( 'class' ).indexOf( 'pods-ui-field-tinymce' ) ) tinyMCE.triggerSave(); var valid_field = true; if ( $el.is( 'input[type=checkbox]' ) && !( $el.is( ':checked' ) ) ) { valid_field = false; // extra check for relationship checkboxes to see if siblings are checked if ( $el.hasClass( 'pods-form-ui-field-type-pick' ) ) { $el.closest( '.pods-pick-checkbox' ).find( 'input[type=checkbox]' ).each( function () { if ( $( this ).is( ':checked' ) ) { valid_field = true; } } ) } } else if ( '' === $el.val() ) valid_field = false; if ( !valid_field ) { if ( -1 == jQuery.inArray( $el.prop( 'name' ), pods_form_field_names ) ) { $el.closest( '.pods-field-input' ).find( '.pods-validate-error-message' ).remove(); if ( $el.closest( '.pods-field-input > td' ).length > 0 ) { $el.closest( '.pods-field-input > td' ).last().prepend( '<div class="pods-validate-error-message">' + PodsI18n.__( '%s is required.' ).replace( '%s', label.replace( /( <([^>]+ )> )/ig, '' ) ) + '</div>' ); } else { $el.closest( '.pods-field-input' ).append( '<div class="pods-validate-error-message">' + PodsI18n.__( '%s is required.' ).replace( '%s', label.replace( /( <([^>]+ )> )/ig, '' ) ) + '</div>' ); } $el.addClass( 'pods-validate-error' ); pods_form_field_names.push( $el.prop( 'name' ) ); } } else { $el.closest( '.pods-field-input' ).find( '.pods-validate-error-message' ).remove(); $el.removeClass( 'pods-validate-error' ); if ( -1 < jQuery.inArray( $el.prop( 'name' ), pods_form_field_names ) ) pods_form_field_names.splice( jQuery.inArray( $el.prop( 'name' ), pods_form_field_names ), 1 ); } } ); }, submit_meta : function () { var $submitbutton; // Verify required fields in WordPress posts with CPT $( 'form.pods-submittable' ).on( 'submit', function ( e ) { var $submittable = $( this ); pods_changed = false; /* e.preventDefault(); */ var postdata = {}; var field_data = {}; var valid_form = true; var field_id = 0, field_index = 0; // See if we have any instances of tinyMCE and save them if ( 'undefined' != typeof tinyMCE ) tinyMCE.triggerSave(); $submittable.find( '.pods-submittable-fields' ).find( 'input, select, textarea' ).each( function () { var $el = $( this ); var field_name = $el.prop( 'name' ); if ( 'undefined' != typeof field_name && null !== field_name && '' != field_name && 0 != field_name.indexOf( 'field_data[' ) ) { var val = $el.val(); if ( $el.is( 'input[type=checkbox]' ) && !$el.is( ':checked' ) ) { if ( 1 == val ) val = 0; else return true; // This input isn't a boolean, continue the loop } else if ( $el.is( 'input[type=radio]' ) && !$el.is( ':checked' ) ) return true; // This input is not checked, continue the loop if ( $el.is( ':visible' ) && $el.hasClass( 'pods-validate pods-validate-required' ) && ( '' === $el.val() ) ) { $el.trigger( 'change' ); if ( false !== valid_form ) $el.trigger( 'focus' ); valid_form = false; } if ( null !== val ) { postdata[field_name] = val; } } } ); if ( 'undefined' != typeof pods_admin_submit_validation ) valid_form = pods_admin_submit_validation( valid_form, $submittable ); if ( false === valid_form ) { $submittable.addClass( 'invalid-form' ); // re-enable the submit button $( $submittable ).find( 'input[type=submit], button[type=submit]' ).each( function () { var $submitbutton = $( this ); $submitbutton.css( 'cursor', 'pointer' ); $submitbutton.prop( 'disabled', false ); $submitbutton.parent().find( '.waiting' ).fadeOut(); } ); pods_form_field_names = []; return false; } else $submittable.removeClass( 'invalid-form' ); return true; } ); }, submit : function () { var $submitbutton, id, data; // Handle submit of form and translate to AJAX $( 'form.pods-submittable' ).on( 'submit', function ( e ) { var $submittable = $( this ); const podName = $submittable.data( 'pods-pod-name' ); const itemId = $submittable.data( 'pods-item-id' ); const formCounter = $submittable.data( 'pods-form-counter' ); pods_changed = false; e.preventDefault(); pods_ajaxurl = $submittable.attr( 'action' ); pods_ajaxurl = pods_ajaxurl.replace( /\?nojs\=1/, '?pods_ajax=1' ); if ( 'undefined' != typeof ajaxurl && ( '' == pods_ajaxurl || '?pods_ajax=1' == pods_ajaxurl || document.location.href == pods_ajaxurl || document.location.href.replace( /\?nojs\=1/, '?pods_ajax=1' ) == pods_ajaxurl ) ) pods_ajaxurl = ajaxurl + '?pods_ajax=1'; if ( 'undefined' != typeof ajaxurl && $submittable.hasClass( 'pods-submittable-ajax' ) ) pods_ajaxurl = ajaxurl + '?pods_ajax=1'; var postdata = new FormData(); var field_data = {}; var valid_form = true; var field_id = 0, field_index = 0; // See if we have any instances of tinyMCE and save them if ( 'undefined' != typeof tinyMCE ) tinyMCE.triggerSave(); $submittable.find( '.pods-submittable-fields' ).find( 'input, select, textarea' ).each( function () { const $el = $( this ); const field_name = $el.prop( 'name' ); let value = $el.val(); if ( 'undefined' != typeof field_name && null !== field_name && '' != field_name && 0 != field_name.indexOf( 'field_data[' ) ) { if ( $el.is( 'input[type=checkbox]' ) && !$el.is( ':checked' ) ) { if ( $el.is( '.pods-boolean' ) || $el.is( '.pods-form-ui-field-type-boolean') ) value = 0; else return true; // This input isn't a boolean, continue the loop } else if ( $el.is( 'input[type=radio]' ) && !$el.is( ':checked' ) ) return true; // This input is not checked, continue the loop if ( $el.is( ':visible' ) && $el.hasClass( 'pods-validate pods-validate-required' ) && ( '' === value ) ) { $el.trigger( 'change' ); if ( false !== valid_form ) $el.trigger( 'focus' ); valid_form = false; } // Handle manual file uploads. if ( $el.is( 'input[type=file]' ) ) { if ( '' !== value ) { const fileValue = $el[0].files[0]; postdata.append( field_name, fileValue, fileValue.name ); } // Force the skip of the next conditional. value = null; } // Fix for FormData converting arrays into comma-separated strings. if ( null !== value ) { if ( field_name.endsWith( '[]' ) && Array.isArray( value ) ) { value.forEach( ( subvalue ) => { postdata.append( field_name, subvalue ); } ); } else { postdata.append( field_name, value ); } } } } ); // Check for valid fields from DFV next. if ( valid_form && '' !== podName && 'undefined' !== typeof podName && '' !== itemId && 'undefined' !== typeof itemId ) { const dfvFields = window.PodsDFV.getFieldValuesWithConfigs( podName, itemId, formCounter ); // @todo Replace this with a future method like window.PodsDFV.getValidationMessagesForFields( podName, itemId, formCounter ) if ( dfvFields && Object.entries( dfvFields ) ) { Object.entries( dfvFields ).forEach( ( [ fieldName, field ] ) => { // Check for required fields. let fieldRequired = field?.fieldConfig?.required ?? false; let fieldValue = field?.value ?? ''; if ( Boolean( fieldRequired ) && '0' !== fieldRequired ) { if ( '' === fieldValue || null === fieldValue || undefined === fieldValue ) { valid_form = false; } } } ); } } if ( 'undefined' != typeof pods_admin_submit_validation ) valid_form = pods_admin_submit_validation( valid_form, $submittable ); if ( false === valid_form ) { $submittable.addClass( 'invalid-form' ); // re-enable the submit button $( $submittable ).find( 'input[type=submit], button[type=submit]' ).each( function () { var $submitbutton = $( this ); $submitbutton.css( 'cursor', 'pointer' ); $submitbutton.prop( 'disabled', false ); $submitbutton.parent().find( '.waiting' ).fadeOut(); } ); pods_form_field_names = []; return false; } else $submittable.removeClass( 'invalid-form' ); pods_ajaxurl = pods_ajaxurl + '&action=' + postdata.get( 'action' ); $submitbutton = $submittable.find( 'input[type=submit], button[type=submit]' ); $.ajax( { type : 'POST', dataType : 'html', url : pods_ajaxurl, cache : false, data : postdata, contentType: false, processData: false, success : function ( d ) { // Attempt to parse what was returned as data try { data = $.parseJSON( d ); } catch ( e ) { data = undefined; } if ( -1 === d.indexOf( '<e>' ) && -1 === d.indexOf( '</e>' ) && -1 !== d ) { // Added for modal add/edit support. If we get a valid JSON object, we assume we're modal if ( 'object' === typeof data && null !== data ) { // Phone home with the data window.parent.postMessage( { type: 'PODS_MESSAGE', data: data, }, window.location.origin ); } else { id = d.match( /\d*$/, '' ); if ( 0 < id.length ) { id = parseInt( id[ 0 ] ); if ( isNaN( id ) ) { id = 0; } } else { id = 0; } if ( 'undefined' != typeof pods_admin_submit_callback ) { pods_admin_submit_callback( d, $submittable, id ); } else if ( 'undefined' != typeof $submittable.data( 'location' ) ) { document.location.href = $submittable.data( 'location' ).replace( 'X_ID_X', id ); } else { document.location.reload( true ); } } } else if ( 'undefined' != typeof $submittable.data( 'error-location' ) ) { document.location.href = $submittable.data( 'error-location' ); } else { var err_msg = d.replace( '<e>', '' ).replace( '</e>', '' ); if ( 'undefined' != typeof pods_admin_submit_error_callback ) { pods_admin_submit_error_callback( err_msg, $submittable ); } else { alert( 'Error: ' + err_msg ); if ( window.console ) console.log( err_msg ); } $submitbutton.css( 'cursor', 'pointer' ); $submitbutton.prop( 'disabled', false ); $submitbutton.parent().find( '.waiting' ).fadeOut(); var $next = $( '#pods-wizard-next' ); if ( $next.length ) { $next.css( 'cursor', 'pointer' ); $next.prop( 'disabled', false ); $next.text( $next.data( 'next' ) ); $next.show().removeClass( 'hidden' ); } } }, error : function () { var err_msg = 'Unable to process request, please try again.'; if ( 'undefined' != typeof pods_admin_submit_error_callback ) { pods_admin_submit_error_callback( err_msg, $submittable ); } else { alert( 'Error: ' + err_msg ); if ( window.console ) console.log( err_msg ); } $submitbutton.css( 'cursor', 'pointer' ); $submitbutton.prop( 'disabled', false ); $submitbutton.parent().find( '.waiting' ).fadeOut(); var $next = $( '#pods-wizard-next' ); if ( $next.length ) { $next.css( 'cursor', 'pointer' ); $next.prop( 'disabled', false ); $next.text( $next.data( 'next' ) ); $next.show().removeClass( 'hidden' ); } } } ); } )// Handle submit button and show waiting image .on( 'click', 'input[type=submit], button[type=submit]', function ( e ) { pods_changed = false; e.preventDefault(); $( 'div#message' ).slideUp( 'fast', function () { $( this ).remove(); } ); var $submitbutton = $( this ); $submitbutton.css( 'cursor', 'default' ); $submitbutton.prop( 'disabled', true ); $submitbutton.parent().find( '.waiting' ).fadeIn(); $( this ).closest( 'form.pods-submittable' ).trigger( 'submit' ); } ); // Handle submit via link and translate to AJAX $( 'form.pods-submittable a.pods-submit' ).on( 'click', function ( e ) { var $submitbutton = $( this ); e.preventDefault(); pods_ajaxurl = $submitbutton.data( 'ajaxurl' ); if ( 'undefined' != typeof pods_ajaxurl ) pods_ajaxurl = pods_ajaxurl.replace( /\?nojs\=1/, '?pods_ajax=1' ); else if ( 'undefined' != typeof ajaxurl && ( 'undefined' == typeof pods_ajaxurl || '' == pods_ajaxurl || '?pods_ajax=1' == pods_ajaxurl || document.location.href == pods_ajaxurl || document.location.href.replace( /\?nojs\=1/, '?pods_ajax=1' ) == pods_ajaxurl ) ) pods_ajaxurl = ajaxurl + '?pods_ajax=1'; var postdata = $submitbutton.data(); if ( 'undefined' != typeof $submitbutton.data( 'confirm' ) && !confirm( $submitbutton.data( 'confirm' ) ) ) return false; $( 'div#message' ).slideUp( 'fast', function () { $( this ).remove(); } ); pods_changed = false; pods_ajaxurl = pods_ajaxurl + '&action=' + postdata.action; $.ajax( { type : 'POST', dataType : 'html', url : pods_ajaxurl, cache : false, data : postdata, success : function ( d ) { if ( -1 == d.indexOf( '<e>' ) && -1 == d.indexOf( '</e>' ) && -1 != d ) { var id = d.match( /\d*$/, '' ); if ( 0 < id.length ) { id = parseInt( id[ 0 ] ); if ( isNaN( id ) ) id = 0; } else id = 0; if ( 'undefined' != typeof pods_admin_submit_callback ) pods_admin_submit_callback( d, $submittable, id ); else if ( 'undefined' != typeof $submittable.data( 'location' ) ) document.location.href = $submittable.data( 'location' ).replace( 'X_ID_X', id ); else document.location.reload( true ); } else if ( 'undefined' != typeof $submitbutton.data( 'error-location' ) ) document.location.href = $submitbutton.data( 'error-location' ); else { var err_msg = d.replace( '<e>', '' ).replace( '</e>', '' ); if ( 'undefined' != typeof pods_admin_submit_error_callback ) pods_admin_submit_error_callback( err_msg, $submittable ); else { alert( 'Error: ' + err_msg ); if ( window.console ) console.log( err_msg ); } $submitbutton.css( 'cursor', 'pointer' ); $submitbutton.prop( 'disabled', false ); $submitbutton.parent().find( '.waiting' ).fadeOut(); } }, error : function () { var err_msg = PodsI18n.__( 'Unable to process request, please try again.' ); if ( 'undefined' != typeof pods_admin_submit_error_callback ) pods_admin_submit_error_callback( err_msg, $submittable ); else { alert( 'Error: ' + err_msg ); if ( window.console ) console.log( err_msg ); } $submitbutton.css( 'cursor', 'pointer' ); $submitbutton.prop( 'disabled', false ); $submitbutton.parent().find( '.waiting' ).fadeOut(); } } ); } ); }, sluggable : function () { // Setup selector var $sluggable = $( '.pods-sluggable' ), last_slug = null; if ( 0 !== $sluggable.length ) { // Hold onto slug in-case change is cancelled if ( $sluggable.find( '.pods-slug-edit input[type=text]' )[ 0 ] ) { last_slug = $sluggable.find( '.pods-slug-edit input[type=text]' ).val(); last_slug = last_slug.replace( /<(?:.)*?>/g, '' ).replace( /([^0-9a-zA-Z\_\- ])/g, '' ); $( '.pods-slugged-lower:not(.pods-slugged[data-sluggable])' ).html( last_slug.toLowerCase() ); $( '.pods-slugged:not(.pods-slugged[data-sluggable])' ).html( last_slug.charAt( 0 ).toUpperCase() + last_slug.slice( 1 ) ); } // Handle click to edit $sluggable.on( 'click', '.pods-slug em, .pods-slug input[type=button]', function () { var $this = $( this ); $this.css( 'cursor', 'default' ); $this.prop( 'disabled', true ); $this.closest( '.pods-sluggable' ).find( '.pods-slug, .pods-slug-edit' ).toggle(); $this.closest( '.pods-sluggable' ).find( '.pods-slug-edit input[type=text]' ).trigger( 'focus' ); $this.css( 'cursor', 'pointer' ); $this.prop( 'disabled', false ); } ); // Handle slug save $sluggable.on( 'click', '.pods-slug-edit input[type=button]', function () { var $this = $( this ); $this.css( 'cursor', 'default' ); $this.prop( 'disabled', true ); last_slug = $this.parent().find( 'input[type=text]' ).val(); last_slug = last_slug.replace( /<(?:.)*?>/g, '' ).replace( /([^0-9a-zA-Z\_\- ])/g, '' ); $this.closest( '.pods-sluggable' ).find( '.pods-slug em' ).html( last_slug ); $( '.pods-slugged-lower:not(.pods-slugged[data-sluggable])' ).html( last_slug.toLowerCase() ); $( '.pods-slugged:not(.pods-slugged[data-sluggable])' ).html( last_slug.charAt( 0 ).toUpperCase() + last_slug.slice( 1 ) ); $this.closest( '.pods-sluggable' ).find( '.pods-slug, .pods-slug-edit' ).toggle(); $this.css( 'cursor', 'pointer' ); $this.prop( 'disabled', false ); } ); // Handle cancel slug edit $sluggable.on( 'click', '.pods-slug-edit a.cancel', function ( e ) { var $this = $( this ); $this.css( 'cursor', 'default' ); $this.prop( 'disabled', true ); $this.parent().find( 'input[type=text]' ).val( last_slug ); $this.closest( '.pods-sluggable' ).find( '.pods-slug, .pods-slug-edit' ).toggle(); $this.css( 'cursor', 'pointer' ); $this.prop( 'disabled', false ); e.preventDefault(); } ); $sluggable.find( '.pods-slug-edit' ).hide(); } methods[ 'sluggables' ](); }, sluggable_single : function ( sluggable ) { var $slug = $( 'input[name="' + sluggable.replace( '[', '\\[' ).replace( ']', '\\]' ) + '"]' ); if ( $slug.length ) { $slug.on( 'change', function () { // Strip HTML/code. var slug = $( this ).val().replace( /<( ?:. )*?>/g, '' ), name = $( this ).prop( 'name' ).replace( '[', '\\[' ).replace( ']', '\\]' ); if ( slug.length ) { var slug_lower = slug.toLowerCase(), slug_sanitized = slug.replace( /([^0-9a-zA-Z\_\- ])/g, '' ), slug_sanitized_lower = slug_sanitized.toLowerCase(); slug = slug.charAt( 0 ).toUpperCase() + slug.slice( 1 ); // Update elements and trigger change. $( '.pods-slugged[data-sluggable="' + name + '"], .pods-slugged-lower[data-sluggable="' + name + '"]' ).each( function() { var $this = $( this ), lowercase = $this.hasClass( 'pods-slugged-lower' ), sanitize_title = $this.hasClass( 'pods-slugged-sanitize-title' ), val = slug; if ( sanitize_title ) { val = slug_sanitized; if ( lowercase ) { val = slug_sanitized_lower; } } else if ( lowercase ) { val = slug_lower; } switch ( this.nodeName.toLowerCase() ) { case 'input': case 'textarea': // Update fields. if ( '' === $this.val() ) { $this.val( val ); } break; default: // Update html. $this.html( val ); break; } $this.trigger( 'change' ); } ); } } ); if ( $slug.val().length ) { $slug.trigger( 'change' ); } } }, sluggables : function ( parent ) { var sluggables = []; if ( 'undefined' == typeof parent ) parent = '.pods-admin'; $( parent ).find( '.pods-slugged[data-sluggable], .pods-slugged-lower[data-sluggable]' ).each( function () { if ( -1 == jQuery.inArray( $( this ).data( 'sluggable' ), sluggables ) ) sluggables.push( $( this ).data( 'sluggable' ) ); } ); for ( var i = 0; i < sluggables.length; i++ ) { var sluggable = sluggables[ i ]; methods[ 'sluggable_single' ]( sluggable ); } }, tabbed : function () { $( '.pods-admin' ).on( 'click', '.pods-tabs .pods-tab a.pods-tab-link', function ( e ) { var $this = $( this ), tab_class = '.pods-tabbed', tab_hash = this.hash, $tabbed; $this.css( 'cursor', 'default' ); $this.prop( 'disabled', true ); if ( 'undefined' != typeof $this.closest( '.pods-tabs' ).data( 'tabbed' ) ) { tab_class = $this.closest( '.pods-tabs' ).data( 'tabbed' ); } $tabbed = $this.closest( tab_class ); if ( $tabbed.find( '.pods-tabs .pods-tab a[data-tabs]' )[ 0 ] ) { $tabbed.find( '.pods-tabs .pods-tab a[data-tabs]' ).each( function () { var tabs = $( this ).data( 'tabs' ), this_tab_hash = this.hash; if ( tab_hash != this_tab_hash ) { $tabbed.find( tabs ).hide(); } else { $tabbed.find( tabs ).show(); } } ); } else { $.when( $tabbed.find( '.pods-tab-group .pods-tab' ).not( tab_hash ).slideUp() ).done( function () { var $current_tab = $tabbed.find( '.pods-tab-group .pods-tab' + tab_hash ); $( '.pods-dependent-toggle', $current_tab ).each( function () { var elementId = $( this ).attr( 'id' ), runDependencies = true, selectionTypes = [ { name : 'single', pickFormatRegex: /pick-format-single$/g }, { name : 'multi', pickFormatRegex: /pick-format-multi$/g } ]; // Pick multi/single select: Bypass dependency checks on the format of selection types // that aren't currently chosen. We shouldn't check dependencies against format_single // if multi is selected and vice versa. selectionTypes.forEach( function( thisSelectionType ) { var pickSelectionTypeId = null; // Is this the format list for one of the selection types? if ( thisSelectionType.pickFormatRegex.test( elementId ) ) { // Get the HTML ID of the "selection type" select box so we can check its value pickSelectionTypeId = elementId.replace( thisSelectionType.pickFormatRegex, 'pick-format-type' ); // Bypass dependency checks if this format value is for a selection type // that isn't currently selected if ( $( '#' + pickSelectionTypeId ).val() !== thisSelectionType.name ) { runDependencies = false; } } } ); if ( runDependencies ) { methods[ 'setup_dependencies' ]( $( this ) ); } } ); $current_tab.slideDown(); } ); } $tabbed.find( '.pods-tabs .pods-tab a' ).removeClass( 'selected' ); $this.addClass( 'selected' ); $this.css( 'cursor', 'pointer' ); $this.prop( 'disabled', false ); e.preventDefault(); } ); $( '.pods-tabbed' ).each( function () { $( 'ul.pods-tabs .pods-tab:first a', this ).addClass( 'selected' ); $( '.pods-tab-group .pods-tab:first' ).each( function () { $( '.pods-dependent-toggle', this ).trigger( 'change' ); $( this ).show(); } ); } ); }, nav_tabbed : function () { $( '.pods-admin' ).on( 'click', '.pods-nav-tabs a.pods-nav-tab-link', function ( e ) { var $this = $( this ), tab_class = '.pods-nav-tabbed', tab_hash = this.hash, $tabbed; $this.css( 'cursor', 'default' ); $this.prop( 'disabled', true ); if ( 'undefined' != typeof $this.closest( '.pods-nav-tabs' ).data( 'tabbed' ) ) { tab_class = $this.closest( '.pods-nav-tabs' ).data( 'tabbed' ); } $tabbed = $this.closest( tab_class ); if ( $tabbed.find( '.pods-nav-tabs a.pods-nav-tab-link[data-tabs]' )[ 0 ] ) { $tabbed.find( '.pods-nav-tabs a.pods-nav-tab-link[data-tabs]' ).each( function () { var tabs = $( this ).data( 'tabs' ), this_tab_hash = this.hash; if ( tab_hash != this_tab_hash ) { $tabbed.find( tabs ).hide(); } else { $tabbed.find( tabs ).show(); } } ); } else { $tabbed.find( '.pods-nav-tab-group .pods-nav-tab' ).not( tab_hash ).each( function () { $( this ).hide(); } ); $tabbed.find( '.pods-nav-tab-group .pods-nav-tab' ).filter( tab_hash ).each( function () { $( '.pods-dependent-toggle', this ).trigger( 'change' ); $( this ).show(); } ); } $tabbed.find( '.pods-nav-tabs a.pods-nav-tab-link' ).removeClass( 'nav-tab-active' ); $this.addClass( 'nav-tab-active' ); $this.css( 'cursor', 'pointer' ); $this.prop( 'disabled', false ); e.preventDefault(); } ); $( '.pods-nav-tabbed' ).each( function () { $nav_tabbed = $( this ); $nav_tabbed.find( '.pods-nav-tabs a.pods-nav-tab-link:first' ).addClass( 'nav-tab-active' ); $nav_tabbed.find( '.pods-nav-tab-group .pods-nav-tab:first' ).each( function () { $( '.pods-dependent-toggle', this ).trigger( 'change' ); $( this ).show(); } ); } ); }, wizard : function () { var methods = { setFinished : function () { $( '#pods-wizard-next' ).text( $( '#pods-wizard-next' ).data( 'finished' ) ); $( '#pods-wizard-next' ).show().removeClass( 'hidden' ); }, setProgress : function () { $( '#pods-wizard-next' ).text( $( '#pods-wizard-next' ).data( 'next' ) ); $( '#pods-wizard-next' ).show().removeClass( 'hidden' ); }, stepBackward : function () { $( '#pods-wizard-next' ) .css( 'cursor', 'pointer' ) .prop( 'disabled', false ) .text( $( '#pods-wizard-next' ).data( 'next' ) ); $( '#pods-wizard-next' ).show().removeClass( 'hidden' ); // Step toolbar menu state forwards $( 'li.pods-wizard-menu-current' ) .removeClass( 'pods-wizard-menu-current pods-wizard-menu-complete' ) .prev( 'li' ) .removeClass( 'pods-wizard-menu-complete' ) .addClass( 'pods-wizard-menu-current' ); // Get current step # var step = false; if ( $( 'li.pods-wizard-menu-current[data-step]' )[ 0 ] ) step = $( 'li.pods-wizard-menu-current' ).data( 'step' ); // Show start over button if ( 1 == step ) { $( '#pods-wizard-start' ).hide(); } else { $( '#pods-wizard-start' ).show().removeClass( 'hidden' ); } // Check if last step if ( $( 'div.pods-wizard-panel:visible' ).prev( 'div.pods-wizard-panel' ).length ) { // Show next panel $( 'div.pods-wizard-panel:visible' ).hide().prev().show(); } window.location.hash = ''; }, stepForward : function () { // Show action bar for second panel if hidden $( 'div.pods-wizard-hide-first' ) .removeClass( 'pods-wizard-hide-first' ) // Remember that first panel should hide action bar .data( 'hide', 1 ); // Step toolbar menu state forwards $( 'li.pods-wizard-menu-current' ) .removeClass( 'pods-wizard-menu-current' ) .addClass( 'pods-wizard-menu-complete' ) .next( 'li' ) .addClass( 'pods-wizard-menu-current' ); var step = false, // Get current step #. check = true; // Allow for override. if ( $( 'li.pods-wizard-menu-current[data-step]' )[ 0 ] ) { step = $( 'li.pods-wizard-menu-current' ).data( 'step' ); } // Show start over button. $( '#pods-wizard-start' ).show().removeClass( 'hidden' ); // Check if last step. if ( $( 'div.pods-wizard-panel:visible' ).next( 'div.pods-wizard-panel' ).length ) { // Show next panel $( 'div.pods-wizard-panel:visible' ).hide().next().show(); // Allow for override if ( 'undefined' != typeof pods_admin_wizard_callback ) { check = pods_admin_wizard_callback( step, false ); } if ( false === check ) { return check; } window.location.hash = ''; } else if ( $( '#pods-wizard-box' ).closest( 'form' )[ 0 ] ) { $( '#pods-wizard-next' ) .css( 'cursor', 'default' ) .prop( 'disabled', true ) .text( $( '#pods-wizard-next' ).data( 'processing' ) ); $( '#pods-wizard-next' ).show().removeClass( 'hidden' ); // Allow for override if ( 'undefined' != typeof pods_admin_wizard_callback ) { check = pods_admin_wizard_callback( step, true ); } if ( false === check ) { return check; } $( '#pods-wizard-box' ).closest( 'form' ).submit(); if ( $( '#pods-wizard-box' ).closest( 'form' ).hasClass( 'invalid-form' ) ) { $( '#pods-wizard-next' ) .css( 'cursor', 'pointer' ) .prop( 'disabled', false ) .text( $( '#pods-wizard-next' ).data( 'next' ) ); $( '#pods-wizard-next' ).show().removeClass( 'hidden' ); // Step toolbar menu state forwards $( 'li.pods-wizard-menu-complete:last' ) .removeClass( 'pods-wizard-menu-complete' ) .addClass( 'pods-wizard-menu-current' ) } } else { // Allow for override if ( 'undefined' != typeof pods_admin_wizard_callback ) { check = pods_admin_wizard_callback( step, true ); } if ( false === check ) { return check; } methods.setFinished(); window.location.hash = ''; } }, startOver : function () { // Reset next button text methods.setProgress(); // If first panel and action bar is supposed to be hidden, hide it. var $box = $( '#pods-wizard-box' ); if ( $box.data( 'hide' ) ) { $box.addClass( 'pods-wizard-hide-first' ); } // Revert to first current menu item $( '#pods-wizard-heading ul li' ) .removeClass() .first() .addClass( 'pods-wizard-menu-current' ); // Revert to first panel $( 'div.pods-wizard-panel' ).hide().first().show(); // Hide start over button $( '.pods-wizard-option-selected' ).removeClass(); $( '#pods-wizard-start' ).hide(); $( 'div.pods-wizard-option-cont' ).hide(); $( '#pods-wizard-choices' ).fadeIn( 'fast' ); if ( 'undefined' != typeof pods_admin_wizard_startover_callback ) { pods_admin_wizard_startover_callback( $( this ) ); } window.location.hash = ''; } }; // Next button event binding $( '#pods-wizard-next' ).on( 'click', function ( e ) { if ( $( this ).is( ':disabled' ) ) { return; } e.preventDefault(); methods.stepForward(); } ); // Start over button event binding $( '#pods-wizard-start' ).hide().on( 'click', function ( e ) { e.preventDefault(); methods.startOver(); } ); // Upgrade choice button event binding $( '.pods-choice-button' ).on( 'click', function ( e ) { e.preventDefault(); var target = $( this ).attr( 'href' ); $( '#pods-wizard-choices' ).slideUp( 'fast' ); $( target ).slideDown( 'fast' ); } ); // Create/extend option event binding $( '.pods-wizard-option a' ).on( 'click', function ( e ) { e.preventDefault(); $( '.pods-wizard-option-content' ).hide(); var target = $( this ).attr( 'href' ); $( target ).show(); $( '.pods-wizard-option-content-' + target.replace( '#pods-wizard-', '' ) ).show(); if ( 'undefined' != typeof pods_admin_option_select_callback ) { pods_admin_option_select_callback( $( this ) ); } methods.stepForward(); } ); // Initial step panel setup $( '.pods-wizard .pods-wizard-step' ).hide(); $( '.pods-wizard .pods-wizard-step:first' ).show(); }, setup_dependencies : function( $el ) { var $current = $el.closest( '.pods-dependency' ), $field = $el, val = $el.val(), $field_type, dependent_flag, dependent_specific, exclude_flag, exclude_specific, wildcard_target, wildcard_target_value; /** * Check if this element is a child from an 'advanced field options' group. * If so, set the value to empty if this is not the current field type group * Fixes dependency compatibility * * @todo Validate & improve this */ // Are we in the "Fields" tab? if ( $current.parents('#pods-manage-fields').length ) { // And are we also in the "Additional Field Options" tab? if ( $el.parents('.pods-additional-field-options').length ) { // Get this field's type $field_type = $current.find( '.pods-form-ui-field-name-field-data-type' ).val(); // Check if this element resides within the correct "Additional Field Options" tab if ( ! $el.parents( '.pods-additional-field-options > .pods-depends-on-field-data-type-' + $field_type ).length ) { // This is not an option for this field. Empty the value val = ''; } } } if ( null === val ) { val = ''; } dependent_flag = '.pods-depends-on-' + $el.data( 'name-clean' ).replace( /\_/gi, '-' ); dependent_specific = dependent_flag + '-' + val.replace( /\_/gi, '-' ); $current.find( dependent_flag ).each( function () { var $dependent = $( this ), dependency_trigger; if ( $dependent.parent().is( ':visible' ) ) { if ( $field.is( 'input[type=checkbox]' ) ) { if ( $field.is( ':checked' ) && ( 1 == $field.val() || $dependent.is( dependent_specific ) ) ) { $dependent.show().addClass( 'pods-dependent-visible' ); $dependent.find( '.pods-dependency .pods-depends-on' ).hide(); $dependent.find( '.pods-dependency .pods-excludes-on' ).hide(); $dependent.find( '.pods-dependency .pods-dependent-toggle' ).each( function () { methods[ 'setup_dependencies' ]( $( this ) ); } ); if ( $dependent.is( '[data-dependency-trigger]' ) ) { dependency_trigger = window[ $dependent.data( 'dependency-trigger' ) ]; dependency_trigger( $dependent ); } } else if ( !$field.is( ':checked' ) && ( !$field.is( '.pods-dependent-multi' ) || $dependent.is( dependent_specific ) ) ) { if ( $dependent.is( 'tr' ) ) { $dependent.hide().removeClass( 'pods-dependent-visible' ); } else { $dependent.slideUp().removeClass( 'pods-dependent-visible' ); } } } else if ( $dependent.is( dependent_specific ) ) { $dependent.show().addClass( 'pods-dependent-visible' ); $dependent.find( '.pods-dependency .pods-depends-on' ).hide(); $dependent.find( '.pods-dependency .pods-excludes-on' ).hide(); $dependent.find( '.pods-dependency .pods-dependent-toggle' ).each( function () { methods[ 'setup_dependencies' ]( $( this ) ); } ); if ( $dependent.is( '[data-dependency-trigger]' ) ) { dependency_trigger = window[ $dependent.data( 'dependency-trigger' ) ]; dependency_trigger( $dependent ); } } else { if ( $dependent.is( 'tr' ) ) { $dependent.hide().removeClass( 'pods-dependent-visible' ); } else { $dependent.slideUp().removeClass( 'pods-dependent-visible' ); } } } else { if ( $field.is( 'input[type=checkbox]' ) ) { if ( $field.is( ':checked' ) && ( 1 == $field.val() || $dependent.is( dependent_specific ) ) ) { $dependent.show().addClass( 'pods-dependent-visible' ); $dependent.find( '.pods-dependency .pods-depends-on' ).hide(); $dependent.find( '.pods-dependency .pods-excludes-on' ).hide(); $dependent.find( '.pods-dependency .pods-dependent-toggle' ).each( function () { methods[ 'setup_dependencies' ]( $( this ) ); } ); if ( $dependent.is( '[data-dependency-trigger]' ) ) { dependency_trigger = window[ $dependent.data( 'dependency-trigger' ) ]; dependency_trigger( $dependent ); } } else if ( !$field.is( ':checked' ) && ( !$field.is( '.pods-dependent-multi' ) || $dependent.is( dependent_specific ) ) ) { $dependent.hide().removeClass( 'pods-dependent-visible' ); } } else if ( $dependent.is( dependent_specific ) ) { $dependent.show().addClass( 'pods-dependent-visible' ); $dependent.find( '.pods-dependency .pods-depends-on' ).hide(); $dependent.find( '.pods-dependency .pods-excludes-on' ).hide(); $dependent.find( '.pods-dependency .pods-dependent-toggle' ).each( function () { methods[ 'setup_dependencies' ]( $( this ) ); } ); if ( $dependent.is( '[data-dependency-trigger]' ) ) { dependency_trigger = window[ $dependent.data( 'dependency-trigger' ) ]; dependency_trigger( $dependent ); } } else { $dependent.hide().removeClass( 'pods-dependent-visible' ); } } } ); exclude_flag = '.pods-excludes-on-' + $el.data( 'name-clean' ).replace( /\_/gi, '-' ); exclude_specific = exclude_flag + '-' + val.replace( /\_/gi, '-' ); $current.find( exclude_flag ).each( function () { var $dependent = $( this ), dependency_trigger; if ( $dependent.parent().is( ':visible' ) ) { if ( $field.is( 'input[type=checkbox]' ) ) { if ( $field.is( ':checked' ) && ( 1 == $field.val() || $dependent.is( exclude_specific ) ) ) { if ( $dependent.is( 'tr' ) ) { $dependent.hide().removeClass( 'pods-dependent-visible' ); } else { $dependent.slideUp().removeClass( 'pods-dependent-visible' ); } } else if ( !$field.is( ':checked' ) && ( !$field.is( '.pods-dependent-multi' ) || $dependent.is( exclude_specific ) ) ) { $dependent.show().addClass( 'pods-dependent-visible' ); $dependent.find( '.pods-dependency .pods-depends-on' ).hide(); $dependent.find( '.pods-dependency .pods-excludes-on' ).hide(); $dependent.find( '.pods-dependency .pods-dependent-toggle' ).each( function () { methods[ 'setup_dependencies' ]( $( this ) ); } ); if ( $dependent.is( '[data-dependency-trigger]' ) ) { dependency_trigger = window[ $dependent.data( 'dependency-trigger' ) ]; dependency_trigger( $dependent ); } } } else if ( $dependent.is( exclude_specific ) ) { if ( $dependent.is( 'tr' ) ) { $dependent.hide().removeClass( 'pods-dependent-visible' ); } else { $dependent.slideUp().removeClass( 'pods-dependent-visible' ); } } else { $dependent.show().addClass( 'pods-dependent-visible' ); $dependent.find( '.pods-dependency .pods-depends-on' ).hide(); $dependent.find( '.pods-dependency .pods-excludes-on' ).hide(); $dependent.find( '.pods-dependency .pods-dependent-toggle' ).each( function () { methods[ 'setup_dependencies' ]( $( this ) ); } ); if ( $dependent.is( '[data-dependency-trigger]' ) ) { dependency_trigger = window[ $dependent.data( 'dependency-trigger' ) ]; dependency_trigger( $dependent ); } } } else { if ( $field.is( 'input[type=checkbox]' ) ) { if ( $field.is( ':checked' ) && ( 1 == $field.val() || $dependent.is( exclude_specific ) ) ) { $dependent.hide().removeClass( 'pods-dependent-visible' ); } else if ( !$field.is( ':checked' ) && ( !$field.is( '.pods-dependent-multi' ) || $dependent.is( exclude_specific ) ) ) { $dependent.show().addClass( 'pods-dependent-visible' ); $dependent.find( '.pods-dependency .pods-depends-on' ).hide(); $dependent.find( '.pods-dependency .pods-excludes-on' ).hide(); $dependent.find( '.pods-dependency .pods-dependent-toggle' ).each( function () { methods[ 'setup_dependencies' ]( $( this ) ); } ); if ( $dependent.is( '[data-dependency-trigger]' ) ) { dependency_trigger = window[ $dependent.data( 'dependency-trigger' ) ]; dependency_trigger( $dependent ); } } } else if ( $dependent.is( exclude_specific ) ) { $dependent.hide().removeClass( 'pods-dependent-visible' ); } else { $dependent.show().addClass( 'pods-dependent-visible' ); $dependent.find( '.pods-dependency .pods-depends-on' ).hide(); $dependent.find( '.pods-dependency .pods-excludes-on' ).hide(); $dependent.find( '.pods-dependency .pods-dependent-toggle' ).each( function () { methods[ 'setup_dependencies' ]( $( this ) ); } ); if ( $dependent.is( '[data-dependency-trigger]' ) ) { dependency_trigger = window[ $dependent.data( 'dependency-trigger' ) ]; dependency_trigger( $dependent ); } } } } ); // Search for wildcard dependencies on this element's value wildcard_target = '.pods-wildcard-on-' + $el.data( 'name-clean' ).replace( /\_/gi, '-' ); wildcard_target_value = val.replace( /\_/gi, '-' ); $current.find( wildcard_target ).each( function () { var $dependent = $( this ), data_attribute = 'pods-wildcard-' + $field.data( 'name-clean' ), wildcard_data = $dependent.data( data_attribute ), match_found, dependency_trigger; // Could support objects but limiting to a single string for now if ( 'string' !== typeof wildcard_data ) { return true; // Continues the outer each() loop } // Check for a wildcard match. Can be multiple wildcards in a comma separated list match_found = false; $.each( wildcard_data.split( ',' ), function( index, this_wildcard ) { if ( null !== wildcard_target_value.match( this_wildcard ) ) { match_found = true; return false; // Stop iterating through further each() elements } } ); // Set the state of the dependent element if ( $dependent.parent().is( ':visible' ) ) { if ( match_found ) { $dependent.show().addClass( 'pods-dependent-visible' ); $dependent.find( '.pods-dependency .pods-depends-on' ).hide(); $dependent.find( '.pods-dependency .pods-excludes-on' ).hide(); $dependent.find( '.pods-dependency .pods-wildcard-on' ).hide(); $dependent.find( '.pods-dependency .pods-dependent-toggle' ).each( function () { methods[ 'setup_dependencies' ]( $( this ) ); } ); if ( $dependent.is( '[data-dependency-trigger]' ) ) { dependency_trigger = window[ $dependent.data( 'dependency-trigger' ) ]; dependency_trigger( $dependent ); } } else { // No wildcard matches if ( $dependent.is( 'tr' ) ) { $dependent.hide().removeClass( 'pods-dependent-visible' ); } else { $dependent.slideUp().removeClass( 'pods-dependent-visible' ); } } } else { // Parent element wasn't visible if ( match_found ) { $dependent.show().addClass( 'pods-dependent-visible' ); $dependent.find( '.pods-dependency .pods-depends-on' ).hide(); $dependent.find( '.pods-dependency .pods-excludes-on' ).hide(); $dependent.find( '.pods-dependency .pods-wildcard-on' ).hide(); $dependent.find( '.pods-dependency .pods-dependent-toggle' ).each( function () { methods[ 'setup_dependencies' ]( $( this ) ); } ); if ( $dependent.is( '[data-dependency-trigger]' ) ) { dependency_trigger = window[ $dependent.data( 'dependency-trigger' ) ]; dependency_trigger( $dependent ); } } else { // No wildcard matches $dependent.hide().removeClass( 'pods-dependent-visible' ); } } } ); }, dependency : function ( init ) { // Hide all dependents $( '.pods-dependency .pods-depends-on, .pods-dependency .pods-excludes-on, .pods-dependency .pods-wildcard-on' ).hide(); // Handle dependent toggle $( '.pods-admin, .pods-form-front, .pods-form-settings' ).on( 'change', '.pods-dependent-toggle[data-name-clean]', function ( e ) { var selectionTypeRegex = /pick-format-type$/g, elementId = $( this ).attr( 'id' ), selectionType, selectionFormatId; // Setup dependencies for the field that changed methods[ 'setup_dependencies' ]( $( this ) ); // Also force a dependency update for the appropriate format when "selection type" changes if ( selectionTypeRegex.test( elementId ) ) { selectionType = $( this ).val(); selectionFormatId = elementId.replace( selectionTypeRegex, 'pick-format-' + selectionType ); methods[ 'setup_dependencies' ]( $( '#' + selectionFormatId ) ); } } ); if ( 'undefined' != typeof init && init ) { $( '.pods-dependency' ).find( '.pods-dependent-toggle' ).trigger( 'change' ); // DFV fields load later. $( window ).on( 'load', function() { $( '.pods-dependency' ).find( '.pods-dependent-toggle' ).trigger( 'change' ); } ); } }, dependency_tabs : function () { // Hide all dependents $( '.pods-dependency-tabs .pods-depends-on' ).hide(); // Handle dependent toggle $( '.pods-admin' ).on( 'click', '.pods-dependency-tabs .pods-dependent-tab', function ( e ) { var $el = $( this ), $current = $el.closest( '.pods-dependency-tabs' ), $field = $el, dependent_flag = '.pods-depends-on-' + $el.data( 'name-clean' ).replace( /\_/gi, '-' ), dependent_specific = dependent_flag + '-' + $el.val().replace( /\_/gi, '-' ); $current.find( dependent_flag ).each( function () { var $dependent = $( this ); if ( $dependent.parent().is( ':visible' ) ) { if ( $field.is( 'input[type=checkbox]' ) && $field.is( ':checked' ) && 1 == $field.val() ) { $dependent.show().addClass( 'pods-dependent-visible' ); $dependent.find( '.pods-dependency-tabs .pods-depends-on' ).hide(); $dependent.find( '.pods-dependency-tabs .pods-excludes-on' ).hide(); $dependent.find( '.pods-dependency-tabs .pods-dependent-tab.pods-dependent-tab-active' ).each( function () { $( this ).trigger( 'click' ); } ); } else if ( $dependent.is( dependent_specific ) ) { $dependent.show().addClass( 'pods-dependent-visible' ); $dependent.find( '.pods-dependency-tabs .pods-depends-on' ).hide(); $dependent.find( '.pods-dependency-tabs .pods-excludes-on' ).hide(); $dependent.find( '.pods-dependency-tabs .pods-dependent-tab.pods-dependent-tab-active' ).each( function () { $( this ).trigger( 'click' ); } ); } else { if ( $dependent.is( 'tr' ) ) { $dependent.hide().removeClass( 'pods-dependent-visible' ); } else { $dependent.slideUp().removeClass( 'pods-dependent-visible' ); } } } else { if ( $field.is( 'input[type=checkbox]' ) && $field.is( ':checked' ) && 1 == $field.val() ) { $dependent.show().addClass( 'pods-dependent-visible' ); $dependent.find( '.pods-dependency-tabs .pods-depends-on' ).hide(); $dependent.find( '.pods-dependency-tabs .pods-excludes-on' ).hide(); $dependent.find( '.pods-dependency-tabs .pods-dependent-tab.pods-dependent-tab-active' ).each( function () { $( this ).trigger( 'click' ); } ); } else if ( $dependent.is( dependent_specific ) ) { $dependent.show().addClass( 'pods-dependent-visible' ); $dependent.find( '.pods-dependency-tabs .pods-depends-on' ).hide(); $dependent.find( '.pods-dependency-tabs .pods-excludes-on' ).hide(); $dependent.find( '.pods-dependency-tabs .pods-dependent-tab.pods-dependent-tab-active' ).each( function () { $( this ).trigger( 'click' ); } ); } else $dependent.hide().removeClass( 'pods-dependent-visible' ); } } ); var exclude_flag = '.pods-excludes-on-' + $el.data( 'name-clean' ).replace( /\_/gi, '-' ); var exclude_specific = exclude_flag + '-' + $el.val().replace( /\_/gi, '-' ); $current.find( exclude_flag ).each( function () { var $dependent = $( this ); if ( $dependent.parent().is( ':visible' ) ) { if ( $field.is( 'input[type=checkbox]' ) && $field.is( ':checked' ) && 1 == $field.val() ) { if ( $dependent.is( 'tr' ) ) { $dependent.hide().removeClass( 'pods-dependent-visible' ); } else { $dependent.slideUp().removeClass( 'pods-dependent-visible' ); } } else if ( $dependent.is( exclude_specific ) ) { if ( $dependent.is( 'tr' ) ) { $dependent.hide().removeClass( 'pods-dependent-visible' ); } else { $dependent.slideUp().removeClass( 'pods-dependent-visible' ); } } else { $dependent.show().addClass( 'pods-dependent-visible' ); $dependent.find( '.pods-dependency-tabs .pods-depends-on' ).hide(); $dependent.find( '.pods-dependency-tabs .pods-excludes-on' ).hide(); $dependent.find( '.pods-dependency-tabs .pods-dependent-tab.pods-dependent-tab-active' ).each( function () { $( this ).trigger( 'click' ); } ); } } else { if ( $field.is( 'input[type=checkbox]' ) && $field.is( ':checked' ) && 1 == $field.val() ) { $dependent.hide().removeClass( 'pods-dependent-visible' ); } else if ( $dependent.is( exclude_specific ) ) { $dependent.hide().removeClass( 'pods-dependent-visible' ); } else { $dependent.show().addClass( 'pods-dependent-visible' ); $dependent.find( '.pods-dependency-tabs .pods-depends-on' ).hide(); $dependent.find( '.pods-dependency-tabs .pods-excludes-on' ).hide(); $dependent.find( '.pods-dependency-tabs .pods-dependent-tab.pods-dependent-tab-active' ).each( function () { $( this ).trigger( 'click' ); } ); } } } ); } ); $( '.pods-dependency-tabs .pods-dependent-tab.pods-dependent-tab-active' ).each( function () { $( this ).trigger( 'click' ); } ); }, sortable : function () { $( 'tr.pods-manage-row:even' ).addClass( 'alternate' ); $( 'tbody.pods-manage-list' ).addClass( 'pods-manage-sortable' ).sortable( { items : 'tr.pods-manage-row', axis : 'y', handle : '.pods-manage-sort', stop : function ( event, ui ) { $( 'tr.pods-manage-row' ).removeClass( 'alternate' ); $( 'tr.pods-manage-row:even' ).addClass( 'alternate' ); } } ); }, advanced : function () { $( '.pods-advanced' ).hide(); $( '.pods-admin' ).on( 'click', '.pods-advanced-toggle', function ( e ) { var $advanced = $( this ).closest( 'div' ).find( '.pods-advanced' ); if ( $advanced.is( ':visible' ) ) { $( this ).text( $( this ).text().replace( '-', '+' ) ); $advanced.slideUp(); } else { $( this ).text( $( this ).text().replace( '+', '-' ) ); $advanced.slideDown(); } e.preventDefault(); } ); }, collapsible : function ( row ) { var new_row = row, orig_fields = {}; if ( new_row[ 0 ] ) { new_row = new_row.html(); } // Hide all rows $( 'div.pods-manage-row-wrapper' ).hide(); // Handle 'Edit' action $( 'tbody.pods-manage-list' ).on( 'click', 'a.pods-manage-row-edit', function ( e ) { var $this = $( this ), $row, $row_label, $row_content, $tbody, row_counter, edit_row, $field_wrapper, field_data, field_array_counter, json_name; $this.css( 'cursor', 'default' ); $this.prop( 'disabled', true ); $row = $this.closest( 'tr.pods-manage-row' ); $row_label = $row.find( 'td.pods-manage-row-label' ); $row_content = $row_label.find( 'div.pods-manage-row-wrapper' ); if ( 'undefined' == typeof orig_fields[ $row.data( 'id' ) ] ) orig_fields[ $row.data( 'id' ) ] = {}; // Row active, hide it if ( $row_content.is( ':visible' ) ) { if ( !$row.hasClass( 'pods-field-new' ) ) { $row_content.slideUp( 'slow', function () { $row.toggleClass( 'pods-manage-row-expanded' ); $row_label.prop( 'colspan', '1' ); $row_content.find( 'input, select, textarea' ).each( function () { var $this = $( this ); if ( 'undefined' != typeof orig_fields[ $row.data( 'id' ) ][ $this.prop( 'name' ) ] ) { if ( $this.is( 'input[type=checkbox]' ) ) $this.prop( 'checked', orig_fields[ $row.data( 'id' ) ][ $this.prop( 'name' ) ] ); else $this.val( orig_fields[ $row.data( 'id' ) ][ $this.prop( 'name' ) ] ); } } ); } ); } else { $tbody = $this.closest( 'tbody.pods-manage-list' ); $row.animate( {backgroundColor : '#B80000'} ); $row.fadeOut( 'slow', function () { $( this ).remove(); if ( 0 === $( 'tbody.pods-manage-list tr.pods-manage-row' ).length ) { $tbody.find( 'tr.no-items' ).show(); } } ); if ( $.fn.sortable && $tbody.hasClass( 'pods-manage-sortable' ) ) { $this.closest( 'tbody.pods-manage-list' ).sortable( 'refresh' ); } } } // Row inactive, show it else { if ( $row.hasClass( 'pods-field-init' ) && 'undefined' != typeof new_row && null !== new_row ) { row_counter = $row.data( 'row' ); edit_row = new_row.replace( /\_\_1/gi, row_counter ).replace( /\-\-1/gi, row_counter ); $field_wrapper = $row_content.find( 'div.pods-manage-field' ); if ( $row.hasClass( 'pods-field-duplicated' ) ) { $row.removeClass( 'pods-field-duplicated' ); } else { $field_wrapper.append( edit_row ); // Duct tape to handle fields added dynamically window.PodsDFV.init(); } $field_wrapper.find( '.pods-depends-on' ).hide(); $field_wrapper.find( '.pods-excludes-on' ).hide(); $field_wrapper.find( '.pods-dependent-toggle' ).each( function () { $( this ).trigger( 'change' ); } ); field_data = jQuery.parseJSON( $row_content.find( 'input.field_data' ).val() ); field_array_counter = 0; $field_wrapper.find( 'input, select, textarea' ).each( function () { var $this = $( this ); json_name = $this.prop( 'name' ).replace( 'field_data[' + row_counter + '][', '' ).replace( /\[\d*\]/gi, '' ).replace( '[', '' ).replace( ']', '' ); if ( 'undefined' == typeof field_data[ json_name ] ) return; if ( 0 < $this.prop( 'name' ).indexOf( '[]' ) || $this.prop( 'name' ).replace( 'field_data[' + row_counter + ']', '' ).match( /\[\d*\]/ ) ) { if ( $this.is( 'input[type=checkbox]' ) ) { $this.prop( 'checked', ( -1 < jQuery.inArray( $this.val(), field_data[ json_name ] ) ) ); orig_fields[ $row.data( 'id' ) ][ $this.prop( 'name' ) ] = $this.prop( 'checked' ); } else if ( 'undefined' != typeof field_data[ json_name ][ field_array_counter ] ) { $this.val( field_data[ json_name ][ field_array_counter ] ); orig_fields[ $row.data( 'id' ) ][ $this.prop( 'name' ) ] = $this.val(); } field_array_counter++; } else { field_array_counter = 0; if ( $this.is( 'input[type=checkbox]' ) ) { $this.prop( 'checked', ( $this.val() == field_data[ json_name ] ) ); orig_fields[ $row.data( 'id' ) ][ $this.prop( 'name' ) ] = $this.prop( 'checked' ); } else { $this.val( field_data[ json_name ] ); orig_fields[ $row.data( 'id' ) ][ $this.prop( 'name' ) ] = $( this ).val(); } } } ); $field_wrapper.find( '.pods-tabbed ul.pods-tabs .pods-tab:first a' ).addClass( 'selected' ); $field_wrapper.find( '.pods-tabbed .pods-tab-group .pods-tab:first' ).show(); $row.removeClass( 'pods-field-init' ); $( document ).Pods( 'qtip', $row ); } else { $row_content.find( 'input, select, textarea' ).each( function () { if ( $( this ).is( 'input[type=checkbox]' ) ) { orig_fields[ $row.data( 'id' ) ][ $( this ).prop( 'name' ) ] = $( this ).prop( 'checked' ); } else { orig_fields[ $row.data( 'id' ) ][ $( this ).prop( 'name' ) ] = $( this ).val(); } } ); } $row.toggleClass( 'pods-manage-row-expanded' ); $row_label.prop( 'colspan', '3' ); methods[ 'scroll' ]( $row ); $row_content.slideDown().find( '.pods-dependency .pods-dependent-toggle' ).each( function () { methods[ 'setup_dependencies' ]( $( this ) ); } ); } $this.css( 'cursor', 'pointer' ); $this.prop( 'disabled', false ); e.preventDefault(); } ) // Handle 'Save' action .on( 'click', '.pods-manage-row-save a.button-primary', function ( e ) { var $this = $( this ), $row = $this.closest( 'tr.pods-manage-row' ), $row_label = $row.find( 'td.pods-manage-row-label' ), $row_content = $row_label.find( 'div.pods-manage-row-wrapper' ), $field_wrapper = $row_content.find( 'div.pods-manage-field' ), $row_value = $row_content.find( 'input.field_data' ).val(), color = ( $row.hasClass( 'alternate' ) ? '#F1F1F1' : '#FFFFFF' ), row_id = $row.data( 'row' ), field_data = {}, valid_form = true; $this.css( 'cursor', 'default' ); $this.prop( 'disabled', true ); if ( 'undefined' != typeof $row_value && null != $row_value && '' !== $row_value ) { field_data = jQuery.parseJSON( $row_value ); } $field_wrapper.find( 'input, select, textarea' ).each( function () { var $el = $( this ); if ( '' !== $el.prop( 'name' ) ) { // TinyMCE support. if ( 'object' == typeof( tinyMCE ) && -1 < $el.prop( 'class' ).indexOf( 'pods-ui-field-tinymce' ) ) { var ed = tinyMCE.get( $el.prop( 'id' ) ); $el.val( ed.getContent() ); } var val = $el.val(), field_array = $el.prop( 'name' ).match( /\[(\w*|)\]/gi ), field_name = ( ( null != field_array && 1 < field_array.length ) ? field_array[ 1 ].replace( '[', '' ).replace( ']', '' ) : '' ), field_found = -1; if ( '' == field_name ) { return; } if ( $el.is( 'input[type=checkbox]' ) && $el.is( '.pods-form-ui-field-type-pick' ) ) { if ( 'object' == typeof field_data[ field_name ] || 'array' == typeof field_data[ field_name ] ) { field_found = jQuery.inArray( val, field_data[ field_name ] ); if ( -1 < field_found ) { if ( !$el.is( ':checked' ) ) { field_data[ field_name ].splice( field_found, 1 ); } } else if ( $el.is( ':checked' ) ) { field_data[ field_name ].push( val ); } } else { field_data[ field_name ] = []; if ( $el.is( ':checked' ) ) { field_data[ field_name ].push( val ); } } return; } else if ( $el.is( 'input[type=checkbox]' ) && !$el.is( ':checked' ) ) { val = ( 1 == val ) ? 0 : ''; } else if ( $el.is( 'input[type=radio]' ) && !$el.is( ':checked' ) ) { val = ''; } if ( $el.is( ':visible' ) && $el.hasClass( 'pods-validate pods-validate-required' ) && '' === $el.val() ) { $el.trigger( 'change' ); if ( false !== valid_form ) { $el.trigger( 'focus' ); } valid_form = false; } if ( $el.is( 'input[type=checkbox]' ) && $el.is( '.pods-form-ui-field-type-pick' ) ) { if ( -1 == field_found ) { if ( 'object' != typeof field_data[ field_name ] && 'array' != typeof field_data[ field_name ] ) { field_data[ field_name ] = []; } if ( '' != val ) { field_data[ field_name ].push( val ); } } } else if ( 2 == field_array.length ) { field_data[ field_name ] = val; } else if ( 3 == field_array.length ) { the_field = parseInt( field_array[ 2 ].replace( '[', '' ).replace( ']', '' ) ); if ( isNaN( the_field ) ) { field_data[ field_name ] = val; } else { if ( 'undefined' == typeof field_data[ field_name ] ) { field_data[ field_name ] = {}; } while ( 'undefined' != typeof( field_data[ field_name ][ the_field ] ) ) { the_field++; } field_data[ field_name ][ the_field ] = val; } } } } ); if ( valid_form ) { $row_content.find( 'input.field_data' ).val( JSON.stringify( field_data ) ); $row.css( 'backgroundColor', '#FFFF33' ).animate( { backgroundColor : color }, { duration : 600, complete : function () { $( this ).css( 'backgroundColor', '' ); } } ); if ( 'undefined' != typeof pods_field_types && null !== pods_field_types ) { $row.find( 'td.pods-manage-row-label a.row-label' ).html( $row_content.find( 'input#pods-form-ui-field-data-' + row_id + '-label' ).val() ); if ( $row_content.find( 'input#pods-form-ui-field-data-' + row_id + '-required' ).is( ':checked' ) ) { $row.find( 'td.pods-manage-row-label abbr.required' ).show(); } else { $row.find( 'td.pods-manage-row-label abbr.required' ).hide(); } $row.find( 'td.pods-manage-row-name a' ).html( $row_content.find( 'input#pods-form-ui-field-data-' + row_id + '-name' ).val() ); var field_type = $row_content.find( 'select#pods-form-ui-field-data-' + row_id + '-type' ).val(), pick_object = $row_content.find( 'select#pods-form-ui-field-data-' + row_id + '-pick-object' ).val(), field_type_desc = ''; if ( 'pick' == field_type && 0 != pick_object ) { $.each( pods_pick_objects, function ( i, n ) { if ( pick_object == i ) { field_type_desc = '<br /><span class="pods-manage-field-type-desc">› ' + n + '</span>'; return false; } } ); } $.each( pods_field_types, function ( i, n ) { if ( field_type == i ) { field_type = n; if ( 'pick' == i ) { if ( $row_content.find( 'select#pods-form-ui-field-data-' + row_id + '-sister-id' ).val() ) { field_type += ' <small>(' + $row_content.find( 'label[for="pods-form-ui-field-data-' + row_id + '-sister-id"]' ).text().trim() + ')</small>' } } return false; } } ); $row.find( 'td.pods-manage-row-type' ).html( field_type + field_type_desc + ' <span class="pods-manage-row-more">[type: ' + $row_content.find( 'select#pods-form-ui-field-data-' + row_id + '-type' ).val() + ']</span>' ); } $row_content.slideUp( 'slow', function () { $row_label.prop( 'colspan', '1' ); $row.removeClass( 'pods-manage-row-expanded' ); $row.removeClass( 'pods-field-new' ); $row.addClass( 'pods-field-updated' ); } ); } $this.css( 'cursor', 'pointer' ); $this.prop( 'disabled', false ); e.preventDefault(); } ) // Handle 'Cancel' action .on( 'click', '.pods-manage-row-actions a.pods-manage-row-cancel', function ( e ) { $( this ).closest( 'tr.pods-manage-row' ).find( 'a.pods-manage-row-edit' ).trigger( 'click' ); e.preventDefault(); } ); }, toggled : function () { $( 'body' ).on( 'click', '.pods-toggled .handlediv, .pods-toggled h3', function () { $( this ).parent().find( '.inside' ).slideToggle(); return false; } ); }, flexible : function ( row ) { var new_row = row, row_counter = 0; if ( new_row[ 0 ] ) { new_row = new_row.html(); // Don't count flexible row row_counter = -1; } row_counter += $( 'tr.pods-manage-row' ).length; if ( 'undefined' != typeof new_row && null !== new_row ) { // Handle 'Add' action $( '.pods-manage-row-add' ).on( 'click', 'a', function ( e ) { var $this = $( this ), add_row, $new_row, $tbody; e.preventDefault(); $this.css( 'cursor', 'default' ); $this.prop( 'disabled', true ); row_counter++; add_row = new_row.replace( /__1/gi, row_counter ).replace( /--1/gi, row_counter ); $tbody = $this.parent().parent().find( 'tbody.pods-manage-list' ); $tbody.find( 'tr.no-items' ).hide(); $tbody.append( '<tr id="row-' + row_counter + '" class="pods-manage-row pods-field-new pods-field-' + row_counter + ' pods-submittable-fields" valign="top">' + add_row + '</tr>' ); $new_row = $tbody.find( 'tr#row-' + row_counter ); // Duct tape to handle fields added dynamically window.PodsDFV.init(); $new_row.data( 'row', row_counter ); $new_row.find( '.pods-dependency .pods-depends-on' ).hide(); $new_row.find( '.pods-dependency .pods-excludes-on' ).hide(); $new_row.find( '.pods-manage-row-wrapper' ).hide( 0, function () { $new_row.find( 'a.row-label.pods-manage-row-edit' ).trigger( 'click' ); } ); $( '.pods-tabs .pods-tab:first a', $new_row ).addClass( 'selected' ); $( '.pods-tab-group', $new_row ).find( '.pods-tab:first' ).show(); if ( $.fn.sortable && $tbody.hasClass( 'pods-manage-sortable' ) ) { $tbody.sortable( 'refresh' ); } $( 'tr.pods-manage-row' ).removeClass( 'alternate' ); $( 'tr.pods-manage-row:even' ).addClass( 'alternate' ); methods[ 'sluggables' ]( $new_row ); $this.css( 'cursor', 'pointer' ); $this.prop( 'disabled', false ); $( document ).Pods( 'qtip', $new_row ); methods[ 'scroll' ]( $new_row ); } ); // Handle 'Duplicate' action $( 'tbody.pods-manage-list' ).on( 'click', 'a.pods-manage-row-duplicate', function ( e ) { var $this = $( this ), add_row, field_data, $tbody, $row, $row_label, $row_content, $new_row, $new_row_label, $new_row_content; e.preventDefault(); $this.css( 'cursor', 'default' ); $this.prop( 'disabled', true ); $row = $this.closest( 'tr.pods-manage-row' ); $row_label = $row.find( 'td.pods-manage-row-label' ); $row_content = $row_label.find( 'div.pods-manage-row-wrapper' ); field_data = jQuery.parseJSON( $row_content.find( 'input.field_data' ).val() ); row_counter++; add_row = new_row.replace( /__1/gi, row_counter ).replace( /--1/gi, row_counter ); $tbody = $this.closest( 'tbody.pods-manage-list' ); $tbody.find( 'tr.no-items' ).hide(); $tbody.append( '<tr id="row-' + row_counter + '" class="pods-manage-row pods-field-init pods-field-new pods-field-duplicated pods-field-' + row_counter + ' pods-submittable-fields" valign="top">' + add_row + '</tr>' ); $new_row = $tbody.find( 'tr#row-' + row_counter ); $new_row_label = $new_row.find( 'td.pods-manage-row-label' ); $new_row_content = $new_row_label.find( 'div.pods-manage-row-wrapper' ); // Duct tape to handle fields added dynamically window.PodsDFV.init(); field_data[ 'name' ] += '_copy'; field_data[ 'label' ] += ' (' + PodsI18n.__( 'Copy' ) + ')'; field_data[ 'id' ] = 0; $new_row_label.find( 'a.pods-manage-row-edit.row-label' ).html( field_data[ 'label' ] ); $new_row_content.find( 'input.field_data' ).val( JSON.stringify( field_data ) ); $new_row.data( 'row', row_counter ); $new_row.find( '.pods-dependency .pods-depends-on' ).hide(); $new_row.find( '.pods-dependency .pods-excludes-on' ).hide(); $new_row.find( '.pods-dependency .pods-dependent-toggle' ).each( function () { methods[ 'setup_dependencies' ]( $( this ) ); } ); $new_row.find( '.pods-manage-row-wrapper' ).hide( 0, function () { $new_row.find( 'a.pods-manage-row-edit' ).trigger( 'click' ); } ); $( '.pods-tabs .pods-tab:first a', $new_row ).addClass( 'selected' ); $( '.pods-tab-group', $new_row ).find( '.pods-tab:first' ).show(); if ( $.fn.sortable && $tbody.hasClass( 'pods-manage-sortable' ) ) { $tbody.sortable( 'refresh' ); } $( 'tr.pods-manage-row' ).removeClass( 'alternate' ); $( 'tr.pods-manage-row:even' ).addClass( 'alternate' ); methods[ 'sluggables' ]( $new_row ); $this.css( 'cursor', 'pointer' ); $this.prop( 'disabled', false ); $( document ).Pods( 'qtip', $new_row ); methods[ 'scroll' ]( $new_row ); } ); } // Handle 'Delete' action $( 'tbody.pods-manage-list' ).on( 'click', 'a.submitdelete', function ( e ) { var $this = $( this ); $this.css( 'cursor', 'default' ); $this.prop( 'disabled', true ); // @todo: Make this confirm pretty so that it's inline instead of JS confirm if ( confirm( 'Are you sure you want to delete this field?' ) ) { var $row = $this.closest( 'tr.pods-manage-row' ), $tbody = $this.closest( 'tbody.pods-manage-list' ); $row.animate( {backgroundColor : '#B80000'} ); $row.fadeOut( 'slow', function () { $( this ).remove(); if ( 0 === $( 'tbody.pods-manage-list tr.pods-manage-row' ).length ) $tbody.find( 'tr.no-items' ).show(); } ); if ( $.fn.sortable && $tbody.hasClass( 'pods-manage-sortable' ) ) { $this.closest( 'tbody.pods-manage-list' ).sortable( 'refresh' ); } pods_changed = true; //row_counter--; } $this.css( 'cursor', 'pointer' ); $this.prop( 'disabled', false ); e.preventDefault(); } ); }, confirm : function () { $( 'a.pods-confirm' ).on( 'click', function ( e ) { var $el = $( this ); if ( 'undefined' != typeof $el.data( 'confirm' ) && !confirm( $el.data( 'confirm' ) ) ) { return false; } } ); }, exit_confirm : function () { $( 'form.pods-submittable' ).on( 'change', '.pods-submittable-fields input:not(:button,:submit), .pods-submittable-fields textarea, .pods-submittable-fields select', function () { pods_changed = true; window.onbeforeunload = function () { if ( pods_changed ) return PodsI18n.__( 'Navigating away from this page will discard any changes you have made.' ); } } ); $( 'form.pods-submittable' ).on( 'click', '.submitdelete', function () { pods_changed = false; } ); }, qtip: function ( parentElement ) { let $parentElement = $( parentElement ); let $submittable; if ( $parentElement.hasClass( 'pods-submittable' ) ) { $submittable = $parentElement; } else { $submittable = $parentElement.closest( '.pods-submittable' ); } $parentElement.find( '.pods-qtip' ).each( function ( index, element ) { $( element ).qtip( { content: { attr: 'alt' }, style: { classes: 'ui-tooltip-light ui-tooltip-shadow ui-tooltip-rounded' }, show: { effect: function ( offset ) { $( this ).fadeIn( 'fast' ); } }, hide: { fixed: true, delay: 300 }, position: { container: $submittable, my: 'bottom left', adjust: { y: -14 } } } ); } ); }, scroll: function ( selector, callback ) { var offset = 10; if ( $( '#wpadminbar' )[ 0 ] ) offset += $( '#wpadminbar' ).height(); $( 'html, body' ).animate( { scrollTop : $( selector ).offset().top - offset }, 'slow', callback ); }, scroll_to : function () { $( '.pods-admin' ).on( 'click', 'a.pods-scroll-to', function ( e ) { e.preventDefault(); methods[ 'scroll' ]( '#' + this.hash ); } ); } }; $.fn.Pods = function ( method ) { if ( methods[ method ] ) { return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ) ); } // Don't need this part (yet) /* else if ( typeof method === 'object' || !method ) { return methods.init.apply( this, arguments ); } */ else { $.error( 'Method ' + method + ' does not exist on jQuery.Pods' ); } }; } )( jQuery );