Last active
May 15, 2020 20:00
-
-
Save Magnacarter/18d3dac1d36c7e8ac0737f843fea33f8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Track pageviews when the page is translated directly from translate.google.com or bing.com/translator | |
* and return an individual query parameter. | |
* | |
* @param string name | |
* @return string results | |
*/ | |
const getUrlParameter = ( name ) => { | |
name = name.replace( /[\[]/, '\\[').replace(/[\]]/, '\\]' ); | |
let regex = new RegExp( '[\\?&]' + name + '=([^&#]*)' ), | |
results = regex.exec( location.search ); | |
if ( results !== null ) { | |
results = decodeURIComponent( results[1].replace( /\+/g, ' ' ) ); | |
} else { | |
return; | |
} | |
return results; | |
}; | |
/** | |
* Callback for mutation callback. Pushes key/value | |
* pairs to the client's dataLayer object for each | |
* mutation. | |
* | |
* @param mutation | |
* @return void | |
*/ | |
const mutationForeachCallback = ( mutation ) => { | |
let oldElementClass = mutation.oldValue, | |
currentElementClass = mutation.target.className; | |
if ( oldElementClass.indexOf('translated-') === -1 && currentElementClass.indexOf('translated-') > -1) { | |
console.log( mutation ); | |
window.dataLayer.push({ | |
'event': 'pageTranslated', | |
'translationLanguage': mutation.target.lang || document.getElementsByTagName('html')[0].getAttribute('xml:lang'), | |
'translationService': 'On-Page Google Translate', | |
}); | |
} | |
} | |
/** | |
* Callback function for MutationObserver object. | |
* | |
* @param mutations | |
* @return void | |
*/ | |
const mutationObserverCallback = ( mutations ) => { | |
mutations.forEach( mutationForeachCallback( mutation ) ); | |
} | |
// Observe DOM mutations whether the <html> node was changed by Google Translate. | |
if ( window.MutationObserver ) { | |
let htmlNode = document.querySelector( 'html' ), | |
mutationObserver = new MutationObserver( mutationObserverCallback( mutations ) ); | |
mutationObserver.observe(htmlNode, { | |
attributes: true, | |
attributeOldValue: true, | |
attributeFilter: ['class'], | |
}); | |
} | |
// Check if the page is being translated directly from translate.google.com (viewed within the iframe) | |
if ( window.location.href.indexOf( 'translate.googleusercontent.com' ) > -1 ) { | |
window.dataLayer.push({ | |
'event': 'pageTranslated', | |
'translationLanguage': getUrlParameter( 'tl' ), | |
'translationService': 'Google Translate Website', | |
}); | |
} | |
// Check if the page is being translated directly from bing.com/translator (viewed within the iframe) | |
if ( window.location.href.indexOf( 'translatoruser-int.com' ) > -1 ) { | |
window.dataLayer.push({ | |
'event': 'pageTranslated', | |
'translationLanguage': getUrlParameter( 'to' ), | |
'translationService': 'Bing Translator Website' | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment