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("" + "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("" + "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: ' ' + 'Loading...' }); 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("" + "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('
');
	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.trim().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'});
}

});