Files
ultimatemember/assets/js/um-conditional.js
T
2017-06-09 21:59:50 +08:00

362 lines
12 KiB
JavaScript

jQuery(document).ready(function() {
var um_live_field;
var um_live_value;
var um_field_conditions_array = {};
var um_field_relations = {};
var um_field_added = [];
var um_field_loaded = false;
var um_field_do_init = false;
function um_field_init(){
jQuery('.um-field[data-key]').each(function(){
um_field_set_conditions( jQuery(this), true );
});
um_field_relationship();
um_field_apply_conditions();
um_field_loaded = true;
}
function um_field_set_conditions( um_field_dom, add_fade ){
var um_field_key = um_field_dom.data('key');
var arr_field = [];
for (var i = 0; i < 5; i++) {
var action0 = um_field_dom.data('cond-'+i+'-action');
var field0 = um_field_dom.data('cond-'+i+'-field');
var operator0 = um_field_dom.data('cond-'+i+'-operator');
var value0 = um_field_dom.data('cond-'+i+'-value');
if( typeof value0 !== 'undefined' && um_field_loaded == false ){
arr_field.push({
child: um_field_key,
action: action0,
field: field0,
operator: operator0,
value: value0
});
}
} // end for
if( jQuery.inArray( um_field_key, um_field_added ) <= -1 && um_field_loaded == false ){
um_field_added.push( um_field_key );
um_field_conditions_array[ um_field_key ] = arr_field;
}
}
function um_field_apply_conditions(){
var field_results = {};
jQuery.each( um_field_added, function( i, field_key ){
if( um_field_relations[ field_key ].length <= 0 ){
um_field_relations[ field_key ] = [{
child: field_key,
action:'child',
field: '',
operator: '',
}];
}
jQuery.each( um_field_relations[ field_key ], function( ii, conditions ){
var add_fade = true;
var action0 = conditions.action;
var value0 = conditions.value;
var operator0 = conditions.operator;
var field0 = conditions.field;
var um_field_parent_dom = '';
um_field_parent_dom = jQuery('.um-field[data-key="'+field_key+'"]:visible').find('input[type=text],textarea,input[type=checkbox],input[type=radio],select,[class=um-field-block]');
var um_field_data = um_get_field_data( um_field_parent_dom );
var um_live_field = um_field_data.key;
var um_live_value = um_field_data.value;
var um_field_child_dom = jQuery('.um-field[data-key="'+conditions.child+'"]').find('input[type=text],textarea,input[type=checkbox],input[type=radio],select,[class=um-field-block]');
var um_field_child_dom_hide = jQuery('.um-field[data-key="'+conditions.child+'"]');
if ( action0 == 'show' && typeof value0 !== 'undefined' ) {
if ( operator0 == 'empty' ) {
if ( !um_live_value || um_live_value == '' ) {
um_field_show( um_field_child_dom, add_fade, operator0, um_live_field , field_key );
field_results[ conditions.child ] = { act: action0, op: operator0 };
}else{
um_field_child_dom_hide.hide();
field_results[ conditions.child ] = { act: 'hide', op: operator0 };
}
}
if ( operator0 == 'not empty' ) {
if ( um_live_value && um_live_value != '' ) {
um_field_show( um_field_child_dom, add_fade, operator0, um_live_field , field_key );
field_results[ conditions.child ] = { act: action0, op: operator0 };
}else{
um_field_child_dom_hide.hide();
field_results[ conditions.child ] = { act: 'hide', op: operator0 };
}
}
if ( operator0 == 'equals to' ) {
if ( value0 == um_live_value ) {
um_field_show( um_field_child_dom, add_fade, operator0, um_live_field , field_key );
field_results[ conditions.child ] = { act: action0, op: operator0 };
}else{
um_field_child_dom_hide.hide();
field_results[ conditions.child ] = { act: 'hide', op: operator0 };
}
}
if ( operator0 == 'not equals' ) {
if ( jQuery.isNumeric( value0 ) && parseInt( um_live_value ) != parseInt( value0 ) && um_live_value ) {
um_field_show( um_field_child_dom, add_fade, operator0, um_live_field , field_key );
field_results[ conditions.child ] = { act: action0, op: operator0 };
} else if ( !jQuery.isNumeric( value0 ) && value0 != um_live_value ) {
um_field_show( um_field_child_dom, add_fade, operator0, um_live_field , field_key );
field_results[ conditions.child ] = { act: action0, op: operator0 };
}else{
um_field_child_dom_hide.hide();
field_results[ conditions.child ] = { act: 'hide', op: operator0 };
}
}
if ( operator0 == 'greater than' ) {
if ( jQuery.isNumeric( value0 ) && parseInt( um_live_value ) > parseInt( value0 ) ) {
um_field_show( um_field_child_dom, add_fade, operator0, um_live_field , field_key );
field_results[ conditions.child ] = { act: action0, op: operator0 };
}else{
um_field_child_dom_hide.hide();
field_results[ conditions.child ] = { act: 'hide', op: operator0 };
}
}
if ( operator0 == 'less than' ) {
if ( jQuery.isNumeric( value0 ) && parseInt( um_live_value ) < parseInt( value0 ) && um_live_value ) {
um_field_show( um_field_child_dom, add_fade, operator0, um_live_field , field_key );
field_results[ conditions.child ] = { act: action0, op: operator0 };
}else{
um_field_child_dom_hide.hide();
field_results[ conditions.child ] = { act: 'hide', op: operator0 };
}
}
if ( operator0 == 'contains' ) {
if ( um_live_value && um_live_value.indexOf( value0 ) >= 0 ) {
um_field_show( um_field_child_dom, add_fade, operator0, um_live_field , field_key );
field_results[ conditions.child ] = { act: action0, op: operator0 };
}else{
um_field_child_dom_hide.hide();
field_results[ conditions.child ] = { act: 'hide', op: operator0 };
}
}
}
if ( action0 == 'hide' && typeof value0 !== 'undefined' ) {
if ( operator0 == 'empty' ) {
if ( !um_live_value || um_live_value == '' ) {
um_field_hide( um_field_child_dom, add_fade, operator0, um_live_field , field_key );
field_results[ conditions.child ] = { act: action0, op: operator0 };
}else{
field_results[ conditions.child ] = { act: 'show', op: operator0 };
}
}
if ( operator0 == 'not empty' ) {
if ( um_live_value && um_live_value != '' ) {
um_field_hide( um_field_child_dom, add_fade, operator0, um_live_field , field_key );
field_results[ conditions.child ] = { act: action0, op: operator0 };
}else{
field_results[ conditions.child ] = { act: 'show', op: operator0 };
}
}
if ( operator0 == 'equals to' ) {
if ( value0 == um_live_value ) {
um_field_hide( um_field_child_dom, add_fade, operator0, um_live_field , field_key );
field_results[ conditions.child ] = { act: action0, op: operator0 };
}else{
field_results[ conditions.child ] = { act: 'show', op: operator0 };
}
}
if ( operator0 == 'not equals' ) {
if ( jQuery.isNumeric( value0 ) && parseInt( um_live_value ) != parseInt( value0 ) && um_live_value ) {
um_field_hide( um_field_child_dom, add_fade, operator0, um_live_field , field_key );
field_results[ conditions.child ] = { act: action0, op: operator0 };
} else if ( !jQuery.isNumeric( value0 ) && value0 != um_live_value ) {
um_field_hide( um_field_child_dom, add_fade, operator0, um_live_field , field_key );
field_results[ conditions.child ] = { act: action0, op: operator0 };
}else{
um_field_child_dom_hide.show();
field_results[ conditions.child ] = { act: 'show', op: operator0 };
}
}
if ( operator0 == 'greater than' ) {
if ( jQuery.isNumeric( value0 ) && parseInt( um_live_value ) > parseInt( value0 ) ) {
um_field_hide( um_field_child_dom, add_fade, operator0, um_live_field , field_key );
field_results[ conditions.child ] = { act: action0, op: operator0 };
}else{
um_field_child_dom_hide.show();
field_results[ conditions.child ] = { act: 'show', op: operator0 };
}
}
if ( operator0 == 'less than' ) {
if ( jQuery.isNumeric( value0 ) && parseInt( um_live_value ) < parseInt( value0 ) && um_live_value ) {
um_field_hide( um_field_child_dom, add_fade, operator0, um_live_field , field_key );
field_results[ conditions.child ] = { act: action0, op: operator0 };
}else{
field_results[ conditions.child ] = { act: 'show', op: operator0 };
}
}
if ( operator0 == 'contains' ) {
if ( um_live_value && um_live_value.indexOf( value0 ) >= 0 ) {
um_field_hide( um_field_child_dom, add_fade, operator0, um_live_field , field_key );
field_results[ conditions.child ] = { act: action0, op: operator0 };
}else{
field_results[ conditions.child ] = { act: 'show', op: operator0 };
}
}
}
var c_child = field_results[ conditions.child ];
if( action0 == 'child' && typeof c_child !== 'undefined' ){
if( c_child.act == 'hide' ){
jQuery('.um-field[data-key="'+field_key+'"]').hide();
}else if( c_child.act == 'show' ){
jQuery('.um-field[data-key="'+field_key+'"]').show();
}
}
});
});
}
function um_field_show( field, add_fade, optr, k, field_key ){
field = field.parents('.um-field');
if( field.is(':hidden') ){
if( add_fade ){
field.fadeIn(1);
}else{
field.show();
}
//console.log( field_key );
}
}
function um_field_hide( field, add_fade, optr, k, field_key ){
field = field.parents('.um-field');
if( field.is(':visible') ){
if( add_fade ){
field.fadeOut(1);
}else{
field.hide();
}
//console.log( field_key );
}
}
function um_get_field_data( um_field_dom ){
um_live_field = um_field_dom.parents('.um-field').data('key');
um_live_value = um_field_dom.val();
if ( um_field_dom.is(':checkbox') ) {
if ( um_field_dom.parents('.um-field').find('input:checked').length > 1 ) {
um_live_value = '';
um_field_dom.parents('.um-field').find('input:checked').each(function(){
um_live_value = um_live_value + jQuery(this).val() + ' ';
});
} else {
um_live_value = um_field_dom.parents('.um-field').find('input:checked').val();
}
}
if ( um_field_dom.is(':radio') ) {
um_live_value = um_field_dom.parents('.um-field').find('input[type=radio]:checked').val();
}
return {
key: um_live_field,
value: um_live_value
};
}
function um_field_relationship(){
var arr_fields = um_field_conditions_array;
if( um_field_loaded == false ){
jQuery.each( arr_fields, function(k, f) {
var new_arr_field = [];
var arr_um_field_exists = [];
jQuery.each( arr_fields, function(ii,field) {
for (var i = 0; i <= field.length; i++ ){
if( typeof field[ i ] !== 'undefined' ){
if( k == field[ i ].field ){
new_arr_field.push( field[ i ] );
arr_um_field_exists.push( field[ i ].child );
}
}
}
});
um_field_relations[ k ] = new_arr_field;
});
}
}
jQuery(document).on('input change', '.um-field input[type=text]', function(){
if( um_field_do_init ){
um_field_init();
}
});
jQuery(document).on('change', '.um-field select, .um-field input[type=radio], .um-field input[type=checkbox]', function(){
if( um_field_do_init ){
um_field_init();
}
});
um_field_init();
um_field_do_init = true;
});