diff --git a/js/reiseauskunft.js b/js/reiseauskunft.js index 0684a6f..e399bed 100644 --- a/js/reiseauskunft.js +++ b/js/reiseauskunft.js @@ -62,6 +62,14 @@ function domCreateLinebreak() { return linebreak; } +/** + * Returns HTML span as DOM object + */ +function domCreateSpan() { + var span = document.createElement("span"); + return span; +} + /** * Returns an 'image button' like construct as DOM object * @@ -87,6 +95,17 @@ function domCreateButtonMarudor(path) { return button; } +/** + * Returns a 'bahn-insight' element as DOM object + * + * Used to determine if this is an object set by this extension itself + */ +function domCreateBahnInsightField() { + var span = domCreateSpan(); + span.setAttribute("class", "bahn-insight"); + return span; +} + var connection_result_observer = new MutationObserver((mutations) => { log("change detected") @@ -189,34 +208,43 @@ var connection_result_observer = new MutationObserver((mutations) => { * INJECT CUSTOM UI */ - var trains = timetable.querySelectorAll("tr.first td.products"); - trains.forEach((train) => { - var train_names = train.querySelectorAll("span a"); - train_names.forEach((train_name) => { - train_name_text = bahnParseTrainName(train_name.innerText); - if(typeof train_name_text !== 'undefined') { - var marudor_button = domCreateButtonMarudor("/details/" + train_name_text); - train_name.after(marudor_button); + var relations = timetable.querySelectorAll("tr.first"); + relations.forEach((relation, i) => { + var relationend = relation.nextElementSibling; - // Move linebreaks from link inner, after our button - linebreaks = train_name.querySelectorAll("br"); - if(linebreaks.length != 0) { - linebreaks.forEach((linebreak) => { - train_name.removeChild(linebreak); - }); + var products = relation.querySelectorAll("td.products span a"); + products.forEach((product, j) => { + // Field for 'bahn-insight' stuff + var bahn_insight_field = domCreateBahnInsightField(); + product.after(bahn_insight_field); - marudor_button.after(domCreateLinebreak()); - } + // Button linking to marudor.de + var marudor_button = domCreateButtonMarudor("/details/" + data[i]["products"][j]["train_number"]); + bahn_insight_field.appendChild(marudor_button); + // Move linebreaks from link inner, after our 'bahn-insight' field + var linebreaks = product.querySelectorAll("br"); + if(linebreaks.length != 0) { + linebreaks.forEach((linebreak) => { + product.removeChild(linebreak); + }); + bahn_insight_field.after(domCreateLinebreak()); } }); - }); - var stations = timetable.querySelectorAll("tr td.station"); - stations.forEach((station) => { - var station_name = station.innerText; - var marudor_button = domCreateButtonMarudor("/" + station_name); - station.append(marudor_button); + var from = relation.querySelector("td.station"); + var bahn_insight_field = domCreateBahnInsightField(); + from.appendChild(bahn_insight_field); + + var marudor_button = domCreateButtonMarudor("/" + data[i]["from"]["station"]); + bahn_insight_field.appendChild(marudor_button); + + var to = relationend.querySelector("td.station"); + var bahn_insight_field = domCreateBahnInsightField(); + to.appendChild(bahn_insight_field); + + var marudor_button = domCreateButtonMarudor("/" + data[i]["to"]["station"]); + bahn_insight_field.appendChild(marudor_button); }); log("ui injected");