1(function( $ ) { 2 'use strict'; 3 4 /** 5 * Hide all blocks depending from $blocks[index] recursively. 6 * @param {*} 7 */ 8 function hideDependentBlocks(index) { 9 var $children = $('.msfp-block-conditional[data-prec-block-id=' + index + ']'); 10 $children.each(function(i, element) { 11 var $child = $(element); 12 $child.slideUp("fast"); 13 hideDependentBlocks($('.fw-step-block').index($child)); 14 }); 15 } 16 17 function prepareConditionals() { 18 var $blocks = $('.fw-step-block:not(.msfp-block-conditional)'); 19 $('.msfp-block-conditional').each(function(index, element) { 20 var $block = $(element); 21 var precBlockIndex = $block.attr('data-prec-block-id'); 22 var precBlock = $blocks[precBlockIndex]; 23 var precBlockType = $(precBlock).attr('data-type'); 24 var precOp = $block.attr('data-prec-op'); 25 var precValue = $block.attr('data-prec-value'); 26 var visible = $block.attr('data-visible'); 27 28 // set event handlers for precondition input fields 29 var evaluate = function(event){ 30 console.log("EVALUATING " + $(event.target).val() + " " + precOp + ' ' + precValue); 31 console.log(event.target); 32 var reveal = false; 33 // evaluate conditions and show/hide the conditional block $block 34 switch (precOp) { 35 case 'eq': 36 if (precBlockType === 'fw-date') { 37 var date = new Date(precValue); 38 var inputDate = new Date($(event.target).val()); 39 reveal = date.getTime() === inputDate.getTime(); 40 } else if (precBlockType === 'fw-radio') { 41 if ($(event.target).attr('type') === 'checkbox') { 42 if ($(event.target).next('label').text() === precValue) { 43 reveal = event.target.checked; 44 } else { 45 // We are not interested in this checkbox. 46 return; 47 } 48 } else { 49 reveal = $(event.target).next('label').text() === precValue; 50 } 51 } else { 52 reveal = $(event.target).val() === precValue; 53 } 54 break; 55 case 'fi': 56 reveal = $(event.target).val() !== ''; 57 break; 58 case 'lt': 59 if (precBlockType === 'fw-date') { 60 var date = new Date(precValue); 61 var inputDate = new Date($(event.target).val()); 62 reveal = date.getTime() > inputDate.getTime(); 63 } else if (precBlockType === 'fw-numeric') { 64 var targetNumber = parseInt(precValue); 65 var inputNumber = parseInt($(event.target).val()); 66 reveal = inputNumber < targetNumber; 67 } 68 break; 69 case 'gt': 70 if (precBlockType === 'fw-date') { 71 var date = new Date(precValue); 72 var inputDate = new Date($(event.target).val()); 73 reveal = date.getTime() < inputDate.getTime(); 74 } else if (precBlockType === 'fw-numeric') { 75 var targetNumber = parseInt(precValue); 76 var inputNumber = parseInt($(event.target).val()); 77 reveal = inputNumber > targetNumber; 78 } 79 break; 80 } 81 //console.log("EVALUATED as " + reveal); 82 if (visible === 'hide') { 83 reveal = !reveal; 84 } 85 if (reveal) { 86 $block.slideDown("fast"); 87 } else { 88 $block.slideUp("fast"); 89 // hide all blocks depending from this block 90 hideDependentBlocks($blocks.index($block.find('.fw-step-block:not(.msfp-block-conditional)'))); 91 } 92 }; // end evaluate 93 94 switch (precBlockType) { 95 case 'fw-date': 96 case 'fw-radio': 97 $(precBlock).find('input').on("change", evaluate); 98 break; 99 case 'fw-select': 100 $(precBlock).find('select').on("change", evaluate); 101 break; 102 default: 103 $(precBlock).find('input, textarea').focusout(evaluate); 104 break; 105 } 106 107 // initial show or hide conditionals 108 if (visible === 'show') { 109 $block.hide(); 110 } else if (visible === 'hide') { 111 $block.show(); 112 } 113 }); 114 } 115 116 117 $( document ).ready(function() { 118 /* Allow skipping registration if user is logged in */ 119 if ($('.msfp-loggedin')) { 120 $('.msfp-loggedin').closest('.fw-step-block').attr('data-required', false); 121 } 122 prepareConditionals(); 123 }); 124 125})( jQuery );
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.