Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success Learn more

// used by the tabbing interface to make sure the correct
// ajax content is loaded
var path = 'admin';
// keep track of timers so we can kill them
var nd_timers = new Array();
var timermax = [% settings.jobqueue_refresh || 5 | html_entity %];
var timercache = timermax - 1;
// this is called by do_search to support local code
// which might need to act on the newly inserted content
// but which cannot use jQuery delegation via .on()
function inner_view_processing(tab) {
// reload this table every 5 seconds
if ((tab == 'jobqueue')
&& $('#nd_countdown-control-icon').hasClass('icon-play')) {
$('#nd_countdown').text(timermax);
// add new timers
for (var i = timercache; i > 0; i--) {
nd_timers.push(setTimeout(function() {
$('#nd_countdown').text(timercache);
timercache = timercache - 1;
}, ((timermax * 1000) - (i * 1000)) ));
}
nd_timers.push(setTimeout(function() {
// clear any running timers
for (var i = 0; i < nd_timers.length; i++) {
clearTimeout(nd_timers[i]);
}
// reset the timer cache
timercache = timermax - 1;
// reload the tab content in...
$('#' + tab + '_form').trigger('submit');
}, (timermax * 1000)));
}
// activate typeahead on the queue filter boxes
$('.nd_queue_ta').autocomplete({
source: function (request, response) {
var name = $(this.element)[0].name;
var query = $(this.element).serialize();
return $.get( uri_base + '/ajax/data/queue/typeahead/' + name, query, function (data) {
return response(data);
});
}
,delay: 150
,minLength: 0
});
// activate typeahead on the topo boxes
$('.nd_topo_dev').autocomplete({
source: uri_base + '/ajax/data/deviceip/typeahead'
,delay: 150
,minLength: 0
});
// activate typeahead on the topo boxes
$('.nd_topo_port.nd_topo_dev1').autocomplete({
source: function (request, response) {
var query = $('.nd_topo_dev1').serialize();
return $.get( uri_base + '/ajax/data/port/typeahead', query, function (data) {
return response(data);
});
}
,delay: 150
,minLength: 0
});
// activate typeahead on the topo boxes
$('.nd_topo_port.nd_topo_dev2').autocomplete({
source: function (request, response) {
var query = $('.nd_topo_dev2').serialize();
return $.get( uri_base + '/ajax/data/port/typeahead', query, function (data) {
return response(data);
});
}
,delay: 150
,minLength: 0
});
$('.nd_jobqueue-extra').click(function(event) {
event.preventDefault();
var icon = $(this).children('i');
$(icon).toggleClass('icon-plus');
$(icon).toggleClass('icon-minus');
var extra_id = $(this).data('extra');
$('#' + extra_id).toggle();
});
// activate modals and tooltips
$('.nd_modal').modal({show: false});
$("[rel=tooltip]").tooltip({live: true});
}
// on load, establish global delegations for now and future
$(document).ready(function() {
var tab = '[% task.tag | html_entity %]'
var target = '#' + tab + '_pane';
// get autocomplete field on input focus
$('.nd_sidebar').on('focus', '.nd_queue_ta', function(e) {
$(this).autocomplete('search', '%') });
$('.nd_sidebar').on('click', '.nd_topo_dev_caret', function(e) {
$(this).siblings('.nd_queue_ta').autocomplete('search', '%') });
// get all devices on device input focus
$('.nd_sidebar').on('focus', '.nd_topo_dev', function(e) {
$(this).autocomplete('search', '%') });
$('.nd_sidebar').on('click', '.nd_topo_dev_caret', function(e) {
$(this).siblings('.nd_topo_dev').autocomplete('search', '%') });
// get all devices on device input focus
$(target).on('focus', '.nd_topo_dev', function(e) {
$(this).autocomplete('search', '%') });
$(target).on('click', '.nd_topo_dev_caret', function(e) {
$(this).siblings('.nd_topo_dev').autocomplete('search', '%') });
// get all ports on port input focus
$(target).on('focus', '.nd_topo_port', function(e) {
$(this).autocomplete('search') });
$(target).on('click', '.nd_topo_port_caret', function(e) {
$(this).siblings('.nd_topo_port').val('');
$(this).siblings('.nd_topo_port').autocomplete('search');
});
// job control sidebar submit should reset timer
// and update bookmark
$('#' + tab + '_submit').click(function(event) {
for (var i = 0; i < nd_timers.length; i++) {
clearTimeout(nd_timers[i]);
}
// reset the timer cache
timercache = timermax - 1;
// bookmark
var querystr = $('#' + tab + '_form').serialize();
$('#nd_jobqueue-bookmark').attr('href',uri_base + '/admin/' + tab + '?' + querystr);
});
// job control refresh icon should reload the page
$('#nd_countdown-refresh').click(function(event) {
event.preventDefault();
for (var i = 0; i < nd_timers.length; i++) {
clearTimeout(nd_timers[i]);
}
// reset the timer cache
timercache = timermax - 1;
// and reload content
$('#' + tab + '_form').trigger('submit');
});
// job control pause/play icon switcheroo
$('#nd_countdown-control').click(function(event) {
event.preventDefault();
var icon = $('#nd_countdown-control-icon');
icon.toggleClass('icon-pause icon-play text-error text-success');
if (icon.hasClass('icon-pause')) {
for (var i = 0; i < nd_timers.length; i++) {
clearTimeout(nd_timers[i]);
}
$('#nd_countdown').text('0');
}
else {
$('#' + tab + '_form').trigger('submit');
}
});
// activity for admin task tables
// dynamically bind to all forms in the table
$('.content').on('click', '.nd_adminbutton', function(event) {
// stop form from submitting normally
event.preventDefault();
// clear any running timers
for (var i = 0; i < nd_timers.length; i++) {
clearTimeout(nd_timers[i]);
}
// what purpose - add/update/del
var mode = $(this).attr('name');
// admin task name with special case(s)
var task = tab + '/';
if (tab == 'duplicatedevices') {
task = '';
}
// submit the query and put results into the tab pane
$.ajax({
type: 'POST'
,async: true
,dataType: 'html'
,url: uri_base + '/ajax/control/admin/' + task + mode
,data: $(this).closest('tr').find('input[data-form="' + mode + '"],select[data-form="' + mode + '"]').serializeArray()
,beforeSend: function() {
if (mode == 'add' || mode == 'delete') {
$(target).html(
'<div class="span2 alert">Request submitted...</div>'
);
}
}
,success: function() {
if (mode == 'add') {
toastr.success('Added record');
$('#' + tab + '_form').trigger('submit');
}
else if (mode == 'delete') {
toastr.success('Deleted record');
$('#' + tab + '_form').trigger('submit');
}
else {
toastr.success('Updated record');
}
$('#' + tab + '_form').trigger('submit');
}
// TODO: fix sanity_ok in Netdisco Web
,error: function() {
if (mode == 'add') {
toastr.error('Failed to add record');
$('#' + tab + '_form').trigger('submit');
}
else if (mode == 'delete') {
toastr.error('Failed to delete record');
$('#' + tab + '_form').trigger('submit');
}
else {
toastr.error('Failed to update record');
}
}
});
});
// bind qtip2 to show the event log output
$(target).on('mouseover', '.nd_jobqueueitem', function(event) {
$(this).qtip({
overwrite: false,
content: {
text: $('<span/>').text( $(this).attr("data-content") ).html()
},
show: {
event: event.type,
ready: true,
delay: 100
},
position: {
my: 'top center',
at: 'bottom center',
target: false
},
style: {
classes: 'qtip-cluetip qtip-rounded nd_qtip-unconstrained'
}
});
});
});