elf_arrows/src/render_html.jingoo

157 lines
4 KiB
Plaintext

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<style>
body {
font-family: "mono";
font-size: 12px;
background-color: #f7f6fd;
}
.prog_container {
display: flex;
justify-content: space-around;
}
.prog {
background-color: white;
padding: 15px;
border: 1px solid #9584ff;
}
.progpath {
text-align: center;
font-size: 1.3em;
}
.subroutine {
margin: 20px 0;
}
.sub_collapser {
background-color: #8c8c8c;
color: white;
font-weight: bold;
border-radius: 50%;
text-align: center;
display: inline-block;
width: 1em;
}
.sub_body {
margin-left: 4ex;
}
.addr {
color: green;
}
.instr_bytes pre {
display: inline;
font-size: 12px;
font-family: "mono";
}
.instr_bytes {
color: grey;
}
.instr_box {
background-color: #ffffb4;
}
</style>
<script>
function hoverByClass(classname){
var colorover = "orange";
var colorout = "#ffffb4";
var elms=document.getElementsByClassName(classname);
for(var i=0;i<elms.length;i++){
elms[i].onmouseover = function(){
for(var k=0;k<elms.length;k++){
elms[k].style.backgroundColor=colorover;
}
};
elms[i].onmouseout = function(){
for(var k=0;k<elms.length;k++){
elms[k].style.backgroundColor=colorout;
}
};
}
}
</script>
<script>
function toggle_visibility(id) {
var e = document.getElementById(id);
var label = document.getElementById(id + "_collapser");
if(e.style.display == 'none') {
label.innerHTML = label.innerHTML.replace("+","-");
e.style.display = 'block';
}
else {
label.innerHTML = label.innerHTML.replace("-","+");
e.style.display = 'none';
}
}
</script>
</head>
<body>
<div class="prog_container">
{% for prog in progs %}
<div class="prog">
<h2 class="progpath">{{ prog.path }}</h2>
{% for subroutine in prog.prog %}
<div class="subroutine">
<div class="sub_headline">
<span class="sub_collapser"
id="sub_body_{{subroutine.sub_uuid}}_collapser"
onclick="toggle_visibility('sub_body_{{ subroutine.sub_uuid }}')"
>
-
</span>
<span class="addr">{{ subroutine.sub_addr }}</span>
<span class="sub_section">[{{ subroutine.sub_section }}]</span>
<span class="sub_name">&lt;{{ subroutine.sub_name }}&gt;</span>:
</div>
<div class="sub_body" id="sub_body_{{ subroutine.sub_uuid }}">
{% for row in subroutine.sub_asm %}
{% for event in row.instr_events %}
{% if event.typ == "start" %}
<div class="instr_box box_eq_{{ event.box_eq }}"
id="instr_box_{{ event.id }}"
title="{{ event.data }}"
>
{% endif %}
{% endfor %}
<div class="sub_instr">
<span class="addr instr_addr">{{ row.instr_addr }}</span>
<span class="instr_bytes"><pre>{{ row.instr_bytes }}</pre></span>
<span class="instr_asm">{{ row.instr_asm }}</span>
</div>
{% for event in row.instr_events %}
{% if event.typ == "end" %}
</div> <!-- END instr_box_{{ event.id }} -->
{% endif %}
{% endfor %}
{% endfor %}
</div>
</div>
{% if not subroutine.sub_relevant %}
<script>toggle_visibility('sub_body_{{ subroutine.sub_uuid }}');</script>
{% endif %}
{% endfor %}
</div>
{% endfor %}
</div>
<script>
{% for class in box_classes %}
hoverByClass("box_eq_{{ class }}");
{% endfor %}
</script>
</body>
</html>