Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 28 additions & 1 deletion index.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>RelativeDate</title>
<link href="http://cdnjs.cloudflare.com/ajax/libs/semantic-ui/0.13.0/css/semantic.css" rel="stylesheet" type="text/css">
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>
Expand All @@ -25,22 +26,48 @@ <h1 class="ui header"><a href="http://github.com/outlawandy/relativeDate">Relati
<div class="ui teal label">{{relDay}}</div>
</div>
</div>
<div class="ui stacked segment">
<div class="ui header">3 days before this page loaded was (portuguese) &nbsp;
<div class="ui teal label">{{relDays}}</div>
</div>
</div>
</div>
</div>
</div>
<script>
var MyApp = angular.module('MyApp',['relativeDate'])

MyApp.config(['relativeDateProvider', function (relativeDateProvider) {
// Translate to portuguese
relativeDateProvider.translations({
DAYS_AGO: "dias atrás",
A_WEEK_AGO: "a uma semana",
WEEKS_AGO: "semanas atrás"
});

relativeDateProvider.defaultFallbackFormat("MMM d, h:mma");

}]);

MyApp.controller('AppCtrl', function($scope, relativeDate) {
var now = new Date();
var day = new Date(now - 86400000);
var days = new Date(now - 259200000);
var NowIso = now.toISOString();
var DayIso = day.toISOString();
var DaysIso = days.toISOString();

console.log(days);

relativeDate.set(NowIso, function(rel) {
$scope.relNow = rel;
});
relativeDate.set(DayIso, function(rel) {
relativeDate.set(DayIso, function(rel) {
$scope.relDay = rel;
});
relativeDate.set(DaysIso, function(rel) {
$scope.relDays = rel;
});
});
</script>
</body>
Expand Down
114 changes: 57 additions & 57 deletions relativeDate.js
Original file line number Diff line number Diff line change
@@ -1,58 +1,58 @@
// Generated by CoffeeScript 1.6.3
(function() {
angular.module('relativeDate', []).provider('relativeDate', function() {
var _cutoffDay_, _defaultFallbackFormat_;
_defaultFallbackFormat_ = "MMM d, yyyy";
_cutoffDay_ = 22;
this.defaultFallbackFormat = function(format) {
return _defaultFallbackFormat_ = format;
};
this.cutoffDayCount = function(numDays) {
return _cutoffDay_ = numDays;
};
this.$get = [
'dateFilter', '$interval', function(dateFilter, $interval) {
var fallbackFormat, time_ago;
fallbackFormat = function(formatOverride) {
if (formatOverride !== null) {
return formatOverride;
} else {
return _defaultFallbackFormat_;
}
};
time_ago = function(time, override) {
var date, day_diff, diff;
date = new Date((time || "").replace(/-/g, "/").replace(/[TZ]/g, " "));
diff = ((new Date()).getTime() - date.getTime() + (date.getTimezoneOffset() * 60 * 1000)) / 1000;
day_diff = Math.floor(diff / 86400);
if (isNaN(day_diff) || day_diff < 0 || day_diff >= _cutoffDay_) {
return dateFilter(time, fallbackFormat(override));
}
return day_diff === 0 && (diff < 60 && "just now" || diff < 120 && "about 1 minute ago" || diff < 3600 && Math.floor(diff / 60) + " minutes ago" || diff < 7200 && "about 1 hour ago" || diff < 86400 && Math.floor(diff / 3600) + " hours ago") || day_diff === 1 && "Yesterday" || day_diff < 7 && day_diff + " days ago" || day_diff === 7 && "a week ago" || day_diff < 22 && Math.ceil(day_diff / 7) + " weeks ago";
};
return {
set: function(date, callback, optionalFormat) {
var error, iterator, notice, relDate, success;
angular.module('relativeDate', []).provider('relativeDate', function() {
var _cutoffDay_, _defaultFallbackFormat_, _translations_;
_defaultFallbackFormat_ = "MMM d, yyyy";
_cutoffDay_ = 22;
_translations_ = {};
this.defaultFallbackFormat = function(format) {
return _defaultFallbackFormat_ = format;
};
this.cutoffDayCount = function(numDays) {
return _cutoffDay_ = numDays;
};
this.translations = function(translations) {
return _translations_ = translations;
};
this.$get = [
'dateFilter', '$interval', function(dateFilter, $interval) {
var fallbackFormat, time_ago;
fallbackFormat = function(formatOverride) {
if (formatOverride !== null) {
return formatOverride;
} else {
return _defaultFallbackFormat_;
}
};
time_ago = function(time, override) {
var date, day_diff, diff;
date = new Date((time || "").replace(/-/g, "/").replace(/[TZ]/g, " "));
diff = ((new Date()).getTime() - date.getTime() + (date.getTimezoneOffset() * 60 * 1000)) / 1000;
day_diff = Math.floor(diff / 86400);
if (isNaN(day_diff) || day_diff < 0 || day_diff >= _cutoffDay_) {
return dateFilter(time, fallbackFormat(override));
}
return day_diff === 0 && (diff < 60 && (_translations_.JUST_NOW || "just now") || diff < 120 && (_translations_.ABOUT_1_MINUTE_AGO || "about 1 minute ago") || diff < 3600 && Math.floor(diff / 60) + " " + (_translations_.MINUTES_AGO || "minutes ago") || diff < 7200 && (_translations_.ABOUT_1_HOUR_AGO || "about 1 hour ago") || diff < 86400 && Math.floor(diff / 3600) + " " + (_translations_.HOURS_AGO || "hours ago")) || day_diff === 1 && (_translations_.YESTERDAY || "Yesterday") || day_diff < 7 && day_diff + " " + (_translations_.DAYS_AGO || "days ago") || day_diff === 7 && (_translations_.A_WEEK_AGO || "a week ago") || day_diff < 22 && Math.ceil(day_diff / 7) + " " + (_translations_.WEEKS_AGO || "weeks ago");
};
return {
set: function(date, callback, optionalFormat) {
var error, iterator, notice, relDate, success;
relDate = time_ago(date, optionalFormat);
iterator = $interval(function() {
relDate = time_ago(date, optionalFormat);
iterator = $interval(function() {
relDate = time_ago(date, optionalFormat);
return callback(relDate);
}, 60000);
success = function() {};
error = function() {};
notice = function() {
if (!(relDate.slice(-3) === "now" || relDate.slice(-3) === "ago" || relDate.slice(-3) === "day")) {
return $interval.cancel(iterator);
}
};
iterator.then(success, error, notice);
callback(relDate);
return iterator;
}
};
}
];
return this;
});

}).call(this);
return callback(relDate);
}, 60000);
success = function() {};
error = function() {};
notice = function() {
if (!(relDate.slice(-3) === "now" || relDate.slice(-3) === "ago" || relDate.slice(-3) === "day")) {
return $interval.cancel(iterator);
}
};
iterator.then(success, error, notice);
callback(relDate);
return iterator;
}
};
}
];
return this;
});
23 changes: 14 additions & 9 deletions src/relativeDate.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,17 @@ angular.module('relativeDate',[])
.provider 'relativeDate', ->
_defaultFallbackFormat_ = "MMM d, yyyy" # April 18, 2014
_cutoffDay_ = 22 # 3 weeks
_translations_ = {}

this.defaultFallbackFormat = (format) ->
_defaultFallbackFormat_ = format

this.cutoffDayCount = (numDays) ->
_cutoffDay_ = numDays

this.translations = (translations) ->
_translations_ = translations

this.$get = [ 'dateFilter', '$interval', (dateFilter, $interval) ->
fallbackFormat = (formatOverride) ->
if formatOverride != null
Expand All @@ -23,15 +28,15 @@ angular.module('relativeDate',[])
return dateFilter(time, fallbackFormat(override)) # instead, use angular's dateFilter to return an absolute timestamp formated using the string assigned to "_fallbackFormat_"

return day_diff == 0 && (
diff < 60 && "just now" ||
diff < 120 && "about 1 minute ago" ||
diff < 3600 && Math.floor( diff / 60 ) + " minutes ago" ||
diff < 7200 && "about 1 hour ago" ||
diff < 86400 && Math.floor( diff / 3600 ) + " hours ago") ||
day_diff == 1 && "Yesterday" ||
day_diff < 7 && day_diff + " days ago" ||
day_diff == 7 && "a week ago" ||
day_diff < 22 && Math.ceil( day_diff / 7 ) + " weeks ago"
diff < 60 && (_translations_.JUST_NOW || "just now") ||
diff < 120 && (_translations_.ABOUT_1_MINUTE_AGO || "about 1 minute ago") ||
diff < 3600 && Math.floor( diff / 60 ) + " " + (_translations_.MINUTES_AGO || "minutes ago") ||
diff < 7200 && (_translations_.ABOUT_1_HOUR_AGO || "about 1 hour ago") ||
diff < 86400 && Math.floor( diff / 3600 ) + " " + (_translations_.HOURS_AGO || "hours ago")) ||
day_diff == 1 && (_translations_.YESTERDAY || "Yesterday") ||
day_diff < 7 && day_diff + " " + (_translations_.DAYS_AGO || "days ago") ||
day_diff == 7 && (_translations_.A_WEEK_AGO || "a week ago") ||
day_diff < 22 && Math.ceil( day_diff / 7 ) + " " + (_translations_.WEEKS_AGO || "weeks ago")

return {
set: (date, callback, optionalFormat) ->
Expand Down