11Discourse . Formatter = ( function ( ) {
2- var updateRelativeAge , autoUpdatingRelativeAge , relativeAge , relativeAgeTiny , relativeAgeMedium ;
2+
3+ var updateRelativeAge , autoUpdatingRelativeAge , relativeAge , relativeAgeTiny , relativeAgeMedium , relativeAgeMediumSpan ;
4+
5+ var shortDateNoYear = Ember . String . i18n ( "dates.short_date_no_year" ) ;
6+ var longDate = Ember . String . i18n ( "dates.long_date" ) ;
7+ var shortDate = Ember . String . i18n ( "dates.short_date" ) ;
38
49 updateRelativeAge = function ( elems ) {
510 elems . each ( function ( ) {
@@ -19,7 +24,7 @@ Discourse.Formatter = (function(){
1924 relativeAgeTiny = function ( date , options ) {
2025 var format = "tiny" ;
2126 var distance = Math . round ( ( new Date ( ) - date ) / 1000 ) ;
22- var distance_in_minutes = Math . round ( distance / 60.0 ) ;
27+ var distanceInMinutes = Math . round ( distance / 60.0 ) ;
2328
2429 var formatted ;
2530 var t = function ( key , opts ) {
@@ -28,29 +33,29 @@ Discourse.Formatter = (function(){
2833
2934 switch ( true ) {
3035
31- case ( distance_in_minutes < 1 ) :
36+ case ( distanceInMinutes < 1 ) :
3237 formatted = t ( "less_than_x_minutes" , { count : 1 } ) ;
3338 break ;
34- case ( distance_in_minutes >= 1 && distance_in_minutes <= 44 ) :
35- formatted = t ( "x_minutes" , { count : distance_in_minutes } ) ;
39+ case ( distanceInMinutes >= 1 && distanceInMinutes <= 44 ) :
40+ formatted = t ( "x_minutes" , { count : distanceInMinutes } ) ;
3641 break ;
37- case ( distance_in_minutes >= 45 && distance_in_minutes <= 89 ) :
42+ case ( distanceInMinutes >= 45 && distanceInMinutes <= 89 ) :
3843 formatted = t ( "about_x_hours" , { count : 1 } ) ;
3944 break ;
40- case ( distance_in_minutes >= 90 && distance_in_minutes <= 1439 ) :
41- formatted = t ( "about_x_hours" , { count : Math . round ( distance_in_minutes / 60.0 ) } ) ;
45+ case ( distanceInMinutes >= 90 && distanceInMinutes <= 1439 ) :
46+ formatted = t ( "about_x_hours" , { count : Math . round ( distanceInMinutes / 60.0 ) } ) ;
4247 break ;
43- case ( distance_in_minutes >= 1440 && distance_in_minutes <= 2519 ) :
48+ case ( distanceInMinutes >= 1440 && distanceInMinutes <= 2519 ) :
4449 formatted = t ( "x_days" , { count : 1 } ) ;
4550 break ;
46- case ( distance_in_minutes >= 2520 && distance_in_minutes <= 129599 ) :
47- formatted = t ( "x_days" , { count : Math . round ( distance_in_minutes / 1440.0 ) } ) ;
51+ case ( distanceInMinutes >= 2520 && distanceInMinutes <= 129599 ) :
52+ formatted = t ( "x_days" , { count : Math . round ( distanceInMinutes / 1440.0 ) } ) ;
4853 break ;
49- case ( distance_in_minutes >= 129600 && distance_in_minutes <= 525599 ) :
50- formatted = t ( "x_months" , { count : Math . round ( distance_in_minutes / 43200.0 ) } ) ;
54+ case ( distanceInMinutes >= 129600 && distanceInMinutes <= 525599 ) :
55+ formatted = t ( "x_months" , { count : Math . round ( distanceInMinutes / 43200.0 ) } ) ;
5156 break ;
5257 default :
53- var months = Math . round ( distance_in_minutes / 43200.0 ) ;
58+ var months = Math . round ( distanceInMinutes / 43200.0 ) ;
5459 if ( months < 24 ) {
5560 formatted = t ( "x_months" , { count : months } ) ;
5661 } else {
@@ -62,37 +67,61 @@ Discourse.Formatter = (function(){
6267 return formatted ;
6368 } ;
6469
70+ relativeAgeMediumSpan = function ( distance , leaveAgo ) {
71+ var formatted , distanceInMinutes ;
72+
73+ distanceInMinutes = Math . round ( distance / 60.0 ) ;
74+
75+ var t = function ( key , opts ) {
76+ return Ember . String . i18n ( "dates.medium" + ( leaveAgo ?"_with_ago" :"" ) + "." + key , opts ) ;
77+ }
78+
79+ switch ( true ) {
80+ case ( distanceInMinutes >= 1 && distanceInMinutes <= 56 ) :
81+ formatted = t ( "x_minutes" , { count : distanceInMinutes } ) ;
82+ break ;
83+ case ( distanceInMinutes >= 56 && distanceInMinutes <= 89 ) :
84+ formatted = t ( "x_hours" , { count : 1 } ) ;
85+ break ;
86+ case ( distanceInMinutes >= 90 && distanceInMinutes <= 1379 ) :
87+ formatted = t ( "x_hours" , { count : Math . round ( distanceInMinutes / 60.0 ) } ) ;
88+ break ;
89+ case ( distanceInMinutes >= 1380 && distanceInMinutes <= 2159 ) :
90+ formatted = t ( "x_days" , { count : 1 } ) ;
91+ break ;
92+ case ( distanceInMinutes >= 2160 ) :
93+ formatted = t ( "x_days" , { count : Math . round ( ( distanceInMinutes - 720.0 ) / 1440.0 ) } ) ;
94+ break ;
95+ }
96+
97+ return formatted ;
98+ } ;
99+
65100 relativeAgeMedium = function ( date , options ) {
66- var displayDate , fiveDaysAgo , oneMinuteAgo , fullReadable , humanized , leaveAgo , val ;
101+ var displayDate , fiveDaysAgo , oneMinuteAgo , fullReadable , leaveAgo , val ;
67102
68103 leaveAgo = options . leaveAgo ;
104+ var distance = Math . round ( ( new Date ( ) - date ) / 1000 ) ;
69105
70106 if ( ! date ) {
71107 return "—" ;
72108 }
73109
74- fullReadable = date . format ( "long" ) ;
110+ fullReadable = moment ( date ) . format ( longDate ) ;
75111 displayDate = "" ;
76- fiveDaysAgo = ( new Date ( ) ) - 432000000 ;
77- oneMinuteAgo = ( new Date ( ) ) - 60000 ;
112+ fiveDaysAgo = 432000 ;
113+ oneMinuteAgo = 60 ;
78114
79- if ( oneMinuteAgo <= date . getTime ( ) && date . getTime ( ) <= ( new Date ( ) ) ) {
115+ if ( distance >= 0 && distance < oneMinuteAgo ) {
80116 displayDate = Em . String . i18n ( "now" ) ;
81- } else if ( fiveDaysAgo > ( date . getTime ( ) ) ) {
117+ } else if ( distance > fiveDaysAgo ) {
82118 if ( ( new Date ( ) ) . getFullYear ( ) !== date . getFullYear ( ) ) {
83- displayDate = date . format ( "short" ) ;
119+ displayDate = moment ( date ) . format ( shortDate ) ;
84120 } else {
85- displayDate = date . format ( "short_no_year" ) ;
121+ displayDate = moment ( date ) . format ( shortDateNoYear ) ;
86122 }
87123 } else {
88- humanized = date . relative ( ) ;
89- if ( ! humanized ) {
90- return "" ;
91- }
92- displayDate = humanized ;
93- if ( ! leaveAgo ) {
94- displayDate = ( date . millisecondsAgo ( ) ) . duration ( ) ;
95- }
124+ displayDate = relativeAgeMediumSpan ( distance , leaveAgo ) ;
96125 }
97126 return "<span class='date' title='" + fullReadable + "'>" + displayDate + "</span>" ;
98127 } ;
0 commit comments