मीडियाविकि:DynamicRC.js
सूचना : भवता/भवत्या कृतानि सम्पादनानि संरक्ष्य तानि परिवर्तनेषु द्रष्टुं गवेषकस्य पृष्ठस्य पुनरारोपणम् (reload) आवश्यकं भवति ।
- Firefox / Safari: Shiftकुड्मलेन सह Reloadकुड्मलं नुदतु ।
- Google Chrome: Ctrl-Shift-R नोदनेन पुनरारोपणं भवति । (⌘-R इति Mac तन्त्रांशप्रयोक्तॄभ्यः)
- Internet Explorer: Ctrlकुड्मलेन सह Refreshकुड्मलं नुदतु, Ctrl-F5 नुदतु वा ।
- Opera: Tools → Preferences इत्यत्र गत्वा कर्तुं शक्नोति ।
/****************************
Dynamic Recent Changes via Websockets
Author : ThomasV
This requires a recent browser (Firefox 4 or Chrome 6)
******************************/
function dynamic_rc(){
if (!window.WebSocket) return;
var filter_namespace = null;
n = document.URL.match(/namespace=(\d+)/g);
if(n) filter_namespace = n[0].substring(10, n[0].length );
var invert_namespace = (document.URL.indexOf("invert=1")!=-1);
window.onbeforeunload = function() { if(ws) { ws.send("close"); ws.close(); ws=null; } window.websocket=null; }
c = document.getElementsByClassName("mw-rc-label-legend")[0];
m = c.innerHTML.match(/<abbr class=\"(.*?)\" title=\"(.*?)\">(.*?)<\/abbr>/g);
var flags_legend = { "unpatrolled":"" };
for(i=0;i<m.length;i++) {
m2 = m[i].match(/<abbr class=\"(.*?)\" title=\"(.*?)\">(.*?)<\/abbr>/);
flags_legend[ m2[1] ] = m[i];
}
var ws = new WebSocket("ws://login.toolserver.org:9999/");
window.websocket = ws;
ws.onopen = function() {
channel = self.wgServer.substr(7,self.wgServer.length-11);
ws.send("#channels:"+channel);
};
ws.onmessage = function (e) {
if(window==null) return;
try{ if(ws != window.websocket) return; } catch(err) {return;}
if(self.wgServer==null || self.wgArticlePath==null || document==null || window==null ) {
return;
}
d = document.getElementsByTagName("ul");
if(!d) return;
if(!d[0]) return;
for(i=0; i<d.length; i++) { if(d[i].className=="special") break; }
d = d[i];
oc = function(a){
var o = {};
for(var i=0;i<a.length;i++) { o[a[i]]=''; }
return o;
}
msg_block = { 'en':'block', 'fr':'bloquer', 'de':'Sperren', 'es':'bloquear' }
msg_talk = { 'en':'talk', 'fr':'discuter', 'de':'Diskussion', 'es':'discusión', 'sv':'Diskussion' }
msg_contributions = { 'en':'contributions', 'fr':'contributions', 'de':'Beiträge', 'es':'contribuciones', 'sv':'Bidrag' }
msg_diff = { 'en':'diff', 'fr':'diff', 'de':'Unterschied', 'es':'dif', 'sv':'skillnad' }
msg_hist = { 'en':'hist', 'fr':'hist', 'de':'Versionen', 'es':'hist', 'sv':'historik' }
pr_msg = function(mlist) {
kmsg = mlist[self.wgUserLanguage];
if(!kmsg) kmsg = mlist['en'];
return kmsg;
}
msg = e.data.substr(1,e.data.length-2);
msg = msg.split("\" \"");
if(msg[0]=="error") {
alert(msg[1]);
return;
}
domain = msg[0];
flag = msg[1];
user = msg[2];
userpage_url = msg[3];
page = msg[4];
page_url = msg[5];
diff_url = msg[6];
num_diff = msg[7];
comment = msg[8];
namespace = msg[9];
if(filter_namespace!=null) {
if( (invert_namespace) && (namespace==filter_namespace) ) return;
if((!invert_namespace) && (namespace!=filter_namespace) ) return;
}
hist_url = diff_url+"&action=history";
hide_bots = document.URL.indexOf("hidebots=0") == -1;
if(flag=="patrol" ) return;
if(flag in oc(['delete', 'create', 'block', 'unblock', 'event', 'upload', 'move', 'modify', 'protect', "overwrite", "revision", "restore", "approve", "move_redir", "renameuser" ]) ) flag="";
if( (flag.indexOf("B")>=0) && hide_bots) return;
is_new = (flag.indexOf("N")>=0);
if( flag.indexOf("!")>=0 ) flag = flag.replace("!","") + "!";
flag = flag.replace("!",flags_legend["unpatrolled"]);
flag = flag.replace("M",flags_legend["minor"]);
flag = flag.replace("N",flags_legend["newpage"]);
flag = flag.replace("B",flags_legend["bot"]);
if(comment) {
comment = comment.replace(/</g,"<").replace(/>/g,">");
comment = comment.replace(/\[\[(.*?)\|(.*?)\]\]/g , "<a href='"+self.wgArticlePath+"'>$2</a>");
comment = comment.replace(/\[\[(.*?)\]\]/g , "<a href='"+self.wgArticlePath+"'>$1</a>");
comment = comment.replace(/\/\*\s*(.*?)\s*\*\/ (.*?)/, "<span class=autocomment><a href='"+self.wgArticlePath+"' title=''>→</a>$1 : </span>$2");
comment = comment.replace(/\/\*\s*(.*?)\s*\*\//, "<span class=autocomment><a href='"+self.wgArticlePath+"' title=''>→</a>$1</span>");
comment_str = " <span class='comment'>(" + comment +")</span>";
}
else comment_str="";
currentTime = new Date()
hours = currentTime.getHours()
minutes = currentTime.getMinutes()
if( minutes<10 ) { minutes = "0" + minutes; }
if( hours<10 ) { hours = "0" + hours; }
if(num_diff[1]=='+')
num_diff_str = " . . <span class='mw-plusminus-pos'>" + num_diff + "</span> . .";
else if(num_diff[1]=='-')
num_diff_str = " . . <span class='mw-plusminus-neg'>" + num_diff + "</span> . .";
else
num_diff_str = " . . <span class='mw-plusminus-null'>" + num_diff + "</span> . .";
if(num_diff.length>6) {
num_diff_str = num_diff_str.replace("span","strong");
num_diff_str = num_diff_str.replace("span","strong");
}
talk_url= self.wgServer + "/wiki/User_talk:"+user;
contribs_url = self.wgServer+"/wiki/Special:Contributions/"+user;
if( "sysop" in oc(self.wgUserGroups)) {
block_url = self.wgServer+"/wiki/Special:Block/"+user;
block_str = " | <a href=\"" + block_url + "\">" + pr_msg(msg_block) + "</a>";
}
else block_str="";
if( user.match(/^[0-9\.]+$/) )
user_str = " <a href=\"" + contribs_url + "\">" + user + "</a> "
+ "(<a href=\"" + talk_url + "\">"+pr_msg(msg_talk)+"</a>"
+ block_str + ") "
else
user_str = " <a href=\"" + userpage_url + "\" class=\"mw-userlink\">" + user + "</a> "
+ "<span class=\"mw-usertoollinks\">(<a href=\"" + talk_url + "\">"+pr_msg(msg_talk)+"</a>"
+ " | <a href=\"" + contribs_url + "\">"+pr_msg(msg_contributions)+"</a>"
+ block_str + ")</span> " ;
if(is_new) diff_str = pr_msg(msg_diff);
else diff_str = "<a href=\"" + diff_url + "\">" + pr_msg(msg_diff) + "</a>";
if(self.wgUserLanguage=="fr") sep_str = " ; ";
else sep_str = "; ";
d.innerHTML = "<li>(" + diff_str + " | <a href=\"" + hist_url + "\">"+pr_msg(msg_hist)+"</a>) "
+ " . . <strong>" + flag +"</strong>"
+ " <a href=\"" + page_url + "\">"+page + "</a>"
+ sep_str
+ hours + ":" + minutes
+ num_diff_str
+ user_str
+ comment_str
+ "</li>" + d.innerHTML;
d.removeChild(d.lastChild);
};
ws.onclose = function() { };
}
if(mw.config.get('wgCanonicalNamespace')=="Special" && mw.config.get('wgCanonicalSpecialPageName')=="Recentchanges") $(dynamic_rc);