跳转到内容

User:Bosco Sin/tp.js

维基百科,自由的百科全书
注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google ChromeFirefoxMicrosoft EdgeSafari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。
//<nowiki>
( function( $, mw ) {
    // 添加一个按钮到工具栏以便手动触发脚本
    $(function() {
        if (mw.config.get('wgNamespaceNumber') % 2 === 0 && mw.config.get('wgNamespaceNumber') !== -1) { // 只在非讨论页显示按钮
            mw.util.addPortletLink(
                'p-cactions', // 工具栏位置
                '#',          // 链接地址
                '添加翻译模板', // 按钮名称
                'add-translated-page', // ID
                '为当前页面的讨论页添加{{Translated page}}模板' // 提示文字
            );
            $('#add-translated-page').on('click', function(e) {
                e.preventDefault();
                addTranslatedPageTemplate();
            });
        }
    });

    function addTranslatedPageTemplate() {
        var targetTitle = mw.config.get('wgPageName'); // 当前页面标题
        var article = new mw.Title(targetTitle);
        var talk = new mw.Title(article.getMainText(), article.getNamespaceId() | 1); // 获取对应的讨论页

        // 弹出对话框获取用户输入
        var sourceLanguage = prompt("请输入来源语言(例如:en):");
        if (!sourceLanguage) {
            alert("来源语言不能为空!");
            return;
        }
        
        var sourceTitle = prompt("请输入来源页面(例如:Page Title):");
        if (!sourceTitle) {
            alert("来源页面不能为空!");
            return;
        }
        
        var version = prompt("请输入来源页面的特定版本号(例如:12345678):");

        var insertversion = prompt("请输入本地翻译后的特定版本号(例如:12345678):");

        var template = '{{Translated page|' + sourceLanguage + '|' + sourceTitle + '|version=' + version + '|insertversion=' + insertversion + '}}\n';
        var api = new mw.Api();

        api.get({
            action: 'query',
            prop: 'revisions',
            titles: talk.getPrefixedText(),
            rvprop: [ 'timestamp', 'content' ],
            indexpageids: true,
            curtimestamp: true
        }).done(function(data) {
            if (!data.query || !data.query.pages) {
                alert("无法获取讨论页信息,请稍后重试。");
                return;
            }

            var pageId = data.query.pageids[0];
            var revision = (data.query.pages[pageId].revisions || [])[0] || {};
            var text = revision['*'];
            var params = {
                action: 'edit',
                title: talk.getPrefixedText(),
                summary: '为翻译页面标记{{[[Template:Translated page|Translated page]]}}模板 ([[User:Bosco Sin/tp.js|tp.js]])',
                starttimestamp: data.curtimestamp,
                text: template
            };

            if (text !== undefined) { // 如果讨论页已存在
                params.basetimestamp = revision.timestamp;
                params.text = template + text.replace(/\{\{\s*Translated page\s*\|[^\{\}]+\}\}\n?/g, '');
            } else { // 如果讨论页不存在
                params.createonly = true;
            }

            api.postWithEditToken(params).done(function(data) {
                if (data.edit && data.edit.result === 'Success') {
                    alert('成功为' + talk.getPrefixedText() + '添加了{{Translated page}}模板!');
                    location.reload(); // 刷新页面以显示更新内容
                } else {
                    alert('添加模板失败,请稍后重试。');
                }
            }).fail(function() {
                alert('添加模板失败,请检查网络连接或权限设置。');
            });
        }).fail(function() {
            alert('无法获取讨论页信息,请稍后重试。');
        });
    }
})(jQuery, mediaWiki);
//</nowiki>