1
0

Compare commits

...

13 Commits

Author SHA1 Message Date
0ec0d9164e Version 0.7 2020-09-21 16:22:40 +02:00
678d00a57b Ignore rows not containing any collectable data 2020-09-20 19:55:03 +02:00
7b3e750513 Change product naming scheme to match marudor 2020-09-20 15:51:31 +02:00
a216984bb4 Comment station links 2020-09-20 13:07:49 +02:00
7df84bca5c Link to self-signed downloads 2020-09-20 13:03:00 +02:00
60ae28c9d3 Train link to dbf 2020-09-19 23:35:59 +02:00
c0f50dfe3e Move timestamp to date object 2020-09-19 23:35:35 +02:00
5c89d26691 Add train id to data 2020-09-19 23:06:19 +02:00
efec9271c3 Linking to trains with timestamp 2020-09-19 23:02:42 +02:00
68301c44d4 Add Firefox install url 2020-09-19 22:26:01 +02:00
6e3e3eb8e8 Prevent multiple injections 2020-09-19 22:12:02 +02:00
b5b6431662 Fix name in license *ooops* 2020-09-19 21:52:48 +02:00
fbaec27ed7 Version 0.6 2020-09-19 21:48:12 +02:00
4 changed files with 49 additions and 9 deletions

View File

@@ -1,6 +1,6 @@
MIT License
Copyright (c) 2017 marudor
Copyright (c) 2020 clerie
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@@ -4,7 +4,13 @@ Extends the booking portal of bahn.de with linking to useful information.
## Installation
### Aus Firefox Add-ons (Empfohlen)
Einfach zu Firefox hinzufügen:
TBD
https://addons.mozilla.org/firefox/addon/bahn-insight/
### Self-signed binarys
Because Mozilla isn't as fast anymore at reviewing addons you can download the self-signed Versions here:
https://clerie.de/bahn-insight/
### Als Entwicklerversion
1. Herunterladen

View File

@@ -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

View File

@@ -2,7 +2,7 @@
"manifest_version": 2,
"name": "Bahn Insight",
"version": "0.5",
"version": "0.7",
"description": "Extends the booking portal of bahn.de with linking to useful information.",
"homepage_url": "https://git.clerie.de/clerie/bahn-insight/",