/* * 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 + '
' )//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")); }, }); });