| | |
| | | var alert_text = document.getElementById('alert-text'); |
| | | var alert_close = document.getElementById('alert-close'); |
| | | |
| | | var nav = document.getElementsByTagName('nav')[0]; |
| | | |
| | | 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'; |
| | |
| | | } |
| | | |
| | | 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) { |
| | |
| | | } |
| | | |
| | | function fail(message, more) { |
| | | if(refresh_timer) clearInterval(refresh_timer); |
| | | if(times_timer) clearTimeout(times_timer); |
| | | |
| | | setText(alert_text, message); |
| | |
| | | } |
| | | } |
| | | |
| | | function fail_hide() { |
| | | alert.style.display = 'none'; |
| | | } |
| | | |
| | | function loading_start() { |
| | | nav.className += ' loading'; |
| | | } |
| | | |
| | | function loading_end() { |
| | | nav.className = nav.className.replace(' loading', ''); |
| | | } |
| | | |
| | | function loadTimes(stopId = null, clearRoute = false) { |
| | | if(!stopId) stopId = stop_id; |
| | | if(!stopId) return; |
| | |
| | | |
| | | refresh_button.removeAttribute('disabled'); |
| | | |
| | | loading_start(); |
| | | times_xhr = $.get( |
| | | ttss_base + '/passageInfo/stopPassages/stop' |
| | | + '?stop=' + encodeURIComponent(stopId) |
| | |
| | | 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); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | 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) { |
| | |
| | | }, 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.'); |
| | |
| | | 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); |
| | | } |
| | | |
| | |
| | | e.preventDefault(); |
| | | if(!stop_name_autocomplete.value) return; |
| | | stop_id = stop_name_autocomplete.value; |
| | | window.location.hash = '#!' + stop_id; |
| | | loadTimes(stop_id, true); |
| | | }); |
| | | |
| | |
| | | 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(); |