MusicBrainz: Add search link for barcode

Adds a search link for each "Add release" edit barcode

当前为 2025-05-22 提交的版本,查看 最新版本

// ==UserScript==
// @name        MusicBrainz: Add search link for barcode
// @namespace   https://musicbrainz.org/user/chaban
// @description Adds a search link for each "Add release" edit barcode
// @version     1.0
// @tag         ai-created
// @author      chaban
// @license     MIT
// @include     https://*musicbrainz.org/edit/*
// @include     https://*musicbrainz.org/search/edits*
// @include     https://*musicbrainz.org/*/*/edits
// @include     https://*musicbrainz.org/*/*/open_edits
// @include     https://*musicbrainz.org/user/*/edits*
// @grant       none
// ==/UserScript==

(function() {
    'use strict';

    const barcodeRegex = /(\b\d{8,14}\b)/g;
    const targetSelector = '.add-release';

    function processTextNodes(node) {
        if (node.nodeType === Node.TEXT_NODE) {
            const originalText = node.textContent;
            let newHTML = originalText.replace(barcodeRegex, (match) => {
                const searchUrl = `//musicbrainz.org/search?type=release&method=advanced&query=barcode:${match}`;
                return `${match} (<a href="${searchUrl}" target="_blank">Search</a>)`;
            });

            if (newHTML !== originalText) {
                const tempElement = document.createElement('span');
                tempElement.innerHTML = newHTML;
                node.parentNode.insertBefore(tempElement, node);
                node.remove();
            }
        } else if (node.nodeType === Node.ELEMENT_NODE) {
            node.childNodes.forEach(processTextNodes);
        }
    }

    function processAddReleaseTables() {
        const tables = document.querySelectorAll(targetSelector);
        tables.forEach(table => {
            table.querySelectorAll('td').forEach(cell => {
                cell.childNodes.forEach(processTextNodes);
            });
        });
    }

    processAddReleaseTables();
})();