From ac721dc18e5bf997afc016a486fa4788f094b148 Mon Sep 17 00:00:00 2001
From: Jacek Kowalski <Jacek@jacekk.info>
Date: Thu, 08 Dec 2016 22:47:26 +0000
Subject: [PATCH] Add request in progress indicator
---
index.js | 58 ++++++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 46 insertions(+), 12 deletions(-)
diff --git a/index.js b/index.js
index 54b901a..e522ba4 100644
--- a/index.js
+++ b/index.js
@@ -30,13 +30,16 @@
var alert_text = document.getElementById('alert-text');
var alert_close = document.getElementById('alert-close');
+var progress = document.getElementById('progress');
+
+var parseStatusBoarding = '>>>';
function parseStatus(status) {
switch(status.status) {
case 'STOPPING':
- return '<<<';
+ return parseStatusBoarding;
case 'PREDICTED':
if(status.actualRelativeTime <= 0)
- return '<<<';
+ return parseStatusBoarding;
if(status.actualRelativeTime >= 60)
return Math.floor(status.actualRelativeTime / 60) + ' min';
return status.actualRelativeTime + ' s';
@@ -87,11 +90,11 @@
}
function addCellWithText(parent, text) {
- addElementWithText(parent, 'td', text);
+ return addElementWithText(parent, 'td', text);
}
function addParaWithText(parent, text) {
- addElementWithText(parent, 'p', text);
+ return addElementWithText(parent, 'p', text);
}
function setText(element, text) {
@@ -100,7 +103,6 @@
}
function fail(message, more) {
- if(refresh_timer) clearInterval(refresh_timer);
if(times_timer) clearTimeout(times_timer);
setText(alert_text, message);
@@ -123,6 +125,18 @@
}
}
+function fail_hide() {
+ alert.style.display = 'none';
+}
+
+function loading_start() {
+ progress.style.display = 'block';
+}
+
+function loading_end() {
+ progress.style.display = 'none';
+}
+
function loadTimes(stopId = null, clearRoute = false) {
if(!stopId) stopId = stop_id;
if(!stopId) return;
@@ -132,6 +146,7 @@
refresh_button.removeAttribute('disabled');
+ loading_start();
times_xhr = $.get(
ttss_base + '/passageInfo/stopPassages/stop'
+ '?stop=' + encodeURIComponent(stopId)
@@ -169,13 +184,19 @@
addCellWithText(tr, data.actual[i].patternText);
addCellWithText(tr, data.actual[i].direction);
var status = parseStatus(data.actual[i]);
- addCellWithText(tr, status);
+ var status_cell = addCellWithText(tr, status);
var delay = parseDelay(data.actual[i]);
- addCellWithText(tr, delay);
+ var delay_cell = addCellWithText(tr, delay);
- if(status == '<<<') tr.className = 'success';
- else if(parseInt(delay) > 9) tr.className = 'danger';
- else if(parseInt(delay) > 3) tr.className = 'warning';
+ if(status == parseStatusBoarding) {
+ tr.className = 'success';
+ status_cell.className = 'status-boarding';
+ } else if(parseInt(delay) > 9) {
+ tr.className = 'danger';
+ delay_cell.className = 'status-delayed';
+ } else if(parseInt(delay) > 3) {
+ tr.className = 'warning';
+ }
times_table.appendChild(tr);
}
@@ -225,9 +246,10 @@
}
startTimer(new Date());
+ fail_hide();
times_timer = setTimeout(function(){ loadTimes(); }, ttss_refresh);
- }).fail(fail_ajax);
+ }).fail(fail_ajax).always(loading_end);
}
function declinate(num, singular, plural) {
@@ -264,6 +286,12 @@
}, interval);
}
+var decodeEntitiesTextArea = document.createElement('textarea');
+function decodeEntities(text) {
+ decodeEntitiesTextArea.innerHTML = text;
+ return decodeEntitiesTextArea.value;
+}
+
function init() {
if(!window.jQuery) {
fail('Required JavaScript jQuery library failed to load. You may try refreshing the page.');
@@ -287,7 +315,7 @@
for(var i = 1, il = data.length; i < il; i++) {
var opt = document.createElement('option');
opt.value = data[i].id;
- opt.appendChild(document.createTextNode(data[i].name));
+ setText(opt, decodeEntities(data[i].name));
stop_name_autocomplete.appendChild(opt);
}
@@ -301,6 +329,7 @@
e.preventDefault();
if(!stop_name_autocomplete.value) return;
stop_id = stop_name_autocomplete.value;
+ window.location.hash = '#!' + stop_id;
loadTimes(stop_id, true);
});
@@ -311,6 +340,11 @@
alert_close.addEventListener('click', function(e) {
alert.style.display = 'none';
});
+
+ if(window.location.hash.match(/^#![0-9]+$/)) {
+ stop_id = parseInt(window.location.hash.slice(2));
+ loadTimes(stop_id);
+ }
}
init();
--
Gitblit v1.9.1