1/** 2 * Popup Maker Popup Analytics v1.1 3 */ 4 (function ($, document, undefined) { 5 "use strict"; 6 7 $.fn.popmake.conversion_trigger = null; 8 9 function trackForms(popup) { 10 var $popup = $(popup), 11 settings = PUM.getSettings(popup), 12 $forms = $('form, .nf-form-cont', $popup); 13 14 $forms.each(function () { 15 var $form = $(this), 16 type; 17 18 if ($('[name="popmake_pa_conversion_check"]', $form).length) { 19 return; 20 } 21 22 if ($form.hasClass('pum_sub_form')) { 23 type = 'pum'; 24 } else if ($form.find('.gform_body').length) { 25 type = 'gravityforms'; 26 } else if ($form.hasClass('ninja-forms-form')) { 27 type = 'ninjaforms_v2'; 28 } else if ($form.hasClass('nf-form-cont') || $form.parents('.nf-form-wrap').length) { 29 type = 'ninjaforms_v3'; 30 } else if ($form.hasClass('wpcf7-form')) { 31 type = 'contactform7'; 32 } 33 34 switch (type) { 35 case 'ninjaforms_v3': 36 if (typeof Marionette !== 'undefined' && typeof nfRadio !== "undefined") { 37 var formID = $form.attr('id').replace('nf-form-', '').replace('-cont', ''); 38 39 $form.find('form').addClass('popmake_pa'); 40 41 $popup 42 .on('pumAfterOpen', function () { 43 $form.find('form').addClass('popmake_pa'); 44 nfRadio.channel('form-' + formID).request('add:extra', 'pum_popup_id', settings.id); 45 // nfRadio.channel('form-' + formID).request('add:extra', 'pum_open_event_id', ''); 46 }) 47 .on('pumOpenEventIdChanged', function (event, event_id) { 48 nfRadio.channel('form-' + formID).request('add:extra', 'pum_open_event_id', event_id.toString()); 49 }); 50 } 51 52 break; 53 54 case 'pum': 55 case 'contactform7': 56 case 'ninjaforms_v2': 57 case 'gravityforms': 58 $popup 59 .on('pumAfterOpen', function () { 60 $form.append('<input type="hidden" name="_popmake_pa_conversion_check" value="' + settings.id + '"/>'); 61 $form.append('<input type="hidden" name="_popmake_pa_open_event_id" value=""/>'); 62 }) 63 .on('pumOpenEventIdChanged', function (event, event_id) { 64 $('[name="_popmake_pa_open_event_id"]', $form).val(event_id); 65 }); 66 67 $form 68 .addClass('popmake_pa') 69 .bindFirst('submit', function () { 70 $.fn.popmake.conversion_trigger = $form.attr('id') || $.fn.popmake.utilities.getXPath($form); 71 }); 72 break; 73 } 74 } 75 ); 76 77 } 78 79 function trackConversion() { 80 $(document).trigger('pumConversion'); 81 } 82 83 if ($.fn.bindFirst === undefined) { 84 $.fn.bindFirst = function (which, handler) { 85 var $el = $(this), 86 events, 87 registered; 88 89 $el.unbind(which, handler); 90 $el.bind(which, handler); 91 92 events = $._data($el[0]).events; 93 registered = events[which]; 94 registered.unshift(registered.pop()); 95 96 events[which] = registered; 97 }; 98 } 99 100 if ($.fn.outerHtml === undefined) { 101 $.fn.outerHtml = function () { 102 var $el = $(this).clone(), 103 $temp = $('<div/>').append($el); 104 105 return $temp.html(); 106 }; 107 } 108 109 $(document) 110 .on('pumConversion', function () { 111 var $popup = PUM.getPopup($.fn.popmake.last_open_popup), 112 ajaxData = { 113 'action': 'popmake_pa', // Calls our wp_ajax_nopriv_popmake_pa 114 'popup_id': $popup.data('popmake').id, 115 'event_type': 'conversion', 116 'open_event_id': $popup.data('open-event-id'), 117 'trigger': $.fn.popmake.conversion_trigger, 118 '_ajax_nonce': popmake_pa.nonce 119 }; 120 121 $.ajax({ 122 type: 'POST', 123 dataType: 'json', 124 url: ajaxurl, 125 async: false, 126 data: ajaxData 127 }); 128 }); 129 130 $('.pum') 131 .on('pumInit', function () { 132 var $popup = PUM.getPopup(this), 133 settings = $popup.data('popmake'), 134 convert_on = settings.meta.convert_on; 135 136 trackForms(this); 137 138 if (convert_on !== undefined && convert_on !== '') { 139 switch (convert_on) { 140 case 'form_submit': 141 $popup.find('form').filter(':not(.popmake_pa)').on('submit.popmake_pa', function () { 142 $.fn.popmake.conversion_trigger = $(this).attr('id') || 'Form Submit'; 143 trackConversion(); 144 $(this).off('submit.popmake_pa'); 145 }); 146 break; 147 case 'button_click': 148 $popup.find('button, .button, .btn').on('click', function () { 149 console.log($(this)); 150 $.fn.popmake.conversion_trigger = $(this).attr('id') || 'Button Click'; 151 trackConversion(); 152 }); 153 break; 154 case 'link_click': 155 $popup.find('a').on('click', function () { 156 $.fn.popmake.conversion_trigger = $(this).attr('id') || 'Link Click'; 157 trackConversion(); 158 }); 159 break; 160 } 161 } 162 163 }) 164 .on('pumBeforeOpen.analytics', function () { 165 var $popup = PUM.getPopup(this), 166 ajaxData = { 167 'action': 'popmake_pa', // Calls our wp_ajax_nopriv_popmake_pa 168 'popup_id': $popup.data('popmake').id, 169 'event_type': 'open', 170 'trigger': null, 171 '_ajax_nonce': popmake_pa.nonce 172 }, 173 $last_trigger = null; 174 175 try { 176 $last_trigger = $($.fn.popmake.last_open_trigger); 177 } catch (error) { 178 $last_trigger = $(); 179 } 180 181 if ($last_trigger.length) { 182 ajaxData.trigger = $last_trigger.eq(0).outerHtml(); 183 } else if ($.fn.popmake.last_open_trigger !== null) { 184 ajaxData.trigger = $.fn.popmake.last_open_trigger.toString(); 185 } 186 187 $.ajax({ 188 type: 'POST', 189 dataType: 'json', 190 url: ajaxurl, 191 data: ajaxData, 192 success: function (data) { 193 if (data.success && data.event_id > 0) { 194 $popup.data('open-event-id', data.event_id); 195 $popup.trigger('pumOpenEventIdChanged', [data.event_id]); 196 } else { 197 $popup.data('open-event-id', null); 198 } 199 } 200 }); 201 202 // TODO experiment with $(window).on('beforeunload' over $window.on('unload' 203 $(window).one('unload.popmake_pa', function () { 204 ajaxData = { 205 'action': 'popmake_pa', // Calls our wp_ajax_nopriv_popmake_pa 206 'popup_id': $popup.data('popmake').id, 207 'event_type': 'close', 208 'open_event_id': $popup.data('open-event-id'), 209 'trigger': 'Browser Closed', 210 '_ajax_nonce': popmake_pa.nonce 211 }; 212 213 $.ajax({ 214 type: 'POST', 215 dataType: 'json', 216 url: ajaxurl, 217 async: false, 218 data: ajaxData 219 }); 220 }); 221 222 }) 223 .on('pumBeforeClose.analytics', function () { 224 var $popup = PUM.getPopup(this), 225 ajaxData = { 226 'action': 'popmake_pa', // Calls our wp_ajax_nopriv_popmake_pa 227 'popup_id': $popup.data('popmake').id, 228 'event_type': 'close', 229 'open_event_id': $popup.data('open-event-id'), 230 'trigger': $.fn.popmake.last_close_trigger, 231 '_ajax_nonce': popmake_pa.nonce 232 }; 233 234 $(window).off('unload.popmake_pa'); 235 236 $.ajax({ 237 type: 'POST', 238 dataType: 'json', 239 url: ajaxurl, 240 data: ajaxData 241 }); 242 }); 243}(jQuery, document));
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.