219 lines
4.8 KiB
JavaScript
219 lines
4.8 KiB
JavaScript
var opkg = '/cgi-bin/opkg.jim';
|
|
|
|
$(function() {
|
|
|
|
var busy = false;
|
|
var tswitch = false;
|
|
var stick = true;
|
|
|
|
// Retrieve the stored selected tab from the hash portion of the URL.
|
|
var curtab = ~~(window.location.hash.slice(1));
|
|
if (curtab < 0 || curtab > 2)
|
|
curtab = 0;
|
|
|
|
$('#opkgupdate')
|
|
.button()
|
|
.click(function() { tswitch = 2; execopkg('update'); })
|
|
.fadeIn('slow');
|
|
|
|
$('#opkgupgradeall')
|
|
.button()
|
|
.click(function() { tswitch = 2; execopkg('upgrade'); })
|
|
.fadeIn('slow');
|
|
|
|
$('#pkgtabs').tabs({
|
|
active: curtab,
|
|
create: function(event, ui) {
|
|
$(ui.panel).html("<img src=/img/spin.gif>" +
|
|
"Loading data... Please wait...");
|
|
busy = true;
|
|
$('#pkgtabs').tabs('disable');
|
|
$('span.tabright').hide();
|
|
},
|
|
activate: function(event, ui) {
|
|
window.location.hash = ui.newTab.index();
|
|
if (busy)
|
|
{
|
|
alert('Please wait until the current ' +
|
|
'operation completes.');
|
|
return false;
|
|
}
|
|
$(ui.newPanel).html("<img src=/img/spin.gif>" +
|
|
"Loading data... Please wait...");
|
|
busy = true;
|
|
$('#pkgtabs').tabs('disable');
|
|
$('span.tabright').hide();
|
|
},
|
|
load: function(event, ui) {
|
|
busy = false;
|
|
setup_tab(ui.tab.index(), ui.panel);
|
|
$('#pkgtabs').tabs('enable');
|
|
},
|
|
spinner: '<img border=0 src=/img/spin.gif> ' +
|
|
'<em>Loading...</em>'
|
|
});
|
|
|
|
var $dialog = $('#dialogue').dialog({
|
|
title: "Package Management Results",
|
|
modal: false, autoOpen: false,
|
|
height: 500, width: 700,
|
|
show: 'scale', hide: 'fade',
|
|
draggable: true, resizable: true,
|
|
buttons: { "Close":
|
|
function() {$(this).dialog('close');}},
|
|
close: function(e,u) {
|
|
if (tswitch)
|
|
{
|
|
var curtab = $('#pkgtabs')
|
|
.tabs('option', 'active');
|
|
if (curtab != tswitch)
|
|
$('#pkgtabs').tabs('option',
|
|
'active', tswitch);
|
|
else
|
|
{
|
|
$('.ui-tabs-panel')
|
|
.html("<img src=/img/spin.gif>" +
|
|
"Loading data... Please wait...");
|
|
$('#pkgtabs').tabs('load', tswitch);
|
|
}
|
|
tswitch = false;
|
|
$('button.va').enable();
|
|
}
|
|
else
|
|
{
|
|
var pkg = $('#dialogue').attr('pkg');
|
|
$('tr[pkg="' + pkg + '"]')
|
|
.disable()
|
|
.find('button').removeClass('va');
|
|
$('button.va').enable();
|
|
}
|
|
}
|
|
});
|
|
|
|
function loaddata(data, status)
|
|
{
|
|
$('#dresults').text(data).wrapInner('<pre>');
|
|
if (status) // Request completed
|
|
{
|
|
$('#dspinner').hide('slow');
|
|
$('#complete').show('slow');
|
|
if (status == 'success' && !stick)
|
|
$('#dialogue').dialog('close');
|
|
//stick = false;
|
|
}
|
|
$('#dialogue').animate({
|
|
scrollTop: $('#dialogue').prop('scrollHeight')
|
|
}, 'slow');
|
|
}
|
|
|
|
function execopkg(arg, pkg)
|
|
{
|
|
if (busy)
|
|
{
|
|
alert('Please wait until the current ' +
|
|
'operation completes.');
|
|
return;
|
|
}
|
|
busy = true;
|
|
$('button.va').disable();
|
|
$('#dspinner').show();
|
|
$('#complete').hide();
|
|
$('#dresults').empty();
|
|
$('#dialogue').attr('pkg', pkg);
|
|
$dialog.dialog('open');
|
|
|
|
$.ajax({
|
|
type: "GET",
|
|
url: opkg,
|
|
data: { cmd: arg },
|
|
xhrFields: {
|
|
onprogress: function(x) {
|
|
if (x.target)
|
|
loaddata(x.target.responseText);
|
|
},
|
|
},
|
|
progressInterval: 500,
|
|
success: function(data, status) {
|
|
loaddata(data, status);
|
|
},
|
|
error: function(_, _, e) {
|
|
if (window.console)
|
|
console.log("ajax error");
|
|
if (e.length)
|
|
alert(e);
|
|
}
|
|
});
|
|
busy = false;
|
|
}
|
|
|
|
function update_filter($table, change)
|
|
{
|
|
if (change)
|
|
pkgfilter = !pkgfilter;
|
|
|
|
if (pkgfilter)
|
|
{
|
|
$table.find('tr.p_av').hide();
|
|
$('#filtertext').text('Not showing advanced packages');
|
|
$('#b_filter').text('Show');
|
|
}
|
|
else
|
|
{
|
|
$table.find('tr.p_av').show();
|
|
$('#filtertext').text('Advanced packages are being shown');
|
|
$('#b_filter').text('Hide');
|
|
}
|
|
|
|
$table.trigger('update');
|
|
|
|
$('#b_filter').button().off('click').on('click', function() {
|
|
update_filter($table, 1);
|
|
});
|
|
}
|
|
|
|
function setup_tab(index, panel)
|
|
{
|
|
var $tab = $(panel).find('table.tablesorter');
|
|
if (index == 2)
|
|
$('span.tabright').hide();
|
|
else
|
|
{
|
|
update_filter($tab);
|
|
$('span.tabright').show();
|
|
}
|
|
$tab.tablesorter({
|
|
theme: 'webif',
|
|
widthFixed: false,
|
|
widgets: ['zebra', 'stickyHeaders']
|
|
});
|
|
|
|
$(panel).find('button.remove, button.install, button.upgrade')
|
|
.button()
|
|
.click(function() {
|
|
if ($(this).attr('action') == 'remove' &&
|
|
!confirm('Please confirm removal of the ' +
|
|
$(this).attr('id') + ' package.'))
|
|
return;
|
|
|
|
execopkg($(this).attr('action') + ' ' + $(this).attr('id'),
|
|
$(this).closest('tr').attr('pkg'));
|
|
}).fadeIn('slow');
|
|
|
|
$(panel).find('a.depends').click(function(e) {
|
|
e.preventDefault();
|
|
var pkg = $(this).closest('tr').attr('pkg');
|
|
stick = true;
|
|
execopkg('dependinfo ' + pkg, false);
|
|
});
|
|
|
|
$(panel).find('tr[pkg=webif]').find('button[action=remove]').disable();
|
|
|
|
$(panel).find('img.norepo').qtip({content: 'Not in repository'});
|
|
$(panel).find('img.adv').qtip({content: 'Advanced package'});
|
|
$(panel).find('img.beta')
|
|
.qtip({content: 'Beta package, use at your own risk'});
|
|
}
|
|
|
|
});
|
|
|