|
|
|
|
@@ -32,6 +32,15 @@ function bahnParseTrainName(dirty_train_name) {
|
|
|
|
|
return dirty_train_name;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Returns date string in format YYYYMMDDHHMM
|
|
|
|
|
*
|
|
|
|
|
* @param datetime Date object
|
|
|
|
|
*/
|
|
|
|
|
function datetimeToYYYYMMDDHHMM(datetime) {
|
|
|
|
|
return datetime.getFullYear().toString().padStart(4, '0') + "" + (datetime.getMonth()+1).toString().padStart(2, '0') + "" + datetime.getDate().toString().padStart(2, '0') + "" + datetime.getHours().toString().padStart(2, '0') + "" + datetime.getMinutes().toString().padStart(2, '0')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Returns HTML a as DOM object
|
|
|
|
|
*
|
|
|
|
|
@@ -129,6 +138,12 @@ var connection_result_observer = new MutationObserver((mutations) => {
|
|
|
|
|
|
|
|
|
|
var timetable = target.querySelector("td div.detailContainer table.result tbody");
|
|
|
|
|
|
|
|
|
|
// Just break if there are elements injected by us
|
|
|
|
|
if(timetable.querySelectorAll(".bahn-insight").length != 0) {
|
|
|
|
|
log("links already injected")
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* COLLECT DATA
|
|
|
|
|
*/
|
|
|
|
|
@@ -136,6 +151,10 @@ var connection_result_observer = new MutationObserver((mutations) => {
|
|
|
|
|
var relations = timetable.querySelectorAll("tr.first");
|
|
|
|
|
relations.forEach((relation, i) => {
|
|
|
|
|
var relationend = relation.nextElementSibling;
|
|
|
|
|
while(relationend.querySelector("td.station") == null) {
|
|
|
|
|
relationend = relationend.nextElementSibling;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
data[i] = {};
|
|
|
|
|
data[i]["from"] = {}
|
|
|
|
|
data[i]["to"] = {}
|
|
|
|
|
@@ -186,23 +205,25 @@ var connection_result_observer = new MutationObserver((mutations) => {
|
|
|
|
|
data[i]["products"][j] = {};
|
|
|
|
|
|
|
|
|
|
// Prodcut details
|
|
|
|
|
data[i]["products"][j]["product"] = null;
|
|
|
|
|
data[i]["products"][j]["type"] = null;
|
|
|
|
|
data[i]["products"][j]["train_number"] = null;
|
|
|
|
|
data[i]["products"][j]["train_name"] = null;
|
|
|
|
|
data[i]["products"][j]["line_name"] = null;
|
|
|
|
|
|
|
|
|
|
var name_list = train.innerText.trim().replace(/ +/g, ' ').split(" ");
|
|
|
|
|
|
|
|
|
|
// Product name in format "STB 12 (23561)"
|
|
|
|
|
if(name_list.length == 3 && name_list[2].charAt(0) == '(' && name_list[2].charAt(name_list[2].length-1) == ')') {
|
|
|
|
|
data[i]["products"][j]["product"] = name_list[0];
|
|
|
|
|
data[i]["products"][j]["train_number"] = name_list[0] + " " + name_list[2].substring(1, name_list[2].length-1);
|
|
|
|
|
data[i]["products"][j]["type"] = name_list[0];
|
|
|
|
|
data[i]["products"][j]["train_number"] = name_list[2].substring(1, name_list[2].length-1)
|
|
|
|
|
data[i]["products"][j]["line_name"] = name_list[0] + " " + name_list[1];
|
|
|
|
|
}
|
|
|
|
|
// Product name in format "ICE 234"
|
|
|
|
|
else {
|
|
|
|
|
data[i]["products"][j]["product"] = name_list[0];
|
|
|
|
|
data[i]["products"][j]["train_number"] = name_list[0] + " " + name_list[1];
|
|
|
|
|
data[i]["products"][j]["type"] = name_list[0];
|
|
|
|
|
data[i]["products"][j]["train_number"] = name_list[1];
|
|
|
|
|
}
|
|
|
|
|
data[i]["products"][j]["train_name"] = data[i]["products"][j]["type"] + " " + data[i]["products"][j]["train_number"];
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Travel information
|
|
|
|
|
@@ -223,6 +244,9 @@ var connection_result_observer = new MutationObserver((mutations) => {
|
|
|
|
|
var relations = timetable.querySelectorAll("tr.first");
|
|
|
|
|
relations.forEach((relation, i) => {
|
|
|
|
|
var relationend = relation.nextElementSibling;
|
|
|
|
|
while(relationend.querySelector("td.station") == null) {
|
|
|
|
|
relationend = relationend.nextElementSibling;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var products = relation.querySelectorAll("td.products span a");
|
|
|
|
|
products.forEach((product, j) => {
|
|
|
|
|
@@ -230,10 +254,15 @@ var connection_result_observer = new MutationObserver((mutations) => {
|
|
|
|
|
var bahn_insight_field = domCreateBahnInsightField();
|
|
|
|
|
product.after(bahn_insight_field);
|
|
|
|
|
|
|
|
|
|
var departure_time = new Date(Date.parse(connection_result_date + " " + data[i]["from"]["time"]));
|
|
|
|
|
|
|
|
|
|
// Button linking to marudor.de
|
|
|
|
|
var marudor_button = domCreateButtonMarudor("/details/" + data[i]["products"][j]["train_number"]);
|
|
|
|
|
var marudor_button = domCreateButtonMarudor("/details/" + data[i]["products"][j]["train_name"] + "/" + departure_time.getTime());
|
|
|
|
|
bahn_insight_field.appendChild(marudor_button);
|
|
|
|
|
|
|
|
|
|
var dbf_button = domCreateButtonDbf("/_wr/" + data[i]["products"][j]["train_number"] + "/" + datetimeToYYYYMMDDHHMM(departure_time));
|
|
|
|
|
bahn_insight_field.appendChild(dbf_button);
|
|
|
|
|
|
|
|
|
|
// Move linebreaks from link inner, after our 'bahn-insight' field
|
|
|
|
|
var linebreaks = product.querySelectorAll("br");
|
|
|
|
|
if(linebreaks.length != 0) {
|
|
|
|
|
@@ -244,6 +273,7 @@ var connection_result_observer = new MutationObserver((mutations) => {
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Linking to station
|
|
|
|
|
var from = relation.querySelector("td.station");
|
|
|
|
|
var bahn_insight_field = domCreateBahnInsightField();
|
|
|
|
|
from.appendChild(bahn_insight_field);
|
|
|
|
|
@@ -254,6 +284,7 @@ var connection_result_observer = new MutationObserver((mutations) => {
|
|
|
|
|
var dbf_button = domCreateButtonDbf("/" + data[i]["from"]["station"]);
|
|
|
|
|
bahn_insight_field.appendChild(dbf_button);
|
|
|
|
|
|
|
|
|
|
// Linking to station
|
|
|
|
|
var to = relationend.querySelector("td.station");
|
|
|
|
|
var bahn_insight_field = domCreateBahnInsightField();
|
|
|
|
|
to.appendChild(bahn_insight_field);
|
|
|
|
|
@@ -276,6 +307,9 @@ var connection_result_observer = new MutationObserver((mutations) => {
|
|
|
|
|
var target = document.getElementById('resultsOverview');
|
|
|
|
|
|
|
|
|
|
if(typeof target !== 'undefined') {
|
|
|
|
|
|
|
|
|
|
var connection_result_date = document.querySelector("html body div div div.resultContentHolder form div h2 span").innerText.replace(/(\d{2})\.(\d{2})\.(\d{2})/,'20$3-$2-$1');
|
|
|
|
|
|
|
|
|
|
connection_result_observer.observe(target, {
|
|
|
|
|
subtree: true,
|
|
|
|
|
childList: true
|
|
|
|
|
|