Files
web2.0-backend/infoscreen/static/js/infoscreen_controllers.js
T
2017-03-29 15:04:33 +03:00

221 lines
8.2 KiB
JavaScript

var app = angular.module('infoApp', ['ngAnimate', 'ngRoute', 'monospaced.qrcode']);
app.controller('infoscreen_main', function($scope,$http,$timeout){
var templates = [];
$scope.init = function(rot){
$scope.rotation = rot;
get_rotation();
}
var get_rotation = function(){
$scope.index = -1;
$http.get('/infoscreen/rotation/'+$scope.rotation, {timeout:5000}).then(function(response){
templates = response.data.instances;
if (templates.length == 0) {
$timeout(get_rotation, 10000);
}
else {
$scope.next();
}
},function(response){
$timeout(get_rotation, 10000);
});
}
$scope.next = function(){
$scope.index++;
if ($scope.index >= templates.length){
return get_rotation();
}
var temp = templates[$scope.index];
$scope.active = {
template: temp.item.template_url,
onload: function(){
for (var key in temp.item.options){
$scope[key] = temp.item.options[key]
}
}
};
$timeout($scope.next, temp.duration * 1000);
}
});
//Doing this the ugly way because Angular likes to be the special priviledged child
app.filter('trusted_url', ['$sce', function ($sce) {
return function(url) {
return $sce.trustAsResourceUrl(url);
};
}]);
app.controller('ABBController', function($scope, $http){
$scope.jobs = [];
var min_date = moment().subtract(30,'days').format("YYYY-MM-DD%20HH:mm:ss");
var url = "https://sahkoinsinoorikilta.fi/api/news.php";
var params = "?type=11&lang=fi&title_search=ABB&min_date="+min_date
$http.get(url+params).then(function(response){
$scope.jobs = _.filter(response.data, function(job){
if (job.autohide_enabled == 1){
if (moment(job.autohide) < moment()){
return false;
}
}
return true;
});
if ($scope.jobs.length > 3) {
$scope.jobs = $scope.jobs.slice(0, 3);
}
});
});
app.controller('SossoController', function($scope, $http) {
$scope.data = [];
$http.get("http://sosso.fi/api/get_recent_posts/?count=" + 3 ).then(function(response)
{
$scope.data = response.data;
})
});
app.controller('EventController', function($scope, $http) {
$scope.data = [];
$http.get("https://sik.ayy.fi/api/events.php?limit=10").then(function(response)
{
$scope.events = response.data;
$scope.events = _.each($scope.events, function(ev){
var time = moment(ev.event_start);
ev.event_start = time;
ev.event_start = time.format("ddd DD.MM");
// lets not trust locale
ev.event_start = ev.event_start.replace("Mon", "Ma");
ev.event_start = ev.event_start.replace("Tue", "Ti");
ev.event_start = ev.event_start.replace("Wed", "Ke");
ev.event_start = ev.event_start.replace("Thu", "To");
ev.event_start = ev.event_start.replace("Fri", "Pe");
ev.event_start = ev.event_start.replace("Sat", "La");
ev.event_start = ev.event_start.replace("Sun", "Su");
});
})
});
app.controller('timetableCtrl',
function($scope, $http, $interval) {
function load(){
$http.get('/infoscreen/hsl_data')
.then(function(data, status, headers, config) {
$scope.arr=[];
parse(data);
});
$http.get('/infoscreen/hsl_data/settings')
.then(function(data, status, headers, config) {
$scope.departureThreshold = data.data['departure_threshold'];
$scope.hurryThreshold = data.data['hurry_threshold'];
});
}
$scope.$on('$destroy', function() {
$interval.cancel(inter1);
$interval.cancel(inter2);
$interval.cancel(inter3);
});
var objects;
$scope.arr=[];
var dict=[];
function parse(data){
objects=data['data'];
for(var objectIndex in objects){
var stop = objects[objectIndex];
var lineIndex;
for (lineIndex in stop['lines']){
var elem=stop['lines'][lineIndex].split(":");
dict[elem[0]]=elem[1];
}
for (lineIndex in stop['departures']){
var line = stop['departures'][lineIndex];
var time = line['time'];
var date = line['date'];
var hours = Math.floor(line['time'] / 100);
var minutes = line['time'] % 100;
if (hours >= 24) {
hours -= 24;
date++;
}
var code = line['code'].substring(1, 5);
if (code.charAt(0) == '0') {
code = code.substring(1,4);
}
var departure = {
"stop": stop['name'].split(",")[0],
"dist": stop['dist'],
"bus": code,
"date": date,
"time": pad(hours, 2) + ":" + pad(minutes, 2),
"laststop": dict[line['code']].split(",")[0].split(" l.")[0],
"hurry": false
};
if(departure['laststop']=='Otaniemi')
break;
if(departure['stop']=='Alvar Aallon puisto')
departure['stop']="A. A. puisto"
var trigger = true;
for (var arrIndex = $scope.arr.length - 1; arrIndex >= 0; arrIndex--) {
if ($scope.arr[arrIndex]['bus'] == departure['bus'] &&
$scope.arr[arrIndex]['laststop'] == departure['laststop']) {
if ($scope.arr[arrIndex]['dist'] == departure['dist']){
break;
}
else if ($scope.arr[arrIndex]['dist'] > departure['dist']){
$scope.arr.splice(arrIndex, 1);
}
else {
trigger = false;
}
}
}
if (trigger) {
$scope.arr.push(departure);
}
}
}
function pad(num, size) {
var s = num + "";
while (s.length < size) {
s = "0" + s;
}
return s;
}
delOld();
}
function delOld(){
var tooSoon = typeof($scope.departureThreshold) != 'undefined' ? $scope.departureThreshold: 0;
var hurry = typeof($scope.hurryThreshold) != 'undefined' ? $scope.hurryThreshold : 0;
f = new Date();
for(var a=$scope.arr.length-1; a>=0; a--){
var time=$scope.arr[a]['time'].split(":");
date=$scope.arr[a]['date'].toString();
d= new Date(f);
d.setFullYear(date.substring(0,4),date.substring(4,6)-1,date.substring(6,8));
d.setHours(time[0]);
d.setMinutes(time[1]);
var diff=(d.getTime()-f.getTime());
$scope.arr[a]['timedelta']=Math.floor(diff/60000);
if(diff < tooSoon*60000) {
$scope.arr.splice(a,1);
}
else if (diff < hurry*60000) {
$scope.arr[a]['hurry']=true;
}
}
}
function updateTime(){
$scope.clock = Date.now();
}
$scope.clock = Date.now();
load();
var inter1=$interval(delOld,2000);
var inter2=$interval(load,10000);
var inter3=$interval(updateTime, 1000);
}
);