Improved www.ttss.krakow.pl
Jacek Kowalski
2019-02-02 cbce8b9575696c6a6eacd70d2c7370af3ba44c02
commit | author | age
cbce8b 1 //var ttss_trams_base = 'http://www.ttss.krakow.pl/internetservice';
JK 2 var ttss_trams_base = 'proxy_tram.php';
3 //var ttss_buses_base = 'http://91.223.13.70/internetservice';
4 var ttss_buses_base = 'proxy_bus.php';
5
68aeb4 6 // Special directions
JK 7 var special_directions = {
c57bed 8     'Zajezdnia Nowa Huta' : 'ZH',
JK 9     'Zajezdnia Podgórze' : 'ZP',
10     'Zjazd do zajezdni' : 'Z',
11     'Wyjazd na linię' : 'W',
12     'Przejazd techniczny' : 'PT',
68aeb4 13 };
JK 14
572390 15 var script_version;
JK 16 var script_version_xhr;
17
b16328 18 var vehicles_info = {};
f0bae0 19
572390 20 // Check for website updates
JK 21 function checkVersion() {
22     if(script_version_xhr) script_version_xhr.abort();
23     
24     script_version_xhr = $.get(
25         'version.php'
26     ).done(function(data) {
27         if(!script_version) {
28             script_version = data;
29             return;
30         }
31         
32         if(script_version != data) {
33             fail(lang.error_new_version);
34             location.reload(true);
35         }
36     });
37 }
38
39 function checkVersionInit() {
40     checkVersion();
41     setInterval(checkVersion, 3600000);
42 }
43
8b6250 44 /* Parsing of received JSON parts */
JK 45 function parseStatus(status) {
46     switch(status.status) {
47         case 'STOPPING':
48         case 'PREDICTED':
49             if(status.actualRelativeTime <= 0)
50                 return lang.boarding_sign;
51             if(status.actualRelativeTime >= 60)
52                 return lang.time_minutes_prefix + Math.floor(status.actualRelativeTime / 60) + lang.time_minutes_suffix;
53             return lang.time_seconds_prefix + status.actualRelativeTime + lang.time_seconds_suffix;
54         case 'DEPARTED':
55             return lang.time_minutes_ago_prefix + Math.floor(-status.actualRelativeTime / 60) + lang.time_minutes_ago_suffix;
56         default:
57             return status.mixedTime;
58     }
59 }
60
61 function parseTime(date, time) {
62     var result = new Date(date.getFullYear(), date.getMonth(), date.getDay());
63     var time_split = time.split(':');
64     result.setHours(time_split[0]);
65     result.setMinutes(time_split[1]);
66     
67     if(result.getTime() - date.getTime() > 72000000) {
68         result.setTime(result.getTime() - 86400000);
69     }
70     
71     if(date.getTime() - result.getTime() > 72000000) {
72         result.setTime(result.getTime() + 86400000);
73     }
74     
75     return result;
76 }
77
78 function parseDelay(status) {
79     if(!status.actualTime) return lang.unknown_sign;
80     if(!status.plannedTime) return lang.unknown_sign;
81     
82     var now = new Date();
83     var actual = parseTime(now, status.actualTime);
84     var planned = parseTime(now, status.plannedTime);
85     
86     return lang.time_minutes_prefix + ((actual.getTime() - planned.getTime()) / 1000 / 60) + lang.time_minutes_suffix;
87 }
88
68aeb4 89 // Webservice-related functions
JK 90 function parseVehicle(vehicleId) {
765604 91     if(!vehicleId) return false;
f0bae0 92     if(!vehicles_info || !vehicles_info[vehicleId]) {
765604 93         return false;
68aeb4 94     } else {
f0bae0 95         var vehicle = vehicles_info[vehicleId];
JK 96         return {
97             vehicleId: vehicleId,
98             prefix: vehicle['num'].substr(0, 2),
99             id: vehicle['num'].substr(2, 3),
100             num: vehicle['num'],
101             type: vehicle['type'],
102             low: vehicle['low']
103         };
68aeb4 104     }
f0bae0 105 }
JK 106
107 function updateVehicleInfo() {
108     return $.get(
109         'https://mpk.jacekk.net/vehicles/'
110     ).done(function(data) {
111         vehicles_info = data;
112     });
68aeb4 113 }
JK 114
7ca6a1 115 function tramIdToVehicleId(tramId) {
b16328 116     for(var prop in vehicles_info) {
JK 117         if(vehicles_info[prop]['num'].substr(2) == tramId) {
118             return prop;
119         }
7ca6a1 120     }
JK 121 }
122
07c714 123 function displayVehicle(vehicleInfo) {
JK 124     if(!vehicleInfo) return document.createTextNode('');
125     
126     var span = document.createElement('span');
127     span.className = 'vehicleInfo';
128     
129     var floor_type = '';
125626 130     if(vehicleInfo.low == 0) {
07c714 131         setText(span, lang.high_floor_sign);
JK 132         floor_type = lang.high_floor;
125626 133     } else if(vehicleInfo.low == 1) {
07c714 134         setText(span, lang.partially_low_floor_sign);
JK 135         floor_type = lang.partially_low_floor;
125626 136     } else if(vehicleInfo.low == 2) {
07c714 137         setText(span, lang.low_floor_sign);
JK 138         floor_type = lang.low_floor;
139     }
140     
141     span.title = lang.tram_type_pattern
142         .replace('$num', vehicleInfo.num)
143         .replace('$type', vehicleInfo.type)
144         .replace('$floor', floor_type);
145     
146     return span;
147 }
148
68aeb4 149 // Element mangling
JK 150 function deleteChildren(element) {
151     while(element.lastChild) element.removeChild(element.lastChild);
152 }
153
154 function addElementWithText(parent, element, text) {
155     var elem = document.createElement(element);
156     elem.appendChild(document.createTextNode(text));
157     parent.appendChild(elem);
158     return elem;
159 }
160
161 function addCellWithText(parent, text) {
162     return addElementWithText(parent, 'td', text);
163 }
164
165 function addParaWithText(parent, text) {
166     return addElementWithText(parent, 'p', text);
167 }
168
169 function setText(element, text) {
170     deleteChildren(element);
171     element.appendChild(document.createTextNode(text));
172 }