PageSourceSearch

https://vizworld.com/wp-content/plugins/duracelltomi-google-tag-manager/js/gtm4wp-youtube.js?ver=1.16.1

js vizworld.com collected 2026-10-02 09:54:06 UTC 7,311 bytes, 226 lines download raw bytes

1let gtm4wp_youtube_percentage_tracking = 10;
2let gtm4wp_youtube_percentage_tracking_timeouts = {};
3let gtm4wp_youtube_percentage_tracking_marks = {};
4
5if ( typeof onYouTubeIframeAPIReady === "undefined" ) {
6	window.onYouTubeIframeAPIReady = function() {
7		window[ gtm4wp_datalayer_name ].push({
8			'event': 'gtm4wp.mediaApiReady',
9			'mediaType': 'youtube'
10		});
11
12		const gtm4wp_youtube_frames = document.querySelectorAll( "iframe[src^='https://www.youtube.com/embed']" );
13		if ( !gtm4wp_youtube_frames || gtm4wp_youtube_frames.length == 0 ) {
14			return;
15		}
16
17		gtm4wp_youtube_frames.forEach( function( youtube_frame ) {
18			let playerID = youtube_frame.getAttribute( "id" );
19
20			if ( ( playerID === null ) || ( playerID === undefined ) || ( playerID === "" ) ) {
21				const _gtm4wp_temp  = youtube_frame.getAttribute( "src" ).split( "?" );
22				const _gtm4wp_temp2 = _gtm4wp_temp[ 0 ].split( "/" );
23
24				playerID = "youtubeplayer_" + _gtm4wp_temp2[ _gtm4wp_temp2.length-1 ];
25				youtube_frame.setAttribute( "id", playerID );
26			}
27
28			let gtm4wp_yturl = youtube_frame.getAttribute( "src" );
29			if ( gtm4wp_yturl.indexOf( "enablejsapi=1" ) == -1 ) {
30				if ( gtm4wp_yturl.indexOf( "?" ) == -1 ) {
31					gtm4wp_yturl += "?";
32				}
33
34				gtm4wp_yturl += "&enablejsapi=1&origin=" + document.location.protocol + "//" + document.location.hostname;
35
36				youtube_frame.setAttribute( "src", gtm4wp_yturl );
37			}
38
39			player = new YT.Player( playerID, {
40				events: {
41					'onReady': gtm4wp_onYouTubePlayerReady,
42					'onStateChange': gtm4wp_onYouTubePlayerStateChange,
43					'onPlaybackQualityChange': gtm4wp_onYouTubePlaybackQualityChange,
44					'onPlaybackRateChange': gtm4wp_onYouTubePlaybackRateChange,
45					'onError': gtm4wp_onYouTubeError,
46					'onApiChange': gtm4wp_onYouTubeApiChange
47				}
48			});
49		});
50	};
51
52	let tag = document.createElement( 'script' );
53	tag.src = "//www.youtube.com/iframe_api";
54	let firstScriptTag = document.getElementsByTagName( 'script' )[0];
55	firstScriptTag.parentNode.insertBefore( tag, firstScriptTag );
56} else {
57	let gtm4wp_err = new Error( "Another code is already utilizing YouTube API, GTM4WP plugin can not load YouTube tracking!" );
58	throw gtm4wp_err;
59}
60
61function gtm4wp_onYouTubePlayerReady( event ) {
62	const videodata = event.target.getVideoData();
63
64	window[ gtm4wp_datalayer_name ].push({
65		'event': 'gtm4wp.mediaPlayerReady',
66		'mediaType': 'youtube',
67		'mediaData': {
68			'id': videodata.video_id,
69			'author': videodata.author,
70			'title': videodata.title,
71			'url': event.target.getVideoUrl(),
72			'duration': event.target.getDuration()
73		},
74		'mediaCurrentTime': event.target.getCurrentTime()
75	});
76}
77
78function gtm4wp_onYouTubePlayerStateChange( event ) {
79	let playerState = "unknown";
80
81	switch( event.data ) {
82		case -1:                       playerState = "unstarted"; break;
83		case YT.PlayerState.ENDED:     playerState = "ended"; break;
84		case YT.PlayerState.PLAYING:   playerState = "play"; break;
85		case YT.PlayerState.PAUSED:    playerState = "pause"; break;
86		case YT.PlayerState.BUFFERING: playerState = "buffering"; break;
87		case YT.PlayerState.CUED:      playerState = "cued"; break;
88	}
89
90	const videoId = event.target.getVideoData().video_id;
91
92	if ( ( YT.PlayerState.PLAYING == event.data ) && ( gtm4wp_youtube_percentage_tracking > 0 ) ) {
93		gtm4wp_youtube_percentage_tracking_timeouts[ videoId ] = setInterval(function() {
94			gtm4wp_onYouTubePercentageChange( event );
95		}, 1000);
96	} else {
97		if ( gtm4wp_youtube_percentage_tracking_timeouts[ videoId ] ) {
98			clearInterval( gtm4wp_youtube_percentage_tracking_timeouts[ videoId ] );
99		}
100	}
101
102	const videodata = event.target.getVideoData();
103
104	window[ gtm4wp_datalayer_name ].push({
105		'event': 'gtm4wp.mediaPlayerStateChange',
106		'mediaType': 'youtube',
107		'mediaData': {
108			'id': videodata.video_id,
109			'author': videodata.author,
110			'title': videodata.title,
111			'url': event.target.getVideoUrl(),
112			'duration': event.target.getDuration()
113		},
114		'mediaPlayerState': playerState,
115		'mediaCurrentTime': event.target.getCurrentTime()
116	});
117}
118
119function gtm4wp_onYouTubePlaybackQualityChange( event ) {
120	const videodata = event.target.getVideoData();
121
122	window[ gtm4wp_datalayer_name ].push({
123		'event': 'gtm4wp.mediaPlayerEvent',
124		'mediaType': 'youtube',
125		'mediaData': {
126			'id': videodata.video_id,
127			'author': videodata.author,
128			'title': videodata.title,
129			'url': event.target.getVideoUrl(),
130			'duration': event.target.getDuration()
131		},
132		'mediaCurrentTime': event.target.getCurrentTime(),
133		'mediaPlayerEvent': 'quality-change',
134		'mediaPlayerEventParam': event.data
135	});
136}
137
138function gtm4wp_onYouTubePlaybackRateChange( event ) {
139	const videodata = event.target.getVideoData();
140
141	window[ gtm4wp_datalayer_name ].push({
142		'event': 'gtm4wp.mediaPlayerEvent',
143		'mediaType': 'youtube',
144		'mediaData': {
145			'id': videodata.video_id,
146			'author': videodata.author,
147			'title': videodata.title,
148			'url': event.target.getVideoUrl(),
149			'duration': event.target.getDuration()
150		},
151		'mediaCurrentTime': event.target.getCurrentTime(),
152		'mediaPlayerEvent': 'ratechange',
153		'mediaPlayerEventParam': event.data
154	});
155}
156
157function gtm4wp_onYouTubeError( event ) {
158	const videodata = event.target.getVideoData();
159
160	window[ gtm4wp_datalayer_name ].push({
161		'event': 'gtm4wp.mediaPlayerEvent',
162		'mediaType': 'youtube',
163		'mediaData': {
164			'id': videodata.video_id,
165			'author': videodata.author,
166			'title': videodata.title,
167			'url': event.target.getVideoUrl(),
168			'duration': event.target.getDuration()
169		},
170		'mediaCurrentTime': event.target.getCurrentTime(),
171		'mediaPlayerEvent': 'error',
172		'mediaPlayerEventParam': event.data
173	});
174}
175
176function gtm4wp_onYouTubeApiChange( event ) {
177	const videodata = event.target.getVideoData();
178
179	window[ gtm4wp_datalayer_name ].push({
180		'event': 'gtm4wp.mediaPlayerEvent',
181		'mediaType': 'youtube',
182		'mediaData': {
183			'id': videodata.video_id,
184			'author': videodata.author,
185			'title': videodata.title,
186			'url': event.target.getVideoUrl(),
187			'duration': event.target.getDuration()
188		},
189		'mediaCurrentTime': event.target.getCurrentTime(),
190		'mediaPlayerEvent': 'api-change',
191		'mediaPlayerEventParam': event.data
192	});
193}
194
195function gtm4wp_onYouTubePercentageChange( event ) {
196	const videoId          = event.target.getVideoData().video_id;
197	const videoCurrentTime = event.target.getCurrentTime();
198	const videoDuration    = event.target.getDuration();
199	const videoPercentage  = Math.floor( videoCurrentTime / videoDuration * 100 );
200
201	if ( typeof gtm4wp_youtube_percentage_tracking_marks[ videoId ] == "undefined" ) {
202		gtm4wp_youtube_percentage_tracking_marks[ videoId ] = [];
203	}
204
205	const videodata = event.target.getVideoData();
206
207	for( let i=0; i<100; i+=gtm4wp_youtube_percentage_tracking ) {
208		if ( ( videoPercentage > i ) && ( gtm4wp_youtube_percentage_tracking_marks[ videoId ].indexOf( i ) == -1 ) ) {
209			gtm4wp_youtube_percentage_tracking_marks[ videoId ].push( i );
210
211			window[ gtm4wp_datalayer_name ].push({
212				'event': 'gtm4wp.mediaPlaybackPercentage',
213				'mediaType': 'youtube',
214				'mediaData': {
215					'id': videodata.video_id,
216					'author': videodata.author,
217					'title': videodata.title,
218					'url': event.target.getVideoUrl(),
219					'duration': event.target.getDuration()
220				},
221				'mediaCurrentTime': event.target.getCurrentTime(),
222				'mediaPercentage': i
223			});
224		}
225	}
226}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.