User:Anomie/lastmod.js

This is an old revision of this page, as edited by Anomie (talk | contribs) at 14:47, 1 November 2009 (crap, fix that). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
/* If you want to use this script, simply add the following line to your monobook.js:
 
importScript('User:Anomie/lastmod.js'); // Linkback: [[User:Anomie/lastmod.js]]
 
* (Please keep the comment so I can see how many people use this).
*/

importStylesheet('User:Anomie/lastmod.css');

/// Configuration:

// Recognized values are "dmy" or "mdy"; anything else results in YYYY-MM-DD
// format output.
if(typeof(window.LastModDateFormat)=='undefined') LastModDateFormat="dmy";

if(typeof(window.LastModRelative)=='undefined') LastModRelative=false;

if(typeof(window.LastModUseUTC)=='undefined') LastModUseUTC=false;

if(typeof(window.LastModMonths)=='undefined') LastModMonths=['January','February','March','April','May','June','July','August','September','October','November','December'];


addOnloadHook(function(){
    if(wgNamespaceNumber<0) return;
    var ins=document.getElementById('siteSub');
    if(!ins) return;

    var x = sajax_init_object();
    if(!x) return;
    x.open('POST', wgServer+wgScriptPath+'/api.php', true);
    x.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    x.onreadystatechange=function(){
        if(x.readyState!=4) return;
        var r;
        if(typeof(window.JSON)!='undefined'){
            r=JSON.parse(x.responseText);
        } else {
            r=x.responseText;
            r=!(/[^,:{}\[\]0-9.\-+Eaeflnr-u\n\r\t]/.test(r.replace(/"(\\.|[^\x22\\])*"/g,''))) && eval('('+r+')');
        }
        if(typeof(r.query.pages[wgArticleId].revisions[0].timestamp)=='undefined') return;
        m=r.query.pages[wgArticleId].revisions[0].timestamp.match(/^(\d\d\d\d)-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)Z$/);
        var dt;
        if(LastModRelative){
            dt=[];
            var n=new Date();
            var dy=n.getUTCFullYear()-m[1];
            var dm=n.getUTCMonth()+1-m[2];
            var dd=n.getUTCDate()-m[3];
            var dh=n.getUTCHours()-m[4];
            var di=n.getUTCMinutes()-m[5];

            if(di<0){ di+=60; dh--; }
            if(dh<0){ dh+=60; dd--; }
            if(dd<0){ var nn=n; nn.setUTCDate(0); dd+=nn.getDate(); dm--; }
            if(dm<0){ dm+=12; dy--; }
            if(dy>=0){
                if(dy!=0) dt.push(dy+' year'+((dy==1)?'':'s'));
                if(dm!=0) dt.push(dm+' month'+((dm==1)?'':'s'));
                if(dd!=0) dt.push(dd+' day'+((dd==1)?'':'s'));
                if(dy==0 && dm==0 && dd<7){
                    if(dh!=0) dt.push(dh+' hour'+((dh==1)?'':'s'));
                    if(dd<2 && di!=0) dt.push(di+' minute'+((di==1)?'':'s'));
                }
            }
            if(dt.length==0) dt='less than a minute ago';
            else dt='about '+dt.join(', ')+' ago';
        } else {
            if(LastModUseUTC){
                m[2]-=1;
            } else {
                dt=new Date(Date.UTC(m[1],m[2]-1,m[3],m[4],m[5],m[6]));
                m[1]=dt.getFullYear();
                m[2]=dt.getMonth();
                m[3]=dt.getDate();
                m[4]=dt.getHours().toString(); if(m[4].length==1) m[4]='0'+m[4];
                m[5]=dt.getMinutes().toString(); if(m[5].length==1) m[5]='0'+m[5];
                m[6]=dt.getSeconds().toString(); if(m[6].length==1) m[6]='0'+m[6];
            }

            if(LastModDateFormat=='dmy'){
                dt=m[3]+' '+LastModMonths[m[2]]+' '+m[1];
            } else if(LastModDateFormat=='dmy'){
                dt=LastModMonths[m[2]]+' '+m[3]+', '+m[1];
            } else {
                m[2]++; if(m[2]<10) m[2]='0'+m[2];
                m[3]=m[3].toString(); if(m[3].length==1) m[3]='0'+m[3];
                dt=m[1]+'-'+m[2]+'-'+m[3];
            } 
            dt+=' '+m[4]+':'+m[5];
        }

        var s=document.createElement('SPAN');
        s.className='lastmodheader';
        s.appendChild(document.createTextNode('Last modified '+dt));
        ins.parentNode.insertBefore(s,ins);
    };
    x.send('action=query&format=json&titles='+encodeURIComponent(wgPageName)+'&prop=revisions&rvprop=timestamp');
});