X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=plugins%2Fplayvideos%2Fyoutube_playlist.js;fp=plugins%2Fplayvideos%2Fyoutube_playlist.js;h=be8d63afa49c751c9a6557e618abc7d619140ecf;hb=b17c19ff76dc63b9ad10d26b244630b59e691e5c;hp=0000000000000000000000000000000000000000;hpb=a52e8435939c641f964939f1df55cf7ceddcc0fd;p=github%2Fshaarli%2FShaarli.git diff --git a/plugins/playvideos/youtube_playlist.js b/plugins/playvideos/youtube_playlist.js new file mode 100644 index 00000000..be8d63af --- /dev/null +++ b/plugins/playvideos/youtube_playlist.js @@ -0,0 +1,196 @@ +var run_playideos = (function () { + var e, n, t, o, r, i = [].indexOf || function (e) { + for (var n = 0, t = this.length; n < t; n++) { + if (n in this && this[n] === e) return n + } + return -1 + }; + if (!window.console) { + window.console = { + log: function () {} + } + } + n = { + shadow: { + "background-color": "black", + position: "fixed", + left: 0, + top: 0, + width: "100%", + height: "100%", + "z-index": 1e3, + opacity: .8 + }, + player_box: { + position: "fixed", + left: "50%", + top: "50%", + width: 640, + height: 480, + "margin-left": -320, + "margin-top": -240, + "z-index": 1001 + }, + prev_button: { + "float": "left" + }, + next_button: { + "float": "right" + } + }; + t = function (e, n) { + var t, o, r; + r = document.createElement("script"); + r.src = e; + o = document.getElementsByTagName("head")[0]; + t = false; + r.onload = r.onreadystatechange = function () { + var e, i; + e = !this.readyState || (i = this.readyState) === "loaded" || i === "complete"; + if (!t && e) { + t = true; + n(); + r.onload = r.onreadystatechange = null; + return o.removeChild(r) + } + }; + return o.appendChild(r) + }; + e = function (e) { + var t, o, r, a, u, l, d, c, f, p, s, y, h, g, v, m, w; + e.getScript("//www.youtube.com/iframe_api"); + d = []; + w = new RegExp("https?://(www.)?youtube.com/"); + e('a[href^="http"]').each(function () { + var n; + if (!e(this).attr("href").match(w)) { + return + } + n = this.href.replace(/^.*v=/, "").replace(/\&.*$/, ""); + if (i.call(d, n) < 0) { + return d.push(n) + } + }); + console.log("video ids", d); + c = 0; + y = null; + g = "playlist_player"; + f = function () { + console.log("Playing", c, d[c]); + return y.loadVideoById(d[c]) + }; + p = function () { + c++; + if (c >= d.length) { + c -= d.length + } + return f() + }; + s = function () { + c--; + if (c < 0) { + c += d.length + } + return f() + }; + l = function () { + e("#shadow, #player_box").remove(); + return e(document).unbind("keyup.player") + }; + e(document).bind("keyup.player", function (e) { + if (e.keyCode === 27) { + l() + } + if (e.keyCode === 39) { + p() + } + if (e.keyCode === 37) { + return s() + } + }); + u = e("
", { + id: "shadow", + css: n.shadow, + click: l + }); + r = e("
", { + id: "player_box", + css: n.player_box + }); + o = e("
", { + id: g + }); + a = e("", { + href: "javascript:;", + text: "previous", + css: n.prev_button, + click: s + }); + t = e("", { + href: "javascript:;", + text: "next", + css: n.next_button, + click: p + }); + r.append(o).append(a).append(t); + e("body").append(u).append(r); + v = function (e) { + console.log("player ready"); + return e.target.playVideo() + }; + h = function (e) { + var n, t; + n = { + 2: "invalid video id", + 5: "video not supported in html5", + 100: "video removed or private", + 101: "video not embedable", + 150: "video not embedable" + }; + t = n[e.data] || "unknown error"; + console.log("Error", t); + d.splice(c, 1); + if (c >= d.length) { + c = 0 + } + return f() + }; + m = function (e) { + if (e.data === YT.PlayerState.ENDED) { + return p() + } + }; + return window.onYouTubeIframeAPIReady = function () { + return y = new YT.Player(g, { + height: "390", + width: "640", + videoId: d[0], + events: { + onReady: v, + onError: h, + onStateChange: m + } + }) + } + }; + o = false; + if (typeof jQuery !== "undefined" && jQuery !== null && jQuery.fn && jQuery.fn.jquery) { + r = jQuery.fn.jquery.split("."); + if (r.length === 3 && parseInt(r[1]) > 3) { + console.log("using in page jquery version", jQuery.fn.jquery); + e(jQuery); + o = true + } + } + if (!o) { + t("plugins/playvideos/jquery-1.11.2.min.js", function () { + return e(jQuery.noConflict(true)) + }) + } +}); + +var input = document.querySelector('#playvideos'); +input.addEventListener('click', function() +{ + run_playideos(); +});