Files
netdisco/Netdisco/share/views/js/common.js
Oliver Gorwits ce57cdba69 Based on jeneric's CSV download templates;
- try to reduce code duplication by using same route handler for ajax and csv,
  using request->is_ajax to switch the template, and set content-type

- use new HTML5 "download" attribute on links so content-disposition header is
  no longer necessary

- download CSV icon is placed on all tables (per report/device/serach section)

- update download CSV link using javascript just before table content is
  fetched - this is necessary to make sure updated sidebar query params are
  included

The idea here is to allow us to support CSV download in the pages which
display tables by only doing the following:

- (existing routes:) replace "ajax" with "get" route handler

- add logic to switch template in handler, based on request->is_ajax

- write _csv.tt version of the template, to spit out CSV file content

This makes it much easier for new devs to write reports supporting CSV, I
think?
2013-09-20 09:23:57 +01:00

111 lines
3.7 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) {
var form = '#' + tab + '_form';
var query = $(form).serialize();
// this is needed otherwise we can 404 on url with traling slash
if (query.length) { query = '/' + query }
$('#nd_csv-download').attr('href', '/ajax/content/' + type + '/' + tab + query);
}
// 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 ($('#nd_device-name').text().length) {
var pgtitle = $('#nd_device-name').text() +' - '+ $('#'+ tab + '_link').text();
}
return pgtitle;
}
// update browser search history with the new query.
// however if it's the same tab, this is a *replace* of the query url.
// and just skip this bit if it's the report or admin display.
function update_browser_history (tab, pgtitle) {
var form = '#' + tab + '_form';
var query = $(form).serialize();
if (window.History && window.History.enabled) {
is_from_history_plugin = 1;
window.History.replaceState(
{name: tab, fields: $(form).serializeArray()},
pgtitle, uri_base + '/' + path + '?' + query
);
is_from_history_plugin = 0;
}
}
// each sidebar search form has a hidden copy of the main navbar search
// query. when the tab query takes place, copy the navbar locally, then
// replicate to all other tabs.
function copy_navbar_to_sidebar (tab) {
var form = '#' + tab + '_form';
if ($('#nq').val()) {
$(form).find("input[name=q]").val( $('#nq').val() );
}
$('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 %]');
update_browser_history('[% tab.tag %]', pgtitle);
copy_navbar_to_sidebar('[% tab.tag %]');
do_search(event, '[% tab.tag %]');
});
[% 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 %]');
update_browser_history('[% tab.tag %]', pgtitle);
copy_navbar_to_sidebar('[% tab.tag %]');
[% IF tab.tag == 'ports' %]
var cookie = $('#ports_form').find('input,select')
.not('#nd_port-query,input[name="q"],input[name="tab"]')
.serializeArray();
$('#ports_form').find('input[type="checkbox"]').map(function() {
cookie.push({'name': 'columns', 'value': $(this).attr('name')});
});
$.cookie('nd_ports-form', $.param(cookie) ,{ expires: 365 });
[% END %]
do_search(event, '[% tab.tag %]');
});
[% END %]
[% END %]
[% IF report %]
// for the report pages
$('[% "#${report.tag}_form" %]').submit(function (event) {
update_page_title('[% report.tag %]');
update_csv_download_link('report', '[% report.tag %]');
do_search(event, '[% report.tag %]');
});
[% END -%]
[% IF task %]
// for the admin pages
$('[% "#${task.tag}_form" %]').submit(function (event) {
update_page_title('[% task.tag %]');
do_search(event, '[% task.tag %]');
});
[% END %]
// on page load, load the content for the active tab
[% IF params.tab %]
$('#[% params.tab %]_form').trigger("submit");
[% END %]
});