mirror of
https://github.com/Team254/cheesy-arena-lite.git
synced 2026-03-10 06:06:47 -04:00
74 lines
2.3 KiB
JavaScript
74 lines
2.3 KiB
JavaScript
// Copyright 2018 Team 254. All Rights Reserved.
|
|
// Author: pat@patfairbank.com (Patrick Fairbank)
|
|
//
|
|
// Client-side logic for the display configuration page.
|
|
|
|
var displayTemplate = Handlebars.compile($("#displayTemplate").html());
|
|
var websocket;
|
|
var fieldsChanged = false;
|
|
|
|
var configureDisplay = function(displayId) {
|
|
// Convert configuration string into map.
|
|
var configurationMap = {}
|
|
$.each($("#displayConfiguration" + displayId).val().split("&"), function(index, param) {
|
|
var keyValuePair = param.split("=");
|
|
configurationMap[keyValuePair[0]] = keyValuePair[1];
|
|
});
|
|
|
|
fieldsChanged = false;
|
|
websocket.send("configureDisplay", {
|
|
Id: displayId,
|
|
Nickname: $("#displayNickname" + displayId).val(),
|
|
Type: parseInt($("#displayType" + displayId).val()),
|
|
Configuration: configurationMap
|
|
});
|
|
};
|
|
|
|
var undoChanges = function() {
|
|
window.location.reload();
|
|
};
|
|
|
|
var reloadDisplay = function(displayId) {
|
|
websocket.send("reloadDisplay", displayId);
|
|
};
|
|
|
|
var reloadAllDisplays = function() {
|
|
websocket.send("reloadAllDisplays");
|
|
};
|
|
|
|
// Register that an input element has been modified by the user to avoid overwriting with a server update.
|
|
var markChanged = function(element) {
|
|
fieldsChanged = true;
|
|
element.setAttribute("data-changed", true);
|
|
};
|
|
|
|
// Handles a websocket message to refresh the display list.
|
|
var handleDisplayConfiguration = function(data) {
|
|
if (fieldsChanged) {
|
|
// Don't overwrite anything if the user has made unsaved changes.
|
|
return;
|
|
}
|
|
|
|
$("#displayContainer").empty();
|
|
|
|
$.each(data, function(displayId, display) {
|
|
var displayRow = displayTemplate(display);
|
|
$("#displayContainer").append(displayRow);
|
|
$("#displayNickname" + displayId).val(display.DisplayConfiguration.Nickname);
|
|
$("#displayType" + displayId).val(display.DisplayConfiguration.Type);
|
|
|
|
// Convert configuration map to query string format.
|
|
var configurationString = $.map(Object.entries(display.DisplayConfiguration.Configuration), function(entry) {
|
|
return entry.join("=");
|
|
}).join("&");
|
|
$("#displayConfiguration" + displayId).val(configurationString);
|
|
});
|
|
};
|
|
|
|
$(function() {
|
|
// Set up the websocket back to the server.
|
|
websocket = new CheesyWebsocket("/setup/displays/websocket", {
|
|
displayConfiguration: function(event) { handleDisplayConfiguration(event.data); }
|
|
});
|
|
});
|