User:痛/test.js

维基百科,自由的百科全书

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

/**
 * 本工具用于修正日期格式以及英文语言参数,请在使用前阅读[[User:Vozhuo/Tool/MOSNUM_dates]]的文档。如工具出现问题,可以联系我。
 * 除主要选项外,侧栏还会出现一个正则表达式编辑器(Regex editor)
 */

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', '#', wgULS('修复语言参数', '修復語言參數'), 'fixlang', '修复参考资料语言标签', '', '') ).click(fix_language_driver);
				$( add('p-tb', '#', wgULS('删除语言参数', '刪除語言參數'), 'dellang', '删除参考资料语言标签', '', '') ).click(del_language_driver);
		});
	});
}

var summary = {
    en_date:     wgULS('基于[[维基百科:格式手册/日期和数字|格式手册]]修正日期格式,由[[User:Vozhuo/Tool/MOSNUM dates|Javascript]]驱动', '基於[[维基百科:格式手册/日期和数字|格式手冊]]修正日期格式,由[[User:Vozhuo/Tool/MOSNUM dates|Javascript]]驅動'),
    zh_date:     wgULS('参考资料中文日期格式[[User:Vozhuo/Tool/MOSNUM dates|转ISO]]', '參考資料中文日期格式[[User:Vozhuo/Tool/MOSNUM dates|轉ISO]]'),
    fix_language: wgULS('[[User:Vozhuo/Tool/MOSNUM dates|修复]]英文语言参数', '[[User:Vozhuo/Tool/MOSNUM dates|修復]]英文語言參數'),
    del_language: wgULS('[[User:Vozhuo/Tool/MOSNUM dates|删除]]所有语言参数', '[[User:Vozhuo/Tool/MOSNUM dates|刪除]]所有語言參數'),
};
var type;
function check(type) {
	if (type == 'EN') {
		return summary.en_date;
	} else if (type == 'ZH') {
		return summary.zh_date;
	} else if (type == 'FIX') {
		return summary.fix_language;
	} else if(type == 'DEL') {
		return summary.del_language;
	}
}

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

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");
	//删去可能多余的df字段
	var editbox = $('#wpTextbox1'), text = editbox.val();
	text = text.replace(/\|\s*df\s*=\s*[\w-]*(?=[\s]*[|}])/gi, '');
	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 fix_language() {
	var language_list = [
    'Chinese',
    'Danish',
    'Dutch',
    'French',
    'Finnish',
    'German',
    'Hungarian',
    'Korean',
    'Italian',
    'Japanese',
    'Polish',
    'Portuguese',
    'Russian',
    'Spanish',
    'Swedish',
    'en-US',
    'en-GB'
];
	var language_codes = [
    'zh',
    'da',
    'nl',
    'fr',
    'fi',
    'de',
    'hu',
    'ko',
    'it',
    'ja',
    'pl',
    'pt',
    'ru',
    'es',
    'sv',
    'en',
    'en'
];
	var editbox = $('#wpTextbox1'), text = editbox.val();
	text = text.replace(/(\|\s*language\s*=\s*)([\w-]*)(?=[\s]*[|}])/gi, function (m, p1, p2) {
    for (var i = 0, len = language_list.length; i < len; i++)
    {
        if (p2.match(language_list[i])) {
            p2 = language_codes[i];
        }
    }
    return p1 + p2;
});
	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 fix_language_driver(e) {
	e.preventDefault();
	fix_language();
	edit_summary('FIX');
}

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