YouTube Focus Mode

Put YouTube in focus mode! Hides all unasked for content (recommendations, subscriptions, related, etc.) on the home, watch, and search results pages.

スクリプトをインストールするには、Tampermonkey, GreasemonkeyViolentmonkey のような拡張機能のインストールが必要です。

スクリプトをインストールするには、TampermonkeyViolentmonkey のような拡張機能のインストールが必要です。

スクリプトをインストールするには、TampermonkeyViolentmonkey のような拡張機能のインストールが必要です。

スクリプトをインストールするには、TampermonkeyUserscripts のような拡張機能のインストールが必要です。

このスクリプトをインストールするには、Tampermonkeyなどの拡張機能をインストールする必要があります。

このスクリプトをインストールするには、ユーザースクリプト管理ツールの拡張機能をインストールする必要があります。

(ユーザースクリプト管理ツールは設定済みなのでインストール!)

このスタイルをインストールするには、Stylusなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus などの拡張機能をインストールする必要があります。

このスタイルをインストールするには、Stylus tなどの拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

このスタイルをインストールするには、ユーザースタイル管理用の拡張機能をインストールする必要があります。

(ユーザースタイル管理ツールは設定済みなのでインストール!)

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください
// ==UserScript==
// @name         YouTube Focus Mode
// @namespace    http://tampermonkey.net/
// @version      1.0.6
// @description  Put YouTube in focus mode! Hides all unasked for content (recommendations, subscriptions, related, etc.) on the home, watch, and search results pages.
// @author       EmeraldSlash
// @match        *://*.youtube.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Controls which features are enabled, and which elements should be deleted
    const DELETE = {
        HOME_PAGE_FEED: true, // Video recommendations that show up on the home page
        WATCH_PAGE_RELATED: true, // Related videos displayed in a vertical list on the bottom right
        WATCH_PAGE_UP_NEXT: false, // Up next video
        VIDEO_VIDEOWALL: true, // Video recommendations that show up in a grid in the video display when a video finishes
        SEARCH_RESULTS_SHELVES: true, // Removes intrusive shelves in search results: "Shorts", "For you", "Previously watched", "People recently watched", etc.
    }
    const FOCUS_HOME_PAGE_SEARCH_BAR = true // Focus the home page search bar when visiting the page

    // Selectors for each of the features and elements to be deleted
    const SELECTORS = {
        HOME_PAGE_FEED: ["[page-subtype='home']"],
        WATCH_PAGE_RELATED: ["#items > yt-related-chip-cloud-renderer", "#items > ytd-item-section-renderer", "#related > ytd-watch-next-secondary-results-renderer"],
        WATCH_PAGE_UP_NEXT: ["#items > ytd-compact-autoplay-renderer"],
        VIDEO_VIDEOWALL: [".ytp-endscreen-content"],
        SEARCH_RESULTS_SHELVES: ["ytd-reel-shelf-renderer", "ytd-shelf-renderer"],
    }
    const HOME_PAGE_SEARCH_BAR_SELECTOR = "input#search"

    // import library for detecting added elements
    // insertion-query v1.0.3 (2016-01-20)
    // license:MIT
    // Zbyszek Tenerowicz <[email protected]> (http://naugtur.pl/)
    var insertionQ=function(){"use strict";function a(a,b){var d,e="insQ_"+g++,f=function(a){(a.animationName===e||a[i]===e)&&(c(a.target)||b(a.target))};d=document.createElement("style"),d.innerHTML="@"+j+"keyframes "+e+" {  from {  outline: 1px solid transparent  } to {  outline: 0px solid transparent }  }\n"+a+" { animation-duration: 0.001s; animation-name: "+e+"; "+j+"animation-duration: 0.001s; "+j+"animation-name: "+e+";  } ",document.head.appendChild(d);var h=setTimeout(function(){document.addEventListener("animationstart",f,!1),document.addEventListener("MSAnimationStart",f,!1),document.addEventListener("webkitAnimationStart",f,!1)},n.timeout);return{destroy:function(){clearTimeout(h),d&&(document.head.removeChild(d),d=null),document.removeEventListener("animationstart",f),document.removeEventListener("MSAnimationStart",f),document.removeEventListener("webkitAnimationStart",f)}}}function b(a){a.QinsQ=!0}function c(a){return n.strictlyNew&&a.QinsQ===!0}function d(a){return c(a.parentNode)?a:d(a.parentNode)}function e(a){for(b(a),a=a.firstChild;a;a=a.nextSibling)void 0!==a&&1===a.nodeType&&e(a)}function f(f,g){var h=[],i=function(){var a;return function(){clearTimeout(a),a=setTimeout(function(){h.forEach(e),g(h),h=[]},10)}}();return a(f,function(a){if(!c(a)){b(a);var e=d(a);h.indexOf(e)<0&&h.push(e),i()}})}var g=100,h=!1,i="animationName",j="",k="Webkit Moz O ms Khtml".split(" "),l="",m=document.createElement("div"),n={strictlyNew:!0,timeout:20};if(m.style.animationName&&(h=!0),h===!1)for(var o=0;o<k.length;o++)if(void 0!==m.style[k[o]+"AnimationName"]){l=k[o],i=l+"AnimationName",j="-"+l.toLowerCase()+"-",h=!0;break}var p=function(b){return h&&b.match(/[^{}]/)?(n.strictlyNew&&e(document.body),{every:function(c){return a(b,c)},summary:function(a){return f(b,a)}}):!1};return p.config=function(a){for(var b in a)a.hasOwnProperty(b)&&(n[b]=a[b])},p}();

    function update() {
        for (var key in DELETE) {
            if (DELETE[key]) {
                var sel = SELECTORS[key]
                var found = false
                sel.forEach(function(selector) {
                    let result = document.querySelectorAll(selector);
                    if (result.length > 0) {
                        found = true;
                        result.forEach(function(element) {
                            element.remove();
                        })
                    }
                })
                if (FOCUS_HOME_PAGE_SEARCH_BAR && found && key == "HOME_PAGE_FEED") {
                    let search = document.querySelector(HOME_PAGE_SEARCH_BAR_SELECTOR);
                    if (search) {
                        search.focus();
                    }
                }
            }
        }
    }

    // update when user navigates
    document.addEventListener('yt-navigate-finish', update);

    // remove elements when they get added
    for (var key in DELETE) {
        if (DELETE[key]) {
            var sel = SELECTORS[key]
            sel.forEach(function(selector) {
                insertionQ(selector).every(function(element) {
                    element.remove()
                })
            })
        }
    }

     // call initial update
    update()
})();