MediaWiki:Gadget-dcparticipant.js

注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google ChromeFirefoxMicrosoft EdgeSafari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。

// <nowiki>
/*
 * 每年要更新的东西:
 * startTime 和 endTime,对应动员令的起止时间
 * topics 等变量,对应动员令的主题(和dchost.js的变量应当完全相同)
 * 项目页面名(第几次動員令、DCxx)
 */

(function($, mw) {
'use strict';
var startTime = new Date('2023-07-08T00:00:00Z');
var endTime = new Date('2023-09-10T23:59:59Z');

var pagename = mw.config.get('wgPageName');
var username = mw.config.get('wgUserName');
var personal_page = 'Wikipedia:動員令/第二十一次動員令/個人貢獻/' + (username) + '';

// 在提报页面加个广告推荐大家使用小工具
if (pagename === personal_page && mw.config.get('wgAction') === 'edit') {
    // 只显示一次,有 cookie 的就不显示了
    if ($.cookie('p4js-dcparticipant-notice')) {
        return;
    }
    $.cookie('p4js-dcparticipant-notice', 1, {path: "/", expires: endTime});
    var messageDialog = new OO.ui.MessageDialog();
    var windowManager = new OO.ui.WindowManager();
    $('body').append(windowManager.$element);
    windowManager.addWindows([messageDialog]);
    windowManager.openWindow(messageDialog, {
      title: wgULS('提交动员令小工具已上线', '提交動員令小工具已上線'),
      message: $(wgULS('<img src="/wiki/Special:Redirect/file/Gadget-dcparticipant-entry-zh-hans.png" style="width:80%;margin:10px auto 20px;display:block"><p>还在纠结复杂的源代码?现在写完条目只需点击右上角“更多”-“提交动员令”并填写表单即可,提交动员令从未如此简单!</p><img src="/wiki/Special:Redirect/file/Gadget-dcparticipant-ui-zh-hans.png" style="width:100%;margin:10px auto 20px;display:block">',
        '<img src="/wiki/Special:Redirect/file/Gadget-dcparticipant-entry-zh-hant.png" style="width:80%;margin:10px auto 20px;display:block"><p>還在糾結複雜的原始碼?現在寫完條目只需點按右上角「更多」-「提交動員令」並填寫表單即可,提交動員令從未如此簡單!</p><img src="/wiki/Special:Redirect/file/Gadget-dcparticipant-ui-zh-hant.png" style="width:100%;margin:10px auto 20px;display:block">')),
      size: 'large',
      verbose: true,
      actions: [{
          action: 'accept',
          label: '我知道了',
          flags: 'primary'
        }]
    });
}

// 只在条目空间使用
if (mw.config.get('wgNamespaceNumber') !== 0) {
    return;
}
// 只对自动确认/确认用户启用
if (mw.config.get('wgUserGroups').indexOf('autoconfirmed') === -1 && mw.config.get('wgUserGroups').indexOf('confirmed') === -1) {
    return;
}
// 只在动员令期间启用
// 这里判断的是用户本地时间,改系统时间可以绕过,但贡献仍会被主持人拒绝,所以没有意义
if (new Date() < startTime || new Date() > endTime) {
	return;
}

var topics = [["大動員令"], ["科學", "體育", "女性"], ["亟需撰寫的條目", "缺少來源的條目", "電腦科學", "民族"]];
var topics_s = [["大动员令"], ["科学", "体育", "女性"], ["亟需撰写的条目", "缺少来源的条目", "计算机科学", "民族"]];  // 仅用于显示,下同
var topics_t = [["大動員令"], ["科學", "體育", "女性"], ["亟需撰寫的條目", "缺少來源的條目", "電腦科學", "民族"]];
var topic_group_name_s = ["大动员令", "中动员令", '小动员令'];
var topic_group_name_t = ["大動員令", "中動員令", '小動員令'];
var summary_postfix = ' via [[MediaWiki:Gadget-dcparticipant.js|dcparticipant.js]]';

// 用主题生成下拉选单
var topics_to_select = function() {
    var html = '<select id="p4js-dcparticipant-select-topic">\n';
    for (var i in topics) {
        var group = topics[i];
        html += '<optgroup label="' + (wgULS(topic_group_name_s[i], topic_group_name_t[i])) + '">\n';
        for (var j in group) {
            var topic = group[j];
            html += '<option value="' + (topic) + '"' + ("大動員令" == topic ? " selected" : "") + '>' + (wgULS(topics_s[i][j], topics_t[i][j])) + '</option>';
        }
    }
    return html + '</select>';
};
// 用主题得到 {{DCxx/art}} 中填的数字类别
var topic_to_type = function(topic) {
    for (var i = 0; i < topics.length; ++i) {
        if (topics[i].indexOf(topic) !== -1) {
            return String(i+1);
        }
    }
    return undefined;
};
// 藝術 -> (艺术|藝術)
var topic_variants = function(t) {
    for (var i in topics) {
        var group = topics[i];
        for (var j in group) {
            var topic = group[j];
            if (t === topic) {
                return '(' + (t) + '|' + (topics_s[i][j]) + '|' + (topics_t[i][j]) + ')';
            }
        }
    }
    return t;
};

var $dl = null;   // 主表单
var $dl2 = null;  // 基本信息表单
var $dl3 = null;  // 申报多媒体表单
var dialog_html = '<div id="p4js-dcparticipant-dialog" title="' + (wgULS('提交动员令:', '提交動員令:') + pagename) + '">\
<table id="p4js-dcparticipant-table" class="wikitable">\
<thead style="display:table-header-group"><tr><th>' + (wgULS('项目', '項目')) + '</th><th>' + (wgULS('请填写', '請填寫')) + '</th><th>' + (wgULS('说明', '說明')) + '</th></tr></thead>\
<tbody>\
<tr><th>' + (wgULS('类别', '類別')) + '*</th><th>' + (topics_to_select()) + '</th><th>' + (wgULS('条目所属类别,分类细则参见', '條目所屬類別,分類細則參見')) + '<a href="https://zh.wikipedia.org/wiki/Wikipedia:動員令/第二十一次動員令#主題">' + (wgULS('此处', '此處')) + '</a></th></tr>\
<tr><th>' + (wgULS('质量', '質量')) + '*</th><th><select id="p4js-dcparticipant-select-quality">\
<option value="FL">特色列表</option>\
<option value="FA">' + (wgULS('典范条目', '典範條目')) + '</option>\
<option value="GA">' + (wgULS('优良条目', '優良條目')) + '</option>\
<option value="" selected>' + (wgULS('达标条目', '達標條目')) + '</option>\
</select><br><label id="p4js-dcparticipant-label-qualitychecked" style="display:none"><input type="checkbox">已通过</label></th>\
    <th>' + (wgULS('如果本条目预期参评优良/典范内容,请加以选择,否则可忽略此项', '如果本條目預期參評優良/典範內容,請加以選擇,否則可忽略此項')) + '</th></tr>\
<tr><th>' + (wgULS('长度', '長度')) + '*</th><th><input type="text"></th>\
    <th>' + (wgULS('如果条目由您建立,请填写', '如果條目由您建立,請填寫')) + '<a href="' + (mw.config.get('wgArticlePath').replace('$1', pagename)) + '?action=history">' + (wgULS('此处', '此處')) + '</a>' + (wgULS('显示最新版本的字节数<br>(提交工具会尝试自动填入)', '顯示最新版本的位元組數<br>(提交工具會嘗試自動填入)')) + '<br>' + (wgULS('如果您改善/重写了条目,请填写重写后与保留原文的字节数之差', '如果您改善/重寫了條目,請填寫重寫後與保留原文的位元組數之差')) + '</th></tr>\
<tr><th>' + (wgULS('改善工程', '改善工程')) + '</th><th><label><input type="checkbox">是</label></th><th>' + (wgULS('如果您并非创建,而是改写了条目,请勾选此项。具体规则参见', '如果您並非創建,而是改寫了條目,請勾選此項。具體規則參見')) + '<a href="https://zh.wikipedia.org/wiki/Wikipedia:動員令/第二十一次動員令#計分及注意事項">' + (wgULS('此处', '此處')) + '</a></th></tr>\
<tr><th>' + (wgULS('有声条目', '有聲條目')) + '</th><th><input type="text"></th><th>' + (wgULS('如您已上传有声条目,请填写条目正文字节数', '如您已上傳有聲條目,請填寫條目正文位元組數')) + '(<a href="https://zh.wikipedia.org/wiki/Wikipedia:有聲維基百科專題">' + (wgULS('如何制作并上传?', '如何製作並上載?')) + '</a>)</th></tr>\
<tr><th>' + (wgULS('图片', '圖片')) + '</th>\
    <th><label>' + (wgULS('一般原创图片数量', '一般原創圖片數量')) + '<input type="text"></label>\
    <br><label>' + (wgULS('特色原创图片数量', '特色原創圖片數量')) + '<input type="text"></label>\
    <br><label>' + (wgULS('翻译图片译文字节数', '翻譯圖片譯文位元組數')) + '<input type="text"></label></th>\
    <th>' + (wgULS('原创图片必须由您亲自创作且已上传至维基共享资源', '原創圖片必須由您親自創作且已上載至維基共享資源')) + '(<a href="https://commons.wikimedia.org/wiki/Special:UploadWizard">' + (wgULS('如何上传?', '如何上載?')) + '</a>)<br>' + wgULS('特色原创图片要求您的图片已经当选<a href="https://zh.wikipedia.org/wiki/Wikipedia:特色图片">特色图片</a>', '特色原創圖片要求您的圖片已經當選<a href="https://zh.wikipedia.org/wiki/Wikipedia:特色图片">特色圖片</a>') + '</th></tr>\
<tr><th>' + (wgULS('原创视频', '原創影片')) + '</th>\
    <th><label>' + (wgULS('总时长(秒)', '總時長(秒)')) + '<input type="text"></label></th>\
    <th>' + (wgULS('原创视频必须由您亲自创作且已上传至维基共享资源', '原創影片必須由您親自創作且已上載至維基共享資源')) + '(<a href="https://commons.wikimedia.org/wiki/Special:UploadWizard">' + (wgULS('如何上传?', '如何上載?')) + '</a>)</th></tr>\
<tr><th>' + (wgULS('参考来源', '參考來源')) + '</th><th><input type="text"></th><th>' + (wgULS('如您提报缺少来源的条目,请填写新增的参考来源数', '如您提報缺少來源的條目,請填寫新增的參考來源數')) + wgULS('(须可在<a href="/wiki/WorldCat" title="">WorldCat</a>等<a href="/wiki/OPAC" title="">图书馆联机目录</a>、<a href="/wiki/Special:%E7%BD%91%E7%BB%9C%E4%B9%A6%E6%BA%90" title="Special:网络书源">Special:网络书源</a>或<a href="/wiki/CNKI" title="">CNKI</a>等学术期刊数据库上查证)', '須可在<a href="/wiki/WorldCat" title="">WorldCat</a>等<a href="/wiki/OPAC" title="OPAC">圖書館聯機目錄</a>、<a href="/wiki/Special:%E7%BD%91%E7%BB%9C%E4%B9%A6%E6%BA%90" title="Special:網絡書源">Special:網絡書源</a>或<a href="/wiki/CNKI" title="CNKI">CNKI</a>等學術期刊資料庫上查證') + '</th></tr>\
</tbody></table>\
<p>' + (wgULS('带有*者为必填项目。请注意动员令主持人有权审核并改动您填写的各项目。如阅读说明后仍有疑问,您还可以<a href="https://t.me/wikipedia_zh_DC">加入Telegram讨论群组</a>询问我们的志愿者,或<a href="https://zh.wikipedia.org/w/index.php?title=Wikipedia_talk:動員令/第二十一次動員令&action=edit&section=new">在此处填写您的问题</a>等待志愿者回复。',
        '帶有*者為必填項目。請注意動員令主持人有權審核並改動您填寫的各項目。如閱讀說明後仍有疑問,您還可以<a href="https://t.me/wikipedia_zh_DC">加入Telegram討論群組</a>詢問我們的志願者,或<a href="https://zh.wikipedia.org/w/index.php?title=Wikipedia_talk:動員令/第二十一次動員令&action=edit&section=new">在此處填寫您的問題</a>等待志願者回覆。')) + '\
</p>\
</div>';

var dialog_userinfo_html = '<div id="p4js-dcparticipant-dialog-info" title="' + (wgULS('提交动员令:补充信息', '提交動員令:補充信息')) + '">\
<p>' + (wgULS('由于您尚未报名,请填写以下信息:', '由於您尚未報名,請填寫以下信息:')) + '</p>\
<table id="p4js-dcparticipant-table-info" class="wikitable">\
<thead style="display:table-header-group"><tr><th>' + (wgULS('项目', '項目')) + '</th><th>' + (wgULS('请填写', '請填寫')) + '</th><th>' + (wgULS('说明', '說明')) + '</th></tr></thead>\
<tbody>\
<tr><th>' + (wgULS('昵称', '暱稱')) + '</th><th><input type="text" value="' + (username) + '"></th><th>' + (wgULS('可以不与您的用户名相同,将在<a href="https://zh.wikipedia.org/wiki/Wikipedia:動員令/第二十一次動員令/龍虎榜">龙虎榜</a>等处显示,默认为用户名', '可以不與您的用戶名相同,將在<a href="https://zh.wikipedia.org/wiki/Wikipedia:動員令/第二十一次動員令/龍虎榜">龍虎榜</a>等處顯示,默認為用戶名')) + '</th></tr>\
<tr><th>' + (wgULS('完成次数', '完成次數')) + '*</th><th><input type="text"></th><th>' + (wgULS('您以前完成动员令的次数,可能影响头衔颁发,建议如实填写', '您以前完成動員令的次數,可能影響頭銜頒發,建議如實填寫')) + '</th></tr>\
<tr><th>' + (wgULS('编辑次数', '编辑次数')) + '*</th><th><input type="text"></th><th>' + (wgULS('您动员令开始前的编辑次数(<a href="https://zh.wikipedia.org/wiki/Special:参数设置">点击此处</a>查看当前编辑次数),可能影响头衔颁发,建议如实填写(提交工具会尝试自动填入)', '您動員令開始前的編輯次數(<a href="https://zh.wikipedia.org/wiki/Special:参数设置">點擊此處</a>查看當前編輯次數),可能影響頭銜頒發,建議如實填寫(提交工具會嘗試自動填入)')) + '</th></tr>\
<tr><th>' + (wgULS('目标', '目標')) + '</th><th><textarea style="resize:vertical"></textarea></th><th>' + (wgULS('您对自己本次动员令表现的期望,不会影响任何事情,请自由发挥', '您對自己本次動員令表現的期望,不會影響任何事情,請自由發揮')) + '</th></tr>\
</tbody></table>\
<p>' + (wgULS('带有*者为必填项目。以上内容只需本次完成,以后无需填写。如阅读说明后仍有疑问,您还可以<a href="https://t.me/wikipedia_zh_DC">加入Telegram讨论群组</a>询问我们的志愿者,或<a href="https://zh.wikipedia.org/w/index.php?title=Wikipedia_talk:動員令/第二十一次動員令&action=edit&section=new">在此处填写您的问题</a>等待志愿者回复。',
        '帶有*者為必填項目。以上內容只需本次完成,以後無需填寫。如閱讀說明後仍有疑問,您還可以<a href="https://t.me/wikipedia_zh_DC">加入Telegram討論群組</a>詢問我們的志願者,或<a href="https://zh.wikipedia.org/w/index.php?title=Wikipedia_talk:動員令/第二十一次動員令&action=edit&section=new">在此處填寫您的問題</a>等待志願者回覆。')) + '\
</p>\
</div>';

var html_to_art_wikitext = function() {
    var tr = $('#p4js-dcparticipant-table > tbody > tr');
    var topic = tr[0].children[1].children[0].value;
    var quality = $('#p4js-dcparticipant-select-quality')[0].value;
    var qualitychecked = $('#p4js-dcparticipant-label-qualitychecked')[0].checked;
    var len = tr[2].children[1].children[0].value.replace(',', '');
    var improve = tr[3].children[1].children[0].children[0].checked;
    var spokenlen = parseInt(tr[4].children[1].children[0].value) || 0;
    var spoken = spokenlen !== 0;
    var picnum = parseInt(tr[5].children[1].children[0].children[0].value) || 0;
    var fpicnum = parseInt(tr[5].children[1].children[2].children[0].value) || 0;
    var pictranslen = parseInt(tr[5].children[1].children[4].children[0].value) || 0;
    var pic = (picnum || fpicnum || pictranslen) !== 0;
    var videolen = parseInt(tr[6].children[1].children[0].children[0].value) || 0;
    var video = videolen !== 0;
    var refnum = parseInt(tr[7].children[1].children[0].value) || 0;
    var ref = refnum !== 0 && !tr[7].children[1].children[0].disabled;
    return [topic,
    	'#{{DC21/art|' + (pagename) +
    	'|type=' + (topic_to_type(topic)) +
    	'|length=' + (len) + '' +
    	(quality ? '|quality='+quality : '') + '' +
    	(improve ? '|improve=1' : '') + '' +
    	(ref ? '|ref=1|refnum='+refnum : '') +
    	(spoken ? '|spoken=1|spokenlength='+spokenlen : '') + '' +
    	(pic ? '|pic=1|picnum='+picnum+'|fpicnum='+fpicnum+'|pictranslength='+pictranslen : '') + '' +
    	(video ? '|video=1|videolength='+videolen : '') +
    	'}}\n'
    ];
};

var html_to_info_wikitext = function() {
    var tr = $('#p4js-dcparticipant-table-info > tbody > tr');
    var nick = tr[0].children[1].children[0].value;
    if (!nick || nick === '~~' + '~~') nick = username;
    var complete = tr[1].children[1].children[0].value;
    var ec = tr[2].children[1].children[0].value;
    var tar = tr[3].children[1].children[0].value;

    var prefix = '{{DC21/con table\n' +
        '|真用戶名=' + (username) + '\n' +
        '|暱稱=' + (nick) + '\n' +
        '|參與數=' + (complete) + '\n' +
        '|編輯數=' + (ec) + '\n' +
        '|目標=' + (tar) + '\n';
    var topic_list = '';
    var suffix = '<!--參數設置:請在下面加入你打算設置的參數,詳情請報名後閱讀本頁下方的連結-->\n' +
        '|\n' +
        '}}\n';
    for (var i in topics) {
        var group = topics[i];
        for (var j in group) {
            var topic = group[j];
            topic_list += '<!--' + topic + (topic === '大動員令' ? '' : '類') + ',type參數請填' + (parseInt(i)+1) + '-->\n';
            topic_list += '|' + topic + '=\n';
        }
    }

    return prefix + topic_list + suffix;
};

var insert = function(oldtext, topic, arttext) {
    var topic_regex = new RegExp('\\|\\s*' + topic_variants(topic) + '\\s*=\\n*(#.+\\n+)*');
    var match = topic_regex.exec(oldtext);
    if (match === null) {
        return oldtext;
    }
    var index = match.index + match[0].length;
    return oldtext.slice(0, index) + arttext + oldtext.slice(index);
};

var post = function() {
    // 检查必填参数
    var tr = $('#p4js-dcparticipant-table > tbody > tr');
    var len = tr[2].children[1].children[0].value;
    if (!len) {
        alert(wgULS('您没有填写“长度”一项', '您沒有填寫「長度」一項'));
        return;
    }
    // 检查是否已经报名(页面存在就当作已经报名),没的话要求填写补充信息
    new mw.Api()
        .get({
            action: 'query',
            prop: 'revisions',
            rvprop: 'content',
            titles: personal_page,
            formatversion: '2'
        })
        .then(function(data) {
            if (!data.query || !data.query.pages) {
                console.log('query: unknown error');
                alert(wgULS('未知错误', '未知錯誤'));
                return;
            }
            var page = data.query.pages[0];
            if (page.missing) {
                $dl.dialog('close');
                if (!$dl2) {
                    $dl2 = $(dialog_userinfo_html).dialog({
                        autoOpen: false, minWidth: 800, minHeight: 240,
                        buttons: [{
                            text: wgULS('提交', '提交'),
                            click: function() {
                                var oldtext = html_to_info_wikitext();
                                var tmp = html_to_art_wikitext();
                                var topic = tmp[0];
                                var arttext = tmp[1];
                                var newtext = insert(oldtext, topic, arttext);
                                new mw.Api()
                                    .create(personal_page, {
                                            text: newtext,
                                            summary: wgULS('提交[[' + (pagename) + ']]到动员令', '提交[[' + (pagename) + ']]到動員令') + summary_postfix
                                        })
                                    .then(function() { success(); })
                                    .fail(function(errcode) {
                                        fail(newtext, '错误代码:' + (errcode) + '。', '錯誤代碼:' + (errcode) + '。');
                                    });
                                submitting();
                                $(this).dialog('close');
                                $dl.dialog('open');
                            }
                        }]
                    });
                }
                $dl2.dialog('open');
                // 自动填入编辑数
                var tr = $('#p4js-dcparticipant-table-info > tbody > tr');
                tr[2].children[1].children[0].value = mw.config.get('wgUserEditCount');
            } else {
                var oldtext = page.revisions[0].content;
                var article_regex = new RegExp('#\s*{{DC21/art\\s*\\|\\s*' + (pagename) + '\\s*(\\||}}).*?}}\\n');
                var tmp = html_to_art_wikitext();
                var topic = tmp[0];
                var arttext = tmp[1];
                var newtext = '';
                if (article_regex.exec(oldtext)) {
                    if (!confirm(wgULS('您已提交过本条目到动员令,是否移除原有贡献重新提交?', '您已提交過本條目到動員令,是否移除原有貢獻重新提交?'))) {
                        fail(arttext, '用户取消提交。', '用戶取消提交。');
                        return;
                    }
                    oldtext = oldtext.replace(article_regex, '');
                }
                newtext = insert(oldtext, topic, arttext);
                new mw.Api()
                    .edit(personal_page, function(revision) {
                        return {
                            text: newtext,
                            summary: wgULS('提交[[' + (pagename) + ']]到动员令', '提交[[' + (pagename) + ']]到動員令') + summary_postfix
                        };
                    })
                    .then(function() { success(); })
                    .fail(function(errcode) {
                        fail(newtext, '错误代码:' + (errcode) + '。', '錯誤代碼:' + (errcode) + '。');
                    });
                submitting();
            }
        })
        .fail(function(errcode) {
            alert('Error: '+errcode);
        });
};

var submitting = function() {
    $dl.html('<div style="text-align:center">' + (wgULS('提交中...', '提交中...')) + '</div>\
        <p>' + (wgULS('请确保网络畅通并耐心等待几秒钟', '請確保網路暢通並耐心等待幾秒鐘')) + '</p>');
    $dl.dialog("option", "buttons", []);
};

var fail = function(arttext, reason_s, reason_t) {
    $dl.html('<div style="text-align:center">' + (wgULS('提交失败', '提交失敗')) + '</div>\
        <p>' + (wgULS(reason_s + '如需手动编辑,可复制以下源代码', reason_t + '如需手動編輯,可複製以下原始碼')) + '</p>\
        <pre id="p4js-dcparticipant-failed-edit-content"></pre>\
        <p>' + (wgULS('并点击“编辑个人贡献页”,根据说明进行编辑。', '並點按「編輯個人貢獻頁」,根據說明進行編輯。')) + '\
        <hr>' + (wgULS('如有疑问,您可以<a href="https://t.me/wikipedia_zh_DC">加入Telegram讨论群组</a>询问我们的志愿者,或<a href="https://zh.wikipedia.org/w/index.php?title=Wikipedia_talk:動員令/第二十一次動員令&action=edit&section=new">在此处填写您的问题</a>等待志愿者回复。',
                    '如有疑問,您可以<a href="https://t.me/wikipedia_zh_DC">加入Telegram討論群組</a>詢問我們的志願者,或<a href="https://zh.wikipedia.org/w/index.php?title=Wikipedia_talk:動員令/第二十一次動員令&action=edit&section=new">在此處填寫您的問題</a>等待志願者回覆。')) + '\
        </p>');
    $('#p4js-dcparticipant-failed-edit-content').text(arttext);
    $dl.dialog("option", "buttons", [{
        text: wgULS('留在本页', '留在本頁'),
        click: function() {
            $(this).dialog('close');
        }
    }, {
        text: wgULS('编辑个人贡献页', '編輯個人貢獻頁'),
        click: function() {
            window.location.href = mw.config.get('wgServer') + '/' + mw.config.get('wgArticlePath').replace('$1', personal_page)+'?action=edit';
        }
    }]);
};

var success = function() {
    $dl.html('<div style="text-align:center">' + (wgULS('提交完成!', '提交完成!')) + '</div>');
    $dl.dialog("option", "buttons", [{
        text: wgULS('留在本页', '留在本頁'),
        click: function() {
            $(this).dialog('close');
        }
    }, {
        text: wgULS('查看本次提交', '檢視本次提交'),
        click: function() {
            window.location.href = mw.config.get('wgServer') + '/' + mw.config.get('wgArticlePath').replace('$1', personal_page);
        }
    }]);
};

$(mw.util.addPortletLink('p-cactions', '#', wgULS('提交动员令', '提交動員令'))).click(function (e) {
    if (!$dl) {
        $dl = $(dialog_html).dialog({
            autoOpen: false, minWidth: 1024, minHeight: 256,
            buttons: [{
                text: wgULS('提交', '提交'),
                click: function() {
                    // 已经点开过的说明知道这个小工具,我们就不给他推送了
                    $.cookie('p4js-dcparticipant-notice', 1, {path: "/", expires: endTime});
                    post();
                }
            }]
        });
        var tr = $('#p4js-dcparticipant-table > tbody > tr');
        tr[7].children[1].children[0].disabled = this.value !== '缺少來源的條目';
        $('#p4js-dcparticipant-select-topic').change(function() {
            var tr = $('#p4js-dcparticipant-table > tbody > tr');
            tr[7].children[1].children[0].disabled = this.value !== '缺少來源的條目';
        });
    }
    $dl.dialog('open');
    // 自动填入字节数
    new mw.Api()
        .get({
            action: 'query',
            prop: 'revisions',
            rvprop: 'size',
            rvlimit: 1,
            titles: mw.config.get('wgPageName'),
            formatversion: '2'
        })
        .then(function(data) {
            if (!data.query || !data.query.pages) {
                console.log(mw.config.get('wgPageName') + ': unknown error');
                return;
            }
            var page = data.query.pages[0];
            if (page.missing) {
                console.log(mw.config.get('wgPageName') + ' doesn\'t exist');
                return;
            } else {
                var revisions = page.revisions;
                if (revisions && revisions.length && revisions[0]) {
                    var length = revisions[0].size || 0;
                    var tr = $('#p4js-dcparticipant-table > tbody > tr');
                    if (length) tr[2].children[1].children[0].value = length;
                }
            }
        })
        .fail(function(obj) {
            console.log('fetch page failed:', mw.config.get('wgPageName'));
        });
});

})(jQuery, mediaWiki);

// </nowiki>