{% extends "layout.html" %} {% macro chartScript(divId, data, unit)%} {% set hash = divId | md5 %} data_{{ hash }} = [{% for stop in data %}{ "date": "{{stop.date}}", "value": {{stop.value}} }{% if not loop.last %},{%endif%} {% endfor%} ] var chart_{{ hash }} = createChart('{{divId}}', data_{{ hash }}, '{{unit}}'); function zoom_chart_{{ hash }}() { chart_{{ hash }}.zoomToIndexes( chart_{{ hash }}.dataProvider.length - 40, chart_{{ hash }}.dataProvider.length - 1 ); } chart_{{ hash }}.addListener("rendered", zoom_chart_{{ hash }}); zoom_chart_{{ hash }}() {% endmacro %} {% macro nav_tab(id, text, active) %} {# Create a UI element to select the shown pane of a tabbed view id: id of the pane to select text: the text in the UI element active: boolean stating if the tab is active or not #} <li class="{% if active %}active{% endif %}"> <a href="#ref_{{id}}" id="id_{{id}}" data-toggle="tab" > {{ text }} </a> </li> {% endmacro %} {% macro tab_pane(id, content, active) %} <div class="tab-pane {% if active %}active{% endif %}" id="ref_{{ id }}"> {{ content }} </div> {% endmacro %} {% macro chart(data, baseId, unit, link) %} {% if data|length > 0 %} {% set chartID = 'chart_' + baseId %} <div id="{{ chartID }}" style="width:100%; height:500px;"></div> <script type="text/javascript"> {{ chartScript(chartID, data, unit) }} </script> {% else %} <div class="alert alert-warning" role="alert"> not enough data: <a href="{{ link }}">log a pitstop</a>? </div> {% endif %} {% endmacro %} {% macro print_consumable_table(consumable) %} <table class="table table-striped table-bordered table-condensed"> <tr> <th>Average Distance:</th> <td>{{ consumable.average_distance | round(2) }} km</td> </tr> <tr> <th>Amount fuelled:</th> <td>{{ consumable.overall_amount | round(2) }} {{ consumable.unit }}</td> </tr> <tr> <th>Average Amount fuelled:</th> <td>{{ consumable.average_amount_fuelled | round(2) }} {{ consumable.unit }}</td> </tr> <tr> <th>Average Amount used:</th> <td>{{ consumable.average_amount_used | round(2) }} {{ consumable.unit }}/100km</td> </tr> </table> {% endmacro %} {% macro print_vehicle_table(vehicle) %} <h3>{{vehicle.name}}</h3> <div class="table-responsive"> <table class="table table-striped table-bordered table-condensed"> <tr> <th>Logged Distance:</th> <td>{{ vehicle.overall_distance | round(2) }} km</td> </tr> <tr> <th>Logged Costs:</th> <td>{{ vehicle.overall_costs | round(2) }} €</td> </tr> <tr> <th>Logged Costs per km:</th> {% if vehicle.costs_per_distance != 'N/A' %} <td>{{ vehicle.costs_per_distance | round(2) }} €/100km</td> {% else %} <td>{{ vehicle.costs_per_distance }}</td> {% endif %} </tr> </table> </div> {% endmacro %} {% macro tab_script(id) %} <script type="text/javascript"> jQuery(document).ready(function ($) { $('#{{id}}').tab(); if(window.location.hash != "") { $('a[href="' + window.location.hash + '"]').click() } }); </script> {% endmacro %} {% block body %} <div id="content"> <ul id="vehicle_tabs" class="nav nav-tabs" data-tabs="tabs"> {% for vehicle in data %} {{ nav_tab(vehicle.id, vehicle.name, loop.first) }} {% endfor %} </ul> <div id="vehicle_content" class="tab-content "> {% for vehicle in data %} <div class="tab-pane {% if loop.first %}active{% endif %}" id="ref_{{vehicle.id}}"> {{ print_vehicle_table(vehicle) }} <ul id="vehicle_{{vehicle.id}}_tabs" class="nav nav-tabs" data-tabs="tabs"> {{ nav_tab(vehicle.id|string + '_odometer', 'Odometer', true) }} {{ nav_tab(vehicle.id|string + '_costs', 'Costs', false) }} {% for consumable in vehicle.consumables %} {{ nav_tab(vehicle.id|string + '_' + consumable.id|string, consumable.name, false) }} {% endfor %} </ul> <div id="vehicle_{{vehicle.id}}_content" class="tab-content "> {{ tab_pane( vehicle.id|string + '_odometer', chart( vehicle.odometers, 'ref_' + vehicle.id|string + '_odometer', 'km', url_for('select_consumable_for_new_pitstop', vid=vehicle.id) ), true ) }} {{ tab_pane( vehicle.id|string + '_costs', chart( vehicle.costs, 'ref_' + vehicle.id|string + '_costs', '€', url_for('select_consumable_for_new_pitstop', vid=vehicle.id) ), false ) }} {% for consumable in vehicle.consumables %} <div class="tab-pane" id="ref_{{vehicle.id}}_{{consumable.id}}"> {{ print_consumable_table(consumable) }} <ul id="consumable_{{vehicle.id}}_{{consumable.id}}_tabs" class="nav nav-tabs" data-tabs="tabs"> {{ nav_tab(vehicle.id|string + '_' + consumable.id|string + '_consumption', 'Consumption', true) }} {{ nav_tab(vehicle.id|string + '_' + consumable.id|string + '_amount', 'Amount', false) }} {{ nav_tab(vehicle.id|string + '_' + consumable.id|string + '_price', 'Price', false) }} </ul> <div id="consumable_{{vehicle.id}}_{{consumable.id}}_content" class="tab-content "> {{ tab_pane( vehicle.id|string + '_' + consumable.id|string + '_consumption', chart( consumable.average_amount, 'ref_' + vehicle.id|string + '_' + consumable.id|string + '_consumption', consumable.unit + '/100km', url_for('create_pit_stop_form', vid=vehicle.id, cid=consumable.id) ), true ) }} {{ tab_pane( vehicle.id|string + '_' + consumable.id|string + '_amount', chart( consumable.amounts, 'ref_' + vehicle.id|string + '_' + consumable.id|string + '_amount', consumable.unit, url_for('create_pit_stop_form', vid=vehicle.id, cid=consumable.id) ), false ) }} {{ tab_pane( vehicle.id|string + '_' + consumable.id|string + '_price', chart( consumable.price, 'ref_' + vehicle.id|string + '_' + consumable.id|string + '_price', '€ / '+consumable.unit, url_for('create_pit_stop_form', vid=vehicle.id, cid=consumable.id) ), false ) }} </div> {{ tab_script('vehicle_' + vehicle.id|string + '_' + consumable.id|string + '_tabs') }} </div> {% endfor %} </div> {{ tab_script('vehicle_' + vehicle.id|string + '_tabs') }} </div> {% endfor %} </div> {{ tab_script('vehicle_tabs') }} </div> {% endblock %}