-
Notifications
You must be signed in to change notification settings - Fork 284
/
Copy pathads.js
111 lines (95 loc) · 3.61 KB
/
ads.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/**
* Copyright 2014 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var Ads = function() {
// Set up UI stuff.
this.adTagInput = document.getElementById('tagInput');
var sampleAdTag = document.getElementById('sampleAdTag');
sampleAdTag.addEventListener('click', () => {
this.adTagInput.value = this.SAMPLE_AD_TAG;
});
this.console = document.getElementById('ima-sample-console');
this.player = videojs('content_video');
// Remove controls from the player on iPad to stop native controls from stealing
// our click
var contentPlayer = document.getElementById('content_video_html5_api');
if ((navigator.userAgent.match(/iPad/i) ||
navigator.userAgent.match(/Android/i)) &&
contentPlayer.hasAttribute('controls')) {
contentPlayer.removeAttribute('controls');
}
// Start ads when the video player is clicked, but only the first time it's
// clicked.
this.startEvent = 'click';
if (navigator.userAgent.match(/iPhone/i) ||
navigator.userAgent.match(/iPad/i) ||
navigator.userAgent.match(/Android/i)) {
this.startEvent = 'touchend';
}
this.wrapperDiv = document.getElementById('content_video');
this.boundInit = this.init.bind(this);
this.wrapperDiv.addEventListener(this.startEvent, this.boundInit);
var options = {
id: 'content_video',
adsManagerLoadedCallback: this.adsManagerLoadedCallback.bind(this)
};
this.player.ima(options);
};
Ads.prototype.SAMPLE_AD_TAG = 'http://pubads.g.doubleclick.net/gampad/ads?' +
'sz=640x480&iu=/124319096/external/ad_rule_samples&ciu_szs=300x250&' +
'ad_rule=1&impl=s&gdfp_req=1&env=vp&output=xml_vmap1&' +
'unviewed_position_start=1&' +
'cust_params=sample_ar%3Dpremidpostpod%26deployment%3Dgmf-js&cmsid=496&' +
'vid=short_onecue&correlator=';
Ads.prototype.init = function() {
if (this.adTagInput.value == '') {
this.log('Error: please fill in an ad tag');
} else {
this.player.ima.initializeAdDisplayContainer();
this.player.ima.setContentWithAdTag(null, this.adTagInput.value, false);
this.player.ima.requestAds();
this.wrapperDiv.removeEventListener(this.startEvent, this.boundInit);
}
};
Ads.prototype.adsManagerLoadedCallback = function() {
var events = [
google.ima.AdEvent.Type.ALL_ADS_COMPLETED,
google.ima.AdEvent.Type.CLICK,
google.ima.AdEvent.Type.COMPLETE,
google.ima.AdEvent.Type.FIRST_QUARTILE,
google.ima.AdEvent.Type.LOADED,
google.ima.AdEvent.Type.MIDPOINT,
google.ima.AdEvent.Type.PAUSED,
google.ima.AdEvent.Type.RESUMED,
google.ima.AdEvent.Type.STARTED,
google.ima.AdEvent.Type.THIRD_QUARTILE
];
for (var index = 0; index < events.length; index++) {
this.player.ima.addEventListener(
events[index],
this.onAdEvent.bind(this));
}
this.player.on('adslog', this.onAdLog.bind(this));
};
Ads.prototype.onAdLog = function(data) {
this.log('Ad log: ' + data.data.AdError);
};
Ads.prototype.onAdEvent = function(event) {
var message = 'Ad event: ' + event.type;
this.log(message);
};
Ads.prototype.log = function(message) {
this.console.innerHTML = this.console.innerHTML + '<br/>' + message;
}