litedram/test/summary/summary.html.jinja2

161 lines
5.5 KiB
Django/Jinja

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{ title }}</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.css">
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/fixedheader/3.1.5/js/dataTables.fixedHeader.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/fixedheader/3.1.5/css/fixedHeader.dataTables.min.css">
<style type="text/css" media="all">
{% include 'summary.css' %}
{# Calculate size of table selection elements so that they take up whole space #}
.table-select li {
width: calc(100% / {{ tables.keys() | length }});
}
</style>
</head>
<body>
{# Loading symbol that gets hidden after initialisation of all tables #}
<div class="loading lds-dual-ring"></div>
{# Bar for selecting the current data table #}
<div class="table-select">
<ul>
{% for id, name in names.items() %}
<li id='{{ id }}-button'><a href="#">{{ name }}</a></li>
{% endfor %}
</ul>
{# <hr/> #}
</div>
{# Display of the current data table #}
<div class="tables-wrapper">
{% for id, table in tables.items() %}
{# Hide tables not to show them before all DataTables are loaded #}
<div id="{{ id }}-div" style="display: none;">
{{ table }}
</div>
{% endfor %}
</div>
</body>
<footer id="footer">
<a href="https://github.com/enjoy-digital/litedram">LiteDRAM</a> is a part of <a href="https://github.com/enjoy-digital/litex">Litex</a>.
<br>
Generated using
<a href="https://github.com/enjoy-digital/litedram/blob/{{ revision }}/{{ script_path }}">{{ script_path }}</a>,
revision
<a href="https://github.com/enjoy-digital/litedram/commit/{{ revision }}">{{ revision_short }}</a>,
{{ generation_date }}.
</footer>
{# Script last, so that for large tables we get some content on the page before loading tables #}
<script>
{# Ids of the data tables #}
table_ids = [
{% for id in tables.keys() %}
'{{ id }}',
{% endfor %}
];
{# Show table with given id and hide all the others #}
show_table = function(id) {
if (!table_ids.includes(id)) {
console.log('Error: show_table(' + id + ')');
return;
}
for (var table_div of $('.tables-wrapper').children()) {
if (table_div.id) {
var table_div = $('#' + table_div.id)
if (table_div.attr('id') == id + '-div') {
table_div.show();
} else {
table_div.hide();
}
}
}
}
// sort human-readable values assuming format "123 Kb", only first letter of unit is used
jQuery.fn.dataTable.ext.type.order['file-size-pre'] = function(data) {
var matches = data.match(/^(\d+(?:\.\d+)?)\s*(\S+)/i);
var multipliers = {
k: Math.pow(2, 10),
m: Math.pow(2, 20),
g: Math.pow(2, 30),
t: Math.pow(2, 40),
};
if (matches) {
var float = parseFloat(matches[1]);
var prefix = matches[2].toLowerCase()[0];
var multiplier = multipliers[prefix];
if (multiplier) {
float = float * multiplier;
}
return float;
} else {
return -1;
};
};
{# Initialization after DOM has been loaded #}
$(document).ready(function() {
// generate data tables
for (var id of table_ids) {
// add human readable class to all bandwidth columns
var columns = $('#' + id + ' > thead > tr > th').filter(function(index) {
var name = $(this).text().toLowerCase();
return name.includes('bandwidth') || name.includes('latency') || name.includes('efficiency');
});
columns.addClass('data-with-unit-human-readable');
// construct data table
table = $('#' + id);
table.DataTable({
paging: false,
fixedHeader: true,
columnDefs: [
{ type: 'file-size', targets: [ 'data-with-unit-human-readable' ] },
{ className: 'dt-body-right', targets: [ '_all' ] },
{ className: 'dt-head-center', targets: [ '_all' ] },
]
});
table.addClass("stripe");
table.addClass("hover");
table.addClass("order-column");
table.addClass("cell-border");
table.addClass("row-border");
}
// add click handlers that change the table being shown
for (var id of table_ids) {
var ahref = $('#' + id + '-button a');
// use nested closure so that we avoid the situation
// where all click handlers end up with the last id
ahref.click(function(table_id) {
return function() {
// get rid of this class after first click
$('.table-select a').removeClass('table-select-active');
$(this).addClass('table-select-active');
show_table(table_id);
}
}(id))
}
// show the first one
$('#' + table_ids[0] + '-button a:first').click();
// hide all elements of class loading
$('.loading').hide();
});
</script>
</html>
{# vim: set ts=2 sts=2 sw=2 et: #}