- // variable to en-/disable debug
- // set to 1 to enable debug log
- var DEBUG;
-
-
-
- // wrap all in anonymous function to get out of global scope
- (function() {
-
-
- //variable definitions
- var serverUrl, // this will hold the url we call with the ajaxCall() function
- target = document.getElementById("output"), // get the html area where we print out the data
- searchForm = document.getElementById("search-form"), // get the search form
- haltestelle; // object with methods to get and process the data
-
- // debug log
- if (DEBUG === 1) {console.log("anonymous function");}
-
- // parse actual url and parse for protocol type (http/https)
- // set the ajax server url dependent on the protocol
- // for strato ssl-proxy, we have to insert the 1st part of the url path
- serverUrl = window.location.protocol + "//" + window.location.hostname;
-
- if (serverUrl.indexOf("https") === -1) {
- serverUrl += "/cgi-bin/";
- } else {
- serverUrl += "/" + window.location.pathname.split("/")[1] + "/cgi-bin/";
- }
-
- // haltestelle object
- haltestelle = {
-
- getAbfahrten : function (event) {
-
- // debug log
- if (DEBUG === 1) {console.log("getAbfahrten() method");}
-
- // prevent submit default behaviour
- event.preventDefault();
-
- // construct ajax url
- var hstName = document.getElementById("q").value,
- hstUrl = encodeURI(serverUrl + "abfahrtsmonitor.py?query=abfahrten.do&ort=dresden&hst=" + hstName);
-
- // get the data from the server with an ajax call
- gcf.ajaxCall(hstUrl, target, this.processAbfahrten, "text");
-
- },
-
- processAbfahrten : function (data) {
-
- // debug log
- if (DEBUG === 1) {console.log("processAbfahrten() method");}
- if (DEBUG === 1) {console.log("received data: " + data);}
-
- //variable definitions
- var i,
- y,
- htmlOutput,
- entry,
- dataLength;
-
- // process of response only if it's not empty
- if (data.indexOf("[]") !== -1) { // there was an empty response
-
- haltestelle.getHaltestellen();
-
- } else {
-
- // replace useless chars & split string into array
- data = data.replace(/\(.+?\)/gi, ''); // remove all content in round parentheses
- data = data.replace('ß', 'ss'); // remove some special characters
- data = data.replace(/<(.+?)>/gi, '$1'); // remove tag parentheses to prevent code injection
- data = data.slice(3, -3).split("],["); // split at array boundaries to get an array of arrays
-
- // debug log
- if (DEBUG === 1) {console.log("parsed data: " + data);}
-
- dataLength = data.length;
-
- // generate table header
- htmlOutput = "<table>";
- htmlOutput += "<tr>";
- htmlOutput += "<th>Linie</th>";
- htmlOutput += "<th>Richtung</th>";
- htmlOutput += "<th>Abfahrt</th>";
- htmlOutput += "</tr>";
-
- // generate table entries
- for (i = 0; i < dataLength; i++) {
-
- htmlOutput += "<tr>";
- entry = data[i].split(",");
-
- // debug log
- if (DEBUG === 1) {console.log("part " + i + " of parsed data: " + entry);}
-
- for (y = 0; y < 3; y++) {
-
- // debug log
- if (DEBUG === 1) {console.log("part " + y + ": " + entry[y]);}
- htmlOutput += "<td>" + entry[y].slice(1, -1) + "</td>";
-
- }
-
- htmlOutput += "</tr>";
-
- }
-
- // close table
- htmlOutput += "</table>";
- // print content into web page
- target.innerHTML = htmlOutput;
-
- }
-
- },
-
- getHaltestellen : function () {
-
- // debug log
- if (DEBUG === 1) {console.log("getHaltestellen() method");}
-
- // prevent submit default behaviour
- //event.preventDefault();
-
- // construct ajax url
- var hstName = document.getElementById("q").value,
- hstUrl = encodeURI(serverUrl + "abfahrtsmonitor.py?query=haltestelle.do&ort=dresden&hst=" + hstName);
-
- // get the data from the server with an ajax call
- gcf.ajaxCall(hstUrl, target, this.processHaltestellen, "text");
-
- },
-
- processHaltestellen : function (data) {
-
- // debug log
- if (DEBUG === 1) {console.log("processHaltestellen() method");}
- if (DEBUG === 1) {console.log("received data: " + data);}
-
- //variable definitions
- var i,
- entry,
- dataLength,
- htmlOutput;
-
- // process of response only if it's not empty
- if (data.indexOf("[]") !== -1) {
-
- htmlOutput = "<p>unbekannte Haltstelle, bitte erneut versuchen</p>";
-
- } else {
-
- // replace useless chars & split string into array
- data = data.replace(/\[\[\[.+?\]\],/gi, '['); // remove useless first city entry
- data = data.replace(/\(.+?\)/gi, ''); // remove all content in round parentheses
- data = data.replace('ß', 'ss'); // remove some special characters
- data = data.replace(/<(.+?)>/gi, '$1'); // remove tag parentheses to prevent code injection
- data = data.slice(4, -4).split("],["); // split at array boundaries to get an array of arrays
-
- // debug log
- if (DEBUG === 1) {console.log("parsed data: " + data);}
-
- dataLength = data.length;
-
- // generate table header
- htmlOutput = "<table>";
-
- // generate table entries
- for (i = 0; i < dataLength; i++) {
-
- htmlOutput += "<tr>";
- entry = data[i].split(",");
- // debug log
- if (DEBUG === 1) {console.log("part " + i + " of parsed data: " + entry);}
-
- htmlOutput += "<td>" + entry[0].slice(1, -1) + "</td>";
- htmlOutput += "</tr>";
-
- }
-
- // close table
- htmlOutput += "</table>";
-
- }
-
- // print content into web page
- target.innerHTML = htmlOutput;
-
- }
-
- };
-
- //event listeners
- searchForm.addEventListener("submit", haltestelle.getAbfahrten, false);
- //searchForm.addEventListener("submit", haltestelle.getHaltestellen, false);
-
- }()); // end of anonymous function
|