Greasy Fork 还支持 简体中文。

MusicBrainz: Uncheck checkboxes with Esc

Unchecks all checked checkboxes for specified selectors when pressing Escape key

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         MusicBrainz: Uncheck checkboxes with Esc
// @namespace    https://musicbrainz.org/user/chaban
// @version      1.2
// @description  Unchecks all checked checkboxes for specified selectors when pressing Escape key
// @tag          ai-created
// @author       chaban
// @license      MIT
// @match        *://*.musicbrainz.org/*
// @icon         https://musicbrainz.org/static/images/favicons/android-chrome-512x512.png
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    /**
     * An array of base CSS selectors targeting the checkboxes to be unchecked.
     * The ':checked' pseudo-selector will be automatically appended to each base selector.
     * Examples:
     * - 'input[type="checkbox"][name="add-to-merge"]'
     * - '#mySpecificIdCheckbox'
     * - '.some-class-checkbox'
     * - 'input[type="checkbox"][data-custom-attribute="value"]'
     */
    const TARGET_CHECKBOX_SELECTORS = [
        'input[type="checkbox"][name="add-to-merge"]',
        '.release-relationship-editor #tracklist [type="checkbox"]',
        '.cover-art-checkbox',
        '#selectAllCovers',
    ];

    /**
     * Unchecks all currently checked checkboxes that match the combined selectors.
     */
    function uncheckTargetCheckboxes() {
        // Join all base selectors with ':checked' and then with a comma for a single query.
        const fullSelector = TARGET_CHECKBOX_SELECTORS
            .map(baseSelector => `${baseSelector}:checked`)
            .join(', ');

        // If there are no selectors, do nothing.
        if (!fullSelector) {
            return;
        }

        document.querySelectorAll(fullSelector).forEach(checkbox => {
            checkbox.checked = false;
        });
    }

    document.addEventListener('keydown', (event) => {
        if (event.key === 'Escape') {
            uncheckTargetCheckboxes();
        }
    });
})();