Files
2026-06-17 14:00:51 +02:00

163 lines
5.7 KiB
JavaScript

/*
* RosterServlet specific JavaScript
*/
var jmri = null;
/*
* request and show roster
*/
function getRosterTable(group) {
$.ajax({
url: "/roster?format=html" + ((group) ? "&group=" + encodeURIComponent(group) : ""),
data: {},
success: function(data) {
if (data.length === 0) {
if ($("html").data("roster-group")) {
$("#warning-group-no-entries").removeClass("hidden").addClass("show");
} else {
$("#warning-roster-no-entries").removeClass("hidden").addClass("show");
}
$("table#roster-table").removeClass("show").addClass("hidden");
} else {
$("#warning-roster-no-entries").removeClass("show").addClass("hidden");
$("#warning-group-no-entries").removeClass("show").addClass("hidden");
$("table#roster-table > tbody").empty();
$("table#roster-table > tbody").append(data);
$(".entry-url-menu-item > a[href='']").each(function() {
$(this).parent().addClass("disabled");
$(this).attr("href", "#");
});
hideEmptyColumns("table#roster-table tr th");
$(".roster-entry td").click(function(event) {
if (event.target === this) {
window.open("/web/webThrottle.html?loconame=" + $(this).parent().data("rosterEntry"), $(this).parent().data("address")).focus();
}
});
$(".roster-entry td").css("cursor", "pointer");
$("table#roster-table").removeClass("hidden").addClass("show");
}
$("#activity-alert").removeClass("show").addClass("hidden");
},
dataType: "html"
});
}
function hideImage(img) {
// if image is in anchor, remove anchor instead of image
if ($(img).parent().is("a")) {
$(img).parent().remove();
} else {
$(img).remove();
}
hideEmptyColumns("table#roster-table tr th"); // also ensure that if no roster icons or images are loaded, the icon or image column is hidden
return true;
}
function hideEmptyColumns(selector) {
$(selector).each(function(index) {
//select all tds in this column
var tds = $(this).parents('table').find('tr td:nth-child(' + (index + 1) + ')');
//check if all the cells in this column are empty
if (tds.length === tds.filter(':empty').length) {
//hide header
$(this).addClass("hidden");
//hide cells
tds.addClass("hidden");
}
});
}
function initUploads() {
$('#fileupload').fileupload({
singleFileUpload: false,
dataType: 'json',
done: function (e, data) {
$.each(data.result, function (index, msg) {
$("#msgList").prepend(
msg + '<br />'
)//end $("#msgList").append()
});
},
progressall: function (e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
$('#progress .bar').css('width', progress + '%');
if (!$('#progress .bar').is(":visible")) {
$('#progress .bar').show();
}
if (progress==100) {
$('#progress .bar').fadeOut("slow");
}
},
dropZone: $('#dropzone')
}).bind('fileuploadsubmit', function (e, data) {
data.formData = {
fileReplace: $('#fileReplace').is(':checked'), //include the Replace flag
rosterGroup: $("html").data("roster-group") // and rosterGroup as variables in upload
};
});
//add hover effects when dragging files over dropzone
$(document).bind('dragover', function (e) {
var dropZone = $('#dropzone'),
timeout = window.dropZoneTimeout;
if (!timeout) {
dropZone.addClass('in');
} else {
clearTimeout(timeout);
}
var found = false,
node = e.target;
do {
if (node === dropZone[0]) {
found = true;
break;
}
node = node.parentNode;
} while (node != null);
if (found) {
dropZone.addClass('hover');
} else {
dropZone.removeClass('hover');
}
window.dropZoneTimeout = setTimeout(function () {
window.dropZoneTimeout = null;
dropZone.removeClass('in hover');
}, 100);
});
}
//-----------------------------------------javascript processing starts here (main) ---------------------------------------------
$(document).ready(function() {
jmri = $.JMRI({});
getRosterTable($("html").data("roster-group"));
initUploads();
// listen for roster changes and refresh the roster table when this occurs
// by overriding processing of websocket messages of interest
// note: the functions and parameter names must match exactly those in jquery.jmri.js
jmri = $.JMRI({
//wait for the hello message
hello: function(data) {
jmri.getList("roster"); // request updates to the roster via websocket
},
//roster "add" and "remove" messages
roster: function(data) {
//jmri.log("in roster: data="+JSON.stringify(data).substr(0,180) + "...");
getRosterTable($("html").data("roster-group"));
},
//received an updated rosterEntry, rebuild the entire roster table
rosterEntry: function(name, data) {
//jmri.log("in rosterEntry. name="+name+", data="+JSON.stringify(data).substr(0,180) + "...");
getRosterTable($("html").data("roster-group"));
},
});
});