Järjestelmäviesti:Gadget-rvvStats b.js
Huomautus: Selaimen välimuisti pitää tyhjentää asetusten tallentamisen jälkeen, jotta muutokset tulisivat voimaan.
- Firefox ja Safari: Napsauta Shift-näppäin pohjassa Päivitä, tai paina Ctrl-F5 tai Ctrl-R (⌘-R Macilla)
- Google Chrome: Paina Ctrl-Shift-R (⌘-Shift-R Macilla)
- Internet Explorer ja Edge: Napsauta Ctrl-näppäin pohjassa Päivitä tai paina Ctrl-F5
- Opera: Paina Ctrl-F5.
function rewrite_page_info()
{
function fast_limit_change_handler()
{
var limit=$(this).text().trim();
$(".revertlinks").find("A").css('font-weight', 'inherit');
$(this).css('font-weight', 600);
switch ( limit )
{
case '10' : count_stats(10,0); break;
case '50' : count_stats(50,0); break;
case '250' : count_stats(250,0); break;
case '500' : count_stats(500,0); break;
case 'kaikki' :count_stats(500,1); break;
default: return true;
}
return false;
}
$("#firstHeading").text("Kumoustilasto");
$("#mw-content-text").html("Tämä sivu sisältää luettelon <strike><code>rv</code></strike> (Huom nykyisin <code>mw-undo</code> sivun toiminnan esittelemiseksi) -<a href='/w/index.php?title=toiminnot:merkintä'>merkinnällä</a> (rv = engl. revert, muokkauksen kumoaminen ;rvv = engl. revert vandalism, vandalismin kumoaminen) merkityistä muokkauksista 30 päivän ajalta.");
var revertlimitlinks=$('<div class="revertlinks">Näytä kumouksista' +
' <a class="revertlimitlink_10" href="/w/index.php?title=Toiminnot:Tyhjä_sivu/Kumoukset/10" title="Sotkukumoustilaston 10 tuoreinta">10</a>' +
'| <a class="revertlimitlink_50" href="/w/index.php?title=Toiminnot:Tyhjä_sivu/Kumoukset/50" title="Sotkukumoustilaston 50 tuoreinta">50</a> ' +
'| <a class="revertlimitlink_250" href="/w/index.php?title=Toiminnot:Tyhjä_sivu/Kumoukset/250" title="Sotkukumoustilaston 250 tuoreinta">250</a> ' +
'| <a class="revertlimitlink_500" href="/w/index.php?title=Toiminnot:Tyhjä_sivu/Kumoukset/500" title="Sotkukumoustilaston 500 tuoreinta">500</a> ' +
'| <a class="revertlimitlink_all" href="/w/index.php?title=Toiminnot:Tyhjä_sivu/Kumoukset/kaikki" title="Koko sotkukumoustilaston ">kaikki</a> kerralla.' +
'</div>');
revertlimitlinks.css("margin-top", "0.5em");
revertlimitlinks.find("A").click(fast_limit_change_handler);
$("#mw-content-text").append(revertlimitlinks);
}
function add_filter_form()
{
function do_show_diffs()
{
mw.loader.load( 'https://fi.wikipedia.org/w/load.php?modules=mediawiki.action.history.diff&only=styles&skin=vector', 'text/css' );
var rows=$("#revert_results").find("tr.revert_row");
// Sorttaus ja diffien näyttäminen ei toimi samaan aikaan.
// Poisto http://stackoverflow.com/questions/8171530/remove-jquery-tablesorter-from-table
// Jostain syystä trigger(destroy) ei toimi.
$("#revert_results").off('appendCache applyWidgetId applyWidgets sorton update updateCell')
.removeClass('tablesorter')
.find('thead th')
.off('click mousedown')
.removeClass('header headerSort headerSortDown headerSortUp');
n=0;
rows.each(function(k,e) {
var row=$(e);
if (!(row.hasClass("revert_hide_rows") || row.find(".revert_rc_diff").length) && n < 51)
{
var diff_link=row.find(".revert_toollinks").find(".diff_link");
if (diff_link.length)
{
page_id=diff_link.attr("curid");
rev_new_id=diff_link.attr("diff");
rev_old_id=diff_link.attr("oldid");
diff_id="diff_" + rev_old_id + "_" + rev_new_id;
if ($("#revert_results").find("." + diff_id).length === 0)
{
n++;
if (n>50) alert("Maksimimäärä kerralla ladattavia muutoksia on 50. Voit ladata lisää muutoksia klikkaamalla nappia uudestaan. ");
var title=row.find(".revert_title").text();
var diff_title_row=$("<tr></tr>");
var diff_title_col=$("<th colspan=\"6\">"+title+"</th>");
diff_title_col.css('text-align', 'center');
diff_title_col.css('padding-top', '0.5em');
diff_title_col.css('padding-bottom', '0.5em');
diff_title_row.append(diff_title_col);
diff_title_row.attr('class', row.attr('class').replace("revert_rc_row_id", "revert_title_rc_row_id"));
diff_title_row.addClass('revert_title_row');
diff_title_row.insertBefore(row);
var diff_row=$("<tr></tr>");
var diff_col=$("<td colspan=\"6\"></td>");
diff_row.attr('class', row.attr('class').replace("revert_rc_row_id", "revert_diff_rc_row_id"));
diff_row.addClass('revert_rc_diff');
diff_row.addClass(diff_id);
diff_row.addClass('revert_diff_row');
diff_row.css('background-color','white');
diff_row.append(diff_col);
diff_row.insertAfter(row);
url="https://fi.wikipedia.org/w/index.php?type=revision&diffonly=yes&action=render&diff="+rev_new_id+"&oldid=" + rev_old_id;
$.get( url, function( data ) {
var real_diff=$("<div>").html(data);
real_diff.find("td").css("border", "none");
diff_col.append(real_diff);
real_diff.css('padding-bottom', "2em");
});
}
}
}
});
}
function do_filtering()
{
var searchkey=$("#revert_filter_search_key").val();
if (searchkey.trim())
{
var re = new RegExp(searchkey, "i");
$("#revert_results").hide();
var rows=$("#revert_results").find("tr.revert_row").not(".revert_diff_row").not(".revert_title_row");
rows.show();
rows.each(function(k,e) {
var row=$(e);
// Tämä on tässä varmistamassa, että tagien väleillä on välilyönnit.
var row_text=$(row.html().replace(/></g, "> <")).text();
var rcid=row.attr('rcid');
if (typeof(rcid) !== "undefined")
{
titlerow=$(".revert_title_rc_row_id_" + rcid);
diffrow=$(".revert_diff_rc_row_id_" + rcid);
if (diffrow.length)
{
row_text+=" " + $(diffrow.html().replace(/></g, "> <")).text();
}
}
else
{
alert("Virhe: RCID -tunnus puuttuu");
}
var m = re.exec(row_text);
if (m !== null) {
row.css('background-color', 'inherit');
row.removeClass("revert_hide_rows");
if (diffrow.length)
{
titlerow.css('background-color', 'inherit');
titlerow.removeClass("revert_hide_rows");
diffrow.css('background-color', 'inherit');
diffrow.removeClass("revert_hide_rows");
}
}
else
{
row.css('background-color', 'silver');
row.addClass("revert_hide_rows");
if (diffrow.length)
{
titlerow.css('background-color', 'silver');
titlerow.addClass("revert_hide_rows");
diffrow.css('background-color', 'silver');
diffrow.addClass("revert_hide_rows");
}
}
});
if ($("#revert_filter_hide_checkbox").prop("checked"))
{
$(".revert_hide_rows").hide();
}
$("#revert_results").show();
}
else
{
// asetetaan kaikki näkyville ja poistetaan korostukset
$("#revert_results").find("tr.revert_row").show();
$(".revert_hide_rows").removeClass("revert_hide_rows");
$("#revert_results").find("tr").css('background-color', 'inherit');
}
}
$("#revert_filter_div").remove();
var container=$("<div id='revert_filter_div'/>");
var form=$("<form>");
var searchkey=$("<input id='revert_filter_search_key' type='text' value='' size='30'>");
var filter_button=$("<input type='button' value='Suodata'>");
var checkbox=$("<span><input id='revert_filter_hide_checkbox' value='1' type='checkbox' /> Piilota suodatetut rivit</span>");
checkbox.click(function() { $(".revert_hide_rows").toggle(this.checked); });
filter_button.css('margin-left','0.5em');
filter_button.click(do_filtering);
var show_diffs_button=$("<input id='show_diffs' type='button' value='Näytä muutokset'>");
show_diffs_button.css('margin-left','0.5em');
show_diffs_button.click(do_show_diffs);
form.append(searchkey);
form.append(filter_button);
form.append(show_diffs_button);
form.append(checkbox);
container.append(form);
$("#mw-content-text").append(container);
}
function add_results_box()
{
add_filter_form();
var container=$("<div id='revert_results_container'></div>");
var loading_message=$("<div id='revert_list_loading_message'><i>Ladataan kumouksia ...</i></div>");
$("#revert_results_container").remove();
var results=$( "<table/>", {
"id":"revert_results",
"class": "wikitable"
});
var tr=$("<tr/>");
tr.append( "<th class='revert_toollinks'>Diffi</th>" );
tr.append( "<th class='revert_timestamp'>Aika</th>" );
tr.append( "<th class='revert_title'>Artikkeli</th>" );
tr.append( "<th class='revert_user'>Kumoaja</th>" );
tr.append( "<th class='revert_reverted_user'>Kumottu</th>" );
tr.append( "<th class='revert_reverted_netname'>Netname / Proxy</th>" );
results.append(tr);
container.append(results);
container.append(loading_message);
container.appendTo("#bodyContent");
$(".revert_toollinks").css('min-width', '4em');
return results;
}
function handle_recentchange_items(recentchanges)
{
var rows = [];
$.each( recentchanges, function( n, revert ) {
// Artikkeli linkkeineen
var title_col=$("<td class='revert_title'/>");
var title_link=$( "<a/>", {
"href": "//fi.wikipedia.org/wiki/" + encodeURI(revert.title.replace(/\s/g, "_")),
"html": revert.title
});
title_link.addClass("page_id_" + revert.pageid);
title_col.append(title_link);
// Muokkaaja linkkeineen
var user_col=$("<td class='revert_user'/>");
var user_link=$( "<a/>", {
"href": "//fi.wikipedia.org/wiki/user:" + encodeURI(revert.user.replace(/\s/g, "_")),
"html": revert.user
});
user_link.addClass("user_id_" + revert.userid);
user_col.append(user_link);
// Haetaan kumottujen muokkaajien nimet
var reverted_users_tmp=$("<span/>");
reverted_users_tmp.html(revert.parsedcomment);
var reverted_users=reverted_users_tmp.find('a[title^="Toiminnot:Muokkaukset"]');
reverted_users.css('margin-left', '0.5em' );
var reverted_users_col=$("<td class='revert_reverted_user'/>") ;
reverted_users_col.append(reverted_users);
// Diffilinkki
var diff_col=$( "<td class='revert_toollinks'></td>");
var diff_link=$( "<a/>", {
"class": "diff_link",
"curid": revert.pageid,
"diff": revert.revid,
"oldid": revert.old_revid,
"href": "//fi.wikipedia.org/w/index.php?curid=" + revert.pageid +"&diff=" + revert.revid +"&oldid=" + revert.old_revid,
"html": "ero"
});
var history_link=$( "<a/>", {
"href": "//fi.wikipedia.org/w/index.php?action=history&title=" + encodeURI(revert.title.replace(/\s/g, "_")),
"html": "historia"
});
diff_col.append(diff_link);
diff_col.append("<span> | </span>");
diff_col.append(history_link);
diff_col.css('font-size', 'smaller');
var tr=$("<tr/>");
tr.addClass("revert_rc_row_id_"+ revert.rcid);
tr.addClass("revert_row");
tr.attr('rcid', revert.rcid);
tr.append( diff_col);
tr.append( "<td class='revert_timestamp'>" + revert.timestamp + "</td>" );
tr.append( title_col );
tr.append( user_col );
tr.append( reverted_users_col );
tr.append("<td class='revert_netname'></td>");
rows.push(tr);
});
$("#revert_results").append(rows);
}
function load_data(rclimit, rccontinue, load_all, recursion_limit)
{
if (rclimit===undefined) { rclimit=0; }
if (rccontinue===undefined) { rccontinue=""; }
if (load_all===undefined) { load_all=0; }
if (recursion_limit===undefined) { recursion_limit=10; }
var url="//fi.wikipedia.org/w/api.php?action=query&list=recentchanges&rcprop=title|ids|sizes|flags|user|parsedcomment|flags|tags|timestamp&rcnamespace=0&rctype=edit&rctag=mw-undo&format=json";
if (rclimit>0)
{
url+="&rclimit=" + rclimit;
}
if (rccontinue!=="")
{
url+="&rccontinue=" + rccontinue;
}
$.getJSON( url, function( data ) {
if (data && data.query && data.query.recentchanges)
{
var recentchanges=data.query.recentchanges;
handle_recentchange_items(recentchanges);
}
if (load_all === 1 && (recursion_limit < 8) && data !== undefined && data.continue !== undefined && data.continue.rccontinue !== undefined)
{
recursion_limit+=1;
load_data(rclimit, data.continue.rccontinue, load_all, recursion_limit);
}
else
{
// Datan latauksen pitäisi olla valmis joten muutetaan taulukko sortattavaksi.
$("#revert_list_loading_message").remove();
mw.loader.using( [
'jquery.tablesorter'
], function(){
$("#revert_results").tablesorter();
} );
// Ja merkitään mitkä ip:t on estettynä
show_blocks();
show_stabilized_pages();
show_protected_pages();
show_netnames() ;
show_proxynames();
}
});
}
function show_protected_pages()
{
function handle_loaded_allpages(data)
{
if (data && data.query && data.query.allpages)
{
var configuredpages=data.query.allpages;
$.each( configuredpages, function( n, page ) {
$(".page_id_" + page.pageid).addClass("page_is_protected");
$(".page_id_" + page.pageid).css('background-color', 'MistyRose');
});
}
}
var url="//fi.wikipedia.org/w/api.php?format=json&action=query&list=allpages&aplimit=500&apprtype=edit&apnamespace=0";
$.getJSON( url, handle_loaded_allpages);
}
// http://javascript.about.com/library/blipconvert.htm
function ip2long(address)
{
var d = address.split('.');
return ((((((+d[0])*256)+(+d[1]))*256)+(+d[2]))*256)+(+d[3]);
}
function show_netnames()
{
function handle_loaded_netnames(data)
{
var ranges=[];
$.each(data, function(n, netname) {
var n={
'netname' : netname.netname,
'min_ip' : ip2long(netname.min_ip),
'max_ip' : ip2long(netname.max_ip)
}
ranges.push(n);
});
$("#revert_results").find(".revert_reverted_user a").each(function(k, e) {
var ip=$(e).text().trim();
var ip_long;
if (ip !== undefined && mw.util.isIPv4Address(ip))
{
ip_long=ip2long(ip);
$.each(ranges,function (n, range) {
if (ip_long >= range.min_ip && ip_long <= range.max_ip)
{
var netname_element=$(e).closest('tr').find('.revert_netname');
var current_text=netname_element.text().trim();
// Jos kentässä on jo tekstiä niin ei korvata sitä netnamella.
if (current_text=="")
{
netname_element.text( range.netname);
}
}
});
}
});
}
var url="//fi.wikipedia.org/w/index.php?title=user:Fiwiki-tools-bot/netnames.js&action=raw&ctype=application/json";
$.getJSON( url , handle_loaded_netnames);
}
function show_proxynames()
{
function handle_loaded_proxynames(data)
{
var ranges={};
var netname_element, proxy_info, proxy_domain;
$("#revert_results").find(".revert_reverted_user a").each(function(k, e) {
var ip=$(e).text().trim();
if (ip !== "" && typeof(data[ip]) !== "undefined" )
{
netname_element=$(e).closest('tr').find('.revert_netname');
netname_element.html("");
proxy_info=$("<p>");
proxy_info.text(data[ip]["label"]);
netname_element.append( proxy_info);
if (typeof(data[ip]["domain"])!=="undefined")
{
proxy_domain=$("<p>");
proxy_domain.text(data[ip]["domain"]);
netname_element.append(proxy_domain);
}
// Ei tarvita netname-tekstiä, koska tästä se selviää tarkemmin.
}
});
}
var url="//fi.wikipedia.org/w/index.php?title=user:Fiwiki-tools-bot/proxylista.js&action=raw&ctype=application/json";
$.getJSON( url , handle_loaded_proxynames);
}
function show_stabilized_pages()
{
function handle_loaded_configuredpages(data)
{
if (data && data.query && data.query.configuredpages)
{
var configuredpages=data.query.configuredpages;
$.each( configuredpages, function( n, page ) {
$(".page_id_" + page.pageid).addClass("fr_stabilized");
$(".page_id_" + page.pageid).css('background-color', 'PapayaWhip');
});
}
}
var url="//fi.wikipedia.org/w/api.php?format=json&action=query&list=configuredpages&cpnamespace=0&cplimit=500";
$.getJSON( url, handle_loaded_configuredpages);
}
// Funktio värittää listalta ne käyttäjätunnukset jotka
// ovat estettynä ja lisää niille css-luokan blocked_user".
function show_blocks()
{
var reverted_users={};
var ip_editors={};
var logged_editors={};
function handle_loaded_blocks(data)
{
if (data && data.query && data.query.blocks)
{
var blocks=data.query.blocks;
$.each( blocks, function( n, block ) {
if (reverted_users[block.user]!==undefined)
{
var hashed_name_key=".reverted_user_" + reverted_users[block.user];
$(hashed_name_key).addClass("blocked_user");
$(hashed_name_key).css("background-color", "silver");
}
else
{
alert("Virhe: Saatiin sellaisen käyttäjän esto jota ei kysytty:" + block.user);
}
});
}
}
function test_ipv6_range(ipv6_address, ipv6_range)
{
var index;
var mask;
var needle_address=ipv6_address.split(":");
var range_address="";
var tmp=ipv6_range.split("/");
if (tmp.length!==2)
{
return false;
}
bits=parseInt(tmp[1]);
range_address=tmp[0].split(":");
if ((Number.isInteger(bits) === false) || (bits < 1) || (bits > 128))
{
return false;
}
index=0;
for (; bits >= 16; bits -= 16)
{
// ParseInt on tässä sitä varten, että vertailu pitää tehdä numeerisesti
if (parseInt(needle_address[index],16) !== parseInt(range_address[index],16))
{
return false;
}
index++;
}
if (bits > 0)
{
mask = ~(65535 >> bits);
if ((parseInt(needle_address[index],16) & mask) != (parseInt(range_address[$index],16) & mask))
{
return false;
}
}
return true;
}
function handle_loaded_ip_blocks(data)
{
if (data && data.ip_blocks)
{
$.each( data.ip_blocks, function( user_name, expiry ) {
if (reverted_users[user_name]!==undefined)
{
var hashed_name_key=".reverted_user_" + reverted_users[user_name];
$(hashed_name_key).addClass("blocked_user");
$(hashed_name_key).css("background-color", "silver");
}
});
}
if (data && data.ipv4_range_blocks)
{
$.each( data.ipv4_range_blocks, function( range, block ) {
$.each(ip_editors, function (ip_name, value)
{
if (mw.util.isIPv4Address(ip_name))
{
var long_ip=ip2long(ip_name);
if (long_ip>=block.ipb_range_start_dec && long_ip <= block.ipb_range_end_dec)
{
var hashed_name_key=".reverted_user_" + reverted_users[ip_name];
$(hashed_name_key).addClass("blocked_user");
$(hashed_name_key).css("background-color", "silver");
}
}
});
});
}
if (data && data.ipv6_range_blocks)
{
$.each( data.ipv6_range_blocks, function( range, block ) {
$.each(ip_editors, function (ip_name, value)
{
if (mw.util.isIPv6Address(ip_name))
{
if (test_ipv6_range(ip_name,range))
{
var hashed_name_key=".reverted_user_" + reverted_users[ip_name];
$(hashed_name_key).addClass("blocked_user");
$(hashed_name_key).css("background-color", "silver");
}
}
});
});
}
}
function fetch_ip_blocks(ip_editors)
{
var url="//fi.wikipedia.org/w/index.php?title=user:Fiwiki-tools-bot/IP-estot.js&action=raw&ctype=application/json";
$.getJSON( url , handle_loaded_ip_blocks);
}
function fetch_user_blocks(user_names)
{
var users="";
var n=0;
var url="//fi.wikipedia.org/w/api.php?format=json&action=query&list=blocks&bkusers=Zache" ;
while(user_names.length)
{
users="";
for (n=0; n<49; n+=1)
{
if (user_names.length)
{
users+="|" + encodeURIComponent(user_names.pop());
n++;
}
}
$.getJSON( url + users, handle_loaded_blocks);
}
}
function is_ip_address(address)
{
return mw.util.isIPv4Address(address) || mw.util.isIPv6Address(address);
}
$("#revert_results").find(".revert_reverted_user a").each(function(k, e)
{
var user_name=$(e).text();
if (typeof(reverted_users[user_name])==="undefined")
{
var hashed_name=encodeURIComponent(user_name.replace(/[:.\s]/g,"_")).replace(/%/g, "_");
reverted_users[user_name]=hashed_name;
if (is_ip_address(user_name))
{
ip_editors[user_name]=1;
}
else
{
logged_editors[user_name]=1;
}
}
$(e).addClass("reverted_user_" + reverted_users[user_name]);
});
fetch_user_blocks(Object.keys(logged_editors));
fetch_ip_blocks(Object.keys(ip_editors));
}
function count_stats(rclimit, load_all)
{
if (rclimit === undefined) { rclimit=10; }
if (load_all === undefined) { load_all=0; }
var results=add_results_box();
load_data(rclimit, "", load_all,0);
}
function count_stats_loader()
{
function count_stats(rclimit, load_all)
{
if (rclimit === undefined) { rclimit=10; }
if (load_all === undefined) { load_all=0; }
var results=add_results_box();
load_data(rclimit, "", load_all,0);
}
// mw.util.addPortletLink('p-tb', '//fi.wikipedia.org/wiki/Toiminnot:Tyhjä_sivu/Kumoukset', 'Kumoustilasto', 'revertstats');
var debug=1;
var pageName=mw.config.get("wgPageName");
if (mw.config.get("wgCanonicalSpecialPageName")==="Blankpage")
{
var re = new RegExp("Toiminnot:Tyhjä_sivu/Kumoukset(/(.*?))?$");
var m = re.exec(pageName);
if (m !== null) {
// Poistetaan sivun alusta tyhjä sivu -tekstit.
rewrite_page_info();
if (m[2] !== undefined)
{
var limit=parseInt(m[2]);
if (m[2].toLowerCase() === "kaikki")
{
$('.revertlimitlink_all').css('font-weight', 600);
count_stats(500,1);
}
else if (Number.isInteger(limit) && limit>0 && limit<501 )
{
$('.revertlimitlink_' +limit).css('font-weight', 600);
count_stats(m[2],0);
}
else
{
$('.revertlimitlink_10').css('font-weight', 600);
count_stats(10,0);
}
}
else
{
$('.revertlimitlink_10').css('font-weight', 600);
count_stats(10,0);
}
}
}
else if (pageName==="Käyttäjä:Zache/test.js" && debug==1)
{
$('.revertlimitlink_10').css('font-weight', 600);
count_stats(5,0);
}
}
$(count_stats_loader);