- uses custom Data Layer Variables set by monitor script
- uses custom event, verifies category is set to value by monitor
- only invoked once
LICENSE: WTFPL
/** | |
* Uses custom regexp for activation on pages | |
* returns false if video element is already played (data-played="true") | |
*/ | |
function () { | |
var isVideoPage = /^\/(embed|share-video)\/[0-9]+$/.test(location.pathname) | |
var video = document.getElementById('shared-video') | |
var isReady = video && (! Boolean(video.dataset['played'])) | |
return isVideoPage && isReady | |
} |
/** | |
* Tag, set event target, abort early if listener already added | |
* activated by custom variable. | |
* @see isPlayerReady.js | |
* | |
*/ | |
;(function() { | |
var video = document.getElementById('shared-video') | |
if (video.dataset['listener']) return | |
var alreadyReported = false | |
video.dataset['played'] = alreadyReported | |
video.dataset['listener'] = 'set' | |
var playedVideoMark = 5 | |
function eventHandler(e) { | |
location.hash === '#debug' && console.log({type: e.type, reported: alreadyReported, played: video.dataset['played']}) | |
if (e.type !== 'timeupdate') return | |
if (alreadyReported) { | |
video.dataset['played'] = true | |
video.removeEventListener("timeupdate", eventHandler, false) | |
return | |
} | |
if (e.target.currentTime > playedVideoMark) { | |
alreadyReported = true | |
var hasVideoId = /[0-9]+/.exec(location.pathname) | |
var label = (hasVideoId === null ? '' : hasVideoId[0]) + | |
':' + decodeURIComponent(document.title) | |
dataLayer.push({ | |
'event': 'event', | |
'gaEventCategory': 'Shared Video Played', | |
'gaEventAction': 'player.reached.' + playedVideoMark.toString(), | |
'gaEventLabel': label | |
}) | |
} | |
} | |
// configure the listener | |
video.addEventListener("timeupdate", eventHandler, false) | |
})() |