您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
Adds instantRD, 4K, 1080p, 720p, Dolby Vision, HDR, Remux buttons at the top of DMM filter bar and allows clearing all filters with Escape
当前为
// ==UserScript== // @name DMM Top Filter Buttons // @namespace http://tampermonkey.net/ // @version 1.10 // @description Adds instantRD, 4K, 1080p, 720p, Dolby Vision, HDR, Remux buttons at the top of DMM filter bar and allows clearing all filters with Escape // @author Waseem // @match https://debridmediamanager.com/* // @grant none // @run-at document-idle // @locale en // ==/UserScript== (function() { 'use strict'; // Helper to set React-controlled input value correctly function setReactValue(element, value) { const nativeSetter = Object.getOwnPropertyDescriptor( window.HTMLInputElement.prototype, 'value' ).set; nativeSetter.call(element, value); element.dispatchEvent(new Event('input', { bubbles: true })); } // Define buttons: text to display => value to insert const buttons = [ { text: 'instantRD', value: 'videos:>0', class: 'dmm-instantrd' }, { text: '4K', value: '2160p|4k', class: 'dmm-4k' }, { text: '1080p', value: '1080p', class: 'dmm-1080p' }, { text: '720p', value: '720p', class: 'dmm-720p' }, { text: 'Dolby Vision', value: 'dovi|dv|dolby|vision', class: 'dmm-dolbyvision' }, { text: 'HDR', value: 'hdr', class: 'dmm-hdr' }, { text: 'Remux', value: 'remux', class: 'dmm-remux' } ]; function addFilterButtons() { const container = document.querySelector( '#__next > div > div.mb-2.flex.items-center.gap-2.overflow-x-auto.p-2 > div' ); const input = document.querySelector('#query'); if (!container || !input) return; // Add each button at the **beginning** of the container buttons.slice().reverse().forEach(btn => { // reverse to maintain visual order if (container.querySelector(`span.${btn.class}`)) return; // avoid duplicates const span = document.createElement('span'); span.textContent = btn.text; span.className = `${btn.class} cursor-pointer whitespace-nowrap rounded border border-blue-500 bg-blue-900/30 px-2 py-0.5 text-xs text-blue-100 transition-colors hover:bg-blue-800/50`; container.insertBefore(span, container.firstChild); // insert at top // Click inserts filter value span.addEventListener('click', () => { const current = input.value.trim(); setReactValue(input, current ? `${current} ${btn.value}` : btn.value); }); }); } // Clear all filters on Escape key function setupEscapeClear() { const input = document.querySelector('#query'); if (!input) return; document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { setReactValue(input, ''); } }); } // Observe DOM for filter bar and input const observer = new MutationObserver(() => { addFilterButtons(); setupEscapeClear(); }); observer.observe(document.body, { childList: true, subtree: true }); })();