User:XinuGod/js/Mosnum-Dates.js
注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google Chrome、Firefox、Microsoft Edge及Safari:按住⇧ 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');
}