Changeset 3039607
- Timestamp:
- 02/22/2024 09:24:03 AM (2 years ago)
- Location:
- goal-tracker-ga
- Files:
-
- 3 deleted
- 5 edited
- 34 copied
-
tags/1.1.2 (copied) (copied from goal-tracker-ga/trunk)
-
tags/1.1.2/README.txt (copied) (copied from goal-tracker-ga/trunk/README.txt) (2 diffs)
-
tags/1.1.2/admin/class-wp-goal-tracker-ga-admin.php (copied) (copied from goal-tracker-ga/trunk/admin/class-wp-goal-tracker-ga-admin.php)
-
tags/1.1.2/apps/basic/build/index.asset.php (copied) (copied from goal-tracker-ga/trunk/apps/basic/build/index.asset.php)
-
tags/1.1.2/apps/basic/build/index.css (copied) (copied from goal-tracker-ga/trunk/apps/basic/build/index.css)
-
tags/1.1.2/apps/basic/build/index.js (copied) (copied from goal-tracker-ga/trunk/apps/basic/build/index.js)
-
tags/1.1.2/apps/basic/package.json (copied) (copied from goal-tracker-ga/trunk/apps/basic/package.json) (1 diff)
-
tags/1.1.2/apps/basic/src/components/CustomEvents.tsx (copied) (copied from goal-tracker-ga/trunk/apps/basic/src/components/CustomEvents.tsx)
-
tags/1.1.2/apps/basic/src/components/FormTracking.tsx (copied) (copied from goal-tracker-ga/trunk/apps/basic/src/components/FormTracking.tsx)
-
tags/1.1.2/apps/basic/src/components/ProPromo.js (deleted)
-
tags/1.1.2/apps/basic/src/components/ProPromo.tsx (copied) (copied from goal-tracker-ga/trunk/apps/basic/src/components/ProPromo.tsx)
-
tags/1.1.2/apps/basic/src/components/Settings.tsx (copied) (copied from goal-tracker-ga/trunk/apps/basic/src/components/Settings.tsx)
-
tags/1.1.2/apps/basic/src/components/VideoTracking.js (copied) (copied from goal-tracker-ga/trunk/apps/basic/src/components/VideoTracking.js)
-
tags/1.1.2/apps/basic/src/components/WooTracking.tsx (copied) (copied from goal-tracker-ga/trunk/apps/basic/src/components/WooTracking.tsx)
-
tags/1.1.2/apps/basic/src/components/upgrade/ContactForm7Copy.tsx (copied) (copied from goal-tracker-ga/trunk/apps/basic/src/components/upgrade/ContactForm7Copy.tsx)
-
tags/1.1.2/apps/basic/src/components/upgrade/UserTrackingCopy.tsx (copied) (copied from goal-tracker-ga/trunk/apps/basic/src/components/upgrade/UserTrackingCopy.tsx)
-
tags/1.1.2/apps/basic/src/components/upgrade/WooCopy.tsx (copied) (copied from goal-tracker-ga/trunk/apps/basic/src/components/upgrade/WooCopy.tsx)
-
tags/1.1.2/apps/basic/src/index.tsx (copied) (copied from goal-tracker-ga/trunk/apps/basic/src/index.tsx)
-
tags/1.1.2/common/ui/src/assets/images/Logo-track-ecom2.svg (copied) (copied from goal-tracker-ga/trunk/common/ui/src/assets/images/Logo-track-ecom2.svg)
-
tags/1.1.2/common/ui/src/components/EventsTableHeader.tsx (copied) (copied from goal-tracker-ga/trunk/common/ui/src/components/EventsTableHeader.tsx)
-
tags/1.1.2/common/ui/src/components/Fieldset.tsx (copied) (copied from goal-tracker-ga/trunk/common/ui/src/components/Fieldset.tsx)
-
tags/1.1.2/common/ui/src/components/FieldsetGroup.tsx (copied) (copied from goal-tracker-ga/trunk/common/ui/src/components/FieldsetGroup.tsx)
-
tags/1.1.2/common/ui/src/components/HeaderTitle.tsx (copied) (copied from goal-tracker-ga/trunk/common/ui/src/components/HeaderTitle.tsx)
-
tags/1.1.2/common/ui/src/components/NavBanner.js (deleted)
-
tags/1.1.2/common/ui/src/components/SlideBanner.tsx (copied) (copied from goal-tracker-ga/trunk/common/ui/src/components/SlideBanner.tsx)
-
tags/1.1.2/common/ui/src/components/buttons (copied) (copied from goal-tracker-ga/trunk/common/ui/src/components/buttons)
-
tags/1.1.2/common/ui/src/components/index.tsx (copied) (copied from goal-tracker-ga/trunk/common/ui/src/components/index.tsx)
-
tags/1.1.2/common/ui/src/components/nav.tsx (copied) (copied from goal-tracker-ga/trunk/common/ui/src/components/nav.tsx)
-
tags/1.1.2/freemius/includes/class-freemius.php (copied) (copied from goal-tracker-ga/trunk/freemius/includes/class-freemius.php)
-
tags/1.1.2/freemius/includes/class-fs-garbage-collector.php (copied) (copied from goal-tracker-ga/trunk/freemius/includes/class-fs-garbage-collector.php)
-
tags/1.1.2/freemius/start.php (copied) (copied from goal-tracker-ga/trunk/freemius/start.php)
-
tags/1.1.2/goal-tracker-ga.php (copied) (copied from goal-tracker-ga/trunk/goal-tracker-ga.php) (2 diffs)
-
tags/1.1.2/includes/class-wp-goal-tracker-ga.php (copied) (copied from goal-tracker-ga/trunk/includes/class-wp-goal-tracker-ga.php) (2 diffs)
-
tags/1.1.2/includes/functions.php (copied) (copied from goal-tracker-ga/trunk/includes/functions.php)
-
tags/1.1.2/public/class-wp-goal-tracker-ga-public.php (copied) (copied from goal-tracker-ga/trunk/public/class-wp-goal-tracker-ga-public.php)
-
tags/1.1.2/public/js/wp-goal-tracker-ga-public.js (copied) (copied from goal-tracker-ga/trunk/public/js/wp-goal-tracker-ga-public.js) (1 diff)
-
tags/1.1.2/public/src/wp-goal-tracker-ga-public.ts (deleted)
-
trunk/README.txt (modified) (2 diffs)
-
trunk/apps/basic/package.json (modified) (1 diff)
-
trunk/goal-tracker-ga.php (modified) (2 diffs)
-
trunk/includes/class-wp-goal-tracker-ga.php (modified) (2 diffs)
-
trunk/public/js/wp-goal-tracker-ga-public.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
goal-tracker-ga/tags/1.1.2/README.txt
r3018646 r3039607 4 4 Tags: analytics, events, wordpress, ga4 5 5 Requires at least: 5.5 6 Tested up to: 6.4. 27 Stable tag: 1.1. 16 Tested up to: 6.4.3 7 Stable tag: 1.1.2 8 8 Requires PHP: 5.6.20 9 9 License: GPLv2 or later … … 78 78 == Changelog == 79 79 80 = 1.1.2 - 2024-02-20 = 81 1. Fixing an issue with video popups 82 80 83 = 1.1.1 - 2024-01-08 = 81 84 1. UI changes -
goal-tracker-ga/tags/1.1.2/apps/basic/package.json
r3018646 r3039607 1 1 { 2 2 "name": "wp-goal-tracker-ga-free", 3 "version": "1.1. 1",3 "version": "1.1.2", 4 4 "description": "WP Goal Tracker GA - Custom Events Tracking for Google Analytics 4", 5 5 "author": "pinewise", -
goal-tracker-ga/tags/1.1.2/goal-tracker-ga.php
r3018646 r3039607 17 17 * Plugin URI: https://www.wpgoaltracker.com/goal-tracker-ga 18 18 * Description: Custom Event Tracking for Google Analytics GA4 19 * Version: 1.1. 119 * Version: 1.1.2 20 20 * Author: pinewise 21 21 * Author URI: https://www.wpgoaltracker.com … … 87 87 define( 'WP_CUSTOM_EVENTS_TRACKER_PATH', plugin_dir_path( __FILE__ ) ); 88 88 define( 'WP_CUSTOM_EVENTS_TRACKER_URL', plugin_dir_url( __FILE__ ) ); 89 define( 'WP_CUSTOM_EVENTS_TRACKER_VERSION', '1.1. 1' );90 define( 'WP_CUSTOM_EVENTS_TRACKER_DB_VERSION', '1.1. 1' );89 define( 'WP_CUSTOM_EVENTS_TRACKER_VERSION', '1.1.2' ); 90 define( 'WP_CUSTOM_EVENTS_TRACKER_DB_VERSION', '1.1.2' ); 91 91 /** 92 92 * The code that runs during plugin activation. -
goal-tracker-ga/tags/1.1.2/includes/class-wp-goal-tracker-ga.php
r3018646 r3039607 269 269 if ( !isset( $options["db_version"] ) ) { 270 270 # it is the first DB convert from version 1.0.0 to 1.0.2 271 $options["db_version"] = "1.1. 1";271 $options["db_version"] = "1.1.2"; 272 272 # set the db_version param for the first time 273 273 # move general settings parameters from the options root to a "general_settings" array. … … 331 331 // plugin management capability 332 332 global $wp_roles ; 333 error_log( json_encode( $wp_roles ) );334 333 foreach ( (array) $roles as $role ) { 335 334 error_log( json_encode( $role["id"] ) ); -
goal-tracker-ga/tags/1.1.2/public/js/wp-goal-tracker-ga-public.js
r3013028 r3039607 1 var __assign = (this && this.__assign) || function () { 2 __assign = Object.assign || function(t) { 1 var __assign = 2 (this && this.__assign) || 3 function () { 4 __assign = 5 Object.assign || 6 function (t) { 3 7 for (var s, i = 1, n = arguments.length; i < n; i++) { 4 s = arguments[i];5 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))6 t[p] = s[p];8 s = arguments[i]; 9 for (var p in s) 10 if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; 7 11 } 8 12 return t; 13 }; 14 return __assign.apply(this, arguments); 15 }; 16 var gtgaMainJs = (function ($) { 17 'use strict'; 18 var _this = this; 19 /** 20 * Binds Download Tracking 21 * 22 * @returns {undefined} 23 */ 24 var VideoPercent = { 25 ZERO: 0, 26 TWENTYFIVE: 25, 27 FIFTY: 50, 28 SEVENTYFIVE: 75, 29 ONEHUNDRED: 100, 30 }; 31 function elementAddedCallback(addedNode) { 32 checkVisibilityEvents(); 33 } 34 var observer = new MutationObserver(function (mutationsList) { 35 mutationsList.forEach(function (mutation) { 36 if (mutation.type === 'childList') { 37 Array.prototype.forEach.call(mutation.addedNodes, function (addedNode) { 38 if (addedNode.nodeType === Node.ELEMENT_NODE) { 39 elementAddedCallback(addedNode); 40 } 41 }); 42 } 43 }); 44 }); 45 function getLinkClickParameters(event, url) { 46 var tmpURL = new URL(url); 47 var linkHostname = tmpURL.hostname; 48 var linkEvent = { 49 page_title: wpGoalTrackerGa.pageTitle, 50 link_url: url, 51 // page_location: window.location.href, 52 outbound: isLinkExternal(url), 53 link_domain: linkHostname, 54 link_text: $(event.target).text(), 55 link_classes: $(event.target).attr('class'), 9 56 }; 10 return __assign.apply(this, arguments); 11 }; 12 var gtgaMainJs = (function ($) { 13 'use strict'; 14 var _this = this; 15 /** 16 * Binds Download Tracking 17 * 18 * @returns {undefined} 19 */ 20 var VideoPercent = { 21 ZERO: 0, 22 TWENTYFIVE: 25, 23 FIFTY: 50, 24 SEVENTYFIVE: 75, 25 ONEHUNDRED: 100, 26 }; 27 function elementAddedCallback(addedNode) { 28 checkVisibilityEvents(); 29 } 30 var observer = new MutationObserver(function (mutationsList) { 31 mutationsList.forEach(function (mutation) { 32 if (mutation.type === 'childList') { 33 Array.prototype.forEach.call(mutation.addedNodes, function (addedNode) { 34 if (addedNode.nodeType === Node.ELEMENT_NODE) { 35 elementAddedCallback(addedNode); 36 } 37 }); 38 } 39 }); 57 return linkEvent; 58 } 59 var click_event = function (event) { 60 trackCustomEvent(this, event.data.eventName, event.data.props); 61 if ( 62 (typeof event.target.href !== 'undefined' && 63 event.target.nodeName == 'A') || 64 (typeof event.currentTarget.href !== 'undefined' && 65 event.currentTarget.nodeName == 'A') 66 ) { 67 if ($(event.target).parent().attr('role') !== 'tab') { 68 handleLinks(this, event); 69 } 70 } 71 }; // End of click event function 72 function bindEmailLinksTracking() { 73 if (wpGoalTrackerGa.trackEmailLinks === '1') { 74 $('body').on('click', 'a[href^="mailto:"]', function (e) { 75 e.preventDefault(); 76 var email = this.href.split(':').pop(); 77 var page = getPageName(); 78 var eventParameters = { 79 page_title: page, 80 email_address: email, 81 page_location: window.location.href, 82 link_text: $(e.target).text(), 83 link_classes: $(e.target).attr('class'), 84 }; 85 trackCustomEvent(this, 'email_link_click', eventParameters); 86 handleLinks(this, e); 87 }); 88 } 89 } 90 var isLinkExternal = function (url) { 91 var query = new RegExp('//' + location.host + '($|/)'); 92 if (url.substring(0, 4) === 'http') { 93 if (!query.test(url)) { 94 return true; 95 } 96 } 97 return false; 98 }; 99 var link_track_external = function (event) { 100 var url = getUrl(event); 101 if (typeof url !== 'undefined' && url !== '') { 102 if (isLinkExternal(url)) { 103 link_track_all(event); 104 } 105 } 106 }; 107 var link_track_external_new_tab = function (event) { 108 var url = getUrl(event); 109 if (isLinkExternal(url)) { 110 var eventParameters = getLinkClickParameters(event, url); 111 trackCustomEvent(this, 'link_click', eventParameters); 112 } 113 }; 114 var link_track_all = function (event) { 115 var url = getUrl(event); 116 var hash = isJustHashLink(url); 117 if ( 118 typeof url !== 'undefined' && 119 url !== '' && 120 hash != '#' && 121 $(this).parent().attr('role') !== 'tab' 122 ) { 123 var eventParameters = getLinkClickParameters(event, url); 124 trackCustomEvent(this, 'link_click', eventParameters); 125 event.preventDefault(); 126 if (typeof hash !== 'undefined' && hash !== '') { 127 window.location.hash = hash; 128 } else { 129 setTimeout(function () { 130 window.location.href = url; 131 }, 250); 132 } 133 } 134 }; 135 var link_track_all_new_tab = function (event) { 136 var url = getUrl(event); 137 if (typeof url !== 'undefined' && url !== '') { 138 var eventParameters = getLinkClickParameters(event, url); 139 trackCustomEvent(this, 'link_click', eventParameters); 140 } 141 }; 142 var handleLinks = function (self, event) { 143 event.preventDefault(); 144 var link = getUrl(event); 145 if (link === '') return; 146 var w; 147 var openInNewTab = isNewTab(self); 148 if (openInNewTab) { 149 w = window.open('', '_blank'); 150 } 151 var hash = isJustHashLink(link); 152 if (typeof hash !== 'undefined' && hash !== '') { 153 window.location.hash = hash; 154 } else if (window.location.href !== link) { 155 setTimeout( 156 function () { 157 if (openInNewTab) { 158 w.location.href = link; 159 } else { 160 window.location.href = link; 161 } 162 }, 163 250, 164 w, 165 ); 166 } 167 }; 168 var getUrl = function (event) { 169 var url = ''; 170 var $target = $(event.target); 171 var $link = $target.closest('a'); 172 if ($link.length) { 173 var href = $link.attr('href'); 174 if (href && href !== '#') { 175 url = $link.prop('href'); 176 } 177 } 178 return url; 179 }; 180 var isJustHashLink = function (url) { 181 if (url.indexOf('#') === 0) { 182 return url; 183 } 184 var currentUrl = new URL(window.location.href); 185 var targetUrl = new URL(url, currentUrl); 186 if (targetUrl.origin !== currentUrl.origin) { 187 return ''; 188 } 189 if ( 190 targetUrl.pathname === currentUrl.pathname && 191 targetUrl.search === currentUrl.search && 192 targetUrl.hash !== '' 193 ) { 194 return targetUrl.hash; 195 } 196 return ''; 197 }; 198 var isNewTab = function (self) { 199 var target = $(self).attr('target'); 200 if (typeof target !== 'undefined' && target.trim() === '_blank') { 201 return true; 202 } 203 return false; 204 }; 205 $(document).ready(function () { 206 var targetNode = document.body; 207 var config = { childList: true, subtree: true }; 208 observer.observe(targetNode, config); 209 $(window).on('scroll', checkVisibilityEvents); 210 // We also want to check it when 211 checkVisibilityEvents(); 212 if (wpGoalTrackerGa.trackEmailLinks) { 213 bindEmailLinksTracking(); 214 } 215 // Bind link tracking events 216 if (wpGoalTrackerGa.trackLinks.enabled) { 217 if (wpGoalTrackerGa.trackLinks.type === 'all') { 218 $('body').on( 219 'click', 220 "a:not([target~='_blank']):not(.video_popup):not(.dtq-video-popup-trigger):not(:has(.video_popup)):not(.video_popup *)", 221 link_track_all, 222 ); 223 $('body').on( 224 'click', 225 "a[target~='_blank']:not(.video_popup):not(.dtq-video-popup-trigger):not(:has(.video_popup)):not(.video_popup *)", 226 link_track_all_new_tab, 227 ); 228 } else if (wpGoalTrackerGa.trackLinks.type === 'external') { 229 $('body').on( 230 'click', 231 "a:not([target~='_blank']):not(.video_popup):not(.dtq-video-popup-trigger):not(:has(.video_popup)):not(.video_popup *)", 232 link_track_external, 233 ); 234 $('body').on( 235 'click', 236 "a[target~='_blank']:not(.video_popup):not(.dtq-video-popup-trigger):not(:has(.video_popup)):not(.video_popup *)", 237 link_track_external_new_tab, 238 ); 239 } 240 } 241 wpGoalTrackerGa.click.forEach(function (el) { 242 var selector = makeSelector(el); 243 $('body').on('click', selector, el, click_event); 40 244 }); 41 function getLinkClickParameters(event, url) { 42 var tmpURL = new URL(url); 43 var linkHostname = tmpURL.hostname; 44 var linkEvent = { 45 page_title: wpGoalTrackerGa.pageTitle, 46 link_url: url, 47 // page_location: window.location.href, 48 outbound: isLinkExternal(url), 49 link_domain: linkHostname, 50 link_text: $(event.target).text(), 51 link_classes: $(event.target).attr('class'), 52 }; 53 return linkEvent; 54 } 55 var click_event = function (event) { 56 trackCustomEvent(this, event.data.eventName, event.data.props); 57 if ((typeof event.target.href !== 'undefined' && 58 event.target.nodeName == 'A') || 59 (typeof event.currentTarget.href !== 'undefined' && 60 event.currentTarget.nodeName == 'A')) { 61 if ($(event.target).parent().attr('role') !== 'tab') { 62 handleLinks(this, event); 63 } 245 }); 246 function makeSelector(click_option) { 247 var selector = ''; 248 if (click_option.selectorType === 'class') { 249 selector += '.'; 250 } else if (click_option.selectorType === 'id') { 251 selector += '#'; 252 } 253 selector += click_option.selector; 254 return selector; 255 } 256 function checkVisibilityEvents() { 257 // TO DO this code can be simplified a lot. May be better to use 258 // $('element').visibility() 259 var ga_window = $(window).height(); 260 var ga_visibility_top = $(document).scrollTop(); 261 for (var i = 0; i < wpGoalTrackerGa.visibility.length; i++) { 262 if (!wpGoalTrackerGa.visibility[i].sent) { 263 // NB was unescapeChars( wpGoalTrackerGa.visibility[i].select) 264 var $select = $(makeSelector(wpGoalTrackerGa.visibility[i])); 265 wpGoalTrackerGa.visibility[i].offset = $select.offset(); 266 if ( 267 wpGoalTrackerGa.visibility[i].offset && 268 ga_visibility_top + ga_window >= 269 wpGoalTrackerGa.visibility[i].offset.top + $select.height() 270 ) { 271 trackCustomEvent( 272 $select, 273 wpGoalTrackerGa.visibility[i].eventName, 274 wpGoalTrackerGa.visibility[i].props, 275 ); 276 wpGoalTrackerGa.visibility[i].sent = true; 64 277 } 65 }; // End of click event function 66 function bindEmailLinksTracking() { 67 if (wpGoalTrackerGa.trackEmailLinks === '1') { 68 $('body').on('click', 'a[href^="mailto:"]', function (e) { 69 e.preventDefault(); 70 var email = this.href.split(':').pop(); 71 var page = getPageName(); 72 var eventParameters = { 73 page_title: page, 74 email_address: email, 75 page_location: window.location.href, 76 link_text: $(e.target).text(), 77 link_classes: $(e.target).attr('class'), 78 }; 79 trackCustomEvent(this, 'email_link_click', eventParameters); 80 handleLinks(this, e); 81 }); 82 } 83 } 84 var isLinkExternal = function (url) { 85 var query = new RegExp('//' + location.host + '($|/)'); 86 if (url.substring(0, 4) === 'http') { 87 if (!query.test(url)) { 88 return true; 89 } 90 } 91 return false; 92 }; 93 var link_track_external = function (event) { 94 var url = getUrl(event); 95 if (typeof url !== 'undefined' && url !== '') { 96 if (isLinkExternal(url)) { 97 link_track_all(event); 98 } 99 } 100 }; 101 var link_track_external_new_tab = function (event) { 102 var url = getUrl(event); 103 if (isLinkExternal(url)) { 104 var eventParameters = getLinkClickParameters(event, url); 105 trackCustomEvent(this, 'link_click', eventParameters); 106 } 107 }; 108 var link_track_all = function (event) { 109 var url = getUrl(event); 110 var hash = isJustHashLink(url); 111 if (typeof url !== 'undefined' && 112 url !== '' && 113 hash != '#' && 114 $(this).parent().attr('role') !== 'tab') { 115 var eventParameters = getLinkClickParameters(event, url); 116 trackCustomEvent(this, 'link_click', eventParameters); 117 event.preventDefault(); 118 if (typeof hash !== 'undefined' && hash !== '') { 119 window.location.hash = hash; 120 } 121 else { 122 setTimeout(function () { 123 window.location.href = url; 124 }, 250); 125 } 126 } 127 }; 128 var link_track_all_new_tab = function (event) { 129 var url = getUrl(event); 130 if (typeof url !== 'undefined' && url !== '') { 131 var eventParameters = getLinkClickParameters(event, url); 132 trackCustomEvent(this, 'link_click', eventParameters); 133 } 134 }; 135 var handleLinks = function (self, event) { 136 event.preventDefault(); 137 var link = getUrl(event); 138 if (link === '') 139 return; 140 var w; 141 var openInNewTab = isNewTab(self); 142 if (openInNewTab) { 143 w = window.open('', '_blank'); 144 } 145 var hash = isJustHashLink(link); 146 if (typeof hash !== 'undefined' && hash !== '') { 147 window.location.hash = hash; 148 } 149 else if (window.location.href !== link) { 150 setTimeout(function () { 151 if (openInNewTab) { 152 w.location.href = link; 153 } 154 else { 155 window.location.href = link; 156 } 157 }, 250, w); 158 } 159 }; 160 var getUrl = function (event) { 161 var url = ''; 162 var $target = $(event.target); 163 var $link = $target.closest('a'); 164 if ($link.length) { 165 var href = $link.attr('href'); 166 if (href && href !== '#') { 167 url = $link.prop('href'); 168 } 169 } 170 return url; 171 }; 172 var isJustHashLink = function (url) { 173 if (url.indexOf('#') === 0) { 174 return url; 175 } 176 var currentUrl = new URL(window.location.href); 177 var targetUrl = new URL(url, currentUrl); 178 if (targetUrl.origin !== currentUrl.origin) { 179 return ''; 180 } 181 if (targetUrl.pathname === currentUrl.pathname && 182 targetUrl.search === currentUrl.search && 183 targetUrl.hash !== '') { 184 return targetUrl.hash; 185 } 186 return ''; 187 }; 188 var isNewTab = function (self) { 189 var target = $(self).attr('target'); 190 if (typeof target !== 'undefined' && target.trim() === '_blank') { 191 return true; 192 } 193 return false; 194 }; 195 $(document).ready(function () { 196 var targetNode = document.body; 197 var config = { childList: true, subtree: true }; 198 observer.observe(targetNode, config); 199 $(window).on('scroll', checkVisibilityEvents); 200 // We also want to check it when 201 checkVisibilityEvents(); 202 if (wpGoalTrackerGa.trackEmailLinks) { 203 bindEmailLinksTracking(); 204 } 205 // Bind link tracking events 206 if (wpGoalTrackerGa.trackLinks.enabled) { 207 if (wpGoalTrackerGa.trackLinks.type === 'all') { 208 $('body').on('click', 'a:not([target~="_blank"])', link_track_all); 209 $('body').on('click', 'a[target~="_blank"]', link_track_all_new_tab); 210 } 211 else if (wpGoalTrackerGa.trackLinks.type === 'external') { 212 $('body').on('click', 'a:not([target~="_blank"])', link_track_external); 213 $('body').on('click', 'a[target~="_blank"]', link_track_external_new_tab); 214 } 215 } 216 wpGoalTrackerGa.click.forEach(function (el) { 217 var selector = makeSelector(el); 218 $('body').on('click', selector, el, click_event); 219 }); 278 } 279 } 280 } // End of bindVisibilityEvents 281 var trackCustomEventBasic = function (self, name, props) { 282 Object.keys(props).forEach(function (key) { 283 props[key] = prepareProps(self, props[key]); 220 284 }); 221 function makeSelector(click_option) { 222 var selector = ''; 223 if (click_option.selectorType === 'class') { 224 selector += '.'; 225 } 226 else if (click_option.selectorType === 'id') { 227 selector += '#'; 228 } 229 selector += click_option.selector; 230 return selector; 231 } 232 function checkVisibilityEvents() { 233 // TO DO this code can be simplified a lot. May be better to use 234 // $('element').visibility() 235 var ga_window = $(window).height(); 236 var ga_visibility_top = $(document).scrollTop(); 237 for (var i = 0; i < wpGoalTrackerGa.visibility.length; i++) { 238 if (!wpGoalTrackerGa.visibility[i].sent) { 239 // NB was unescapeChars( wpGoalTrackerGa.visibility[i].select) 240 var $select = $(makeSelector(wpGoalTrackerGa.visibility[i])); 241 wpGoalTrackerGa.visibility[i].offset = $select.offset(); 242 if (wpGoalTrackerGa.visibility[i].offset && 243 ga_visibility_top + ga_window >= 244 wpGoalTrackerGa.visibility[i].offset.top + $select.height()) { 245 trackCustomEvent($select, wpGoalTrackerGa.visibility[i].eventName, wpGoalTrackerGa.visibility[i].props); 246 wpGoalTrackerGa.visibility[i].sent = true; 247 } 248 } 249 } 250 } // End of bindVisibilityEvents 251 var trackCustomEventBasic = function (self, name, props) { 252 Object.keys(props).forEach(function (key) { 253 props[key] = prepareProps(self, props[key]); 254 }); 255 gtag('event', name, __assign({}, props)); 256 }; 257 258 function returnOriginalProp(self, prop) { 259 return prop; 260 } 261 function getPageName() { 262 if ('1' === wpGoalTrackerGa.isFrontPage) { 263 return 'Home'; 264 } 265 else { 266 if (typeof wpGoalTrackerGa.pageTitle !== 'undefined') { 267 return wpGoalTrackerGa.pageTitle; 268 } 269 } 270 return ''; 271 } 272 var trackCustomEvent = typeof trackCustomEventPro === 'function' 273 ? trackCustomEventPro 274 : trackCustomEventBasic; 275 var prepareProps = typeof get_placeholder === 'function' 276 ? get_placeholder 277 : returnOriginalProp; 278 return { isJustHashLink: isJustHashLink }; 285 gtag('event', name, __assign({}, props)); 286 }; 287 288 function returnOriginalProp(self, prop) { 289 return prop; 290 } 291 function getPageName() { 292 if ('1' === wpGoalTrackerGa.isFrontPage) { 293 return 'Home'; 294 } else { 295 if (typeof wpGoalTrackerGa.pageTitle !== 'undefined') { 296 return wpGoalTrackerGa.pageTitle; 297 } 298 } 299 return ''; 300 } 301 var trackCustomEvent = 302 typeof trackCustomEventPro === 'function' 303 ? trackCustomEventPro 304 : trackCustomEventBasic; 305 var prepareProps = 306 typeof get_placeholder === 'function' 307 ? get_placeholder 308 : returnOriginalProp; 309 return { isJustHashLink: isJustHashLink }; 279 310 })(jQuery); 280 311 -
goal-tracker-ga/trunk/README.txt
r3018646 r3039607 4 4 Tags: analytics, events, wordpress, ga4 5 5 Requires at least: 5.5 6 Tested up to: 6.4. 27 Stable tag: 1.1. 16 Tested up to: 6.4.3 7 Stable tag: 1.1.2 8 8 Requires PHP: 5.6.20 9 9 License: GPLv2 or later … … 78 78 == Changelog == 79 79 80 = 1.1.2 - 2024-02-20 = 81 1. Fixing an issue with video popups 82 80 83 = 1.1.1 - 2024-01-08 = 81 84 1. UI changes -
goal-tracker-ga/trunk/apps/basic/package.json
r3018646 r3039607 1 1 { 2 2 "name": "wp-goal-tracker-ga-free", 3 "version": "1.1. 1",3 "version": "1.1.2", 4 4 "description": "WP Goal Tracker GA - Custom Events Tracking for Google Analytics 4", 5 5 "author": "pinewise", -
goal-tracker-ga/trunk/goal-tracker-ga.php
r3018646 r3039607 17 17 * Plugin URI: https://www.wpgoaltracker.com/goal-tracker-ga 18 18 * Description: Custom Event Tracking for Google Analytics GA4 19 * Version: 1.1. 119 * Version: 1.1.2 20 20 * Author: pinewise 21 21 * Author URI: https://www.wpgoaltracker.com … … 87 87 define( 'WP_CUSTOM_EVENTS_TRACKER_PATH', plugin_dir_path( __FILE__ ) ); 88 88 define( 'WP_CUSTOM_EVENTS_TRACKER_URL', plugin_dir_url( __FILE__ ) ); 89 define( 'WP_CUSTOM_EVENTS_TRACKER_VERSION', '1.1. 1' );90 define( 'WP_CUSTOM_EVENTS_TRACKER_DB_VERSION', '1.1. 1' );89 define( 'WP_CUSTOM_EVENTS_TRACKER_VERSION', '1.1.2' ); 90 define( 'WP_CUSTOM_EVENTS_TRACKER_DB_VERSION', '1.1.2' ); 91 91 /** 92 92 * The code that runs during plugin activation. -
goal-tracker-ga/trunk/includes/class-wp-goal-tracker-ga.php
r3018646 r3039607 269 269 if ( !isset( $options["db_version"] ) ) { 270 270 # it is the first DB convert from version 1.0.0 to 1.0.2 271 $options["db_version"] = "1.1. 1";271 $options["db_version"] = "1.1.2"; 272 272 # set the db_version param for the first time 273 273 # move general settings parameters from the options root to a "general_settings" array. … … 331 331 // plugin management capability 332 332 global $wp_roles ; 333 error_log( json_encode( $wp_roles ) );334 333 foreach ( (array) $roles as $role ) { 335 334 error_log( json_encode( $role["id"] ) ); -
goal-tracker-ga/trunk/public/js/wp-goal-tracker-ga-public.js
r3013028 r3039607 1 var __assign = (this && this.__assign) || function () { 2 __assign = Object.assign || function(t) { 1 var __assign = 2 (this && this.__assign) || 3 function () { 4 __assign = 5 Object.assign || 6 function (t) { 3 7 for (var s, i = 1, n = arguments.length; i < n; i++) { 4 s = arguments[i];5 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))6 t[p] = s[p];8 s = arguments[i]; 9 for (var p in s) 10 if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; 7 11 } 8 12 return t; 13 }; 14 return __assign.apply(this, arguments); 15 }; 16 var gtgaMainJs = (function ($) { 17 'use strict'; 18 var _this = this; 19 /** 20 * Binds Download Tracking 21 * 22 * @returns {undefined} 23 */ 24 var VideoPercent = { 25 ZERO: 0, 26 TWENTYFIVE: 25, 27 FIFTY: 50, 28 SEVENTYFIVE: 75, 29 ONEHUNDRED: 100, 30 }; 31 function elementAddedCallback(addedNode) { 32 checkVisibilityEvents(); 33 } 34 var observer = new MutationObserver(function (mutationsList) { 35 mutationsList.forEach(function (mutation) { 36 if (mutation.type === 'childList') { 37 Array.prototype.forEach.call(mutation.addedNodes, function (addedNode) { 38 if (addedNode.nodeType === Node.ELEMENT_NODE) { 39 elementAddedCallback(addedNode); 40 } 41 }); 42 } 43 }); 44 }); 45 function getLinkClickParameters(event, url) { 46 var tmpURL = new URL(url); 47 var linkHostname = tmpURL.hostname; 48 var linkEvent = { 49 page_title: wpGoalTrackerGa.pageTitle, 50 link_url: url, 51 // page_location: window.location.href, 52 outbound: isLinkExternal(url), 53 link_domain: linkHostname, 54 link_text: $(event.target).text(), 55 link_classes: $(event.target).attr('class'), 9 56 }; 10 return __assign.apply(this, arguments); 11 }; 12 var gtgaMainJs = (function ($) { 13 'use strict'; 14 var _this = this; 15 /** 16 * Binds Download Tracking 17 * 18 * @returns {undefined} 19 */ 20 var VideoPercent = { 21 ZERO: 0, 22 TWENTYFIVE: 25, 23 FIFTY: 50, 24 SEVENTYFIVE: 75, 25 ONEHUNDRED: 100, 26 }; 27 function elementAddedCallback(addedNode) { 28 checkVisibilityEvents(); 29 } 30 var observer = new MutationObserver(function (mutationsList) { 31 mutationsList.forEach(function (mutation) { 32 if (mutation.type === 'childList') { 33 Array.prototype.forEach.call(mutation.addedNodes, function (addedNode) { 34 if (addedNode.nodeType === Node.ELEMENT_NODE) { 35 elementAddedCallback(addedNode); 36 } 37 }); 38 } 39 }); 57 return linkEvent; 58 } 59 var click_event = function (event) { 60 trackCustomEvent(this, event.data.eventName, event.data.props); 61 if ( 62 (typeof event.target.href !== 'undefined' && 63 event.target.nodeName == 'A') || 64 (typeof event.currentTarget.href !== 'undefined' && 65 event.currentTarget.nodeName == 'A') 66 ) { 67 if ($(event.target).parent().attr('role') !== 'tab') { 68 handleLinks(this, event); 69 } 70 } 71 }; // End of click event function 72 function bindEmailLinksTracking() { 73 if (wpGoalTrackerGa.trackEmailLinks === '1') { 74 $('body').on('click', 'a[href^="mailto:"]', function (e) { 75 e.preventDefault(); 76 var email = this.href.split(':').pop(); 77 var page = getPageName(); 78 var eventParameters = { 79 page_title: page, 80 email_address: email, 81 page_location: window.location.href, 82 link_text: $(e.target).text(), 83 link_classes: $(e.target).attr('class'), 84 }; 85 trackCustomEvent(this, 'email_link_click', eventParameters); 86 handleLinks(this, e); 87 }); 88 } 89 } 90 var isLinkExternal = function (url) { 91 var query = new RegExp('//' + location.host + '($|/)'); 92 if (url.substring(0, 4) === 'http') { 93 if (!query.test(url)) { 94 return true; 95 } 96 } 97 return false; 98 }; 99 var link_track_external = function (event) { 100 var url = getUrl(event); 101 if (typeof url !== 'undefined' && url !== '') { 102 if (isLinkExternal(url)) { 103 link_track_all(event); 104 } 105 } 106 }; 107 var link_track_external_new_tab = function (event) { 108 var url = getUrl(event); 109 if (isLinkExternal(url)) { 110 var eventParameters = getLinkClickParameters(event, url); 111 trackCustomEvent(this, 'link_click', eventParameters); 112 } 113 }; 114 var link_track_all = function (event) { 115 var url = getUrl(event); 116 var hash = isJustHashLink(url); 117 if ( 118 typeof url !== 'undefined' && 119 url !== '' && 120 hash != '#' && 121 $(this).parent().attr('role') !== 'tab' 122 ) { 123 var eventParameters = getLinkClickParameters(event, url); 124 trackCustomEvent(this, 'link_click', eventParameters); 125 event.preventDefault(); 126 if (typeof hash !== 'undefined' && hash !== '') { 127 window.location.hash = hash; 128 } else { 129 setTimeout(function () { 130 window.location.href = url; 131 }, 250); 132 } 133 } 134 }; 135 var link_track_all_new_tab = function (event) { 136 var url = getUrl(event); 137 if (typeof url !== 'undefined' && url !== '') { 138 var eventParameters = getLinkClickParameters(event, url); 139 trackCustomEvent(this, 'link_click', eventParameters); 140 } 141 }; 142 var handleLinks = function (self, event) { 143 event.preventDefault(); 144 var link = getUrl(event); 145 if (link === '') return; 146 var w; 147 var openInNewTab = isNewTab(self); 148 if (openInNewTab) { 149 w = window.open('', '_blank'); 150 } 151 var hash = isJustHashLink(link); 152 if (typeof hash !== 'undefined' && hash !== '') { 153 window.location.hash = hash; 154 } else if (window.location.href !== link) { 155 setTimeout( 156 function () { 157 if (openInNewTab) { 158 w.location.href = link; 159 } else { 160 window.location.href = link; 161 } 162 }, 163 250, 164 w, 165 ); 166 } 167 }; 168 var getUrl = function (event) { 169 var url = ''; 170 var $target = $(event.target); 171 var $link = $target.closest('a'); 172 if ($link.length) { 173 var href = $link.attr('href'); 174 if (href && href !== '#') { 175 url = $link.prop('href'); 176 } 177 } 178 return url; 179 }; 180 var isJustHashLink = function (url) { 181 if (url.indexOf('#') === 0) { 182 return url; 183 } 184 var currentUrl = new URL(window.location.href); 185 var targetUrl = new URL(url, currentUrl); 186 if (targetUrl.origin !== currentUrl.origin) { 187 return ''; 188 } 189 if ( 190 targetUrl.pathname === currentUrl.pathname && 191 targetUrl.search === currentUrl.search && 192 targetUrl.hash !== '' 193 ) { 194 return targetUrl.hash; 195 } 196 return ''; 197 }; 198 var isNewTab = function (self) { 199 var target = $(self).attr('target'); 200 if (typeof target !== 'undefined' && target.trim() === '_blank') { 201 return true; 202 } 203 return false; 204 }; 205 $(document).ready(function () { 206 var targetNode = document.body; 207 var config = { childList: true, subtree: true }; 208 observer.observe(targetNode, config); 209 $(window).on('scroll', checkVisibilityEvents); 210 // We also want to check it when 211 checkVisibilityEvents(); 212 if (wpGoalTrackerGa.trackEmailLinks) { 213 bindEmailLinksTracking(); 214 } 215 // Bind link tracking events 216 if (wpGoalTrackerGa.trackLinks.enabled) { 217 if (wpGoalTrackerGa.trackLinks.type === 'all') { 218 $('body').on( 219 'click', 220 "a:not([target~='_blank']):not(.video_popup):not(.dtq-video-popup-trigger):not(:has(.video_popup)):not(.video_popup *)", 221 link_track_all, 222 ); 223 $('body').on( 224 'click', 225 "a[target~='_blank']:not(.video_popup):not(.dtq-video-popup-trigger):not(:has(.video_popup)):not(.video_popup *)", 226 link_track_all_new_tab, 227 ); 228 } else if (wpGoalTrackerGa.trackLinks.type === 'external') { 229 $('body').on( 230 'click', 231 "a:not([target~='_blank']):not(.video_popup):not(.dtq-video-popup-trigger):not(:has(.video_popup)):not(.video_popup *)", 232 link_track_external, 233 ); 234 $('body').on( 235 'click', 236 "a[target~='_blank']:not(.video_popup):not(.dtq-video-popup-trigger):not(:has(.video_popup)):not(.video_popup *)", 237 link_track_external_new_tab, 238 ); 239 } 240 } 241 wpGoalTrackerGa.click.forEach(function (el) { 242 var selector = makeSelector(el); 243 $('body').on('click', selector, el, click_event); 40 244 }); 41 function getLinkClickParameters(event, url) { 42 var tmpURL = new URL(url); 43 var linkHostname = tmpURL.hostname; 44 var linkEvent = { 45 page_title: wpGoalTrackerGa.pageTitle, 46 link_url: url, 47 // page_location: window.location.href, 48 outbound: isLinkExternal(url), 49 link_domain: linkHostname, 50 link_text: $(event.target).text(), 51 link_classes: $(event.target).attr('class'), 52 }; 53 return linkEvent; 54 } 55 var click_event = function (event) { 56 trackCustomEvent(this, event.data.eventName, event.data.props); 57 if ((typeof event.target.href !== 'undefined' && 58 event.target.nodeName == 'A') || 59 (typeof event.currentTarget.href !== 'undefined' && 60 event.currentTarget.nodeName == 'A')) { 61 if ($(event.target).parent().attr('role') !== 'tab') { 62 handleLinks(this, event); 63 } 245 }); 246 function makeSelector(click_option) { 247 var selector = ''; 248 if (click_option.selectorType === 'class') { 249 selector += '.'; 250 } else if (click_option.selectorType === 'id') { 251 selector += '#'; 252 } 253 selector += click_option.selector; 254 return selector; 255 } 256 function checkVisibilityEvents() { 257 // TO DO this code can be simplified a lot. May be better to use 258 // $('element').visibility() 259 var ga_window = $(window).height(); 260 var ga_visibility_top = $(document).scrollTop(); 261 for (var i = 0; i < wpGoalTrackerGa.visibility.length; i++) { 262 if (!wpGoalTrackerGa.visibility[i].sent) { 263 // NB was unescapeChars( wpGoalTrackerGa.visibility[i].select) 264 var $select = $(makeSelector(wpGoalTrackerGa.visibility[i])); 265 wpGoalTrackerGa.visibility[i].offset = $select.offset(); 266 if ( 267 wpGoalTrackerGa.visibility[i].offset && 268 ga_visibility_top + ga_window >= 269 wpGoalTrackerGa.visibility[i].offset.top + $select.height() 270 ) { 271 trackCustomEvent( 272 $select, 273 wpGoalTrackerGa.visibility[i].eventName, 274 wpGoalTrackerGa.visibility[i].props, 275 ); 276 wpGoalTrackerGa.visibility[i].sent = true; 64 277 } 65 }; // End of click event function 66 function bindEmailLinksTracking() { 67 if (wpGoalTrackerGa.trackEmailLinks === '1') { 68 $('body').on('click', 'a[href^="mailto:"]', function (e) { 69 e.preventDefault(); 70 var email = this.href.split(':').pop(); 71 var page = getPageName(); 72 var eventParameters = { 73 page_title: page, 74 email_address: email, 75 page_location: window.location.href, 76 link_text: $(e.target).text(), 77 link_classes: $(e.target).attr('class'), 78 }; 79 trackCustomEvent(this, 'email_link_click', eventParameters); 80 handleLinks(this, e); 81 }); 82 } 83 } 84 var isLinkExternal = function (url) { 85 var query = new RegExp('//' + location.host + '($|/)'); 86 if (url.substring(0, 4) === 'http') { 87 if (!query.test(url)) { 88 return true; 89 } 90 } 91 return false; 92 }; 93 var link_track_external = function (event) { 94 var url = getUrl(event); 95 if (typeof url !== 'undefined' && url !== '') { 96 if (isLinkExternal(url)) { 97 link_track_all(event); 98 } 99 } 100 }; 101 var link_track_external_new_tab = function (event) { 102 var url = getUrl(event); 103 if (isLinkExternal(url)) { 104 var eventParameters = getLinkClickParameters(event, url); 105 trackCustomEvent(this, 'link_click', eventParameters); 106 } 107 }; 108 var link_track_all = function (event) { 109 var url = getUrl(event); 110 var hash = isJustHashLink(url); 111 if (typeof url !== 'undefined' && 112 url !== '' && 113 hash != '#' && 114 $(this).parent().attr('role') !== 'tab') { 115 var eventParameters = getLinkClickParameters(event, url); 116 trackCustomEvent(this, 'link_click', eventParameters); 117 event.preventDefault(); 118 if (typeof hash !== 'undefined' && hash !== '') { 119 window.location.hash = hash; 120 } 121 else { 122 setTimeout(function () { 123 window.location.href = url; 124 }, 250); 125 } 126 } 127 }; 128 var link_track_all_new_tab = function (event) { 129 var url = getUrl(event); 130 if (typeof url !== 'undefined' && url !== '') { 131 var eventParameters = getLinkClickParameters(event, url); 132 trackCustomEvent(this, 'link_click', eventParameters); 133 } 134 }; 135 var handleLinks = function (self, event) { 136 event.preventDefault(); 137 var link = getUrl(event); 138 if (link === '') 139 return; 140 var w; 141 var openInNewTab = isNewTab(self); 142 if (openInNewTab) { 143 w = window.open('', '_blank'); 144 } 145 var hash = isJustHashLink(link); 146 if (typeof hash !== 'undefined' && hash !== '') { 147 window.location.hash = hash; 148 } 149 else if (window.location.href !== link) { 150 setTimeout(function () { 151 if (openInNewTab) { 152 w.location.href = link; 153 } 154 else { 155 window.location.href = link; 156 } 157 }, 250, w); 158 } 159 }; 160 var getUrl = function (event) { 161 var url = ''; 162 var $target = $(event.target); 163 var $link = $target.closest('a'); 164 if ($link.length) { 165 var href = $link.attr('href'); 166 if (href && href !== '#') { 167 url = $link.prop('href'); 168 } 169 } 170 return url; 171 }; 172 var isJustHashLink = function (url) { 173 if (url.indexOf('#') === 0) { 174 return url; 175 } 176 var currentUrl = new URL(window.location.href); 177 var targetUrl = new URL(url, currentUrl); 178 if (targetUrl.origin !== currentUrl.origin) { 179 return ''; 180 } 181 if (targetUrl.pathname === currentUrl.pathname && 182 targetUrl.search === currentUrl.search && 183 targetUrl.hash !== '') { 184 return targetUrl.hash; 185 } 186 return ''; 187 }; 188 var isNewTab = function (self) { 189 var target = $(self).attr('target'); 190 if (typeof target !== 'undefined' && target.trim() === '_blank') { 191 return true; 192 } 193 return false; 194 }; 195 $(document).ready(function () { 196 var targetNode = document.body; 197 var config = { childList: true, subtree: true }; 198 observer.observe(targetNode, config); 199 $(window).on('scroll', checkVisibilityEvents); 200 // We also want to check it when 201 checkVisibilityEvents(); 202 if (wpGoalTrackerGa.trackEmailLinks) { 203 bindEmailLinksTracking(); 204 } 205 // Bind link tracking events 206 if (wpGoalTrackerGa.trackLinks.enabled) { 207 if (wpGoalTrackerGa.trackLinks.type === 'all') { 208 $('body').on('click', 'a:not([target~="_blank"])', link_track_all); 209 $('body').on('click', 'a[target~="_blank"]', link_track_all_new_tab); 210 } 211 else if (wpGoalTrackerGa.trackLinks.type === 'external') { 212 $('body').on('click', 'a:not([target~="_blank"])', link_track_external); 213 $('body').on('click', 'a[target~="_blank"]', link_track_external_new_tab); 214 } 215 } 216 wpGoalTrackerGa.click.forEach(function (el) { 217 var selector = makeSelector(el); 218 $('body').on('click', selector, el, click_event); 219 }); 278 } 279 } 280 } // End of bindVisibilityEvents 281 var trackCustomEventBasic = function (self, name, props) { 282 Object.keys(props).forEach(function (key) { 283 props[key] = prepareProps(self, props[key]); 220 284 }); 221 function makeSelector(click_option) { 222 var selector = ''; 223 if (click_option.selectorType === 'class') { 224 selector += '.'; 225 } 226 else if (click_option.selectorType === 'id') { 227 selector += '#'; 228 } 229 selector += click_option.selector; 230 return selector; 231 } 232 function checkVisibilityEvents() { 233 // TO DO this code can be simplified a lot. May be better to use 234 // $('element').visibility() 235 var ga_window = $(window).height(); 236 var ga_visibility_top = $(document).scrollTop(); 237 for (var i = 0; i < wpGoalTrackerGa.visibility.length; i++) { 238 if (!wpGoalTrackerGa.visibility[i].sent) { 239 // NB was unescapeChars( wpGoalTrackerGa.visibility[i].select) 240 var $select = $(makeSelector(wpGoalTrackerGa.visibility[i])); 241 wpGoalTrackerGa.visibility[i].offset = $select.offset(); 242 if (wpGoalTrackerGa.visibility[i].offset && 243 ga_visibility_top + ga_window >= 244 wpGoalTrackerGa.visibility[i].offset.top + $select.height()) { 245 trackCustomEvent($select, wpGoalTrackerGa.visibility[i].eventName, wpGoalTrackerGa.visibility[i].props); 246 wpGoalTrackerGa.visibility[i].sent = true; 247 } 248 } 249 } 250 } // End of bindVisibilityEvents 251 var trackCustomEventBasic = function (self, name, props) { 252 Object.keys(props).forEach(function (key) { 253 props[key] = prepareProps(self, props[key]); 254 }); 255 gtag('event', name, __assign({}, props)); 256 }; 257 258 function returnOriginalProp(self, prop) { 259 return prop; 260 } 261 function getPageName() { 262 if ('1' === wpGoalTrackerGa.isFrontPage) { 263 return 'Home'; 264 } 265 else { 266 if (typeof wpGoalTrackerGa.pageTitle !== 'undefined') { 267 return wpGoalTrackerGa.pageTitle; 268 } 269 } 270 return ''; 271 } 272 var trackCustomEvent = typeof trackCustomEventPro === 'function' 273 ? trackCustomEventPro 274 : trackCustomEventBasic; 275 var prepareProps = typeof get_placeholder === 'function' 276 ? get_placeholder 277 : returnOriginalProp; 278 return { isJustHashLink: isJustHashLink }; 285 gtag('event', name, __assign({}, props)); 286 }; 287 288 function returnOriginalProp(self, prop) { 289 return prop; 290 } 291 function getPageName() { 292 if ('1' === wpGoalTrackerGa.isFrontPage) { 293 return 'Home'; 294 } else { 295 if (typeof wpGoalTrackerGa.pageTitle !== 'undefined') { 296 return wpGoalTrackerGa.pageTitle; 297 } 298 } 299 return ''; 300 } 301 var trackCustomEvent = 302 typeof trackCustomEventPro === 'function' 303 ? trackCustomEventPro 304 : trackCustomEventBasic; 305 var prepareProps = 306 typeof get_placeholder === 'function' 307 ? get_placeholder 308 : returnOriginalProp; 309 return { isJustHashLink: isJustHashLink }; 279 310 })(jQuery); 280 311
Note: See TracChangeset
for help on using the changeset viewer.