Chú ý: Sau khi lưu thay đổi trang, bạn phải xóa bộ nhớ đệm của trình duyệt để nhìn thấy các thay đổi. Google Chrome, Firefox, Internet ExplorerSafari: Giữ phím ⇧ Shift và nhấn nút Reload/Tải lại trên thanh công cụ của trình duyệt. Để biết chi tiết và hướng dẫn cho các trình duyệt khác, xem Trợ giúp:Xóa bộ nhớ đệm.

mw.loader.using(['mediawiki.api', 'mediawiki.Title'], function () {
	"use strict";

	var config = mw.config.get(['wgNamespaceNumber', 'wgTitle', 'wgUserGroups', 'skin']);

	function removeBlanks(arr) {
		var ret = [];
		var i, len;
		for (i = 0, len = arr.length; i < len; i++) {
			var s = arr[i];
			s = s.trim();
			if (s) {
				ret.push(s);
			}
		}
		return ret;
	}

	function doMassDelete() {
		document.getElementById("wpMassDeleteSubmit").disabled = true;
		var articles = document.getElementById("wpMassDeletePages").value.split("\n");
		articles = removeBlanks(articles);
		if (!articles.length) {
			return;
		}
		var
			api = new mw.Api(),
			wpMassDeleteReasons = document.getElementById("wpMassDeleteReasons").value,
			wpMassDeleteReason = document.getElementById("wpMassDeleteReason").value,
			deleted = 0,
			failed = [],
			error = [],
			deferreds = [],
			wpDelTalkPage = document.getElementById("wpDelTalkPage").checked,
			reason = wpMassDeleteReasons == "other" ?
				wpMassDeleteReason :
				wpMassDeleteReasons + (wpMassDeleteReason ? ": " + wpMassDeleteReason : ""),
			onSuccess = function () {
				deleted++;
				document.getElementById("wpMassDeleteSubmit").value = "(" + deleted + ")";
			};

		function makeDeleteFunc(article) {
			return function () {
				return $.Deferred(function (deferred) {
					var promise = api.postWithToken('csrf', {
						format: 'json',
						action: 'delete',
						title: article,
						deletetalk: wpDelTalkPage,
						reason: reason
					});
					promise.done(onSuccess);
					promise.fail(function (code, obj) {
						failed.push(article);
						error.push(obj.error.info);
					});
					promise.always(function () {
						deferred.resolve();
					});
				});
			};
		}

		// Make a chain of deferred objects. We chain them rather than execute them in
		// parallel so that we don't make 1000 simultaneous delete requests and bring the
		// site down. We use deferred objects rather than the promise objects returned
		// from the API request so that the chain continues even if some articles gave
		// errors.
		var deferred = makeDeleteFunc(articles[0])();
		for (var i = 1, len = articles.length; i < len; i++) {
			deferred = deferred.then(makeDeleteFunc(articles[i]));
		}

		// Show the output and do cleanup once all the requests are done.
		$.when(deferred).then(function () {
			document.getElementById("wpMassDeleteSubmit").value = "Done (" + deleted + ")";
			if (failed.length) {
				var $failedList = $('<ul>');
				for(var x = 0; x < failed.length; x++) {
					// Link the titles in the "failed" array
					var failedTitle = mw.Title.newFromText(failed[x]);
					var $failedItem = $('<li>');
					if (failedTitle) {
						$failedItem.append( $('<a>')
							.attr('href', failedTitle.getUrl())
							.text(failed[x])
						);
					} else {
						$failedItem.text(failed[x]);
					}
					$failedItem.append(document.createTextNode(': ' + error[x]));
					$failedList.append($failedItem);
				}
				$('#wpMassDeleteFailedContainer')
					.append($('<br />'))
					.append($('<b>')
						.text('Failed deletions:')
					)
					.append($failedList);
			}
		});
	}
	 
	function massdeleteform() {
	    var bodyContent;
		switch (mw.config.get('skin')) {
			case 'modern':
				bodyContent = 'mw_contentholder';
				break;
			case 'cologneblue':
				bodyContent = 'article';
				break;
			case 'vector':
			case 'monobook':
			case 'vector':
			default:
				bodyContent = 'bodyContent';
				break;
		}
		document.getElementsByTagName("h1")[0].textContent = "Xóa hàng loạt";
		document.title = "Xóa hàng loạt - Wikipedia tiếng Việt";
		document.getElementById(bodyContent).innerHTML = '<h3 id="siteSub">Công cụ xóa hàng loạt cho Wikipedia tiếng Việt</h3><br /><br />' +
			'<form id="wpMassDelete" name="wpMassDelete">' +
			'<p>Chào mừng bạn đến với biểu mẫu xóa hàng loạt, trang mà bạn có thể sử dụng để xóa hàng loạt một vài trang. Nếu bạn đang xóa nhiều trang do một người dùng tạo, hãy sử dụng <a href="/wiki/Special:Nuke">Đặc biệt:Xóa hàng loạt</a>!</p>' +
            '<p>Nếu bạn muốn xóa <b>nhiều hơn 10 trang</b>, vui lòng <a href="/wiki/Special:UserRights">xin cờ</a> bot trước để tránh làm tràn <a href="/wiki/Special:RecentChanges">Đặc biệt:Thay đổi gần đây</a>, cảm ơn!</p>' +
            '<p>Vui lòng thêm danh sách các trang bạn muốn xóa vào hộp văn bản bên dưới, liệt kê một trang trên một dòng. Cảm ơn bạn đã sử dụng công cụ này!</p>' +
            '<div id="wpMassDeleteFailedContainer"></div>' +
			'<br />' +
				'Trang cần xóa (mỗi trang một dòng):<br />' +
					'<textarea tabindex="1" accesskey="," name="wpMassDeletePages" id="wpMassDeletePages" rows="10" cols="80"></textarea>' +
				'<br /><table style="background-color:transparent">' +
					'<tr><td>Lý do xóa:</td>' +
						'<td><select id="wpMassDeleteReasons">' +
							'<optgroup label="Lý do khác">' +
								'<option value="other">Lý do khác</option>' +
							'</optgroup>' +
							'<optgroup label="Tiêu chí xóa nhanh">' +
								'<optgroup label="Chung">' +
									'<option value="[[WP:XN#C1|C1]]: [[Wikipedia:Nội dung vô nghĩa|Nội dung vô nghĩa]] hoặc thiếu mạch lạc">C1: Nội dung vô nghĩa</option>' +
									'<option value="[[WP:XN#C2|C2]]: Trang thử nghiệm">C2: Trang thử nghiệm</option>' +
									'<option value="[[WP:XN#C3|C3]]: [[Wikipedia:Phá hoại|Phá hoại]]">C3: Phá hoại</option>' +
									'<option value="[[WP:XN#C3|C3]]: [[Wikipedia:Không tung tin vịt|Tin vịt]] rõ ràng">C2: Tin vịt</option>' +
									'<option value="[[WP:XN#C4|C4]]: Trang có nội dung của một trang đã từng bị [[WP:XOA|xóa]]">C4: Trang đã từng bị xóa</option>' +
									'<option value="[[WP:XN#C5|C5]]: Trang do thành viên đang bị [[WP:CẤM|cấm]] hoặc [[WP:BAN|cấm chỉ]] tạo">C5: Thành viên bị cấm</option>' +
									'<option value="[[WP:XN#C6|C6]]: Xóa để thực hiện các tác vụ bảo trì kĩ thuật">C6: Dọn dẹp</option>' +
									'<option value="[[WP:XN#C7|C7]]: Tác giả yêu cầu xóa hoặc tẩy trống trang">C7: Tác giả</option>' +
									'<option value="[[WP:XN#C8|C8]]: Trang liên quan đến trang không tồn tại hoặc đã bị xóa">C8: Trang liên quan đến trang không tồn tại</option>' +
									'<option value="[[WP:XN#C9|C9]]: Rõ ràng là [[WP:KHONGQUANGCAO|quảng cáo]]">C9: Quảng cáo</option>' +
									'<option value="[[WP:XN#C10|C10]]: Tên trang sai">C10: Tên trang sai</option>' +
									'<option value="[[WP:XN#C11|C11]]: [[WP:ATP|Trang tấn công]] hoặc [[WP:BLP|tiểu sử người đang sống]] không nguồn hoàn toàn tiêu cực">C11: Trang tấn công</option>' +
									'<option value="[[WP:XN#C12|C12]]: Trang không được dịch">C12: Trang không được dịch</option>' +
									'<option value="[[WP:XN#C13|C13]]: Rõ ràng [[WP:VPBQ|vi phạm bản quyền]]">C13: Vi phạm bản quyền</option>' +
								'</optgroup>' +
								'<optgroup label="Bài viết">' +
									'<option value="[[WP:XN#BV1|BV1]]: Bài viết thiếu ngữ cảnh cần thiết để xác định chủ thể">BV1: Thiếu ngữ cảnh</option>' +
									'<option value="[[WP:XN#BV2|BV2]]: Bài viết không có nội dung thực">BV2: Không có nội dung thực</option>' +
									'<option value="[[WP:XN#BV3|BV3]]: Bài viết được sao chép từ một bài viết khác đã có">BV3: Sao chép từ bài có sẵn</option>' +
									'<option value="[[WP:XN#BV4|BV4]]: Nhân vật, tổ chức, địa danh... rõ ràng chưa đủ độ nổi bật">BV4: Không nổi bật</option>' +
								'</optgroup>' +
								'<optgroup label="Thảo luận">' +
									'<option value="[[WP:XN#C8|C8]]: [[WP:Trang thảo luận|Trang thảo luận]] của một trang không tồn tại hoặc đã bị xóa">C8: Trang thảo luận mồ côi</option>' +
								'</optgroup>' +
								'<optgroup label="Đổi hướng">' +
									'<option value="[[WP:XN#ĐH1|ĐH1]]: [[WP:R|Trang đổi hướng]] đến trang không tồn tại hoặc đã bị xóa">ĐH1: Đổi hướng sai</option>' +
									'<option value="[[WP:XN#ĐH2|ĐH2]]: [[WP:R|Trang đổi hướng]] lặp">ĐH2: Đổi hướng lặp</option>' +
									'<option value="[[WP:XN#ĐH3|ĐH3]]: [[WP:R|Trang đổi hướng]] liên [[Wikipedia:Không gian tên|không gian tên]]">ĐH3: Đổi hướng liên không gian tên</option>' +
									'<option value="[[WP:XN#ĐH4|ĐH4]]: [[WP:R|Trang đổi hướng]] được tạo gần đây có tên sai hoặc lỗi gây khó hiểu">ĐH4: Đổi hướng sai tên</option>' +
								'</optgroup>' +
								'<optgroup label="Tập tin">' +
									'<option value="[[WP:XN#TT1|TT1]]: Bản sao cùng định dạng của một tập tin không có trên Commons">TT1: Bản sao không có trên Commons</option>' +
									'<option value="[[WP:XN#TT2|TT2]]: Tập tin hỏng hoặc trống">TT2: Tập tin hỏng hoặc trống</option>' +
									'<option value="[[WP:XN#TT2|TT2]]: Trang miêu tả tập tin không cần thiết cho tập tin ở Commons">TT2: Trang miêu tả tập tin không cần thiết cho tập tin ở Commons</option>' +
									'<option value="[[WP:XN#TT3|TT3]]: Giấy phép không hợp lệ">TT3: Giấy phép không hợp lệ</option>' +
									'<option value="[[WP:XN#TT4|TT4]]: Thiếu thông tin cấp phép">TT4: Thiếu thông tin cấp phép</option>' +
									'<option value="[[WP:XN#TT5|TT5]]: Hình không tự do không được sử dụng">TT5: Hình không tự do không được sử dụng</option>' +
									'<option value="[[WP:XN#TT6|TT6]]: Tập tin không tự do nhưng không có [[WP:HDMTHL|miêu tả sử dụng hợp lý]]">TT6: Không có cơ sở SDHL</option>' +
									'<option value="[[WP:XN#TT7|TT7]]: Vi phạm [[WP:KTD|quy định về nội dung không tự do]]">TT7: Cơ sở SDHL không hợp lý</option>' +
									'<option value="[[WP:XN#TT8|TT8]]: Tập tin có sẵn trên Commons">TT8: Đã có trên Commons</option>' +
									'<option value="[[WP:XN#TT9|TT9]]: Rõ ràng [[WP:VPBQ|vi phạm bản quyền]]">TT9: VPBQ</option>' +
									'<option value="[[WP:XN#TT10|TT10]]: Tập tin không hữu ích (không phải hình ảnh, âm thanh hoặc video)">TT10: Tập tin không hữu ích</option>' +
									'<option value="[[WP:XN#TT11|TT11]]: Thiếu bằng chứng cấp phép">TT11: Thiếu bằng chứng cấp phép</option>' +
									'<option value="[[WP:XN#TT11|TT11]]: Chờ VRT quá hạn">TT11: Chờ VRT quá hạn</option>' +
								'</optgroup>' +
								'<optgroup label="Thể loại">' +
									'<option value="[[WP:XN#TL1|TL1]]: Thể loại trống">TL1: Trống</option>' +
									'<option value="[[WP:XN#TL2|TL2]]: Tên thể loại sai">TL2: Tên sai</option>' +
									'<option value="[[WP:XN#C8|C8]]: Thể loại được thêm tự động bởi bản mẫu đã bị xóa hoặc thay đổi trang đích">C8: Được thêm tự động bởi bản mẫu đã bị xóa hoặc thay đổi trang đích</option>' +
								'</optgroup>' +
								'<optgroup label="Không gian thành viên">' +
									'<option value="[[WP:XN#TV1|TV1]]: Thành viên yêu cầu xóa trang trong không gian tên thành viên của mình">TV1: Thành viên yêu cầu xóa</option>' +
									'<option value="[[WP:XN#TV2|TV2]]: Trang thành viên hoặc trang con của một thành viên không tồn tại">TV2: Thành viên không tồn tại</option>' +
									'<option value="[[WP:XN#TV3|TV3]]: [[Wikipedia:Trang thành viên|Trang thành viên]] chứa nhiều hình [[Wikipedia:Nội dung không tự do|không tự do]] nhưng không có phiên bản nào thích hợp để phục hồi">TV3: Quá nhiều tập tin SDHL</option>' +
									'<option value="[[WP:CSD#U5|U5]]: [[WP:NOTWEBHOST|Lạm dụng Wikipedia làm máy chủ lưu trữ web]]">U5: Lạm dụng Wikipedia làm máy chủ lưu trữ web</option>' +
								'</optgroup>' +
								'<optgroup label="Bản mẫu/Mô đun">' +
									'<option value="[[WP:XN#BM1|BM1]]: Bản mẫu/Mô đun có nội dung hoặc cách trình bày vi phạm quy định của Wikipedia">BM1: Nội dung hoặc cách trình bày sai quy định</option>' +
									'<option value="[[WP:XN#BM2|BM2]]: Bản mẫu/Mô đun không được sử dụng hữu ích">BM2: Không hữu ích</option>' +
									'<option value="[[WP:XN#BM3|BM3]]: Bản mẫu/Mô đun không liên kết hoặc không được sử dụng">BM3: Không được sử dụng</option>' +
									'<option value="[[WP:XN#C8|C8]]: Một phần hoặc tài liệu của một bản mẫu đã bị xóa">C8: Một phần hoặc tài liệu của một bản mẫu đã bị xóa</option>' +
								'</optgroup>' +
								'<optgroup label="Cổng thông tin">' +
									'<option value="[[WP:XN#CTT1|CTT1]]: [[WP:P|Cổng thông tin]] dưới dạng một bài viết">CTT1: Xóa như một bài viết</option>' +
									'<option value="[[WP:XN#CTT2|CTT2]]: [[WP:P|Cổng thông tin]] không có cơ sở chủ đề đáng kể">CTT2: Không có cơ sở chủ đề đáng kể</option>' +
								'</optgroup>' +
								'<optgroup label="Quá hạn bản mẫu">' +
									'<option value="[[WP:XT#QHBM1|QHBM1]]: [[Wikipedia:Bài chất lượng kém|Bài chất lượng kém]] quá 7 ngày">QHBM1: Chất lượng kém quá 7 ngày</option>' +
									'<option value="[[WP:XT#QHBM2|QHBM2]]: [[Wikipedia:Quyền tác giả|Bài vi phạm bản quyền]] được liệt kê tại [[:Thể loại:Có vấn đề bản quyền]] quá 7 ngày">QHBM2: VPBQ quá 7 ngày</option>' +
									'<option value="[[WP:XT#QHBM3|QHBM3]]: Bài có [[Wikipedia:Những gì không phải là Wikipedia|văn phong không thích hợp]] quá 7 ngày">QHBM3: Văn phong không thích hợp quá 7 ngày</option>' +
									'<option value="[[WP:XT#QHBM4|QHBM4]]: Bài không được Unicode hóa quá 7 ngày">QHBM5: Không được Unicode quá 7 ngày</option>' +
									'<option value="[[WP:XT#QHBM5|QHBM5]]: Bài dịch thuật chất lượng kém quá 10 ngày">QHBM6: Dịch thuật chất lượng kém quá 10 ngày</option>' +
									'<option value="[[WP:XT#QHBM6|QHBM6]]: Bài [[WP:BLPPROD|tiểu sử người đang sống]] không nguồn quá 7 ngày">QHBM7: Tiểu sử người đang sống không nguồn quá 7 ngày</option>' +
								'</optgroup>' +
								'<optgroup label="Khác">' +
									'<option value="[[WP:PROD]]: Đề nghị xóa quá 7 ngày mà không bị phản đối">PROD: Đề nghị xóa quá 7 ngày mà không bị phản đối</option>' +
								'</optgroup>' +
							'</optgroup>' +
						'</select></td></tr>' +
				'<tr><td>Lý do khác/thêm:</td>' +
					'<td><input type="text" id="wpMassDeleteReason" name="wpMassDeleteReason" maxlength="255" /></td></tr>' +
				'<tr><td>Xóa trang thảo luận:</td>' +
                	'<td><input type="checkbox" checked="true" id="wpDelTalkPage" name="wpDelTalkPage"/></td></tr>' +
					'<tr><td><input type="button" id="wpMassDeleteSubmit" name="wpMassDeleteSubmit" value="Delete" /></td>' +
			'</form>';
		document.getElementById("wpMassDeleteReasons").onchange = function() {
			var maxlength = (document.getElementById("wpMassDeleteReasons").value == "other" ? 255 : 252-document.getElementById("wpMassDeleteReasons").value.length); //It's 252 because of the three characters (" ()") in addition to the selected summary.
			document.getElementById("wpMassDeleteReason").setAttribute("maxlength", maxlength);
		};
		document.getElementById("wpMassDeleteSubmit").addEventListener("click", function (e) {
			doMassDelete();
		});
	}
	
	// On every page
    $.when(mw.loader.using('mediawiki.util'), $.ready).then(function () {
        mw.util.addPortletLink(
        'p-tb',
        mw.util.getUrl('Special:BlankPage/MassDel'),
        'MassDelete'
        );
    });
	 
	if (mw.config.get('wgNamespaceNumber') == -1 &&
    	mw.config.get('wgCanonicalSpecialPageName') === 'Blankpage' &&
    	mw.config.get('wgTitle').split('/',2)[1] === 'MassDel') {
        massdeleteform();
    }

});