140 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   // csv download icon on any table page
 | |
|   // needs to be dynamically updated to use current search options
 | |
|   function update_csv_download_link (type, tab, show) {
 | |
|     var form = '#' + tab + '_form';
 | |
|     var query = $(form).serialize();
 | |
| 
 | |
|     if (show.length) {
 | |
|       $('#nd_csv-download')
 | |
|         .attr('href', uri_base + '/ajax/content/' + type + '/' + tab + '?' + query)
 | |
|         .attr('download', 'netdisco-' + type + '-' + tab + '.csv')
 | |
|         .show();
 | |
|     }
 | |
|     else {
 | |
|       $('#nd_csv-download').hide();
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   // page title includes tab name and possibly device name
 | |
|   // this is nice for when you have multiple netdisco pages open in the
 | |
|   // browser
 | |
|   function update_page_title (tab) {
 | |
|     var pgtitle = 'Netdisco';
 | |
|     if ($.trim($('#nd_device-name').text()).length) {
 | |
|       pgtitle = $.trim($('#nd_device-name').text()) +' - '+ $('#'+ tab + '_link').text();
 | |
|     }
 | |
|     return pgtitle;
 | |
|   }
 | |
| 
 | |
|   // update browser search history with the new query.
 | |
|   // support history add (push) or replace via push parameter
 | |
|   function update_browser_history (tab, pgtitle, push) {
 | |
|     var form = '#' + tab + '_form';
 | |
|     var query = $(form).serialize();
 | |
|     if (query.length) { query = '?' + query }
 | |
| 
 | |
|     if (window.History && window.History.enabled) {
 | |
|       is_from_history_plugin = 1;
 | |
| 
 | |
|       if (push.length) {
 | |
|         var target = uri_base + '/' + path + '/' + tab + query;
 | |
|         if (location.pathname == target) { return };
 | |
|         window.History.pushState(
 | |
|           {name: tab, fields: $(form).serializeArray()}, pgtitle, target
 | |
|         );
 | |
|       }
 | |
|       else {
 | |
|         var target = uri_base + '/' + path + query;
 | |
|         window.History.replaceState(
 | |
|           {name: tab, fields: $(form).serializeArray()}, pgtitle, target
 | |
|         );
 | |
|       }
 | |
| 
 | |
|       is_from_history_plugin = 0;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   // each sidebar search form has a hidden copy of the main navbar search
 | |
|   function copy_navbar_to_sidebar (tab) {
 | |
|     var form = '#' + tab + '_form';
 | |
| 
 | |
|     // copy navbar value to currently active sidebar form
 | |
|     if ($('#nq').val()) {
 | |
|       $(form).find("input[name=q]").val( $('#nq').val() );
 | |
|     }
 | |
|     // then copy to all other inactive tab sidebars
 | |
|     $('form').find("input[name=q]").each( function() {
 | |
|       $(this).val( $(form).find("input[name=q]").val() );
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   $(document).ready(function() {
 | |
|     [% IF search %]
 | |
|     // search tabs
 | |
|     [% FOREACH tab IN settings._search_tabs %]
 | |
|     $('[% "#${tab.tag}_form" %]').submit(function (event) {
 | |
|       var pgtitle = update_page_title('[% tab.tag | html_entity %]');
 | |
|       copy_navbar_to_sidebar('[% tab.tag | html_entity %]');
 | |
|       update_browser_history('[% tab.tag | html_entity %]', pgtitle, '');
 | |
|       update_csv_download_link('search', '[% tab.tag | html_entity %]', '[% tab.provides_csv | html_entity %]');
 | |
|       do_search(event, '[% tab.tag | html_entity %]');
 | |
|     });
 | |
|     [% END %]
 | |
|     [% END %]
 | |
| 
 | |
|     [% IF device %]
 | |
|     // device tabs
 | |
|     [% FOREACH tab IN settings._device_tabs %]
 | |
|     $('[% "#${tab.tag}_form" %]').submit(function (event) {
 | |
|       var pgtitle = update_page_title('[% tab.tag | html_entity %]');
 | |
|       copy_navbar_to_sidebar('[% tab.tag | html_entity %]');
 | |
|       update_browser_history('[% tab.tag | html_entity %]', pgtitle, '');
 | |
|       update_csv_download_link('device', '[% tab.tag | html_entity %]', '[% tab.provides_csv | html_entity %]');
 | |
| 
 | |
|       [% IF tab.tag == 'ports' %]
 | |
|       // form reset icon on ports tab
 | |
|       $('#nd_sidebar-reset-link').attr('href', uri_base + '/device?tab=[% tab.tag | html_entity %]&reset=on&firstsearch=on&' +
 | |
|         $('#ports_form')
 | |
|           .find('input[name="q"],input[name="f"],input[name="partial"],input[name="invert"]')
 | |
|           .serialize());
 | |
| 
 | |
|       [% ELSIF tab.tag == 'netmap' %]
 | |
|       // form reset icon on netmap tab
 | |
|       $('#nd_sidebar-reset-link').attr('href', uri_base + '/device?tab=[% tab.tag | html_entity %]&reset=on&firstsearch=on&' +
 | |
|         $('#netmap_form').find('input[name="q"]').serialize());
 | |
|       [% END %]
 | |
| 
 | |
|       do_search(event, '[% tab.tag | html_entity %]');
 | |
|     });
 | |
|     [% END %]
 | |
|     [% END %]
 | |
| 
 | |
|     [% IF report %]
 | |
|     // for the report pages
 | |
|     $('[% "#${report.tag}_form" %]').submit(function (event) {
 | |
|       var pgtitle = update_page_title('[% report.tag | html_entity %]');
 | |
|       update_browser_history('[% report.tag | html_entity %]', pgtitle, '1');
 | |
|       update_csv_download_link('report', '[% report.tag | html_entity %]', '1');
 | |
|       do_search(event, '[% report.tag | html_entity %]');
 | |
|     });
 | |
|     [% END -%]
 | |
| 
 | |
|     [% IF task %]
 | |
|     // for the admin pages
 | |
|     $('[% "#${task.tag}_form" %]').submit(function (event) {
 | |
|       update_page_title('[% task.tag | html_entity %]');
 | |
|       update_csv_download_link('admin', '[% task.tag | html_entity %]', '1');
 | |
|       do_search(event, '[% task.tag | html_entity %]');
 | |
|     });
 | |
|     [% END %]
 | |
| 
 | |
|     // on page load, load the content for the active tab
 | |
|     [% IF params.tab %]
 | |
|     [% IF params.tab == 'ipinventory' OR params.tab == 'subnets' %]
 | |
|       $('#[% params.tab | html_entity %]_submit').click();
 | |
|     [% ELSE %]
 | |
|       $('#[% params.tab | html_entity %]_form').trigger("submit");
 | |
|     [% END %]
 | |
|     [% END %]
 | |
|   });
 |