130 lines
5.0 KiB
HTML
130 lines
5.0 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>PiXelTube Web Interface</title>
|
|
<link rel="stylesheet" href="{{ url_for('static', filename='bootstrap/css/bootstrap.min.css')}}">
|
|
</head>
|
|
<body>
|
|
|
|
<div class="container mt-5">
|
|
<h1 class="mb-4">PiXelTube Web Interface</h1>
|
|
|
|
<!-- Tube List Table -->
|
|
<table class="table">
|
|
<thead>
|
|
<tr>
|
|
<th scope="col">Tube ID</th>
|
|
<th scope="col">Universe</th>
|
|
<th scope="col">DMX Address</th>
|
|
<th scope="col">Actions</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody id="tubeList">
|
|
<!-- Tube information will be dynamically added here -->
|
|
</tbody>
|
|
</table>
|
|
|
|
<!-- Tube Settings Modal -->
|
|
<div class="modal fade" id="tubeSettingsModal" tabindex="-1" role="dialog" aria-labelledby="tubeSettingsModalLabel"
|
|
aria-hidden="true">
|
|
<div class="modal-dialog" role="document">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title" id="tubeSettingsModalLabel">Tube Settings</h5>
|
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
|
<span aria-hidden="true">×</span>
|
|
</button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<form id="tubeSettingsForm">
|
|
<div class="form-group">
|
|
<label for="universeInput">Universe:</label>
|
|
<input type="number" class="form-control" id="universeInput" required>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="dmxAddressInput">DMX Address:</label>
|
|
<input type="number" class="form-control" id="dmxAddressInput" required>
|
|
</div>
|
|
<button type="submit" class="btn btn-primary">Save Changes</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!-- Include Bootstrap JS and jQuery (assuming you've downloaded them locally) -->
|
|
<script src="{{ url_for('static', filename='jquery.min.js')}}"></script>
|
|
<script src="{{ url_for('static', filename='bootstrap/js/bootstrap.bundle.min.js')}}"></script>
|
|
<script>
|
|
$(document).ready(function () {
|
|
// Function to populate the tube list
|
|
function populateTubeList() {
|
|
$.ajax({
|
|
url: "{{ url_for('', filename='/get_tube_list')}}",
|
|
method: 'GET',
|
|
success: function (data) {
|
|
$('#tubeList').empty();
|
|
for (const tube of data.tubes) {
|
|
$('#tubeList').append(`
|
|
<tr>
|
|
<td>${tube.mac_address}</td>
|
|
<td>${tube.universe}</td>
|
|
<td>${tube.dmx_address}</td>
|
|
<td>
|
|
<button class="btn btn-primary btn-sm" onclick="openTubeSettingsModal('${tube.mac_address}')">Settings</button>
|
|
</td>
|
|
</tr>
|
|
`);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
// Function to open the tube settings modal
|
|
window.openTubeSettingsModal = function (tubeId) {
|
|
$('#tubeSettingsModal').modal('show');
|
|
// Set the modal title
|
|
$('#tubeSettingsModalLabel').text(`Tube Settings - ${tubeId}`);
|
|
|
|
// Populate the form with current settings
|
|
$.ajax({
|
|
url: `/get_assigned_params/${tubeId}`,
|
|
method: 'GET',
|
|
success: function (data) {
|
|
$('#universeInput').val(data.universe);
|
|
$('#dmxAddressInput').val(data.dmx_address);
|
|
}
|
|
});
|
|
|
|
// Submit form on save button click
|
|
$('#tubeSettingsForm').off('submit').on('submit', function (event) {
|
|
event.preventDefault();
|
|
const newUniverse = $('#universeInput').val();
|
|
const newDmxAddress = $('#dmxAddressInput').val();
|
|
|
|
// Update tube settings
|
|
$.ajax({
|
|
url: `/update_tube_settings/${tubeId}`,
|
|
method: 'POST',
|
|
contentType: 'application/json',
|
|
data: JSON.stringify({universe: newUniverse, dmx_address: newDmxAddress}),
|
|
success: function () {
|
|
// Close modal and refresh tube list
|
|
$('#tubeSettingsModal').modal('hide');
|
|
populateTubeList();
|
|
}
|
|
});
|
|
});
|
|
};
|
|
|
|
// Initial population of the tube list
|
|
populateTubeList();
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|