{"version":3,"sources":["main.js","gae-mapper.js","link-tracking.js"],"names":["gaEventsMain","$","ga_element","bindScrollEventsFromDB","$select","ga_window","window","height","ga_scroll_top","document","scrollTop","i","gaeMapper","scrollElementsFromDB","length","sent","select","offset","top","track_event","get_placeholder","category","action","label","bounce","evalue","each","scrolloffset","this","hasClass","attr","addClass","ready","clickElementsFromDB","forEach","el","on","selector","data","click_event","event","downloadTracking","downloadTrackingFileTypes","ftype","lowercaseSelector","toLowerCase","uppercaseSelector","toUpperCase","trackFileDownload","emailLinksTracking","e","preventDefault","href","split","pop","getPageName","telLinksTracking","linkTrackingDataFromDB","track","type","linkTracker","link_track_all","link_track_all_new_tab","link_track_external","link_track_external_new_tab","link_class","applyBindings","ga","_gaq","__gaTracker","gaplusu","snippet_type","dataLayer","event_value","event_bounce","forceSnippet","useGoogleTagManagerSnippet","googleTagManagerEvent","useGlobalSiteTagSnippet","globalSiteTagEvent","useUniversalTrackingSnippet","universalTrackingEvent","useLegacySnippet","legacyTrackingEvent","gtag","value","push","eventCategory","eventAction","eventLabel","eventValue","nonInteraction","event_category","event_label","non_interaction","isFrontPage","pageTitle","handleLink","link_clicks_delay","target","nodeName","openInNewTab","w","realTarget","currentTarget","isNoFollowLink","isNoFollowSel","trim","open","hash","isJustHashLink","location","setTimeout","parseInt","self","placeholder","lel","indexOf","replace_with","postID","match","exec","text","postAuthor","referrer","currentUserName","isUserLoggedIn","currentUserId","search","updated","replace","jQuery","ga_options","makeSelector","click_option","name","click_elements_from_options","click_elements","clicked","newClickElement","universal","scroll_elements_from_options","scroll_elements","youTubeVideosFromOptions","youtube_videos","youTubeVideosFromDB","video","id_type","trackPlay","play","trackPause","pause","trackEnd","end","trackQuality","quality","vimeoVideosFromOptions","vimeo_videos","vimeoVideosFromDB","trackSkip","skip","link_tracking","class","noFollowElements","nofollow_links","force_snippet","advancedMode","advanced","email_link_tracking","tel_link_tracking","download_tracking","download_tracking_type","youtube","vimeo","media_video","media_audio","scriptDebugMode","script_debug_mode","gaePlaceholders","is_front_page","is_user_logged_in","current_user_name","page_title","post_id","post_author","current_user_id","nofollow_selectors","noFollowLinks","links","nofollowelem","elem","nofollow_arr","current","removeTrailingSlash","substring","is","url","l","lastIndexOf","isLinkExternal","query","RegExp","host","test","getUrl","className","id","tagName","parents","selectors","j"],"mappings":"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","file":"frontend-scripts.min.js","sourcesContent":["/*\n * Main GA Events Plugin function\n *\n * TO DO: all variables with gaeMapper. prefix can be declared at top of function\n * and have prefix removed thereafter. Although for now it could be helpful to\n * keep prefix to make it obvious which values need to eventually be accessed\n * directly from localized values.\n *\n * Exposes track_event, click_event\n *\n * Global: TO DO\n */\n\nvar gaEventsMain = (function ($) {\n \"use strict\";\n\n // This is the tracking element.\n // It could already have been created by another plugin.\n var ga_element;\n\n $(document).ready(function () {\n // TO DO: This needs to be conditional on non-excluded roles!\n // (Another export from mapper is probably the best way to get these\n // at the current stage.)\n applyBindings();\n });\n\n /*\n * Apply bindings from values stored in DB\n */\n function applyBindings() {\n // Bind click events stored in DB to the DOM body\n // \"clicked is the data which gets passed to the click_event function\n // \"selector\" is the id or class of the element clicked\n gaeMapper.clickElementsFromDB.forEach(function (el) {\n $(\"body\").on(\"click\", el.selector, el.data, click_event);\n });\n\n // Bind click events from shortcode / html attributes\n $(\".clickevent\").on(\"click\", function (event) {\n event.data = {\n category: $(this).attr(\"data-event-cat\"),\n action: $(this).attr(\"data-event-action\"),\n label: $(this).attr(\"data-event-label\"),\n bounce: $(this).attr(\"data-event-bounce\"),\n evalue: $(this).attr(\"data-event-value\"),\n };\n click_event(event);\n });\n\n // Bind scroll events stored in the DB to the window\n $(window).on(\"scroll\", bindScrollEventsFromDB);\n\n if (gaeMapper.downloadTracking === \"1\") {\n gaeMapper.downloadTrackingFileTypes.forEach(function (ftype) {\n var lowercaseSelector = 'a[href$=\".' + ftype.toLowerCase() + '\"]';\n var uppercaseSelector = 'a[href$=\".' + ftype.toUpperCase() + '\"]';\n $(\"body\").on(\"click\", lowercaseSelector, lowercaseSelector, trackFileDownload);\n $(\"body\").on(\"click\", uppercaseSelector, uppercaseSelector, trackFileDownload);\n });\n }\n\n if (gaeMapper.emailLinksTracking === \"1\") {\n $(\"body\").on(\"click\", 'a[href^=\"mailto:\"]', function (e) {\n e.preventDefault();\n e.data = {select: 'a[href^=\"mailto:\"]'};\n e.data.label = this.href.split(\":\").pop();\n e.data.action = \"Email Link\";\n e.data.category = getPageName();\n click_event(e);\n });\n }\n\n if (gaeMapper.telLinksTracking === \"1\") {\n $(\"body\").on(\"click\", 'a[href^=\"tel:\"]', function (e) {\n e.preventDefault();\n e.data = {select: 'a[href^=\"tel:\"]'};\n e.data.label = this.href.split(\":\").pop();\n e.data.action = \"Telephone Number Link\";\n e.data.category = getPageName();\n click_event(e);\n });\n }\n\n // Bind link tracking events\n if (gaeMapper.linkTrackingDataFromDB.track === \"1\") {\n if (gaeMapper.linkTrackingDataFromDB.type === \"all\") {\n $(\"body\").on(\"click\", 'a:not([target~=\"_blank\"])', linkTracker.link_track_all);\n $(\"body\").on(\"click\", 'a[target~=\"_blank\"]', linkTracker.link_track_all_new_tab);\n } else if (gaeMapper.linkTrackingDataFromDB.type === \"external\") {\n $(\"body\").on(\"click\", 'a:not([target~=\"_blank\"])', linkTracker.link_track_external);\n $(\"body\").on(\"click\", 'a[target~=\"_blank\"]', linkTracker.link_track_external_new_tab);\n } else if (gaeMapper.linkTrackingDataFromDB.type === \"class\") {\n $(\"body\").on(\"click\", \".\" + gaeMapper.linkTrackingDataFromDB.link_class, linkTracker.link_track_all);\n }\n }\n }\n\n /**\n * Binds Scroll events from DB\n *\n * @returns {undefined}\n */\n function bindScrollEventsFromDB() {\n // TO DO this code can be simplified a lot. May be better to use\n // $('element').scroll()\n\n var ga_window = $(window).height();\n var ga_scroll_top = $(document).scrollTop();\n\n for (var i = 0; i < gaeMapper.scrollElementsFromDB.length; i++) {\n if (!gaeMapper.scrollElementsFromDB[i].sent) {\n // NB was unescapeChars( gaeMapper.scrollElementsFromDB[i].select)\n var $select = $(gaeMapper.scrollElementsFromDB[i].select);\n gaeMapper.scrollElementsFromDB[i].offset = $select.offset();\n\n if (gaeMapper.scrollElementsFromDB[i].offset && ga_scroll_top + ga_window >= gaeMapper.scrollElementsFromDB[i].offset.top + $select.height()) {\n track_event(get_placeholder($select, gaeMapper.scrollElementsFromDB[i].category), get_placeholder($select, gaeMapper.scrollElementsFromDB[i].action), get_placeholder($select, gaeMapper.scrollElementsFromDB[i].label), gaeMapper.scrollElementsFromDB[i].bounce, gaeMapper.scrollElementsFromDB[i].evalue);\n\n gaeMapper.scrollElementsFromDB[i].sent = true;\n }\n }\n }\n\n $(\".scrollevent\").each(function () {\n if (!$(this).hasClass(\"scrolled\")) {\n var scrolloffset = $(this).offset();\n if (scrolloffset && ga_scroll_top + ga_window >= scrolloffset.top + $(this).height()) {\n track_event(get_placeholder(this, $(this).attr(\"data-event-cat\")), get_placeholder(this, $(this).attr(\"data-event-action\")), get_placeholder(this, $(this).attr(\"data-event-label\")), $(this).attr(\"data-event-bounce\"), $(this).attr(\"data-event-value\"));\n $(this).addClass(\"scrolled\");\n }\n }\n });\n } // End of bindScrollEvents\n\n /*\n * The main function for tracking events\n *\n * Param data types currently under review\n *\n * @param {string} category\n * @param {string} action\n * @param {string} label\n * @param {bool} bounce\n * @param {string}? evalue\n * @returns {undefined}\n */\n var track_event = function (category, action, label, bounce, evalue) {\n if (typeof ga_element === \"undefined\") {\n if (typeof ga !== \"undefined\") {\n ga_element = ga;\n } else if (typeof _gaq !== \"undefined\") {\n ga_element = _gaq;\n } else if (typeof __gaTracker === \"function\") {\n ga_element = __gaTracker;\n } else if (typeof gaplusu === \"function\") {\n ga_element = gaplusu;\n } else if (gaeMapper.snippet_type !== \"gtm\" && typeof dataLayer === \"undefined\") {\n return;\n }\n }\n\n var event_category = !category ? \"uncategorized\" : category;\n category = event_category;\n\n var event_action = !action ? \"\" : action;\n action = event_action;\n\n var event_label = !label ? \"\" : label;\n label = event_label;\n\n var event_value = !evalue ? \"\" : evalue;\n var event_bounce = !bounce ? false : bounce;\n\n switch (gaeMapper.forceSnippet) {\n case undefined || \"none\":\n if (useGoogleTagManagerSnippet()) {\n googleTagManagerEvent(category, action, label, event_value, event_bounce);\n } else if (useGlobalSiteTagSnippet()) {\n globalSiteTagEvent(category, action, label, event_value, event_bounce);\n } else if (useUniversalTrackingSnippet()) {\n universalTrackingEvent(category, action, label, event_value, event_bounce);\n } else if (useLegacySnippet()) {\n legacyTrackingEvent(category, action, label, event_value, event_bounce);\n }\n break;\n case \"gtm\":\n googleTagManagerEvent(category, action, label, event_value, event_bounce);\n break;\n case \"gst\":\n globalSiteTagEvent(category, action, label, event_value, event_bounce);\n break;\n case \"universal\":\n universalTrackingEvent(category, action, label, event_value, event_bounce);\n break;\n }\n }; // End of track_event function\n\n var useGoogleTagManagerSnippet = function () {\n return (gaeMapper.snippet_type === \"gtm\" || (typeof dataLayer !== \"undefined\" && typeof gtag === \"undefined\"));\n };\n\n var useGlobalSiteTagSnippet = function () {\n return gaeMapper.snippet_type === \"gst\" || typeof gtag !== \"undefined\";\n };\n\n var useUniversalTrackingSnippet = function () {\n return (gaeMapper.snippet_type === \"universal\" || typeof ga !== \"undefined\" || typeof __gaTracker === \"function\");\n };\n\n var useLegacySnippet = function () {\n return gaeMapper.snippet_type === \"legacy\" || typeof _gaq !== \"undefined\";\n };\n\n // Use the Google Tag Manager object to send an event\n var googleTagManagerEvent = function (category, action, label, value, bounce) {\n dataLayer.push({\n event: \"WPGAE\",\n eventCategory: category,\n eventAction: action,\n eventLabel: label,\n eventValue: value,\n nonInteraction: bounce,\n });\n };\n\n var globalSiteTagEvent = function (category, action, label, value, bounce) {\n gtag(\"event\", action, {\n // Event parameters\n event_category: category, event_label: label, value: value, non_interaction: bounce,\n });\n };\n\n var universalTrackingEvent = function (category, action, label, value, bounce) {\n if (value) {\n ga_element(\"send\", \"event\", category, action, label, value, {\n nonInteraction: bounce,\n });\n } else {\n ga_element(\"send\", \"event\", category, action, label, {\n nonInteraction: bounce,\n });\n }\n };\n\n var legacyTrackingEvent = function (category, action, label, value, bounce) {\n ga_element.push([\"_trackEvent\", category, action, label, value, bounce]);\n };\n\n var trackFileDownload = function (e) {\n e.preventDefault();\n var selector = e.data;\n var data = {select: selector};\n data.label = this.href.split(\"/\").pop();\n data.action = \"Download\";\n data.category = \"\";\n if (\"1\" === gaeMapper.isFrontPage) {\n data.category = \"Home\";\n } else {\n if (typeof gaeMapper.pageTitle !== \"undefined\") {\n data.category = gaeMapper.pageTitle;\n }\n }\n e.data = data;\n track_event(get_placeholder(this, data.category), get_placeholder(this, data.action), get_placeholder(this, data.label), false, \"\");\n handleLink(e);\n };\n\n /**\n * Click event function\n *\n * @param {event} event\n * @returns {undefined}\n */\n var click_event = function (event) {\n track_event(get_placeholder(this, event.data.category), get_placeholder(this, event.data.action), get_placeholder(this, event.data.label), event.data.bounce, event.data.evalue, this);\n\n if (typeof gaeMapper.link_clicks_delay !== \"undefined\" && gaeMapper.link_clicks_delay > 0 && typeof event.target.href !== \"undefined\" && event.target.nodeName == \"A\") {\n handleLink(event);\n }\n }; // End of click event function\n\n var handleLink = function (event) {\n var realTarget = \"\";\n if (event.target.nodeName === \"A\") {\n realTarget = event.target;\n } else if (typeof event.currentTarget !== \"undefined\" && event.currentTarget.nodeName === \"A\") {\n realTarget = event.currentTarget;\n }\n\n if (!(linkTracker.isNoFollowLink(realTarget.href) || linkTracker.isNoFollowSel(event.data.select))) {\n event.preventDefault();\n var openInNewTab = false;\n if (realTarget.target) {\n if (realTarget.target.trim() === \"_blank\") {\n openInNewTab = true;\n }\n }\n var w;\n if (openInNewTab) {\n w = window.open(\"\", \"_blank\");\n }\n\n var hash = linkTracker.isJustHashLink(event);\n if (typeof hash !== \"undefined\" && hash !== \"\") {\n window.location.hash = hash;\n } else {\n setTimeout(function () {\n if (openInNewTab) {\n w.location.href = realTarget.href;\n } else {\n window.location = realTarget.href;\n }\n }, parseInt(gaeMapper.link_clicks_delay));\n }\n }\n };\n /**\n * Helper to replace placeholder with actual values\n *\n * @param string self\n * @param string placeholder\n * @returns {.f.url.value@call;replace@call;replace@call;replace@call;replace.href|String.href|DOMString|.event.target.href.href}\n */\n var get_placeholder = function (self, placeholder) {\n if (typeof placeholder === \"undefined\") {\n return \"\";\n }\n var el = placeholder;\n\n var lel = \"\";\n if (el.indexOf(\"$$PAGENAME$$\") > -1) {\n if (true === gaeMapper.isFrontPage) {\n el = replace_with(el, \"$$PAGENAME$$\", \"Home page\");\n } else {\n el = replace_with(el, \"$$PAGENAME$$\", gaeMapper.pageTitle);\n }\n }\n\n if (el.indexOf(\"$$POST_ID$$\") > -1) {\n el = replace_with(el, \"$$POST_ID$$\", gaeMapper.postID);\n }\n\n if (el.indexOf(\"$$CATEGORY$$\") > -1) {\n el = replace_with(el, \"$$CATEGORY$$\", gaeMapper.category);\n }\n\n if (el.indexOf(\"$$ATTR_\") > -1) {\n var attr = \"\";\n var regex = /\\$\\$ATTR_(.*)\\$\\$/g;\n var match = regex.exec(el);\n if (typeof match[1] !== \"undefined\") {\n attr = match[1].toLowerCase();\n }\n lel = $(this).attr(attr);\n if (typeof lel === \"undefined\") {\n lel = $(self).attr(attr);\n }\n el = replace_with(el, match[0], lel);\n }\n\n if (el.indexOf(\"$$ELEMENT_TEXT$$\") > -1) {\n el = replace_with(el, \"$$ELEMENT_TEXT$$\", $(self).text());\n }\n\n if (el.indexOf(\"$$AUTHOR$$\") > -1) {\n el = replace_with(el, \"$$AUTHOR$$\", gaeMapper.postAuthor);\n }\n\n if (el.indexOf(\"$$REFERRER$$\") > -1) {\n var referrer = document.referrer;\n if (referrer === \"\") {\n referrer = window.location.href;\n }\n el = replace_with(el, \"$$REFERRER$$\", referrer);\n }\n\n if (el.indexOf(\"$$USER$$\") > -1) {\n if (0 === gaeMapper.currentUserName) {\n lel = \"Guest\";\n } else {\n lel = gaeMapper.currentUserName;\n }\n el = replace_with(el, \"$$USER$$\", lel);\n }\n\n if (el.indexOf(\"$$PAGE_URL$$\") > -1) {\n el = window.location.href;\n }\n\n if (el.indexOf(\"$$IS_LOGGED_IN$$\") > -1) {\n if (typeof gaeMapper.isUserLoggedIn !== \"undefined\" && gaeMapper.isUserLoggedIn === \"1\") {\n el = \"true\";\n } else {\n el = \"false\";\n }\n }\n\n if (el.indexOf(\"$$USER_ID$$\") > -1) {\n if (typeof gaeMapper.currentUserId !== \"undefined\") {\n el = gaeMapper.currentUserId;\n } else {\n el = \"\";\n }\n }\n\n return el;\n };\n\n var replace_with = function (el, search, updated) {\n return el.replace(search, updated);\n };\n\n // Make helper functions available globally\n return {\n get_placeholder: get_placeholder, track_event: track_event, click_event: click_event,\n };\n\n function getPageName() {\n if (\"1\" === gaeMapper.isFrontPage) {\n return \"Home\";\n } else {\n if (typeof gaeMapper.pageTitle !== \"undefined\") {\n return gaeMapper.pageTitle;\n }\n }\n return \"\";\n }\n})(jQuery);\n","/*\n * Script which maps DB values provided by wp_localize_script\n * to values used in v2 scripts.\n * Eventually the values provided by wp_localize script will be used directly\n * \n * Global: ga_options, TO DO\n */\n\nvar gaeMapper = (function () {\n\n\t// Make sure options are present globally\n\tif (typeof ga_options !== \"undefined\") {\n\n\t\t/*\n\t\t * We temporarily need to be able to create a selector of type id or class\n\t\t * from the existing DB options.\n\t\t *\n\t\t * Eventually we will probably update the backend to store the selector as an\n\t\t * option within the associative \"click\" (or otherwise named) array\n\t\t *\n\t\t * @param {sequential array}\n\t\t */\n\t\tfunction makeSelector(click_option) {\n\t\t\tvar selector = \"\";\n\t\t\tif (click_option.type === 'class') {\n\t\t\t\tselector += '.';\n\t\t\t} else if (click_option.type === 'id') {\n\t\t\t\tselector += '#';\n\t\t\t}\n\n\t\t\tselector += click_option.name;\n\t\t\treturn selector;\n\t\t}\n\n\t\t// Click elements from DB section begins\n\t\t// TO DO clean up this code a bit to make it more like the scroll elements\n\t\t// from DB section\n\t\tvar clickElementsFromDB = [];\n\n\t\tvar click_elements_from_options = ga_options.click_elements;\n\t\tfor (var i = 0; i < click_elements_from_options.length; i++) {\n\n\t\t\tvar clicked = click_elements_from_options[i];\n\t\t\tnewClickElement = {};\n\n\n\t\t\tnewClickElement.data = {\n\t\t\t\t\"select\": makeSelector(clicked),\n\t\t\t\t\"category\": clicked.category,\n\t\t\t\t\"action\": clicked.action,\n\t\t\t\t\"label\": clicked.label,\n\t\t\t\t\"bounce\": parseInt(clicked.non_interaction),\n\t\t\t\t\"evalue\": clicked.value, // \"value\" in DB. Change in project?\n\t\t\t\t\"universal\": parseInt(ga_options.universal)\n\t\t\t};\n\n\t\t\t// NB was unescapeChars(select) (from original js file)\n\t\t\tnewClickElement.selector = newClickElement.data.select;\n\t\t\tclickElementsFromDB.push(newClickElement);\n\t\t}\n\n\t\t// Click elements from DB section ends\n\n\t\t// Scrollelements from DB section begins\n\n\t\tvar scroll_elements_from_options = ga_options.scroll_elements;\n\t\tvar scrollElementsFromDB = [];\n\n\t\t// NB these will be assigned meaningful names in backend eventually\n\t\tif (typeof scroll_elements_from_options !== \"undefined\")\n\t\tscroll_elements_from_options.forEach(function (el) {\n\t\t\tscrollElementsFromDB.push({\n\t\t\t\t\"select\": makeSelector(el),\n\t\t\t\t\"category\": el.category,\n\t\t\t\t\"action\": el.action,\n\t\t\t\t\"label\": el.label,\n\t\t\t\t\"bounce\": parseInt(el.non_interaction),\n\t\t\t\t\"evalue\": el.value // \"value\" in DB. Change in project?\n\t\t\t});\n\t\t});\n\n\t\t// Scrollelements from DB section ends\n\n\t\t// YouTube videos from DB section begins\n\n\t\tvar youTubeVideosFromOptions = ga_options.youtube_videos;\n\t\tvar youTubeVideosFromDB = {};\n\n\t\tif (typeof youTubeVideosFromOptions !== \"undefined\"){\n\t\t\tyouTubeVideosFromOptions.forEach(function (video) {\n\t\t\t\tyouTubeVideosFromDB[video.name] = {\n\t\t\t\t\t\"id_type\": video.type,\n\t\t\t\t\t\"trackPlay\": video.play,\n\t\t\t\t\t\"trackPause\": video.pause,\n\t\t\t\t\t\"trackEnd\": video.end,\n\t\t\t\t\t\"trackQuality\": video.quality\n\t\t\t\t};\n\n\t\t\t});\n\t\t}\n\n\n\t\t// YouTube videos from DB section ends\n\n\t\t// Vimeo videos from DB section begins\n\n\t\tvar vimeoVideosFromOptions = ga_options.vimeo_videos;\n\t\tvar vimeoVideosFromDB = {};\n\n\t\tif (typeof vimeoVideosFromOptions !== \"undefined\") {\n\t\t\tvimeoVideosFromOptions.forEach(function (video) {\n\t\t\t\tvimeoVideosFromDB[video.name] = {\n\t\t\t\t\t\"id_type\": video.type,\n\t\t\t\t\t\"trackPlay\": video.play,\n\t\t\t\t\t\"trackPause\": video.pause,\n\t\t\t\t\t\"trackEnd\": video.end,\n\t\t\t\t\t\"trackSkip\": video.skip\n\t\t\t\t};\n\n\t\t\t});\n\t\t}\n\n\n\t\t// Vimeovideos from DB section ends\n\n\t\t// Link tracking section begins\n\n\t\tvar linkTrackingDataFromDB = {\n\t\t\t\"track\": ga_options.link_tracking.track,\n\t\t\t\"type\": ga_options.link_tracking.type,\n\t\t\t\"link_class\": ga_options.link_tracking.class\n\t\t};\n\n\t\t// Link tracking section ends\n\n\t\t// Expose modified properties to global scope\n\t\treturn {\n\n\t\t\t// From ga_options\n\t\t\tclickElementsFromDB: clickElementsFromDB,\n\t\t\tscrollElementsFromDB: scrollElementsFromDB,\n\t\t\tyouTubeVideosFromDB: youTubeVideosFromDB,\n\t\t\tvimeoVideosFromDB: vimeoVideosFromDB,\n\t\t\tlinkTrackingDataFromDB: linkTrackingDataFromDB,\n\t\t\tnoFollowElements: ga_options.nofollow_links,\n\t\t\tforceSnippet: ga_options.force_snippet,\n\t\t\tadvancedMode: ga_options.advanced,\n\t\t\temailLinksTracking: ga_options.email_link_tracking,\n\t\t\ttelLinksTracking: ga_options.tel_link_tracking,\n\t\t\tdownloadTracking: ga_options.download_tracking,\n\t\t\tdownloadTrackingFileTypes: ga_options.download_tracking_type,\n\t\t\tlink_clicks_delay: ga_options.link_clicks_delay,\n\t\t\tyoutube: ga_options.youtube_videos,\n\t\t\tvimeo: ga_options.vimeo_videos,\n\t\t\tmedia_video: ga_options.media_video,\n\t\t\tmedia_audio: ga_options.media_audio,\n\t\t\tsnippet_type: ga_options.snippet_type,\n\t\t\tscriptDebugMode: ga_options.script_debug_mode,\n\t\t\t// from placeholders array\n\t\t\tisFrontPage: gaePlaceholders.is_front_page,\n\t\t\tisUserLoggedIn: gaePlaceholders.is_user_logged_in,\n\t\t\tcurrentUserName: gaePlaceholders.current_user_name,\n\t\t\tpageTitle: gaePlaceholders.page_title,\n\t\t\tpostID: gaePlaceholders.post_id,\n\t\t\tcategory: gaePlaceholders.category,\n\t\t\tpostAuthor: gaePlaceholders.post_author,\n\t\t\tcurrentUserId: gaePlaceholders.current_user_id\n\t\t}\n\n\n\t} // end if\n\n})();\n\n\n","/*\n * Manages link tracking for GA Events plugin\n */\n\n// Moved here to temporarily solve bug. May need to be somewhere else eventually\nvar nofollow_selectors = [];\n\nvar linkTracker = ( function ( $ ) {\n\n\tvar removeTrailingSlash = function ( url ) {\n\t\t//check and remove '/' at the end\n\t\tvar l = url.length - 1;\n\t\tif ( url.lastIndexOf( '/' ) === l ) {\n\t\t\turl = url.substring( 0, l );\n\t\t}\n\t\treturn url;\n\t};\n\n\tvar noFollowLinks = function() {\n\t\t\tvar links = [];\n\n\t\t\tif ( nofollowelem !== '' ) {\n\t\t\t\tvar nofollow_arr = nofollowelem.split( ',' );\n\t\t\t\tvar current = '';\n\t\t\t\tvar elem;\n\n\t\t\t\tfor ( var i = 0; i < nofollow_arr.length; i++ ) {\n\t\t\t\t\tcurrent = nofollow_arr[i];\n\t\t\t\t\tif (0 === current.indexOf(\"http\")) {\n\n\t\t\t\t\t\tlinks.push(removeTrailingSlash(current));\n\n\t\t\t\t\t} else if (0 === current.indexOf(\"id:\")) {\n\t\t\t\t\t\telem = current.substring(current.indexOf(\":\") + 1, current.length);\n\t\t\t\t\t\tvar target = $('#' + elem);\n\t\t\t\t\t\tnofollow_selectors.push('#' + elem);\n\t\t\t\t\t\tif (target.is(\"a\") && typeof target.href !== \"undefined\") {\n\t\t\t\t\t\t\tlinks.push(removeTrailingSlash(target.attr('href')));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (0 === current.indexOf(\"class:\")) {\n\t\t\t\t\t\telem = current.substring(current.indexOf(\":\") + 1, current.length);\n\t\t\t\t\t\tvar target = $('.' + elem);\n\t\t\t\t\t\tnofollow_selectors.push('.' + elem);\n\t\t\t\t\t\tif (target.is(\"a\") && typeof target.href !== \"undefined\") {\n\t\t\t\t\t\t\tlinks.push(removeTrailingSlash(target.attr('href')));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (0 === current.indexOf(\"advanced:\")) {\n\t\t\t\t\t\telem = current.substring(current.indexOf(\":\") + 1, current.length);\n\t\t\t\t\t\tvar target = $(elem);\n\t\t\t\t\t\tnofollow_selectors.push(elem);\n\t\t\t\t\t\tif (target.is(\"a\") && typeof target.href !== \"undefined\") {\n\t\t\t\t\t\t\tlinks.push(removeTrailingSlash(target.attr('href')));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn links;\n\t\t}\n\t\t;\n\n\tvar nofollowelem = gaeMapper.noFollowElements || '';\n\tvar nofollow_links = [];\n\n\t$(document).ready(function () {\n\t\tnofollow_links = noFollowLinks();\n\t});\n\n\t/*\n\t * Helper for string replacement\n\t */\n\n\tvar isLinkExternal = function ( url ) {\n\t\tvar query = new RegExp( \"//\" + location.host + \"($|/)\" );\n\t\tif ( url.substring( 0, 4 ) === \"http\" ) {\n\t\t\tif ( !query.test( url ) ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\tvar link_track_external = function ( event ) {\n\n\t\tvar url = getUrl( event );\n\t\tif ( isLinkExternal( url ) ) {\n\t\t\tlink_track_all( event );\n\t\t}\n\t};\n\n\tvar link_track_external_new_tab = function ( event ) {\n\t\tvar url = getUrl( event );\n\t\tif ( isLinkExternal( url ) ) {\n\t\t\tgaEventsMain.track_event( gaeMapper.pageTitle, 'Link', url, false );\n\t\t}\n\t};\n\n\tvar link_track_all = function ( event ) {\n\n\t\tvar url = getUrl( event );\n\n\t\tgaEventsMain.track_event( gaeMapper.pageTitle, 'Link', url, false );\n\t\tif (typeof url !== \"undefined\" && url !== \"\") {\n\t\t\tif ( !( isNoFollowLink(url ) ||\n\t\t\t\tisNoFollowSel( '.' + event.currentTarget.className ) ||\n\t\t\t\tisNoFollowSel( '#' + event.currentTarget.id ) ) ) {\n\n\t\t\t\tevent.preventDefault();\n\t\t\t\tvar hash = isJustHashLink( event );\n\t\t\t\tif ( typeof hash !== \"undefined\" && hash !== \"\" ) {\n\t\t\t\t\twindow.location.hash = hash;\n\t\t\t\t} else {\n\t\t\t\t\tsetTimeout( function () {\n\t\t\t\t\t\twindow.location = url;\n\t\t\t\t\t}, parseInt( gaeMapper.link_clicks_delay ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tvar link_track_all_new_tab = function ( event ) {\n\t\tvar url = getUrl( event );\n\t\tgaEventsMain.track_event( gaeMapper.pageTitle, 'Link', url, false );\n\t};\n\n\tvar getUrl = function ( event ) {\n\t\tvar url = \"\";\n\t\tif ( event.target.tagName !== \"A\" ) {\n\t\t\turl = $( event.target ).parents( \"a\" ).attr( \"href\" );\n\t\t} else {\n\t\t\turl = event.target.href;\n\t\t}\n\n\t\treturn url;\n\t};\n\n\n\tvar isNoFollowLink = function ( url ) {\n\n\t\t// check if advanced mode is enabled, return false if not\n\t\tif ( gaeMapper.advancedMode == 0 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//check and remove '/' at the end\n\t\turl = removeTrailingSlash( url );\n\n\n\t\tif ( nofollow_links.length > 0 && nofollow_links.indexOf( url ) > -1 ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\tvar isNoFollowSel = function ( selector ) {\n\t\tvar selectors = [];\n\t\tif (selector.indexOf(\".\") > -1 ) {\n\t\t\tselectors = selector.split(\" \");\n\t\t\tfor (var i=0; i < selectors.length; i++ ) {\n\t\t\t\tif (selectors[i].indexOf(\".\") < 0) {\n\t\t\t\t\tselectors[i] = \".\"+selectors[i];\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tselectors[0] = selector;\n\t\t}\n\t\t// check if advanced mode is enabled, return false if not\n\t\tif ( gaeMapper.advancedMode == 0 ) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (var j=0; j < selectors.length; j++ ) {\n\t\t\tif (nofollow_selectors.length > 0 && nofollow_selectors.indexOf(selectors[j]) > -1) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\n\tvar isElementInViewport = function ( elem ) {\n\t\tvar docViewTop = jQuery( window ).scrollTop();\n\t\tvar docViewBottom = docViewTop + jQuery( window ).height();\n\n\t\tvar elemTop = jQuery( elem ).offset().top;\n\t\tvar elemBottom = elemTop + jQuery( elem ).height();\n\n\t\treturn ( ( elemBottom <= docViewBottom ) && ( elemTop >= docViewTop ) );\n\t};\n\n\tvar isInt = function ( value ) {\n\t\treturn !isNaN( value ) &&\n\t\t\tparseInt( Number( value ) ) == value &&\n\t\t\t!isNaN( parseInt( value, 10 ) );\n\t};\n\n\tvar unescapeChars = function ( text ) {\n\t\tvar map = {\n\t\t\t'&': '&',\n\t\t\t'<': '<',\n\t\t\t'>': '>',\n\t\t\t'"': '\"',\n\t\t\t'\\\"': '\"',\n\t\t\t''': \"'\"\n\t\t};\n\t\treturn text.replace( /<|>|"|''/gi, function ( m ) {\n\t\t\treturn map[m];\n\t\t} );\n\t};\n\n\n\tvar isJustHashLink = function ( event ) {\n\t\tvar url = \"\";\n\t\tif ( event.target.tagName !== \"A\" ) {\n\t\t\turl = $( event.target ).parents( \"a\" ).attr( \"href\" );\n\t\t} else {\n\t\t\turl = $( event.target ).attr( \"href\" );\n\t\t}\n\t\tif ( typeof url !== \"undefined\" && url.indexOf( \"#\" ) === 0 ) {\n\t\t\treturn url;\n\t\t}\n\t\treturn \"\";\n\t};\n\t// parameter: time (time in seconds)\n\tvar printTime = function ( time ) {\n\t\t// Hours, minutes and seconds\n\t\tvar hrs = ~~( time / 3600 );\n\t\tvar mins = ~~( ( time % 3600 ) / 60 );\n\t\tvar secs = time % 60;\n\n\t\t// Output like \"1:01\" or \"4:03:59\" or \"123:03:59\"\n\t\tvar ret = \"\";\n\n\t\tif ( hrs > 0 ) {\n\t\t\tret += \"\" + hrs + \":\" + ( mins < 10 ? \"0\" : \"\" );\n\t\t}\n\n\t\tret += \"\" + mins + \":\" + ( secs < 10 ? \"0\" : \"\" );\n\t\tret += \"\" + secs;\n\t\treturn ret;\n\t};\n\n\n\n\t// Expose link tracking methods to global scope (for binding)\n\treturn {\n\t\tlink_track_all: link_track_all,\n\t\tlink_track_all_new_tab: link_track_all_new_tab,\n\t\tlink_track_external: link_track_external,\n\t\tlink_track_external_new_tab: link_track_external_new_tab,\n\t\tisNoFollowLink: isNoFollowLink,\n\t\tisNoFollowSel: isNoFollowSel,\n\t\tisJustHashLink: isJustHashLink,\n\t\tnofollow_links: noFollowLinks,\n\t};\n\n} )( jQuery );\n\n"]}