diff --git a/app/assets/javascripts/app/lib/app_post/pretty_date.coffee b/app/assets/javascripts/app/lib/app_post/pretty_date.coffee index 13c6157a2..fc2711985 100644 --- a/app/assets/javascripts/app/lib/app_post/pretty_date.coffee +++ b/app/assets/javascripts/app/lib/app_post/pretty_date.coffee @@ -31,7 +31,7 @@ class App.PrettyDate if type is undefined && window.App && window.App.Config type = window.App.Config.get('pretty_date_format') - if type is 'absolute' && direction is 'past' + if type is 'absolute' && (direction is 'past' || direction is 'future') weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] weekday = weekdays[created.getDay()] @@ -128,4 +128,4 @@ class App.PrettyDate @s: (num, digits) -> while num.toString().length < digits num = '0' + num - num \ No newline at end of file + num diff --git a/public/assets/tests/ui.js b/public/assets/tests/ui.js index b01307a63..93eb6d21a 100644 --- a/public/assets/tests/ui.js +++ b/public/assets/tests/ui.js @@ -1,116 +1,238 @@ - // pretty date test("check pretty date", function() { var current = new Date() + // use date formatting as functions to make it more flexible + prettyDateRelative(current, '', true, 'relative'); + prettyDateAbsolute(current, '', true, 'absolute'); // past - var result = App.PrettyDate.humanTime(current); - equal(result, 'just now', 'just now') - result = App.PrettyDate.humanTime(current - 15000); - equal(result, 'just now', 'just now') + function prettyDateRelative(current, escalation, lng, type) { + var result = App.PrettyDate.humanTime(current, escalation, lng, type); + equal(result, 'just now', 'just now') - result = App.PrettyDate.humanTime(current - 60000); - equal(result, '1 minute ago', '1 min ago') + result = App.PrettyDate.humanTime(current - 15000, escalation, lng, type); + equal(result, 'just now', 'just now') - result = App.PrettyDate.humanTime(current - (2 * 60000)); - equal(result, '2 minutes ago', '2 min ago') + result = App.PrettyDate.humanTime(current - 60000, escalation, lng, type); + equal(result, '1 minute ago', '1 min ago') - result = App.PrettyDate.humanTime(current - (60000 * 60)) ; - equal(result, '1 hour ago', '1 hour') + result = App.PrettyDate.humanTime(current - (2 * 60000), escalation, lng, type); + equal(result, '2 minutes ago', '2 min ago') - result = App.PrettyDate.humanTime(current - (60000 * 60 * 2)); - equal(result, '2 hours ago', '2 hours') + result = App.PrettyDate.humanTime(current - (60000 * 60), escalation, lng, type); + equal(result, '1 hour ago', '1 hour') - result = App.PrettyDate.humanTime(current - (60000 * 60 * 2.5)); - equal(result, '2 hours 30 minutes ago', '2.5 hours') + result = App.PrettyDate.humanTime(current - (60000 * 60 * 2), escalation, lng, type); + equal(result, '2 hours ago', '2 hours') - result = App.PrettyDate.humanTime(current - (60000 * 60 * 12.5)); - equal(result, '12 hours ago', '12.5 hours') + result = App.PrettyDate.humanTime(current - (60000 * 60 * 2.5), escalation, lng, type); + equal(result, '2 hours 30 minutes ago', '2.5 hours') - result = App.PrettyDate.humanTime(current - (60000 * 60 * 24)) ; - equal(result, '1 day ago', '1 day') + result = App.PrettyDate.humanTime(current - (60000 * 60 * 12.5), escalation, lng, type); + equal(result, '12 hours ago', '12.5 hours') - result = App.PrettyDate.humanTime(current - (60000 * 60 * 24 * 2)); - equal(result, '2 days ago', '2 days') + result = App.PrettyDate.humanTime(current - (60000 * 60 * 24), escalation, lng, type); + equal(result, '1 day ago', '1 day') - result = App.PrettyDate.humanTime(current - (60000 * 60 * 24 * 2) - (60000 * 5)); - equal(result, '2 days ago', '2 days') + result = App.PrettyDate.humanTime(current - (60000 * 60 * 24 * 2), escalation, lng, type); + equal(result, '2 days ago', '2 days') - result = App.PrettyDate.humanTime(current - (60000 * 60 * 24 * 2.5)); - equal(result, '2 days 12 hours ago', '2.5 days') + result = App.PrettyDate.humanTime(current - (60000 * 60 * 24 * 2) - (60000 * 5), escalation, lng, type); + equal(result, '2 days ago', '2 days') - result = App.PrettyDate.humanTime(current - (60000 * 60 * 24 * 2.5) - (60000 * 5)); - equal(result, '2 days 12 hours ago', '2.5 days') + result = App.PrettyDate.humanTime(current - (60000 * 60 * 24 * 2.5), escalation, lng, type); + equal(result, '2 days 12 hours ago', '2.5 days') - result = App.PrettyDate.humanTime(current - (60000 * 60 * 24 * 10.5)); - var pastDate = new Date(current - (60000 * 60 * 24 * 10.5)) - var dd = pastDate.getDate(); - if(dd<10) { - dd = '0' + dd + result = App.PrettyDate.humanTime(current - (60000 * 60 * 24 * 2.5) - (60000 * 5), escalation, lng, type); + equal(result, '2 days 12 hours ago', '2.5 days') + + result = App.PrettyDate.humanTime(current - (60000 * 60 * 24 * 10.5), escalation, lng, type); + var pastDate = new Date(current - (60000 * 60 * 24 * 10.5)) + var dd = pastDate.getDate(); + if(dd<10) { + dd = '0' + dd + } + var mm = pastDate.getMonth() + 1; + if(mm<10) { + mm = '0' + mm + } + var yyyy = pastDate.getFullYear(); + // mm/dd/yyyy + equal(result, mm+'/'+dd+'/'+yyyy, '10.5 days') + + result = App.PrettyDate.humanTime(current - (60000 * 60 * 24 * 30), escalation, lng, type); + var pastDate = new Date(current - (60000 * 60 * 24 * 30)) + var dd = pastDate.getDate(); + if(dd<10) { + dd = '0' + dd + } + var mm = pastDate.getMonth() + 1; + if(mm<10) { + mm = '0' + mm + } + var yyyy = pastDate.getFullYear(); + // mm/dd/yyyy + equal(result, mm+'/'+dd+'/'+yyyy, '30 days') + + // future + current = new Date() + result = App.PrettyDate.humanTime(current, escalation, lng, type); + equal(result, 'just now', 'just now') + + result = App.PrettyDate.humanTime(current.getTime() + 55000, escalation, lng, type); + equal(result, 'just now', 'just now') + + result = App.PrettyDate.humanTime(current.getTime() + 65000, escalation, lng, type); + equal(result, 'in 1 minute', 'in 1 min') + + result = App.PrettyDate.humanTime(current.getTime() + (2 * 65000), escalation, lng, type); + equal(result, 'in 2 minutes', 'in 2 min') + + result = App.PrettyDate.humanTime(current.getTime() + (60500 * 60), escalation, lng, type); + equal(result, 'in 1 hour', 'in 1 hour') + + result = App.PrettyDate.humanTime(current.getTime() + (60050 * 60 * 2), escalation, lng, type); + equal(result, 'in 2 hours', 'in 2 hours') + + result = App.PrettyDate.humanTime(current.getTime() + (60050 * 60 * 2.5), escalation, lng, type); + equal(result, 'in 2 hours 30 minutes', 'in 2.5 hours') + + result = App.PrettyDate.humanTime(current.getTime() + (60050 * 60 * 24), escalation, lng, type) ; + equal(result, 'in 1 day', 'in 1 day') + + result = App.PrettyDate.humanTime(current.getTime() + (60050 * 60 * 24 * 2), escalation, lng, type); + equal(result, 'in 2 days', 'in 2 days') + + result = App.PrettyDate.humanTime(current.getTime() + (60050 * 60 * 24 * 2.5), escalation, lng, type); + equal(result, 'in 2 days 12 hours', 'in 2.5 days') + + result = App.PrettyDate.humanTime(current.getTime() + (60050 * 60 * 24 * 5.5), escalation, lng, type); + equal(result, 'in 5 days 12 hours', 'in 30.5 days') + + result = App.PrettyDate.humanTime(current.getTime() + (60050 * 60 * 24 * 30.5), escalation, lng, type); + equal(result, 'in 30 days', 'in 30.5 days') + + }; + + function prettyDateAbsolute(current, escalation, lng, type) { + + var result = App.PrettyDate.humanTime(current, escalation, lng, type); + equal(result, 'just now', 'just now') // by defaul < 1 min is just now + + result = App.PrettyDate.humanTime(current - 15000, escalation, lng, type); + equal(result, 'just now', 'just now') // by default < 1 min is just now + + result = App.PrettyDate.humanTime(current - 60000, escalation, lng, type); + diff = 60 + equal(result, getAbsolute(new Date(current - 60000), diff), '1 min ago') + + result = App.PrettyDate.humanTime(current - (2 * 60000), escalation, lng, type); + diff = 2 * 60 + equal(result, getAbsolute(new Date(current - (2 * 60000)), diff), '2 min ago') + + result = App.PrettyDate.humanTime(current - (60000 * 60), escalation, lng, type); + diff = 60 * 60 + equal(result, getAbsolute(new Date(current - (60000 * 60)), diff), '1 hour') + + result = App.PrettyDate.humanTime(current - (60000 * 60 * 2), escalation, lng, type); + diff = 60 * 60 * 2 + equal(result, getAbsolute(new Date(current - (60000 * 60 * 2)), diff), '2 hours') + + result = App.PrettyDate.humanTime(current - (60000 * 60 * 2.5), escalation, lng, type); + diff = 60 * 60 * 2.5 + equal(result, getAbsolute(new Date(current - (60000 * 60 * 2.5)), diff), '2.5 hours') + + result = App.PrettyDate.humanTime(current - (60000 * 60 * 12.5), escalation, lng, type); + diff = 60 * 60 * 12.5 + equal(result, getAbsolute(new Date(current - (60000 * 60 * 12.5)), diff), '12.5 hours') + + result = App.PrettyDate.humanTime(current - (60000 * 60 * 24), escalation, lng, type); + diff = 60 * 60 * 25 + equal(result, getAbsolute(new Date(current - (60000 * 60 * 24)), diff), '1 day') + + result = App.PrettyDate.humanTime(current - (60000 * 60 * 24 * 2), escalation, lng, type); + diff = 60 * 60 * 25 * 2 + equal(result, getAbsolute(new Date(current - (60000 * 60 * 24 * 2)), diff), '2 days') + + result = App.PrettyDate.humanTime(current - (60000 * 60 * 24 * 2) - (60000 * 5), escalation, lng, type); + diff = (60 * 60 * 24 * 2) - (60 * 5) + equal(result, getAbsolute(new Date(current - (60000 * 60 * 24 * 2) - (60000 * 5)), diff), '2 days') + + result = App.PrettyDate.humanTime(current - (60000 * 60 * 24 * 2.5), escalation, lng, type); + diff = (60 * 60 * 24 * 2.5) + equal(result, getAbsolute(new Date(current - (60000 * 60 * 24 * 2.5)), diff), '2.5 days') + + result = App.PrettyDate.humanTime(current - (60000 * 60 * 24 * 2.5) - (60000 * 5), escalation, lng, type); + diff = (60 * 60 * 24 * 2.5) - (60 * 5) + equal(result, getAbsolute(new Date(current - (60000 * 60 * 24 * 2.5) - (60000 * 5)), diff), '2.5 days') + + // future + current = new Date() + result = App.PrettyDate.humanTime(current, escalation, lng, type); + equal(result, 'just now', 'just now') // no change, because < 1 min = just now + + result = App.PrettyDate.humanTime(current.getTime() + 55000, escalation, lng, type); + equal(result, 'just now', 'just now') // no change, because < 1 min = just now + + result = App.PrettyDate.humanTime(current.getTime() + 65000, escalation, lng, type); + diff = 60 + equal(result, getAbsolute(new Date(current.getTime() + 65000), diff), 'in 1 min') + + result = App.PrettyDate.humanTime(current.getTime() + (2 * 65000), escalation, lng, type); + diff = 2 * 60 + equal(result, getAbsolute(new Date(current.getTime() + (2 * 65000)), diff), 'in 2 min') + + result = App.PrettyDate.humanTime(current.getTime() + (60500 * 60), escalation, lng, type) ; + diff = 60 * 60 + equal(result, getAbsolute(new Date(current.getTime() + (60500 * 60)), diff), 'in 1 hour') + + result = App.PrettyDate.humanTime(current.getTime() + (60050 * 60 * 2), escalation, lng, type); + diff = 60 * 60 * 2 + equal(result, getAbsolute(new Date(current.getTime() + (60050 * 60 * 2)), diff), 'in 2 hours') + + result = App.PrettyDate.humanTime(current.getTime() + (60050 * 60 * 2.5), escalation, lng, type); + diff = 60 * 60 * 2.5 + equal(result, getAbsolute(new Date(current.getTime() + (60050 * 60 * 2.5)), diff), 'in 2.5 hours') + + result = App.PrettyDate.humanTime(current.getTime() + (60050 * 60 * 24), escalation, lng, type); + diff = 60 * 60 * 24 + equal(result, getAbsolute(new Date(current.getTime() + (60050 * 60 * 24)), diff), 'in 1 day') + + result = App.PrettyDate.humanTime(current.getTime() + (60050 * 60 * 24 * 2), escalation, lng, type); + diff = 60 * 60 * 24 * 2 + equal(result, getAbsolute(new Date(current.getTime() + (60050 * 60 * 24 * 2)), diff), 'in 2 days') + + result = App.PrettyDate.humanTime(current.getTime() + (60050 * 60 * 24 * 2.5), escalation, lng, type); + diff = 60 * 60 * 24 * 2.5 + equal(result, getAbsolute(new Date(current.getTime() + (60050 * 60 * 24 * 2.5)), diff), 'in 2.5 days') + + result = App.PrettyDate.humanTime(current.getTime() + (60050 * 60 * 24 * 5.5), escalation, lng, type); + diff = 60 * 60 * 24 * 5.5 + equal(result, getAbsolute(new Date(current.getTime() + (60050 * 60 * 24 * 5.5)), diff), 'in 30.5 days') + + result = App.PrettyDate.humanTime(current.getTime() + (60050 * 60 * 24 * 30.5), escalation, lng, type); + diff = (60 * 60 * 24 * 30.5); + equal(result, getAbsolute(new Date(current.getTime() + 60050 * 60 * 24 * 30.5), diff), 'in 30.5 days') + + }; + + function getAbsolute(date, diff){ + weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; + weekday = weekdays[date.getDay()]; + + months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; + month = months[date.getMonth()]; + + // for less than 6 days + // weekday HH::MM + if (diff < (60 * 60 * 24 * 6)) + string = weekday + ' ' + date.getHours() + ':' + (date.getMinutes() < 10 ? '0':'') + date.getMinutes() + else if (current.getYear() == date.getYear()) + string = weekday + ' ' + date.getDate() + '. ' + month + ' ' + date.getHours() + ":" + (date.getMinutes() < 10 ? '0':'') + date.getMinutes() + else + string = weekday + ' ' + date + return string; } - var mm = pastDate.getMonth() + 1; - if(mm<10) { - mm = '0' + mm - } - var yyyy = pastDate.getFullYear(); - // mm/dd/yyyy - equal(result, mm+'/'+dd+'/'+yyyy, '10.5 days') - - result = App.PrettyDate.humanTime(current - (60000 * 60 * 24 * 30)); - var pastDate = new Date(current - (60000 * 60 * 24 * 30)) - var dd = pastDate.getDate(); - if(dd<10) { - dd = '0' + dd - } - var mm = pastDate.getMonth() + 1; - if(mm<10) { - mm = '0' + mm - } - var yyyy = pastDate.getFullYear(); - // mm/dd/yyyy - equal(result, mm+'/'+dd+'/'+yyyy, '30 days') - - // future - current = new Date() - result = App.PrettyDate.humanTime(current); - equal(result, 'just now', 'just now') - - result = App.PrettyDate.humanTime(current.getTime() + 55000); - equal(result, 'just now', 'just now') - - result = App.PrettyDate.humanTime(current.getTime() + 65000); - equal(result, 'in 1 minute', 'in 1 min') - - result = App.PrettyDate.humanTime(current.getTime() + (2 * 65000)); - equal(result, 'in 2 minutes', 'in 2 min') - - result = App.PrettyDate.humanTime(current.getTime() + (60500 * 60)) ; - equal(result, 'in 1 hour', 'in 1 hour') - - result = App.PrettyDate.humanTime(current.getTime() + (60050 * 60 * 2)); - equal(result, 'in 2 hours', 'in 2 hours') - - result = App.PrettyDate.humanTime(current.getTime() + (60050 * 60 * 2.5)); - equal(result, 'in 2 hours 30 minutes', 'in 2.5 hours') - - result = App.PrettyDate.humanTime(current.getTime() + (60050 * 60 * 24)) ; - equal(result, 'in 1 day', 'in 1 day') - - result = App.PrettyDate.humanTime(current.getTime() + (60050 * 60 * 24 * 2)); - equal(result, 'in 2 days', 'in 2 days') - - result = App.PrettyDate.humanTime(current.getTime() + (60050 * 60 * 24 * 2.5)); - equal(result, 'in 2 days 12 hours', 'in 2.5 days') - - result = App.PrettyDate.humanTime(current.getTime() + (60050 * 60 * 24 * 5.5)); - equal(result, 'in 5 days 12 hours', 'in 30.5 days') - - result = App.PrettyDate.humanTime(current.getTime() + (60050 * 60 * 24 * 30.5)); - equal(result, 'in 30 days', 'in 30.5 days') - - // - - });