| /* |
| Copyright (c) 2014 Uttesh Kumar |
| |
| Permission is hereby granted, free of charge, to any person obtaining |
| a copy of this software and associated documentation files (the |
| "Software"), to deal in the Software without restriction, including |
| without limitation the rights to use, copy, modify, merge, publish, |
| distribute, sublicense, and/or sell copies of the Software, and to |
| permit persons to whom the Software is furnished to do so, subject to |
| the following conditions: |
| |
| The above copyright notice and this permission notice shall be |
| included in all copies or substantial portions of the Software. |
| |
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
| NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE |
| LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |
| OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
| WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| */ |
| 'use strict'; |
| |
| var catalyst = angular.module('ngtimeago', []); |
| |
| |
| catalyst.filter('timeago', function() { |
| return function(input, p_allowFuture) { |
| |
| if (input === undefined) { |
| return "-"; |
| } |
| |
| var substitute = function (stringOrFunction, number, strings) { |
| var string = angular.isFunction(stringOrFunction) ? stringOrFunction(number, dateDifference) : stringOrFunction; |
| var value = (strings.numbers && strings.numbers[number]) || number; |
| return string.replace(/%d/i, value); |
| }, |
| nowTime = (new Date()).getTime(), |
| date = (new Date(input)).getTime(), |
| //refreshMillis= 6e4, //A minute |
| allowFuture = p_allowFuture || false, |
| strings= { |
| prefixAgo: '', |
| prefixFromNow: '', |
| suffixAgo: "ago", |
| suffixFromNow: "from now", |
| seconds: "less than a minute", |
| minute: "about a minute", |
| minutes: "%d minutes", |
| hour: "about an hour", |
| hours: "about %d hours", |
| day: "a day", |
| days: "%d days", |
| month: "about a month", |
| months: "%d months", |
| year: "about a year", |
| years: "%d years" |
| }, |
| dateDifference = nowTime - date, |
| words, |
| seconds = Math.abs(dateDifference) / 1000, |
| minutes = seconds / 60, |
| hours = minutes / 60, |
| days = hours / 24, |
| years = days / 365, |
| separator = strings.wordSeparator === undefined ? " " : strings.wordSeparator, |
| |
| |
| prefix = strings.prefixAgo, |
| suffix = strings.suffixAgo; |
| |
| if (allowFuture) { |
| if (dateDifference < 0) { |
| prefix = strings.prefixFromNow; |
| suffix = strings.suffixFromNow; |
| } |
| } |
| |
| words = seconds < 45 && substitute(strings.seconds, Math.round(seconds), strings) || |
| seconds < 90 && substitute(strings.minute, 1, strings) || |
| minutes < 45 && substitute(strings.minutes, Math.round(minutes), strings) || |
| minutes < 90 && substitute(strings.hour, 1, strings) || |
| hours < 24 && substitute(strings.hours, Math.round(hours), strings) || |
| hours < 42 && substitute(strings.day, 1, strings) || |
| days < 30 && substitute(strings.days, Math.round(days), strings) || |
| days < 45 && substitute(strings.month, 1, strings) || |
| days < 365 && substitute(strings.months, Math.round(days / 30), strings) || |
| years < 1.5 && substitute(strings.year, 1, strings) || |
| substitute(strings.years, Math.round(years), strings); |
| console.log(prefix+words+suffix+separator); |
| prefix.replace(/ /g, '') |
| words.replace(/ /g, '') |
| suffix.replace(/ /g, '') |
| return (prefix+' '+words+' '+suffix+' '+separator); |
| |
| }; |
| }); |
| |
| |
| |