diff --git a/docs/assets/example/vast.js b/docs/assets/example/vast.js
index a523125f1..75a4f2273 100644
--- a/docs/assets/example/vast.js
+++ b/docs/assets/example/vast.js
@@ -1,5 +1,5 @@
// npm i artplayer-plugin-vast
-// import ArtplayerPluginVast from 'artplayer-plugin-vast';
+// import artplayerPluginVast from 'artplayer-plugin-vast';
var art = new Artplayer({
container: '.artplayer-app',
@@ -7,8 +7,8 @@ var art = new Artplayer({
fullscreen: true,
fullscreenWeb: true,
plugins: [
- ArtplayerPluginVast({
- url: '/assets/sample/vast.xml',
+ artplayerPluginVast(({ playUrl }) => {
+ //
}),
],
});
\ No newline at end of file
diff --git a/docs/assets/vast/linear-ad-1s.xml b/docs/assets/vast/linear-ad-1s.xml
new file mode 100644
index 000000000..d6913d9b4
--- /dev/null
+++ b/docs/assets/vast/linear-ad-1s.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/assets/vast/linear-ad-2s.xml b/docs/assets/vast/linear-ad-2s.xml
new file mode 100644
index 000000000..4798ffe93
--- /dev/null
+++ b/docs/assets/vast/linear-ad-2s.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/assets/vast/linear-ad.xml b/docs/assets/vast/linear-ad.xml
new file mode 100644
index 000000000..9d65bc9d2
--- /dev/null
+++ b/docs/assets/vast/linear-ad.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/assets/vast/linear-video-1s.mp4 b/docs/assets/vast/linear-video-1s.mp4
new file mode 100644
index 000000000..50483aab3
Binary files /dev/null and b/docs/assets/vast/linear-video-1s.mp4 differ
diff --git a/docs/assets/vast/linear-video-2s.mp4 b/docs/assets/vast/linear-video-2s.mp4
new file mode 100644
index 000000000..b5cddc3e2
Binary files /dev/null and b/docs/assets/vast/linear-video-2s.mp4 differ
diff --git a/docs/assets/vast/linear-video.mp4 b/docs/assets/vast/linear-video.mp4
new file mode 100644
index 000000000..4b95f52cc
Binary files /dev/null and b/docs/assets/vast/linear-video.mp4 differ
diff --git a/docs/assets/vast/nonlinear-320x50.png b/docs/assets/vast/nonlinear-320x50.png
new file mode 100644
index 000000000..8b428d446
Binary files /dev/null and b/docs/assets/vast/nonlinear-320x50.png differ
diff --git a/docs/assets/vast/nonlinear-480x70.png b/docs/assets/vast/nonlinear-480x70.png
new file mode 100644
index 000000000..43738b313
Binary files /dev/null and b/docs/assets/vast/nonlinear-480x70.png differ
diff --git a/docs/assets/vast/nonlinear-728x90.png b/docs/assets/vast/nonlinear-728x90.png
new file mode 100644
index 000000000..928d811f7
Binary files /dev/null and b/docs/assets/vast/nonlinear-728x90.png differ
diff --git a/docs/assets/vast/nonlinear-ad.xml b/docs/assets/vast/nonlinear-ad.xml
new file mode 100644
index 000000000..6bd0af23a
--- /dev/null
+++ b/docs/assets/vast/nonlinear-ad.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/assets/vast/vast-waterfall.xml b/docs/assets/vast/vast-waterfall.xml
new file mode 100644
index 000000000..4603dca18
--- /dev/null
+++ b/docs/assets/vast/vast-waterfall.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/assets/vast/vmap.xml b/docs/assets/vast/vmap.xml
new file mode 100644
index 000000000..130c861fd
--- /dev/null
+++ b/docs/assets/vast/vmap.xml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/uncompiled/artplayer-plugin-vast/index.js b/docs/uncompiled/artplayer-plugin-vast/index.js
index cb8fd7742..366a5d209 100644
--- a/docs/uncompiled/artplayer-plugin-vast/index.js
+++ b/docs/uncompiled/artplayer-plugin-vast/index.js
@@ -146,32 +146,707 @@
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
parcelHelpers.defineInteropFlag(exports);
parcelHelpers.export(exports, "default", ()=>artplayerPluginVast);
-var _styleLess = require("bundle-text:./style.less");
-var _styleLessDefault = parcelHelpers.interopDefault(_styleLess);
-function artplayerPluginVast(option) {
- return (art)=>{
+var _vastImaPlayer = require("@glomex/vast-ima-player");
+function artplayerPluginVast(callback) {
+ return async (art)=>{
+ const { template, constructor } = art;
+ const { createElement, setStyles, append } = constructor.utils;
+ const { $video, $player } = template;
+ await (0, _vastImaPlayer.loadImaSdk)();
+ const google = window.google;
+ const ima = google.ima;
+ const adsRenderingSettings = new ima.AdsRenderingSettings();
+ const playerOptions = new (0, _vastImaPlayer.PlayerOptions)();
+ const id = `art-${Date.now()}`;
+ const $container = createElement("div");
+ append($player, $container);
+ $container.id = id;
+ setStyles($container, {
+ position: "absolute",
+ inset: "0",
+ width: "100%",
+ height: "100%",
+ zIndex: "150"
+ });
+ const player = new (0, _vastImaPlayer.Player)(ima, $video, $container, adsRenderingSettings, playerOptions);
+ function playUrl(url) {
+ const playAdsRequest = new ima.AdsRequest();
+ playAdsRequest.adTagUrl = url;
+ player.playAds(playAdsRequest);
+ }
+ function playRes(res) {
+ const playAdsRequest = new ima.AdsRequest();
+ playAdsRequest.adsResponse = res;
+ player.playAds(playAdsRequest);
+ }
+ if (typeof callback === "function") await callback({
+ art,
+ id,
+ ima,
+ player,
+ $container,
+ playUrl,
+ playRes
+ });
return {
- name: "artplayerPluginVast"
+ name: "artplayerPluginVast",
+ id,
+ ima,
+ player,
+ $container
};
};
}
-if (typeof document !== "undefined") {
- const id = "artplayer-plugin-vast";
- const $style = document.getElementById(id);
- if ($style) $style.textContent = (0, _styleLessDefault.default);
- else {
- const $style = document.createElement("style");
- $style.id = id;
- $style.textContent = (0, _styleLessDefault.default);
- document.head.appendChild($style);
+if (typeof window !== "undefined") window["artplayerPluginVast"] = artplayerPluginVast;
+
+},{"@glomex/vast-ima-player":"9NIGZ","@parcel/transformer-js/src/esmodule-helpers.js":"5dUr6"}],"9NIGZ":[function(require,module,exports) {
+var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
+parcelHelpers.defineInteropFlag(exports);
+parcelHelpers.export(exports, "Player", ()=>nt);
+parcelHelpers.export(exports, "PlayerError", ()=>T);
+parcelHelpers.export(exports, "PlayerEvent", ()=>R);
+parcelHelpers.export(exports, "PlayerOptions", ()=>E);
+parcelHelpers.export(exports, "loadImaSdk", ()=>e);
+var t = null, i = function() {
+ t = null;
+}, e = function() {
+ var e = window;
+ return e.google && e.google.ima ? Promise.resolve(e.google.ima) : t || ((t = new Promise(function(t, i) {
+ var e = document.createElement("script");
+ e.async = !0, e.src = "https://imasdk.googleapis.com/js/sdkloader/ima3.js", e.onload = t, e.onerror = i, document.body.appendChild(e);
+ }).then(function() {
+ return e.google.ima;
+ })).then(i).catch(i), t);
+};
+function n(t, i) {
+ for(var e = 0; e < i.length; e++){
+ var n = i[e];
+ n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n);
}
}
-if (typeof window !== "undefined") window["ArtplayerPluginVast"] = artplayerPluginVast;
+function s(t, i, e) {
+ return i && n(t.prototype, i), e && n(t, e), t;
+}
+function h() {
+ return h = Object.assign || function(t) {
+ for(var i = 1; i < arguments.length; i++){
+ var e = arguments[i];
+ for(var n in e)Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);
+ }
+ return t;
+ }, h.apply(this, arguments);
+}
+function r(t, i) {
+ t.prototype = Object.create(i.prototype), t.prototype.constructor = t, a(t, i);
+}
+function o(t) {
+ return o = Object.setPrototypeOf ? Object.getPrototypeOf : function(t) {
+ return t.__proto__ || Object.getPrototypeOf(t);
+ }, o(t);
+}
+function a(t, i) {
+ return a = Object.setPrototypeOf || function(t, i) {
+ return t.__proto__ = i, t;
+ }, a(t, i);
+}
+function u() {
+ if ("undefined" == typeof Reflect || !Reflect.construct) return !1;
+ if (Reflect.construct.sham) return !1;
+ if ("function" == typeof Proxy) return !0;
+ try {
+ return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {})), !0;
+ } catch (t) {
+ return !1;
+ }
+}
+function c(t, i, e) {
+ return c = u() ? Reflect.construct : function(t, i, e) {
+ var n = [
+ null
+ ];
+ n.push.apply(n, i);
+ var s = new (Function.bind.apply(t, n));
+ return e && a(s, e.prototype), s;
+ }, c.apply(null, arguments);
+}
+function d(t) {
+ var i = "function" == typeof Map ? new Map : void 0;
+ return d = function(t) {
+ if (null === t || -1 === Function.toString.call(t).indexOf("[native code]")) return t;
+ if ("function" != typeof t) throw new TypeError("Super expression must either be null or a function");
+ if (void 0 !== i) {
+ if (i.has(t)) return i.get(t);
+ i.set(t, e);
+ }
+ function e() {
+ return c(t, arguments, o(this).constructor);
+ }
+ return e.prototype = Object.create(t.prototype, {
+ constructor: {
+ value: e,
+ enumerable: !1,
+ writable: !0,
+ configurable: !0
+ }
+ }), a(e, t);
+ }, d(t);
+}
+function l(t) {
+ if (void 0 === t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ return t;
+}
+function f(t, i) {
+ (null == i || i > t.length) && (i = t.length);
+ for(var e = 0, n = new Array(i); e < i; e++)n[e] = t[e];
+ return n;
+}
+var v = 0;
+function b(t) {
+ return "__private_" + v++ + "_" + t;
+}
+function w(t, i) {
+ if (!Object.prototype.hasOwnProperty.call(t, i)) throw new TypeError("attempted to use private field on non-instance");
+ return t;
+}
+var m = {};
+m.CustomEvent = "function" == typeof CustomEvent ? CustomEvent : function(t) {
+ return i[t] = new i("").constructor[t], i;
+ function i(t, i) {
+ i || (i = {});
+ var e = document.createEvent("CustomEvent");
+ return e.initCustomEvent(t, !!i.bubbles, !!i.cancelable, i.detail), e;
+ }
+}("prototype");
+var p, y, O = m.CustomEvent, j = b("mediaElement"), g = b("currentTime"), A = b("enabled"), k = function() {
+ function t(t) {
+ Object.defineProperty(this, j, {
+ writable: !0,
+ value: void 0
+ }), Object.defineProperty(this, g, {
+ writable: !0,
+ value: void 0
+ }), Object.defineProperty(this, A, {
+ writable: !0,
+ value: void 0
+ }), this.seeking = void 0, w(this, j)[j] = t, w(this, g)[g] = 0, w(this, A)[A] = !1, this.seeking = !1, this.t = this.t.bind(this), this.i = this.i.bind(this), this.h = this.h.bind(this), this.enable();
+ }
+ var i = t.prototype;
+ return i.i = function() {
+ this.seeking = !0;
+ }, i.h = function() {
+ this.seeking = !1;
+ }, i.t = function() {
+ var t, i;
+ this.seeking || null != (t = w(this, j)[j]) && t.paused || (w(this, g)[g] = null == (i = w(this, j)[j]) ? void 0 : i.currentTime);
+ }, i.enable = function() {
+ var t, i, e;
+ w(this, A)[A] || (null == (t = w(this, j)[j]) || t.addEventListener("seeking", this.i), null == (i = w(this, j)[j]) || i.addEventListener("seeked", this.h), null == (e = w(this, j)[j]) || e.addEventListener("timeupdate", this.t), w(this, A)[A] = !0);
+ }, i.disable = function() {
+ var t, i, e;
+ w(this, A)[A] && (null == (t = w(this, j)[j]) || t.removeEventListener("seeking", this.i), null == (i = w(this, j)[j]) || i.removeEventListener("seeked", this.h), null == (e = w(this, j)[j]) || e.removeEventListener("timeupdate", this.t), w(this, A)[A] = !1);
+ }, i.play = function() {
+ var t = this;
+ return new Promise(function(i) {
+ var e;
+ i(null == (e = w(t, j)[j]) ? void 0 : e.play());
+ });
+ }, i.pause = function() {
+ var t;
+ null == (t = w(this, j)[j]) || t.pause();
+ }, i.reset = function() {
+ w(this, g)[g] = 0, w(this, A)[A] = !1, this.seeking = !1, this.enable();
+ }, i.destroy = function() {
+ w(this, g)[g] = 0, w(this, A)[A] = !1, this.seeking = !1, this.disable(), w(this, j)[j] = void 0;
+ }, s(t, [
+ {
+ key: "enabled",
+ get: function() {
+ return w(this, A)[A];
+ }
+ },
+ {
+ key: "currentTime",
+ get: function() {
+ return w(this, g)[g];
+ }
+ },
+ {
+ key: "duration",
+ get: function() {
+ var t;
+ return null == (t = w(this, j)[j]) ? void 0 : t.duration;
+ }
+ },
+ {
+ key: "muted",
+ get: function() {
+ var t;
+ return null == (t = w(this, j)[j]) ? void 0 : t.muted;
+ }
+ },
+ {
+ key: "volume",
+ get: function() {
+ var t;
+ return null == (t = w(this, j)[j]) ? void 0 : t.volume;
+ }
+ }
+ ]), t;
+}(), C = function() {
+ function t() {
+ this.delegate = document.createDocumentFragment();
+ }
+ var i = t.prototype;
+ return i.addEventListener = function() {
+ this.delegate.addEventListener.apply(this.delegate, [].slice.call(arguments));
+ }, i.dispatchEvent = function() {
+ return this.delegate.dispatchEvent.apply(this.delegate, [].slice.call(arguments));
+ }, i.removeEventListener = function() {
+ return this.delegate.removeEventListener.apply(this.delegate, [].slice.call(arguments));
+ }, t;
+}(), P = [
+ "abort",
+ "canplay",
+ "canplaythrough",
+ "durationchange",
+ "emptied",
+ "ended",
+ "error",
+ "loadeddata",
+ "loadedmetadata",
+ "loadstart",
+ "pause",
+ "play",
+ "playing",
+ "progress",
+ "ratechange",
+ "seeked",
+ "seeking",
+ "stalled",
+ "suspend",
+ "timeupdate",
+ "volumechange",
+ "waiting"
+];
+!function(t) {
+ t.MEDIA_START = "MediaStart", t.MEDIA_IMPRESSION = "MediaImpression", t.MEDIA_STOP = "MediaStop", t.MEDIA_CUE_POINTS_CHANGE = "MediaCuePointsChange", t.MEDIA_RESUMED = "MediaResumed";
+}(p || (p = {})), function(t) {
+ t.AD_ERROR = "AdError", t.AD_BUFFERING = "AdBuffering", t.LOADED = "AdLoaded", t.IMPRESSION = "AdImpression", t.STARTED = "AdStarted", t.FIRST_QUARTILE = "AdFirstQuartile", t.MIDPOINT = "AdMidpoint", t.THIRD_QUARTILE = "AdThirdQuartile", t.AD_PROGRESS = "AdProgress", t.COMPLETE = "AdComplete", t.CLICK = "AdClick", t.PAUSED = "AdPaused", t.RESUMED = "AdResumed", t.SKIPPED = "AdSkipped", t.SKIPPABLE_STATE_CHANGED = "AdSkippableStateChanged", t.VOLUME_CHANGED = "AdVolumeChanged", t.VOLUME_MUTED = "AdMuted", t.AD_METADATA = "AdMetadata", t.AD_BREAK_READY = "AdBreakReady", t.CONTENT_PAUSE_REQUESTED = "AdContentPauseRequested", t.CONTENT_RESUME_REQUESTED = "AdContentResumeRequested", t.ALL_ADS_COMPLETED = "AdAllAdsCompleted", t.DURATION_CHANGE = "AdDurationChange", t.INTERACTION = "AdInteraction", t.LINEAR_CHANGED = "AdLinearChanged", t.LOG = "AdLog", t.USER_CLOSE = "AdUserClose", t.AD_CAN_PLAY = "AdCanPlay", t.EXPANDED_CHANGED = "AdExpandedChanged", t.VIEWABLE_IMPRESSION = "AdViewableImpression";
+}(y || (y = {}));
+var R = h({}, y, p), E = function() {
+ this.disableCustomPlaybackForIOS10Plus = !1, this.autoResize = !0, this.clickTrackingElement = void 0;
+}, T = function(t) {
+ function i() {
+ var i;
+ return (i = t.call.apply(t, [
+ this
+ ].concat([].slice.call(arguments))) || this).errorCode = void 0, i.innerError = void 0, i.type = void 0, i.vastErrorCode = void 0, i;
+ }
+ return r(i, t), i;
+}(d(Error));
+T.ERROR_CODE_ADS_MANAGER_LOADED_TIMEOUT = 9e3, T.ERROR_CODE_REQUEST_ADS_TIMEOUT = 9001;
+var S = b("mediaElement"), M = b("adElement"), x = b("customPlayhead"), I = b("adsRenderingSettings"), B = b("ima"), L = b("adDisplayContainer"), D = b("adsManager"), W = b("width"), _ = b("height"), q = b("adsLoader"), F = b("playerOptions"), N = b("resizeObserver"), V = b("currentAd"), G = b("loadedAd"), Q = b("mediaStartTriggered"), U = b("mediaImpressionTriggered"), z = b("mediaInActivation"), Z = b("customPlaybackTimeAdjustedOnEnded"), $ = b("cuePoints"), H = b("adCurrentTime"), J = b("adDuration"), K = b("startAdCallback"), X = b("adsManagerLoadedTimeout"), Y = b("requestAdsTimeout"), tt = b("wasExternallyPaused"), it = b("lastNonZeroAdVolume"), et = b("activatePromise"), nt = function(t) {
+ function i(i, e, n, s, h) {
+ var r;
+ void 0 === s && (s = new i.AdsRenderingSettings), void 0 === h && (h = new E), r = t.call(this) || this, Object.defineProperty(l(r), S, {
+ writable: !0,
+ value: void 0
+ }), Object.defineProperty(l(r), M, {
+ writable: !0,
+ value: void 0
+ }), Object.defineProperty(l(r), x, {
+ writable: !0,
+ value: void 0
+ }), Object.defineProperty(l(r), I, {
+ writable: !0,
+ value: void 0
+ }), Object.defineProperty(l(r), B, {
+ writable: !0,
+ value: void 0
+ }), Object.defineProperty(l(r), L, {
+ writable: !0,
+ value: void 0
+ }), Object.defineProperty(l(r), D, {
+ writable: !0,
+ value: void 0
+ }), Object.defineProperty(l(r), W, {
+ writable: !0,
+ value: void 0
+ }), Object.defineProperty(l(r), _, {
+ writable: !0,
+ value: void 0
+ }), Object.defineProperty(l(r), q, {
+ writable: !0,
+ value: void 0
+ }), Object.defineProperty(l(r), F, {
+ writable: !0,
+ value: void 0
+ }), Object.defineProperty(l(r), N, {
+ writable: !0,
+ value: void 0
+ }), Object.defineProperty(l(r), V, {
+ writable: !0,
+ value: void 0
+ }), Object.defineProperty(l(r), G, {
+ writable: !0,
+ value: void 0
+ }), Object.defineProperty(l(r), Q, {
+ writable: !0,
+ value: !1
+ }), Object.defineProperty(l(r), U, {
+ writable: !0,
+ value: !1
+ }), Object.defineProperty(l(r), z, {
+ writable: !0,
+ value: !1
+ }), Object.defineProperty(l(r), Z, {
+ writable: !0,
+ value: !1
+ }), Object.defineProperty(l(r), $, {
+ writable: !0,
+ value: []
+ }), Object.defineProperty(l(r), H, {
+ writable: !0,
+ value: void 0
+ }), Object.defineProperty(l(r), J, {
+ writable: !0,
+ value: void 0
+ }), Object.defineProperty(l(r), K, {
+ writable: !0,
+ value: void 0
+ }), Object.defineProperty(l(r), X, {
+ writable: !0,
+ value: void 0
+ }), Object.defineProperty(l(r), Y, {
+ writable: !0,
+ value: void 0
+ }), Object.defineProperty(l(r), tt, {
+ writable: !0,
+ value: !1
+ }), Object.defineProperty(l(r), it, {
+ writable: !0,
+ value: 1
+ }), Object.defineProperty(l(r), et, {
+ writable: !0,
+ value: Promise.resolve()
+ }), w(l(r), S)[S] = e, w(l(r), M)[M] = n, w(l(r), B)[B] = i, w(l(r), F)[F] = h, w(l(r), I)[I] = s, w(l(r), I)[I].restoreCustomPlaybackStateOnAdBreakComplete = !0, h.disableCustomPlaybackForIOS10Plus && !w(l(r), S)[S].hasAttribute("playsinline") && w(l(r), S)[S].setAttribute("playsinline", ""), w(l(r), B)[B].settings.setDisableCustomPlaybackForIOS10Plus(h.disableCustomPlaybackForIOS10Plus), w(l(r), x)[x] = new k(w(l(r), S)[S]), r.o = r.o.bind(l(r)), P.forEach(function(t) {
+ w(l(r), S)[S].addEventListener(t, r.o);
+ }), r.u = r.u.bind(l(r)), r.l = r.l.bind(l(r));
+ var o = w(l(r), S)[S], a = o.offsetHeight, u = o.offsetWidth;
+ return w(l(r), W)[W] = u, w(l(r), _)[_] = a, h.autoResize && window.ResizeObserver && (w(l(r), N)[N] = new window.ResizeObserver(function(t) {
+ return r.v(t);
+ }), w(l(r), N)[N].observe(w(l(r), S)[S])), r;
+ }
+ r(i, t);
+ var e = i.prototype;
+ return e.activate = function() {
+ var t = this;
+ if (!w(this, Q)[Q] && !w(this, z)[z] && (w(this, z)[z] = !0, w(this, S)[S].paused)) {
+ var i = function() {
+ return w(t, S)[S].pause(), new Promise(function(i) {
+ setTimeout(function() {
+ w(t, z)[z] = !1, i();
+ }, 1);
+ });
+ };
+ w(this, et)[et] = new Promise(function(i) {
+ return i(w(t, S)[S].play());
+ }).then(i).catch(i);
+ }
+ }, e.playAds = function(t) {
+ this.m(t);
+ }, e.loadAds = function(t, i) {
+ this.m(t, !1, i);
+ }, e.p = function() {
+ var t = this;
+ return w(this, et)[et].then(function() {
+ return new Promise(function(i) {
+ return i(w(t, S)[S].play());
+ });
+ });
+ }, e.m = function(t, i, e) {
+ var n = this;
+ void 0 === i && (i = !0), this.reset(), this.O(), w(this, B)[B].settings.setAutoPlayAdBreaks(i), w(this, S)[S].ended && (w(this, x)[x].reset(), w(this, S)[S].currentTime = 0), w(this, K)[K] = e, t.linearAdSlotWidth = w(this, W)[W], t.linearAdSlotHeight = w(this, _)[_], t.nonLinearAdSlotWidth = w(this, W)[W], t.nonLinearAdSlotHeight = w(this, _)[_], null == t.contentDuration && (t.contentDuration = -3), w(this, X)[X] = window.setTimeout(function() {
+ var t = new T("No adsManagerLoadedEvent within 5000ms.");
+ t.errorCode = T.ERROR_CODE_ADS_MANAGER_LOADED_TIMEOUT, n.j(t);
+ }, 5e3), w(this, Y)[Y] = window.setTimeout(function() {
+ var t = new T("No response for ads-request within 10000ms.");
+ t.errorCode = T.ERROR_CODE_REQUEST_ADS_TIMEOUT, n.j(t);
+ }, 1e4), w(this, q)[q].requestAds(t);
+ }, e.O = function() {
+ w(this, L)[L] = new (w(this, B))[B].AdDisplayContainer(w(this, M)[M], w(this, F)[F].disableCustomPlaybackForIOS10Plus ? void 0 : w(this, S)[S], w(this, F)[F].clickTrackingElement), w(this, q)[q] = new (w(this, B))[B].AdsLoader(w(this, L)[L]), w(this, q)[q].addEventListener(w(this, B)[B].AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, this.u, !1), w(this, q)[q].addEventListener(w(this, B)[B].AdErrorEvent.Type.AD_ERROR, this.l, !1);
+ }, e.skipAd = function() {
+ w(this, D)[D] && w(this, D)[D].skip();
+ }, e.discardAdBreak = function() {
+ w(this, D)[D] && w(this, D)[D].discardAdBreak();
+ }, e.play = function() {
+ var t = this;
+ w(this, tt)[tt] = !1, !w(this, x)[x].enabled && w(this, D)[D] ? w(this, D)[D].resume() : w(this, X)[X] || this.p().then(function() {}).catch(function() {
+ t.dispatchEvent(new O("pause"));
+ });
+ }, e.pause = function() {
+ w(this, tt)[tt] = !0, !w(this, x)[x].enabled && w(this, D)[D] ? w(this, D)[D].pause() : w(this, S)[S].pause();
+ }, e.g = function(t) {
+ w(this, $)[$] = [].concat(t), this.dispatchEvent(new O(R.MEDIA_CUE_POINTS_CHANGE, {
+ detail: {
+ cuePoints: [].concat(w(this, $)[$])
+ }
+ }));
+ }, e.A = function(t) {
+ var i = this.cuePoints.indexOf(t);
+ i > -1 && (w(this, $)[$].splice(i, 1), this.g(w(this, $)[$]));
+ }, e.resizeAd = function(t, i) {
+ w(this, W)[W] = t, w(this, _)[_] = i, w(this, D)[D] && w(this, D)[D].resize(t, i, this.k()), w(this, M)[M].style.width = t + "px", w(this, M)[M].style.height = i + "px";
+ }, e.reset = function(t) {
+ void 0 === t && (t = !1), t && (w(this, U)[U] = !1, w(this, Q)[Q] = !1, w(this, Z)[Z] = !1), this.C(), w(this, $)[$] = [], w(this, tt)[tt] = !1, w(this, K)[K] = void 0, w(this, D)[D] && w(this, D)[D].destroy(), w(this, D)[D] = void 0, w(this, B)[B].settings.setAutoPlayAdBreaks(!0), t && this.P(), w(this, M)[M].style.display = "none";
+ }, e.P = function() {
+ w(this, q)[q] && (w(this, q)[q].removeEventListener(w(this, B)[B].AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, this.u, !1), w(this, q)[q].removeEventListener(w(this, B)[B].AdErrorEvent.Type.AD_ERROR, this.l, !1), w(this, q)[q].destroy()), w(this, L)[L] && w(this, L)[L].destroy();
+ }, e.destroy = function() {
+ var t, i, e, n, s = this;
+ this.reset(!0), w(this, x)[x].destroy(), P.forEach(function(t) {
+ w(s, S)[S].removeEventListener(t, s.o);
+ }), null == (t = w(this, q)[q]) || t.removeEventListener(w(this, B)[B].AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, this.u, !1), null == (i = w(this, L)[L]) || i.destroy(), null == (e = w(this, q)[q]) || e.destroy(), w(this, U)[U] = !1, w(this, Z)[Z] = !1, w(this, Q)[Q] = !1, null == (n = w(this, N)[N]) || n.disconnect();
+ }, e.isCustomPlaybackUsed = function() {
+ return !1 === w(this, B)[B].settings.getDisableCustomPlaybackForIOS10Plus() && !w(this, M)[M].querySelector("video");
+ }, e.C = function() {
+ window.clearTimeout(w(this, X)[X]), window.clearTimeout(w(this, Y)[Y]), w(this, X)[X] = void 0, w(this, Y)[Y] = void 0, w(this, V)[V] = void 0, w(this, H)[H] = void 0, w(this, J)[J] = void 0, w(this, M)[M].style.display = "none", w(this, M)[M].classList.remove("nonlinear"), w(this, D)[D] && this.R();
+ }, e.o = function(t) {
+ var i = this;
+ if (w(this, x)[x].enabled || "volumechange" === t.type) {
+ if ("timeupdate" === t.type) {
+ if (w(this, S)[S].currentTime < .5) return;
+ if (w(this, D)[D]) {
+ var e = w(this, D)[D].getCuePoints().filter(function(t) {
+ return t >= 0 && t < w(i, x)[x].currentTime;
+ }).pop();
+ this.A(e);
+ }
+ !w(this, U)[U] && w(this, Q)[Q] && (this.dispatchEvent(new O(R.MEDIA_IMPRESSION)), w(this, U)[U] = !0);
+ }
+ if ("play" !== t.type || w(this, Q)[Q] || w(this, z)[z] || (this.dispatchEvent(new O(R.MEDIA_START)), w(this, Q)[Q] = !0), "ended" === t.type && (this.isCustomPlaybackUsed() && w(this, S)[S].currentTime === w(this, S)[S].duration && w(this, $)[$].indexOf(-1) > -1 && (w(this, S)[S].currentTime = w(this, S)[S].duration - 1e-5, w(this, Z)[Z] = !0), w(this, q)[q].contentComplete(), w(this, D)[D] || this.T()), !window.ResizeObserver && w(this, F)[F].autoResize && "loadedmetadata" === t.type) {
+ var n = w(this, S)[S], s = n.offsetHeight, h = n.offsetWidth;
+ w(this, W)[W] = h, w(this, _)[_] = s, this.R();
+ }
+ w(this, z)[z] && "volumechange" !== t.type || this.dispatchEvent(new O(t.type));
+ }
+ }, e.S = function(t) {
+ var i = this, e = w(this, B)[B].AdEvent;
+ switch(t.type){
+ case e.Type.LOADED:
+ var n = t.getAd();
+ w(this, K)[K] && 0 === w(this, $)[$].length ? w(this, K)[K]({
+ ad: n,
+ start: function() {
+ i.M(), w(i, K)[K] = void 0;
+ },
+ startWithoutReset: function() {
+ i.M();
+ }
+ }) : w(this, G)[G] = n;
+ break;
+ case e.Type.AD_BREAK_READY:
+ this.C(), w(this, K)[K] ? (w(this, K)[K]({
+ ad: w(this, G)[G],
+ adBreakTime: t.getAdData().adBreakTime,
+ start: function() {
+ i.M(), w(i, K)[K] = void 0;
+ },
+ startWithoutReset: function() {
+ i.M();
+ }
+ }), w(this, G)[G] = void 0) : this.M();
+ break;
+ case e.Type.STARTED:
+ var s = w(this, V)[V] = t.getAd();
+ s.getAdPodInfo().getAdPosition() > 1 && w(this, D)[D].setVolume(w(this, D)[D].getVolume()), w(this, M)[M].classList.remove("nonlinear"), this.R(), s.isLinear() ? (w(this, x)[x].disable(), w(this, J)[J] = s.getDuration(), w(this, H)[H] = 0) : (w(this, M)[M].classList.add("nonlinear"), this.I()), w(this, M)[M].style.display = "", w(this, tt)[tt] && (w(this, tt)[tt] = !1, w(this, D)[D].pause());
+ break;
+ case e.Type.ALL_ADS_COMPLETED:
+ if (w(this, Z)[Z]) return;
+ this.isCustomPlaybackUsed() && Boolean(w(this, V)[V]) && -1 !== w(this, V)[V].getAdPodInfo().getTimeOffset() && this.I(), this.reset();
+ break;
+ case e.Type.CONTENT_PAUSE_REQUESTED:
+ this.C(), w(this, V)[V] = t.getAd(), w(this, M)[M].style.display = "", w(this, S)[S].pause(), this.R(), w(this, V)[V] && this.A(w(this, V)[V].getAdPodInfo().getTimeOffset()), w(this, D)[D].setVolume(w(this, S)[S].muted ? 0 : w(this, S)[S].volume), w(this, x)[x].disable(), w(this, J)[J] = w(this, V)[V].getDuration(), w(this, H)[H] = 0;
+ break;
+ case e.Type.CONTENT_RESUME_REQUESTED:
+ var h = Boolean(w(this, V)[V]);
+ if (h) {
+ var r = w(this, D)[D].getVolume();
+ w(this, S)[S].muted = 0 === r, w(this, S)[S].volume = w(this, it)[it];
+ }
+ w(this, Z)[Z] && (w(this, S)[S].currentTime = w(this, S)[S].duration + 1, w(this, Z)[Z] = !1), w(this, S)[S].ended ? (this.reset(), this.T()) : this.C(), h && (w(this, tt)[tt] = !1, this.I());
+ break;
+ case e.Type.AD_METADATA:
+ this.g(w(this, D)[D].getCuePoints()), -1 === w(this, $)[$].indexOf(0) && (w(this, K)[K] ? w(this, K)[K]({
+ start: function() {
+ i.I(), w(i, K)[K] = void 0;
+ },
+ startWithoutReset: function() {
+ i.I();
+ }
+ }) : this.I());
+ break;
+ case e.Type.AD_PROGRESS:
+ var o = t.getAdData();
+ w(this, H)[H] = o.currentTime, w(this, J)[J] = o.duration;
+ break;
+ case e.Type.LOG:
+ var a = t.getAdData();
+ w(this, K)[K] ? w(this, K)[K]({
+ start: function() {
+ i.I(), w(i, K)[K] = void 0;
+ },
+ startWithoutReset: function() {
+ i.I();
+ }
+ }) : a.adError && !w(this, V)[V] && this.I();
+ break;
+ case e.Type.VOLUME_CHANGED:
+ var u = w(this, D)[D].getVolume();
+ u > 0 && (w(this, it)[it] = u);
+ }
+ }, e.l = function(t) {
+ this.j(this.B(t));
+ }, e.u = function(t) {
+ var i = this, e = w(this, B)[B], n = e.AdEvent, s = e.AdErrorEvent.Type.AD_ERROR;
+ window.clearTimeout(w(this, X)[X]);
+ var h = w(this, D)[D] = t.getAdsManager(w(this, x)[x], w(this, I)[I]);
+ Object.keys(n.Type).forEach(function(t) {
+ h.addEventListener(n.Type[t], function(e) {
+ if (i.S(e), R[t]) {
+ var n = [
+ "LOG",
+ "AD_PROGRESS"
+ ].indexOf(t) > -1;
+ i.dispatchEvent(new O(R[t], {
+ detail: {
+ ad: e.getAd() || w(i, V)[V],
+ adData: n ? e.getAdData() : {}
+ }
+ }));
+ }
+ });
+ }), h.addEventListener(s, function(t) {
+ return i.j(i.B(t));
+ });
+ try {
+ var r;
+ h.init(w(this, W)[W], w(this, _)[_], this.k()), h.setVolume(w(this, S)[S].muted ? 0 : w(this, S)[S].volume), null == (r = w(this, L)[L]) || r.initialize(), w(this, K)[K] || this.M();
+ } catch (t) {
+ this.j(new T(t.message));
+ }
+ }, e.M = function() {
+ if (w(this, Q)[Q] || (this.dispatchEvent(new O(R.MEDIA_START)), w(this, Q)[Q] = !0), w(this, D)[D]) try {
+ w(this, D)[D].start();
+ } catch (t) {
+ this.j(new T(t.message));
+ }
+ else this.I();
+ }, e.T = function() {
+ var t = this;
+ setTimeout(function() {
+ w(t, U)[U] = !1, w(t, Q)[Q] = !1, w(t, Z)[Z] = !1, t.dispatchEvent(new O(R.MEDIA_STOP));
+ }, 1);
+ }, e.v = function(t) {
+ for(var i, e = function(t, i) {
+ var e = "undefined" != typeof Symbol && t[Symbol.iterator] || t["@@iterator"];
+ if (e) return (e = e.call(t)).next.bind(e);
+ if (Array.isArray(t) || (e = function(t, i) {
+ if (t) {
+ if ("string" == typeof t) return f(t, i);
+ var e = Object.prototype.toString.call(t).slice(8, -1);
+ return "Object" === e && t.constructor && (e = t.constructor.name), "Map" === e || "Set" === e ? Array.from(t) : "Arguments" === e || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e) ? f(t, i) : void 0;
+ }
+ }(t))) {
+ e && (t = e);
+ var n = 0;
+ return function() {
+ return n >= t.length ? {
+ done: !0
+ } : {
+ done: !1,
+ value: t[n++]
+ };
+ };
+ }
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+ }(t); !(i = e()).done;){
+ var n = i.value;
+ n.contentBoxSize && 1 === n.contentBoxSize.length ? (w(this, W)[W] = n.contentBoxSize[0].inlineSize, w(this, _)[_] = n.contentBoxSize[0].blockSize) : n.contentBoxSize && n.contentBoxSize.inlineSize ? (w(this, W)[W] = n.contentBoxSize.inlineSize, w(this, _)[_] = n.contentBoxSize.blockSize) : (w(this, W)[W] = n.contentRect.width, w(this, _)[_] = n.contentRect.height);
+ }
+ this.R();
+ }, e.R = function() {
+ if (w(this, F)[F].autoResize && w(this, D)[D]) {
+ var t = w(this, V)[V], i = this.k();
+ t && !t.isLinear() ? t && (t.getWidth() > w(this, W)[W] || t.getHeight() > w(this, _)[_] ? this.resizeAd(w(this, W)[W], w(this, _)[_]) : (w(this, D)[D].resize(t.getWidth(), t.getHeight() + 20, i), w(this, M)[M].style.width = t.getWidth() + "px", w(this, M)[M].style.height = t.getHeight() + 20 + "px")) : this.resizeAd(w(this, W)[W], w(this, _)[_]);
+ }
+ }, e.k = function() {
+ return document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement || w(this, S)[S].webkitDisplayingFullscreen ? w(this, B)[B].ViewMode.FULLSCREEN : w(this, B)[B].ViewMode.NORMAL;
+ }, e.I = function() {
+ var t = this;
+ w(this, M)[M].style.display = "none", w(this, S)[S].ended || (w(this, x)[x].enable(), w(this, tt)[tt] ? (w(this, S)[S].pause(), this.dispatchEvent(new O("pause"))) : (this.p().then(function() {}).catch(function() {
+ t.dispatchEvent(new O("pause"));
+ }), this.dispatchEvent(new O("play")), this.dispatchEvent(new O(R.MEDIA_RESUMED))), w(this, tt)[tt] = !1);
+ }, e.B = function(t) {
+ var i = t.getError(), e = new T(i.getMessage());
+ return e.type = i.getType(), e.errorCode = i.getErrorCode(), e.vastErrorCode = i.getVastErrorCode && i.getVastErrorCode(), e.innerError = i.getInnerError(), e;
+ }, e.j = function(t) {
+ var i = this;
+ this.dispatchEvent(new O(R.AD_ERROR, {
+ detail: {
+ error: t
+ }
+ })), this.C(), w(this, K)[K] ? w(this, K)[K]({
+ start: function() {
+ i.I(), w(i, K)[K] = void 0;
+ },
+ startWithoutReset: function() {
+ i.I();
+ }
+ }) : this.I();
+ }, s(i, [
+ {
+ key: "volume",
+ get: function() {
+ return !w(this, x)[x].enabled && w(this, D)[D] ? w(this, D)[D].getVolume() : w(this, S)[S].volume;
+ },
+ set: function(t) {
+ !w(this, x)[x].enabled && w(this, D)[D] && w(this, D)[D].setVolume(t), w(this, S)[S].volume = t;
+ }
+ },
+ {
+ key: "muted",
+ get: function() {
+ return !w(this, x)[x].enabled && w(this, D)[D] ? 0 === w(this, D)[D].getVolume() : w(this, S)[S].muted;
+ },
+ set: function(t) {
+ !w(this, x)[x].enabled && w(this, D)[D] && w(this, D)[D].setVolume(t ? 0 : w(this, it)[it]), w(this, S)[S].muted = t;
+ }
+ },
+ {
+ key: "currentTime",
+ get: function() {
+ return void 0 !== w(this, H)[H] ? w(this, H)[H] : w(this, S)[S].currentTime;
+ },
+ set: function(t) {
+ w(this, x)[x].enabled && (w(this, S)[S].currentTime = t);
+ }
+ },
+ {
+ key: "duration",
+ get: function() {
+ return void 0 !== w(this, J)[J] ? w(this, J)[J] : w(this, S)[S].duration;
+ }
+ },
+ {
+ key: "cuePoints",
+ get: function() {
+ return [].concat(w(this, $)[$]);
+ }
+ }
+ ]), i;
+}(C);
-},{"bundle-text:./style.less":"8l0EI","@parcel/transformer-js/src/esmodule-helpers.js":"5dUr6"}],"8l0EI":[function(require,module,exports) {
-module.exports = "\n";
-
-},{}],"5dUr6":[function(require,module,exports) {
+},{"@parcel/transformer-js/src/esmodule-helpers.js":"5dUr6"}],"5dUr6":[function(require,module,exports) {
exports.interopDefault = function(a) {
return a && a.__esModule ? a : {
default: a
diff --git a/docs/uncompiled/artplayer-plugin-vast/index.js.map b/docs/uncompiled/artplayer-plugin-vast/index.js.map
index 210225d2d..89d8e0d30 100644
--- a/docs/uncompiled/artplayer-plugin-vast/index.js.map
+++ b/docs/uncompiled/artplayer-plugin-vast/index.js.map
@@ -1 +1 @@
-{"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6CAEwB;AAFxB;;AAEe,SAAS,oBAAoB,MAAM;IAC9C,OAAO,CAAC;QACJ,OAAO;YACH,MAAM;QACV;IACJ;AACJ;AAEA,IAAI,OAAO,aAAa,aAAa;IACjC,MAAM,KAAK;IACX,MAAM,SAAS,SAAS,cAAc,CAAC;IACvC,IAAI,QACA,OAAO,WAAW,GAAG,CAAA,GAAA,yBAAK,AAAD;SACtB;QACH,MAAM,SAAS,SAAS,aAAa,CAAC;QACtC,OAAO,EAAE,GAAG;QACZ,OAAO,WAAW,GAAG,CAAA,GAAA,yBAAK,AAAD;QACzB,SAAS,IAAI,CAAC,WAAW,CAAC;IAC9B;AACJ;AAEA,IAAI,OAAO,WAAW,aAClB,MAAM,CAAC,sBAAsB,GAAG;;;ACxBpC,OAAO,OAAO,GAAG;;;ACAjB,QAAQ,cAAc,GAAG,SAAU,CAAC;IAClC,OAAO,KAAK,EAAE,UAAU,GAAG,IAAI;QAAC,SAAS;IAAC;AAC5C;AAEA,QAAQ,iBAAiB,GAAG,SAAU,CAAC;IACrC,OAAO,cAAc,CAAC,GAAG,cAAc;QAAC,OAAO;IAAI;AACrD;AAEA,QAAQ,SAAS,GAAG,SAAU,MAAM,EAAE,IAAI;IACxC,OAAO,IAAI,CAAC,QAAQ,OAAO,CAAC,SAAU,GAAG;QACvC,IACE,QAAQ,aACR,QAAQ,gBACR,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,MAE3C;QAGF,OAAO,cAAc,CAAC,MAAM,KAAK;YAC/B,YAAY;YACZ,KAAK;gBACH,OAAO,MAAM,CAAC,IAAI;YACpB;QACF;IACF;IAEA,OAAO;AACT;AAEA,QAAQ,MAAM,GAAG,SAAU,IAAI,EAAE,QAAQ,EAAE,GAAG;IAC5C,OAAO,cAAc,CAAC,MAAM,UAAU;QACpC,YAAY;QACZ,KAAK;IACP;AACF","sources":["packages/artplayer-plugin-vast/src/index.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-51ac63d836a077a2.js","node_modules/@parcel/transformer-js/src/esmodule-helpers.js"],"sourcesContent":["import style from 'bundle-text:./style.less';\n\nexport default function artplayerPluginVast(option) {\n return (art) => {\n return {\n name: 'artplayerPluginVast',\n };\n };\n}\n\nif (typeof document !== 'undefined') {\n const id = 'artplayer-plugin-vast';\n const $style = document.getElementById(id);\n if ($style) {\n $style.textContent = style;\n } else {\n const $style = document.createElement('style');\n $style.id = id;\n $style.textContent = style;\n document.head.appendChild($style);\n }\n}\n\nif (typeof window !== 'undefined') {\n window['ArtplayerPluginVast'] = artplayerPluginVast;\n}\n","module.exports = \"91964bfa4021818a\";","exports.interopDefault = function (a) {\n return a && a.__esModule ? a : {default: a};\n};\n\nexports.defineInteropFlag = function (a) {\n Object.defineProperty(a, '__esModule', {value: true});\n};\n\nexports.exportAll = function (source, dest) {\n Object.keys(source).forEach(function (key) {\n if (\n key === 'default' ||\n key === '__esModule' ||\n Object.prototype.hasOwnProperty.call(dest, key)\n ) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function () {\n return source[key];\n },\n });\n });\n\n return dest;\n};\n\nexports.export = function (dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get,\n });\n};\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../../"}
\ No newline at end of file
+{"mappings":"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","sources":["packages/artplayer-plugin-vast/src/index.js","packages/artplayer-plugin-vast/node_modules/_@glomex_vast-ima-player@1.21.0@@glomex/vast-ima-player/dist/vast-ima-player.module.js","packages/artplayer-plugin-vast/node_modules/_@glomex_vast-ima-player@1.21.0@@glomex/vast-ima-player/node_modules/@alugha/ima/lib/esm/loadScript.js","packages/artplayer-plugin-vast/node_modules/_@glomex_vast-ima-player@1.21.0@@glomex/vast-ima-player/node_modules/@alugha/ima/lib/esm/loadImaSdk.js","packages/artplayer-plugin-vast/node_modules/_@glomex_vast-ima-player@1.21.0@@glomex/vast-ima-player/node_modules/@ungap/custom-event/esm/index.js","packages/artplayer-plugin-vast/node_modules/_@glomex_vast-ima-player@1.21.0@@glomex/vast-ima-player/src/vast-ima-player.ts","packages/artplayer-plugin-vast/node_modules/_@glomex_vast-ima-player@1.21.0@@glomex/vast-ima-player/src/custom-playhead.ts","packages/artplayer-plugin-vast/node_modules/_@glomex_vast-ima-player@1.21.0@@glomex/vast-ima-player/src/delegated-event-target.ts","node_modules/@parcel/transformer-js/src/esmodule-helpers.js"],"sourcesContent":["import { Player, PlayerOptions, loadImaSdk } from '@glomex/vast-ima-player';\n\nexport default function artplayerPluginVast(callback) {\n return async (art) => {\n const { template, constructor } = art;\n const { createElement, setStyles, append } = constructor.utils;\n const { $video, $player } = template;\n\n await loadImaSdk();\n const google = window.google;\n const ima = google.ima;\n\n const adsRenderingSettings = new ima.AdsRenderingSettings();\n const playerOptions = new PlayerOptions();\n\n const id = `art-${Date.now()}`;\n const $container = createElement('div');\n append($player, $container);\n $container.id = id;\n setStyles($container, {\n position: 'absolute',\n inset: '0',\n width: '100%',\n height: '100%',\n zIndex: '150',\n });\n\n const player = new Player(ima, $video, $container, adsRenderingSettings, playerOptions);\n\n function playUrl(url) {\n const playAdsRequest = new ima.AdsRequest();\n playAdsRequest.adTagUrl = url;\n player.playAds(playAdsRequest);\n }\n\n function playRes(res) {\n const playAdsRequest = new ima.AdsRequest();\n playAdsRequest.adsResponse = res;\n player.playAds(playAdsRequest);\n }\n\n if (typeof callback === 'function') {\n await callback({ art, id, ima, player, $container, playUrl, playRes });\n }\n\n return {\n name: 'artplayerPluginVast',\n id,\n ima,\n player,\n $container,\n };\n };\n}\n\nif (typeof window !== 'undefined') {\n window['artplayerPluginVast'] = artplayerPluginVast;\n}\n",null,"// Asynchronous loader for external scripts\nvar loadScript = function (src) {\n return new Promise(function (resolve, reject) {\n var script = document.createElement(\"script\");\n script.async = true;\n script.src = src;\n script.onload = resolve;\n script.onerror = reject;\n document.body.appendChild(script);\n });\n};\nexport default loadScript;\n","import loadScript from \"./loadScript\";\nvar imaSdkSrc = \"https://imasdk.googleapis.com/js/sdkloader/ima3.js\";\nvar pendingPromise = null;\nvar promiseFinished = function () {\n pendingPromise = null;\n};\nvar loadImaSdk = function () {\n var w = window;\n if (w.google && w.google.ima) {\n return Promise.resolve(w.google.ima);\n }\n if (pendingPromise) {\n return pendingPromise;\n }\n pendingPromise = loadScript(imaSdkSrc).then(function () { return w.google.ima; });\n pendingPromise.then(promiseFinished).catch(promiseFinished);\n return pendingPromise;\n};\nexport default loadImaSdk;\n","/*! (c) Andrea Giammarchi - ISC */\nvar self = {};\nself.CustomEvent = typeof CustomEvent === 'function' ?\n CustomEvent :\n (function (__p__) {\n CustomEvent[__p__] = new CustomEvent('').constructor[__p__];\n return CustomEvent;\n function CustomEvent(type, init) {\n if (!init) init = {};\n var e = document.createEvent('CustomEvent');\n e.initCustomEvent(type, !!init.bubbles, !!init.cancelable, init.detail);\n return e;\n }\n }('prototype'));\nexport default self.CustomEvent;\n","/**\n * tslint:disable:max-classes-per-file\n *\n * @format\n */\n\nimport type { ImaSdk, google } from '@alugha/ima';\nimport CustomEvent from '@ungap/custom-event';\nimport { CustomPlayhead } from './custom-playhead';\nimport { DelegatedEventTarget } from './delegated-event-target';\n\nconst IGNORE_UNTIL_CURRENT_TIME = 0.5;\nconst ADS_MANAGER_LOADED_TIMEOUT = 5000;\nconst REQUEST_ADS_TIMEOUT = 10000;\nconst MEDIA_ELEMENT_EVENTS = [\n 'abort',\n 'canplay',\n 'canplaythrough',\n 'durationchange',\n 'emptied',\n 'ended',\n 'error',\n 'loadeddata',\n 'loadedmetadata',\n 'loadstart',\n 'pause',\n 'play',\n 'playing',\n 'progress',\n 'ratechange',\n 'seeked',\n 'seeking',\n 'stalled',\n 'suspend',\n 'timeupdate',\n 'volumechange',\n 'waiting'\n];\n\n/**\n * Additional media events that help managing the\n * lifecycle of a media file playback.\n */\nenum AdditionalMediaEvent {\n /** Fired when initial media file play happened. */\n MEDIA_START = 'MediaStart',\n /** Fired when the first frame of the media file is played after linear preroll. */\n MEDIA_IMPRESSION = 'MediaImpression',\n /** Fired when the media file playback finished after potential postroll. */\n MEDIA_STOP = 'MediaStop',\n /** Fired when ad break cue points change. */\n MEDIA_CUE_POINTS_CHANGE = 'MediaCuePointsChange',\n /**\n * Fired when media resumes playback. CONTENT_RESUME_REQUESTED\n * is sometimes triggered before playback and this event is only\n * triggered after ad is finished or when content resumes.\n */\n MEDIA_RESUMED = 'MediaResumed'\n}\n\n/**\n * Adjusted enum of https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/reference/js/google.ima.AdEvent\n * to follow VPAID spec event names.\n */\nenum ImaToAdEventMap {\n // most relevant Ad events\n /**\n * Fired when an ad error occurred (standalone ad or ad within an ad rule).\n * IMA provides these events on different objects and this event normalizes it.\n */\n AD_ERROR = 'AdError',\n /** Fired when the ad has stalled playback to buffer. */\n AD_BUFFERING = 'AdBuffering',\n /** Fired when ad data is available. */\n LOADED = 'AdLoaded',\n /** Fired when the impression URL has been pinged. */\n IMPRESSION = 'AdImpression',\n /** Fired when the ad starts playing. */\n STARTED = 'AdStarted',\n /** Fired when the ad playhead crosses first quartile. */\n FIRST_QUARTILE = 'AdFirstQuartile',\n /** Fired when the ad playhead crosses midpoint. */\n MIDPOINT = 'AdMidpoint',\n /** Fired when the ad playhead crosses third quartile. */\n THIRD_QUARTILE = 'AdThirdQuartile',\n /** Fired when the ad's current time value changes. */\n AD_PROGRESS = 'AdProgress',\n /** Fired when the ad completes playing. */\n COMPLETE = 'AdComplete',\n /** Fired when the ad is clicked. */\n CLICK = 'AdClick',\n /** Fired when the ad is paused. */\n PAUSED = 'AdPaused',\n /** Fired when the ad is resumed. */\n RESUMED = 'AdResumed',\n /** Fired when the ad is skipped by the user. */\n SKIPPED = 'AdSkipped',\n /** Fired when the displayed ads skippable state is changed. */\n SKIPPABLE_STATE_CHANGED = 'AdSkippableStateChanged',\n /** Fired when the ad volume has changed. */\n VOLUME_CHANGED = 'AdVolumeChanged',\n /** Fired when the ad volume has been muted. */\n VOLUME_MUTED = 'AdMuted',\n\n // Ad lifecycle events\n /** Fired when an ads list is loaded. This is when ad rule cuePoints are available. */\n AD_METADATA = 'AdMetadata',\n /** Fired when an ad rule or a VMAP ad break would have played if autoPlayAdBreaks is false. */\n AD_BREAK_READY = 'AdBreakReady',\n /** Fired when content should be paused. This usually happens right before an ad is about to cover the content. */\n CONTENT_PAUSE_REQUESTED = 'AdContentPauseRequested',\n /** Fired when content should be resumed. This usually happens when an ad finishes or collapses. */\n CONTENT_RESUME_REQUESTED = 'AdContentResumeRequested',\n /** Fired when the ads manager is done playing all the ads. */\n ALL_ADS_COMPLETED = 'AdAllAdsCompleted',\n\n // VPAID events\n /** Fired when the ad's duration changes. */\n DURATION_CHANGE = 'AdDurationChange',\n /** Fired when an ad triggers the interaction callback. Ad interactions contain an interaction ID string in the ad data. */\n INTERACTION = 'AdInteraction',\n /** Fired when the displayed ad changes from linear to nonlinear, or vice versa. */\n LINEAR_CHANGED = 'AdLinearChanged',\n /** Fired when a non-fatal error is encountered. The user need not take any action since the SDK will continue with the same or next ad playback depending on the error situation. */\n LOG = 'AdLog',\n /** Fired when the ad is closed by the user. */\n USER_CLOSE = 'AdUserClose',\n\n // Undocumented events\n /** Not document by IMA */\n AD_CAN_PLAY = 'AdCanPlay',\n /** Not document by IMA */\n EXPANDED_CHANGED = 'AdExpandedChanged',\n /** Not document by IMA */\n VIEWABLE_IMPRESSION = 'AdViewableImpression'\n}\n\ntype PlayerEvent = AdditionalMediaEvent | ImaToAdEventMap;\n\n/**\n * Available events of the VAST-IMA-Player.\n *\n * Also see https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/reference/js/google.ima.AdEvent\n *\n * The player also triggers the normal media element events\n * (https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Media_events)\n * when the content playback happens. This is useful when\n * \"disableCustomPlaybackForIOS10Plus = false\" (default) is configured and\n * the same media element is used on iOS to render both ad and content.\n * Those event names are not enumerated here because they are known.\n */\nexport const PlayerEvent = {\n ...ImaToAdEventMap,\n ...AdditionalMediaEvent\n};\n\nexport class PlayerOptions {\n /** Sets whether to disable custom playback on iOS 10+ browsers. If true, ads will play inline if the content video is inline. This enables TrueView skippable ads. However, the ad will stay inline and not support iOS's native fullscreen. */\n disableCustomPlaybackForIOS10Plus: boolean = false;\n /** Enables or disables auto resizing of adsManager. If enabled it also resizes non-linear ads. */\n autoResize: boolean = true;\n /** Allows to have a separate 'Learn More' click tracking element on mobile. */\n clickTrackingElement?: HTMLElement;\n}\n\nexport class PlayerError extends Error {\n errorCode: number;\n innerError: Error;\n type: string;\n vastErrorCode: number;\n\n static ERROR_CODE_ADS_MANAGER_LOADED_TIMEOUT = 9000;\n static ERROR_CODE_REQUEST_ADS_TIMEOUT = 9001;\n\n constructor(...args) {\n super(...args);\n }\n}\n\ntype StartAd = {\n start: () => void;\n startWithoutReset: () => void;\n ad?: google.ima.Ad;\n adBreakTime?: number;\n};\n\ntype StartAdCallback = (startAd: StartAd) => void;\n\n/**\n * Convenience player wrapper for the Google IMA HTML5 SDK\n */\nexport class Player extends DelegatedEventTarget {\n #mediaElement: HTMLVideoElement;\n #adElement: HTMLElement;\n #customPlayhead: CustomPlayhead;\n #adsRenderingSettings: google.ima.AdsRenderingSettings;\n #ima: ImaSdk;\n #adDisplayContainer: google.ima.AdDisplayContainer | undefined;\n #adsManager: google.ima.AdsManager | undefined;\n #width: number;\n #height: number;\n #adsLoader: google.ima.AdsLoader;\n #playerOptions: PlayerOptions;\n #resizeObserver: any;\n #currentAd: google.ima.Ad;\n #loadedAd: google.ima.Ad;\n #mediaStartTriggered: boolean = false;\n #mediaImpressionTriggered: boolean = false;\n #mediaInActivation: boolean = false;\n #customPlaybackTimeAdjustedOnEnded: boolean = false;\n #cuePoints: number[] = [];\n #adCurrentTime: number;\n #adDuration: number;\n #startAdCallback: StartAdCallback;\n #adsManagerLoadedTimeout: number;\n #requestAdsTimeout: number;\n #wasExternallyPaused: boolean = false;\n #lastNonZeroAdVolume: number = 1;\n #activatePromise = Promise.resolve();\n\n constructor(\n ima: ImaSdk,\n mediaElement: HTMLVideoElement,\n adElement: HTMLElement,\n adsRenderingSettings: google.ima.AdsRenderingSettings = new ima.AdsRenderingSettings(),\n options: PlayerOptions = new PlayerOptions()\n ) {\n super();\n this.#mediaElement = mediaElement;\n this.#adElement = adElement;\n this.#ima = ima;\n this.#playerOptions = options;\n this.#adsRenderingSettings = adsRenderingSettings;\n // for iOS to reset to initial content state\n this.#adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete =\n true;\n\n if (\n options.disableCustomPlaybackForIOS10Plus &&\n !this.#mediaElement.hasAttribute('playsinline')\n ) {\n // assign \"playsinline\" when on iOS two video elements\n // will be used for content and ad playback\n this.#mediaElement.setAttribute('playsinline', '');\n }\n this.#ima.settings.setDisableCustomPlaybackForIOS10Plus(\n options.disableCustomPlaybackForIOS10Plus\n );\n\n // later used for to determine playhead for triggering midrolls\n // and to determine whether the player is currently playing content\n this.#customPlayhead = new CustomPlayhead(this.#mediaElement);\n this._handleMediaElementEvents = this._handleMediaElementEvents.bind(this);\n MEDIA_ELEMENT_EVENTS.forEach((eventName) => {\n this.#mediaElement.addEventListener(\n eventName,\n this._handleMediaElementEvents\n );\n });\n\n this._onAdsManagerLoaded = this._onAdsManagerLoaded.bind(this);\n this._onAdsLoaderError = this._onAdsLoaderError.bind(this);\n\n // initial synchronization of width / height\n const { offsetHeight, offsetWidth } = this.#mediaElement;\n this.#width = offsetWidth;\n this.#height = offsetHeight;\n\n if (options.autoResize) {\n // @ts-ignore\n if (window.ResizeObserver) {\n // @ts-ignore\n this.#resizeObserver = new window.ResizeObserver((entries) =>\n this._resizeObserverCallback(entries)\n );\n this.#resizeObserver.observe(this.#mediaElement);\n }\n }\n }\n\n /**\n * This allows synchronous activation of the media element\n * and the Google IMA ad-display-container. Useful when you\n * have to do async work before calling \"playAds\".\n */\n activate() {\n if (this.#mediaStartTriggered || this.#mediaInActivation) return;\n this.#mediaInActivation = true;\n if (this.#mediaElement.paused) {\n const ready = () => {\n this.#mediaElement.pause();\n return new Promise((resolve) => {\n setTimeout(() => {\n // We don't want to expose the activation detail\n // to the outside and ignore events during activation phase.\n // Waiting a little so that \"pause\" got emitted from above pause() call\n this.#mediaInActivation = false;\n resolve();\n }, 1);\n });\n };\n this.#activatePromise = new Promise((resolve) =>\n resolve(this.#mediaElement.play())\n )\n .then(ready)\n .catch(ready);\n }\n }\n\n /**\n * This is the entry point to start ad playback. It can be used\n * as such:\n *\n * - With a single VAST at the beginning to play a preroll\n * - Anyhwere during content playback with a single VAST\n * - With a single VMAP at the beginning\n */\n playAds(adsRequest: google.ima.AdsRequest) {\n this._requestAds(adsRequest);\n }\n\n /**\n * Similar to \"playAds\" method but with the difference\n * that it allows to first load the ad and start it separately\n * within the given callback.\n *\n * When a VAST or a VMAP ad break is given the callback is called\n * with a \"start\" method which either starts playing the individual\n * VAST ad or starts the VMAP ad break. If \"start\" method is not called\n * it won't play the ad.\n */\n loadAds(adsRequest: google.ima.AdsRequest, startAdCallback: StartAdCallback) {\n this._requestAds(adsRequest, false, startAdCallback);\n }\n\n private _mediaElementPlay() {\n return this.#activatePromise.then(\n () => new Promise((resolve) => resolve(this.#mediaElement.play()))\n );\n }\n\n private _requestAds(\n adsRequest: google.ima.AdsRequest,\n autoPlayAdBreaks: boolean = true,\n startAdCallback?: StartAdCallback\n ) {\n this.reset();\n this._setupIma();\n // it is important that this is set after\n // a new AdsLoader and AdDisplayContainer\n // was created because preloading ads wouldn't\n // work as expected for multiple ads\n this.#ima.settings.setAutoPlayAdBreaks(autoPlayAdBreaks);\n // in case of replay we go back to start\n if (this.#mediaElement.ended) {\n this.#customPlayhead.reset();\n this.#mediaElement.currentTime = 0;\n }\n this.#startAdCallback = startAdCallback;\n adsRequest.linearAdSlotWidth = this.#width;\n adsRequest.linearAdSlotHeight = this.#height;\n adsRequest.nonLinearAdSlotWidth = this.#width;\n adsRequest.nonLinearAdSlotHeight = this.#height;\n\n // see version 3.442.0 changelog about postroll prefetching\n // fixes issue with a disappearing nonlinear preroll that gets\n // followed by a linear postroll\n // https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/history\n if (adsRequest.contentDuration == null) {\n adsRequest.contentDuration = -3;\n }\n\n // trigger an error after 5s in case adsManagerLoaded\n // does not come up, so that content playback starts\n this.#adsManagerLoadedTimeout = window.setTimeout(() => {\n const error = new PlayerError(\n `No adsManagerLoadedEvent within ${ADS_MANAGER_LOADED_TIMEOUT}ms.`\n );\n error.errorCode = PlayerError.ERROR_CODE_ADS_MANAGER_LOADED_TIMEOUT;\n this._onAdError(error);\n }, ADS_MANAGER_LOADED_TIMEOUT);\n // trigger an error when no error / ad break ready / ... event\n // occurred within 5s after requesting ads\n this.#requestAdsTimeout = window.setTimeout(() => {\n const error = new PlayerError(\n `No response for ads-request within ${REQUEST_ADS_TIMEOUT}ms.`\n );\n error.errorCode = PlayerError.ERROR_CODE_REQUEST_ADS_TIMEOUT;\n this._onAdError(error);\n }, REQUEST_ADS_TIMEOUT);\n\n this.#adsLoader.requestAds(adsRequest);\n }\n\n private _setupIma() {\n this.#adDisplayContainer = new this.#ima.AdDisplayContainer(\n this.#adElement,\n // used as single element for linear ad playback on iOS\n this.#playerOptions.disableCustomPlaybackForIOS10Plus\n ? undefined\n : this.#mediaElement,\n // allows to override the 'Learn More' button on mobile\n this.#playerOptions.clickTrackingElement\n );\n this.#adsLoader = new this.#ima.AdsLoader(this.#adDisplayContainer);\n this.#adsLoader.addEventListener(\n this.#ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n this._onAdsManagerLoaded,\n false\n );\n this.#adsLoader.addEventListener(\n this.#ima.AdErrorEvent.Type.AD_ERROR,\n this._onAdsLoaderError,\n false\n );\n }\n\n skipAd() {\n if (this.#adsManager) {\n this.#adsManager.skip();\n }\n }\n\n discardAdBreak() {\n if (this.#adsManager) {\n this.#adsManager.discardAdBreak();\n }\n }\n\n /**\n * Starts playback of either content or ad element.\n */\n play() {\n this.#wasExternallyPaused = false;\n if (!this.#customPlayhead.enabled && this.#adsManager) {\n this.#adsManager.resume();\n } else if (!this.#adsManagerLoadedTimeout) {\n // do not trigger play during ad loading process\n // so when \"play\" gets called externally twice it does\n // not start the content playback before the ad is loaded\n this._mediaElementPlay()\n .then(() => {\n // empty\n })\n .catch(() => {\n // just in case we don't receive a \"pause\" event\n this.dispatchEvent(new CustomEvent('pause'));\n });\n }\n }\n\n /**\n * Pauses playback of either content or ad element.\n */\n pause() {\n this.#wasExternallyPaused = true;\n if (!this.#customPlayhead.enabled && this.#adsManager) {\n this.#adsManager.pause();\n } else {\n this.#mediaElement.pause();\n }\n }\n\n /**\n * Sets volume of either content or ad element.\n */\n set volume(volume: number) {\n if (!this.#customPlayhead.enabled && this.#adsManager) {\n this.#adsManager.setVolume(volume);\n }\n this.#mediaElement.volume = volume;\n }\n\n /**\n * Returns volume of either content or ad element.\n */\n get volume() {\n if (!this.#customPlayhead.enabled && this.#adsManager) {\n return this.#adsManager.getVolume();\n }\n return this.#mediaElement.volume;\n }\n\n /**\n * Sets muted state on either content or ad element.\n */\n set muted(muted: boolean) {\n if (!this.#customPlayhead.enabled && this.#adsManager) {\n this.#adsManager.setVolume(muted ? 0 : this.#lastNonZeroAdVolume);\n }\n this.#mediaElement.muted = muted;\n }\n\n /**\n * Returns muted state of either content or ad element.\n */\n get muted() {\n if (!this.#customPlayhead.enabled && this.#adsManager) {\n return this.#adsManager.getVolume() === 0;\n }\n return this.#mediaElement.muted;\n }\n\n /**\n * Sets current time of content element when not in ad playback mode.\n */\n set currentTime(currentTime: number) {\n if (this.#customPlayhead.enabled) {\n this.#mediaElement.currentTime = currentTime;\n }\n }\n\n /**\n * Returns current playhead time of either content or ad element.\n */\n get currentTime() {\n if (this.#adCurrentTime !== undefined) {\n return this.#adCurrentTime;\n }\n return this.#mediaElement.currentTime;\n }\n\n /**\n * Returns current duration of either content or ad element.\n */\n get duration() {\n if (this.#adDuration !== undefined) {\n return this.#adDuration;\n }\n return this.#mediaElement.duration;\n }\n\n /**\n * Returns list of ad break cue points that weren't played yet.\n * Only available after \"AdMetadata\" event when VMAP is passed in playAds.\n */\n get cuePoints() {\n return [...this.#cuePoints];\n }\n\n private _setCuePoints(cuePoints: number[]) {\n this.#cuePoints = [...cuePoints];\n this.dispatchEvent(\n new CustomEvent(PlayerEvent.MEDIA_CUE_POINTS_CHANGE, {\n detail: { cuePoints: [...this.#cuePoints] }\n })\n );\n }\n\n /**\n * Remove already played cuepoints\n *\n * @param timeOffset offset in seconds as defined in VMAP or 0 for preroll and -1 for postroll\n */\n private _adjustCuePoints(timeOffset) {\n const cuePointIndex = this.cuePoints.indexOf(timeOffset);\n if (cuePointIndex > -1) {\n this.#cuePoints.splice(cuePointIndex, 1);\n this._setCuePoints(this.#cuePoints);\n }\n }\n\n /**\n * Allows resizing the ad element. Useful when options.autoResize = false.\n */\n resizeAd(width: number, height: number) {\n this.#width = width;\n this.#height = height;\n if (this.#adsManager) {\n this.#adsManager.resize(width, height, this._getViewMode());\n }\n this.#adElement.style.width = `${width}px`;\n this.#adElement.style.height = `${height}px`;\n }\n\n /**\n * Cleans up current ad and ad manager session or the complete IMA (via force).\n *\n * Externally call this function with \"force = true\" when you want to switch\n * the content source or move the player to another DOM node before doing\n * another \"playAds\" or \"loadAds\", so that it does a full cleanup.\n *\n * @param force - enforce a full cleanup\n * @returns a promise which resolves after all the cleanup work is done\n */\n reset(force: boolean = false) {\n if (force) {\n this.#mediaImpressionTriggered = false;\n this.#mediaStartTriggered = false;\n this.#customPlaybackTimeAdjustedOnEnded = false;\n }\n this._resetAd();\n this.#cuePoints = [];\n this.#wasExternallyPaused = false;\n this.#startAdCallback = undefined;\n // always destroy ads-manager\n if (this.#adsManager) {\n this.#adsManager.destroy();\n }\n this.#adsManager = undefined;\n // also reset autoplay ad breaks\n // because setting it to false again\n // in _setupIma would not properly\n // reset IMA\n this.#ima.settings.setAutoPlayAdBreaks(true);\n if (force) {\n this._resetIma();\n }\n this.#adElement.style.display = 'none';\n }\n\n private _resetIma() {\n if (this.#adsLoader) {\n this.#adsLoader.removeEventListener(\n this.#ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n this._onAdsManagerLoaded,\n false\n );\n this.#adsLoader.removeEventListener(\n this.#ima.AdErrorEvent.Type.AD_ERROR,\n this._onAdsLoaderError,\n false\n );\n this.#adsLoader.destroy();\n }\n\n if (this.#adDisplayContainer) {\n this.#adDisplayContainer.destroy();\n }\n }\n\n /**\n * Completely destroys this instance. It is unusable after that.\n */\n destroy() {\n this.reset(true);\n this.#customPlayhead.destroy();\n MEDIA_ELEMENT_EVENTS.forEach((eventName) => {\n this.#mediaElement.removeEventListener(\n eventName,\n this._handleMediaElementEvents\n );\n });\n this.#adsLoader?.removeEventListener(\n this.#ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n this._onAdsManagerLoaded,\n false\n );\n this.#adDisplayContainer?.destroy();\n this.#adsLoader?.destroy();\n this.#mediaImpressionTriggered = false;\n this.#customPlaybackTimeAdjustedOnEnded = false;\n this.#mediaStartTriggered = false;\n this.#resizeObserver?.disconnect();\n }\n\n isCustomPlaybackUsed() {\n const { settings } = this.#ima;\n return (\n settings.getDisableCustomPlaybackForIOS10Plus() === false &&\n !this.#adElement.querySelector('video')\n );\n }\n\n private _resetAd() {\n window.clearTimeout(this.#adsManagerLoadedTimeout);\n window.clearTimeout(this.#requestAdsTimeout);\n this.#adsManagerLoadedTimeout = undefined;\n this.#requestAdsTimeout = undefined;\n this.#currentAd = undefined;\n this.#adCurrentTime = undefined;\n this.#adDuration = undefined;\n this.#adElement.style.display = 'none';\n this.#adElement.classList.remove('nonlinear');\n if (this.#adsManager) {\n // just ensure to start from defined width/height\n this._resizeAdsManager();\n }\n }\n\n private _handleMediaElementEvents(event: Event) {\n // always forward volumechange events\n if (!this.#customPlayhead.enabled && event.type !== 'volumechange') return;\n if (event.type === 'timeupdate') {\n // ignoring first timeupdate after play\n // because we can be in ad state too early\n if (this.#mediaElement.currentTime < IGNORE_UNTIL_CURRENT_TIME) {\n return;\n }\n if (this.#adsManager) {\n const cuePointsAfterJump = this.#adsManager\n .getCuePoints()\n .filter((cuePoint) => {\n return cuePoint >= 0 && cuePoint < this.#customPlayhead.currentTime;\n });\n const cuePointToRemove = cuePointsAfterJump.pop();\n // in case the ad-break lead to an error it cannot be detected which\n // ad break was affected because IMA could've preloaded an ad-break\n // without emitting an event for it\n this._adjustCuePoints(cuePointToRemove);\n }\n if (!this.#mediaImpressionTriggered && this.#mediaStartTriggered) {\n this.dispatchEvent(new CustomEvent(PlayerEvent.MEDIA_IMPRESSION));\n this.#mediaImpressionTriggered = true;\n }\n }\n if (\n event.type === 'play' &&\n !this.#mediaStartTriggered &&\n !this.#mediaInActivation // we don't want to trigger \"MEDIA_START\" during activation phase\n ) {\n this.dispatchEvent(new CustomEvent(PlayerEvent.MEDIA_START));\n this.#mediaStartTriggered = true;\n }\n if (event.type === 'ended') {\n if (\n this.isCustomPlaybackUsed() &&\n this.#mediaElement.currentTime === this.#mediaElement.duration &&\n this.#cuePoints.indexOf(-1) > -1\n ) {\n /* Fixing a bug with postroll on iOS\n * when a postroll gets started via \"contentComplete\"\n * and a single video-tag is used IMA does not reset\n * back to the content after the postroll finished.\n * Setting the time of the video tag a little shorter\n * than the duration, so that the video-tag is not set to \"ended\".\n */\n this.#mediaElement.currentTime = this.#mediaElement.duration - 0.00001;\n this.#customPlaybackTimeAdjustedOnEnded = true;\n }\n this.#adsLoader.contentComplete();\n if (!this.#adsManager) {\n this._mediaStop();\n }\n }\n // @ts-ignore\n if (\n !window.ResizeObserver &&\n this.#playerOptions.autoResize &&\n event.type === 'loadedmetadata'\n ) {\n // in case ResizeObserver is not supported we want\n // to use at least the size after the media element got\n // loaded\n const { offsetHeight, offsetWidth } = this.#mediaElement;\n this.#width = offsetWidth;\n this.#height = offsetHeight;\n this._resizeAdsManager();\n }\n if (!this.#mediaInActivation || event.type === 'volumechange') {\n this.dispatchEvent(new CustomEvent(event.type));\n }\n }\n\n private _handleAdsManagerEvents(event: google.ima.AdEvent) {\n const { AdEvent } = this.#ima;\n\n // @ts-ignore\n switch (event.type) {\n case AdEvent.Type.LOADED:\n // For an individual VAST ad inform on \"LOADED\" to\n // to allow starting the ad manually.\n // In case of VMAP it could preload ads before the\n // actual ad break. For VMAP it allows starting the ad\n // on \"AD_BREAK_READY\" instead.\n const loadedAd = event.getAd();\n if (this.#startAdCallback && this.#cuePoints.length === 0) {\n this.#startAdCallback({\n ad: loadedAd,\n start: () => {\n this._startAdsManager();\n this.#startAdCallback = undefined;\n },\n startWithoutReset: () => {\n this._startAdsManager();\n }\n });\n } else {\n this.#loadedAd = loadedAd;\n }\n break;\n case AdEvent.Type.AD_BREAK_READY:\n this._resetAd();\n // for a VMAP schedule\n if (this.#startAdCallback) {\n this.#startAdCallback({\n ad: this.#loadedAd,\n adBreakTime: event.getAdData().adBreakTime,\n start: () => {\n this._startAdsManager();\n // we reset after we received the first\n // start() after preroll\n this.#startAdCallback = undefined;\n },\n startWithoutReset: () => {\n this._startAdsManager();\n }\n });\n this.#loadedAd = undefined;\n } else {\n this._startAdsManager();\n }\n break;\n case AdEvent.Type.STARTED:\n const ad = (this.#currentAd = event.getAd());\n // when playing an ad-pod IMA uses two video-tags\n // and switches between those but does not set volume\n // on both video-tags. Calling setVolume with the\n // previously stored volume synchronizes volume with\n // the other video-tag\n if (ad.getAdPodInfo().getAdPosition() > 1) {\n this.#adsManager.setVolume(this.#adsManager.getVolume());\n }\n this.#adElement.classList.remove('nonlinear');\n this._resizeAdsManager();\n // single or non-linear ads\n if (!ad.isLinear()) {\n this.#adElement.classList.add('nonlinear');\n this._playContent();\n } else {\n this.#customPlayhead.disable();\n this.#adDuration = ad.getDuration();\n this.#adCurrentTime = 0;\n }\n this.#adElement.style.display = '';\n if (this.#wasExternallyPaused) {\n this.#wasExternallyPaused = false;\n this.#adsManager.pause();\n }\n break;\n case AdEvent.Type.ALL_ADS_COMPLETED:\n if (this.#customPlaybackTimeAdjustedOnEnded) {\n return;\n }\n if (\n this.isCustomPlaybackUsed() &&\n Boolean(this.#currentAd) &&\n this.#currentAd.getAdPodInfo().getTimeOffset() !== -1\n ) {\n // on iOS it sometimes only triggers ALL_ADS_COMPLETED\n // before CONTENT_RESUME_REQUESTED\n this._playContent();\n }\n this.reset();\n break;\n case AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n this._resetAd();\n this.#currentAd = event.getAd();\n this.#adElement.style.display = '';\n this.#mediaElement.pause();\n this._resizeAdsManager();\n if (this.#currentAd) {\n this._adjustCuePoints(this.#currentAd.getAdPodInfo().getTimeOffset());\n }\n // synchronize volume state because IMA does not do that\n this.#adsManager.setVolume(\n this.#mediaElement.muted ? 0 : this.#mediaElement.volume\n );\n // pause requested is a signal that an adbreak with a linear ad got started\n this.#customPlayhead.disable();\n this.#adDuration = this.#currentAd.getDuration();\n this.#adCurrentTime = 0;\n break;\n case AdEvent.Type.CONTENT_RESUME_REQUESTED:\n const adPlayedPreviously = Boolean(this.#currentAd);\n // synchronize ad volume state back to content\n // because IMA does not do that\n if (adPlayedPreviously) {\n const adVolume = this.#adsManager.getVolume();\n if (adVolume === 0) {\n this.#mediaElement.muted = true;\n } else {\n this.#mediaElement.muted = false;\n }\n this.#mediaElement.volume = this.#lastNonZeroAdVolume;\n }\n if (this.#customPlaybackTimeAdjustedOnEnded) {\n // Fixing the issue on iOS and postroll where we have to\n // adjust current time.\n // We jump back to the content end, so that \"ended\" is assigned again.\n this.#mediaElement.currentTime = this.#mediaElement.duration + 1;\n this.#customPlaybackTimeAdjustedOnEnded = false;\n }\n\n if (this.#mediaElement.ended) {\n // after postroll\n this.reset();\n this._mediaStop();\n } else {\n this._resetAd();\n }\n // only start playback when there previously was an ad\n // CONTENT_RESUME_REQUESTED also gets triggered when \"start\"\n // is not called on preroll when \"loadAds\" is used\n if (adPlayedPreviously) {\n this.#wasExternallyPaused = false;\n this._playContent();\n }\n break;\n case AdEvent.Type.AD_METADATA:\n this._setCuePoints(this.#adsManager.getCuePoints());\n if (this.#cuePoints.indexOf(0) === -1) {\n if (!this.#startAdCallback) {\n this._playContent();\n } else {\n this.#startAdCallback({\n start: () => {\n this._playContent();\n this.#startAdCallback = undefined;\n },\n startWithoutReset: () => {\n this._playContent();\n }\n });\n }\n }\n break;\n case AdEvent.Type.AD_PROGRESS:\n const adDataProgress = event.getAdData();\n this.#adCurrentTime = adDataProgress.currentTime;\n this.#adDuration = adDataProgress.duration;\n break;\n case AdEvent.Type.LOG:\n const adData = event.getAdData();\n // called when an error occurred in VMAP (e.g. empty preroll)\n if (this.#startAdCallback) {\n this.#startAdCallback({\n start: () => {\n this._playContent();\n this.#startAdCallback = undefined;\n },\n startWithoutReset: () => {\n this._playContent();\n }\n });\n } else if (adData.adError && !this.#currentAd) {\n this._playContent();\n }\n break;\n case AdEvent.Type.VOLUME_CHANGED:\n const currentVolume = this.#adsManager.getVolume();\n if (currentVolume > 0) {\n this.#lastNonZeroAdVolume = currentVolume;\n }\n break;\n }\n }\n\n private _onAdsLoaderError(event: google.ima.AdErrorEvent) {\n this._onAdError(this._createPlayerErrorFromImaErrorEvent(event));\n }\n\n private _onAdsManagerLoaded(loadedEvent: google.ima.AdsManagerLoadedEvent) {\n const {\n AdEvent,\n AdErrorEvent: {\n Type: { AD_ERROR }\n }\n } = this.#ima;\n window.clearTimeout(this.#adsManagerLoadedTimeout);\n const adsManager = (this.#adsManager = loadedEvent.getAdsManager(\n this.#customPlayhead,\n this.#adsRenderingSettings\n ));\n\n Object.keys(AdEvent.Type).forEach((imaEventName) => {\n adsManager.addEventListener(AdEvent.Type[imaEventName], (event) => {\n this._handleAdsManagerEvents(event);\n if (PlayerEvent[imaEventName]) {\n const isEventWithAdData =\n ['LOG', 'AD_PROGRESS'].indexOf(imaEventName) > -1;\n this.dispatchEvent(\n new CustomEvent(PlayerEvent[imaEventName], {\n detail: {\n ad: event.getAd() || this.#currentAd,\n adData: isEventWithAdData ? event.getAdData() : {}\n }\n })\n );\n }\n });\n });\n adsManager.addEventListener(AD_ERROR, (event) =>\n this._onAdError(this._createPlayerErrorFromImaErrorEvent(event))\n );\n\n // start ad playback\n try {\n adsManager.init(this.#width, this.#height, this._getViewMode());\n // initial sync of volume so that muted autoplay works\n adsManager.setVolume(\n this.#mediaElement.muted ? 0 : this.#mediaElement.volume\n );\n // ensure to initialize the ad container at least once before\n // starting it. For playback with sound it requires a synchronous\n // .activate()\n this.#adDisplayContainer?.initialize();\n if (!this.#startAdCallback) {\n this._startAdsManager();\n }\n } catch (adError) {\n this._onAdError(new PlayerError(adError.message));\n }\n }\n\n private _startAdsManager() {\n if (!this.#mediaStartTriggered) {\n this.dispatchEvent(new CustomEvent(PlayerEvent.MEDIA_START));\n this.#mediaStartTriggered = true;\n }\n if (this.#adsManager) {\n try {\n this.#adsManager.start();\n } catch (error) {\n this._onAdError(new PlayerError(error.message));\n }\n } else {\n this._playContent();\n }\n }\n\n private _mediaStop() {\n setTimeout(() => {\n this.#mediaImpressionTriggered = false;\n this.#mediaStartTriggered = false;\n this.#customPlaybackTimeAdjustedOnEnded = false;\n this.dispatchEvent(new CustomEvent(PlayerEvent.MEDIA_STOP));\n }, 1);\n }\n\n private _resizeObserverCallback(entries) {\n for (const entry of entries) {\n if (entry.contentBoxSize && entry.contentBoxSize.length === 1) {\n this.#width = entry.contentBoxSize[0].inlineSize;\n this.#height = entry.contentBoxSize[0].blockSize;\n } else if (entry.contentBoxSize && entry.contentBoxSize.inlineSize) {\n this.#width = entry.contentBoxSize.inlineSize;\n this.#height = entry.contentBoxSize.blockSize;\n } else {\n this.#width = entry.contentRect.width;\n this.#height = entry.contentRect.height;\n }\n }\n this._resizeAdsManager();\n }\n\n private _resizeAdsManager() {\n if (!this.#playerOptions.autoResize || !this.#adsManager) return;\n\n const ad = this.#currentAd;\n const viewMode = this._getViewMode();\n const isNonLinearAd = ad && !ad.isLinear();\n\n if (!isNonLinearAd) {\n this.resizeAd(this.#width, this.#height);\n } else if (ad) {\n if (ad.getWidth() > this.#width || ad.getHeight() > this.#height) {\n this.resizeAd(this.#width, this.#height);\n } else {\n // in case we won't add pixels in height here it triggers a VAST error\n // that there is not enough space to render the nonlinear ad\n // when \"useStyledNonLinearAds\" is given the height needs to be higher so\n // that the close button fits in\n this.#adsManager.resize(ad.getWidth(), ad.getHeight() + 20, viewMode);\n this.#adElement.style.width = `${ad.getWidth()}px`;\n this.#adElement.style.height = `${ad.getHeight() + 20}px`;\n }\n }\n }\n\n private _getViewMode() {\n if (\n document.fullscreenElement || // Standard syntax\n // @ts-ignore\n document.webkitFullscreenElement || // Chrome, Safari and Opera synta\n // @ts-ignore\n document.mozFullScreenElement || // Firefox syntax\n // @ts-ignore\n document.msFullscreenElement || // IE/Edge syntax\n // @ts-ignore\n this.#mediaElement.webkitDisplayingFullscreen // Video in fullscreen, e.g. Safari iOS\n ) {\n return this.#ima.ViewMode.FULLSCREEN;\n }\n return this.#ima.ViewMode.NORMAL;\n }\n\n private _playContent() {\n this.#adElement.style.display = 'none';\n\n if (!this.#mediaElement.ended) {\n this.#customPlayhead.enable();\n if (!this.#wasExternallyPaused) {\n this._mediaElementPlay()\n .then(() => {\n // empty\n })\n .catch(() => {\n // just in case we don't receive a \"pause\" event\n this.dispatchEvent(new CustomEvent('pause'));\n });\n this.dispatchEvent(new CustomEvent('play'));\n this.dispatchEvent(new CustomEvent(PlayerEvent.MEDIA_RESUMED));\n } else {\n this.#mediaElement.pause();\n // somehow the above \"pause()\" does not send out pause event\n this.dispatchEvent(new CustomEvent('pause'));\n }\n this.#wasExternallyPaused = false;\n }\n }\n\n private _createPlayerErrorFromImaErrorEvent(event: google.ima.AdErrorEvent) {\n const error = event.getError();\n const playerError = new PlayerError(error.getMessage());\n playerError.type = error.getType();\n playerError.errorCode = error.getErrorCode();\n playerError.vastErrorCode =\n error.getVastErrorCode && error.getVastErrorCode();\n playerError.innerError = error.getInnerError();\n return playerError;\n }\n\n private _onAdError(error: PlayerError) {\n this.dispatchEvent(\n new CustomEvent(PlayerEvent.AD_ERROR, {\n detail: { error }\n })\n );\n this._resetAd();\n if (this.#startAdCallback) {\n this.#startAdCallback({\n start: () => {\n this._playContent();\n this.#startAdCallback = undefined;\n },\n startWithoutReset: () => {\n this._playContent();\n }\n });\n } else {\n this._playContent();\n }\n }\n}\n","/**\n * Improved version of: https://developers.google.com/interactive-media-ads/docs/sdks/html5/ad-rules#known-issues-with-mobile-safari\n */\nexport class CustomPlayhead {\n #mediaElement?: HTMLVideoElement;\n #currentTime?: number;\n #enabled: boolean;\n seeking: boolean;\n\n constructor(mediaElement: HTMLVideoElement) {\n this.#mediaElement = mediaElement;\n this.#currentTime = 0;\n this.#enabled = false;\n this.seeking = false;\n this._onTimeupdate = this._onTimeupdate.bind(this);\n this._onSeeking = this._onSeeking.bind(this);\n this._onSeeked = this._onSeeked.bind(this);\n this.enable();\n }\n\n private _onSeeking() {\n this.seeking = true;\n }\n\n private _onSeeked() {\n this.seeking = false;\n }\n\n private _onTimeupdate() {\n if (!this.seeking && !this.#mediaElement?.paused) {\n this.#currentTime = this.#mediaElement?.currentTime;\n }\n }\n\n get enabled() {\n return this.#enabled;\n }\n\n enable() {\n if (this.#enabled) return;\n this.#mediaElement?.addEventListener('seeking', this._onSeeking);\n this.#mediaElement?.addEventListener('seeked', this._onSeeked);\n this.#mediaElement?.addEventListener('timeupdate', this._onTimeupdate);\n this.#enabled = true;\n }\n\n disable() {\n if (!this.#enabled) return;\n this.#mediaElement?.removeEventListener('seeking', this._onSeeking);\n this.#mediaElement?.removeEventListener('seeked', this._onSeeked);\n this.#mediaElement?.removeEventListener('timeupdate', this._onTimeupdate);\n this.#enabled = false;\n }\n\n get currentTime() {\n return this.#currentTime;\n }\n\n get duration() {\n return this.#mediaElement?.duration;\n }\n\n get muted() {\n return this.#mediaElement?.muted;\n }\n\n get volume() {\n return this.#mediaElement?.volume;\n }\n\n play() {\n return new Promise((resolve) => {\n resolve(this.#mediaElement?.play());\n });\n }\n\n pause() {\n this.#mediaElement?.pause();\n }\n\n reset() {\n this.#currentTime = 0;\n this.#enabled = false;\n this.seeking = false;\n this.enable();\n }\n\n destroy() {\n this.#currentTime = 0;\n this.#enabled = false;\n this.seeking = false;\n this.disable();\n this.#mediaElement = undefined;\n }\n}\n","export class DelegatedEventTarget implements EventTarget {\n\n private delegate = document.createDocumentFragment();\n\n addEventListener(...args: any): void {\n this.delegate.addEventListener.apply(this.delegate, args);\n }\n\n dispatchEvent(...args: any): boolean {\n return this.delegate.dispatchEvent.apply(this.delegate, args);\n }\n\n removeEventListener(...args: any): void {\n return this.delegate.removeEventListener.apply(this.delegate, args);\n }\n}\n","exports.interopDefault = function (a) {\n return a && a.__esModule ? a : {default: a};\n};\n\nexports.defineInteropFlag = function (a) {\n Object.defineProperty(a, '__esModule', {value: true});\n};\n\nexports.exportAll = function (source, dest) {\n Object.keys(source).forEach(function (key) {\n if (\n key === 'default' ||\n key === '__esModule' ||\n Object.prototype.hasOwnProperty.call(dest, key)\n ) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function () {\n return source[key];\n },\n });\n });\n\n return dest;\n};\n\nexports.export = function (dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get,\n });\n};\n"],"names":["pendingPromise","promiseFinished","loadImaSdk","w","window","google","ima","Promise","resolve","reject","script","document","createElement","async","src","onload","onerror","body","appendChild","then","catch","self","CustomEvent","__p__","constructor","type","init","e","createEvent","initCustomEvent","bubbles","cancelable","detail","AdditionalMediaEvent","ImaToAdEventMap","CustomPlayhead","mediaElement","seeking","_classPrivateFieldLooseBase","this","_onTimeupdate","bind","_onSeeking","_onSeeked","enable","_classPrivateFieldLoo","paused","_classPrivateFieldLoo2","currentTime","addEventListener","disable","removeEventListener","play","_this","_classPrivateFieldLoo9","pause","reset","destroy","undefined","_classPrivateFieldLoo11","duration","_classPrivateFieldLoo12","muted","_classPrivateFieldLoo13","volume","DelegatedEventTarget","delegate","createDocumentFragment","apply","dispatchEvent","MEDIA_ELEMENT_EVENTS","PlayerEvent","PlayerOptions","disableCustomPlaybackForIOS10Plus","autoResize","clickTrackingElement","PlayerError","errorCode","innerError","vastErrorCode","Error","ERROR_CODE_ADS_MANAGER_LOADED_TIMEOUT","ERROR_CODE_REQUEST_ADS_TIMEOUT","Player","adElement","adsRenderingSettings","options","AdsRenderingSettings","_this2","restoreCustomPlaybackStateOnAdBreakComplete","hasAttribute","setAttribute","settings","setDisableCustomPlaybackForIOS10Plus","_handleMediaElementEvents","forEach","eventName","_onAdsManagerLoaded","_onAdsLoaderError","offsetHeight","offsetWidth","ResizeObserver","entries","_resizeObserverCallback","observe","activate","ready","_this3","setTimeout","playAds","adsRequest","_requestAds","loadAds","startAdCallback","_mediaElementPlay","_this4","autoPlayAdBreaks","_setupIma","setAutoPlayAdBreaks","ended","linearAdSlotWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","contentDuration","error","_this5","_onAdError","requestAds","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","AdErrorEvent","AD_ERROR","skipAd","skip","discardAdBreak","enabled","resume","_this6","_setCuePoints","cuePoints","MEDIA_CUE_POINTS_CHANGE","_adjustCuePoints","timeOffset","cuePointIndex","indexOf","splice","resizeAd","width","height","resize","_getViewMode","style","force","_resetAd","_resetIma","display","_this7","disconnect","isCustomPlaybackUsed","getDisableCustomPlaybackForIOS10Plus","querySelector","clearTimeout","classList","remove","_resizeAdsManager","event","cuePointToRemove","getCuePoints","filter","cuePoint","_this8","pop","MEDIA_IMPRESSION","MEDIA_START","contentComplete","_mediaStop","_handleAdsManagerEvents","AdEvent","LOADED","loadedAd","getAd","length","ad","start","_this9","_startAdsManager","startWithoutReset","AD_BREAK_READY","adBreakTime","getAdData","STARTED","getAdPodInfo","getAdPosition","setVolume","getVolume","isLinear","getDuration","add","_playContent","ALL_ADS_COMPLETED","Boolean","getTimeOffset","CONTENT_PAUSE_REQUESTED","CONTENT_RESUME_REQUESTED","adPlayedPreviously","adVolume","AD_METADATA","AD_PROGRESS","adDataProgress","LOG","adData","adError","VOLUME_CHANGED","currentVolume","_createPlayerErrorFromImaErrorEvent","loadedEvent","adsManager","getAdsManager","Object","keys","imaEventName","_this10","isEventWithAdData","initialize","message","_this11","MEDIA_STOP","entry","contentBoxSize","inlineSize","blockSize","contentRect","viewMode","getWidth","getHeight","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","webkitDisplayingFullscreen","ViewMode","FULLSCREEN","NORMAL","_this12","MEDIA_RESUMED","getError","playerError","getMessage","getType","getErrorCode","getVastErrorCode","getInnerError","_this13"],"version":3,"file":"index.js.map","sourceRoot":"../../../"}
\ No newline at end of file
diff --git a/packages/artplayer-plugin-vast/package.json b/packages/artplayer-plugin-vast/package.json
index 5ffa026b9..486120267 100644
--- a/packages/artplayer-plugin-vast/package.json
+++ b/packages/artplayer-plugin-vast/package.json
@@ -1,24 +1,27 @@
{
- "license": "MIT",
- "version": "1.0.0",
- "name": "artplayer-plugin-vast",
- "types": "types/artplayer-plugin-vast.d.ts",
- "description": "vast plugin for ArtPlayer",
- "main": "dist/artplayer-plugin-vast.js",
- "legacy": "dist/artplayer-plugin-vast.legacy.js",
- "author": "Harvey Zack ",
- "browserslist": "last 1 Chrome version",
- "homepage": "https://artplayer.org",
- "repository": {
- "type": "git",
- "url": "git+https://github.com/zhw2590582/ArtPlayer.git"
- },
- "bugs": {
- "url": "https://github.com/zhw2590582/ArtPlayer/issues"
- },
- "keywords": [
- "html5",
- "video",
- "player"
- ]
+ "license": "MIT",
+ "version": "1.0.0",
+ "name": "artplayer-plugin-vast",
+ "types": "types/artplayer-plugin-vast.d.ts",
+ "description": "vast plugin for ArtPlayer",
+ "main": "dist/artplayer-plugin-vast.js",
+ "legacy": "dist/artplayer-plugin-vast.legacy.js",
+ "author": "Harvey Zack ",
+ "browserslist": "last 1 Chrome version",
+ "homepage": "https://artplayer.org",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/zhw2590582/ArtPlayer.git"
+ },
+ "bugs": {
+ "url": "https://github.com/zhw2590582/ArtPlayer/issues"
+ },
+ "keywords": [
+ "html5",
+ "video",
+ "player"
+ ],
+ "dependencies": {
+ "@glomex/vast-ima-player": "^1.21.0"
+ }
}
diff --git a/packages/artplayer-plugin-vast/src/index.js b/packages/artplayer-plugin-vast/src/index.js
index da82bbfb1..d09220713 100644
--- a/packages/artplayer-plugin-vast/src/index.js
+++ b/packages/artplayer-plugin-vast/src/index.js
@@ -1,26 +1,58 @@
-import style from 'bundle-text:./style.less';
+import { Player, PlayerOptions, loadImaSdk } from '@glomex/vast-ima-player';
+
+export default function artplayerPluginVast(callback) {
+ return async (art) => {
+ const { template, constructor } = art;
+ const { createElement, setStyles, append } = constructor.utils;
+ const { $video, $player } = template;
+
+ await loadImaSdk();
+ const google = window.google;
+ const ima = google.ima;
+
+ const adsRenderingSettings = new ima.AdsRenderingSettings();
+ const playerOptions = new PlayerOptions();
+
+ const id = `art-${Date.now()}`;
+ const $container = createElement('div');
+ append($player, $container);
+ $container.id = id;
+ setStyles($container, {
+ position: 'absolute',
+ inset: '0',
+ width: '100%',
+ height: '100%',
+ zIndex: '150',
+ });
+
+ const player = new Player(ima, $video, $container, adsRenderingSettings, playerOptions);
+
+ function playUrl(url) {
+ const playAdsRequest = new ima.AdsRequest();
+ playAdsRequest.adTagUrl = url;
+ player.playAds(playAdsRequest);
+ }
+
+ function playRes(res) {
+ const playAdsRequest = new ima.AdsRequest();
+ playAdsRequest.adsResponse = res;
+ player.playAds(playAdsRequest);
+ }
+
+ if (typeof callback === 'function') {
+ await callback({ art, id, ima, player, $container, playUrl, playRes });
+ }
-export default function artplayerPluginVast(option) {
- return (art) => {
return {
name: 'artplayerPluginVast',
+ id,
+ ima,
+ player,
+ $container,
};
};
}
-if (typeof document !== 'undefined') {
- const id = 'artplayer-plugin-vast';
- const $style = document.getElementById(id);
- if ($style) {
- $style.textContent = style;
- } else {
- const $style = document.createElement('style');
- $style.id = id;
- $style.textContent = style;
- document.head.appendChild($style);
- }
-}
-
if (typeof window !== 'undefined') {
window['artplayerPluginVast'] = artplayerPluginVast;
}
diff --git a/packages/artplayer-plugin-vast/src/style.less b/packages/artplayer-plugin-vast/src/style.less
deleted file mode 100644
index ef682551c..000000000
--- a/packages/artplayer-plugin-vast/src/style.less
+++ /dev/null
@@ -1,3 +0,0 @@
-.artplayer-plugin-vast {
- //
-}