Files
django-ram/ram/driver/static/wt/js/exwebthrottle.js

972 lines
28 KiB
JavaScript

/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or$("#log-box").append("<br>"+data+"<br>");
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Authors: Fred Decker
Mani Kumar
Matt
This is part of the DCC++ EX Project for model railroading and more.
For more information, see us at dcc-ex.com.
*/
window.cv=0;
window.speed=0;
window.direction=1;
window.server="";
window.port=4444;
window.speedStep = 1;
window.functions = {
"f0": 0,
"f1": 0,
"f2": 0,
"f3": 0,
"f4": 0,
"f5": 0,
"f6": 0,
"f7": 0,
"f8": 0,
"f9": 0,
"f10": 0,
"f11": 0,
"f12": 0,
"f13": 0,
"f14": 0,
"f15": 0,
"f16": 0,
"f17": 0,
"f18": 0,
"f19": 0,
"f20": 0,
"f21": 0,
"f22": 0,
"f23": 0,
"f24": 0,
"f25": 0,
"f26": 0,
"f27": 0,
"f28": 0
};
window.isStopped = true;
let port;
let emulatorMode;
let reader;
let inputDone;
let outputDone;
let inputStream;
let outputStream;
let pressed = false;
// Enables and disables ui elements
function uiDisable (status) {
/*document.getElementById('ex-locoid').disabled = status
document.getElementById('power-switch').disabled = status
document.getElementById('button-sendCmd').disabled = status
document.getElementById('dir-f').disabled = status
document.getElementById('dir-S').disabled = status*/
//document.getElementById('dir-b').disabled = status
$("#ex-locoid").prop('disabled', status)
$("#power-switch").prop('disabled', status)
$("#button-sendCmd").prop('disabled', status)
$("#dir-f").prop('disabled', status)
$("#dir-S").prop('disabled', status)
$("#dir-b").prop('disabled', status)
if (status){
//$("#throttle").roundSlider("disable");
//toggleThrottleState(false)
$("#button-getloco").trigger("click");
} else {
//$("#throttle").roundSlider("enable");
//toggleThrottleState(true)
//$("#button-getloco").trigger("click");
}
}
// Returns given function current value (0-disable/1-enable)
function getFunCurrentVal(fun){
return window.functions[fun];
}
// Set given function current value with given value (0/1)
function setFunCurrentVal(fun, val){
window.functions[fun]=val;
}
// Set given CV value
function setCV(val){
window.cv = val;
console.log("Set Cab Address: "+val);
}
// Get stored CV value
function getCV(){
return window.cv
}
// Set Speed value
function setSpeed(sp){
window.speed=sp;
}
// Get Speed value
function getSpeed(){
return parseInt(window.speed);
}
// Set Direction
function setDirection(dir){
window.direction=dir;
}
// Get Direction value
function getDirection(dir){
return window.direction;
}
// Handling Disabling functionality for Knob Type throttle (it will not Out of the box)
function toggleKnobState(ele, state) {
if(!state){
ele.addClass("disabled");
}else{
ele.removeClass("disabled");
}
}
function loadMapData(map){
data = [];
if (map == "Default") {
data = { mname: "Default", fnData: fnMasterData };
} else {
data = getStoredMapData(map);
}
$("#mapping-panel").empty();
$("#mapping-panel").append(
'<div class="settings-subheading row">' +
'<div class="column-7 pl0"><div class="map-name-heading">' +
map +
"</div></div>" +
'<div class="column-3 pr0">' +
'<input type="hidden" id="cur-map-val" cur-map="'+map+'"/>' +
'<a href="#" class="option-btn waste-bin" id="delete-map"> &#128465;</a>' +
'<a href="#" class="option-btn" id="import-map"> &#8595;</a>' +
'<a href="#" class="option-btn" id="export-cur-map"> &#8593;</a>' +
'<a href="#" class="option-btn" id="edit-cur-map">&#9998;</a>' +
"</div>" +
"</div>"
);
$("#mapping-panel").append(
'<div class="row settings-group fnhead">' +
'<div class="column-2">Function</div>'+
'<div class="column-4">Name</div>'+
'<div class="column-2">Type</div>' +
'<div class="column-2">Visible</div>' +
'</div>'
);
container = $('<div class="maps-content"></div>').appendTo("#mapping-panel");
$.each(data.fnData, function (key, value) {
container.append(
'<div class="row settings-group" id="'+key+'">' +
'<div class="column-2 caplitalize">'+key+'</div>'+
'<div class="column-4">'+value[2]+'</div>'+
'<div class="column-2">'+ (value[1] == 1 ? '<span class="pill red">Momentary</span>' : '<span class="pill green">Latching</span>') +'</div>' +
'<div class="column-2">'+ (value[3] == 1 ? '<span class="pill green">Visible</span>' : '<span class="pill">Hidden</span>') +'</div>' +
'</div>'
);
});
}
function loadLocomotives(){
locos = getLocoList();
$("#locomotives-panel").empty();
$.each(locos, function (key, value) {
$("#locomotives-panel").append(
'<div class="row settings-group" id="'+key+'">'+
'<div class="column-1 sno"><p>' + (key + 1) + "</p></div>" +
'<div class="column-7 loco-details">' +
'<div class="row">' +
'<div class="column-7"><p class="ac-loco-name column-10">' +
value.name +
"</p></div>" +
'<div class="column-2 cv-num"><p><small>CV </small>' +
value.cv +
"</p></div>" +
"</div>" +
'<div class="row sub-text">' +
'<div class="column-3"><p>' + value.type + '</p></div>' +
'<div class="column-3">' +
(value.decoder == "" ? '<p class="nd">Undefined</p>' : "<p>" + value.decoder + "</p>") +
"</div>" +
'<div class="column-3">' +
(value.brand == "" ? '<p class="nd">Undefined</p>' : "<p>" + value.brand + "</p>") +
"</div></div></div>" +
'<div class="column-2 asst-map"><div class="row">' +
'<div class="column-7"><p class="muted">Map</p><p>' +
value.map +
"</p></div>" +
'<div class="column-3 prh"><a href="#" loco-id="'+key+'" data-loco="'+
value.name+'" class="edit-cur-loco"> &#9998; </a></div></div>' +
"</div></br>"
);
});
}
//Initialization routine for Throttle screen
function setThrottleScreenUI() {
loadmaps();
loadButtons({ mname: "default", fnData: fnMasterData });
controller = getPreference("scontroller");
$("#throttle-selector").val(controller).trigger("change");
setspeedControllerType(controller);
// Show and hide debug console based on preference set in earlier session
if (getPreference("dbugConsole") == null) {
setPreference("dbugConsole", true);
}
if(getPreference("dbugConsole")) {
$("#debug-console").show()
$("#console-toggle").prop("checked", true);
}else{
$("#debug-console").hide();
$("#console-toggle").prop("checked", false);
}
$(".dir-toggle").addClass("forward");
// Set theme
if (getPreference("theme") == null) {
setPreference("theme", "simple");
}else{
theme = getPreference("theme");
$("#theme-selector").val(theme).trigger("change");
if (theme != "simple") {
$("link[title*='theme']").remove();
$("head").append(
'<link rel="stylesheet" type="text/css" title="theme" href="css/themes/'+theme+'.css">'
);
}
}
}
// Change the Speed controller type
function setspeedControllerType(pref){
// Set saved throttle or use circular throttle as default
$(".speedController").hide();
switch (pref) {
case "vertical":
console.log("Vertical Speed Controller");
$("#vertical-throttle").show();
break;
case "knob":
console.log("Knob Speed Controller");
$("#knobthrottle").show();
break;
case "circular":
console.log("Circular Speed Controller");
$("#circular-throttle").show();
break;
case "default":
case null:
case undefined:
console.log("Fallback Speed Controller");
$("#vertical-throttle").show();
setPreference("scontroller", "vertical");
$("#throttle-selector").val("vertical").trigger("change");
}
}
// Enabling/disabling Speed Controllers
function toggleThrottleState(state){
if(state){
$("#circular-throttle").roundSlider("enable");
$("#v-throttle").slider("enable");
toggleKnobState($("#knobthrottle"), true);
}else{
$("#circular-throttle").roundSlider("disable");
$("#v-throttle").slider("disable");
toggleKnobState($("#knobthrottle"), false);
}
}
/**********************************************************
* This function will
1. Send Speed command
2. Set speed value of all the available sliders/controllers
3. Set respctive speed number
************************************************************/
function setSpeedofControllers(){
spd = getSpeed();
if(!isStopped){
writeToStream("t 01 " + getCV() + " " + spd + " " + getDirection());
}
// Circular
$("#circular-throttle").roundSlider("setValue", spd);
// Vertical
$("#v-throttle").val(spd).change();
$("#v-throttle").slider("option", "value", spd);
$("#speed-indicator").html(spd);
// Knob
$("#knob-value").html(spd);
knob.val(spd).change();
}
// This function will generate commands for each type of function
function generateFnCommand(clickedBtn){
func = clickedBtn.attr('name'); // Gives function name (F1, F2, .... F28)
eventType = clickedBtn.data("type"); // Gives type of button (Press/Hold or Toggle)
btnPressed = clickedBtn.attr("aria-pressed");
//console.log("Function Name=>"+func+" , Button Type=>"+eventType+" , Button Pressed=>"+btnStatus);
switch(func){
case "f0":
case "f1":
case "f2":
case "f3":
case "f4":
{
if(btnPressed=="true"){
sendCommandForF0ToF4(func,1);
}else{
sendCommandForF0ToF4(func,0);
}
break;
}
case "f5":
case "f6":
case "f7":
case "f8":
{
if(btnPressed=="true"){
sendCommandForF5ToF8(func,1);
}else{
sendCommandForF5ToF8(func,0);
}
break;
}
case "f9":
case "f10":
case "f11":
case "f12":
{
if(btnPressed=="true"){
sendCommandForF9ToF12(func,1);
}else{
sendCommandForF9ToF12(func,0);
}
break;
}
case "f13":
case "f14":
case "f15":
case "f16":
case "f17":
case "f18":
case "f19":
case "f20":
{
if(btnPressed=="true"){
sendCommandForF13ToF20(func,1);
}else{
sendCommandForF13ToF20(func,0);
}
break;
}
case "f21":
case "f22":
case "f23":
case "f24":
case "f25":
case "f26":
case "f27":
case "f28":
{
if(btnPressed=="true"){
sendCommandForF21ToF28(func,1);
}else{
sendCommandForF21ToF28(func,0);
}
break;
}
default:
{
alert("Invalid Function");
}
}
}
$(document).ready(function(){
var mode = 0;
// Left Menu
$("#nav-open").on("click", function () {
$("#side-menu").show().animate({ left: 0 });
});
$("#nav-close").on("click", function () {
$("#side-menu").animate({ left: -260 }, function(){
$("#side-menu").hide();
});
});
$("#info-tooltip").tooltip({
content:
"<p>DCC++ EX Web Throttle<br>(WebThrottle-EX)</p><hr><p>Version: "+version+"</p><p><b>Credits</b><br> Fred Decker <br> Mani Kumar <br> Matt H</p>",
show: {
effect: "slideDown",
delay: 100,
},
classes: {
"ui-tooltip": "credits-tooltip",
},
position: {
my: "left top",
at: "left bottom",
},
});
// Load function map, buttons throttle etc
setThrottleScreenUI();
$("#throttle-selector").on("change", function (e) {
selectedval = $(this).val();
console.log(selectedval);
setPreference("scontroller", selectedval);
setspeedControllerType(selectedval);
});
$("#theme-selector").on("change", function (e) {
selectedval = $(this).val();
console.log(selectedval);
setPreference("theme", selectedval);
$("link[title*='theme']").remove();
if (selectedval != "simple") {
$("head").append(
'<link rel="stylesheet" type="text/css" title="theme" href="css/themes/' +
selectedval +
'.css">'
);
}
});
// Connect command station
$("#button-connect").on("click", function () {
toggleServer($(this));
});
// Disconnect command station
$("#button-disconnect").on("click", function () {
disconnectServer();
});
// Aquire loco of given CV
$("#button-getloco").on("click", function () {
acButton = $(this);
isAcquired = $(this).data("acquired");
// Parse int only returns number if the string is starting with Number
locoid_input = parseInt($("#ex-locoid").val());
if (locoid_input != 0) {
if (isAcquired == false && getCV() == 0) {
setCV(locoid_input);
$("#loco-info").html("Acquired Locomotive: " + locoid_input);
acButton.data("acquired", true);
acButton.html('<span class="icon-cross"></span>');
toggleThrottleState(true);
} else {
currentCV = getCV();
$("#ex-locoid").val(0);
setCV(0);
$("#loco-info").html("Released Locomotive: " + currentCV);
acButton.data("acquired", false);
acButton.html('<span class="icon-circle-right"></span>');
toggleThrottleState(false);
}
}
});
// Switch ON/OFF power of the Command station
$("#power-switch").on("click", function () {
pb = $(this).is(":checked");
if (pb == true) {
writeToStream("1");
$("#power-status").html("On");
} else {
writeToStream("0");
$("#power-status").html("Off");
}
});
////////////////////////////////////
$("#v-throttle").slider({
orientation: "vertical",
min: 0,
max: 126,
disabled: true,
range: "max",
slide: function (event, ui) {
$("#speed-indicator").html(ui.value);
setSpeed(ui.value);
setSpeedofControllers();
},
});
/////////////////////////////////////////*/
knob = $(".rotarySwitch").rotaryswitch({
minimum: 0,
maximum: 126,
step: 2,
beginDeg: 210,
lengthDeg: 295,
minimumOverMaximum: true,
showMarks: true,
themeClass: "big light",
});
toggleKnobState($("#knobthrottle"), false);
knob.on("change", function () {
oldValue = getSpeed();
kval = knob.val();
$("#knob-value").html(kval);
setSpeed(kval);
// Below condition is to avoid infinite loop
// that triggers change() event indifinitely
if (oldValue != kval) {
setSpeedofControllers();
} else {
writeToStream(
"t 01 " + getCV() + " " + getSpeed() + " " + getDirection()
);
}
//console.log( "t 01 " + getCV() + " " + getSpeed() + " " + getDirection());
});
/////////////////////////////////////////////
// Speed (round) Slider allows user to change the speed of the locomotive
Tht = $("#circular-throttle").roundSlider({
width: 20,
radius: 116,
value: speed,
circleShape: "pie",
handleShape: "dot",
startAngle: 315,
lineCap: "round",
sliderType: "min-range",
showTooltip: true,
editableTooltip: false,
handleSize: "+18",
max: "126",
disabled: true,
update: function (slider) {
setSpeed(slider.value);
setSpeedofControllers();
//console.log("t 01 "+getCV()+" "+getSpeed()+" "+getDirection());
},
valueChange: function (slider) {
//setSpeed(slider.value);
//writeToStream("t 01 "+getCV()+" "+getSpeed()+" "+getDirection());
// console.log("This event is similar to 'update' event, in addition it will trigger even the value was changed through programmatically also.");
},
});
// Allows user to change the direction of the loco and STOP.
$(".dir-btn").on("click", function () {
if (getCV() != 0){
current = $(this);
dir = current.attr("aria-label");
$(".dir-btn").removeClass("selected");
current.addClass("selected", 200);
console.log(dir);
$(".dir-toggle").removeClass("forward backward stop");
$(".dir-toggle").addClass(dir);
// Do direction stuff here
switch (dir) {
case "forward": {
isStopped = false;
setDirection(1);
setSpeedofControllers();
writeToStream("t 01 " + getCV() + " " + getSpeed() + " 1");
break;
}
case "backward": {
isStopped = false;
setDirection(0);
setSpeedofControllers();
writeToStream("t 01 " + getCV() + " " + getSpeed() + " 0");
break;
}
case "stop": {
isStopped = true;
dir = getDirection();
setSpeed(0);
setSpeedofControllers();
writeToStream("t 01 " + getCV() + " 0 " + dir);
break;
}
}
}else{
console.log("No loco acquired");
}
});
$("#emergency-stop").on("click", function () {
if (getCV() != 0){
isStopped = true;
dir = getDirection();
setSpeed(0);
setSpeedofControllers();
writeToStream("t 01 " + getCV() + " -1 " + dir);
}
else{
console.log("No loco acquired");
}
});
// Hide/Show the Loco, Connect server fields (on top)
$("#button-hide").on("click", function () {
if ($(".details-panel").is(":visible")) {
$(".details-panel").hide();
$(this).css("top", 0);
$(this).html('<span class="icon-circle-down"></span>');
} else {
$(".details-panel").show();
$(this).html('<span class="icon-circle-up"></span>');
$(this).css("top", "-9px");
}
});
// PLUS button. Increases speed on Hold / Tap
var tId = 0;
$("#button-right")
.on("mousedown", function () {
event.stopImmediatePropagation();
tId = setInterval(function () {
var sp = getSpeed();
if (sp <= 125 && getDirection() != -1 && getCV() != 0) {
setSpeed(sp + speedStep);
setSpeedofControllers();
writeToStream(
"t 01 " + getCV() + " " + getSpeed() + " " + getDirection()
);
sp = 0;
}
}, 100);
})
.on("mouseup mouseleave", function () {
clearInterval(tId);
})
.on("click", function () {
event.stopImmediatePropagation();
var sp = getSpeed();
if (sp <= 125 && getDirection() != -1 && getCV() != 0) {
setSpeed(sp + speedStep);
setSpeedofControllers();
writeToStream(
"t 01 " + getCV() + " " + getSpeed() + " " + getDirection()
);
sp = 0;
}
});
// MINUS button. Decreases speed on Hold / Tap
var tId = 0;
$("#button-left")
.on("mousedown", function () {
event.stopImmediatePropagation();
tId = setInterval(function () {
var sp = getSpeed(sp);
if (sp >= 1 && getDirection() != -1 && getCV() != 0) {
setSpeed(sp - speedStep);
setSpeedofControllers();
writeToStream(
"t 01 " + getCV() + " " + getSpeed() + " " + getDirection()
);
sp = 0;
}
}, 100);
})
.on("mouseup mouseleave", function () {
clearInterval(tId);
})
.on("click", function () {
event.stopImmediatePropagation();
var sp = getSpeed(sp);
if (sp >= 1 && getDirection() != -1 && getCV() != 0) {
setSpeed(sp - speedStep);
setSpeedofControllers();
writeToStream(
"t 01 " + getCV() + " " + getSpeed() + " " + getDirection()
);
sp = 0;
}
});
// Functions buttons
// Send Instructions to generate command depends the type of Button (press/toggle)
var timer = 0;
$(document)
.on("mousedown", ".fn-btn", function () {
console.log($(this).val);
clickedBtn = $(this);
btnType = clickedBtn.data("type");
if (btnType == "press") {
timer = setInterval(function () {
// MOMENTARY HOLD ON
clickedBtn.attr("aria-pressed", "true");
generateFnCommand(clickedBtn);
console.log("PRESSED HOLD ==> " + clickedBtn.attr("name"));
}, 100);
}
})
.on("mouseup mouserelease", ".fn-btn", function () {
clearInterval(timer);
clickedBtn = $(this);
btnType = clickedBtn.data("type");
btnState = clickedBtn.attr("aria-pressed");
if (btnType == "press") {
// MOMENTARY HOLD OFF
clickedBtn.attr("aria-pressed", "false");
generateFnCommand(clickedBtn);
console.log("RELEASED HOLD ==> " + clickedBtn.attr("name"));
} else {
if (btnState == "false") {
// TOGGLE ON
clickedBtn.attr("aria-pressed", "true");
generateFnCommand(clickedBtn);
console.log("TOGGLE ON ==> " + clickedBtn.attr("name"));
} else {
// TOGGLE OFF
clickedBtn.attr("aria-pressed", "false");
generateFnCommand(clickedBtn);
console.log("TOGGLE OFF ==> " + clickedBtn.attr("name"));
}
}
});
// Hide/Show the Debug console
$("#console-toggle").on("click", function () {
pb = $(this).is(":checked");
if (pb == true) {
$("#debug-console").show();
setPreference("dbugConsole", true);
} else {
$("#debug-console").hide();
setPreference("dbugConsole", false);
}
});
// Send command written in console
$("#button-sendCmd").on("click", function () {
cmd = $("#cmd-direct").val();
writeToStream(cmd);
document.getElementById("cmd-direct").value = "";
});
// Clear the console log window
$("#button-clearLog").on("click", function () {
$("#log-box").html("");
});
// Function to toggle fullScreen viceversa
$("#fs-toggle").on("click", function () {
st = $(this).attr("state");
var elem = document.documentElement;
if (st == "ws") {
$(this).attr("state", "fs");
if (elem.requestFullscreen) {
elem.requestFullscreen();
} else if (elem.mozRequestFullScreen) {
/* Firefox */
elem.mozRequestFullScreen();
} else if (elem.webkitRequestFullscreen) {
/* Chrome, Safari and Opera */
elem.webkitRequestFullscreen();
} else if (elem.msRequestFullscreen) {
/* IE/Edge */
elem.msRequestFullscreen();
}
} else {
$(this).attr("state", "ws");
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.mozCancelFullScreen) {
/* Firefox */
document.mozCancelFullScreen();
} else if (document.webkitExitFullscreen) {
/* Chrome, Safari and Opera */
document.webkitExitFullscreen();
} else if (document.msExitFullscreen) {
/* IE/Edge */
document.msExitFullscreen();
}
}
});
//Handles navigation clicks
$("#throttle-nav").on("click", function () {
hideWindows();
$("#throttle-window").show();
$("#nav-close").trigger("click");
});
$("#loco-nav").on("click", function () {
hideWindows();
$("#loco-window").show();
$("#nav-close").trigger("click");
loadLocomotives();
});
$("#fn-map-nav").on("click", function () {
hideWindows();
$("#fn-map-window").show();
$("#nav-close").trigger("click");
setFunctionMaps();
//loadMapData("Default");
});
$("#settings-nav").on("click", function () {
hideWindows();
$("#settings-window").show();
$("#nav-close").trigger("click");
});
eventListeners();
/*
$("#settings-general").on('click', function(){
hideSettings();
$("#general-section").show();
});
$("#settings-storage").on('click', function(){
hideSettings();
$("#storage-section").show();
});*/
$("#settings-general").on("click", function () {
/*var target = $('#general-section');
if (target.length) {
$('#settings-panel').animate({
scrollTop: target.offset().top
}, 1000);
}*/
$("#general-section")[0].scrollIntoView(true);
});
$("#settings-storage").on("click", function () {
/*var target = $('#storage-section');
if (target.length) {
$('#settings-panel').animate({
scrollTop: target.offset().top
}, 1000);
}*/
$("#storage-section")[0].scrollIntoView(true);
});
$('#settings-app').on('click', function() {
$("#app-section")[0].scrollIntoView(true);
})
$(document).on("click", ".map-name", function () {
loadMapData($(this).attr("map-val"));
$("li.map-name").removeClass("active");
$(this).addClass("active");
});
// This allows user to delete currently selected Map
$(document).on("click", "#delete-map", function () {
selectedval = $("#cur-map-val").attr("cur-map");
if (selectedval != "Default") {
deleteFuncData(selectedval);
loadmaps();
setFunctionMaps();
loadMapData("Default");
$("#select-map").val("default").trigger("change");
$("li.map-name").removeClass("active");
$("li.map-name[map-val= 'Default']").addClass("active");
}
});
$(document).on("click", ".edit-cur-loco", function () {
cabdata = getStoredLocoData($(this).attr("data-loco"));
$("#loco-form")[0].reset();
$("#loco-form-content").css("display", "inline-block");
$(".add-loco-form .add-loco-head").html("Edit Locomotive");
$("#loco-submit").attr("loco-mode", "edit");
$("#loco-submit").attr("loco-id", $(this).attr("loco-id"));
$.each(cabdata, function (key, value) {
$("#loco-form").children().find("#"+key).val(value);
if(key=="map"){
$("#function-maps").autocomplete("search", value);
var menu = $("#function-maps").autocomplete("widget");
$(menu[0].children[0]).click();
}
});
});
});
function setFunctionMaps() {
const defaultMap = {
mname: "Default",
fnData: {},
}
const maps = [defaultMap, ...getMapData()];
$("#function-mappings").empty();
maps.forEach(map => {
const name = map.mname
$("#function-mappings").append(`<li class='map-name' map-val=${name}>${name}</li>`);
})
}
function hideWindows(){
$("#throttle-window").hide();
$("#loco-window").hide();
$("#fn-map-window").hide();
$("#settings-window").hide();
}
function hideSettings(){
$("#general-section").hide();
$("#storage-section").hide();
}
function credits() {
authors = ["Fred Decker","Mani Kumar","Matt"]
displayLog("Credits:")
console.log("Credits:")
for (i=0; i<authors.length; i++) {
displayLog(authors[i])
console.log(authors[i])
}
}
function eventListeners(){
var cmdDirect = document.getElementById("cmd-direct");
var exLocoID = document.getElementById("ex-locoid");
cmdDirect.addEventListener("keyup", function(event) {
if (event.key === "Enter") {
event.preventDefault();
// Trigger the button element with a click
$('#button-sendCmd').click();
}
});
exLocoID.addEventListener("keyup", function(event) {
if (event.key === "Enter") {
event.preventDefault();
// Trigger the button element with a click
$('#button-getloco').click();
}
})
}