2008-07-18 11:34:06 -04:00
/ *
2008-07-19 09:40:36 -04:00
* Time Ago ( for jQuery ) version : 0.1 . 99 ( 07 / 18 / 2008 )
2008-07-18 11:34:06 -04:00
* @ requires jQuery v1 . 2 or later
*
* Timeago is a jQuery plugin that makes it easy to support automatically
* updating fuzzy timestamps ( e . g . "4 minutes ago" or "about 1 day ago" ) .
*
* For usage and examples , visit :
* http : //timeago.yarp.com/
*
* Licensed under the MIT :
* http : //www.opensource.org/licenses/mit-license.php
*
* Copyright ( c ) 2008 , Ryan McGeary ( ryanonjavascript - [ at ] - mcgeary [ * dot * ] org )
* /
( function ( $ ) {
$ . timeago = function ( timestamp ) {
// TODO: should take a Date, ISO8601, or element[title=iso8601]
// return words if date or iso8601; convert and return element if element
alert ( "jQuery.timeago helper not implemented yet" ) ;
} ;
$ . extend ( $ . timeago , {
settings : {
refreshSeconds : 60
} ,
inWords : function ( distanceMillis ) {
var seconds = distanceMillis / 1000 ;
var minutes = seconds / 60 ;
var hours = minutes / 60 ;
var days = hours / 24 ;
var years = days / 365 ;
var words = seconds < 45 && "less than a minute" ||
2008-07-19 09:11:30 -04:00
seconds < 90 && "about a minute" ||
2008-07-18 11:34:06 -04:00
minutes < 45 && Math . round ( minutes ) + " minutes" ||
2008-07-19 09:11:30 -04:00
minutes < 90 && "about an hour" ||
hours < 24 && "about " + Math . round ( hours ) + " hours" ||
hours < 48 && "a day" ||
2008-07-18 11:34:06 -04:00
days < 30 && Math . floor ( days ) + " days" ||
2008-07-19 09:11:30 -04:00
days < 60 && "about a month" ||
2008-07-18 11:34:06 -04:00
days < 365 && Math . floor ( days / 30 ) + " months" ||
2008-07-19 09:11:30 -04:00
years < 2 && "about a year" ||
2008-07-18 11:34:06 -04:00
Math . floor ( years ) + " years" ;
return words + " ago" ;
} ,
parse : function ( iso8601 ) {
var s = iso8601 . replace ( /^\s+/ , '' ) . replace ( /\s+$/ , '' ) ;
s = s . replace ( /-/ , "/" ) . replace ( /-/ , "/" ) ;
s = s . replace ( /T/ , " " ) . replace ( /Z/ , " UTC" ) ;
s = s . replace ( /([\+-]\d\d)\:?(\d\d)/ , " $1$2" ) ; // -04:00 -> -0400
return new Date ( s ) ;
}
} ) ;
$ . fn . timeago = function ( ) {
var self = this ;
self . each ( refresh ) ;
var $s = $ . timeago . settings ;
if ( $s . refreshSeconds > 0 ) {
setInterval ( function ( ) { self . each ( refresh ) ; } , ( $s . refreshSeconds * 1000 ) ) ;
}
} ;
function refresh ( ) {
var date = $ . timeago . parse ( this . title ) ;
$ ( this ) . text ( $ . timeago . inWords ( distance ( date ) ) ) ;
}
function distance ( date ) {
return ( new Date ( ) . getTime ( ) - date . getTime ( ) ) ;
}
} ) ( jQuery ) ;