コンテンツにスキップ
Wikipedia

MediaWiki:Gadget-contribsrange.js

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

多くの WindowsLinux のブラウザ

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

Mac における Safari

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

Mac における ChromeFirefox

  • Cmd Shift を押しながら R を押す。

詳細についてはWikipedia:キャッシュを消すをご覧ください。

 // _________________________________________________________________________________________
 // | |
 // | === WARNING: GLOBAL GADGET FILE === |
 // | Changes to this page affect many users. |
 // | Please discuss changes on the talk page or on [[Wikipedia_talk:Gadget]] before editing. |
 // |_________________________________________________________________________________________|
 //
 // Imported from version 312947638 as of September 10, 2009 from [[User:Splarka/contribsrange.js]]
 // See notes below

 /* Special:Contributions Wildcard/CIDR lookup, version [0.2.7]
 Originally from: https://en.wikipedia.org/wiki/User:Splarka/contribsrange.js

 Notes:
 * Uses the API which is faster than most CIDR contrib tools.
 ** Needs 1.14 r42198+ for advanced continue.
 * Currently uses a GET json via <script src=""> to avoid ajax problems.
 * Only currently works if submitted (or called by URL parameter, eg Special:Contributions/User).
 ** Checks namespace and date options in form.
 ** Also utilizes &ucstart and &ucend date parameters if supplied manually (not supported in the UI atm).
 *** These parameters override the form date options.
 * Uses: Submit any IP CIDR range /16 or from /24 to /32. Submit any string (at least 3 characters) with a suffixed asterisk.
 ** eg: [123.123.123.0/24 ] or [123.123.123.* ] or [Willy* ].
 * Now keeps searching until it finds crMax (or forever with crshowall=true URI parameter).
 ** Puts them in a nice collapsed div stack, like enhanced recent changes.
 * /25 and /26 ranges now disabled, since they are inaccurate (50 parameter limit), please use /24 (ucuserprefix) or /27 (32 parameters)

 To do:
 * use ajax (let sysops/bots = 5000)?
 */
 /*jshint scripturl:true*/
 /*global jQuery, mediaWiki, prefixContribs, prefixContribsToggleDiv, prefixContribsToggleAll */
 (function(mw,$){

 functionprefixContribsInit(){
 varoptions;
 varshow=document.getElementById('contentSub')||document.getElementById('topbar');
 if(show)show.appendChild(document.createTextNode(' \u2022 強化版投稿記録 0.2 が有効になっています。CIDR による範囲指定や、"*" を使った前方一致検索が可能です。'));
 varucfrm=document.getElementsByTagName('form')[0];
 if(!ucfrm.target)return;

 //general optionlets independent of type of search.
 varopt_ns="";
 if(typeofucfrm.namespace!="undefined"){
 opt_ns=(parseInt(ucfrm.namespace[ucfrm.namespace.selectedIndex].value)>-1)?'&ucnamespace='+ucfrm.namespace[ucfrm.namespace.selectedIndex].value:'';
 }
 varopts_ts='';
 vardateStart=ucfrm.start.value;
 vardateEnd=ucfrm.end.value;
 if(dateStart)opts_ts+='&ucstart='+dateStart+'T23:59:59Z';
 if(dateEnd)opts_ts+='&ucend='+dateEnd+'T23:59:59Z';
 varopts_se='';
 if(queryString('ucstart'))opts_se+='&ucstart='+encodeURIComponent(queryString('ucstart'));
 if(queryString('ucend'))opts_se+='&ucend='+encodeURIComponent(queryString('ucend'));
 if(opts_se===''){
 options=opt_ns+opts_ts+'&ucdir=newer';
 }else{
 options=opt_ns+opts_se+'&ucdir=newer';
 }

 varpatternCIDR=/(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/(2[7-9]|3[0-2]|24|16)/i;
 varpatternWild=/^.{3,}\*$/i;
 varurl=mw.config.get('wgServer')+mw.config.get('wgScriptPath')+'/api.php?action=query&format=json&callback=prefixContribs&rawcontinue=&list=usercontribs'+options+'&uclimit='+parseInt(crLimit);
 if(ucfrm.target.value.search(patternCIDR)===0){
 prefixContribsStartbox(ucfrm.parentNode);
 varcidr=ucfrm.target.value.match(patternCIDR)[0];
 varrange=cidr.match(/[^\/]\d{1,2}$/i)[0];
 if(range==24||range==16){
 //prefixable CIDR, lets do-er
 if(range==24){
 cidr=cidr.match(/\d{1,3}\.\d{1,3}\.\d{1,3}\./)[0];
 }else{
 cidr=cidr.match(/\d{1,3}\.\d{1,3}\./)[0];
 }
 url+='&ucuserprefix='+cidr;
 }else{
 //complex CIDR, lets figure it out
 varoct3=cidr.match(/\.\d{1,3}\//i)[0].replace(/(\.|\/)/g,'');
 cidr=cidr.match(/\d{1,3}\.\d{1,3}\.\d{1,3}\./)[0];
 varnum=Math.pow(2,32-range);
 varstart=oct3-oct3%num;
 url+='&ucuser=';
 for(vari=start;i<=start+num;i++){
 url+=''+cidr+i;
 if(i!=start+num)url+='|';
 }
 }
 }elseif(ucfrm.target.value.search(patternWild)===0){
 //very simple wildcard, lets do-er
 prefixContribsStartbox(ucfrm.parentNode);
 varprefix=ucfrm.target.value.replace(/\*$/,'');
 prefix=prefix.substr(0,1).toUpperCase()+prefix.substr(1);
 url+='&ucuserprefix='+prefix;
 }
 mw.loader.load(url);
 crContURI=url;
 }

 /**
  * Attach the range contributions box as the given node’s child node.
  * @param {Node} parent Node to attach the box to.
  */
 functionprefixContribsStartbox(parent){
 varres=document.createElement('div');
 res.setAttribute('id','results-from-CIDR');
 $('.mw-userpage-userdoesnotexist').hide();
 addlinkchild(res,'javascript:prefixContribsToggleAll();','すべてを開閉','prefixcontribs-tog');
 varspin=document.createElement('span');
 spin.setAttribute('id','prefixcontribs-prog');
 spin.appendChild(document.createTextNode('検索中 .'));
 res.appendChild(spin);
 mw.loader.using('jquery.spinner',function(){
 if(!loadingReady){
 $(spin).injectSpinner('prefixcontribs-spin');
 }
 });
 parent.appendChild(res);
 }

 /**
  * Process the API call’s result (JSONP callback function). API documentation:
  * https://en.wikipedia.org/w/api.php?action=help&modules=query+usercontribs
  * @param {object} obj The API response object.
  */
 window.prefixContribs=function(obj){
 if(!obj.query||!obj.query.usercontribs)return;
 varcidr=obj.query.usercontribs;
 varres=document.getElementById('results-from-CIDR');
 if(!cidr.length){
 res.appendChild(document.createTextNode(' 指定されたワイルドカードまたは CIDR の範囲からの編集は見つかりませんでした。'));
 removeSpinner();
 return;
 }
 for(vari=0;i<cidr.length;i++){
 varid='cr-'+escapeID(cidr[i].user);
 // group each result set based on the user name, create new div for new names
 if(!document.getElementById(id)){
 varhdiv=document.createElement('div');
 hdiv.setAttribute('id','d-'+id);
 addlinkchild(hdiv,'javascript:prefixContribsToggleDiv("'+id+'")',cidr[i].user,'m-'+id,'cr-toggle-hidden');
 res.appendChild(hdiv);
 res.appendChild(document.createTextNode('\n'));
 varrul=document.createElement('ul');
 rul.setAttribute('id',id);
 rul.setAttribute('class','cr-list');
 rul.style.display='none';
 res.appendChild(rul);
 res.appendChild(document.createTextNode('\n'));
 }
 varul=document.getElementById(id);
 ul.appendChild(document.createTextNode('\n'));
 varli=document.createElement('li');
 li.appendChild(document.createTextNode(cidr[i].timestamp.replace(/T[\d:]*Z/,' ')));
 addlinkchild(li,mw.util.getUrl('Special:Contributions/'+cidr[i].user),cidr[i].user);
 li.appendChild(document.createTextNode(' ('));
 addlinkchild(li,mw.util.getUrl('User_talk:'+cidr[i].user),'会話','','mw-mightexist');
 li.appendChild(document.createTextNode(') ('));
 addlinkchild(li,mw.util.getUrl(cidr[i].title,{curid:cidr[i].pageid,diff:'prev',oldid:cidr[i].revid}),'差分');
 li.appendChild(document.createTextNode(') '));
 addlinkchild(li,mw.util.getUrl(cidr[i].title,{curid:cidr[i].pageid}),cidr[i].title);
 if(cidr[i].comment)li.appendChild(document.createTextNode(' ('+cidr[i].comment+')'));
 ul.appendChild(li);
 }
 mw.hook('wikipage.content').fire($('.cr-list'));
 //continue?
 crMax=crMax-cidr.length;
 varprog=document.getElementById('prefixcontribs-prog');
 if(!obj['query-continue']||!obj['query-continue'].usercontribs||!obj['query-continue'].usercontribs.uccontinue){
 removeSpinner();
 prog.parentNode.removeChild(prog);
 prefixContribsNumerate();
 return;
 }
 varurl=crContURI+'&uccontinue='+obj['query-continue'].usercontribs.uccontinue;
 if(crMax<=0&&queryString('crshowall')!='true'){
 prog.appendChild(document.createTextNode(' 大量の編集が見つかりました。→'));
 varga=document.createElement('a');
 vargaurl=document.location.href;
 if(gaurl.indexOf('#')!=-1)gaurl=gaurl.substr(0,gaurl.indexOf('#'));
 if(gaurl.indexOf('?')==-1)gaurl+='?';
 gaurl+='&crshowall=true';
 ga.setAttribute('href',gaurl);
 ga.appendChild(document.createTextNode('すべてを見る'));
 prog.appendChild(ga);
 prog.appendChild(document.createTextNode('(警告: ブラウザが異常終了するおそれがあります)'));
 removeSpinner();
 prefixContribsNumerate();
 }else{
 prog.appendChild(document.createTextNode('.'));
 mw.loader.load(url);
 }
 };

 /**
  * Remove the jQuery spinner if the spinner ResourceLoader module is
  * ready. If it’s not ready yet, the spinner hasn’t been added in the
  * first place; set `loadingReady` to true to prevent its addition in
  * the future.
  */
 functionremoveSpinner(){
 loadingReady=true;
 if(mw.loader.getState('jquery.spinner')==='ready'){
 $.removeSpinner('prefixcontribs-spin');
 }
 }

 /**
  * Add the number of edits next to each user found. This only opens the
  * contributions for the found user if there’s only one.
  */
 functionprefixContribsNumerate(){
 varlsts=$('ul.cr-list');
 for(vari=0;i<lsts.length;i++){
 vardv=document.getElementById('d-'+lsts[i].getAttribute('id'));
 dv.appendChild(document.createTextNode(' '+lsts[i].getElementsByTagName('li').length+' 件見つかりました'));
 }
 if(lsts.length==1)prefixContribsToggleDiv(lsts[0].id);
 }

 /**
  * Toggle the contributions listing for all users. The direction depends
  * on the first user listing’s state: if it’s collapsed, all users are
  * uncollapsed; if it’s uncollapsed, all users are collapsed.
  */
 window.prefixContribsToggleAll=function(){
 varlsts=$('ul.cr-list');
 if(!lsts.length)return;
 vartogglefrom=lsts[0].style.display;
 for(vari=0;i<lsts.length;i++){
 if(lsts[i].style.display==togglefrom)prefixContribsToggleDiv(lsts[i].id);
 }
 };

 /**
  * Toggle the contributions listing of a given user.
  * @param {string} id ID of the user to toggle.
  */
 window.prefixContribsToggleDiv=function(id){
 vari=document.getElementById(id);
 varm=document.getElementById('m-'+id);
 if(!i||!m)return;
 if(i.style.display=='none'){
 i.style.display='block';
 m.className='cr-toggle-shown';
 }else{
 i.style.display='none';
 m.className='cr-toggle-hidden';
 }
 };

 /**
  * Create a link and append to the given element.
  * @param {Node} obj Node to add the link child to.
  * @param {string} href The link target.
  * @param {string} text The link text.
  * @param {string} [id] The link anchor ID.
  * @param {string} [classes] Classes to apply to the link as a space-separated list.
  * @returns {HTMLAnchorElement} The newly created link element.
  */
 functionaddlinkchild(obj,href,text,id,classes){
 if(!obj||!href||!text)returnfalse;
 vara=document.createElement('a');
 a.setAttribute('href',href);
 a.appendChild(document.createTextNode(text));
 if(id)a.setAttribute('id',id);
 if(classes)a.setAttribute('class',classes);
 obj.appendChild(a);
 returna;
 }

 /**
  * Escape a text to make it suitable to be used in an HTML ID.
  * @param {string} txt The text to escape.
  * @returns {string} The escaped text.
  */
 functionescapeID(txt){
 varid=txt;
 id=id.replace(/ /g,'_');
 id=encodeURIComponent(id);
 id=id.replace(/\%3A/g,':');
 id=id.replace(/\%/g,'.');
 returnid;
 }

 /**
  * Get a query string parameter from the document’s URL.
  * @param {string} p The parameter’s name.
  * @returns {string|null} The parameter’s value, or `null` if the
  * parameter is not found.
  */
 functionqueryString(p){
 varre=RegExp('[&?#]'+p+'=([^&#]*)');
 varmatches=re.exec(document.location);
 if(matches){
 try{
 returndecodeURI(matches[1]);
 }catch(e){
 }
 }
 returnnull;
 }

 if(mw.config.get('wgCanonicalSpecialPageName')=='Contributions'){
 varcrContURI='';//query URI for continuing later
 varcrLimit=500;//limit for each query
 varcrMax=10000;//bypass with &crshowall=true URI parameter
 varloadingReady=false;// whether the loading has been finished and the spinner should not be added anymore
 varcrImgHid='//upload.wikimedia.org/wikipedia/commons/a/ad/Arr_r.png';
 varcrImgSho='//upload.wikimedia.org/wikipedia/commons/f/f0/Arr_d.png';
 mw.util.addCSS('.cr-list {padding-left:5px;}\n.cr-toggle-hidden {padding-left:16px;background: transparent no-repeat center left url("'+crImgHid+'")}'+
 '\n.cr-toggle-shown {padding-left:16px;background: transparent no-repeat center left url("'+crImgSho+'")}\n.mw-mightexist {font-style:italic;}'+
 '\n#results-from-CIDR {border:1px solid black;padding:.5em}\n#prefixcontribs-tog {float:right;border:1px solid black;text-decoration:none;color:black;padding:0 5px;}');
 $(prefixContribsInit);
 }

 }(mediaWiki,jQuery));

AltStyle によって変換されたページ (->オリジナル) /