Skip to content

Commit 681017a

Browse files
committed
Moved function, deleted more YTD code ↞ [auto-sync from https://github.com/adamlui/youtube-classic]
1 parent 6aef5ad commit 681017a

1 file changed

Lines changed: 16 additions & 54 deletions

File tree

youtube-classic/youtube-classic.user.js

Lines changed: 16 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// ==UserScript==
22
// @name YouTube™ Classic 📺 — (Remove rounded design + Return YouTube dislikes)
3-
// @version 2026.1.20.8
3+
// @version 2026.1.20.9
44
// @author Adam Lui, Magma_Craft, Anarios, JRWR, Fuim & hoothin
55
// @namespace https://github.com/adamlui
66
// @description Reverts YouTube to its classic design (before all the rounded corners & hidden dislikes) + redirects YouTube Shorts
@@ -290,6 +290,19 @@
290290
function extractSelectors(obj) {
291291
return Object.values(obj).flatMap(val => typeof val == 'object' ? extractSelectors(val) : val) }
292292

293+
function getLoadedElem(selector, timeout = null) {
294+
const timeoutPromise = timeout ? new Promise(resolve => setTimeout(() => resolve(null), timeout)) : null
295+
const isLoadedPromise = new Promise(resolve => {
296+
const elem = document.querySelector(selector)
297+
if (elem) resolve(elem)
298+
else new MutationObserver((_, obs) => {
299+
const elem = document.querySelector(selector)
300+
if (elem) { obs.disconnect() ; resolve(elem) }
301+
}).observe(document.documentElement, { childList: true, subtree: true })
302+
})
303+
return ( timeoutPromise ? Promise.race([isLoadedPromise, timeoutPromise]) : isLoadedPromise )
304+
}
305+
293306
const toolbarMenu = {
294307
state: {
295308
symbols: ['❌', '✔️'], separator: env.scriptManager.name == 'Tampermonkey' ? ' — ' : ': ',
@@ -438,20 +451,8 @@
438451
YTP.setExpMulti(EXPFLAGS)
439452
YTP.setPlyrFlags(PLYRFLAGS)
440453

441-
function $(q) { return document.querySelector(q) }
442-
443-
function getLoadedElem(selector, timeout = null) {
444-
const timeoutPromise = timeout ? new Promise(resolve => setTimeout(() => resolve(null), timeout)) : null
445-
const isLoadedPromise = new Promise(resolve => {
446-
const elem = document.querySelector(selector)
447-
if (elem) resolve(elem)
448-
else new MutationObserver((_, obs) => {
449-
const elem = document.querySelector(selector)
450-
if (elem) { obs.disconnect() ; resolve(elem) }
451-
}).observe(document.documentElement, { childList: true, subtree: true })
452-
})
453-
return ( timeoutPromise ? Promise.race([isLoadedPromise, timeoutPromise]) : isLoadedPromise )
454-
}
454+
getLoadedElem('#items.ytd-guide-section-renderer').then(restoreTrending)
455+
getLoadedElem('#items.ytd-mini-guide-section-renderer').then(restoreTrending)
455456

456457
function restoreTrending() {
457458
const trendingData = {
@@ -477,45 +478,6 @@
477478
document.querySelector('#items > ytd-mini-guide-entry-renderer:nth-child(2)').data = trendingData
478479
}
479480

480-
getLoadedElem('#items.ytd-guide-section-renderer').then(() => { restoreTrending() })
481-
getLoadedElem('#items.ytd-mini-guide-section-renderer').then(() => { restoreTrending() })
482-
483-
// Fix YouTube dislikes
484-
addEventListener('yt-page-data-updated', function() {
485-
if(!location.pathname.startsWith('/watch')) return
486-
const lds = $('ytd-video-primary-info-renderer div#top-level-buttons-computed'),
487-
like = $('ytd-video-primary-info-renderer div#segmented-like-button > ytd-toggle-button-renderer'),
488-
share = $('ytd-video-primary-info-renderer div#top-level-buttons-computed > ytd-segmented-like-dislike-button-renderer + ytd-button-renderer')
489-
lds.insertBefore(like, share)
490-
like.setAttribute('class', like.getAttribute('class').replace('ytd-segmented-like-dislike-button-renderer', 'ytd-menu-renderer force-icon-button'))
491-
like.removeAttribute('is-paper-button-with-icon')
492-
like.removeAttribute('is-paper-button')
493-
like.setAttribute('style-action-button', '')
494-
like.setAttribute('is-icon-button', '')
495-
like.querySelector('a').insertBefore(like.querySelector('yt-formatted-string'), like.querySelector('tp-yt-paper-tooltip'))
496-
like?.querySelector('paper-ripple')?.remove()
497-
let paper = like.querySelector('tp-yt-paper-button')
498-
paper.removeAttribute('style-target')
499-
paper.removeAttribute('animated')
500-
paper.removeAttribute('elevation')
501-
like.querySelector('a').insertBefore(paper.querySelector('yt-icon'), like.querySelector('yt-formatted-string'))
502-
paper.outerHTML = paper.outerHTML.replace('<tp-yt-paper-button ', '<yt-icon-button ').replace('</tp-yt-paper-button>', '</yt-icon-button>')
503-
paper = like.querySelector('yt-icon-button')
504-
paper.querySelector('button#button').append(like.querySelector('yt-icon'))
505-
const dislike = $('ytd-video-primary-info-renderer div#segmented-dislike-button > ytd-toggle-button-renderer')
506-
lds.insertBefore(dislike, share)
507-
$('ytd-video-primary-info-renderer ytd-segmented-like-dislike-button-renderer').remove()
508-
dislike.setAttribute('class', dislike.getAttribute('class').replace('ytd-segmented-like-dislike-button-renderer', 'ytd-menu-renderer force-icon-button'))
509-
dislike.removeAttribute('has-no-text')
510-
dislike.setAttribute('style-action-button', '')
511-
const dlabel = document.createElement('yt-formatted-stringx')
512-
dlabel.setAttribute('id', 'text')
513-
if (dislike.getAttribute('class').includes('style-default-active')) {
514-
dlabel.setAttribute('class', dlabel.getAttribute('class').replace('style-default', 'style-default-active')) }
515-
dislike.querySelector('a').insertBefore(dlabel, dislike.querySelector('tp-yt-paper-tooltip'))
516-
$('ytd-video-primary-info-renderer').removeAttribute('flex-menu-enabled')
517-
})
518-
519481
// Restore classic comments UI
520482
let hl
521483
const cfconfig = { unicodeEmojis: false }

0 commit comments

Comments
 (0)