Quick Remove from Watch Later

Removes videos from "Watch Later" with a single click

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name:es         Borrado rapido de Ver más tarde
// @name            Quick Remove from Watch Later
// @namespace       https://github.com/cansi22
// @version         1.1.0
// @description:es  Elimina vídeos de "Ver más tarde" con un solo clic
// @description     Removes videos from "Watch Later" with a single click
// @author          cansi22
// @license         MIT
//
// @match           https://www.youtube.com/*
// @icon            data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0icmVkIj48cGF0aCBkPSJNOSwzVjRINFY2SDVWMTlBMiwyIDAgMCwwIDcsMjFIMTdBMiwyIDAgMCwwIDE5LDE5VjZIMjBWNEgxNVYzSDlNNyw4SDlWMTdIN1Y4TTExLDhIMTNWMTdIMTFWOE0xNSw4SDE3VjE3SDE1VjhaIi8+PC9zdmc+
//
// @homepageURL     https://github.com/cansi22/watch-later-quick-remove/
// @supportURL      https://github.com/cansi22/watch-later-quick-remove/issues
//
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    function addTrashButtons() {
        document.querySelectorAll('ytd-playlist-video-renderer:not([data-trash-added])').forEach(video => {
            video.setAttribute('data-trash-added', 'true');

            // Crear botón de papelera con SVG
            const btn = document.createElement('button');
            // Crear el SVG manualmente para evitar TrustedHTML
            const svgNS = "http://www.w3.org/2000/svg";

            const svg = document.createElementNS(svgNS, "svg");
            svg.setAttribute("width", "24");
            svg.setAttribute("height", "24");
            svg.setAttribute("viewBox", "0 0 24 24");
            svg.style.verticalAlign = "middle";
            svg.style.display = "block";
            svg.style.fill = "white";

            const path = document.createElementNS(svgNS, "path");
            path.setAttribute("d", "M9 3V4H4V6H5V19C5 20.1 5.9 21 7 21H17C18.1 21 19 20.1 19 19V6H20V4H15V3H9ZM7 6H17V19H7V6ZM9 8V17H11V8H9ZM13 8V17H15V8H13Z");
            path.setAttribute("fill", "red");

            svg.appendChild(path);
            btn.appendChild(svg);
            btn.title = 'Quitar de Ver más tarde';
            btn.style.margin = '0 8px 0 0'; // margen solo a la derecha
            btn.style.cursor = 'pointer';
            btn.style.fontSize = '18px';
            btn.style.background = 'transparent';
            btn.style.border = 'none';
            btn.style.display = 'inline-flex';
            btn.style.alignItems = 'center';
            btn.style.height = '40px'; // igualar altura del botón de menú
            btn.style.padding = '0';
            btn.style.verticalAlign = 'middle';

            btn.onclick = function (e) {
                e.stopPropagation();
                const menuBtn = video.querySelector('yt-icon-button#button > button#button');
                if (menuBtn) {
                    menuBtn.click();
                    const interval = setInterval(() => {
                        const items = Array.from(document.querySelectorAll('ytd-menu-service-item-renderer'));
                        const removeBtn = items.find(item =>
                            item.innerText.trim() === 'Quitar de Ver más tarde' ||
                            item.innerText.trim() === 'Remove from Watch later'
                        );
                        if (removeBtn) {
                            clearInterval(interval);
                            removeBtn.click();
                            document.body.click();
                        }
                    }, 100);
                    setTimeout(() => clearInterval(interval), 3000);
                } else {
                    alert('No se encontró el botón de menú.');
                }
            };

            // Insertar la papelera antes del menú de los tres puntos
            const menu = video.querySelector('yt-icon-button#button');
            if (menu && menu.parentElement) {
                menu.parentElement.insertBefore(btn, menu);
            }
        });
    }

    const observer = new MutationObserver(addTrashButtons);
    observer.observe(document.body, { childList: true, subtree: true });

    addTrashButtons();
})();