利用者:Jkr2255/markProtected.js
表示
お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。
多くの Windows や Linux のブラウザ
- Ctrl を押しながら F5 を押す。
Mac における Safari
Mac における Chrome や Firefox
- ⌘ Cmd と ⇧ Shift を押しながら R を押す。
詳細についてはWikipedia:キャッシュを消すをご覧ください。
(function($){
var protectedLinks={};
var params;
var protectedTags={
edit:{
sysop:{
indefinite:'<img src="//upload.wikimedia.org/wikipedia/commons/thumb/f/f8/Padlock-red-inf.svg/15px-Padlock-red-inf.svg.png" alt="(無期限保護)" title="無期限保護中" width="15" height="15" />',
definite:'<img src="//upload.wikimedia.org/wikipedia/commons/thumb/5/59/Padlock.svg/15px-Padlock.svg.png" alt="(保護)" title="保護中 $1" width="15" height="15" />'
},
autoconfirmed:{
indefinite:'<img src="//upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Padlock-violet.svg/15px-Padlock-violet.svg.png" alt="(無期限半保護)" title="無期限半保護中" width="15" height="15" />',
definite:'<img src="//upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Padlock-silver-medium.svg/15px-Padlock-silver-medium.svg.png" alt="(半保護)" title="半保護中 $1" width="15" height="15" />'
}
},
create:{
sysop:{
indefinite:'<img src="//upload.wikimedia.org/wikipedia/commons/thumb/f/f8/Padlock-red-inf.svg/15px-Padlock-red-inf.svg.png" alt="(無期限作成保護)" title="無期限作成保護中" width="15" height="15" />',
definite:'<img src="//upload.wikimedia.org/wikipedia/commons/thumb/5/59/Padlock.svg/15px-Padlock.svg.png" alt="(作成保護)" title="作成保護中 $1" width="15" height="15" />'
},
autoconfirmed:{
indefinite:'<img src="//upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Padlock-violet.svg/15px-Padlock-violet.svg.png" alt="(無期限作成半保護)" title="無期限作成半保護中" width="15" height="15" />',
definite:'<img src="//upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Padlock-silver-medium.svg/15px-Padlock-silver-medium.svg.png" alt="(作成半保護)" title="作成半保護中 $1" width="15" height="15" />'
}
}
};
var moveProtectedTags={
indefinite:'<img src="//upload.wikimedia.org/wikipedia/commons/thumb/5/58/Padlock-olive.svg/15px-Padlock-olive.svg.png" alt="(無期限移動保護)" title="無期限移動保護中" width="15" height="15" />',
definite:'<img src="//upload.wikimedia.org/wikipedia/commons/thumb/5/58/Padlock-olive.svg/15px-Padlock-olive.svg.png" alt="(移動保護)" title="移動保護中 $1" width="15" height="15" />'
};
var $cache={};
function $createCached(html){
if(!$cache[html])$cache[html]=$(html);
return $cache[html].clone();
}
function parseInternalLinks($target,callback){
$target.find('a[href]').each(function(){
if($(this).hasClass("external")) return;
var linkto=$(this).attr('href');
var t;
if($(this).hasClass("new")){
t=linkto.match(/title=([^&]+)(&|$)/);
linkto=decodeURIComponent(RegExp.$1.replace(/_/g," "));
}else{
if(linkto.indexOf("/wiki/")!==0)return;
if(linkto.indexOf("#")!=-1)return;
linkto=decodeURIComponent(linkto.replace(/^.wiki./,"")).replace(/_/g," ");
}
callback(linkto,$(this));
});
}
function insertProtected($target,protection){
if(!protection||protection==[])return;
var i,$ins=false,$ins2,limit,editProtected=false,p,s;
for(i=0;i<protection.length;++i){
p=protection[i];
if((p.type=="edit")||(p.type=="create")){
if(!p.level.match(/(sysop|autoconfirmed)/))continue;
if(p.level=="sysop") editProtected=true;
if(p.expiry.match(/^in/)){
$ins=$createCached(protectedTags[p.type][p.level].indefinite);
}else{
limit=p.expiry.replace(
/(....)-(..)-(..)T(..:..):(..)Z/,
"($1年$2月$3日 $4 (UTC)まで)");
s=protectedTags[p.type][p.level].definite;
$ins=$createCached(s.replace("$1",limit));
}
}else if(p.type=="move"){
if(editProtected||p.level!="sysop")continue;
if(p.expiry.match(/^in/)){
$ins2=$createCached(moveProtectedTags.indefinite);
}else{
limit=p.expiry.replace(
/(....)-(..)-(..)T(..:..):(..)Z/,
"($1年$2月$3日 $4 (UTC)まで)");
s=moveProtectedTags.definite;
$ins2=$createCached(s.replace("$1",limit));
}
}
}
if($ins)$ins.appendTo($target);
if((!editProtected)&&$ins2)$ins2.appendTo($target);
}
function addProtected(lists,target){
if(target===void 0){
parseInternalLinks(mw.util.$content,function(linkto,$link){
if((!lists[linkto])||(lists[linkto]==[]))return;
insertProtected($link,lists[linkto]);
});
}else{
var i,j,a,l;
for(i in target){
a=target[i];
l=a.length;
for(j=0;j<l;++j){
insertProtected(a[j],lists[i]);
}
}
}
}
function parseOnce(data){
var ps,i,t;
if(!data || !data.query ||!(ps=data.query.pages))return;
for(i in ps){
protectedLinks[ps[i].title]=ps[i].protection;
}
}
function checkAllLinks(){
var uncheckedLinks={};
var i,a=[],b={};
parseInternalLinks(mw.util.$content,function(linkto,$link){
if(linkto.match(/^特別:/))return;
if(protectedLinks[linkto])return;
if(!uncheckedLinks[linkto])uncheckedLinks[linkto]=[$link];
else uncheckedLinks[linkto].push($link);
});
for(i in uncheckedLinks){
a.push(i);
b[i]=uncheckedLinks[i];
if(a.length>=30){(function(){
var b_tmp=$.extend({},b);
$.getJSON(mw.util.wikiScript('api') + '?format=json',{
titles: a.join('|'),
action:"query", prop:"info", inprop:"protection"
},function(data){
parseOnce(data);
addProtected(protectedLinks,b_tmp);
});
})();
a=[];b={};
}
}
$.getJSON(mw.util.wikiScript('api') + '?format=json&rawcontinue=1',{
titles: a.join('|'),
action:"query", prop:"info", inprop:"protection"
},function(data){
parseOnce(data);
addProtected(protectedLinks,b);
});
}
function callBackFunc(data){
parseOnce(data);
if(data["query-continue"]){
params.gplcontinue=data["query-continue"].links.gplcontinue;
$.getJSON(mw.util.wikiScript('api') + '?format=json',params,callBackFunc);
}else{
var ns=mw.config.get("wgNamespaceNumber");
addProtected(protectedLinks);
// Category and File
if((ns==6)||(ns==14))checkAllLinks();
}
}
$(function(){
var ns=mw.config.get("wgNamespaceNumber");
if(ns==0)return;
if(ns==-1){
checkAllLinks();
}else{
var pagename=mw.config.get("wgPageName");
params={action: 'query', generator: "links", gpllimit: "500",
titles: pagename, prop: 'info', inprop: "protection"};
$.getJSON(mw.util.wikiScript('api') + '?format=json&rawcontinue=1',params,callBackFunc);
}
});
})(jQuery);