From 9fe4d5e3e28c199cba10c249a6575837c72eced8 Mon Sep 17 00:00:00 2001 From: ktg5 <42522603+ktg5@users.noreply.github.com> Date: Mon, 8 Jan 2024 20:26:50 -0800 Subject: [PATCH] Better resizing This took longer for me to get out, but I've been testing it for a while to make sure it works even know I'm not uploading this version yet to webstores. --- css/2006.css | 11 +++++ css/2010.css | 25 +++++++---- css/2012.css | 23 ++++++++-- css/2015.css | 23 ++++++++-- css/3rd-party-style.css | 4 +- html/base.css | 4 ++ html/update.html | 33 +++++++++++++-- img/customtube-settings.png | Bin 17404 -> 37652 bytes manifest.json | 18 ++++++-- src/main.js | 39 ++++++++++------- src/resize.js | 81 ++++++++++++++++++++++++++++++++++++ 11 files changed, 221 insertions(+), 40 deletions(-) create mode 100644 src/resize.js diff --git a/css/2006.css b/css/2006.css index ca89fd8..29a6f37 100644 --- a/css/2006.css +++ b/css/2006.css @@ -20,6 +20,8 @@ left: 0 !important; } +/* PROGRESS BAR */ + .ytp-chrome-bottom .ytp-progress-bar-container { bottom: 31px !important; } @@ -28,6 +30,7 @@ bottom: 33px !important; } +/* Make sure YouTube doesn't fuck with these */ .ytp-chapter-hover-container.ytp-exp-chapter-hover-container { transform: scale(1) !important; } @@ -36,6 +39,14 @@ transform: scaleY(1) !important; } +.ytp-chapter-hover-container.ytp-exp-chapter-hover-effect { + transform: scaleY(1) !important; +} + +.ytp-chapter-hover-container.ytp-exp-chapter-hover-effect:hover { + transform: scaleY(1) !important; +} + .ytp-progress-bar { transition: .5s; margin-bottom: 1px !important; diff --git a/css/2010.css b/css/2010.css index 23f1a55..b3fe4d8 100644 --- a/css/2010.css +++ b/css/2010.css @@ -57,7 +57,9 @@ margin-bottom: 1px !important; } -.ytp-chrome-bottom .ytp-progress-bar:after { +/* this is only used in embeds & fullscreen */ +.ytp-embed .ytp-chrome-bottom .ytp-progress-bar:after, +.ytp-big-mode .ytp-chrome-bottom .ytp-progress-bar:after { content: ''; display: block; position: absolute; @@ -69,18 +71,18 @@ transform: scaleY(.6); } +.ytp-big-mode .ytp-chrome-bottom .ytp-progress-bar:after { + width: 48px; +} + .ytp-chrome-bottom .ytp-progress-bar.finished:after { - background: var(--pt-main-colour); + background: var(--pt-main-colour) !important; } .ytp-chrome-bottom .ytp-progress-bar:hover:after { transform: scaleY(1); } -.ytp-big-mode .ytp-chrome-bottom .ytp-progress-bar:after { - width: 48px -} - .ytp-chrome-bottom .ytp-progress-bar .ytp-load-progress { background: var(--pt-alt-colour) } @@ -89,8 +91,17 @@ background: var(--pt-main-colour); } +/* Make sure YouTube doesn't fuck with these */ .ytp-chapter-hover-container.ytp-exp-chapter-hover-container { - transform: scaleY(1) !important; + transform: scale(1) !important; +} + +.ytp-progress-bar-container:hover:not([aria-disabled=true]) .ytp-exp-chapter-hover-effect { + transform: scaleY(1) !important; +} + +.ytp-chapter-hover-container.ytp-exp-chapter-hover-effect { + transform: scaleY(1) !important; } .ytp-chapter-hover-container.ytp-exp-chapter-hover-effect:hover { diff --git a/css/2012.css b/css/2012.css index 4c0e5bc..f7c378e 100644 --- a/css/2012.css +++ b/css/2012.css @@ -38,6 +38,7 @@ bottom: 33px !important; } +/* Make sure YouTube doesn't fuck with these */ .ytp-chapter-hover-container.ytp-exp-chapter-hover-container { transform: scale(1) !important; } @@ -46,12 +47,22 @@ transform: scaleY(1) !important; } -.ytp-chrome-bottom .ytp-progress-bar:after { +.ytp-chapter-hover-container.ytp-exp-chapter-hover-effect { + transform: scaleY(1) !important; +} + +.ytp-chapter-hover-container.ytp-exp-chapter-hover-effect:hover { + transform: scaleY(1) !important; +} + +/* this is only used in embeds & fullscreen */ +.ytp-embed .ytp-chrome-bottom .ytp-progress-bar:after, +.ytp-big-mode .ytp-chrome-bottom .ytp-progress-bar:after { content: ''; display: block; position: absolute; - width: 7em; - height: 100%; + width: 24px; + height: 10px; background: var(--pt-progress-bar-bg); margin-top: -10px; right: 0; @@ -59,8 +70,12 @@ transform: scaleY(.6); } +.ytp-big-mode .ytp-chrome-bottom .ytp-progress-bar:after { + width: 48px; +} + .ytp-chrome-bottom .ytp-progress-bar.finished:after { - background: var(--pt-main-colour); + background: var(--pt-main-colour) !important; } .ytp-chrome-bottom .ytp-progress-bar .ytp-load-progress { diff --git a/css/2015.css b/css/2015.css index 2a3ae34..417da8d 100644 --- a/css/2015.css +++ b/css/2015.css @@ -33,6 +33,7 @@ bottom: 34px !important; } +/* Make sure YouTube doesn't fuck with these */ .ytp-chapter-hover-container.ytp-exp-chapter-hover-container { transform: scale(1) !important; } @@ -41,12 +42,22 @@ transform: scaleY(1) !important; } -.ytp-chrome-bottom .ytp-progress-bar:after { +.ytp-chapter-hover-container.ytp-exp-chapter-hover-effect { + transform: scaleY(1) !important; +} + +.ytp-chapter-hover-container.ytp-exp-chapter-hover-effect:hover { + transform: scaleY(1) !important; +} + +/* this is only used in embeds & fullscreen */ +.ytp-embed .ytp-chrome-bottom .ytp-progress-bar:after, +.ytp-big-mode .ytp-chrome-bottom .ytp-progress-bar:after { content: ''; display: block; position: absolute; - width: 7em; - height: 100%; + width: 24px; + height: 10px; background: var(--pt-progress-bar-bg); margin-top: -10px; right: 0; @@ -54,8 +65,12 @@ transform: scaleY(.6); } +.ytp-big-mode .ytp-chrome-bottom .ytp-progress-bar:after { + width: 48px; +} + .ytp-chrome-bottom .ytp-progress-bar.finished:after { - background: var(--pt-main-colour); + background: var(--pt-main-colour) !important; } .ytp-chrome-bottom .ytp-progress-bar .ytp-load-progress { diff --git a/css/3rd-party-style.css b/css/3rd-party-style.css index 333f41c..36b4647 100644 --- a/css/3rd-party-style.css +++ b/css/3rd-party-style.css @@ -68,6 +68,6 @@ html[pseudo-static] #movie_player[aria-label="YouTube Video Player"] .ytp-chrome } /* Truffle */ -body[data-mogul-theater-mode] .html5-video-player .ytp-chrome-bottom { +body[data-mogul-theater-mode] ytd-watch-flexy[theater]:has(ytd-live-chat-frame:not([collapsed])) .ytd-player .ytp-chrome-bottom { width: 100% !important; -} \ No newline at end of file +} \ No newline at end of file diff --git a/html/base.css b/html/base.css index a1fab86..6eeb9ce 100644 --- a/html/base.css +++ b/html/base.css @@ -19,6 +19,10 @@ body { margin: 0; } +.important { + color: #ffc76f; +} + /* Content */ #content { background: #202020; diff --git a/html/update.html b/html/update.html index 2bfd23e..2db1d01 100644 --- a/html/update.html +++ b/html/update.html @@ -17,10 +17,31 @@
-
+
+

⚠ Yet again another notice for CustomTube users! ⚠

+ Long-time users may remember a message similar to this, but there's different settings to change now! +
+ With the introduction of PlayerTube v1.6, there are new settings users need to change if they use CustomTube. +
+ If you use CustomTube, please open up it's settings and make sure to set the current settings that are listed below! + +
+ As seen in the screenshot, please go to the "Watch Page" tab in CustomTube's settings, uncheck "Use Custom Player Size" + in the "Video Player Size" selection. +
+ And just to be sure you're 100% good, use the "Use current player" option under the "Video Player Style". +
+
+ The reason these settings should be changed is due to PlayerTube's new scripts for the YouTube Progress Bar, + which allow the Progress Bar to fully extend out with the current video size. +
+
+ That's all for now, release notes are below! +
+

PlayerTube has been updated to

-
  • Added #11 - "Old Loading Spinner"
  • -
  • Added #10 - "Add Embed Play Button"
  • +
  • Addition to the long-time issue of the Progress Bar not fully extending. While not fully fixed, it's better
  • +
  • Also finally fixed the long-time issue of PlayerTube's scripts running multiple times.

  • @@ -37,6 +58,12 @@

    PlayerTube has been updated to


    Past versions...

    + +
    v1.5.1
    somewhat a big minor update lol diff --git a/img/customtube-settings.png b/img/customtube-settings.png index 8b12d96c29058a827206c97447bb7bd71646dea5..8d041768d9dd740963fd13c1b64d8ca21fff263f 100644 GIT binary patch literal 37652 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%0Au#KF`3I7}v|gi#ne+ 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 R;5T-Fw9n~j=Bir+{x9hAhkF13 diff --git a/manifest.json b/manifest.json index cde1023..6a64a83 100644 --- a/manifest.json +++ b/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 3, "name": "PlayerTube", "description": "The secret ingredient for a older (and better) looking YouTube.", - "version": "1.5.2.2", + "version": "1.6", "homepage_url": "https://github.com/ktg5/PlayerTube", "background": { @@ -23,13 +23,23 @@ "content_scripts": [ { - "matches": ["*://*.youtube.com/*", "*://*.youtube.com/embed/*"], + "matches": ["*://*.youtube.com/*"], + "js": ["src/setup.js"], + "run_at": "document_start" + }, + { + "matches": ["*://*.youtube.com/*"], + "js": ["src/main.js"] + }, + + { + "matches": ["*://*.youtube.com/embed/*"], "js": ["src/setup.js"], "run_at": "document_start", "all_frames": true }, { - "matches": ["*://*.youtube.com/*", "*://*.youtube.com/embed/*"], + "matches": ["*://*.youtube.com/embed/*"], "js": ["src/main.js"], "all_frames": true } @@ -37,7 +47,7 @@ "web_accessible_resources": [{ "matches": ["*://*.youtube.com/*"], - "resources": ["css/*"] + "resources": ["css/*", "src/*"] }], "permissions": [ diff --git a/src/main.js b/src/main.js index d233888..80ae7b1 100644 --- a/src/main.js +++ b/src/main.js @@ -4,6 +4,9 @@ var currentPath = window.location.href; var progressbar = document.getElementsByClassName('ytp-progress-bar')[0]; var customTheme = userConfig.customTheme; +// Put config in a element for certain scripts +document.body.insertAdjacentHTML('afterbegin', ``); + // ################################# // LOADING / SPINNER / BUFFER thingy whatever @@ -22,7 +25,6 @@ var tempinterval = setInterval(() => { // MOVING ELEMENTS function moveElement(element, targetDiv, pasteDiv) { - console.log(`%cPlayerTube moveElement function: ${targetDiv.contains(element)}`, styles2) if (pasteDiv.contains(element)) { return; } else if (targetDiv.contains(element)) { @@ -34,22 +36,19 @@ function moveElement(element, targetDiv, pasteDiv) { }; // Heartbeats -/// Make sure script reruns on page update. -/// And make check progress bar value in case to change it. setInterval(() => { - // Check window href - if (window.location.href == currentPath) { - return; - } else { + /// Make sure script reruns on page update. + if (window.location.href !== currentPath) { startPlayer(); progressBarChanger(); currentPath = window.location.href; } -}, 1000); -/// Fake bar heartbeat -if (userConfig.toggleFadeOut !== true || userConfig.fakeBarToggle !== false) { - setInterval(() => { - if (!document.getElementsByClassName('video-stream html5-main-video')[0] || document.getElementsByClassName('video-stream html5-main-video')[0].paused == true) { + + /// Fake bar heartbeat + if (userConfig.toggleFadeOut !== true || userConfig.fakeBarToggle !== false) { + if (!document.getElementsByClassName('video-stream html5-main-video')[0] + || document.getElementsByClassName('video-stream html5-main-video')[0].paused == true + || !document.getElementById('playertube-fake-bar')) { return; } else { // Video to pull info off of @@ -67,11 +66,10 @@ if (userConfig.toggleFadeOut !== true || userConfig.fakeBarToggle !== false) { document.getElementById('playertube-fake-bar').style.setProperty('--pt-fakebar-current', `${(ytVideoCurrent / ytVideoFull * 100).toFixed(2)}%`) document.getElementById('playertube-fake-bar').style.setProperty('--pt-fakebar-loaded', `${(ytBuffered / ytVideoFull * 100).toFixed(2)}%`) } - }, 1000); -} + } +}, 1000); -// This is used to make the progress look like -// it goes all the way. +// This is now used in embeds function progressBarChanger() { setInterval(() => { // Check progress bar @@ -96,6 +94,15 @@ function progressBarChanger() { startPlayer(); progressBarChanger(); +// Insert resizing progress bar script +setTimeout(() => { + var srcDoc = document.createElement('script'); + srcDoc.id = 'playertube-js'; + srcDoc.className = 'playertube-resize-bar'; + srcDoc.src = runtime.getURL(`src/resize.js`); + document.body.append(srcDoc); +}, 3000); + // You might be asking, "why is this a thing?" // You'd only understand if you were dealing // CSS. diff --git a/src/resize.js b/src/resize.js new file mode 100644 index 0000000..17569e9 --- /dev/null +++ b/src/resize.js @@ -0,0 +1,81 @@ +// Global vars +var currentPath = window.location.href; +var barWidth; +var videoContainer = document.getElementById('movie_player'); +var userConfig = JSON.parse(document.getElementById('playertube-config').innerHTML); +var ytVideo = document.getElementsByClassName('video-stream html5-main-video')[0]; + +// Heartbeat +var checkBar = setInterval(() => { + // Actual check + if (videoContainer && ytVideo.src.includes('blob')) { + var completeWidth = 0; + document.querySelectorAll(`.ytp-chapter-hover-container`).forEach(element => { + completeWidth = completeWidth + element.clientWidth; + }); + if (completeWidth !== videoContainer.clientWidth) { + fixBar(); + barWidth = getBarWidth(); + } + } + + // Location check + if (window.location.href !== currentPath) { + setTimeout(() => { + fixBar(); + barWidth = getBarWidth(); + currentPath = window.location.href; + }, 2000); + } +}, 500); + +// Easy call to progress bar width +function getBarWidth() { + return videoContainer.clientWidth; +} + +// Get offset for user's theme +function getOffset() { + switch (userConfig.year) { + case 2015: + case 2012: + case 2010: + result = 24 + break; + + default: + result = 24; + break; + } + + return result; +} + +// Fix progress bar +function fixBar() { + // Define stuff + var playerWidth = parseInt(getBarWidth()); + var playerOffset = getOffset(); + + // Set width that needs to be set + width = playerWidth + playerOffset; + height = videoContainer.clientHeight; + + // Use YouTube function to change width + videoContainer.setInternalSize(width, height); + console.log(`%cPlayerTube resize script: Successfully changed player size!`, styles2, {"width": width, "height": height}) +} + +// Initial +fixBar(); + + +// Console cool stuff +var styles2 = [ + 'background: linear-gradient(#0629d3, #022c57)' + , 'border: 5px solid rgb(255 255 255 / 10%)' + , 'color: white' + , 'display: block' + , 'text-shadow: 0 1px 0 rgba(0, 0, 0, 0.3)' + , 'box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4) inset, 0 5px 3px -5px rgba(0, 0, 0, 0.5), 0 -13px 5px -10px rgba(255, 255, 255, 0.4) inset' +].join(';'); \ No newline at end of file