User:Anomie/lastmod.js: Difference between revisions

Content deleted Content added
oops
maintenance: more info TypeError: Cannot read property '0' of undefined
 
(5 intermediate revisions by one other user not shown)
Line 5:
* (Please keep the comment so I can see how many people use this).
*/
 
// See talk for configuration instructions
 
importStylesheet('User:Anomie/lastmod.css');
 
if(typeof(window.LastModDateFormat)=='undefined') window.LastModDateFormat="dmy";
/// Configuration:
if(typeof(window.LastModRelative)=='undefined') window.LastModRelative=false;
if(typeof(window.LastModUseUTC)=='undefined') window.LastModUseUTC=false;
if(typeof(window.LastModMonths)=='undefined') window.LastModMonths=['January','February','March','April','May','June','July','August','September','October','November','December'];
 
if(mw.config.get('wgNamespaceNumber')>=0) mw.loader.using('mediawiki.util', function(){
// Recognized values are "dmy" or "mdy"; anything else results in YYYY-MM-DD
$(document).ready(function(){
// format output.
var ins=document.getElementById('siteSub');
if(typeof(window.LastModDateFormat)=='undefined') LastModDateFormat="dmy";
if(!ins) return;
 
var articleId=mw.config.get('wgArticleId');
if(typeof(window.LastModRelative)=='undefined') LastModRelative=false;
$.ajax({
url:mw.util.wikiScript('api'),
dataType:'json',
type:'POST',
data:{
format:'json',
action:'query',
pageids:articleId,
prop:'revisions',
rvprop:'timestamp'
},
success:function(r, sts, xhr){
try {
var ts = r.query.pages[articleId].revisions[0].timestamp;
} catch (e) {
return; // unexpected response e.g. TypeError: Cannot read property '0' of undefined
}
if(typeof(ts)=='undefined') return;
m=r.query.pages[articleId].revisions[0].timestamp.match(/^(\d\d\d\d)-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)Z$/);
var dt;
if(window.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(typeof(window.LastModUseUTC)=='undefined') LastModUseUTC=false;
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(window.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(window.LastModDateFormat=='dmy'){
if(typeof(window.LastModMonths)=='undefined') LastModMonths=['January','February','March','April','May','June','July','August','September','October','November','December'];
dt=m[3]+' '+window.LastModMonths[m[2]]+' '+m[1];
} else if(window.LastModDateFormat=='dmy'){
dt=window.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';
addOnloadHook(function(){
s.appendChild(document.createTextNode('Last modified '+dt));
if(wgNamespaceNumber<0) return;
ins.parentNode.insertBefore(s,ins);
var ins=document.getElementById('siteSub');
if(!ins) return; },
error:function(xhr,textStatus,errorThrown){
 
throw new Error('AJAX error: '+textStatus+' '+errorThrown);
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 showhours=true, showminutes=true;
var d=n.getUTCFullYear()-m[1]; if(d!=0){ dt.push(d+' year'+((d==1)?'':'s')); showhours=false; }
d=n.getUTCMonth()+1-m[2]; if(d!=0){ dt.push(d+' month'+((d==1)?'':'s')); showhours=false; }
d=n.getUTCDate()-m[3];
if(d!=0){
dt.push(d+' day'+((d==1)?'':'s'));
if(d>=7) showhours=false;
if(d>1) showminutes=false;
}
if(showhours}){;
});
d=n.getUTCHours()-m[4]; if(d!=0) dt.push(d+' hour'+((d==1)?'':'s'));
if(showminutes) d=n.getUTCMinutes()-m[5]; if(d!=0) dt.push(d+' minute'+((d==1)?'':'s'));
}
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');
});