- // ==UserScript==
- // @name YouTube Comments Toggle Button
- // @namespace https://example.com/youtube-comments-toggle
- // @version 1.5
- // @description Add a toggle button for YouTube comments with a comments icon.
- // @match *://*.youtube.com/*
- // @match *://m.youtube.com/*
- // @license MIT
- // @grant none
- // ==/UserScript==
-
- (function() {
- 'use strict';
-
- const commentsSelector = 'ytm-single-column-watch-next-results-renderer .single-column-watch-next-modern-panels ytm-comments-entry-point-header-renderer.modern-styling';
- var trytohide = true;
- function toggleComments() {
- const comments = document.querySelector(commentsSelector);
- if (comments) {
- const isHidden = comments.style.display === 'none';
- comments.style.display = isHidden ? '' : 'none';
- console.log(`Comments are now ${isHidden ? 'visible' : 'hidden'}.`);
- if (isHidden) {
- document.querySelector('#toggleButton1').style.backgroundColor = '#f2f1f0';
- document.querySelector('#toggleButton1').style.color = 'black';
- } else {
- document.querySelector('#toggleButton1').style.backgroundColor = 'black';
- document.querySelector('#toggleButton1').style.color = '#f2f1f0';
- }
- }
- }
-
- const htmlPolicy = window.trustedTypes?.createPolicy('default', {
- createHTML: (html) => html,
- });
-
- function addButtonToInterface() {
- if (document.querySelector('#comments-toggle-button')) return;
-
- const buttonViewModel = document.createElement('button-view-model');
- buttonViewModel.id = 'comments-toggle-button';
- buttonViewModel.className = 'yt-spec-button-view-model slim_video_action_bar_renderer_button';
-
- const buttonHTML = `
- <yt-button-shape class="yt-spec-button-shape-next__button-shape-wiz-class" >
- <button class="yt-spec-button-shape-next yt-spec-button-shape-next--tonal yt-spec-button-shape-next--mono yt-spec-button-shape-next--size-m yt-spec-button-shape-next--icon-leading" id='toggleButton1'>
- <div class="yt-spec-button-shape-next__icon">
- <c3-icon style="width: 24px; height: 24px;">
- <span class="yt-icon-shape yt-spec-icon-shape">
- <div style="width: 100%; height: 100%; display: block; fill: currentcolor; padding:3px">
- <!-- Comments Icon SVG -->
- <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 121.86 122.88" width="20" height="20">
- <title>comment</title>
- <path d="M30.28,110.09,49.37,91.78A3.84,3.84,0,0,1,52,90.72h60a2.15,2.15,0,0,0,2.16-2.16V9.82a2.16,2.16,0,0,0-.64-1.52A2.19,2.19,0,0,0,112,7.66H9.82A2.24,2.24,0,0,0,7.65,9.82V88.55a2.19,2.19,0,0,0,2.17,2.16H26.46a3.83,3.83,0,0,1,3.82,3.83v15.55ZM28.45,63.56a3.83,3.83,0,1,1,0-7.66h53a3.83,3.83,0,0,1,0,7.66Zm0-24.86a3.83,3.83,0,1,1,0-7.65h65a3.83,3.83,0,0,1,0,7.65ZM53.54,98.36,29.27,121.64a3.82,3.82,0,0,1-6.64-2.59V98.36H9.82A9.87,9.87,0,0,1,0,88.55V9.82A9.9,9.9,0,0,1,9.82,0H112a9.87,9.87,0,0,1,9.82,9.82V88.55A9.85,9.85,0,0,1,112,98.36Z"/>
- </svg>
- </div>
- </span>
- </c3-icon>
- </div>
- <div class="yt-spec-button-shape-next__button-text-content">Comments</div>
- <yt-touch-feedback-shape>
- <div class="yt-spec-touch-feedback-shape yt-spec-touch-feedback-shape--touch-response">
- <div class="yt-spec-touch-feedback-shape__stroke"></div>
- <div class="yt-spec-touch-feedback-shape__fill"></div>
- </div>
- </yt-touch-feedback-shape>
- </button>
- </yt-button-shape>
- `;
-
- buttonViewModel.innerHTML = htmlPolicy ? htmlPolicy.createHTML(buttonHTML) : buttonHTML;
-
- buttonViewModel.addEventListener('click', toggleComments);
-
- const targetContainer = document.querySelector('.slim-video-action-bar-actions');
- if (targetContainer) {
- const firstButton = targetContainer.children[0];
- if (firstButton) {
- targetContainer.insertBefore(buttonViewModel, firstButton.nextSibling);
- } else {
- targetContainer.appendChild(buttonViewModel);
- }
- console.log('Toggle button added as the second button.');
- } else {
- console.warn('Target container not found.');
- }
- }
-
- const observer = new MutationObserver(() => {
- addButtonToInterface();
- const comments = document.querySelector(commentsSelector);
- comments.style.display = 'none';
- });
-
- observer.observe(document.body, { childList: true, subtree: true });
- setTimeout(()=>{trytohide = false}, 8000)
- addButtonToInterface();
- })();