Skip to content

Instantly share code, notes, and snippets.

@Magnacarter
Last active May 15, 2020 20:00
Show Gist options
  • Save Magnacarter/18d3dac1d36c7e8ac0737f843fea33f8 to your computer and use it in GitHub Desktop.
Save Magnacarter/18d3dac1d36c7e8ac0737f843fea33f8 to your computer and use it in GitHub Desktop.
/**
* 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