App-Netdisco
view release on metacpan or search on metacpan
share/public/javascripts/netdisco.js view on Meta::CPAN
'<button class="cancelBtn" type="button"></button>' +
'<button class="applyBtn" disabled="disabled" type="button"></button> ' +
'</div>' +
'</div>'
,parentEl: 'body'
,minDate: '2004-01-01'
,showDropdowns: true
,timePicker: false
,opens: 'left'
,locale: { format: 'YYYY-MM-DD', separator: ' to ' }
,autoUpdateInput: false
}
,function(start, end) {
$('#daterange').trigger('input');
});
// daterangepicker 3.x writes the picker's own dates into the input on init
// unless autoUpdateInput is off, which blanks the server-rendered value. With
// it off, nothing updates the input when a range is applied, so do it here.
$('#daterange').on('apply.daterangepicker', function (ev, picker) {
$(this).val(picker.startDate.format('YYYY-MM-DD')
+ ' to ' + picker.endDate.format('YYYY-MM-DD'));
$(this).trigger('input');
});
// handler for datepicker in node sidebar
$('.nd_sidebar').on('input', '#daterange', function() {
if ($(this).prop('value') == '') {
$('#daterange').parent('.clearfix').removeClass('success');
}
else {
$('#daterange').parent('.clearfix').addClass('success');
}
});
$('#daterange').trigger('input');
// htmx glue. Converted panes get the same empty-result, error and
// after-swap handling do_search gives the unconverted ones, so the two
// transports are indistinguishable to a user. Keyed on any *_pane, not just
// admin, because later rungs convert the search and device tabs onto this.
document.body.addEventListener('htmx:afterSwap', function (evt) {
var target = evt.detail.target;
if (!target.id.match(/_pane$/)) return;
var tab = target.id.replace(/_pane$/, '');
if (target.innerHTML === '') {
target.innerHTML =
'<div class="col-md-2 alert alert-info">No matching records.</div>';
return;
}
$('div.content > div.tab-content table.nd_floatinghead').floatThead({
top: 40
,position: 'fixed'
});
inner_view_processing(tab);
});
// Empty the pane for the duration of the request, so the indicator is the
// only thing on screen. Leaving the previous results up gives an interactive
// table that no longer answers the search being run.
//
// jobqueue is excluded for the reason it carries no indicator: it refreshes
// on a timer and would blank on every tick.
document.body.addEventListener('htmx:beforeRequest', function (evt) {
var target = evt.detail.target;
if (!target.id.match(/_pane$/) || target.id === 'jobqueue_pane') return;
// force-graph renders every frame until destroyed, and emptying the pane
// only detaches its canvas. netmap.js destroys the previous instance as
// well, but not until the new fragment's script runs.
if (target.id === 'netmap_pane' && window.graph && window.graph.fg
&& typeof window.graph.fg._destructor === 'function') {
window.graph.fg._destructor();
}
target.innerHTML = '';
});
document.body.addEventListener('htmx:responseError', function (evt) {
var target = evt.detail.target;
if (!target.id.match(/_pane$/)) return;
target.innerHTML =
'<div class="col-md-5 alert alert-danger"><i class="fas fa-triangle-exclamation"></i> ' +
'Search failed! Please contact your site administrator (server error).</div>';
});
document.body.addEventListener('htmx:sendError', function (evt) {
var target = evt.detail.target;
if (!target.id.match(/_pane$/)) return;
target.innerHTML =
'<div class="col-md-5 alert alert-danger"><i class="fas fa-triangle-exclamation"></i> ' +
'Search failed! Please contact your site administrator (network error).</div>';
});
});
// temporarily disable datatables paging
// returns [current_page_length, current_page_index]
function dataTablesDisablePaging() {
$.fn.dataTable.ext.search.pop();
var plen = $('#dp-data-table').DataTable().page.len();
var pnum = $('#dp-data-table').DataTable().page();
$('#dp-data-table').DataTable().page.len(-1).draw(true);
return [plen, pnum];
}
// restore the datatables pagination and page number
function dataTablesRestorePage(plen, pnum) {
$('#dp-data-table').DataTable().page.len(plen).draw(true);
$('#dp-data-table').DataTable().page(pnum).draw(false);
}
// install our row filter for datatables row group toggle
function dataTablesPushRowGroupVisibilityFilter() {
$.fn.dataTable.ext.search.push(
function(settings, data, dataIndex) {
var row = $($('#dp-data-table').DataTable().row(dataIndex).node());
if (! row.data('collapsed-group')) { return true; }
return row.attr('data-is-collapsed') == 'false';
}
);
}
// onclick handler
// toggles visibility of a group of datatables rows
// clicked element has the group name as data-collapsed-group
( run in 0.402 second using v1.01-cache-2.11-cpan-ad19def0cd9 )