コンテンツにスキップ

利用者:Jkr2255/markProtected.js

お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。

多くの WindowsLinux のブラウザ

  • Ctrl を押しながら F5 を押す。

Mac における Safari

  • Shift を押しながら、更新ボタン をクリックする。

Mac における ChromeFirefox

  • 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);