Bruker:Jeblad/age.js
Utseende
Merk: Etter publisering vil det kanskje være nødvendig å slette mellomlageret i nettleseren din for å se endringene.
- Firefox / Safari: Hold Shift mens du klikker på Oppdater, eller trykk enten Ctrl+F5 eller Ctrl+R (⌘+R på Mac)
- Google Chrome: Trykk Ctrl+Shift+R (⌘+Shift+R på Mac)
- Edge: Hold Ctrl mens du trykker på Oppdater eller trykk Ctrl+F5
// Code to calculate age
// © John Erling Blad, Creative Commons by Attribution 3.0
var fallbacks = {
'gadget-age-years': '({{PLURAL:$1|0=infant|1=one year|$1 years}})'
};
$.when( mw.loader.using( [ 'mediawiki.api', 'mediawiki.util' ] ) )
.then( function() {
"use strict";
return new mw.Api().getMessages( Object.keys( fallbacks ), { amlang: mw.config.get( 'wgContentLanguage' ) } )
.fail( function() {
$.each( fallbacks, function( key, message ) {
mw.messages.set( key, message );
} );
} )
.then( function( messages ) {
var msgs = {};
jQuery.extend( msgs, fallbacks, messages );
$.each( msgs, function( key, message ) {
mw.messages.set( key, message );
} );
} );
} )
.fail( function() {
mw.log.warn( 'Gadget "age" failed to load' );
})
.then( function() {
"use strict";
var conf = mw.config.get( [
'wgAction'
] );
if ( !( conf.wgAction === "view" || conf.wgAction === "submit" ) ) {
return;
}
mw.hook( 'wikipage.content' ).add( function( $content ) {
//var meanYear = 365.2425; // mean gregorian calendar year
var meanYear = 365.24219; // mean tropical year
var year = meanYear*1000*60*60*24; // year in microseconds
var cheat = 6*60*60*1000; // 6 hours in microseconds
var $age = mw.util.$content.find( '.age' );
$age.each( function() {
mw.log.warn( 'Age', 'found age' );
var first = new Date( $( this ).attr( 'data-born' ) );
if ( isNaN( first.getUTCFullYear() ) ) {
mw.log.warn( 'Age', 'no valid birth date' );
return;
}
var last = new Date( $( this ).attr( 'data-died' ) );
if ( isNaN( last.getUTCFullYear() ) ) {
mw.log.warn( 'Age', 'living person' );
last = new Date();
}
// we cheat a bit to get the result people expect
//var age = Math.floor( ( last - first /*+ cheat*/ ) / year );
var age = last.getUTCFullYear() - first.getUTCFullYear();
if ( last.getUTCMonth() < first.getUTCMonth() ) {
age -= 1;
}
else if ( last.getUTCMonth() == first.getUTCMonth() ) {
if ( last.getUTCDate() < first.getUTCDate() ) {
age -= 1;
}
}
if ( age < 0 ) {
mw.log.warn( 'Age', 'negative age' );
return;
}
var msg = mw.message( 'gadget-age-years', age );
if ( !msg.exists() ) {
mw.log.warn( 'Age', 'message does not exists' );
return;
}
var text = mw.message( 'gadget-age-years', age ).text();
if ( $( this ).text() !== text ) {
$( this ).text( mw.message( 'gadget-age-years', age ).text() );
}
} );
} );
} );