跳转到内容

User:YFdyh000/DisambigStylizedTitle.js

维基百科,自由的百科全书
注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google ChromeFirefoxMicrosoft EdgeSafari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。
$(document).ready(function () {
    const titleEl = $('#firstHeading .mw-page-title-main');
    if ( !titleEl.length) return;
    const originalTitle = $('#firstHeading .mw-page-title-main')[0].innerText;
    const matchResult = originalTitle.match(/ \((.+)\)$/);
    const colorSubtle = getComputedStyle(document.documentElement).getPropertyValue('--color-subtle').length > 0 ? 
      'var(--color-subtle)' : '#54595d'; // this value is '' in Timeless skin
    if (matchResult) {
        const isDisambigPage = $('#disambigbox').length > 0;

        const baseTitle = titleEl.text().replace(matchResult[0], '')
        titleEl.text(baseTitle);

        const spanEl = $('<span></span>').text(`(${matchResult[1]})`);
        spanEl.addClass('disambig');
        spanEl.attr('title', "这是消歧义后缀,页面完整名称的一部分,但不属于该主题的名称");
        if (!isDisambigPage) {
            spanEl.css({
                'font-size': '0.7em',
                'color': colorSubtle,
            });
        } else {
            spanEl.css({
                'color': colorSubtle,
            });
        }
        titleEl.append(spanEl);
    }

    //使titleEl的内容被选中并复制时维持originalTitle的括号。
    titleEl.on('copy', (e) => {
        const selection = window.getSelection();
        if (selection.rangeCount > 0) {
            const selectedText = selection.toString();
            let newText = selectedText;
            if (originalTitle.includes('(') && (selectedText.includes('(') || selectedText.includes(')'))) {
                newText = selectedText.replace('(', ' (').replace(')', ')');
            }
            e.originalEvent.clipboardData.setData('text/plain', newText);
            e.preventDefault();
        }
    });
});

function 括号是否为名称的一部分() {
    // 中國銀行(香港)
    const originalTitle = $('#firstHeading .mw-page-title-main')[0].innerText;
    if(originalTitle.includes('(')) {
        let firstParagraph = $('#toc').prevAll('p'); // 获取序言
        if (firstParagraph.length === 0) { // 没有目录
            firstParagraph = $('#mw-content-text p').first()
        }
        if (firstParagraph.length > 0) {
            if (firstParagraph.text().includes(originalTitle)) {
                // 序言包含标题,括号大概率非消歧义后缀
                return true;
            }
        }
    }
    return false;
}