From b4b091eb41b9ed02f19b1476fd0566ea691b1db5 Mon Sep 17 00:00:00 2001 From: Particle Date: Sun, 1 Jan 2017 19:23:16 -0100 Subject: [PATCH] 1.7.4 Code maintenance/cleanup Fixed #422 --- bin/update.json | 2 +- dist/YouTubePlus.xpi | Bin 79507 -> 80233 bytes src/Userscript/YouTubePlus.user.js | 310 +++++++++++++++--------- src/Webextension/JS/YouTubePlus.user.js | 310 +++++++++++++++--------- src/Webextension/manifest.json | 2 +- 5 files changed, 404 insertions(+), 220 deletions(-) diff --git a/bin/update.json b/bin/update.json index aae10df..983c315 100644 --- a/bin/update.json +++ b/bin/update.json @@ -2,7 +2,7 @@ "addons": { "unlisted-particle@particlecore.github.io": { "updates": [{ - "version": "1.7.3", + "version": "1.7.4", "update_link": "https://github.com/ParticleCore/Particle/raw/master/dist/YouTubePlus.xpi", "applications": { "gecko": { diff --git a/dist/YouTubePlus.xpi b/dist/YouTubePlus.xpi index d0370200fe92427048769e96ed5f58720f0f96f7..df2fbdf2804bff3f97c470e9c44a45e75596aaa0 100644 GIT binary patch delta 31827 zcmV)IK)k<`?F8xa1Qbw90|XQR000O83!))PBlL}G{|u27A%8fO?;19Xv2Tri&l+R+ z##$1xFNuhhEyiF9BQuulhD4U^Sz^Y%Z`oxjOC&0kEy+?*gd!^8P^bEx-}&SGb*^(= z=fC&;R*YjL?hNVgONr$wX!|fXHkN27yp?01b>1!3Y6!Q&IqQ zf1E&MBK-(Jqj$Rc0%HRIw8^a()NyyICs3X+kek&(l}3Nlsq8&yF?lgyD0u= zDm)VBfk*uG{~53TD+-Ns1Nb=@P)Yy_K*<6qMS1xP91OB3l&st@2!uwX-~h|d;%WaB z{I7>+2UrgP6`a8c=jBeY$GQtzU@<-@ru|#{aVfBqKlc9>MGXgQp8S1A)+1i-u2?() z@6CAfGwNMmsT5iIoA9|5AIfDpk<6#L(4!9*~K;_j{X zP_%y{20l0}!1J~X^S06;-V!l(kJD?WFu)+Tyh__S)$N{yMaF9&$p%3M?aUwR6HIuQ zI}k_VNlqz~fmxr;SltEGtnI{k59tz9V2L|6Y7ISOHLN3-Df;N&3^3w;$JPH(x&&}wg8<}tN zkbhaf+B#;s`LV82~ZPuPSoi_N#rqhuoLSYMnQCalnUVl3H0ii`OH-!rFB|AC3oc8r+EzIc@zwtbm z+Dgo&_a)eyonKm$!4pFjy6`>{zH6{Diq_cd{zTK+Jyz5)D*%wmJQ~k}V7HbVp|O2h zY;qRq>gs6Gnc&E*A>tmz?vq_^yUwP0B#NXp&oawFrs5S>uj0Qo0^imaN$ zqRvwZ^I3sr8oTgBE^XBqnY3g6C~xp;1zEzWLUg>L?3fL0l0c23u4MNqDOgngmrzM& z8e*xe+%uP}I*-(c)ceKsJ((uMQ-Ysh-=F}8m4?xb^AN)hn$Q;Q>IW5T%6~)6wJTZg z263{`2Rn{+Ig5U#JWiIvrA^vkwN0CsnA}Gp-m?$mRZlI8%XW9n9buEVpDPK8DU0&a zjq5JaCm=@TVY+BMo;5DOLB;3(MiB2#C5pbM^L11CBT~TV!$&V2PTY3pE-^7D+p=$} zw6+Q+I&Jew)pO;Q;*wHr4}aS*wshIcFA.UmExcl(bcXg<3-UYgLyQfRLPtFFc= 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∨T>Jen;Vj<1 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

_H{POM!5En6 z`q;88N7+ZmCf*`WB}N(>IUOaxD)VRA^)O+kU4Qd)p#~}Qc3bkd+Ea5mgWr}BA9aca zw=H0U`${im0HUc5c_l@=Q_-Z$gp{8CoHA4H>*I@tOet0Puh7KrxVdZY*K{%Hjz3_p zAy_v;8w)|X*ADUBI&*w;51ZIOdi#p)Pe+z1D-QBewtm`DHE0yP0zMP>~wak5w7tnk^F5uC)SPAw|OU2fCZ ze72Gj@7^{)J!)T3baQToL90>hbn z?@1XmL8}Lf)n@#e0)xmCx=p2vB~i@VckPDNxZm`r8=hn6{_Q68PD!J~O=mbaKBV8e zkvpWJ8K*o%;h2saTsY|*$XL2^E-XJb+g9mey3jDcYQPH^d#VrTcoP!4Ra_SFOZrQloM#r21)?NjsT2h1GNO7@CHdV@@E0kvxCC^M{Gp^j_U&g zOyvaS1-5d4VgsqzKoP;96M-ho&0qF$)mLPxc{6CW)XbwFnFrEn% ogZ6)4&HvmctMBbRzGt-m+5UU!2U@@g

-
+

@@ -349,7 +348,7 @@
-

+
`; if (user_settings.GEN_LOCL_LANG && user_settings.localLang) { temp.content.querySelector(".P-implang").dataset.p = "ttl|GLB_LOCL_LANG&tnd|GLB_LOCL_LANG_CSTM"; @@ -360,7 +359,7 @@

-
+

@@ -374,14 +373,13 @@ inputs = temp.content.querySelectorAll("input[type='checkbox'] + label"); svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); svg.innerHTML = ""; - i = inputs.length; - while (i--) { + for (i = 0; i < inputs.length; i++) { inputs[i].appendChild(svg.cloneNode(true)); } return setLocale(getValues(temp.content)); } function exportSettings(target) { - var expCont; + let expCont; if (target.classList.contains("P-impexp") || target.classList.contains("P-implang")) { expCont = document.getElementById("exp-cont"); if (expCont) { @@ -424,7 +422,7 @@ } } function delBlackList(event) { - var newKey = user_settings.blacklist; + let newKey = user_settings.blacklist; delete newKey[event.target.nextSibling.href.split("/channel/")[1]]; event.target.parentNode.outerHTML = ""; set("blacklist", newKey); @@ -433,7 +431,7 @@ document.body.classList.remove("show-guide-button-notification"); } function saveSettings(salt) { - var i, value, notification, navId, userSets, savedSets; + let i, value, notification, navId, userSets, savedSets; navId = document.querySelector(".selected").id; userSets = document.getElementById("P-content").querySelectorAll("[id^='" + navId + "']"); savedSets = user_settings; @@ -497,7 +495,7 @@ } } function settingsTemplate(event) { - var pWrapper; + let pWrapper; if (event.target.id === "P" && event.target.tagName !== "INPUT") { pWrapper = document.getElementById("P-settings"); if (pWrapper) { @@ -524,11 +522,11 @@ } } function settingsMenu() { - var notif_button, settings_button, welcome_message; + let notif_button, settings_button, welcome_message; if (settingsMenu.settingsButton) { return; } - notif_button = document.querySelector(".notifications-container"); + notif_button = document.querySelector("#yt-masthead-notifications, .notifications-container"); settings_button = document.querySelector("#yt-masthead-user, #yt-masthead-signin"); if (settings_button) { welcome_message = document.createElement("template"); @@ -542,9 +540,9 @@ @@ -566,7 +564,7 @@ } function modComment(original) { return function (a) { - var comments, is_live; + let comments, is_live; comments = document.getElementById("watch-discussion"); is_live = window.ytplayer && window.ytplayer.config && window.ytplayer.config.args && window.ytplayer.config.args.livestream; if (a.split("comments").length > 1 && !is_live && comments && !comments.lazyload && user_settings.VID_HIDE_COMS === "1" && !comments.classList.contains("show")) { @@ -591,12 +589,12 @@ } function modEmbed(original) { return function (a, b) { - var temp, player; + let temp, player; temp = a.id || a; if (temp !== "player-api" && temp !== "upsell-video") { return original.apply(this, arguments); } - b = modArgs(b); + /*b = */modArgs(b); temp = original.apply(this, arguments); player = document.getElementById("movie_player"); if (player) { @@ -614,7 +612,7 @@ } function modAutoplayFullscreen(original) { return function () { - var has_ended, next_button, next_clicked; + let has_ended, next_button, next_clicked; has_ended = api && api.getCurrentTime && Math.round(api.getCurrentTime()) >= Math.floor(api.getDuration()); next_clicked = document.activeElement.classList.contains("ytp-button-next") || document.activeElement.classList.contains("ytp-next-button"); if (!user_settings.plApl && !next_clicked && has_ended) { @@ -634,20 +632,14 @@ } }; } - function modArgsWatch(args) { - if (args && args.autoplay === "1" && !user_settings.VID_PLR_ATPL && window.location.hash === "") { - args.autoplay = "0"; - } - return modArgsWatch.original.apply(this, arguments); - } function modPlayerCreate(original) { return function (a, b) { - var i, temp, player; + let i, temp, player; temp = a.id || a; if (temp !== "player-api" && temp !== "upsell-video") { return original.apply(this, arguments); } - b = modArgs(b); + /*b = */modArgs(b); if (a.id === "upsell-video") { original.apply(this, arguments); } else if (typeof a === "object") { @@ -676,8 +668,14 @@ } }; } + function ModArgsWatch(args) { + if (args && args.autoplay === "1" && !user_settings.VID_PLR_ATPL && window.location.hash === "") { + args.autoplay = "0"; + } + return ModArgsWatch.Original.apply(this, arguments); + } function scriptExit(event) { - var i, j, key, temp; + let i, j, key, temp; if (event && event.target) { if (event.target.getAttribute("name") === "www/base") { window.yt.setConfig = modSetConfig(window.yt.setConfig); @@ -710,39 +708,40 @@ } if (event.target.getAttribute("name") === "spf/spf") { window.spf.load = modComment(window.spf.load); - window.spf.prefetch = function(){return;}; + window.spf.prefetch = function(){}; if (window.name === "popOut") { - window.spf.navigate = function(){return;}; + window.spf.navigate = function(){}; } } } - if ((event && event.target && event.target.getAttribute("name") === "player/base") || (!window.html5Patched && window.yt && window.yt.player && window.yt.player.Application && window.yt.player.Application.create)) { + if ( + (event && event.target && event.target.getAttribute("name") === "player/base") || + (!window.html5Patched && window.yt && window.yt.player && window.yt.player.Application && window.yt.player.Application.create) + ) { window.html5Patched = true; window.yt.player.Application.create = modPlayerCreate(window.yt.player.Application.create); if (window._yt_player) { temp = Object.keys(window._yt_player); - i = temp.length; - while (i--) { - if (typeof window._yt_player[temp[i]] === "function" && window._yt_player[temp[i]].toString().match("this.adaptiveFormats")) { + for (i = 0; i < temp.length; i++) { + if (typeof window._yt_player[temp[i]] === "function" && window._yt_player[temp[i]].toString().match(/this\.adaptiveFormats/)) { key = temp[i]; break; } } if (key) { - modArgsWatch.original = window._yt_player[key]; - modArgsWatch.prototype = modArgsWatch.original.prototype; - temp = Object.keys(modArgsWatch.original); - i = temp.length; - while (i--) { - modArgsWatch[temp[i]] = modArgsWatch.original[temp[i]]; + ModArgsWatch.Original = window._yt_player[key]; + ModArgsWatch.prototype = ModArgsWatch.Original.prototype; + temp = Object.keys(ModArgsWatch.Original); + for (i = 0; i < temp.length; i++) { + ModArgsWatch[temp[i]] = ModArgsWatch.Original[temp[i]]; } - window._yt_player[key] = modArgsWatch; + window._yt_player[key] = ModArgsWatch; } } } } function checkBounds(elm, X, Y) { - var snapX, snapY; + let snapX, snapY; if (X > -1 && X + elm.offsetWidth < document.documentElement.offsetWidth) { snapX = false; } else if (X < 1) { @@ -764,7 +763,7 @@ return {X: X + "px", Y: Y + "px", snapX: snapX, snapY: snapY}; } function updatePos() { - var x, y, height, player, bounds; + let x, y, height, player, bounds; player = document.getElementById("movie_player"); if (!document.documentElement.classList.contains("floater") || window.innerWidth < 657) { if (player) { @@ -798,7 +797,7 @@ document[(window.chrome && "body") || "documentElement"].scrollTop = 0; } function dragFloater(event) { - var excluded, isFScreen, isFloater, bounds, player; + let excluded, isFScreen, isFloater, bounds, player; isFScreen = document.querySelector(".ytp-fullscreen"); isFloater = document.documentElement.classList.contains("floater"); if (event && !isFScreen && isFloater) { @@ -816,7 +815,13 @@ orgX: event.clientX, orgY: event.clientY }; - } else if (event.type === "mousemove" && (dragFloater.hasMoved || Math.abs(event.clientX - dragFloater.oldPos.orgX) > 10 || Math.abs(event.clientY - dragFloater.oldPos.orgY) > 10)) { + } else if ( + event.type === "mousemove" && ( + dragFloater.hasMoved || + Math.abs(event.clientX - dragFloater.oldPos.orgX) > 10 || + Math.abs(event.clientY - dragFloater.oldPos.orgY) > 10 + ) + ) { bounds = checkBounds(player, event.clientX + dragFloater.oldPos.X, event.clientY + dragFloater.oldPos.Y); player.style.left = bounds.X; player.style.top = bounds.Y; @@ -843,7 +848,7 @@ } } function iniFloater() { - var player, plrApi, out_of_sight, isFloater, isFScreen, floaterUI, settings_open; + let player, plrApi, out_of_sight, isFloater, isFScreen, floaterUI, settings_open; player = document.getElementById("movie_player"); plrApi = document.getElementById("player-api").getBoundingClientRect(); settings_open = document.getElementById("P-settings"); @@ -887,9 +892,16 @@ } } function alwaysActive(event) { - var i, list, clear, length, eventClone; + let i, list, clear, length, eventClone; clear = window.location.pathname == "/watch" && api && api !== event.target && !api.contains(event.target) && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey && !event.target.isContentEditable; - if (clear && ((event.which > 47 && event.which < 58) || (event.which > 95 && event.which < 106) || [27, 32, 35, 36, 37, 38, 39, 40, 66, 67, 79, 87, 187, 189].indexOf(event.which) > -1) && ["EMBED", "INPUT", "OBJECT", "TEXTAREA", "IFRAME"].indexOf(document.activeElement.tagName) < 0) { + if ( + clear && ( + event.which > 47 && event.which < 58 || + event.which > 95 && event.which < 106 || + [27, 32, 35, 36, 37, 38, 39, 40, 66, 67, 79, 87, 187, 189].indexOf(event.which) > -1 + ) && + ["EMBED", "INPUT", "OBJECT", "TEXTAREA", "IFRAME"].indexOf(document.activeElement.tagName) < 0 + ) { eventClone = new Event("keydown"); list = Object.keys(Object.getPrototypeOf(event)); length = list.length; @@ -935,7 +947,7 @@ } } function getThumb() { - var args, base, thumb_url; + let args, base, thumb_url; args = window.ytplayer.config.args; base = (args.iurl_webp && "_webp") || ""; thumb_url = args["iurlmaxres" + base] || args["iurlsd" + base] || args["iurl" + base]; @@ -948,7 +960,7 @@ } } function getScreenshot() { - var width, height, aspectRatio, video, container, canvas, close, context; + let width, height, aspectRatio, video, container, canvas, close, context; video = document.querySelector("video"); container = document.getElementById("screenshot-result") || document.createElement("div"); canvas = container.querySelector("canvas") || document.createElement("canvas"); @@ -971,7 +983,15 @@ } } function exitFullBrowser(key) { - if (document.documentElement.classList.contains("part_fullbrowser") && (key.keyCode === 27 || key.key === "Escape" || (key.target.className && key.target.className.split("ytp-size").length > 1))) { + if ( + document.documentElement.classList.contains("part_fullbrowser") && ( + key.keyCode === 27 || + key.key === "Escape" || ( + key.target.className && + key.target.className.split("ytp-size").length > 1 + ) + ) + ) { toggleFullBrowser(key); if (key.type === "mousedown") { document.removeEventListener("keydown", exitFullBrowser); @@ -981,7 +1001,7 @@ } } function toggleFullBrowser(event) { - var plrState = api && api.getPlayerState && api.getPlayerState(); + let plrState = api && api.getPlayerState && api.getPlayerState(); plrState = plrState < 5 && plrState > 0; document[(window.chrome && "body") || "documentElement"].scrollTop = 0; document.addEventListener("keydown", exitFullBrowser); @@ -993,6 +1013,45 @@ window.dispatchEvent(new Event("resize")); } } + function toggleFrames(event) { + let i, pi, fps, temp; + advancedOptions.frame_step = document.getElementById("framestep-button"); + if (event && ["EMBED", "INPUT", "OBJECT", "TEXTAREA"].indexOf(document.activeElement.tagName) < 0 && event.target.tagName !== "IFRAME" && !event.target.getAttribute("contenteditable")) { + if ((event.keyCode === 37 || event.keyCode === 39) && event.shiftKey) { + pi = api.getVideoStats().fmt; + if (window.ytplayer && window.ytplayer.config && window.ytplayer.config.args && window.ytplayer.config.args.adaptive_fmts) { + temp = window.ytplayer.config.args.adaptive_fmts.split(","); + i = temp.length; + while (i--) { + if (temp[i].indexOf("itag=" + pi) > 0) { + advancedOptions.fps = parseInt(temp[i].match(/fps=([\d]+)/)[1]); + break; + } + } + } + if (!advancedOptions.fps || advancedOptions.fps === 1) { + advancedOptions.fps = 30; + } + fps = ((event.keyCode < 39 && -1) || 1) * ((advancedOptions.fps < 2 && 30) || advancedOptions.fps); + if (fps && api) { + if (!document.querySelector("video").paused) { + api.pauseVideo(); + } + api.seekBy(1 / fps); + } + event.preventDefault(); + event.stopImmediatePropagation(); + } else if (event.type === "click" && event.target.id === "framestep-button") { + set("frame_step", !user_settings.frame_step); + advancedOptions.frame_step.classList[(user_settings.frame_step && "add") || "remove"]("active"); + } + } + if (advancedOptions.frame_step && advancedOptions.frame_step.classList.contains("active")) { + document.addEventListener("keydown", toggleFrames, true); + } else if (!advancedOptions.frame_step || !advancedOptions.frame_step.classList.contains("active")) { + document.removeEventListener("keydown", toggleFrames, true); + } + } function toggleShortcuts() { window.open("https://github.com/ParticleCore/Particle/wiki/YouTube-shortcuts", "_blank"); } @@ -1009,7 +1068,7 @@ document.getElementById("autoplay-button").classList[(user_settings.VID_PLR_ATPL && "add") || "remove"]("active"); } function toggleLoop(event) { - var videoPlayer = document.querySelector("video"); + let videoPlayer = document.querySelector("video"); if (videoPlayer) { videoPlayer.loop = event ? !user_settings.loopVid : user_settings.loopVid; if (event) { @@ -1019,7 +1078,7 @@ set("loopVid", advancedOptions.loop_button.classList.contains("active")); } function toggleCinemaMode(event) { - var plrState = api && api.getPlayerState && api.getPlayerState() < 5 && api.getPlayerState() > 0; + let plrState = api && api.getPlayerState && api.getPlayerState() < 5 && api.getPlayerState() > 0; set("lightsOut", event ? !user_settings.lightsOut : true); advancedOptions.cinema_mode.classList[(user_settings.lightsOut && "add") || "remove"]("active"); if (event && plrState) { @@ -1036,6 +1095,7 @@ advancedOptions.full_browser = advancedOptions.controls.querySelector("#fullbrowser-button"); advancedOptions.cinema_mode = advancedOptions.controls.querySelector("#cinemamode-button"); advancedOptions.loop_button = advancedOptions.controls.querySelector("#loop-button"); + advancedOptions.frame_step = advancedOptions.controls.querySelector("#framestep-button"); advancedOptions.actions = { togglePlay: togglePlay, toggleLoop: toggleLoop, @@ -1044,6 +1104,7 @@ popPlayer: popPlayer, toggleFullBrowser: toggleFullBrowser, toggleCinemaMode: toggleCinemaMode, + toggleFrames: toggleFrames, toggleShortcuts: toggleShortcuts }; document.addEventListener("click", handleToggles); @@ -1059,9 +1120,13 @@ advancedOptions.cinema_mode.classList.add("active"); toggleCinemaMode(); } + if (user_settings.frame_step && !advancedOptions.frame_step.classList.contains("active")) { + advancedOptions.frame_step.classList.add("active"); + toggleFrames(); + } } function advancedOptions() { - var header, cnslBtn, cnslCont; + let header, cnslBtn, cnslCont; header = document.getElementById("watch-header"); cnslBtn = document.getElementById("console-button"); advancedOptions.controls = document.getElementById("player-console"); @@ -1098,6 +1163,7 @@
+
`; if (user_settings.VID_PLR_ATPL) { @@ -1113,7 +1179,7 @@ } } function iniAction(event) { - var observer, load_more, click_title; + let observer, load_more, click_title; load_more = document.querySelector("#watch-more-related, .load-more-button"); click_title = document.querySelector(".yt-uix-tile"); while (click_title) { @@ -1142,7 +1208,7 @@ } } function setButtons() { - var i, j, list, temp, thumb, button; + let i, j, list, temp, thumb, button; list = Object.keys(modThumbs.thumbs); i = list.length; while (i--) { @@ -1180,7 +1246,7 @@ } } function delVideos() { - var i, j, temp, parent, blacklist, has_upnext; + let i, j, temp, parent, blacklist, has_upnext; has_upnext = document.querySelector(".autoplay-bar"); blacklist = Object.keys(user_settings.blacklist); i = blacklist.length; @@ -1233,7 +1299,7 @@ } } function getVideos() { - var i, list, temp, channel_id; + let i, list, temp, channel_id; modThumbs.thumbs = {}; list = document.querySelectorAll(` .yt-lockup-byline > a, @@ -1271,7 +1337,7 @@ } } function setVideoCount() { - var span = document.createElement("span"); + let span = document.createElement("span"); span.textContent = " · "; enhancedDetails.username.appendChild(span); enhancedDetails.link.href = window.location.origin + "/channel/" + enhancedDetails.user.dataset.ytid + "/videos"; @@ -1301,7 +1367,7 @@ } } function getChannelInfo(details) { - var retry, isLive; + let retry, isLive; isLive = details.target.response.querySelector(".yt-badge-live"); if (!isLive) { retry = details.target.responseURL.split("/videos").length < 2; @@ -1331,7 +1397,7 @@ } } function reverseControl() { - var i, temp, prev, next, list, videos; + let i, temp, prev, next, list, videos; prev = document.querySelector(".prev-playlist-list-item"); next = document.querySelector(".next-playlist-list-item"); list = document.getElementById("playlist-autoscroll-list"); @@ -1362,7 +1428,7 @@ } } function createButton(type, label, bool, call) { - var button = document.createElement("template"); + let button = document.createElement("template"); button.innerHTML = // ` @@ -2023,12 +2115,11 @@ document.documentElement.appendChild(temp.content.firstChild); document.addEventListener("click", closeMigrationInstructions); } - var api, cid, events, language, user_settings, player_instance, default_settings; + let api, cid, language, user_settings, player_instance, default_settings; if (isMaterial()) { return; } cid = {}; - events = {}; user_settings = JSON.parse(document.documentElement.dataset.user_settings || null); if (document.documentElement.dataset.user_settings) { document.documentElement.removeAttribute("data-user_settings"); @@ -2077,6 +2168,7 @@ CNSL_PPOT : "Pop-out video", CNSL_FLBR : "Fullbrowser mode", CNSL_CINM_MD : "Cinema mode", + CNSL_FRME : "Frame by frame (Shift + ← or →)", CNSL_YTSC : "YouTube shortcuts list", PLST_AP : "Autoplay", PLST_RVRS : "Reverse", @@ -2217,7 +2309,7 @@ main(); }, contentScriptMessages: function() { - var key1, key2, gate, sets, locs, observer; + let key1, key2, gate, sets, locs, observer; key1 = "parsend"; key2 = "getlocale"; gate = document.documentElement; @@ -2250,7 +2342,7 @@ } }, main: function(event) { - var holder; + let holder; if (!event && particle.is_userscript) { event = JSON.parse(particle.GM_getValue(particle.id, "{}")); } @@ -2261,7 +2353,7 @@ holder = document.createElement("link"); holder.rel = "stylesheet"; holder.type = "text/css"; - holder.href = "https://particlecore.github.io/Particle/stylesheets/YouTubePlus.css?v=1.7.3"; + holder.href = "https://particlecore.github.io/Particle/stylesheets/YouTubePlus.css?v=1.7.4"; document.documentElement.appendChild(holder); } holder = document.createElement("script"); @@ -2274,7 +2366,7 @@ }, ini: function() { particle.id = "particleSettings"; - particle.is_userscript = typeof GM_info === "object" ? true : false; + particle.is_userscript = typeof GM_info === "object"; if (particle.is_userscript) { particle.GM_getValue = GM_getValue; particle.GM_setValue = GM_setValue; diff --git a/src/Webextension/JS/YouTubePlus.user.js b/src/Webextension/JS/YouTubePlus.user.js index acc7baf..da6d3cd 100644 --- a/src/Webextension/JS/YouTubePlus.user.js +++ b/src/Webextension/JS/YouTubePlus.user.js @@ -1,5 +1,5 @@ // ==UserScript== -// @version 1.7.3 +// @version 1.7.4 // @name YouTube + // @namespace https://github.com/ParticleCore // @description YouTube with more freedom @@ -19,10 +19,10 @@ // ==/UserScript== (function () { "use strict"; - var particle = { + let particle = { inject: function(is_userscript) { function setLocale(content) { - var i, j, list, temp, ytplabel; + let i, j, list, temp, ytplabel; ytplabel = content.querySelectorAll("[data-p]"); i = ytplabel.length; while (i--) { @@ -120,8 +120,7 @@ return next[Object.keys(next)[0]].localeCompare(previous[Object.keys(previous)[0]]); } function getBlacklist(blist) { - var i, obj, temp, lnk, keys, list, fragment, sortAlpha; - sortAlpha = []; + let i, obj, temp, lnk, keys, list, fragment, sortAlpha; list = user_settings.blacklist; fragment = document.createDocumentFragment(); sortAlpha = []; @@ -156,7 +155,7 @@ blist.appendChild(fragment); } function getValues(menu) { - var i, ytp, list; + let i, ytp, list; if (user_settings) { list = menu.querySelector("#blacklist"); if (list) { @@ -183,7 +182,7 @@ return menu; } function getMenu(section) { - var i, temp, svg, inputs; + let i, temp, svg, inputs; temp = document.createElement("template"); if (section === "MEN") { temp.innerHTML = // @@ -338,7 +337,7 @@

-
+

\n?
@@ -349,7 +348,7 @@
-

+
`; if (user_settings.GEN_LOCL_LANG && user_settings.localLang) { temp.content.querySelector(".P-implang").dataset.p = "ttl|GLB_LOCL_LANG&tnd|GLB_LOCL_LANG_CSTM"; @@ -360,7 +359,7 @@

-
+

@@ -374,14 +373,13 @@ inputs = temp.content.querySelectorAll("input[type='checkbox'] + label"); svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); svg.innerHTML = ""; - i = inputs.length; - while (i--) { + for (i = 0; i < inputs.length; i++) { inputs[i].appendChild(svg.cloneNode(true)); } return setLocale(getValues(temp.content)); } function exportSettings(target) { - var expCont; + let expCont; if (target.classList.contains("P-impexp") || target.classList.contains("P-implang")) { expCont = document.getElementById("exp-cont"); if (expCont) { @@ -424,7 +422,7 @@ } } function delBlackList(event) { - var newKey = user_settings.blacklist; + let newKey = user_settings.blacklist; delete newKey[event.target.nextSibling.href.split("/channel/")[1]]; event.target.parentNode.outerHTML = ""; set("blacklist", newKey); @@ -433,7 +431,7 @@ document.body.classList.remove("show-guide-button-notification"); } function saveSettings(salt) { - var i, value, notification, navId, userSets, savedSets; + let i, value, notification, navId, userSets, savedSets; navId = document.querySelector(".selected").id; userSets = document.getElementById("P-content").querySelectorAll("[id^='" + navId + "']"); savedSets = user_settings; @@ -497,7 +495,7 @@ } } function settingsTemplate(event) { - var pWrapper; + let pWrapper; if (event.target.id === "P" && event.target.tagName !== "INPUT") { pWrapper = document.getElementById("P-settings"); if (pWrapper) { @@ -524,11 +522,11 @@ } } function settingsMenu() { - var notif_button, settings_button, welcome_message; + let notif_button, settings_button, welcome_message; if (settingsMenu.settingsButton) { return; } - notif_button = document.querySelector(".notifications-container"); + notif_button = document.querySelector("#yt-masthead-notifications, .notifications-container"); settings_button = document.querySelector("#yt-masthead-user, #yt-masthead-signin"); if (settings_button) { welcome_message = document.createElement("template"); @@ -542,9 +540,9 @@ @@ -566,7 +564,7 @@ } function modComment(original) { return function (a) { - var comments, is_live; + let comments, is_live; comments = document.getElementById("watch-discussion"); is_live = window.ytplayer && window.ytplayer.config && window.ytplayer.config.args && window.ytplayer.config.args.livestream; if (a.split("comments").length > 1 && !is_live && comments && !comments.lazyload && user_settings.VID_HIDE_COMS === "1" && !comments.classList.contains("show")) { @@ -591,12 +589,12 @@ } function modEmbed(original) { return function (a, b) { - var temp, player; + let temp, player; temp = a.id || a; if (temp !== "player-api" && temp !== "upsell-video") { return original.apply(this, arguments); } - b = modArgs(b); + /*b = */modArgs(b); temp = original.apply(this, arguments); player = document.getElementById("movie_player"); if (player) { @@ -614,7 +612,7 @@ } function modAutoplayFullscreen(original) { return function () { - var has_ended, next_button, next_clicked; + let has_ended, next_button, next_clicked; has_ended = api && api.getCurrentTime && Math.round(api.getCurrentTime()) >= Math.floor(api.getDuration()); next_clicked = document.activeElement.classList.contains("ytp-button-next") || document.activeElement.classList.contains("ytp-next-button"); if (!user_settings.plApl && !next_clicked && has_ended) { @@ -634,20 +632,14 @@ } }; } - function modArgsWatch(args) { - if (args && args.autoplay === "1" && !user_settings.VID_PLR_ATPL && window.location.hash === "") { - args.autoplay = "0"; - } - return modArgsWatch.original.apply(this, arguments); - } function modPlayerCreate(original) { return function (a, b) { - var i, temp, player; + let i, temp, player; temp = a.id || a; if (temp !== "player-api" && temp !== "upsell-video") { return original.apply(this, arguments); } - b = modArgs(b); + /*b = */modArgs(b); if (a.id === "upsell-video") { original.apply(this, arguments); } else if (typeof a === "object") { @@ -676,8 +668,14 @@ } }; } + function ModArgsWatch(args) { + if (args && args.autoplay === "1" && !user_settings.VID_PLR_ATPL && window.location.hash === "") { + args.autoplay = "0"; + } + return ModArgsWatch.Original.apply(this, arguments); + } function scriptExit(event) { - var i, j, key, temp; + let i, j, key, temp; if (event && event.target) { if (event.target.getAttribute("name") === "www/base") { window.yt.setConfig = modSetConfig(window.yt.setConfig); @@ -710,39 +708,40 @@ } if (event.target.getAttribute("name") === "spf/spf") { window.spf.load = modComment(window.spf.load); - window.spf.prefetch = function(){return;}; + window.spf.prefetch = function(){}; if (window.name === "popOut") { - window.spf.navigate = function(){return;}; + window.spf.navigate = function(){}; } } } - if ((event && event.target && event.target.getAttribute("name") === "player/base") || (!window.html5Patched && window.yt && window.yt.player && window.yt.player.Application && window.yt.player.Application.create)) { + if ( + (event && event.target && event.target.getAttribute("name") === "player/base") || + (!window.html5Patched && window.yt && window.yt.player && window.yt.player.Application && window.yt.player.Application.create) + ) { window.html5Patched = true; window.yt.player.Application.create = modPlayerCreate(window.yt.player.Application.create); if (window._yt_player) { temp = Object.keys(window._yt_player); - i = temp.length; - while (i--) { - if (typeof window._yt_player[temp[i]] === "function" && window._yt_player[temp[i]].toString().match("this.adaptiveFormats")) { + for (i = 0; i < temp.length; i++) { + if (typeof window._yt_player[temp[i]] === "function" && window._yt_player[temp[i]].toString().match(/this\.adaptiveFormats/)) { key = temp[i]; break; } } if (key) { - modArgsWatch.original = window._yt_player[key]; - modArgsWatch.prototype = modArgsWatch.original.prototype; - temp = Object.keys(modArgsWatch.original); - i = temp.length; - while (i--) { - modArgsWatch[temp[i]] = modArgsWatch.original[temp[i]]; + ModArgsWatch.Original = window._yt_player[key]; + ModArgsWatch.prototype = ModArgsWatch.Original.prototype; + temp = Object.keys(ModArgsWatch.Original); + for (i = 0; i < temp.length; i++) { + ModArgsWatch[temp[i]] = ModArgsWatch.Original[temp[i]]; } - window._yt_player[key] = modArgsWatch; + window._yt_player[key] = ModArgsWatch; } } } } function checkBounds(elm, X, Y) { - var snapX, snapY; + let snapX, snapY; if (X > -1 && X + elm.offsetWidth < document.documentElement.offsetWidth) { snapX = false; } else if (X < 1) { @@ -764,7 +763,7 @@ return {X: X + "px", Y: Y + "px", snapX: snapX, snapY: snapY}; } function updatePos() { - var x, y, height, player, bounds; + let x, y, height, player, bounds; player = document.getElementById("movie_player"); if (!document.documentElement.classList.contains("floater") || window.innerWidth < 657) { if (player) { @@ -798,7 +797,7 @@ document[(window.chrome && "body") || "documentElement"].scrollTop = 0; } function dragFloater(event) { - var excluded, isFScreen, isFloater, bounds, player; + let excluded, isFScreen, isFloater, bounds, player; isFScreen = document.querySelector(".ytp-fullscreen"); isFloater = document.documentElement.classList.contains("floater"); if (event && !isFScreen && isFloater) { @@ -816,7 +815,13 @@ orgX: event.clientX, orgY: event.clientY }; - } else if (event.type === "mousemove" && (dragFloater.hasMoved || Math.abs(event.clientX - dragFloater.oldPos.orgX) > 10 || Math.abs(event.clientY - dragFloater.oldPos.orgY) > 10)) { + } else if ( + event.type === "mousemove" && ( + dragFloater.hasMoved || + Math.abs(event.clientX - dragFloater.oldPos.orgX) > 10 || + Math.abs(event.clientY - dragFloater.oldPos.orgY) > 10 + ) + ) { bounds = checkBounds(player, event.clientX + dragFloater.oldPos.X, event.clientY + dragFloater.oldPos.Y); player.style.left = bounds.X; player.style.top = bounds.Y; @@ -843,7 +848,7 @@ } } function iniFloater() { - var player, plrApi, out_of_sight, isFloater, isFScreen, floaterUI, settings_open; + let player, plrApi, out_of_sight, isFloater, isFScreen, floaterUI, settings_open; player = document.getElementById("movie_player"); plrApi = document.getElementById("player-api").getBoundingClientRect(); settings_open = document.getElementById("P-settings"); @@ -887,9 +892,16 @@ } } function alwaysActive(event) { - var i, list, clear, length, eventClone; + let i, list, clear, length, eventClone; clear = window.location.pathname == "/watch" && api && api !== event.target && !api.contains(event.target) && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey && !event.target.isContentEditable; - if (clear && ((event.which > 47 && event.which < 58) || (event.which > 95 && event.which < 106) || [27, 32, 35, 36, 37, 38, 39, 40, 66, 67, 79, 87, 187, 189].indexOf(event.which) > -1) && ["EMBED", "INPUT", "OBJECT", "TEXTAREA", "IFRAME"].indexOf(document.activeElement.tagName) < 0) { + if ( + clear && ( + event.which > 47 && event.which < 58 || + event.which > 95 && event.which < 106 || + [27, 32, 35, 36, 37, 38, 39, 40, 66, 67, 79, 87, 187, 189].indexOf(event.which) > -1 + ) && + ["EMBED", "INPUT", "OBJECT", "TEXTAREA", "IFRAME"].indexOf(document.activeElement.tagName) < 0 + ) { eventClone = new Event("keydown"); list = Object.keys(Object.getPrototypeOf(event)); length = list.length; @@ -935,7 +947,7 @@ } } function getThumb() { - var args, base, thumb_url; + let args, base, thumb_url; args = window.ytplayer.config.args; base = (args.iurl_webp && "_webp") || ""; thumb_url = args["iurlmaxres" + base] || args["iurlsd" + base] || args["iurl" + base]; @@ -948,7 +960,7 @@ } } function getScreenshot() { - var width, height, aspectRatio, video, container, canvas, close, context; + let width, height, aspectRatio, video, container, canvas, close, context; video = document.querySelector("video"); container = document.getElementById("screenshot-result") || document.createElement("div"); canvas = container.querySelector("canvas") || document.createElement("canvas"); @@ -971,7 +983,15 @@ } } function exitFullBrowser(key) { - if (document.documentElement.classList.contains("part_fullbrowser") && (key.keyCode === 27 || key.key === "Escape" || (key.target.className && key.target.className.split("ytp-size").length > 1))) { + if ( + document.documentElement.classList.contains("part_fullbrowser") && ( + key.keyCode === 27 || + key.key === "Escape" || ( + key.target.className && + key.target.className.split("ytp-size").length > 1 + ) + ) + ) { toggleFullBrowser(key); if (key.type === "mousedown") { document.removeEventListener("keydown", exitFullBrowser); @@ -981,7 +1001,7 @@ } } function toggleFullBrowser(event) { - var plrState = api && api.getPlayerState && api.getPlayerState(); + let plrState = api && api.getPlayerState && api.getPlayerState(); plrState = plrState < 5 && plrState > 0; document[(window.chrome && "body") || "documentElement"].scrollTop = 0; document.addEventListener("keydown", exitFullBrowser); @@ -993,6 +1013,45 @@ window.dispatchEvent(new Event("resize")); } } + function toggleFrames(event) { + let i, pi, fps, temp; + advancedOptions.frame_step = document.getElementById("framestep-button"); + if (event && ["EMBED", "INPUT", "OBJECT", "TEXTAREA"].indexOf(document.activeElement.tagName) < 0 && event.target.tagName !== "IFRAME" && !event.target.getAttribute("contenteditable")) { + if ((event.keyCode === 37 || event.keyCode === 39) && event.shiftKey) { + pi = api.getVideoStats().fmt; + if (window.ytplayer && window.ytplayer.config && window.ytplayer.config.args && window.ytplayer.config.args.adaptive_fmts) { + temp = window.ytplayer.config.args.adaptive_fmts.split(","); + i = temp.length; + while (i--) { + if (temp[i].indexOf("itag=" + pi) > 0) { + advancedOptions.fps = parseInt(temp[i].match(/fps=([\d]+)/)[1]); + break; + } + } + } + if (!advancedOptions.fps || advancedOptions.fps === 1) { + advancedOptions.fps = 30; + } + fps = ((event.keyCode < 39 && -1) || 1) * ((advancedOptions.fps < 2 && 30) || advancedOptions.fps); + if (fps && api) { + if (!document.querySelector("video").paused) { + api.pauseVideo(); + } + api.seekBy(1 / fps); + } + event.preventDefault(); + event.stopImmediatePropagation(); + } else if (event.type === "click" && event.target.id === "framestep-button") { + set("frame_step", !user_settings.frame_step); + advancedOptions.frame_step.classList[(user_settings.frame_step && "add") || "remove"]("active"); + } + } + if (advancedOptions.frame_step && advancedOptions.frame_step.classList.contains("active")) { + document.addEventListener("keydown", toggleFrames, true); + } else if (!advancedOptions.frame_step || !advancedOptions.frame_step.classList.contains("active")) { + document.removeEventListener("keydown", toggleFrames, true); + } + } function toggleShortcuts() { window.open("https://github.com/ParticleCore/Particle/wiki/YouTube-shortcuts", "_blank"); } @@ -1009,7 +1068,7 @@ document.getElementById("autoplay-button").classList[(user_settings.VID_PLR_ATPL && "add") || "remove"]("active"); } function toggleLoop(event) { - var videoPlayer = document.querySelector("video"); + let videoPlayer = document.querySelector("video"); if (videoPlayer) { videoPlayer.loop = event ? !user_settings.loopVid : user_settings.loopVid; if (event) { @@ -1019,7 +1078,7 @@ set("loopVid", advancedOptions.loop_button.classList.contains("active")); } function toggleCinemaMode(event) { - var plrState = api && api.getPlayerState && api.getPlayerState() < 5 && api.getPlayerState() > 0; + let plrState = api && api.getPlayerState && api.getPlayerState() < 5 && api.getPlayerState() > 0; set("lightsOut", event ? !user_settings.lightsOut : true); advancedOptions.cinema_mode.classList[(user_settings.lightsOut && "add") || "remove"]("active"); if (event && plrState) { @@ -1036,6 +1095,7 @@ advancedOptions.full_browser = advancedOptions.controls.querySelector("#fullbrowser-button"); advancedOptions.cinema_mode = advancedOptions.controls.querySelector("#cinemamode-button"); advancedOptions.loop_button = advancedOptions.controls.querySelector("#loop-button"); + advancedOptions.frame_step = advancedOptions.controls.querySelector("#framestep-button"); advancedOptions.actions = { togglePlay: togglePlay, toggleLoop: toggleLoop, @@ -1044,6 +1104,7 @@ popPlayer: popPlayer, toggleFullBrowser: toggleFullBrowser, toggleCinemaMode: toggleCinemaMode, + toggleFrames: toggleFrames, toggleShortcuts: toggleShortcuts }; document.addEventListener("click", handleToggles); @@ -1059,9 +1120,13 @@ advancedOptions.cinema_mode.classList.add("active"); toggleCinemaMode(); } + if (user_settings.frame_step && !advancedOptions.frame_step.classList.contains("active")) { + advancedOptions.frame_step.classList.add("active"); + toggleFrames(); + } } function advancedOptions() { - var header, cnslBtn, cnslCont; + let header, cnslBtn, cnslCont; header = document.getElementById("watch-header"); cnslBtn = document.getElementById("console-button"); advancedOptions.controls = document.getElementById("player-console"); @@ -1098,6 +1163,7 @@
+
`; if (user_settings.VID_PLR_ATPL) { @@ -1113,7 +1179,7 @@ } } function iniAction(event) { - var observer, load_more, click_title; + let observer, load_more, click_title; load_more = document.querySelector("#watch-more-related, .load-more-button"); click_title = document.querySelector(".yt-uix-tile"); while (click_title) { @@ -1142,7 +1208,7 @@ } } function setButtons() { - var i, j, list, temp, thumb, button; + let i, j, list, temp, thumb, button; list = Object.keys(modThumbs.thumbs); i = list.length; while (i--) { @@ -1180,7 +1246,7 @@ } } function delVideos() { - var i, j, temp, parent, blacklist, has_upnext; + let i, j, temp, parent, blacklist, has_upnext; has_upnext = document.querySelector(".autoplay-bar"); blacklist = Object.keys(user_settings.blacklist); i = blacklist.length; @@ -1233,7 +1299,7 @@ } } function getVideos() { - var i, list, temp, channel_id; + let i, list, temp, channel_id; modThumbs.thumbs = {}; list = document.querySelectorAll(` .yt-lockup-byline > a, @@ -1271,7 +1337,7 @@ } } function setVideoCount() { - var span = document.createElement("span"); + let span = document.createElement("span"); span.textContent = " · "; enhancedDetails.username.appendChild(span); enhancedDetails.link.href = window.location.origin + "/channel/" + enhancedDetails.user.dataset.ytid + "/videos"; @@ -1301,7 +1367,7 @@ } } function getChannelInfo(details) { - var retry, isLive; + let retry, isLive; isLive = details.target.response.querySelector(".yt-badge-live"); if (!isLive) { retry = details.target.responseURL.split("/videos").length < 2; @@ -1331,7 +1397,7 @@ } } function reverseControl() { - var i, temp, prev, next, list, videos; + let i, temp, prev, next, list, videos; prev = document.querySelector(".prev-playlist-list-item"); next = document.querySelector(".next-playlist-list-item"); list = document.getElementById("playlist-autoscroll-list"); @@ -1362,7 +1428,7 @@ } } function createButton(type, label, bool, call) { - var button = document.createElement("template"); + let button = document.createElement("template"); button.innerHTML = // ` @@ -2023,12 +2115,11 @@ document.documentElement.appendChild(temp.content.firstChild); document.addEventListener("click", closeMigrationInstructions); } - var api, cid, events, language, user_settings, player_instance, default_settings; + let api, cid, language, user_settings, player_instance, default_settings; if (isMaterial()) { return; } cid = {}; - events = {}; user_settings = JSON.parse(document.documentElement.dataset.user_settings || null); if (document.documentElement.dataset.user_settings) { document.documentElement.removeAttribute("data-user_settings"); @@ -2077,6 +2168,7 @@ CNSL_PPOT : "Pop-out video", CNSL_FLBR : "Fullbrowser mode", CNSL_CINM_MD : "Cinema mode", + CNSL_FRME : "Frame by frame (Shift + ← or →)", CNSL_YTSC : "YouTube shortcuts list", PLST_AP : "Autoplay", PLST_RVRS : "Reverse", @@ -2217,7 +2309,7 @@ main(); }, contentScriptMessages: function() { - var key1, key2, gate, sets, locs, observer; + let key1, key2, gate, sets, locs, observer; key1 = "parsend"; key2 = "getlocale"; gate = document.documentElement; @@ -2250,7 +2342,7 @@ } }, main: function(event) { - var holder; + let holder; if (!event && particle.is_userscript) { event = JSON.parse(particle.GM_getValue(particle.id, "{}")); } @@ -2261,7 +2353,7 @@ holder = document.createElement("link"); holder.rel = "stylesheet"; holder.type = "text/css"; - holder.href = "https://particlecore.github.io/Particle/stylesheets/YouTubePlus.css?v=1.7.3"; + holder.href = "https://particlecore.github.io/Particle/stylesheets/YouTubePlus.css?v=1.7.4"; document.documentElement.appendChild(holder); } holder = document.createElement("script"); @@ -2274,7 +2366,7 @@ }, ini: function() { particle.id = "particleSettings"; - particle.is_userscript = typeof GM_info === "object" ? true : false; + particle.is_userscript = typeof GM_info === "object"; if (particle.is_userscript) { particle.GM_getValue = GM_getValue; particle.GM_setValue = GM_setValue; diff --git a/src/Webextension/manifest.json b/src/Webextension/manifest.json index 2e986bf..27fa477 100644 --- a/src/Webextension/manifest.json +++ b/src/Webextension/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 2, "name": "YouTube Plus", - "version": "1.7.3", + "version": "1.7.4", "description": "YouTube with more freedom", "default_locale": "en", "icons": {