„Szerkesztő:AntiVandal/recent2.js” változatai közötti eltérés
Tartalom törölve Tartalom hozzáadva
aNincs szerkesztési összefoglaló |
a rv |
||
60. sor: | 60. sor: | ||
ret.push(s.replace(RegExp('([-|.()\\+:!,?*^${}\\[\\]])', 'g'), '\\$1')); |
ret.push(s.replace(RegExp('([-|.()\\+:!,?*^${}\\[\\]])', 'g'), '\\$1')); |
||
} |
} |
||
⚫ | |||
// 123 3 2| 4 415 5 |
|||
⚫ | |||
⚫ | |||
⚫ | |||
} |
|||
} |
} |
||
197. sor: | 195. sor: | ||
articleTitle=getFirstTagContent(items[i], 'title'); |
articleTitle=getFirstTagContent(items[i], 'title'); |
||
var id=processRecentChanges.id; |
var id=processRecentChanges.id; |
||
var badWord=badMatch[2] || badMatch[4]; |
|||
// highlighting |
// highlighting |
||
badMatch[0]=badMatch[0].split( |
badMatch[0]=badMatch[0].split(badMatch[1]).join('<span style="background-color: #FF6">'+badMatch[1]+'</span>'); |
||
output.push(recent2.doLine({timestamp: timestamp, article:article, articleTitle:articleTitle, |
output.push(recent2.doLine({timestamp: timestamp, article:article, articleTitle:articleTitle, |
||
editor:editor, id:id, badWord:badMatch[1], badDiffFragment:badMatch[0], diff:diffText, |
|||
summary:editSummary})); |
summary:editSummary})); |
||
processRecentChanges.id++; |
processRecentChanges.id++; |
A lap 2006. március 28., 12:38-kori változata
// -*- mode:java; coding:utf-8 -*-
/*
This tool hits the RSS feed for recent changes every 30 seconds or so
and checks for common vandalism. It does not make a separate server request
for every edit.
Currently, the RSS feed is full of holes and so this may miss many edits.
http://bugzilla.wikimedia.org/show_bug.cgi?id=3942
*/
// <pre><nowiki>
//DOWNLOADER
recent2={};
recent2.download=function(bundle) {
// mandatory: bundle.url
// bundle.onSuccess
// bundle.onFailure
// bundle.otherStuff OK too
var x = window.XMLHttpRequest ? new XMLHttpRequest()
: window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP")
: false;
if (x) {
x.onreadystatechange=function() {
x.readyState==4 && recent2.downloadComplete(x,bundle);
};
x.open("GET",bundle.url,true);
// x.setRequestHeader('Accept','text/*');
x.send(null);
}
}
recent2.downloadComplete=function(x,bundle) {
x.status==200 && ( bundle.onSuccess && bundle.onSuccess(x,bundle) || true )
|| ( bundle.onFailure && bundle.onFailure(x,bundle) || alert(x.statusText));
}
window.gettingBadWords=false;
window.badWords=null;
recent2.getBadWords=function() {
window.gettingBadWords=true;
recent2.download( { url: 'http://hu.wikipedia.org/w/index.php?title=User:AntiVandal/lista&action=raw&ctype=text/css',
onSuccess: recent2.processBadWords, onFailure: function () { recent2.runOnce(recent2.getBadWords, 15000); return true;}});
}
recent2.processBadWords=function(d) {
var data=d.responseText.split('\n');
var ret=[];
for (var i=0; i<data.length; ++i) {
var s=data[i];
if (s.length==0) continue;
if (s.charAt(0)=='<') continue;
ret.push(s.replace(RegExp('([-|.()\\+:!,?*^${}\\[\\]])', 'g'), '\\$1'));
}
// (( repeatedchar ) | ( ... | ... | ... ))( bdy )
window.badWords=RegExp("<td>[+]</td>\\s*<td .*?>\\s*.*?(([^-{}.\\s'=wI:*#0-9A-F])\\2{2,}|\\b(" + ret.join('|') + "))(\\b|[|]).*\\s*</td>", 'im');
}
window.gettingWatchlist=false;
window.watchlist=null;
window.getWatchlist=function() {
window.gettingWatchlist=true;
recent2.download({url: 'http://hu.wikipedia.org/wiki/Special:Watchlist/edit',
onSuccess: processWatchlist, onFailure: function () { recent2.runOnce(getWatchlist, 15000); return true; }});
}
window.processWatchlist=function(req, bundle) {
var watchlist={};
var lines=req.responseText.split('\n');
for (var i=0; i<lines.length; ++i) {
if (lines[i].indexOf('<li><input type="checkbox" name="id[]" value=') > -1) {
var article=lines[i].replace(/.*title="(.*?)">.*/, '$1');
watchlist[article]=true;
}
}
window.watchlist=watchlist;
}
recent2.runOnce=function(f, time) {
var i=recent2.runOnce.timers.length;
var ff = function () { clearInterval(recent2.runOnce.timers[i]); f() };
var timer=setInterval(ff, time);
recent2.runOnce.timers.push(timer);
}
recent2.runOnce.timers=[];
var feed='http://hu.wikipedia.org/w/index.php?title=Special:Recentchanges&feed=rss';
window.newOutputDiv=function(klass, position, immortal) {
var h1=document.getElementsByTagName('h1')[0];
var ret=document.createElement('div');
if (klass) ret.className=klass;
if (!position) position='bottom';
switch(position) {
case 'top':
h1.parentNode.insertBefore(ret, h1.nextSibling);
break;
case 'bottom':
h1.parentNode.appendChild(ret);
break;
default:
if (!newOutputDiv.alerted) {
alert('Ismeretlen pozíció '+position+' a recent2.js-ben, newOutputDiv');
window.newOutputDiv.alerted=true;
}
return newOutputDiv(klass, 'bottom');
}
if (!immortal) { ret.id=newOutputDiv.uid++; }
window.outputDivs.push(ret);
return ret;
}
window.newOutputDiv.alerted=false;
window.newOutputDiv.uid=0;
window.outputDivs=[];
window.grabRecentChanges=function(feed) {
if (! window.badWords && recent2.filter_badwords ) {
if ( ! window.gettingBadWords ) recent2.getBadWords();
return recent2.runOnce(function(){grabRecentChanges(feed);}, 500);
}
if (! window.watchlist && recent2.filter_watchlist) {
if (! window.gettingWatchlist ) getWatchlist();
return recent2.runOnce(function(){grabRecentChanges(feed);}, 500);
}
var pos=recent2.outputPosition;
if (recent2.outputPosition=='top') {
var output=newOutputDiv('recent2.lines', pos);
var status=newOutputDiv('recent2.status', pos);
} else {
var status=newOutputDiv('recent2.status', pos);
var output=newOutputDiv('recent2.lines', pos);
}
status.style.borderStyle='solid';
status.style.borderColor='orange';
status.innerHTML=greyFont+'(' + count + ') frissítés...</font>';
recent2.download({url: feed, onSuccess: processRecentChanges, output: output, status: status, onFailure: feedFailed});
}
var greyFont='<font color="#777">';
window.feedFailed=function(x,bundle) {
try { bundle.status.innerHTML+=greyFont+'failed: '+x.statusText + '</font>'; }
catch (err) { bundle.status.innerHTML+=greyFont+'failed badly: '+err+'</font>'; }
return true;
}
recent2.newWindows=true;
window.linkmaker=function(url, text) {
var s='<a href="' + url + '"';
recent2.newWindows && (s += ' target="_blank"');
s += '>' + text + '</a>';
return s;
}
recent2.ipUserRegex=RegExp('(User:)?((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])');
window.processRecentChanges=function(req, bundle){
var initialId=processRecentChanges.id;
var doc=req.responseXML.documentElement;
var items=doc.getElementsByTagName('item');
var latest=processRecentChanges.lastDate;
var output=[]; // <ul class="special">';
for (var i=0; i< items.length; ++i) {
var timestamp = Date.parse(getFirstTagContent(items[i],'pubDate'));
if (timestamp <= processRecentChanges.lastDate) continue;
latest = (timestamp > latest) ? timestamp : latest;
var diffText=getFirstTagContent(items[i],'description').split('</tr>').join('</tr>\n');
var editSummary=diffText.replace(RegExp('^<p>(.*?)</p>[\\s\\S]*'), '$1');
var editor=getFirstTagContent(items[i], 'creator') || getFirstTagContent(items[i], 'dc:creator');
if (recent2.filter_anonsOnly && !recent2.ipUserRegex.test(editor)) continue;
var articleTitle=getFirstTagContent(items[i], 'title');
if (! recent2.show_talkpages && articleTitle && /^Vita:|^[^:]*?[_ ]vita:/.test(articleTitle)) continue;
if (recent2.filter_watchlist && articleTitle &&
! window.watchlist[articleTitle.replace(/^Vita:/, '').replace(/[ _]vita:/, ':')]) continue;
if (recent2.filter_badwords) {
var badMatch=null;
if (window.vandals[editor] > 0) badMatch=['', '[valaki más már visszaállította]'];
else badMatch=badWords.test(diffText); // .test() is meant to be faster than a full match
if (badMatch) {
badMatch=diffText.match(badWords);
var article=getFirstTagContent(items[i], 'link');
articleTitle=getFirstTagContent(items[i], 'title');
var id=processRecentChanges.id;
// highlighting
badMatch[0]=badMatch[0].split(badMatch[1]).join('<span style="background-color: #FF6">'+badMatch[1]+'</span>');
output.push(recent2.doLine({timestamp: timestamp, article:article, articleTitle:articleTitle,
editor:editor, id:id, badWord:badMatch[1], badDiffFragment:badMatch[0], diff:diffText,
summary:editSummary}));
processRecentChanges.id++;
}
}
else {
var article=getFirstTagContent(items[i], 'link');
var articleTitle=getFirstTagContent(items[i], 'title');
if (recent2.CustomFilter &&
! recent2.CustomFilter({timestamp:timestamp, article:article, articleTitle:articleTitle,
editor:editor, diff:diffText, summary:editSummary})) continue;
var id=processRecentChanges.id;
output.push(recent2.doLine({timestamp: timestamp, article:article, articleTitle:articleTitle,
editor:editor, id:id, diff:diffText, summary:editSummary}));
processRecentChanges.id++;
}
} /* end for loop */
//output+='</ul>';
var outputString='';
if (recent2.outputPosition=='top') {
outputString=output.join('');
}
else {
for (var i=output.length-1; i>=0; --i) {
outputString+=output[i];
}
}
bundle.output.innerHTML+=outputString;
recent2.runOnce(function() {recent2.doPopups(bundle.output)}, 300);
processRecentChanges.lastDate=latest; // - 1; // overlap better than missing some out, i think; FIXME do this properly
var statusTail=greyFont+'done up to ' + formatTime(latest) + '</font>';
if (processRecentChanges.id > initialId) {
statusTail+=' <a href="javascript:showHideDetailRange(' + initialId + ',' + processRecentChanges.id + ')">részletek megjelenítése/elrejtése</a> |';
}
statusTail += ' <a href="javascript:deleteEarlierOutputDivs(' + bundle.status.id + ')">régebbi kimenet törlése</a>';
statusTail+='<br>';
bundle.status.innerHTML+=statusTail;
}
processRecentChanges.lastDate=0;
processRecentChanges.id=0;
window.deleteEarlierOutputDivs=function(cur) {
for(var i=0; i<outputDivs.length; ++i) {
if (!outputDivs[i] || !outputDivs[i].id) continue;
if (outputDivs[i].id >= 0 && outputDivs[i].id < cur) {
// FIXME BUG: if we go from the bottom up, then we'll delete one too many or too few, or something :-)
outputDivs[i].parentNode.removeChild(outputDivs[i]);
outputDivs[i]=null;
}
}
// scroll to the top if we're appending output to the bottom, to keep the div we've clicked visible after the deletions
if (recent2.outputPosition!='top') document.location='#';
}
window.showHideDetailRange=function(start,end) {
// use the first div to see if we should show or hide
var div=document.getElementById('diff_div_' + start);
if (!div) return;
var state=false; // hide
if (div.style.display=='none') state=true; // show
for (var i=start; i<end; ++i) {
showHideDetail(i, true, state);
}
}
window.toggleSysopEdits=function() {
var divs=document.getElementsByTagName('div');
for (var i=0; i<divs.length; ++i) {
if (divs[i].className=='sysop_edit_line') divs[i].style.display= ( toggleSysopEdits.hidden ? 'none' : 'inline' );
}
toggleSysopEdits.hidden = ! toggleSysopEdits.hidden;
}
window.bundles={};
window.vandalColour = function(vandal) {
var num=window.vandals[vandal];
if (!num) return '';
switch (num) {
case 1: return '#DDFFDD';
case 2: return '#BBFFBB';
}
var i= 9-(num - 3) *2;
if (i < 0) i=0;
return '#' + i + i + 'FF' + i + i;
}
window.clickDetails=function(action, max) {
if(!action) action='show';
if (!max) max = document.links.length;
var count=0;
for (var i=0; i<document.links.length && count < max; ++i) {
if(document.links[i].innerHTML==action + ' details' && document.links[i].href.indexOf('javascript:') == 0) {
++count;
eval(document.links[i].href.replace('javascript:', ''));
}
}
}
recent2.pendingLines=[];
recent2.togglePausedOutput=function() {
if (!recent2.pausedOutput) { recent2.pausedOutput = true; return true; }
else recent2.pausedOutput=false;
var outputBuffer='';
while (recent2.pendingLines.length) {
outputBuffer+=recent2.doLine(recent2.pendingLines.pop());
}
var pos=recent2.outputPosition;
var output=newOutputDiv('recent2.lines', pos);
output.innerHTML=outputBuffer;
return false;
}
recent2.togglePaused=function() {
if(!recent2.paused) { recent2.paused=true; return true; }
recent2.paused=false;
loopRecentChanges(loopRecentChanges.url, loopRecentChanges.iterations);
return false;
}
recent2.doLine=function(bundle) {
if (recent2.pausedOutput) {
recent2.pendingLines.push(bundle);
return '';
}
var wikiBase='http://hu.wikipedia.org/wiki/';
var sysop = null;
if (typeof sysops != 'undefined') sysop=sysops.test(bundle.editor);
var lastDiffPage=bundle.article + '?diff=cur&oldid=prev';
bundle.url=lastDiffPage;
saveBundle(bundle);
var div='';
if (window.vandals[bundle.editor] > 0) { div='<div style="background-color:' + vandalColour(bundle.editor) + '">'}
else if (sysop) {div='<div class="sysop_edit_line">'};
return div +
'<li>' +
formatTime(bundle.timestamp) + ' ' +
//latest + ' ' + processRecentChanges.lastDate + ' ' +
linkmaker(lastDiffPage, bundle.articleTitle) +
( bundle.badWord ? ' matched <b>' + bundle.badWord + '</b> . . ' : ' . . ') +
linkmaker(wikiBase + 'User:' + bundle.editor, bundle.editor) + ' (' +
linkmaker(wikiBase + 'User_vita:' + bundle.editor, 'vita') + ' | ' +
linkmaker(wikiBase + 'Special:Contributions/' + bundle.editor, 'szerkesztései') + ' | ' +
linkmaker(wikiBase + 'Special:Blockip/' + bundle.editor, 'blokk') + ') . . ' +
( bundle.summary ? '<i>('+bundle.summary+')</i> . . ' : '') +
'<a href="javascript:showHideDetail(' + bundle.id + ')" id="showdiff_link_' + bundle.id + '">részletek</a>' +
' [<a href="javascript:tryRollback(' + bundle.id + ')">visszaállítás</a>]' +
'<p><div id="diff_div_' + bundle.id + '" style="display: none">' +
'</div></li>' +
( div ? '</div>' : '') ;
}
window.saveBundle= function(bundle) {
var z={};
for (var prop in bundle) { z[prop]=bundle[prop]; }
window.bundles[bundle.id]=z;
}
window.vandals={}
window.tryRollback=function(id) {
var b=window.bundles[id];
var vandal=b.editor;
if (window.vandals[vandal]==null) window.vandals[vandal]=1;
else window.vandals[vandal]++;
if (!b) { alert('No bundle! Please tell Lupin how to reproduce this error - it should not really happen.'); return; }
var onSuccess=function (x, bundle) {
var rollRe=RegExp('<a href="(/w/index.php[^"]*?action=rollback[^"]*?from=([^&]*)[^"]*?)".*?<br />(<span[^>]*>)?(.*?)(</span>)?<br /></td>');
// match[0]: useless
// match[1]: url (escaped)
// match[2]: last editor (escaped)
// match[4]: last edit summary (wikiText - FIXME strip this to plain text)
var match=rollRe.exec(x.responseText);
if (!match) {
alert('Nem találtam visszaállítás linket.\nA visszaállítás csak az adminok számára elérhető.');
return;
}
var lastEditor=match[2].split('+').join(' ');
var lastSummary=match[4];
// var vandal=b.editor; // from the closure
if (lastEditor != vandal) {
var summary=lastSummary.replace(RegExp('<[^>]*?>','g'),'');
if (!summary) summary=lastSummary;
alert( 'Nem lehet visszaállítani - Valaki más szerkesztette a vandál óta.\n\nPage: '+ b.articleTitle +
'\nVandal: '+vandal+'\nLast editor: '+lastEditor+'\nEdit summary: '+summary);
return;
}
var rollbackUrl=match[1].split('&').join('&');
// confirm('Rollback edits by '+vandal + ' to '+b.articleTitle+'?') &&
window.open(rollbackUrl, '_blank');
}
var onFailure = function(x,bundle) {
alert('HTTP failed when trying to get rollback link in url\n' + bundle.url +
'\n\nHTTP status text: ' + x.statusText);
return true;
}
recent2.download({ url:b.url, onSuccess: onSuccess, id: b.id, onFailure:onFailure});
}
recent2.doPopups=function(div) {
if (typeof(mouseOverWikiLink)!='undefined' &&
typeof(mouseOutWikiLink) !='undefined' &&
typeof(killPopup) !='undefined') {
var anchors=div.getElementsByTagName('A');
for (var i=0; i<anchors.length; ++i) {
var a=anchors[i];
if (a.href.indexOf('javascript')==0) continue;
a.onmouseover=mouseOverWikiLink;
a.onmouseout= mouseOutWikiLink;
a.onclick= killPopup;
}
}
}
window.formatTime=function(timestamp) {
var date=new Date(timestamp);
nums=[date.getHours(), date.getMinutes(), date.getSeconds()];
for (var i=0; i<nums.length; ++i) if (nums[i]<10) nums[i]='0'+nums[i];
return nums.join(':');
}
window.showHideDetail = function(id, force, state) {
var div=document.getElementById('diff_div_' + id);
var lk=document.getElementById('showdiff_link_' + id);
if (!div) return;
var bundle=window.bundles[id];
if (!div.innerHTML) div.innerHTML= ( bundle.badDiffFragment ? bundle.badDiffFragment:'') + bundle.diff;
if ((force && state==true) || (!force && div.style.display=='none')) { div.style.display='inline'; lk.innerHTML='részletek elrejtése'; }
else { div.style.display='none'; lk.innerHTML='részletek'; }
}
window.getFirstTagContent=function(parent, tag) {
var e=parent.getElementsByTagName(tag);
if (e && (e=e[0]) ) {
var ret = e.firstChild.nodeValue || e.nodeValue;
if (typeof ret != typeof '') return '';
return ret;
}
}
recent2.controlUI=function() {
recent2.controls=newOutputDiv('recent2.controls', 'top', true);
var vita=document.createElement('input');
vita.type='checkbox';
vita.checked=!recent2.show_talkpages;
vita.onclick=function(){ recent2.show_talkpages=!this.checked; }
recent2.controls.appendChild(vita);
recent2.controls.vita=vita;
var label=document.createElement('label');
label.innerHTML='Vitalapok elrejtése';
recent2.controls.appendChild(label);
}
var count=0;
window.loopRecentChanges=function(url, iterations) {
if (!iterations) iterations=20;
loopRecentChanges.iterations=iterations;
loopRecentChanges.url=url;
grabRecentChanges(url);
recent2.runOnce(function () {
if (recent2.paused) {++count; return; }
if (++count >= iterations && ! confirm('Folytassuk a friss változtatások figyelését?') ) return;
count %= iterations; loopRecentChanges(url, iterations);
}, 30000);
}
window.marvin=function() {
window.sysops=RegExp("^(Dhanak|grin|KovacsUr|NCurse|nyenyec|Serinde|tgr)$");
recent2.show_talkpages=true;
recent2.controlUI();
loopRecentChanges(feed, 200);
}
// **************************************************
// Installation
// **************************************************
recent2.addlilink=function(tabs, url, name, id, title, key){
var na = document.createElement('a');
na.href = url;
na.appendChild(document.createTextNode(name));
var li = document.createElement('li');
if(id) li.id = id;
li.appendChild(na);
tabs.appendChild(li);
if(id) {
if(key && title) ta[id] = [key, title];
else if(key) ta[id] = [key, ''];
else if(title) ta[id] = ['', title];
}
// re-render the title and accesskeys from existing code in wikibits.js
akeytt();
return li;
}
recent2.addToolboxLink=function(url, name, id){
var tb = document.getElementById('p-tb').getElementsByTagName('ul')[0];
recent2.addlilink(tb, url, name, id);
}
window.addMarvin=function() {
recent2.addToolboxLink('http://hu.wikipedia.org/wiki/User:AntiVandal/Friss_változtatások_szűrése', 'Friss változtatások szűrése', 'toolbox_filter_changes');
recent2.addToolboxLink('http://hu.wikipedia.org/wiki/User:AntiVandal/Minden_friss_szerkesztés', 'Minden friss szerkesztés', 'toolbox_all_changes');
recent2.addToolboxLink('http://hu.wikipedia.org/wiki/User:AntiVandal/Legutóbbi_anonim_szerkesztések', 'Legutóbbi anonim szerkesztések', 'toolbox_IP_edits');
recent2.addToolboxLink('http://hu.wikipedia.org/wiki/User:AntiVandal/Figyelőlista_szűrése', 'Figyelőlista szűrése', 'toolbox_watchlist_edits');
//document.getElementById('toolbox_filter_changes').onclick=marvin;
}
window.maybeStart=function() {
var loc=document.location.href;
if (RegExp('User:AntiVandal/Friss[_ ]v','i').test(loc)) {
recent2.filter_badwords=true;
recent2.runOnce(marvin, 1000);
}
else if (RegExp('User:AntiVandal/Minden[_ ]friss[_ ]szerkeszt','i').test(loc)) {
recent2.filter_badwords=false;
recent2.runOnce(marvin, 1000);
}
else if (RegExp('User:AntiVandal/Legut','i').test(loc)) {
recent2.filter_anonsOnly=true;
recent2.runOnce(marvin, 1000);
}
else if (RegExp('User:AntiVandal/Figyel', 'i').test(loc)) {
recent2.filter_watchlist=true;
recent2.runOnce(marvin, 1000);
}
}
// onload
addOnloadHook(maybeStart);
addOnloadHook(addMarvin);
// </nowiki></pre>
/// Local Variables: ///
/// mode:c ///
/// fill-prefix:"// " ///
/// End: ///