163 lines
5.7 KiB
JavaScript
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"));
|
|
},
|
|
});
|
|
});
|
|
|