/*
URL Parameter Passthrough Script for Thrivecart (LTV Numbers)
This script appends all URL parameters from the current URL to all links on the page so they can "passthrough" to the next page, using the Thrivecart syntax of "passthroug[key]=value"
USAGE: place this script at the end of the
tag or inside the tag of the page. The script can also be placed in the of the page if necessary, but it may cause the script to misbehave. -->
It can also be sourced in a
*/
var version = '1.0.2'
var main = function () {
console.log('===== URL Parameter Passthrough Thrivecart Script (LTV Numbers) =====')
console.log('version:', version)
var params = getParams(window.location.href, true)
console.log('params:', params)
// If there are no params, don't do anything
if (params && Object.keys(params).length === 0 && params.constructor === Object) {
console.log('no URL parameters found. exiting...')
return
}
addParamsToAnchorElements(params)
addParamsToClickfunnelsSurveyRedirects(params)
}
var getParams = function (url, enclosePassthrough) {
var params = {}
var parser = document.createElement('a')
parser.href = url
var query = parser.search.substring(1)
var vars = query.split('&')
// If no vars are present, return empty object
if (vars.length === 1 && vars[0] === "") return {}
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split('=')
var key = pair[0]
let value = pair[1]
// Ensure that no query strings are improperly appended to the value
if (value && value.indexOf('%3F') > -1) {
value = value.split('%3F')[0]
} else if (value && value.indexOf('?') > -1) {
value = value.split('?')[0]
}
if (enclosePassthrough) {
params[`passthrough[${key}]`] = decodeURIComponent(value)
} else {
params[key] = decodeURIComponent(value)
}
}
return params
}
var addParamsToAnchorElements = function (url_params) {
console.log('add params to anchor elements')
document.querySelectorAll('a').forEach(function (element) {
try {
updateElementAttributeWithParams(element, 'href', url_params)
} catch (e) {
console.log('unable to update link')
}
})
}
var addParamsToClickfunnelsSurveyRedirects = function (url_params) {
console.log('add params to Clickfunnels survey redirects')
document.querySelectorAll('.elSurvey').forEach(function (element) {
try {
updateElementAttributeWithParams(element, 'data-page-redirect-url', url_params)
} catch (e) {
console.log('unable to update link')
}
})
}
var updateElementAttributeWithParams = function (element, attribute, url_params) {
console.log('-------------------------------------------------------')
var link = element.getAttribute(attribute) || ''
console.log('link:', link)
// Skip links to page anchors
if (link.indexOf('#') > -1) {
console.log('skipping page anchor')
return
}
// Skip 'file' links
if (link.startsWith('file:')) {
console.log('skipping file link')
return
}
// Skip 'ftp' links
if (link.startsWith('ftp:')) {
console.log('skipping ftp link')
return
}
// Skip 'javascript' links
if (link.startsWith('javascript:')) {
console.log('skipping script reference')
return
}
// Skip 'mailto' links
if (link.startsWith('mailto:')) {
console.log('skipping mailto link')
return
}
// Skip 'tel' links
if (link.startsWith('tel:')) {
console.log('skipping tel link')
return
}
var link_params = getParams(link)
console.log('link_params:', link_params)
var combined_params = Object.assign({}, url_params, link_params)
console.log('combined_params:', combined_params)
var encoded_params = ''
Object.entries(combined_params).forEach(([key, value], index) => {
if (index === 0) encoded_params += '?'
else encoded_params += '&'
encoded_params += key + '=' + value
})
console.log('encoded_params:', encoded_params)
var current_link = element.getAttribute(attribute) || ''
var base_url = current_link.split('?')[0]
var new_link = base_url + encoded_params
element.setAttribute(attribute, new_link)
console.log('updated link:', element.getAttribute(attribute))
}
main()