v50 Steam/Premium information for editors
- v50 information can now be added to pages in the main namespace. v0.47 information can still be found in the DF2014 namespace. See here for more details on the new versioning policy.
- Use this page to report any issues related to the migration.
This notice may be cached—the current version can be found here.
User:Lethosor/rater 0.1.js
Jump to navigation
Jump to search
Note: After saving, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Go to Menu → Settings (Opera → Preferences on a Mac) and then to Privacy & security → Clear browsing data → Cached images and files
/*
Rating Script (DF Wiki)
Improved version -- now uses jQuery, extra options (existence not guaranteed)
*/
addOnloadHook(function(){jQuery(function($){
SCOPE = this
var rater = {}
function PD(e){//preventDefault
if(e && 'preventDefault' in e && 'call' in e.preventDefault)
e.preventDefault()
}
rater.page = {
name: wgPageName,
url: wgScript+'?title='+wgPageName
}
// Set up UI
rater.overlay = $('<div>').css({width:'100%', height:'100%', top:0, left:0,
position:'fixed', 'background-color':'rgba(128,128,128,0.5)', 'z-index':9999})
.hide().appendTo('body');
rater.box = $('<div>').css({width:'80%', height:'80%', top:'10%', left:'10%',
position:'fixed', 'background-color':'white', 'z-index':10000, padding:'1em'})
.hide().appendTo('body');
rater.cancel_link = $('<a>').text('Cancel').attr('href','#rater-cancel').css({color:'red',
'float':'right'}).appendTo(rater.box);
rater.box.clear = function(){
rater.box.html('')
rater.box.append(rater.cancel_link)
.append($('<h2>').text('Rating '+wgPageName));
};
rater.box.clear();
rater.cancel = function(e){
PD(e)
rater.overlay.stop(1,1).fadeOut(500);
rater.box.stop(1,1).fadeOut(500);
};
$('body').on('click','a[href=#rater-cancel]',rater.cancel);
// Set up link
rater.show_link = $("<li>").append($('<span>').append(
$("<a href='#rater-invoke'>").text('Rate')
));
$("#left-navigation #p-namespaces ul:nth(0)").append(rater.show_link)
rater.invoke = function(e){
PD(e);
rater.overlay.stop(1,1).fadeIn(500);
rater.box.stop(1,1).fadeIn(500);
rater.box.clear()
rater.box.append('<p>Performing automatic tests, please wait...</p>');
rater.begin_tests();
};
$('body').on('click', 'a[href=#rater-invoke]', rater.invoke)
/*
Tests
Usage: Specify a URL to get data from and `processor` function to extract the
needed data
*/
var tests={};
tests.list={}; //list of all tests
tests.results={}; //shortcut: data[x]==lists[x].data
tests.num_waiting = 0;
tests.add = function(name, data_url, processor){
//Note: jQuery caches Ajax requests by default, no need to here
tests.list[name] = {data_url:data_url, processor:processor};
//console.log('retrieving')
$.get(data_url, function(data){
tests.process(name, data);
});
tests.num_waiting++
};
tests.process = function(name,raw_data){
result = tests.list[name].processor(raw_data);
tests.list[name].result = tests.results[name] = result
tests.num_waiting--
if(tests.num_waiting <= 0){
setTimeout(tests.all_complete, 1); //avoid stacking
}
};
tests.all_callbacks=[]; //when all tests are done
tests.all_complete = function(){
for(i=0; i<tests.all_callbacks.length; i++){
tests.all_callbacks[i]();
}
};
tests.add_callback=function(func){
tests.all_callbacks.push(func);
};
rater.begin_tests = function(){
render_url=rater.page.url+'&action=render'
tests.add('redlinks', render_url, function(data){
all_links = data.match(/<a .*<\/a>/g);
if(!all_links) return 0; //no links
total_redlinks=0;
$.each(all_links, function(i,link){
if(link.match(/href=.*redlink=1/)) total_redlinks++;
});
return total_redlinks
});
tests.add('editors', rater.page.url+'&action=history&limit=250', function(data){
all_editors = data.match(/<li>.*<\/li>/g)
if(!all_editors) return 0; //no editors
editors={};
$.each(all_editors, function(i,li){
ed = $(li).find('.mw-userlink:nth(0)').text()
if(ed in editors) editors[ed]=0;
editors[ed]++
});
num=0;
for(i in editors){
if(i in {}) continue;
num++
}
return num;
});
tests.add('orphaned', wgScript+'/Special:WhatLinksHere/'+wgPageName, function(data){
return !$(data).find('#mw-whatlinkshere-list').length;
});
tests.add('deadend', render_url, function(data){
return !$(data).find('a[href*="'+wgScript+'"]').length;
});
tests.add_callback(function(){
rater.display_test_results();
});
};
rater.score_bool=function(v,y,n){
if(isNaN(Number(n))) n=-y;
return Number(v?y:n);
};
rater.score_int=function(v,weight,base){
if(!base) base=0;
return v*weight+base;
};
rater.display_test_results=function(){
rater.box.clear();
data=tests.results;
for(i in data){
if(i in {}) continue;
rater.box.append($("<p>"+i+": "+data[i]+"</p>"));
}
rater.score = 0
+rater.score_bool(data.deadend,-25)
+rater.score_bool(data.orphaned,-50)
+rater.score_int(data.redlinks,-5)
+rater.score_int(data.editors,35,-30)
;
rater.box.append($("<p>").text("Score: "+rater.score))
};
//export
rater.tests = tests;
window.rater=rater
return rater;
});});