X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fweb%2Fdevices%2Fsrc%2Fmain%2Fresources%2Fjs%2Fpage.js;h=2488d06d0cae7745a4efc58c8d8a42ff1f565271;hp=824d2e9b856962cab065dc4b5cb0ee381a14d223;hb=e383b2e0b9072b7b5b3e3903b8a42ab3917b7f63;hpb=65662c5141097ed382ad2037ad4a78a9965aad22 diff --git a/opendaylight/web/devices/src/main/resources/js/page.js b/opendaylight/web/devices/src/main/resources/js/page.js index 824d2e9b85..2488d06d0c 100644 --- a/opendaylight/web/devices/src/main/resources/js/page.js +++ b/opendaylight/web/devices/src/main/resources/js/page.js @@ -14,7 +14,7 @@ one.f = {}; one.f.dashlet = { nodesLearnt : { id : 'nodesLearnt', - name : 'Nodes Learnt' + name : 'Nodes Learned' }, staticRouteConfig : { id : 'staticRouteConfig', @@ -74,6 +74,7 @@ one.f.switchmanager.nodesLearnt = { }, modal: { modal: "one_f_switchmanager_nodesLearnt_id_modal_modal", + configure: "one_f_switchmanager_nodesLearnt_id_modal_configure", ports: "one_f_switchmanager_nodesLearnt_id_modal_ports", save: "one_f_switchmanager_nodesLearnt_id_modal_save", datagrid: "one_f_switchmanager_nodesLearnt_id_modal_datagrid", @@ -137,7 +138,7 @@ one.f.switchmanager.nodesLearnt = { h3 = 'Node Information'; } - var $modal = one.lib.modal.spawn(one.f.switchmanager.nodesLearnt.id.modal.modal, h3, "", footer); + var $modal = one.lib.modal.spawn(one.f.switchmanager.nodesLearnt.id.modal.configure, h3, "", footer); // bind save button $('#' + one.f.switchmanager.nodesLearnt.id.modal.save, $modal).click(function() { one.f.switchmanager.nodesLearnt.modal.save($modal); @@ -149,7 +150,7 @@ one.f.switchmanager.nodesLearnt = { }); }, popout: function() { - var h3 = "Nodes Learnt"; + var h3 = "Nodes Learned"; var footer = one.f.switchmanager.nodesLearnt.modal.footer.popout(); var $modal = one.lib.modal.spawn(one.f.switchmanager.nodesLearnt.id.modal.modal, h3, "", footer); var $body = one.f.switchmanager.nodesLearnt.modal.body.popout($modal); @@ -166,7 +167,8 @@ one.f.switchmanager.nodesLearnt = { searchable: true, filterable: false, pagination: true, - flexibleRowsPerPage: true + flexibleRowsPerPage: true, + popout: true }, "table-striped table-condensed"); one.lib.modal.inject.body($modal, $gridHTML); $modal.on("shown", function() { @@ -222,7 +224,8 @@ one.f.switchmanager.nodesLearnt = { searchable: true, filterable: false, pagination: true, - flexibleRowsPerPage: true + flexibleRowsPerPage: true, + popout: true }, "table-striped table-condensed"); one.lib.modal.inject.body($modal, $gridHTML); // attach to shown event of modal @@ -318,9 +321,14 @@ one.f.switchmanager.nodesLearnt = { ' privilege=' + data.privilege + '>' + nodeNameEntry + ''; var ports = item.ports; + var portsMatch = ports.match(/<\/span>/g); + var portsLength = 0; + if (portsMatch != null) { + portsLength = portsMatch.length; + } item.ports = '' + ports.match(/<\/span>/g).length+''; + + '>' + portsLength +''; }); }, delay: 0 @@ -348,7 +356,7 @@ one.f.switchmanager.nodesLearnt = { }, { property: 'mac', - label: 'Mac', + label: 'MAC', sortable: true }, { @@ -361,9 +369,14 @@ one.f.switchmanager.nodesLearnt = { formatter: function(items) { $.each(items, function (index, item) { var ports = item.ports; + var portsMatch = ports.match(/<\/span>/g); + var portsLength = 0; + if (portsMatch != null) { + portsLength = portsMatch.length; + } item.ports = '' + ports.match(/<\/span>/g).length+''; + + '>' + portsLength +''; }); }, delay: 0 @@ -446,11 +459,15 @@ one.f.switchmanager.subnetGatewayConfig = { addIPAddress: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_addIP", addPorts: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_addPorts", removeIPAddress: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_removeIP", - datagrid: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_datagrid" + datagrid: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_datagrid", + selectAll: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_selectAll" }, modal: { modal: "one_f_switchmanager_subnetGatewayConfig_id_modal_modal", + ports : "one_f_switchmanager_subnetGatewayConfig_id_modal_ports", save: "one_f_switchmanager_subnetGatewayConfig_id_modal_save", + remove: "one_f_switchmanager_subnetGatewayConfig_id_modal_remove", + cancel: "one_f_switchmanager_subnetGatewayConfig_id_modal_cancel", form: { name : "one_f_switchmanager_subnetGatewayConfig_id_modal_form_gatewayname", gatewayIPAddress : "one_f_switchmanager_subnetGatewayConfig_id_modal_form_gatewayipaddress", @@ -478,28 +495,19 @@ one.f.switchmanager.subnetGatewayConfig = { $dashlet.append($button); // Delete gateway ip address button - var button = one.lib.dashlet.button.single("Delete Gateway IP Address(es)", - one.f.switchmanager.subnetGatewayConfig.id.dashlet.removeIPAddress, "btn-primary", "btn-mini"); + var button = one.lib.dashlet.button.single("Remove Gateway IP Address", + one.f.switchmanager.subnetGatewayConfig.id.dashlet.removeIPAddress, "btn-danger", "btn-mini"); var $button = one.lib.dashlet.button.button(button); $button.click(function() { - var requestData = {}; var gatewaysToDelete = []; var checkedCheckBoxes = $("#" + one.f.switchmanager.subnetGatewayConfig.id.dashlet.datagrid).find("tbody input:checked") checkedCheckBoxes.each(function(index, value) { gatewaysToDelete.push(checkedCheckBoxes[index].id); }); - if (gatewaysToDelete.length > 0) { - requestData["gatewaysToDelete"] = gatewaysToDelete.toString(); - var url = one.f.switchmanager.rootUrl + "/subnetGateway/delete"; - one.f.switchmanager.subnetGatewayConfig.ajax.main(url, requestData, function(response) { - if (response.status == true) { - // refresh dashlet by passing dashlet div as param - one.f.switchmanager.subnetGatewayConfig.dashlet($("#right-bottom .dashlet")); - } else { - alert(response.message); - } - }); + if (checkedCheckBoxes.size() === 0) { + return false; } + one.f.switchmanager.subnetGatewayConfig.modal.removeMultiple.dialog(gatewaysToDelete) }); $dashlet.append($button); @@ -521,7 +529,25 @@ one.f.switchmanager.subnetGatewayConfig = { }, "table-striped table-condensed"); $dashlet.append($gridHTML); var dataSource = one.f.switchmanager.subnetGatewayConfig.data.devicesgrid(content); - $("#" + one.f.switchmanager.subnetGatewayConfig.id.dashlet.datagrid).datagrid({dataSource: dataSource}); + $("#" + one.f.switchmanager.subnetGatewayConfig.id.dashlet.datagrid).datagrid({dataSource: dataSource}) + .on("loaded", function() { + $("#"+one.f.switchmanager.subnetGatewayConfig.id.dashlet.selectAll).click(function() { + $("#" + one.f.switchmanager.subnetGatewayConfig.id.dashlet.datagrid).find(':checkbox').prop('checked', + $("#"+one.f.switchmanager.subnetGatewayConfig.id.dashlet.selectAll).is(':checked')); + }); + $(".subnetGatewayConfig").click(function(e){ + if (!$('.subnetGatewayConfig[type=checkbox]:not(:checked)').length) { + $("#"+one.f.switchmanager.subnetGatewayConfig.id.dashlet.selectAll) + .prop("checked", + true); + } else { + $("#"+one.f.switchmanager.subnetGatewayConfig.id.dashlet.selectAll) + .prop("checked", + false); + } + e.stopPropagation(); + }); + }); }); }, ajax : { @@ -549,7 +575,7 @@ one.f.switchmanager.subnetGatewayConfig = { ports: function() { var h3 = "Add Ports"; var footer = one.f.switchmanager.subnetGatewayConfig.modal.footer(); - var $modal = one.lib.modal.spawn(one.f.switchmanager.subnetGatewayConfig.id.modal.modal, h3, "", footer); + var $modal = one.lib.modal.spawn(one.f.switchmanager.subnetGatewayConfig.id.modal.ports, h3, "", footer); // bind save button $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.save, $modal).click(function() { one.f.switchmanager.subnetGatewayConfig.modal.save.ports($modal); @@ -654,7 +680,11 @@ one.f.switchmanager.subnetGatewayConfig = { one.f.switchmanager.subnetGatewayConfig.registry['currentNode'] = node; var $ports = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.ports); var ports = nodeports[node]; - one.lib.form.select.inject($ports, ports); + var options = {}; + $(ports).each(function(idx, val) { + options[val.internalPortName] = val.portName+' ('+val.portId+')'; + }); + one.lib.form.select.inject($ports, options); one.lib.form.select.prepend($ports, { '' : 'Please Select a Port' }); $ports.val($ports.find("option:first").val()); }); @@ -687,6 +717,64 @@ one.f.switchmanager.subnetGatewayConfig = { var $saveButton = one.lib.dashlet.button.button(saveButton); footer.push($saveButton); return footer; + }, + removeMultiple: { + dialog: function(gatewaysToDelete) { + var h3 = 'Remove Gateway IP Address'; + + var footer = one.f.switchmanager.subnetGatewayConfig.modal.removeMultiple.footer(); + var $body = one.f.switchmanager.subnetGatewayConfig.modal.removeMultiple.body(gatewaysToDelete); + var $modal = one.lib.modal.spawn(one.f.switchmanager.subnetGatewayConfig.id.modal.modal, h3, $body, footer); + + // bind close button + $('#'+one.f.switchmanager.subnetGatewayConfig.id.modal.cancel, $modal).click(function() { + $modal.modal('hide'); + }); + + // bind remove rule button + $('#'+one.f.switchmanager.subnetGatewayConfig.id.modal.remove, $modal).click(this, function(e) { + var requestData = {}; + if (gatewaysToDelete.length > 0) { + requestData["gatewaysToDelete"] = gatewaysToDelete.toString(); + var url = one.f.switchmanager.rootUrl + "/subnetGateway/delete"; + one.f.switchmanager.subnetGatewayConfig.ajax.main(url, requestData, function(response) { + $modal.modal('hide'); + if (response.status == true) { + // refresh dashlet by passing dashlet div as param + one.lib.alert("Gateway IP Address(es) successfully removed"); + } else { + alert(response.message); + } + one.f.switchmanager.subnetGatewayConfig.dashlet($("#right-bottom .dashlet")); + }); + } + }); + $modal.modal(); + }, + footer : function() { + var footer = []; + var remove = one.lib.dashlet.button.single('Remove Gateway IP Address',one.f.switchmanager.subnetGatewayConfig.id.modal.remove, 'btn-danger', ''); + var $remove = one.lib.dashlet.button.button(remove); + footer.push($remove); + + var cancel = one.lib.dashlet.button.single('Cancel', one.f.switchmanager.subnetGatewayConfig.id.modal.cancel, '', ''); + var $cancel = one.lib.dashlet.button.button(cancel); + footer.push($cancel); + + return footer; + }, + body : function (gatewayList) { + var $p = $(document.createElement('p')); + var p = 'Remove the following Gateway IP Address(es)?'; + //creata a BS label for each rule and append to list + $(gatewayList).each(function(){ + var $span = $(document.createElement('span')); + $span.append(this); + p += '
' + $span[0].outerHTML; + }); + $p.append(p); + return $p; + } } }, // data functions @@ -697,7 +785,8 @@ one.f.switchmanager.subnetGatewayConfig = { columns: [ { property: 'selector', - label: ' ', + label: "", sortable: false }, { @@ -711,28 +800,29 @@ one.f.switchmanager.subnetGatewayConfig = { sortable: true }, { - property: 'json', - label: 'Node/Ports', + property: 'nodePorts', + label: 'Ports', sortable: false } ], data: data.nodeData, formatter: function(items) { $.each(items, function(index, tableRow) { - tableRow["selector"] = ''; - var json = tableRow["json"]; - var subnetConfigObject = JSON.parse(json); + tableRow["selector"] = ''; + var json = tableRow["nodePorts"]; + var nodePorts = JSON.parse(json); var nodePortHtml = "
"; - $.each(subnetConfigObject.nodePorts, function(index, nodePort) { - nodePortHtml += nodePort; + $.each(nodePorts, function(index, nodePort) { + nodePortHtml += nodePort["nodePortName"] + " @ " + nodePort["nodeName"]; nodePortHtml += " "; - nodePortHtml += 'Delete'; + ' onclick="javascript:one.f.switchmanager.subnetGatewayConfig.actions.deleteNodePort(this);">Remove'; nodePortHtml += "
"; }); nodePortHtml += "
"; - tableRow["json"] = nodePortHtml; + tableRow["nodePorts"] = nodePortHtml; }); }, @@ -782,7 +872,7 @@ one.f.switchmanager.subnetGatewayConfig = { aTag.addEventListener("mouseover", function(evt) { evt.target.style.cursor = "pointer"; }, false); - aTag.innerHTML = "Delete"; + aTag.innerHTML = "Remove"; $nodePortsContainer.append(aTag); $nodePortsContainer.append("
"); } @@ -827,11 +917,14 @@ one.f.switchmanager.staticRouteConfig = { dashlet: { add: "one_f_switchmanager_staticRouteConfig_id_dashlet_add", remove: "one_f_switchmanager_staticRouteConfig_id_dashlet_remove", - datagrid: "one_f_switchmanager_staticRouteConfig_id_dashlet_datagrid" + datagrid: "one_f_switchmanager_staticRouteConfig_id_dashlet_datagrid", + selectAll: "one_f_switchmanager_staticRouteConfig_id_dashlet_selectAll" }, modal: { modal: "one_f_switchmanager_staticRouteConfig_id_modal_modal", save: "one_f_switchmanager_staticRouteConfig_id_modal_save", + cancel: "one_f_switchmanager_staticRouteConfig_id_modal_cancel", + remove: "one_f_switchmanager_staticRouteConfig_id_modal_remove", form: { routeName : "one_f_switchmanager_staticRouteConfig_id_modal_form_routename", staticRoute : "one_f_switchmanager_staticRouteConfig_id_modal_form_staticroute", @@ -856,28 +949,18 @@ one.f.switchmanager.staticRouteConfig = { $dashlet.append($button); // Delete static route button - var button = one.lib.dashlet.button.single("Delete Static Route(s)", one.f.switchmanager.staticRouteConfig.id.dashlet.remove, "btn-primary", "btn-mini"); + var button = one.lib.dashlet.button.single("Remove Static Route", one.f.switchmanager.staticRouteConfig.id.dashlet.remove, "btn-danger", "btn-mini"); var $button = one.lib.dashlet.button.button(button); $button.click(function() { - var requestData = {}; var routesToDelete = []; - //var checkedCheckBoxes = $("input:checked", $(this).closest(".dashlet").find("table")); var checkedCheckBoxes = $("#" + one.f.switchmanager.staticRouteConfig.id.dashlet.datagrid).find("tbody input:checked"); checkedCheckBoxes.each(function(index, value) { routesToDelete.push(checkedCheckBoxes[index].id); }); - if (routesToDelete.length > 0) { - requestData["routesToDelete"] = routesToDelete.toString(); - var url = one.f.switchmanager.rootUrl + "/staticRoute/delete"; - one.f.switchmanager.staticRouteConfig.ajax.main(url, requestData, function(response) { - if (response.status == true) { - // refresh dashlet by passing dashlet div as param - one.f.switchmanager.staticRouteConfig.dashlet($("#left-bottom .dashlet")); - } else { - alert(response.message); - } - }); + if (checkedCheckBoxes.size() === 0) { + return false; } + one.f.switchmanager.staticRouteConfig.modal.removeMultiple.dialog(routesToDelete); }); $dashlet.append($button); } @@ -889,7 +972,25 @@ one.f.switchmanager.staticRouteConfig = { }, "table-striped table-condensed"); $dashlet.append($gridHTML); var dataSource = one.f.switchmanager.staticRouteConfig.data.staticRouteConfigGrid(content); - $("#" + one.f.switchmanager.staticRouteConfig.id.dashlet.datagrid).datagrid({dataSource: dataSource}); + $("#" + one.f.switchmanager.staticRouteConfig.id.dashlet.datagrid).datagrid({dataSource: dataSource}) + .on("loaded", function() { + $("#"+one.f.switchmanager.staticRouteConfig.id.dashlet.selectAll).click(function() { + $("#" + one.f.switchmanager.staticRouteConfig.id.dashlet.datagrid).find(':checkbox').prop('checked', + $("#"+one.f.switchmanager.staticRouteConfig.id.dashlet.selectAll).is(':checked')); + }); + $(".staticRoute").click(function(e){ + if (!$('.staticRoute[type=checkbox]:not(:checked)').length) { + $("#"+one.f.switchmanager.staticRouteConfig.id.dashlet.selectAll) + .prop("checked", + true); + } else { + $("#"+one.f.switchmanager.staticRouteConfig.id.dashlet.selectAll) + .prop("checked", + false); + } + e.stopPropagation(); + }); + }); }); }, // device ajax calls @@ -968,6 +1069,64 @@ one.f.switchmanager.staticRouteConfig = { var $saveButton = one.lib.dashlet.button.button(saveButton); footer.push($saveButton); return footer; + }, + removeMultiple: { + dialog: function(routesToDelete) { + var h3 = 'Remove Static Route'; + + var footer = one.f.switchmanager.staticRouteConfig.modal.removeMultiple.footer(); + var $body = one.f.switchmanager.staticRouteConfig.modal.removeMultiple.body(routesToDelete); + var $modal = one.lib.modal.spawn(one.f.switchmanager.staticRouteConfig.id.modal.modal, h3, $body, footer); + + // bind close button + $('#'+one.f.switchmanager.staticRouteConfig.id.modal.cancel, $modal).click(function() { + $modal.modal('hide'); + }); + + // bind remove rule button + $('#'+one.f.switchmanager.staticRouteConfig.id.modal.remove, $modal).click(this, function(e) { + if (routesToDelete.length > 0) { + var requestData = {}; + requestData["routesToDelete"] = routesToDelete.toString(); + var url = one.f.switchmanager.rootUrl + "/staticRoute/delete"; + one.f.switchmanager.staticRouteConfig.ajax.main(url, requestData, function(response) { + $modal.modal('hide'); + if (response.status == true) { + // refresh dashlet by passing dashlet div as param + one.lib.alert("Static Route(s) successfully removed"); + } else { + alert(response.message); + } + one.f.switchmanager.staticRouteConfig.dashlet($("#left-bottom .dashlet")); + }); + } + }); + $modal.modal(); + }, + footer : function() { + var footer = []; + var remove = one.lib.dashlet.button.single('Remove Static Route',one.f.switchmanager.staticRouteConfig.id.modal.remove, 'btn-danger', ''); + var $remove = one.lib.dashlet.button.button(remove); + footer.push($remove); + + var cancel = one.lib.dashlet.button.single('Cancel', one.f.switchmanager.staticRouteConfig.id.modal.cancel, '', ''); + var $cancel = one.lib.dashlet.button.button(cancel); + footer.push($cancel); + + return footer; + }, + body : function (staticRouteList) { + var $p = $(document.createElement('p')); + var p = 'Remove the following Static Route(s)?'; + //creata a BS label for each rule and append to list + $(staticRouteList).each(function(){ + var $span = $(document.createElement('span')); + $span.append(this); + p += '
' + $span[0].outerHTML; + }); + $p.append(p); + return $p; + } } }, // data functions @@ -977,7 +1136,8 @@ one.f.switchmanager.staticRouteConfig = { columns: [ { property: 'selector', - label: ' ', + label: "", sortable: false }, { @@ -999,7 +1159,7 @@ one.f.switchmanager.staticRouteConfig = { data: data.nodeData, formatter: function(items) { $.each(items, function(index, item) { - item["selector"] = ''; + item["selector"] = ''; }); }, @@ -1033,11 +1193,14 @@ one.f.switchmanager.spanPortConfig = { dashlet: { add: "one_f_switchmanager_spanPortConfig_id_dashlet_add", remove: "one_f_switchmanager_spanPortConfig_id_dashlet_remove", - datagrid: "one_f_switchmanager_spanPortConfig_id_dashlet_datagrid" + datagrid: "one_f_switchmanager_spanPortConfig_id_dashlet_datagrid", + selectAllFlows: "one_f_switchmanager_spanPortConfig_id_dashlet_selectAllFlows" }, modal: { modal: "one_f_switchmanager_spanPortConfig_id_modal_modal", save: "one_f_switchmanager_spanPortConfig_id_modal_save", + cancel: "one_f_switchmanager_spanPortConfig_id_modal_cancel", + remove: "one_f_switchmanager_spanPortConfig_id_modal_remove", form: { name : "one_f_switchmanager_spanPortConfig_id_modal_form_name", nodes : "one_f_switchmanager_spanPortConfig_id_modal_form_nodes", @@ -1066,29 +1229,24 @@ one.f.switchmanager.spanPortConfig = { $dashlet.append($button); // Delete span port button - var button = one.lib.dashlet.button.single("Delete SPAN Port(s)", one.f.switchmanager.spanPortConfig.id.dashlet.remove, "btn-primary", "btn-mini"); + var button = one.lib.dashlet.button.single("Remove SPAN Port", one.f.switchmanager.spanPortConfig.id.dashlet.remove, "btn-danger", "btn-mini"); var $button = one.lib.dashlet.button.button(button); $button.click(function() { - + var spanPortsToDelete = []; var checkedCheckBoxes = $("#" + one.f.switchmanager.spanPortConfig.id.dashlet.datagrid).find("tbody input:checked"); - if (checkedCheckBoxes.length > 0) { - var spanPortsToDelete = ""; - checkedCheckBoxes.each(function(index, value) { - spanPortsToDelete += decodeURIComponent(checkedCheckBoxes[index].getAttribute("spanPort")) + "###"; - }); - - var requestData = {}; - requestData["spanPortsToDelete"] = spanPortsToDelete; - var url = one.f.switchmanager.rootUrl + "/spanPorts/delete"; - one.f.switchmanager.spanPortConfig.ajax.main(url, requestData, function(response) { - if (response.status == true) { - // refresh dashlet by passing dashlet div as param - one.f.switchmanager.spanPortConfig.dashlet($("#right-bottom .dashlet")); - } else { - alert(response.message); - } - }); + + if (checkedCheckBoxes.size() === 0) { + return false; } + checkedCheckBoxes.each(function(index, value) { + var spanPortObj = {}; + spanPortObj['spanPortJson'] = decodeURIComponent(checkedCheckBoxes[index].getAttribute("spanPort")); + spanPortObj['spanPortNodeName'] = checkedCheckBoxes[index].getAttribute("spanPortNode"); + spanPortObj['spanPortPortName'] = checkedCheckBoxes[index].getAttribute("spanPortPort"); + + spanPortsToDelete.push(spanPortObj); + }); + one.f.switchmanager.spanPortConfig.modal.removeMultiple.dialog(spanPortsToDelete); }); $dashlet.append($button); } @@ -1100,10 +1258,25 @@ one.f.switchmanager.spanPortConfig = { }, "table-striped table-condensed"); $dashlet.append($gridHTML); var dataSource = one.f.switchmanager.spanPortConfig.data.spanPortConfigGrid(content); - $("#" + one.f.switchmanager.spanPortConfig.id.dashlet.datagrid).datagrid({dataSource: dataSource}); - - - + $("#" + one.f.switchmanager.spanPortConfig.id.dashlet.datagrid).datagrid({dataSource: dataSource}) + .on("loaded", function() { + $("#"+one.f.switchmanager.spanPortConfig.id.dashlet.selectAll).click(function() { + $("#" + one.f.switchmanager.spanPortConfig.id.dashlet.datagrid).find(':checkbox').prop('checked', + $("#"+one.f.switchmanager.spanPortConfig.id.dashlet.selectAll).is(':checked')); + }); + $(".spanPortConfig").click(function(e){ + if (!$('.spanPortConfig[type=checkbox]:not(:checked)').length) { + $("#"+one.f.switchmanager.spanPortConfig.id.dashlet.selectAll) + .prop("checked", + true); + } else { + $("#"+one.f.switchmanager.spanPortConfig.id.dashlet.selectAll) + .prop("checked", + false); + } + e.stopPropagation(); + }); + }); }); }, // device ajax calls @@ -1158,11 +1331,15 @@ one.f.switchmanager.spanPortConfig = { // bind onchange $select.change(function() { // retrieve port value - var node = $(this).find('option:selected').attr('value'); - one.f.switchmanager.spanPortConfig.registry['currentNode'] = node; + var nodeId = $(this).find('option:selected').attr('value'); + one.f.switchmanager.spanPortConfig.registry['currentNode'] = nodeId; var $ports = $('#' + one.f.switchmanager.spanPortConfig.id.modal.form.port); - var ports = nodeports[node]; - one.lib.form.select.inject($ports, ports); + var ports = one.f.switchmanager.spanPortConfig.registry['nodePorts'][nodeId] + var options = {}; + $(ports).each(function(idx, val) { + options[val.internalPortName] = val.portName+' ('+val.portId+')'; + }); + one.lib.form.select.inject($ports, options); }); $fieldset.append($label).append($select); @@ -1179,10 +1356,14 @@ one.f.switchmanager.spanPortConfig = { ajax: { nodes: function(callback) { $.getJSON(one.f.switchmanager.rootUrl + "/nodeports", function(data) { - var nodes = one.f.switchmanager.spanPortConfig.modal.data.nodes(data); - var nodeports = data; - one.f.switchmanager.spanPortConfig.registry['nodeports'] = nodeports; - callback(nodes, nodeports); + var nodes = {}; + var nodePorts = {}; + $(data).each(function(index, node) { + nodes[node.nodeId] = node.nodeName; + nodePorts[node.nodeId] = node.nodePorts; + }); + one.f.switchmanager.spanPortConfig.registry['nodePorts'] = nodePorts; + callback(nodes, nodePorts); }); }, saveSpanPortConfig: function(requestData, callback) { @@ -1193,21 +1374,74 @@ one.f.switchmanager.spanPortConfig = { }); } }, - data : { - nodes : function(data) { - result = {}; - $.each(data, function(key, value) { - result[key] = key; - }); - return result; - } - }, footer : function() { var footer = []; var saveButton = one.lib.dashlet.button.single("Save", one.f.switchmanager.spanPortConfig.id.modal.save, "btn-success", ""); var $saveButton = one.lib.dashlet.button.button(saveButton); footer.push($saveButton); return footer; + }, + removeMultiple: { + dialog: function(spanPortsToDelete) { + var h3 = 'Remove Span Port'; + + var footer = one.f.switchmanager.spanPortConfig.modal.removeMultiple.footer(); + var $body = one.f.switchmanager.spanPortConfig.modal.removeMultiple.body(spanPortsToDelete); + var $modal = one.lib.modal.spawn(one.f.switchmanager.spanPortConfig.id.modal.modal, h3, $body, footer); + + // bind close button + $('#'+one.f.switchmanager.spanPortConfig.id.modal.cancel, $modal).click(function() { + $modal.modal('hide'); + }); + + // bind remove rule button + $('#'+one.f.switchmanager.spanPortConfig.id.modal.remove, $modal).click(this, function(e) { + var requestData = {}; + var spanPorts = []; + $(spanPortsToDelete).each(function(index, spanPort) { + spanPorts.push(JSON.parse(spanPort.spanPortJson)); + }); + requestData["spanPortsToDelete"] = JSON.stringify(spanPorts); + + var url = one.f.switchmanager.rootUrl + "/spanPorts/delete"; + one.f.switchmanager.spanPortConfig.ajax.main(url, requestData, function(response) { + $modal.modal('hide'); + if (response.status == true) { + // refresh dashlet by passing dashlet div as param + one.lib.alert("Span Port(s) successfully removed"); + } else { + alert(response.message); + } + one.f.switchmanager.spanPortConfig.dashlet($("#right-bottom .dashlet")); + }); + }); + $modal.modal(); + }, + footer : function() { + var footer = []; + var remove = one.lib.dashlet.button.single('Remove SPAN Port',one.f.switchmanager.spanPortConfig.id.modal.remove, 'btn-danger', ''); + var $remove = one.lib.dashlet.button.button(remove); + footer.push($remove); + + var cancel = one.lib.dashlet.button.single('Cancel', one.f.switchmanager.spanPortConfig.id.modal.cancel, '', ''); + var $cancel = one.lib.dashlet.button.button(cancel); + footer.push($cancel); + + return footer; + }, + body : function (spanPortToDelete) { + var $p = $(document.createElement('p')); + var p = 'Remove the following Span Port(s)?'; + //creata a BS label for each rule and append to list + + $(spanPortToDelete).each(function(index, spanPortItem) { + var $span = $(document.createElement('span')); + $span.append(this.spanPortNodeName+"-"+this.spanPortPortName); + p += '
' + $span[0].outerHTML; + }); + $p.append(p); + return $p; + } } }, // data functions @@ -1217,7 +1451,8 @@ one.f.switchmanager.spanPortConfig = { columns: [ { property: 'selector', - label: ' ', + label: "", sortable: false }, { @@ -1226,7 +1461,7 @@ one.f.switchmanager.spanPortConfig = { sortable: true }, { - property: 'spanPort', + property: 'spanPortName', label: 'SPAN Port', sortable: true }, @@ -1234,7 +1469,7 @@ one.f.switchmanager.spanPortConfig = { data: data.nodeData, formatter: function(items) { $.each(items, function(index, item) { - item["selector"] = ''; + item["selector"] = ''; }); }, delay: 0