Thành viên:NguoiDungKhongDinhDanh/AbuseFilterUpdate.js
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 Explorer và Safari: 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.
/**
* Script hỗ trợ cập nhật [[Thành viên:Hộp cát/Bộ lọc sai phạm]].
* Ghi công: [[:en:Special:Permalink/1076402159#API for abuse filters]].
**/
// TODO:
// $.ajax({
// url: 'https://en.wikipedia.org/wiki/Special:AbuseFilter/1151',
// success: function(response) {
// console.log(JSON.parse($('#mw-abusefilter-export > textarea', response).val()))
// }
// })
$(function() {
var ns = mw.config.get('wgNamespaceNumber'),
pn = mw.config.get('wgPageName'),
t = mw.config.get('wgTitle'),
ta = mw.config.get('wgTitle').split('/');
if (ns !== 2 || !t.match(/Hộp cát\/Bộ lọc sai phạm\/([wbnqtsvy]|wm)\/[\w-]+\/\d+/)) return;
var j = ta.length,
p = ta[j - 3],
l = ta[j - 2],
n = ta[j - 1];
// Xử lý đầu vào
switch (p) {
case 'w':
p = 'wikipedia';
break;
case 'b':
p = 'wikibooks';
break;
case 'n':
p = 'wikinews';
break;
case 'q':
p = 'wikiquote';
break;
case 't':
p = 'wiktionary';
break;
case 's':
p = 'wikisource';
break;
case 'v':
p = 'wikiversity';
break;
case 'y':
p = 'wikivoyage';
break;
case 'wm':
switch (l) {
case 'c':
l = 'commons';
p = 'wikimedia';
break;
case 'd':
l = 'www';
p = 'wikidata';
break;
case 'm':
l = 'meta';
p = 'wikimedia';
break;
case 'mn':
l = 'wikimania';
p = 'wikimedia';
break;
case 'os':
l = 'www';
p = 'wikisource';
break;
case 'sp':
l = 'species';
p = 'wikimedia';
break;
}
break;
}
// Thêm liên kết kích hoạt
mw.util.addPortletLink('p-cactions', '', 'Update', 'pt-afu', 'Cập nhật');
$('#pt-afu').click(function(e) {
e.preventDefault();
// Truy vấn dữ liệu
new mw.ForeignApi('https://' + l + '.' + p + '.org/w/api.php').get({
action: 'query',
list: 'abusefilters',
abfstartid: n,
abflimit: 1,
abfprop: 'pattern',
format: 'json'
}).done(function(response) {
var afc = response.query.abusefilters[0].pattern;
new mw.Api().get({ // Lấy nội dung trang đã có
action: 'query',
prop: 'revisions',
titles: pn,
rvslots: '*',
rvprop: 'content',
formatversion: 2
}).done(function(response) {
var wt = response.query.pages[0].revisions[0].slots.main.content,
wtn = wt.replace(/(?<=<syntaxhighlight\s*lang\s*=\s*"php"\s*>\n)(?:.|\n)*?(?=\n<\/syntaxhighlight>)/i, afc);
new mw.Api().postWithToken('csrf', {
action: 'edit',
title: pn,
text: wtn,
summary: 'Cập nhật trang tài liệu bộ lọc sai phạm',
format: 'json'
}).then(
function(d) {
if (!d.edit.newrevid) {
mw.notify('Bộ lọc này không có nội dung gì mới. Hãy thử lại sau.', {
type: 'error',
title: 'Không có nội dung mới!'
});
return;
} else {
mw.notify('Đã cập nhật bộ lọc thành công. Đi đến khác biệt sửa đổi...', {
type: 'success',
title: 'Thành công!'
});
location.assign('/w/index.php?diff=' + d.edit.newrevid + '&oldid=' + d.edit.oldrevid);
}
},
function(e, d) {
mw.notify('Cập nhật thất bại. Đã báo lỗi trong bảng điều khiển.', {
type: 'error',
title: 'Thất bại!'
});
console.warn(e);
console.warn(d);
}
);
});
});
});
});