diff options
| -rw-r--r-- | web/index.html | 2 | ||||
| -rw-r--r-- | web/js/nms-info-box.js | 50 | ||||
| -rw-r--r-- | web/js/nms-search.js | 32 | 
3 files changed, 73 insertions, 11 deletions
diff --git a/web/index.html b/web/index.html index 85cac15..375b46b 100644 --- a/web/index.html +++ b/web/index.html @@ -86,7 +86,7 @@  		  <span class="input-group-btn">  		  <button id="searchbox-x" class="btn btn-default" type="button" onclick="nmsSearch.reset();">X</button>  		  <button id="searchbox-help" class="btn btn-default" type="button" onclick="nmsInfoBox.showWindow('searchHelp');">?</button> -		  <button id="searchbox-submit" class="btn btn-default" type="button" onclick="nmsInfoBox.showWindow('switchInfo',document.getElementById('searchbox').value);">Go!</button> +		  <button id="searchbox-submit" class="btn btn-default" type="button" onclick="nmsSearch.runSearch();">Go!</button>  		</span>  	      </div>  	    </div> diff --git a/web/js/nms-info-box.js b/web/js/nms-info-box.js index b902a69..cd84ec0 100644 --- a/web/js/nms-info-box.js +++ b/web/js/nms-info-box.js @@ -76,6 +76,16 @@ var nmsInfoBox = nmsInfoBox || {  			}  		}  	}, +        { +                'id': 'searchResults', +                'title': 'Search Results', +                'views': { +                        'initial': { +                                'name': 'Search Results', +                                'panels': ['searchResults'] +                        } +                } +        },  	{  		'id': 'inventoryListing',  		'title': 'Inventory listing', @@ -723,6 +733,46 @@ var searchHelpPanel = function() {  };  nmsInfoBox.addPanelType("searchHelp",searchHelpPanel); + +/* + * Panel type: Search Results + * + * Show the search results + * + */ +var searchResultsPanel = function() { +	var searchPage = 0; +        nmsInfoPanel.call(this,"searchResults"); +        this.refresh = function(reason) { +		var collator = new Intl.Collator(undefined, {numeric: true, sensitivity: 'base'}); +                var switches = nmsSearch.matches.sort(collator.compare);	 +		if(switches.length <= 0) { +			var x = document.createElement("div"); +			var c = document.createElement("p"); +			c.innerText = "No results :("; +			x.appendChild(c); +			this._render(x) +		} + +		else { +			var table = document.createElement('table'); +			table.className = "table table-condensed"; +			table.id = "searchResults-table" +			for (var sw in switches) { +				var row = table.insertRow(sw); +				var cell1 = row.insertCell(0); +				var cell2 = row.insertCell(1); +				var cell3 = row.insertCell(2); +                        	cell1.innerHTML = "<a href='#' onclick='nmsInfoBox.showWindow(\"switchInfo\",\""+switches[sw]+"\");'>"+switches[sw]+ '</a>'; +				cell2.innerHTML = nmsData.switches["switches"][switches[sw]].distro_name; +				cell3.innerHTML = handlers[0].getInfo(switches[sw]).why; +                		} +			this._render(table); +			} +        }; +}; +nmsInfoBox.addPanelType("searchResults",searchResultsPanel); +  /*   * Panel type: Add switch   * diff --git a/web/js/nms-search.js b/web/js/nms-search.js index f435c81..41e5397 100644 --- a/web/js/nms-search.js +++ b/web/js/nms-search.js @@ -15,6 +15,8 @@ nmsSearch.helpText =  [  	'IP search: Start typing an IP and any switch with that IP registered either as management IP or part of its subnet will be identified',  	'SNMP search: Type anything found in the "sysDescr" SNMP OID to hilight a switch matching that. Practical examples include version numbers for firmware (e.g.: "JUNOS 12." vs "JUNOS 14.").']; +nmsSearch.matches = []; +  /*   * Test if the search expression "id" matches the switch "sw"   * @@ -81,6 +83,13 @@ nmsSearch.searchTest = function(id, sw) {  			}  		} catch (e) {}  		try { +			for (var x in nmsData.switches.switches[sw]['tags']) { +				if(re.test(nmsData.switches.switches[sw]['tags'][x])){ +					return true; +				} +			} +		} catch (e) {} +		try {  			for (var x in nmsData.snmp.snmp[sw].misc.entPhysicalSerialNum) {  				if (nmsData.snmp.snmp[sw].misc.entPhysicalSerialNum[x] == null) {  					continue; @@ -142,7 +151,7 @@ nmsSearch._disableTimer = function() {  nmsSearch.search = function() {  	var el = document.getElementById("searchbox");  	var id = false; -	var matches = []; +	nmsSearch.matches = [];  	if (el) {  		id = el.value.toLowerCase();  	} @@ -150,7 +159,7 @@ nmsSearch.search = function() {  		nmsMap.enableHighlights();  		for(var sw in nmsData.switches.switches) {  			if (nmsSearch.searchTest(id,sw)) { -				matches.push(sw); +				nmsSearch.matches.push(sw);  				nmsMap.setSwitchHighlight(sw,true);  			} else {  				nmsMap.setSwitchHighlight(sw,false); @@ -161,22 +170,25 @@ nmsSearch.search = function() {  		nmsSearch._disableTimer();  		nmsMap.disableHighlights();  	} -	if(matches.length == 1) { -		document.getElementById("searchbox-submit").classList.add("btn-primary"); -		document.getElementById("searchbox").dataset.match = matches[0]; -	} else { +	if(nmsSearch.matches.length == 0) {  		document.getElementById("searchbox-submit").classList.remove("btn-primary");  		document.getElementById("searchbox").dataset.match = '';  	}  }; +nmsSearch.runSearch = function() { +	if(nmsSearch.matches.length == 1) { +		nmsInfoBox.showWindow("switchInfo",nmsSearch.matches[0]); +	} +	else { +        	nmsInfoBox.showWindow('searchResults',nmsSearch.matches.length); +	} +}; +  nmsSearch._searchKeyListener = function(e) {  	switch (e.keyCode) {  		case 13: -			var sw = document.getElementById("searchbox").dataset.match; -			if(sw != '') { -				nmsInfoBox.showWindow("switchInfo",sw); -			} +			nmsSearch.runSearch();  			break;  		case 27:  			nmsSearch.reset();  | 
