跳转到内容

User:NHC/Clean up bnb.js

维基百科,自由的百科全书
注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google ChromeFirefoxMicrosoft EdgeSafari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。
//Clean up bold and brackets
//@author [[User:WhitePhosphorus]]
//部分代碼參考自[[User:Peacearth/link-ts.js]]
//然而還沒有看懂,總之先搬過來

//介面晚點再處裡
    var LTUI;
    switch (mw.config.get('wgUserLanguage')) {
        case 'zh':
        case 'zh-cn':
        case 'zh-hans':
        case 'zh-my':
        case 'zh-sg':
            LTUI = {
                Translate:              '翻译',
                TranslateLinks:         '翻译链接',
                LinkTranslator:         '链接翻译器',
                TLTitle:                '自动翻译来自语言维基百科文本中的链接',
                SourceLanguageCode:     '目标维基的语言代码:',
                OriginalLink:           '原链接:',
                NOLINKINPAGE:           '此页没有链接',
                Done:                   '完成',
                NoVE:                   'link-ts不支持可视化模式,请切换到源代码模式。',
                EditMessage:            '[[MediaWiki:Gadget-link-ts.js|翻译]]外文链接',

                // OPTION
                SelectedTextOnly:       '只处理选中文本',
                IfFound:                '如果找到对应中文条目的话——',
                KeepOriginalText2:      '以原文显示蓝链([[中文|Original Text]])',
                CommentOriginalLink:    '注释原链接',
                IfNotFound:             '否则的话——',
                UseLangLink:            '转成跨语言链接(即{{tsl}}或{{link-xx}})',
                UseTsl:                 '使用{{tsl}}而非{{link-xx}}',
                KeepOriginalText:       '以原文显示绿链({{tsl|en|Orin||Orin text}})',
                MarkWrongPage:          '如果不转成跨语言链接,而且(在原文或中文)属于红链,那么把它标记出来',

                // STATUS
                PARSEFAILED:            '解析失败',
                ERROR:                  '错误',
                NOLINK:                 '没有链接',
                MULTIPLELINK:           '多个连接',
                PAGESAME:               '页面相同',
                PAGEDIFF:               '页面不同',
                DONTEXIST:              '页面不存在',
            };
            break;
        default:
            LTUI = {
                Translate:              '翻譯',
                TranslateLinks:         '翻譯連結',
                LinkTranslator:         '連結翻譯器',
                TLTitle:                '自動清理文本錯誤粗體及括弧',
                SourceLanguageCode:     '目標維基的語言代碼:',
                OriginalLink:           '原連結:',
                NOLINKINPAGE:           '此頁沒有任何連結',
                Done:                   '完成',
                NoVE:                   'link-ts不支援視覺化模式,請切換到原始碼模式。',
                EditMessage:            '使用[[User:NHC/Clean up bnb.js|清理格式]]小工具進行編輯',

                // OPTION
                SelectedTextOnly:       '只處理選中文本',
                IfFound:                '如果找到對應中文條目的話——',
                KeepOriginalText2:      '以原文顯示藍連([[中文|Original Text]])',
                CommentOriginalLink:    '註釋原連結',
                IfNotFound:             '否則的话——',
                UseLangLink:            '轉成跨語言連結(即{{tsl}}或{{link-xx}})',
                UseTsl:                 '使用{{tsl}}而非{{link-xx}}',
                KeepOriginalText:       '以原文顯示綠連({{tsl|en|Orin||Orin text}})',
                MarkWrongPage:          '如果不轉成跨語言連結,而且(在原文或中文)屬於紅連,那麼把它標記出來',

                // STATUS
                PARSEFAILED:            '解析失敗',
                ERROR:                  '錯誤',
                NOLINK:                 '沒有連結',
                MULTIPLELINK:           '多個連結',
                PAGESAME:               '頁面相同',
                PAGEDIFF:               '頁面不同',
                DONTEXIST:              '頁面不存在',
            };
    }
function replaceText(text) {
    let insideLink = false;
    let insideTemplate = false;
    let newText = "";
    for (let i = 0; i < text.length; i++) {
      const char = text.charAt(i);
      
      if (char === "[") {
        insideLink = true;
        newText += char;
      } else if (char === "]") {
        insideLink = false;
        newText += char;
      } else if (char === "{") {
        insideTemplate = true;
        newText += char;
      } else if (char === "}") {
        insideTemplate = false;
        newText += char;
      } else if (char === "(" && !insideLink && !insideTemplate) {
        newText += "(";
      } else if (char === ")" && !insideLink && !insideTemplate) {
        newText += ")";
      } else {
        newText += char;
      }

    }

    return newText;
}

function deleteBold(text) {
    // 寻找第一个章节
    const matchIndex = str.indexOf('\n==');
    // 没找到首段,返回 -1,替换整个字符串;否则只替换首段之后的内容,保留首段
    let newText = (matchIndex === -1 ? '' : str.substr(0, matchIndex));
    // 返回首段 + 删除粗体过的其余内容
    return newText + str.substr(matchIndex + 1).replace(/'''/g, '');
}
    var callDialog = function (event) {
        if (event && event.preventDefault) {
            event.preventDefault();
        }
        $('#linktranslator').remove();

        if (wikitextEditor.mode === 'visual') {
            alert(LTUI.NoVE);
            return;
        }

        // 針對VE進行Hack
        wikitextEditor.keepSelection = true;

        if (wikitextEditor.selectionText.length > 0) {
            LTConf.SelectedTextOnly = 'checked';
        } else {
            LTConf.SelectedTextOnly = '';
        }

        $('<div id="linktranslator" title="' + LTUI.LinkTranslator + '">' +
            '<label for="linktranslator-source-lang">' + LTUI.SourceLanguageCode + '</label> ' +
            '<input id="linktranslator-source-lang" value="' + LTConf.SourceLanguageCode + '" type="text" /><br><br>' +
            '<input type="checkbox" id="linktranslator-selected-text" ' + LTConf.SelectedTextOnly + '/> ' +
            '<label for="linktranslator-selected-text">' + LTUI.SelectedTextOnly + '</label><br>' +
            '<br>' + LTUI.IfFound + '<br><br>' +
            '<input type="checkbox" id="linktranslator-comment-link" ' + LTConf.CommentOriginalLink + '/> ' +
            '<label for="linktranslator-comment-link">' + LTUI.CommentOriginalLink + '</label><br>' +
            '<input type="checkbox" id="linktranslator-keep-original2" ' + LTConf.KeepOriginalText2 + '/> ' +
            '<label for="linktranslator-keep-original2">' + LTUI.KeepOriginalText2 + '</label><br>' +
            '<br>' + LTUI.IfNotFound + '<br><br>' +
            '<input type="checkbox" id="linktranslator-lang-link" ' + LTConf.UseLangLink + '/> ' +
            '<label for="linktranslator-lang-link">' + LTUI.UseLangLink + '</label><br>' +
            '<input type="checkbox" id="linktranslator-tsl" ' + LTConf.UseTsl + '/> ' +
            '<label for="linktranslator-tsl">' + LTUI.UseTsl + '</label><br>' +
            '<input type="checkbox" id="linktranslator-keep-original" ' + LTConf.KeepOriginalText + '/> ' +
            '<label for="linktranslator-keep-original">' + LTUI.KeepOriginalText + '</label><br>' +
            '<input type="checkbox" id="linktranslator-markwrongpage" ' + LTConf.MarkWrongPage + '/> ' +
            '<label for="linktranslator-markwrongpage">' + LTUI.MarkWrongPage + '</label><br>'
        ).dialog({
            modal: false,
            close: function() {
                currentJobid++;
            },
            width: 500,
            buttons: [
                {
                    text: LTUI.Translate,
                    click: function () {
                        $('#linktranslator').dialog('option', 'buttons', []);
                        processLinks();
                    }
                }
            ]
        });
    };