Khác biệt giữa các bản “MediaWiki:Common.js”

Từ Touhou Wiki - Việt Nam
Buớc tưới chuyển hướng Bước tới tìm kiếm
Dòng 77: Dòng 77:
 
},{
 
},{
 
't': 'cite web',
 
't': 'cite web',
'l': 'Đường dẫn, vd http://www.gensokyovn.net: <input class="eeinput" type="text" data-value="1"><br>Tiêu đề trang, vd The Truth about Shoutoku: <input class="eeinput" type="text" data-value="2"><br>Tác giả, vd Laura Robert: <input class="eeinput" type="text" data-value="3"><br>Trích dẫn, vd Trích dẫn: <input class="eeinput" type="text" data-value="4"><br>Ngày đăng, vd 20-8-2011: <input class="eeinput" type="text" data-value="5"><br>Ngày lấy bài viết, vd 22-6-2016: <input class="eeinput" type="text" data-value="6"><br>Ngôn ngữ, vd Tiếng Nhật: <input class="eeinput" type="text" data-value="7"><br>Lưu trữ: <input class="eeinput" type="text" data-value="8"> vào lúc <input class="eeinput" type="text" data-value="9">',
+
'l': 'Đường dẫn, vd http://www.gensokyovn.net: <input class="eeinput" type="text" data-value="1"><br>Tiêu đề trang, vd The Truth about Shoutoku: <input class="eeinput" type="text" data-value="2"><br>Tác giả, vd Laura Robert: <input class="eeinput" type="text" data-value="3"><br>Trích dẫn, vd Trích dẫn: <input class="eeinput" type="text" data-value="4"><br>Ngày đăng, vd 20/8/2011: <input class="eeinput" type="text" data-value="5"><br>Ngày lấy bài viết, vd 22/6/2016: <input class="eeinput" type="text" data-value="6"><br>Ngôn ngữ, vd Tiếng Nhật: <input class="eeinput" type="text" data-value="7"><br>Lưu trữ: <input class="eeinput" type="text" data-value="8"> vào lúc <input class="eeinput" type="text" data-value="9">',
 
'd': 'Thêm liên kết ngoài',
 
'd': 'Thêm liên kết ngoài',
 
'f': function(){
 
'f': function(){

Phiên bản lúc 09:25, ngày 13 tháng 7 năm 2019

/* Extra editor 
*/
// if(!document.getElementById('font1')) {
//     var link = document.createElement('link');
//     link.id = 'fon1';
//     link.rel = 'stylesheet';
//     link.href = 'https://fonts.googleapis.com/css?family=Andika|Pattaya';
//     document.head.appendChild(link);
// }
function insertAtCursor(myField, myValue) {
    //IE support
    if (document.selection) {
        myField.focus();
        sel = document.selection.createRange();
        sel.text = myValue;
    }
    //MOZILLA and others
    else if (myField.selectionStart || myField.selectionStart == '0') {
        var startPos = myField.selectionStart;
        var endPos = myField.selectionEnd;
        myField.value = myField.value.substring(0, startPos)
            + myValue
            + myField.value.substring(endPos, myField.value.length);
        myField.selectionStart = startPos + myValue.length;
        myField.selectionEnd = startPos + myValue.length;
    } else {
        myField.value += myValue;
    }
}
var button = [
	{
		't': 'ruby',
		'l': 'Chữ kanji, vd 神: <input class="eeinput" type="text" data-value="1"><br>Phiên ngữ, vd スペルカード: <input class="eeinput" type="text" data-value="2">',
		'd': 'Dùng tạo chữ tiếng Nhật có phiên âm trên đầu',
		'f': function(){
			var format = '{{ruby-ja|##1##|##2##}}', input = $('.eeinput'), inputl = input.length;
			for(var i = 1; i <= inputl; i++) format = format.replace('##' + i + '##', input.eq(i-1).val());
			return format;
		}
	},{
		't': 'title (typo)',
		'l': 'Nội dung gốc: <input class="eeinput" type="text" data-value="1"><br>Nội dung bổ nghĩa (hiện ra khi đưa chuột vào): <input class="eeinput" type="text" data-value="2">',
		'd': 'Dùng tạo câu có phần bổ nghĩa khi đưa chuột vào',
		'f': function(){
			var format = '{{H:title|##1##|##2##}}', input = $('.eeinput'), inputl = input.length;
			for(var i = 1; i <= inputl; i++) format = format.replace('##' + i + '##', input.eq(i-1).val());
			return format;
		}
	},{
		't': 'nihongo',
		'l': 'Nội dung: <input class="eeinput" type="text" data-value="1"><br>Chữ Nhật, vd 神: <input class="eeinput" type="text" data-value="2"><br>Phiên âm Nhật, vd kami: <input class="eeinput" type="text" data-value="3"><br>Phiên âm Hán Việt, nghĩa của từ, vd "Thần", trong "thần linh": <input class="eeinput" type="text" data-value="4">',
		'd': 'Dùng tạo chữ tiếng Nhật',
		'f': function(){
			var format = '{{nihongo|##1##|##2##|##3##|##4##}}', input = $('.eeinput'), inputl = input.length;
			for(var i = 1; i <= inputl; i++) format = format.replace('##' + i + '##', input.eq(i-1).val());
			return format;
		}
	},{
		't': 'lang',
		'l': 'Dùng ghi chữ tiếng nước ngoài<br>Từ khóa: <input class="eeinput" type="text" data-value="1"><br>Ngôn ngữ (mặc định ja): <input class="eeinput" type="text" data-value="2">',
		'd': 'Dùng cho các trang có tên trùng với tên của trang điều hướng',
		'f': function(){
			var format = '{{lang|##2##|##1##}}', input = $('.eeinput'), inputl = input.length;
			if(input.eq(1).val().length === 0) format = format.replace('##2##','ja');
			for(var i = 1; i <= inputl; i++) format = format.replace('##' + i + '##', input.eq(i-1).val());
			return format;
		}
	},{
		't': 'citation require',
		'l': 'Tên yêu cầu, mặc định "Cần dẫn nguồn": <input class="eeinput" type="text" data-value="1"><br>Lý do yêu cầu, ví dụ Khi nào: <input class="eeinput" type="text" data-value="2">',
		'd': 'Tạo chú thích',
		'f': function(){
			var format = '{{citation needed|name = ##1##|reason = ##2##}}', input = $('.eeinput'), inputl = input.length;
			for(var i = 1; i <= inputl; i++) format = format.replace('##' + i + '##', input.eq(i-1).val());
			return format;
		}
	},{
		't': 'cite web',
		'l': 'Đường dẫn, vd http://www.gensokyovn.net: <input class="eeinput" type="text" data-value="1"><br>Tiêu đề trang, vd The Truth about Shoutoku: <input class="eeinput" type="text" data-value="2"><br>Tác giả, vd Laura Robert: <input class="eeinput" type="text" data-value="3"><br>Trích dẫn, vd Trích dẫn: <input class="eeinput" type="text" data-value="4"><br>Ngày đăng, vd 20/8/2011: <input class="eeinput" type="text" data-value="5"><br>Ngày lấy bài viết, vd 22/6/2016: <input class="eeinput" type="text" data-value="6"><br>Ngôn ngữ, vd Tiếng Nhật: <input class="eeinput" type="text" data-value="7"><br>Lưu trữ: <input class="eeinput" type="text" data-value="8"> vào lúc <input class="eeinput" type="text" data-value="9">',
		'd': 'Thêm liên kết ngoài',
		'f': function(){
			var format = '{{cite web|url = ##1##|title = ##2##|author = ##3##|date = ##5##|accessdate = ##6##|language = ##7##|quote = ##4##|archiveurl = ##8##|archivedate = ##9##}}', input = $('.eeinput'), inputl = input.length;
			for(var i = 1; i <= inputl; i++) format = format.replace('##' + i + '##', input.eq(i-1).val());
			return format;
		}
	},{
		't': 'ref',
		'l': 'Tên của chú thích: <input class="eeinput" type="text" data-value="1"><br>Nội dung chú thích: <textarea rows="5" class="eeinput" style="width: 300px!important" data-value="2"></textarea>',
		'd': 'Tạo chú thích',
		'f': function(){
			var format = '<ref name="##1##">##2##</ref>', input = $('.eeinput'), inputl = input.length;
			for(var i = 1; i <= inputl; i++) format = format.replace('##' + i + '##', input.eq(i-1).val());
			return format;
		}
	},{
		't': 'media',
		'l': 'Tên file, vd Mamizou_Summon.jpg: <input class="eeinput" type="text" data-value="1"><br>Vị trí, mặc định bên phải: <input class="eeinput" type="checkbox" value="left" data-value="2"> Trái<br>Độ dài ảnh, ví dụ 100px: <input class="eeinput" type="text" data-value="3"><br>(*Để so sánh, khung nhập ở trên dài 220px*)<br>Chú thích ảnh: <input class="eeinput" type="text" data-value="4">',
		'd': 'Dùng chèn ảnh vào bài',
		'f': function(){
			var format = '[[File:##1##|thumb|###x###|##3##|##4##]]', input = $('.eeinput'), inputl = input.length;
			for(var i = 1; i <= inputl; i++) format = format.replace('##' + i + '##', input.eq(i-1).val());
			if(input.eq(1).prop('checked') === true) format = format.replace('###x###', 'left');
				else format.replace('###x###', 'right');
			return format;
		}
	},{
		't': 'title',
		'l': 'Số lượng danh hiệu: <input class="eeinput" type="text" data-value="1">',
		'd': 'Thêm bảng danh hiệu',
		'f': function(){
			var format = '{{hidden begin\n| title = Danh hiệu\n| fluid = true\n| titlestyle = background: #f3b7e1; text-align:center\n| bodystyle = border: 2px solid #f3b7e1; clear: both\n}}\n{{info card\n|##1##\n}}\n{{hidden end}}<hr>';
			var inputl = parseInt($('.eeinput').eq(0).val());
			var insert = '';
			for(var i = 1; i <= inputl; i++) insert += '\n{{title\n | jap = /* Tiếng nhật ' + i + ' */\n | eng = /* Tiếng Anh ' + i + ' */\n | vie = /* Tiếng Việt ' + i + ' */\n | app = /* Xuất hiện ' + i + ' */\n}}';
			format = format.replace('##1##', insert);
			return format;
		}
	},{
		't': 'music',
		'l': 'Số lượng nhạc nền: <input class="eeinput" type="text" data-value="1">',
		'd': 'Thêm bảng nhạc nền',
		'f': function(){
			var format = '{{hidden begin\n| title = Nhạc nền\n| fluid = true\n| titlestyle = background: #f3b7e1; text-align:center\n| bodystyle = border: 2px solid #f3b7e1; clear: both\n}}\n{{music card\n|##1##\n}}\n{{hidden end}}<hr>';
			var inputl = parseInt($('.eeinput').eq(0).val());
			var insert = '';
			for(var i = 1; i <= inputl; i++) insert += '\n{{music\n | jap = /* Tiếng nhật ' + i + ' */\n | eng = /* Tiếng Anh ' + i + ' */\n | app = /* Xuất hiện ' + i + ' */\n}}';
			format = format.replace('##1##', insert);
			return format;
		}
	},{
		't': 'appearance',
		'l': 'Số lượt xuất hiện trong game: <input class="eeinput" type="text" data-value="1"><br>Số lượt xuất hiện trong ấn phẩm: <input class="eeinput" type="text" data-value="2"><br>Số lượt xuất hiện trong CD: <input class="eeinput" type="text" data-value="3"><br>Số lượt xuất hiện khác: <input class="eeinput" type="text" data-value="4">',
		'd': 'Thêm liên kết ngoài',
		'f': function(){
			var format = '{{hidden begin\n| title = Xuất hiện\n| fluid = true\n| titlestyle = background: #f3b7e1; text-align:center\n| bodystyle = border: 2px solid #f3b7e1; clear: both\n}}\n##1##{{hidden end}}<hr>', input = $('.eeinput');
			var inputl, insert = '', insert2 = '';
			var j;
			inputl = parseInt(input.eq(0).val());
			if(isNaN(inputl) === false && inputl !== 0) insert2 = '<center>\'\'\'Game\'\'\'</center>\n{{appearance card\n|##1##\n}}\n';
			for(var i = 1; i <= inputl; i++) insert += '\n{{appearance\n | app = /* Tác phẩm ' + i + ' */\n | role = /* Vai trò ' + i + ' */\n}}';
			insert2 = insert2.replace('##1##', insert);
			insert = '';
			inputl = parseInt(input.eq(1).val());
			if(isNaN(inputl) === false && inputl !== 0) insert2 += '<center>\'\'\'Ấn phẩm\'\'\'</center>\n{{appearance card\n|##1##\n}}\n';
			for(i = 1; i <= inputl; i++) insert += '\n{{appearance\n | app = /* Tác phẩm ' + i + ' */\n | role = /* Vai trò ' + i + ' */\n}}';
			insert2 = insert2.replace('##1##', insert);
			insert = '';
			inputl = parseInt(input.eq(2).val());
			if(isNaN(inputl) === false && inputl !== 0) insert2 += '<center>\'\'\'CD\'\'\'</center>\n{{appearance card\n|##1##\n}}\n';
			for(i = 1; i <= inputl; i++) insert += '\n{{appearance\n | app = /* Tác phẩm ' + i + ' */\n | role = /* Vai trò ' + i + ' */\n}}';
			insert2 = insert2.replace('##1##', insert);
			insert = '';
			inputl = parseInt(input.eq(3).val());
			if(isNaN(inputl) === false && inputl !== 0) insert2 += '<center>\'\'\'Khác\'\'\'</center>\n{{appearance card\n|##1##\n}}\n';
			for(i = 1; i <= inputl; i++) insert += '\n{{appearance\n | app = /* Tác phẩm ' + i + ' */\n | role = /* Vai trò ' + i + ' */\n}}';
			insert2 = insert2.replace('##1##', insert);
			format = format.replace('##1##', insert2);
			return format;
		}
	},{
		't': 'story',
		'l': 'Tên của cốt truyện, vd [[Ten Desires]]: <input class="eeinput" style="width: 300px!important" type="text" data-value="1"><br>',
		'd': 'Dùng tạo mục chứa cốt truyện',
		'f': function(){
			var format = '{{hidden begin\n| title = ##1##\n| titlestyle = background: #ddd; text-align:center\n}}\n/* Nội dung cốt truyện */\n{{hidden end}}<hr>', input = $('.eeinput'), inputl = input.length;
			for(var i = 1; i <= inputl; i++) format = format.replace('##' + i + '##', input.eq(i-1).val());
			return format;
		}
	},{
		't': 'skill',
		'l': 'Họ tên nhân vật: <input class="eeinput" style="width: 300px!important" type="text" data-value="1"><br>',
		'd': 'Dùng tạo mục chứa các đòn đánh',
		'f': function(){
			var format = '{{hidden begin\n| title = Các đòn đánh\n| fluid = true \n| titlestyle = background: #ebce47; text-align:center\n| bodystyle  = border: 2px solid #ebce47;\n| titleclass = spoiler-skill\n| bodyclass = spoiler-skill\n}}\n{{#lsth:##1##/Đòn đánh|Danh sách}}\n{{hidden end}}', input = $('.eeinput'), inputl = input.length;
			for(var i = 1; i <= inputl; i++) format = format.replace('##' + i + '##', input.eq(i-1).val());
			return format;
		}
	},{
		't': 'spell',
		'l': 'Họ tên nhân vật: <input class="eeinput" style="width: 300px!important" type="text" data-value="1"><br>',
		'd': 'Dùng tạo mục chứa các spell card',
		'f': function(){
			var format = '{{hidden begin\n| title = Spell card\n| fluid = true \n| titlestyle = background: #87ceeb; text-align:center\n| bodystyle  = border: 2px solid #87ceeb;\n| titleclass = spoiler-spell\n| bodyclass = spoiler-spell\n}}\n{{#lsth:##1##/Spell card|Danh sách}}\n{{hidden end}}', input = $('.eeinput'), inputl = input.length;
			for(var i = 1; i <= inputl; i++) format = format.replace('##' + i + '##', input.eq(i-1).val());
			return format;
		}
	},{
		't': 'profile',
		'l': 'Tên của cốt truyện, vd [[Urban Legend in Limbo]] - Trang web chính thức: <input class="eeinput" style="width: 300px!important" type="text" data-value="1"><br>',
		'd': 'Dùng tạo mục chứa các thông tin cá nhân của nhân vật',
		'f': function(){
			var format = '{{hidden begin\n| title = ##1##\n| fluid = true\n| bodystyle = border: 2px solid #b9d379;\n| titlestyle = background: #b9d379; text-align:center\n}}\nNội dung bên trong\n{{hidden end}}<hr>', input = $('.eeinput'), inputl = input.length;
			for(var i = 1; i <= inputl; i++) format = format.replace('##' + i + '##', input.eq(i-1).val());
			return format;
		}
	},{
		't': 'profile (box)',
		'l': '',
		'd': 'Dùng tạo hộp ghi thông tin cá nhân song ngữ',
		'f': function(){
			var format = '{{profile\n| jap = \n| vie = \n}}', input = $('.eeinput'), inputl = input.length;
			for(var i = 1; i <= inputl; i++) format = format.replace('##' + i + '##', input.eq(i-1).val());
			return format;
		}
	},{
		't': 'fandom',
		'l': 'Tên nhân vật, ví dụ Koishi: <input class="eeinput" type="text" data-value="1"><br>',
		'd': 'Dùng tạo mục chứa thông tin fandom',
		'f': function(){
			var format = '{{hidden begin\n| title = ##1## trong fandom\n| titlebody = antictoc\n| bodystyle = antitoc\n| titlestyle = background: #47ebce; text-align:center\n| bodystyle = border: 2px solid #b9d379;\n}}\n/* Nội dung */\n{{hidden end}}<hr>', input = $('.eeinput'), inputl = input.length;
			for(var i = 1; i <= inputl; i++) format = format.replace('##' + i + '##', input.eq(i-1).val());
			return format;
		}
	},{
		't': 'sprite',
		'l': 'Tên file, vd Mamizou_Summon.jpg: <input class="eeinput" type="text" data-value="1"><br>Chú thích sprite: <input class="eeinput" type="text" data-value="2">',
		'd': 'Dùng chèn sprite',
		'f': function(){
			var format = '{{Sprite\n | file = [[File:##1##]]\n | desc = ##2##\n}}', input = $('.eeinput'), inputl = input.length;
			for(var i = 1; i <= inputl; i++) format = format.replace('##' + i + '##', input.eq(i-1).val());
			return format;
		}
	},{
		't': 'track',
		'l': 'Số thứ tự, vd 01: <input class="eeinput" type="text" data-value="1"><br>Tên tiếng Nhật: <input class="eeinput" type="text" data-value="2"><br>Tên tiếng Anh: <input class="eeinput" type="text" data-value="3"><br>Tên tiếng Việt: <input class="eeinput" type="text" data-value="4"><br>Độ dài, vd 03:23: <input class="eeinput" type="text" data-value="5"><br>Lời dịch, vd Lời dịch:Border of Life: <input class="eeinput" type="text" data-value="6">',
		'd': 'Dùng tạo thông tin nhạc',
		'f': function(){
			var format = '{{track\n|order = ##1##\n|name-org = ##2##\n|name-eng = ##3##\n|name-vie = ##4##\n|length = ##5##\n|lyric = ##6##\n}}', input = $('.eeinput'), inputl = input.length;
			for(var i = 1; i <= inputl; i++) format = format.replace('##' + i + '##', input.eq(i-1).val());
			return format;
		}
	},{
		't': 'H:title',
		'l': 'Phần câu: <input class="eeinput" type="text" data-value="1"><br>Phần chú thích (hiện ra khi lia chuột vào): <input class="eeinput" type="text" data-value="2">',
		'd': 'Dùng tạo câu có phần chú thích đơn giản (hiện chú thích khi đưa chuột vào)',
		'f': function(){
			var format = '{{H:title|##1##|##2##}}', input = $('.eeinput'), inputl = input.length;
			for(var i = 1; i <= inputl; i++) format = format.replace('##' + i + '##', input.eq(i-1).val());
			return format;
		}
	},{
		't': 'dual',
		'l': 'Ước tính số đoạn: <input class="eeinput" type="text" data-value="1">',
		'd': 'Bảng dịch song ngữ',
		'f': function(){
			var format = '{{dual card\n| image = \n| content = ##1##}}\n{{hidden end}}<hr>';
			var inputl = parseInt($('.eeinput').eq(0).val());
			var insert = '';
			for(var i = 1; i <= inputl; i++) insert += '\n{{dual\n | jap = /* Tiếng nhật ' + i + ' */\n | vie = /* Tiếng Việt ' + i + ' */\n}}';
			format = format.replace('##1##', insert);
			return format;
		}
	},{
		't': 'other use',
		'l': 'Phải đặt template này ngay đầu bài wiki<br>Từ khóa: <input class="eeinput" type="text" data-value="1">',
		'd': 'Dùng cho các trang có tên trùng với tên của trang điều hướng',
		'f': function(){
			var format = '{{other use|##1##}}', input = $('.eeinput'), inputl = input.length;
			for(var i = 1; i <= inputl; i++) format = format.replace('##' + i + '##', input.eq(i-1).val());
			return format;
		}
	},{
		't': 'confuse',
		'l': 'Phải đặt template này ngay đầu bài wiki<br>Template này không cần thông số',
		'd': 'Cảnh báo sử dụng từ ngữ khác biệt với bản gốc, ví dụ divine spirit vs hồn thiêng',
		'f': function(){
			var format = '{{language confuse}}';
			return format;
		}
	},{
		't': 'dual control',
		'l': 'Phải đặt template này ngay đầu bài wiki<br>Template này không cần thông số',
		'd': 'Bảng điều khiển song ngữ',
		'f': function(){
			var format = '{{dual control box}}';
			return format;
		}
	}
];
var latest;
$(function(){
	$('.editOptions').before('<div class="extraeditOptions"><table class="eetable"><tr><td rowspan="2" class="eecell1"><button type="button" class="eeexecute">Tạo!</button><div class="eebuttonlist"></div></td><td><div class="eedesc" class="eecell2"></div></td></tr><tr><td><div class="eeinterface"></div></td></tr></table></div>');
	var a = $('.extraeditOptions'), e = $('.eebuttonlist'), r = $('.eeinterface'), d = $('.eedesc');
	var buttonl = button.length;
	var target;
	for(var i = 0; i < buttonl; i++) {
		target = button[i];
		e.append('<button class="eebutton" type="button" value="' + i + '">' + target.t + '</button> ');
	}
	var but = $('.eebutton'), butl = but.length;
	$('.eeexecute').on('click',function(){
		var t = $('#wpTextbox1')[0];
		var target = button[latest];
		insertAtCursor(t,target.f());
		t.focus();
	});
	for(i = 0; i < butl; i++) {
		but.eq(i).on('click',function(){
			var a = $(this);
			var alias = parseInt(a.val());
			var target = button[alias];
			r.html(target.l);
			d.html(target.d);
			latest = alias;
		});
	}
});
function navigatorBoxCreate() {
	var content = '<div class="mobile_box navigator_box" style="display: none"><center><b>Bảng định hướng</b><br>'
	+ '<small><i>Bấm vào các ô để mở trang định hướng tương ứng</i></small></center>';
	var appGroup = $('.gridTable__wrapper--appearance');
	for(var i = 0; i < appGroup.length; i++){
		var appItem = appGroup.eq(i);
		var label = appItem.prev('center').text();
		var colorset;
		switch(label) {
			case 'Game' : colorset = '#f1abdc'; break;
			case 'Ấn phẩm' : colorset = '#87ceeb'; break;
			case 'CD' : colorset = '#ebce87'; break;
			case 'Khác' : colorset = '#b9d379'; break;
			case 'Game (PC-98)' : colorset = '#ffbbec'; break;
			case 'Ấn phẩm (PC-98)' : colorset = '#97defb'; break;
			case 'CD (PC-98)' : colorset = '#fbde97'; break;
			case 'Khác (PC-98)' : colorset = '#e9e389'; break;
		}
		var subContent = '<div class="navigator__category--label">' + label + '</div><div class="navigator__category--wrapper">';
		var itemGroup = appItem.find('.navigation--box');
		for(var j = 0; j < itemGroup.length; j++)
			subContent += '<div class="navigator__category--item" style="background-color: ' + colorset + '">' + itemGroup.eq(j).html() + '</div>';
		subContent += '</div>';
		if(itemGroup.length > 0)
			content += subContent;
	}
	content += '</div>';
	if(appGroup.length > 0)
		$('#mw-content-text').append(content);
};
function tabContentCreate () {
	var group1 = $('.tab_content_container'), group1l = group1.length;
	for(var i = 0; i < group1l; i++){
		var group = group1.eq(i);
		var container = group.find('.tab_content_button_container').eq(0);
		var default_div = group.find('.tab_content_default').eq(0);
		var width = default_div.attr('data-width');
		var group2 = group.find('.tab_content_button'), group2l = group2.length;
		for(var j = 0; j < group2l; j++){
			group2.eq(j).appendTo(container);
		}
		var group2 = group.find('.tab_content_button'), group2l = group2.length;
		for(var j = 0; j < group2l; j++){
			group2.eq(j).css('width', width);
			group2.eq(j).on('click', function(){
				var a = $(this);
				var key = a.attr('data-index');
				var tab = a.parents('.tab_content_container').find('.tab_content_content[data-index="' + key + '"]');
				a.parents('.tab_content_container').find('.tab_content_content').css('display', 'none');
				a.parents('.tab_content_button_container').find('.tab_content_button').css({
					'cursor' : 'pointer',
					'background-color' : '#eee',
					'box-shadow' : '0 0 3px 0 #000'
				});
				tab.css('display', 'block');
				a.css({
					'cursor' : 'default',
					'background-color' : '#fff',
					'box-shadow' : '0 0 2px 0 #000 inset, 0 0 2px 0 #000 inset'
				})
			});
		}
		var default_value = default_div.attr('data-value');
		if(default_value === '0'){
			group.find('.tab_content_button').eq(0).trigger('click');
		} else {
			group.find('.tab_content_button[data-index="' + default_value + '"]').eq(0).trigger('click');
		}
	}
}
function sort(items, index, direction){
	var sampleCollector = {
		key: [],
		content: {}
	};
	for(var i = 0; i < items.length; i++){
		var item = items.eq(i);
		var sample = item.find('[data-index="' + index + '"]').eq(0);
		sampleCollector.key.push(sample.text() + i);
		sampleCollector.content[sample.text() + i] = item.html();
	}
	if(direction === 'down') sampleCollector.key.sort(function(a, b){return a.localeCompare(b)});
	else sampleCollector.key.sort(function(a, b){return b.localeCompare(a)});
	for(var i = 0; i < items.length; i++){
		items.eq(i).html(sampleCollector.content[sampleCollector.key[i]]);
	}
}
function sorterInterface(target, index, direction){
	var items = target.children();
	var selectedItems = $([]);
	for(var i = 0; i < items.length; i++){
		var item = items.eq(i);
		if(item.hasClass('row--avoidSort')) {
			sort(selectedItems, index, direction);
			selectedItems = $([]);
		} else {
			selectedItems = selectedItems.add(item);
		}
	}
	if(selectedItems.length !== 0){
		sort(selectedItems, index, direction);
		selectedItems = $([]);
	}
}
$(function() {
	//Custom
	//Format
	var group2 = $('.antitoc'), group2l = group2.length;
	for(var i = 0; i < group2l; i++) {
		$('center > b').wrap('<div class="info_table_format"></div>');
	}
	//Dual control box
	$('.dualControl__button.button1').on('click',function(event, force){
		if($(this).attr('data-status') === 'off'){
			$('.dualControl__button[data-status="on"]').trigger('click', ['force']);
			$(this).attr('data-status', 'on').css({
				'border-color': '#ff1a1a',
				'cursor': 'auto',
				'font-weight': 'bold'
			});
			var containerGroup = $('.profile__card--wrapper');
			for(var cnt = 0; cnt < containerGroup.length; cnt++) containerGroup.eq(cnt).css('grid-template-columns', '1fr');
			var group = $('.profile__card--cell');
			for(var cnt = 0; cnt < group.length; cnt++){
				if(cnt % 2 === 0) group.eq(cnt).addClass('forceVisible');
				else group.eq(cnt).css('display', 'none');
			}
		} else if(force === 'force') {
			$(this).attr('data-status', 'off').css({
				'border-color': '#ffcbcb',
				'cursor': 'pointer',
				'font-weight': 'normal'
			});
		}
	});
	$('.dualControl__button.button2').on('click',function(event, force){
		if($(this).attr('data-status') === 'off'){
			$('.dualControl__button[data-status="on"]').trigger('click', ['force']);
			$(this).attr('data-status', 'on').css({
				'border-color': '#df9f00',
				'cursor': 'auto',
				'font-weight': 'bold'
			});
			var containerGroup = $('.profile__card--wrapper');
			for(var cnt = 0; cnt < containerGroup.length; cnt++) containerGroup.eq(cnt).css('grid-template-columns', '1fr 1fr');
			var group = $('.profile__card--cell');
			for(var cnt = 0; cnt < group.length; cnt++){
				if(cnt % 2 === 0) group.eq(cnt).addClass('forceVisible');
				else group.eq(cnt).css('display', 'block');
			}
		} else if(force === 'force') {
			$(this).attr('data-status', 'off').css({
				'border-color': '#fff6cb',
				'cursor': 'pointer',
				'font-weight': 'normal'
			});
		}
	});
	$('.dualControl__button.button3').on('click',function(event, force){
		if($(this).attr('data-status') === 'off'){
			$('.dualControl__button[data-status="on"]').trigger('click', ['force']);
			$(this).attr('data-status', 'on').css({
				'border-color': '#1a1aff',
				'cursor': 'auto',
				'font-weight': 'bold'
			});
			var containerGroup = $('.profile__card--wrapper');
			for(var cnt = 0; cnt < containerGroup.length; cnt++) containerGroup.eq(cnt).css('grid-template-columns', '1fr');
			var group = $('.profile__card--cell');
			for(var cnt = 0; cnt < group.length; cnt++){
				if(cnt % 2 === 0) group.eq(cnt).removeClass('forceVisible');
				else group.eq(cnt).css('display', 'block');
			}
		} else if(force === 'force') {
			$(this).attr('data-status', 'off').css({
				'border-color': '#cbcbff',
				'cursor': 'pointer',
				'font-weight': 'normal'
			});
		}
	});
	navigatorBoxCreate();
    $(".showExtra").click(function() {
    	$(this).closest("table").find(".extraRow").fadeIn("slow");$(this).closest("tr").remove();
    });
    filterTable();
    //Tab
    tabContentCreate();
    //Remove execcssive br tag in box
    $('.infobox_outer > p > br').remove();
    //Sortable
    var sorters = $('.cell--sorter');
    for(var i = 0; i < sorters.length; i++){
    	var sorter = sorters.eq(i);
    	sorter.on('click', function(){
    		var t = $(this);
    		var target = t.parents('.sortable');
    		var sorters = target.find('.cell--sorter');
    		for(var i = 0; i < sorters.length; i++){
    			sorters.eq(i).removeClass('cell--sorterUp').removeClass('cell--sorterDown');
    		}
    		var direction = t.attr('data-direction');
    		if(direction === undefined || direction === 'up'){
    			t.attr('data-direction', 'down');
    			t.addClass('cell--sorterUp');
    		} else if(direction === 'down'){
    			t.attr('data-direction', 'up');
    			t.addClass('cell--sorterDown');
    		}
    		var index = t.attr('data-index');
    		direction = t.attr('data-direction');
    		if(target === undefined || direction === undefined || index === undefined) return;
    		else {
    			sorterInterface(target, index, direction);
    		}
    	});
    }
});
/* Import more specific scripts if necessary */
function customizeWikiEditorToolbar() {
    $( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
        'section': 'main',
        'group': 'insert',
        'tools': {
            'lang-ja': {
                label: 'Designate text fragment as written in Japanese',
                type: 'button',
                icon: '/images/7/79/WikiEd-lang-ja.png',
                action: {
                    type: 'encapsulate',
                    options: {
                        pre: "{{lang|ja|",
                        post: "}}",
                        peri: "\u6771\u65b9"
                    }
                }
            }
        }
    } );
}

mw.loader.using('mediawiki.action.edit', function () {
    /* add button for {{lang|ja|}} to editor toolbar */
    /* check for WikiEditor first, then fall back on default */
    if ( mw.user.options.get('usebetatoolbar') ) {
        mw.loader.using( 'ext.wikiEditor.toolbar', function () {
            $(document).ready( customizeWikiEditorToolbar );
        });
    } else {
        mw.toolbar.addButton(
            "/images/d/da/Lang_ja.png", // imageFile
            "Designate text fragment as written in Japanese", // speedTip
            "{{lang|ja|", // tagOpen
            "}}", // tagClose
            "\u6771\u65b9" // sample text
        );
    }
});

(function(){
var config = {
	song_info_url: mw.config.get('wgScript') + "?title=Touhou_Wiki:SongSource.json&action=raw&ctype=application/json",
	
	source_regexp: /^\s*source:\s*(.*)/,
	original_title_regexp: /^\s*original title:\s*(.*)/,
	tracks_heading_regexp: /^\s*Tracks\s*$/,
	
	categories: ["Arrangement CDs", "Official CDs"],
};

jQuery.ajax({
	url: mw.config.get('wgScript') + '?title=MediaWiki:SongSource.js&action=raw&ctype=text/javascript',
	dataType: "script",
	cache: "true",
	success: function() {
		initSongSource(config);	
	},
});

})();

importScript("MediaWiki:ToggleAll.js");

    if ($(window).width() < 1025){
            $("#mp-WorksColumns .mp-image").addClass("mp-smaller-image");
            $("#mp-News .mp-image").addClass("mp-smaller-image");
    }
     
    $(window).resize(function(){
            if ($(this).width() < 1025){
                    $("#mp-WorksColumns .mp-image").addClass("mp-smaller-image");
                    $("#mp-News .mp-image").addClass("mp-smaller-image");
            } else {
                    $("#mp-WorksColumns .mp-image").removeClass("mp-smaller-image");
                    $("#mp-News .mp-image").removeClass("mp-smaller-image");
            }
    });
    
// check JSON pages for syntax validity before saving
// note that it's "weak" check, just for the convenience
// and it can be easily circumvented
if (/\.json$/.test(wgTitle)) {
    // if there's no edit form, nothing bad will happen
    $("#editform").submit(function(evt) {
        var data = $(this).find("#wpTextbox1").val();
        
        if (data !== undefined) {
            try {
                $.parseJSON(data);
            } catch (e) {
                if (!window.confirm("The JSON data appears invalid. Are you sure you want to proceed?")) {
                    evt.preventDefault();
                }
            } 
        } 
    });
}

/* Sitenotice autoscroll */
function AutoScroll(obj){   
        $(obj).find("ul:first").animate({   
                marginTop:"-25px"   
        },500,function(){   
                $(this).css({marginTop:"0px"}).find("li:first").appendTo(this);   
        });      
}
$(document).ready(function(){      
setInterval('AutoScroll("#scrollDiv")',5000);      
});

// Filter Table Functions
function filterTable(){
	$("table.filterable").each(function(){
		var i=0;
		var cols;
		$(this).find("tr:first-child th, tr:first-child td").each(function(){
			if (!$(this).hasClass("unfilterable")){
				cols=[];
				$(this).closest("table").find("tr td:nth-child("+(i+1)+")").each(function(){
					cols.push($(this).text());
				});
				cols = arrayUnique(cols);
				l=0;
				for (j=0; j<cols.length; j++){
					t=charLength(cols[j]);
					if (l<t) l=t;
				}
				$(this).css("position","relative");
				$(this).html('<a href="javascript:void(0)" class="showFilterMenu">'+$(this).html()+'▼</a>');
				$(this).append($('<div class="filterMenu hidden" style="position: absolute; top: '+$(this).height()+35+'px; left: 0; width: '+(50+l*7)+'px; text-align: left; padding: 5px; border: 1px #333333 solid; -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; background: inherit; z-index: 1"></div>'));
				for (j=0; j<cols.length; j++){
					$(this).find(".filterMenu").append('<div><input type="checkbox" value="'+cols[j]+'" col="'+(i+1)+'" class="filterOption" checked>'+cols[j]+'</div>');
				}
			}
			i++;
		});
		$(this).find("tr:nth-child(n+1)").attr("condition", 0);
	});
	$(".showFilterMenu").click(function(){
		if ($(this).parent().find(".filterMenu:visible").length){
			$(".filterMenu").slideUp(150);
		}else{
			$(".filterMenu").slideUp(150);
			$(this).parent().find(".filterMenu").slideDown(150);
		}
	});
	$(document).mouseup(function(e){
		var container = $(".filterMenu");
	    if (!container.is(e.target) && container.has(e.target).length === 0){
	        container.slideUp(150);
	    }
	});
	$(".filterOption").click(function(){
		col=$(this).attr("col");
		val=$(this).val();
		if ($(this).is(":checked")) chg=1; else chg=-1;
		$(this).closest("table").find("tr:nth-child(n+1)").each(function(){
			if ($(this).find("td:nth-child("+col+")").text()==val){
				var cond=$(this).attr("condition");
				cond=Number(cond)+chg;
				$(this).attr("condition", cond);
				if (cond===0) $(this).show();
				else $(this).hide();
			}
		});
	});
}

function arrayUnique(a) {
    return a.reduce(function(p, c) {
        if (p.indexOf(c) < 0) p.push(c);
        return p;
    }, []);
}

function charLength(s){
	return s.length+(encodeURI(s).split(/%..|./).length-1-s.length)/2;
}