您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Toggle YouTube heart comments.
- // ==UserScript==
- // @name Toggle YouTube Heart Comments
- // @namespace https://github.com/gslin/toggle-youtube-heart-comments-userscript
- // @match https://www.youtube.com/*
- // @grant none
- // @version 0.20210611.0
- // @author Gea-Suan Lin <gslin@gslin.com>
- // @description Toggle YouTube heart comments.
- // @license MIT
- // ==/UserScript==
- (() => {
- 'use strict;'
- let ob = new window.MutationObserver(mutations => {
- mutations.forEach(mutation => {
- mutation.addedNodes.forEach(() => {
- // Only filter pages whose path are "/watch".
- if (document.location.pathname !== '/watch') {
- return;
- }
- let sheet = document.querySelector('.has-creator-heart-style');
- if (!sheet) {
- sheet = document.createElement('style');
- sheet.classList.add('has-creator-heart-style');
- document.getElementsByTagName('head')[0].appendChild(sheet);
- }
- // Wait for ytd-comments element ready.
- let comments_el = document.querySelector('ytd-comments');
- if (!comments_el) {
- return;
- }
- // Simulate "ytd-comment-thread-renderer:has(ytd-creator-heart-renderer)" selector.
- let comments_heart = document.querySelectorAll('ytd-comment-thread-renderer');
- comments_heart.forEach(el => {
- if (el.querySelector('ytd-creator-heart-renderer')) {
- el.classList.add('has-creator-heart');
- }
- });
- // Don't install twice.
- if (document.getElementById('toggle_youtube_heart_comments')) {
- return;
- }
- let toggle_el = document.createElement('div');
- toggle_el.innerHTML = '<button data-status="0" id="toggle_youtube_heart_comments">All (All / Heart / Non-Heart)</button>';
- let button_el = toggle_el.querySelector('button');
- button_el.addEventListener('click', () => {
- if (button_el.dataset.status === '0') {
- button_el.dataset.status = '1';
- button_el.innerHTML = 'Heart (All / Heart / Non-Heart)';
- sheet.innerHTML = 'ytd-comment-thread-renderer:not(.has-creator-heart) { display: none; }'
- } else if (button_el.dataset.status === '1') {
- button_el.dataset.status = '2';
- button_el.innerHTML = 'Non-Heart (All / Heart / Non-Heart)';
- sheet.innerHTML = 'ytd-comment-thread-renderer.has-creator-heart { display: none; }'
- } else {
- button_el.dataset.status = '0';
- button_el.innerHTML = 'All (All / Heart / Non-Heart)';
- sheet.innerHTML = '';
- }
- });
- comments_el.insertAdjacentElement('beforebegin', toggle_el);
- console.debug('Toggle YouTube Heart Comments installed.');
- });
- });
- });
- ob.observe(document, {
- childList: true,
- subtree: true,
- });
- })();