1 2var GFFrontendFeeds = function( args ) { 3 4 var self = this, 5 $ = jQuery; 6 7 /** 8 * Initialize Feed Ordering 9 */ 10 self.init = function() { 11 12 // Assign options to instance. 13 self.options = args; 14 15 self.triggerInputIds = self.getTriggerInputIds( self.options.feeds ); 16 17 self.activeFeeds = []; 18 19 self.evaluateFeeds(); 20 21 self.bindEvents(); 22 23 }; 24 25 self.bindEvents = function() { 26 27 gform.addAction( 'gform_input_change', function( elem, formId, inputId ) { 28 29 var fieldId = parseInt( inputId ) + ''; 30 var isTriggeredInput = $.inArray( inputId, self.triggerInputIds ) !== -1 || $.inArray( fieldId , self.triggerInputIds ) !== -1 ; 31 32 if( self.options.formId == formId && isTriggeredInput ) { 33 self.evaluateFeeds(); 34 } 35 } ); 36 37 }; 38 39 self.evaluateFeeds = function() { 40 41 var feed, isMatch, isActivated; 42 43 for( i = 0; i < self.options.feeds.length; i++ ) { 44 45 feed = self.options.feeds[ i ]; 46 isMatch = self.evaluateFeed( feed, self.options.formId ); 47 isActivated = self.isFeedActivated( feed ); 48 49 if( ! isMatch && isActivated !== null ) { 50 self.deactivateFeed( feed ); 51 } else if( isMatch && ! isActivated && ( ! feed.isSingleFeed || ( feed.isSingleFeed && self.hasPriority( feed.feedId, feed.addonSlug ) ) ) ) { 52 self.activateFeed( feed ); 53 } 54 55 } 56 57 /** 58 * Fires after the conditional logic on the form has been evaluated. 59 * 60 * @since 2.4 61 * 62 * @param array $feeds A collection of feed objects. 63 * @param int $formId The form id. 64 */ 65 gform.doAction( 'gform_frontend_feeds_evaluated', self.options.feeds, self.options.formId, self ); 66 gform.doAction( 'gform_frontend_feeds_evaluated_{0}'.format( self.options.formId ), self.options.feeds, self.options.formId, self ); 67 gform.doAction( 'gform_{0}_frontend_feeds_evaluated'.format( feed.addonSlug ), self.options.feeds, self.options.formId, self ); 68 gform.doAction( 'gform_{0}_frontend_feeds_evaluated_{0}'.format( feed.addonSlug, self.options.formId ), self.options.feeds, self.options.formId, self ); 69 70 }; 71 72 self.evaluateFeed = function( feed, formId ) { 73 74 // Feeds with no configured conditional logic always a match. 75 if( ! feed.conditionalLogic ) { 76 return true; 77 } 78 79 return gf_get_field_action( formId, feed.conditionalLogic ) == 'show'; 80 }; 81 82 self.getTriggerInputIds = function() { 83 var inputIds = []; 84 for( var i = 0; i < self.options.feeds.length; i++ ) { 85 86 var feed = self.options.feeds[ i ]; 87 88 if( ! feed.conditionalLogic ) { 89 continue; 90 } 91 92 for( var j = 0; j < feed.conditionalLogic.rules.length; j++ ) { 93 var rule = self.options.feeds[i].conditionalLogic.rules[j]; 94 if( $.inArray( rule.fieldId, inputIds ) == -1 ) { 95 inputIds.push( rule.fieldId ); 96 } 97 } 98 99 } 100 return inputIds; 101 }; 102 103 self.isFeedActivated = function( feed ) { 104 105 if( typeof feed != 'object' ) { 106 feed = self.getFeed( feed ); 107 if( ! feed ) { 108 return false; 109 } 110 } 111 112 return typeof feed.isActivated != 'undefined' ? feed.isActivated : null; 113 }; 114 115 self.getFeed = function( feedId ) { 116 for( var i = 0; i < self.options.feeds.length; i++ ) { 117 var feed = self.options.feeds[ i ]; 118 if( feed.feedId == feedId ) { 119 return feed; 120 } 121 } 122 return false; 123 }; 124 125 self.getFeedsByAddon = function( addonSlug, currentFeed, onlyActive ) { 126 var feeds = []; 127 for( var i = 0; i < self.options.feeds.length; i++ ) { 128 var feed = self.options.feeds[ i ]; 129 if( feed.addonSlug == addonSlug 130 && ! ( currentFeed && feed.feedId == currentFeed.feedId ) 131 ) { 132 if( onlyActive ) { 133 if( self.isFeedActivated( feed ) ) { 134 feeds.push( feed ); 135 } 136 } else { 137 feeds.push( feed ); 138 } 139 140 } 141 } 142 return feeds; 143 }; 144 145 self.activateFeed = function( feeds ) { 146 147 if( feeds.feedId ) { 148 feeds = [ feeds ]; 149 } 150 151 for( var i = 0; i < feeds.length; i++ ) { 152 153 var feed = feeds[ i ]; 154 155 feed.isActivated = true; 156 157 /** 158 * Fires after the conditional logic on the form has been evaluated and the feed has been found to be active. 159 * 160 * @since 2.4 161 * 162 * @param array $feeds A collection of feed objects. 163 * @param int $formId The form id. 164 */ 165 166 gform.doAction( 'gform_frontend_feed_activated', feed, self.options.formId ); 167 gform.doAction( 'gform_frontend_feed_activated_{0}'.format( self.options.formId ), feed, self.options.formId ); 168 gform.doAction( 'gform_{0}_frontend_feed_activated'.format( feed.addonSlug ), feed, self.options.formId ); 169 gform.doAction( 'gform_{0}_frontend_feed_activated_{0}'.format( feed.addonSlug, self.options.formId ), feed, self.options.formId ); 170 171 if( feed.isSingleFeed ) { 172 self.deactivateFeed( self.getFeedsByAddon( feed.addonSlug, feed ) ); 173 } 174 175 } 176 177 }; 178 179 self.deactivateFeed = function( feeds ) { 180 181 if( feeds.feedId ) { 182 feeds = [ feeds ]; 183 } 184 185 for( var i = 0; i < feeds.length; i++ ) { 186 187 var feed = feeds[ i ], 188 isActivated = self.isFeedActivated( feed ); 189 190 if( isActivated === null || isActivated === false ) { 191 continue; 192 } 193 194 feed.isActivated = false;
195 196 /** 197 * Fires after the conditional logic on the form has been evaluated and the feed has become inactive. 198 * 199 * @since 2.4 200 * 201 * @param array $feeds A collection of feed objects. 202 * @param int $formId The form id. 203 */ 204 gform.doAction( 'gform_frontend_feed_deactivated', feed, self.options.formId ); 205 gform.doAction( 'gform_frontend_feed_deactivated_{0}'.format( self.options.formId ), feed, self.options.formId ); 206 gform.doAction( 'gform_{0}_frontend_feed_deactivated'.format( feed.addonSlug ), feed, self.options.formId ); 207 gform.doAction( 'gform_{0}_frontend_feed_deactivated_{0}'.format( feed.addonSlug, self.options.formId ), feed, self.options.formId ); 208 209 } 210 211 }; 212 213 self.hasPriority = function( feedId, addonSlug ) { 214 215 var addonFeeds = self.getFeedsByAddon( addonSlug ); 216 217 for( var i = 0; i <= addonFeeds.length; i++ ) { 218 219 var feed = addonFeeds[i]; 220 221 if( feed.feedId != feedId && feed.isActivated ) { 222 return false; 223 } else if ( feed.feedId == feedId ) { 224 return true; 225 } 226 227 } 228 229 return false; 230 }; 231 232 this.init(); 233 234};
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.