summaryrefslogtreecommitdiff
path: root/data/extensions/html5-video-everywhere@lejenome.me/node_modules/h5vew-site-vimeo/data/vimeo.js
diff options
context:
space:
mode:
Diffstat (limited to 'data/extensions/html5-video-everywhere@lejenome.me/node_modules/h5vew-site-vimeo/data/vimeo.js')
-rw-r--r--data/extensions/html5-video-everywhere@lejenome.me/node_modules/h5vew-site-vimeo/data/vimeo.js141
1 files changed, 141 insertions, 0 deletions
diff --git a/data/extensions/html5-video-everywhere@lejenome.me/node_modules/h5vew-site-vimeo/data/vimeo.js b/data/extensions/html5-video-everywhere@lejenome.me/node_modules/h5vew-site-vimeo/data/vimeo.js
new file mode 100644
index 0000000..4818309
--- /dev/null
+++ b/data/extensions/html5-video-everywhere@lejenome.me/node_modules/h5vew-site-vimeo/data/vimeo.js
@@ -0,0 +1,141 @@
+(function() {
+ "use strict";
+
+ onReady(() =>
+ getConfig().then(getVideoInfo)
+ );
+
+ function injectPlayer(conf) {
+ try {
+ let player_container, player, stl;
+ if (conf.isEmbed) {
+ player_container = document.body;
+ } else if (conf.isWatch) {
+ player_container = document.getElementById("video") ||
+ document.getElementById("video_wrapper");
+ if ((stl = player_container.children[0]) &&
+ (stl = stl.sheet) &&
+ (stl.cssRules.length > 0)) {
+ stl = stl.cssRules[0].cssText;
+ }
+ } else {
+ player_container = document.getElementById("clip_" + conf.id);
+ }
+ if (!player_container)
+ return;
+ var vp = new VP(player_container);
+ vp.srcs(conf.fmts, {
+ "higher/mp4": "1080p",
+ "high/mp4": "720p",
+ "medium/mp4": "360p",
+ "low/mp4": "270p"
+ }, (fmt) => fmt.url);
+ vp.props({
+ className: conf.className,
+ autoplay: autoPlay(),
+ preload: preLoad(),
+ loop: isLoop(),
+ controls: true,
+ poster: conf.poster,
+ volume: OPTIONS.volume / 100
+ });
+ vp.tracksList(conf.tracks.map(l => l.lang), (lang, resolve, reject) => {
+ var l = conf.tracks.find(l => l.lang === lang);
+ if (l === undefined)
+ reject();
+ else
+ resolve(l.direct_url || l.url);
+ });
+ if (stl)
+ vp.addCSSRule(stl);
+ vp.setup();
+ if (conf.isWatch)
+ brozarEvents();
+ } catch (e) {
+ logify("Exception on changePlayer()", e.lineNumber, e.columnNumber, e.message, e.stack);
+ }
+ }
+
+ function getConfig() {
+ return new Promise((resolve, reject) => {
+ var isWatch = /https?:\/\/vimeo.com\/[\d]+/.test(location.href) ||
+ ogType().indexOf("video") > -1;
+ var isEmbed = /https?:\/\/player.vimeo.com\/video/.test(location.href);
+ var isChannel = /https?:\/\/vimeo.com\/(channels\/|)\w+/.test(location.href) ||
+ ogType().match(/channel|profile/) !== null;
+ if (!isWatch && !isChannel && !isEmbed)
+ reject();
+ var player_id, player_class;
+ if (isWatch) {
+ player_id = location.pathname.match(/\/([\d]+)/)[1];
+ player_class = "player";
+ } else if (isEmbed) {
+ player_id = location.pathname.match(/video\/([\d]+)/)[1];
+ player_class = "fallback";
+ } else if (isChannel) {
+ player_class = "player";
+ }
+ if (!player_id && !isChannel)
+ reject();
+ resolve({
+ isWatch: isWatch,
+ isEmbed: isEmbed,
+ isChannel: isChannel,
+ id: player_id,
+ className: player_class
+ });
+ });
+ }
+
+ function getVideoInfo(conf) {
+ const processData = (conf) => (data) => {
+ data = JSON.parse(data);
+ conf.fmts = {};
+ data.request.files.progressive.forEach((fmt) => {
+ conf.fmts[fmt.quality] = fmt;
+ });
+ conf.poster = data.video.thumbs.base;
+ conf.tracks = data.request.text_tracks || [];
+ return Promise.resolve(conf);
+ };
+ const INFO_URL = "//player.vimeo.com/video/";
+ if (conf.isChannel) {
+ return Array.map(document.getElementsByClassName("player_container"), (el) => {
+ var _conf = {};
+ for (var va in conf)
+ _conf[va] = conf[va];
+ _conf.id = el.id.replace("clip_", "");
+ return asyncGet(INFO_URL + _conf.id + "/config").then(processData(_conf))
+ .then(injectPlayer);
+ });
+ } else {
+ return asyncGet(INFO_URL + conf.id + "/config").then(processData(conf))
+ .then(injectPlayer);
+ }
+ }
+
+ function brozarEvents() {
+ // change Vimeo default click events of items on brozar element
+ var clips = document.getElementById("clips");
+ if (clips)
+ clips.onclick = function(e) {
+ if (e.target === e.currentTarget)
+ return;
+ var li = e.target;
+ while (li.tagName !== "LI")
+ li = li.parentElement;
+ window.location = "/" + li.id.replace("clip_", "");
+ };
+ var promos = document.getElementsByClassName("js-promo_link");
+ var promoClick = function(e) {
+ window.location = "/" + e.currentTarget.dataset.clipId;
+ };
+ for (var i = 0; promos && i < promos.length; i++)
+ promos[i].onclick = promoClick;
+ }
+
+ function ogType() {
+ var t = document.head.querySelector("meta[property=\"og:type\"]");
+ return (t) ? t.content : "";
+ }
+}()); \ No newline at end of file