diff options
Diffstat (limited to 'data/extensions/html5-video-everywhere@lejenome.me/node_modules/h5vew-site-vimeo/data')
-rw-r--r-- | data/extensions/html5-video-everywhere@lejenome.me/node_modules/h5vew-site-vimeo/data/vimeo.js | 141 |
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 |