[go: nahoru, domu]

Hopp til innhold

Bruker:Jeblad/age.js

Fra Wikipedia, den frie encyklopedi

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() );
			}
		} );
	} );
} );