User:Xiplus/js/cvn-smart-gadget.js
< User:Xiplus | js
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
(function() {
mw.loader.using(['mediawiki.util', 'mediawiki.api']).done(function() {
function gettoken() {
if (localStorage.getItem("cvn_smart_authorized") !== "1") {
unauthorize();
return null;
}
return localStorage.getItem("cvn_smart_token");
}
function requestpage(type) {
var token = gettoken();
if (token) {
var datobj = {
'action': type,
'token': token,
'page': mw.config.get('wgPageName') + "|" + mw.config.get('wgDBname')
};
var reason = "";
if (type == "addpage") {
reason = prompt("原因:");
if (reason === null) {
return;
}
datobj.reason = reason;
}
if (type == "delpage" && !confirm("確定移除監視?")) {
return;
}
if (type == "addpage" || type == "pagescore") {
point = prompt("分數:", "30");
if (point === null) {
return;
}
datobj.point = point;
}
$.ajax({
type: 'POST',
url: 'https://xiplus.ddns.net/wikipedia_rc/api',
data: datobj,
success: function success(data) {
data = JSON.parse(data);
console.log(data);
if (data.nopermission) {
unauthorize();
return;
}
mw.notify(["<pre>" + data.message + "</pre>"]);
},
error: function error(e) {
console.log(e);
mw.notify(["傳送請求時發生錯誤\n" + e.statusText]);
}
});
}
}
function requestuser(type) {
var token = gettoken();
if (token) {
var datobj = {
'action': type,
'token': token
};
if (type == "adduser") {
var reason = prompt("原因:");
if (reason === null) {
return;
}
datobj.reason = reason;
}
if (type == "deluser" && !confirm("確定移除黑名單?")) {
return;
}
var site = mw.config.get('wgDBname');
if (type == "adduser" || type == "deluser") {
site = prompt("站點:", site);
if (site === null) {
return;
}
}
datobj.user = mw.config.get('wgRelevantUserName') + "|" + site;
if (type == "adduser" || type == "userscore") {
point = prompt("分數:", "10");
if (point === null) {
return;
}
datobj.point = point;
}
$.ajax({
type: 'POST',
url: 'https://xiplus.ddns.net/wikipedia_rc/api',
data: datobj,
success: function success(data) {
data = JSON.parse(data);
console.log(data);
if (data.nopermission) {
unauthorize();
return;
}
mw.notify(["<pre>" + data.message + "</pre>"]);
},
error: function error(e) {
console.log(e);
mw.notify(["傳送請求時發生錯誤\n" + e.statusText]);
}
});
}
}
function authorize() {
if (localStorage.getItem("cvn_smart_authorized") === "1") {
mw.notify(["您已經認證過了"]);
return;
}
var token = prompt("輸入存取權杖:");
if (token) {
$.ajax({
type: 'POST',
url: 'https://xiplus.ddns.net/wikipedia_rc/api',
data: {
'action': 'authorize',
'token': token
},
success: function success(data) {
data = JSON.parse(data);
if (data.result === "success") {
mw.notify(["已成功認證,您是 " + data.user]);
localStorage.setItem("cvn_smart_authorized", "1");
localStorage.setItem("cvn_smart_token", token);
showbutton();
var api = new mw.Api();
api.get({
action: 'centralauthtoken'
}).done(function(data) {
$.ajax({
type: 'POST',
url: 'https://xiplus.ddns.net/wikipedia_rc/api',
data: {
'action': 'updatecentralinfo',
'token': token,
'centralauthtoken': data.centralauthtoken.centralauthtoken
},
success: function success(data) {
data = JSON.parse(data);
if (data.result === "success") {
mw.notify(["cvn-smart: 已將維基帳戶 " + data.wiki_username + " 和 " + data.user + " 連結,未來登入此維基帳戶即會自動登入cvn-smart"]);
}
},
error: function error(e) {
console.log(e);
mw.notify(["cvn-smart: 傳送請求時發生錯誤\n" + e.statusText]);
}
});
});
} else {
mw.notify(["認證失敗,存取權杖錯誤或過期,請向機器人私訊 /newtoken 以獲得新權杖"]);
}
},
error: function error(e) {
console.log(e);
mw.notify(["傳送請求時發生錯誤\n" + e.statusText]);
}
});
} else {
mw.notify(["動作已取消"]);
}
}
function centralauthorize() {
var api = new mw.Api();
api.get({
action: 'centralauthtoken'
}).done(function(data) {
mw.notify(["cvn-smart: 正在嘗試進行中央登入"]);
$.ajax({
type: 'POST',
url: 'https://xiplus.ddns.net/wikipedia_rc/api',
data: {
'action': 'centralauthorize',
'token': '',
'centralauthtoken': data.centralauthtoken.centralauthtoken
},
success: function success(data) {
data = JSON.parse(data);
if (data.result === "success") {
mw.notify(["cvn-smart: 已成功自動認證,您是 " + data.user]);
localStorage.setItem("cvn_smart_authorized", "1");
localStorage.setItem("cvn_smart_token", data.token);
showbutton();
} else {
mw.notify(["cvn-smart: 中央登入認證失敗"]);
}
},
error: function error(e) {
console.log(e);
mw.notify(["cvn-smart: 傳送請求時發生錯誤\n" + e.statusText]);
}
});
});
}
function showbutton() {
if (window.cvn_smart_button) {
return;
}
if (mw.config.get('wgCanonicalSpecialPageName') === false) {
var addpage = mw.util.addPortletLink(
'p-cactions',
'#',
'cvn-smart: addpage'
);
$(addpage).on('click', function() {
if (mw.config.get('wgArticleId') === 0 && !confirm("頁面不存在,確定要加入嗎?")) {
return;
}
requestpage("addpage");
});
var delpage = mw.util.addPortletLink(
'p-cactions',
'#',
'cvn-smart: delpage'
);
$(delpage).on('click', function() {
requestpage("delpage");
});
var pagescore = mw.util.addPortletLink(
'p-cactions',
'#',
'cvn-smart: pagescore'
);
$(pagescore).on('click', function() {
requestpage("pagescore");
});
}
if (mw.config.get('wgRelevantUserName') !== null) {
var adduser = mw.util.addPortletLink(
'p-cactions',
'#',
'cvn-smart: adduser'
);
$(adduser).on('click', function() {
requestuser("adduser");
});
var deluser = mw.util.addPortletLink(
'p-cactions',
'#',
'cvn-smart: deluser'
);
$(deluser).on('click', function() {
requestuser("deluser");
});
var userscore = mw.util.addPortletLink(
'p-cactions',
'#',
'cvn-smart: userscore'
);
$(userscore).on('click', function() {
requestuser("userscore");
});
}
window.cvn_smart_button = true;
}
function unauthorize(first = false) {
if (window.cvn_smart_authorize_button === undefined) {
var authorizebtn = mw.util.addPortletLink(
'p-cactions',
'#',
'cvn-smart: authorize'
);
$(authorizebtn).on('click', function() {
authorize();
});
window.cvn_smart_authorize_button = true;
}
if (window.cvn_smart_centralauthorize_button === undefined) {
var centralauthorizebtn = mw.util.addPortletLink(
'p-cactions',
'#',
'cvn-smart: centralauthorize'
);
$(centralauthorizebtn).on('click', function() {
centralauthorize();
});
window.cvn_smart_centralauthorize_button = true;
}
localStorage.setItem("cvn_smart_authorized", "0");
localStorage.setItem("cvn_smart_token", "");
if (first && localStorage.getItem("cvn_smart_firstnotice")) {
return;
}
mw.notify(["cvn-smart: 您尚未進行認證,或是存取權杖已過期"]);
var date = new Date();
date.setTime(date.getTime() + 1000 * 86400);
localStorage.setItem("cvn_smart_firstnotice", "1");
centralauthorize();
}
if (localStorage.getItem("cvn_smart_authorized") === "1") {
showbutton();
} else {
unauthorize(true);
}
});
})();