frontend: fix crazy events
This commit is contained in:
parent
3c8f9e55b6
commit
1b6587de24
@ -7,6 +7,12 @@ String.prototype.capitalize = function() {
|
||||
);
|
||||
}
|
||||
|
||||
Array.prototype.inArray = function(v) {
|
||||
return this.reduce(function(presence, current) {
|
||||
return presence || current == v;
|
||||
}, false);
|
||||
}
|
||||
|
||||
angular.module("FICApp")
|
||||
.directive('autofocus', ['$timeout', function($timeout) {
|
||||
return {
|
||||
|
@ -64,45 +64,40 @@ angular.module("FICApp")
|
||||
.controller("EventsController", function($scope, $http, $interval) {
|
||||
$scope.events = [];
|
||||
var refreshEvents = function() {
|
||||
// Update times
|
||||
var now = new Date().getTime();
|
||||
$scope.events.forEach(function(ev) {
|
||||
ev.since = now - ev.time;
|
||||
});
|
||||
|
||||
$http.get("/events.json").then(function(response) {
|
||||
// Don't make anything if the page hasn't changed
|
||||
if ($scope.lasteventsetag != undefined && $scope.lasteventsetag == response.headers().etag)
|
||||
return;
|
||||
$scope.lasteventsetag = response.headers().etag;
|
||||
|
||||
var events = response.data;
|
||||
var now = new Date();
|
||||
var key = 0;
|
||||
angular.forEach($scope.events, function(event) {
|
||||
event.keep = 0;
|
||||
|
||||
var kEvents = {};
|
||||
events.forEach(function(ev) {
|
||||
kEvents[ev.id] = ev;
|
||||
});
|
||||
angular.forEach(events, function(event) {
|
||||
var kxEvents = {}
|
||||
$scope.events.forEach(function(ev) {
|
||||
kxEvents[ev.id] = ev;
|
||||
});
|
||||
|
||||
var oldEvents = $(Object.keys(kxEvents)).not(Object.keys(kEvents)).get();
|
||||
var newEvents = $(Object.keys(kEvents)).not(Object.keys(kxEvents)).get();
|
||||
|
||||
$scope.events.filter(function(val) {
|
||||
return !oldEvents.inArray(val.id);
|
||||
});
|
||||
newEvents.forEach(function(ev) {
|
||||
var event = kEvents[ev];
|
||||
event.time = Date.parse(event.time);
|
||||
//event.since = now.getTime() - now.getTimezoneOffset() * 60000 - event.time;
|
||||
event.since = now.getTime() - event.time;
|
||||
event.keep = 1;
|
||||
while (key <= $scope.events.length) {
|
||||
if (key >= $scope.events.length) {
|
||||
$scope.events.push(event);
|
||||
break;
|
||||
} else if (event.id == $scope.events[key].id) {
|
||||
$scope.events[key].txt = event.txt;
|
||||
$scope.events[key].time = event.time;
|
||||
$scope.events[key].kind = event.kind;
|
||||
$scope.events[key].since = event.since;
|
||||
$scope.events[key].keep = 1;
|
||||
break;
|
||||
} else if (event.time > $scope.events[key].time) {
|
||||
$scope.events.unshift(event);
|
||||
break;
|
||||
} else {
|
||||
key += 1;
|
||||
}
|
||||
}
|
||||
});
|
||||
angular.forEach($scope.events, function(event, i) {
|
||||
if (event.keep == 0) {
|
||||
$scope.events.splice(i, 1);
|
||||
}
|
||||
event.since = now - event.time;
|
||||
$scope.events.unshift(event);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user