Blob Blame History Raw
function formatChild(data) {
    if (data.extra_packages && data.extra_packages.length) {
	extra_packages = '<h2>Extra Packages</h2>' +
	    '<span class="package">' + data.extra_packages.join('</span>, <span class="package">') + '</span>';
    } else {
	extra_packages = ''
    }
    return '' +
	'<table class="stars">' +
	'<thead><tr><th>0</th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th></tr></thead>' +
	'<tbody><tr><td>' + data.stars[0] + '</td><td>' + data.stars[1] + '</td><td>' + data.stars[2] + '</td><td>' + data.stars[3] + '</td><td>' + data.stars[4] + '</td><td>' + data.stars[5] + '</td></tr><tbody>' +
	'</table>' +
	'<div class="description">' + data.description + '<div>' +
	extra_packages
}

function startAppReport() {
    table = $('#appTable').DataTable( {
	ajax: {
	    url: 'applications.json',
	    cache: true,
	    dataSrc: 'applications',
	},
	createdRow: function(row, data) {
            if (data.package == null && data.flathub != null)
		$(row).addClass('no-fedora')
            if (data.package != null && data.flathub == null)
		$(row).addClass('no-flathub')
            if (data.flathub == null && data.package == null)
		$(row).addClass('no-flathub-fedora')
	},
	columns: [
	    { data: 'name', className: 'text-left' },
	    { data: 'package', defaultContent: '', className: 'text-left' },
	    { data: 'flathub', defaultContent: '', render: {
		display: function(data) { return data != null ? 'true' : '' },
		sort: function(data) { return data != null ? 0 : 1 },
       	    },
	      className: 'text-center' },
	    { data: 'star_total', defaultContent: '', className: 'text-center' },
	    { data: 'star_avg', defaultContent: '', render: {
		display: function(data, type, row, meta) { return data ? data.toFixed(1) : '' }
	    }, className: 'text-center' },
	    { data: 'extra_packages', defaultContent: '', render: {
		display: function(data, type, row, meta) { return data ? data.length: '' },
		sort: function(data, type, row, meta) { return data ? data.length : 0 },
	    }, className: 'text-center' },
	],
	order: [[3, 'desc']],
	pageLength: 100,
	lengthMenu: [[25,100,250,-1],['25', '100', '250', 'All']],
    })
    $('#appTable').on('click', 'td', function () {
        var tr = $(this).closest('tr');
        var row = table.row( tr );

        if ( row.child.isShown() ) {
            // This row is already open - close it
            row.child.hide();
            tr.removeClass('shown');
        }
        else {
            // Open this row
            row.child( formatChild(row.data()) ).show();
            tr.addClass('shown');
        }
    } );
}

function fillDetails(pkg, category, apps) {
    $('#details .pkg').text(pkg);
    $('#details .category').text(category);
    $('#details .apps').empty();

    for (let a of apps) {
	$('<li></li>').text(a).appendTo('#details .apps');
    }
}

function startPackageTable(id, src) {
    var table = $(id).DataTable( {
	ajax: {
	    url: 'application-packages.json',
	    cache: true,
	    dataSrc: src,
	},
	columns: [
	    { data: 'package', className: 'text-left' },
	    { data: 'top_count', defaultContent: '', className: 'text-center top' },
	    { data: 'all_count', defaultContent: '', className: 'text-center all' },
	],
	order: [[2, 'desc']],
	pageLength: 25,
    });

    $(id).on('click', 'td.top', function () {
        var tr = $(this).closest('tr');
        var row = table.row( tr );

	data = row.data()
	fillDetails(data['package'], 'Top 100', data['top'])
    } );

    $(id).on('click', 'td.all', function () {
        var tr = $(this).closest('tr');
        var row = table.row( tr );

	data = row.data()
	fillDetails(data['package'], ' All', data['all'])
    } );
}

function startAppPackages() {
    startPackageTable('#runtimeTable', 'runtime')
    startPackageTable('#extraTable', 'extra')
}

function closeSummary() {
    $('.summary').hide();
}