User:XinuGod/js/Mosnum-Dates.js

注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google ChromeFirefoxMicrosoft EdgeSafari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。
/**
 * 本工具用于修正日期格式,请在使用前阅读[[User:Vozhuo/Tool/MOSNUM_dates]]关于本工具的文档。
 * 本工具复制并修改自[[User:Vozhuo/Tool/MOSNUM_dates.js]]。
 */

if ($.inArray(mw.config.get('wgAction'), ['edit', 'submit']) !== -1) {
    $.ajax(
        '//tools-static.wmflabs.org/meta/scripts/pathoschild.templatescript.js',
        { dataType: 'script', cache: true }
    ).done(function () {
        $.when(
            mw.loader.using(['mediawiki.util']),
            $.ajax('//en.wikipedia.org/w/index.php?title=User:Ohconfucius/script/MOSNUM_utils.js&action=raw&ctype=text/javascript',
                { dataType: 'script', cache: true }),
            $.ready
        ).done(function () {
            var add = mw.util.addPortletLink;
            $(add('p-tb', '#', '英文日期->ISO', 't-enISO', '英文日期格式修正至ISO格式', '', '')).click(en_dates_driver);
            $(add('p-tb', '#', '中文日期->ISO', 't-zhISO', '中文日期格式修正至ISO格式', '', '')).click(zh_dates_driver);
            $(add('p-tb', '#', 'ISO日月年->ISO年月日', 't-dmyISO', 'ISO格式的日月年日期修正', '', '')).click(dmy_dates_driver);
            $(add('p-tb', '#', 'ISO月日年->ISO年月日', 't-mdyISO', 'ISO格式的月日年日期修正', '', '')).click(mdy_dates_driver);
            $(add('p-tb', '#', wgULS('删除语言参数', '刪除語言參數'), 'dellang', '删除参考资料语言标签', '', '')).click(del_language_driver);
        });
    });
}

var summary = {
    en_date: wgULS('基于[[维基百科:格式手册/日期和数字|格式手册]]修正日期格式,由经过细微修改的[[User:XinuGod/js/Mosnum-Dates.js|Javascript]]驱动', '基於[[维基百科:格式手册/日期和数字|格式手冊]]修正日期格式,由经过细微修改的[[User:XinuGod/js/Mosnum-Dates.js|Javascript]]驅動'),
    zh_date: wgULS('参考资料中文日期格式[[User:XinuGod/js/Mosnum-Dates.js|转ISO]]', '參考資料中文日期格式[[User:XinuGod/js/Mosnum-Dates.js|轉ISO]]'),
    dmy_date: wgULS('参考资料ISO日月年格式[[User:XinuGod/js/Mosnum-Dates.js|修正]]', '參考資料ISO日月年格式[[User:XinuGod/js/Mosnum-Dates.js|修正]]'),
    mdy_date: wgULS('参考资料ISO月日年格式[[User:XinuGod/js/Mosnum-Dates.js|修正]]', '參考資料ISO月日年格式[[User:XinuGod/js/Mosnum-Dates.js|修正]]'),
    del_language: wgULS('[[User:XinuGod/js/Mosnum-Dates.js|删除]]所有语言参数', '[[User:XinuGod/js/Mosnum-Dates.js|刪除]]所有語言參數'),
};

var type;

function check(type) {
    if (type == 'EN') {
        return summary.en_date;
    } else if (type == 'ZH') {
        return summary.zh_date;
    } else if (type == 'DMY') {
        return summary.dmy_date;
    } else if (type == 'MDY') {
        return summary.mdy_date;
    } else if (type == 'DEL') {
        return summary.del_language;
    }
}

function edit_summary(type) {
    setoptions(minor = 'true');
    setreason(check(type), 'append');
    doaction('diff');
}

function fix_ISO_dates() {
    // ISO style
    ohc_regex(/(\|\s*(?:(?:(?:access|archive|)-?)date)\s*=\s*)@YYYY[.\/]@MM[.\/]@DD(?=[\s]*[|}])/gi, "$1@YYYY-@MM-@DD");
}

function fix_mdy_dates() {
    // US style
    ohc_regex(/(\|\s*(?:(?:(?:access|archive|)-?)date)\s*=\s*)@MM[.\/]@DD[.\/]@YYYY(?=[\s]*[|}])/gi, "$1@YYYY-@MM-@DD", function (d) {
        return d.y > 12;
    });
}

function fix_dmy_dates() {
    // UK style
    ohc_regex(/(\|\s*(?:(?:(?:access|archive|)-?)date)\s*=\s*)@DD[.\/]@MM[.\/]@YYYY(?=[\s]*[|}])/gi, "$1@YYYY-@MM-@DD", function (d) {
        return d.y === d.m || d.y > 12;
    });
}

function en_dates() {
    ohc_regex(/(\|\s*(?:(?:(?:access|archive|)-?)date)\s*)=(\s*)@Day @Month,? @YYYY(?=[\s]*[|}])/gi, "$1=$2@YYYY-@MM-@DD");
    ohc_regex(/(\|\s*(?:(?:(?:access|archive|)-?)date)\s*)=(\s*)@Month @Day,? @YYYY(?=[\s]*[|}])/gi, "$1=$2@YYYY-@MM-@DD");

    ohc_regex(/(?:Retrieved |Accessed)[ ]*(?:on |)@Day @Month,? @YYYY(?=\s*[|}])/gi, "Retrieved @YYYY-@MM-@DD");
    ohc_regex(/(?:Retrieved |Accessed)[ ]*(?:on |)@Month @Day,? @YYYY(?=\s*[|}])/gi, "Retrieved @YYYY-@MM-@DD");

    //删去可能多余的df、url-access、doi-access、citeseerx字段以及{{use dmy dates}}、{{use mdy dates}}模板
    var editbox = $('#wpTextbox1'), text = editbox.val();
    text = text.replace(/\|\s*df\s*=\s*[\w-]*(?=[\s]*[|}])/gi, '');
    text = text.replace(/{{\s*use (dmy|mdy) dates\s*\|[^}]*}}(\n)?/gi, '');
    text = text.replace(/\|\s*(url|doi)-access\s*=\s*[\w-]*(?=[\s]*[|}])/gi, '');
text = text.replace(/\|\s*citeseerx\s*=\s*[\w-]*(?=[\s]*[|}])/gi, '');
    //url-status转为dead-url
    text = text.replace(/(\|\s*)(url-status)(\s*=\s*)(dead|live|unfit|usurped)(?=[\s]*[|}])/gi, function (m, p1, p2, p3, p4) {
        var prefix = p1 + 'dead-url' + p3;
        if (p4 == 'dead') {
            return prefix + 'yes';
        } else if (p4 == 'live') {
            return prefix + 'no';
        } else {
            return prefix + p4;
        }
    });
    editbox.val(text);
}

function zh_dates() {
    var editbox = $('#wpTextbox1'), text = editbox.val();
    text = text.replace(/(\|\s*(?:access|archive|)-?date\s*=\s*\d+)年(\d+)月(\d+)日(?=[\s]*[|}])/gi, function (m, p1, p2, p3) {
        return p1 + '-' + (Array(2).join(0) + p2).slice(-2) + '-' + (Array(2).join(0) + p3).slice(-2); //http://www.nowamagic.net/javascript/js_AddZeroFrontOfNumber.php
    });
    editbox.val(text);
}

function delete_language() {
    var editbox = $('#wpTextbox1'), text = editbox.val();
    text = text.replace(/(\|\s*language\s*=\s*)([\w-]*)(?=[\s]*[|}])/gi, '$1');
    editbox.val(text);
}

function en_dates_driver(e) {
    e.preventDefault();
    en_dates();
    edit_summary('EN');
}

function zh_dates_driver(e) {
    e.preventDefault();
    zh_dates();
    edit_summary('ZH');
}

function dmy_dates_driver(e) {
    e.preventDefault();
    fix_ISO_dates()
    fix_dmy_dates();
    edit_summary('DMY');
}

function mdy_dates_driver(e) {
    e.preventDefault();
    fix_ISO_dates()
    fix_mdy_dates();
    edit_summary('MDY');
}

function del_language_driver(e) {
    e.preventDefault();
    delete_language();
    edit_summary('DEL');
}