246 lines
11 KiB
JavaScript
246 lines
11 KiB
JavaScript
/*
|
|
* OperationsServlet specific JavaScript
|
|
*/
|
|
|
|
var jmri = null;
|
|
var view = "";
|
|
var CODE_TERMINATED = 0x80;
|
|
|
|
/*
|
|
* request and show a list of available trains from JMRI server
|
|
*/
|
|
function getTrains(showAll) {
|
|
$.ajax({
|
|
url: "/operations/trains?format=html" + ((showAll) ? "&show=all" : ""),
|
|
data: {},
|
|
success: function (data) {
|
|
// jmri.log("redrawing Trains table");
|
|
if (data.length === 0) {
|
|
$("#warning-no-trains").removeClass("hidden").addClass("show");
|
|
$("#trains").removeClass("show").addClass("hidden");
|
|
} else {
|
|
$("#warning-no-trains").removeClass("show").addClass("hidden");
|
|
$("#trains").removeClass("hidden").addClass("show");
|
|
$("#trains > tbody").empty();
|
|
$("#trains > tbody").append(data);
|
|
}
|
|
$("#activity-alert").removeClass("show").addClass("hidden");
|
|
$("#trains-options").removeClass("hidden").addClass("show");
|
|
},
|
|
dataType: "html"
|
|
});
|
|
}
|
|
|
|
function getManifest(id) {
|
|
$.ajax({
|
|
url: "/operations/manifest/" + id + "?format=html",
|
|
data: {},
|
|
success: function (data) {
|
|
if (data.length === 0) {
|
|
$("#manifest").removeClass("show").addClass("hidden");
|
|
} else {
|
|
$("#manifest").removeClass("hidden").addClass("show");
|
|
$("#manifest").empty();
|
|
$("#manifest").append(data);
|
|
}
|
|
$("#activity-alert").removeClass("show").addClass("hidden");
|
|
},
|
|
dataType: "html"
|
|
});
|
|
}
|
|
|
|
function getConductor(id, location) {
|
|
var data = (location !== false) ? {format: "html", location: location} : {format: "html"};
|
|
$.ajax({
|
|
url: "/operations/trains/" + id + "/conductor",
|
|
data: JSON.stringify(data),
|
|
type: "PUT",
|
|
contentType: "application/json; charset=utf-8",
|
|
success: function (data) {
|
|
if (data.length === 0) {
|
|
$("#conductor").removeClass("show").addClass("hidden");
|
|
} else {
|
|
// insert data
|
|
$("#conductor").removeClass("hidden").addClass("show");
|
|
$("#conductor").empty();
|
|
$("#conductor").append(data);
|
|
var pickup = $.trim($("#ops-pickup > ul").html()) ? true : false;
|
|
var setout = $.trim($("#ops-setout > ul").html()) ? true : false;
|
|
var local = $.trim($("#ops-local > ul").html()) ? true : false;
|
|
// hide empty panels
|
|
if (pickup) {
|
|
if (!setout && !local) {
|
|
$("#ops-pickup").addClass("col-xs-12").removeClass("col-md-4");
|
|
} else if (!setout || !local) {
|
|
$("#ops-pickup").addClass("col-sm-6").removeClass("col-md-4");
|
|
}
|
|
} else {
|
|
$("#ops-pickup").addClass("hidden").removeClass("col-md-4");
|
|
}
|
|
if (setout) {
|
|
if (!pickup && !local) {
|
|
$("#ops-setout").addClass("col-xs-12").removeClass("col-md-4");
|
|
} else if (!pickup || !local) {
|
|
$("#ops-setout").addClass("col-sm-6").removeClass("col-md-4");
|
|
}
|
|
} else {
|
|
$("#ops-setout").addClass("hidden").removeClass("col-md-4");
|
|
}
|
|
if (local) {
|
|
if (!pickup && !setout) {
|
|
$("#ops-local").addClass("col-xs-12").removeClass("col-md-4");
|
|
} else if (!pickup || !setout) {
|
|
$("#ops-local").addClass("col-sm-6").removeClass("col-md-4");
|
|
}
|
|
} else {
|
|
$("#ops-local").addClass("hidden").removeClass("col-md-4");
|
|
}
|
|
if (!$.trim($("#ops-engine-pickup > ul").html())) {
|
|
$("#ops-engine-pickup").addClass("hidden").removeClass("col-sm-6");
|
|
$("#ops-engine-setout").addClass("col-xs-12").removeClass("col-sm-6");
|
|
} else if (!$.trim($("#ops-engine-setout > ul").html())) {
|
|
$("#ops-engine-setout").addClass("hidden").removeClass("col-sm-6");
|
|
$("#ops-engine-pickup").addClass("col-xs-12").removeClass("col-sm-6");
|
|
}
|
|
// make check/unckeck buttons usable
|
|
$("#check-all").click(function () {
|
|
$(".rs-check").prop("checked", true);
|
|
$("#move-train").prop("disabled", false);
|
|
});
|
|
$("#clear-all").click(function () {
|
|
$(".rs-check").prop("checked", false);
|
|
$("#move-train").prop("disabled", true);
|
|
});
|
|
//disable move button if no location
|
|
if (!$("#move-train").data("location")) {
|
|
$("#move-train").prop("disabled", true);
|
|
}
|
|
// disable/enable controls if no work
|
|
if ($(".rs-check").length === 0) {
|
|
$("#move-train").prop("disabled", false);
|
|
$("#check-all").prop("disabled", true);
|
|
$("#clear-all").prop("disabled", true);
|
|
}
|
|
// enable move button if all checkboxs are checked
|
|
$(".rs-check").click(function () {
|
|
var disabled = true;
|
|
if (this.checked) {
|
|
disabled = false;
|
|
$(".rs-check").each(function () {
|
|
if (!this.checked) {
|
|
disabled = true;
|
|
return false;
|
|
}
|
|
});
|
|
}
|
|
$("#move-train").prop("disabled", disabled);
|
|
});
|
|
//disable move button if train is terminated
|
|
if ($("#move-train").data("statuscode") == CODE_TERMINATED) {
|
|
$("#move-train").prop("disabled", true);
|
|
}
|
|
|
|
// add function to move button
|
|
$("#move-train").click(function () {
|
|
getConductor(id, $("#move-train").data("location"));
|
|
});
|
|
// add function to Cars button, navigate to cars list filtered to this trainId
|
|
$("#show-cars").click(function () {
|
|
window.location.href='/web/cars.html?trainId=' + $("html").data("train");
|
|
});
|
|
}
|
|
$("#activity-alert").removeClass("show").addClass("hidden");
|
|
},
|
|
dataType: "html"
|
|
});
|
|
}
|
|
|
|
function getTrainName(id) {
|
|
$.ajax({
|
|
url: "/json/train/" + id,
|
|
data: {},
|
|
success: function (json) {
|
|
$("#navbar-operations-train").append(json.data.iconName + " (" + json.data.description + ")");
|
|
},
|
|
dataType: "json"
|
|
});
|
|
}
|
|
|
|
//-----------------------------------------javascript processing starts here (main) ---------------------------------------------
|
|
$(document).ready(function () {
|
|
if (window.location.pathname.indexOf("/manifest") >= 0) {
|
|
view = "manifest";
|
|
$("#manifest").removeClass("hidden").addClass("show");
|
|
getManifest($("html").data("train"));
|
|
} else if (window.location.pathname.indexOf("/conductor") >= 0) {
|
|
view = "conductor";
|
|
$("#conductor").removeClass("hidden").addClass("show");
|
|
} else {
|
|
view = "trains";
|
|
$("#show-all-trains > input").prop("checked", window.localStorage.getItem("jmri.operations.trains.showAll") === "true");
|
|
$("#show-all-trains > span").tooltip({delay: {show: 500, hide: 0}});
|
|
$("#show-all-trains > input").change(function () {
|
|
getTrains($(this).is(":checked"));
|
|
window.localStorage.setItem("jmri.operations.trains.showAll", $(this).is(":checked"));
|
|
});
|
|
}
|
|
// note: the functions and parameter names must match exactly those in jquery.jmri.js
|
|
jmri = $.JMRI({
|
|
open: function () {
|
|
if (view === "conductor") {
|
|
jmri.getTrain($("html").data("train"));
|
|
} else if (view === "trains") {
|
|
getTrains($("#show-all-trains > input").is(":checked"));
|
|
jmri.getList("trains"); //request updates when trains are added or deleted
|
|
}
|
|
},
|
|
trains: function (data) { //trains list received, refresh the trains table
|
|
getTrains($("#show-all-trains > input").is(":checked")); //refresh the trains table
|
|
},
|
|
train: function (id, data) {
|
|
// jmri.log("in train: for " + data.iconName);
|
|
if (view === "manifest") {
|
|
if (id == $("html").data("train")) {
|
|
$("title").text(data.iconName + " (" + data.description + ") Manifest | " + $("html").data("railroad"));
|
|
}
|
|
} else if (view === "conductor") {
|
|
if (id == $("html").data("train")) {
|
|
$("title").text(data.iconName + " (" + data.description + ") Conductor | " + $("html").data("railroad"));
|
|
getConductor(id, false);
|
|
}
|
|
} else if (view === "trains") { //if this train already shown, replace columns in that row
|
|
var row = $("tr[data-train=" + id + "]");
|
|
if ($(row).length) {
|
|
$(row).find(".train-name").text(data.iconName); // train icon name
|
|
$(row).children(".train-description").text(data.description); // description
|
|
$(row).children(".train-leadEngine").text(data.leadEngine); // leadEngine
|
|
$(row).children(".train-trainDepartsName").text(data.trainDepartsName); // origin ("departs")
|
|
$(row).children(".train-departureTime").text(data.departureTime); // origin departure time
|
|
$(row).children(".train-status").text(data.status); // status
|
|
$(row).children(".train-location").text(data.location); // location
|
|
$(row).children(".train-trainTerminatesName").text(data.trainTerminatesName); // destination
|
|
$(row).children(".train-route").text(data.route); // route
|
|
} else { //add unknown trains only if showAll is checked, or train has cars (active)
|
|
if ($("#show-all-trains > input").is(":checked")
|
|
|| data.cars.length > 0 ) {
|
|
// jmri.log("new train found, reloading trains table");
|
|
getTrains($("#show-all-trains > input").is(":checked"));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
// setup the functional menu items
|
|
if ($("html").data("train") !== "") {
|
|
getTrainName($("html").data("train"));
|
|
$("#navbar-operations-manifest > a").attr("href", "/operations/trains/" + $("html").data("train") + "/manifest");
|
|
$("#navbar-operations-conductor > a").attr("href", "/operations/trains/" + $("html").data("train") + "/conductor");
|
|
} else {
|
|
$("#navbar-operations-train-divider").addClass("hidden").removeClass("show");
|
|
$("#navbar-operations-train").addClass("hidden").removeClass("show");
|
|
$("#navbar-operations-manifest").addClass("hidden").removeClass("show");
|
|
$("#navbar-operations-conductor").addClass("hidden").removeClass("show");
|
|
}
|
|
jmri.connect();
|
|
});
|