मीडियाविकि: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,"&lt;").replace(/>/g,"&gt;");
           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);
"https://sa.wikisource.org/w/index.php?title=मीडियाविकि:DynamicRC.js&oldid=302409" इत्यस्माद् प्रतिप्राप्तम्