169 lines
5.7 KiB
Twig
169 lines
5.7 KiB
Twig
|
{% extends '@WebProfiler/Profiler/layout.html.twig' %}
|
||
|
|
||
|
{% block head %}
|
||
|
{{ parent() }}
|
||
|
|
||
|
<style>
|
||
|
#twig-dump pre {
|
||
|
font-size: var(--font-size-monospace);
|
||
|
line-height: 1.7;
|
||
|
background-color: var(--page-background);
|
||
|
border: var(--border);
|
||
|
border-radius: 6px;
|
||
|
padding: 15px;
|
||
|
box-shadow: 0 0 1px rgba(128, 128, 128, .2);
|
||
|
}
|
||
|
#twig-dump span {
|
||
|
border-radius: 2px;
|
||
|
padding: 1px 2px;
|
||
|
}
|
||
|
#twig-dump .status-error { background: transparent; color: var(--color-error); }
|
||
|
#twig-dump .status-warning { background: rgba(240, 181, 24, 0.3); }
|
||
|
#twig-dump .status-success { background: rgba(100, 189, 99, 0.2); }
|
||
|
#twig-dump .status-info { background: var(--info-background); }
|
||
|
.theme-dark #twig-dump .status-warning { color: var(--yellow-200); }
|
||
|
.theme-dark #twig-dump .status-success { color: var(--green-200); }
|
||
|
|
||
|
#twig-table tbody td {
|
||
|
position: relative;
|
||
|
}
|
||
|
#twig-table tbody td div {
|
||
|
margin: 0;
|
||
|
}
|
||
|
#twig-table .template-file-path {
|
||
|
color: var(--color-muted);
|
||
|
display: block;
|
||
|
}
|
||
|
</style>
|
||
|
{% endblock %}
|
||
|
|
||
|
{% block toolbar %}
|
||
|
{% set time = collector.templatecount ? '%0.0f'|format(collector.time) : 'n/a' %}
|
||
|
{% set icon %}
|
||
|
{{ source('@WebProfiler/Icon/twig.svg') }}
|
||
|
<span class="sf-toolbar-value">{{ time }}</span>
|
||
|
<span class="sf-toolbar-label">ms</span>
|
||
|
{% endset %}
|
||
|
|
||
|
{% set text %}
|
||
|
{% set template = collector.templates|keys|first %}
|
||
|
{% set file = collector.templatePaths[template]|default(false) %}
|
||
|
{% set link = file ? file|file_link(1) : false %}
|
||
|
<div class="sf-toolbar-info-piece">
|
||
|
<b>Entry View</b>
|
||
|
<span>
|
||
|
{% if link %}
|
||
|
<a href="{{ link }}" title="{{ file }}">
|
||
|
{{ template }}
|
||
|
</a>
|
||
|
{% else %}
|
||
|
{{ template }}
|
||
|
{% endif %}
|
||
|
</span>
|
||
|
</div>
|
||
|
<div class="sf-toolbar-info-piece">
|
||
|
<b>Render Time</b>
|
||
|
<span>{{ time }} ms</span>
|
||
|
</div>
|
||
|
<div class="sf-toolbar-info-piece">
|
||
|
<b>Template Calls</b>
|
||
|
<span class="sf-toolbar-status">{{ collector.templatecount }}</span>
|
||
|
</div>
|
||
|
<div class="sf-toolbar-info-piece">
|
||
|
<b>Block Calls</b>
|
||
|
<span class="sf-toolbar-status">{{ collector.blockcount }}</span>
|
||
|
</div>
|
||
|
<div class="sf-toolbar-info-piece">
|
||
|
<b>Macro Calls</b>
|
||
|
<span class="sf-toolbar-status">{{ collector.macrocount }}</span>
|
||
|
</div>
|
||
|
{% endset %}
|
||
|
|
||
|
{{ include('@WebProfiler/Profiler/toolbar_item.html.twig', { link: profiler_url }) }}
|
||
|
{% endblock %}
|
||
|
|
||
|
{% block menu %}
|
||
|
<span class="label {{ 0 == collector.templateCount ? 'disabled' }}">
|
||
|
<span class="icon">{{ source('@WebProfiler/Icon/twig.svg') }}</span>
|
||
|
<strong>Twig</strong>
|
||
|
</span>
|
||
|
{% endblock %}
|
||
|
|
||
|
{% block panel %}
|
||
|
{% if collector.templatecount == 0 %}
|
||
|
<h2>Twig</h2>
|
||
|
|
||
|
<div class="empty empty-panel">
|
||
|
<p>No Twig templates were rendered.</p>
|
||
|
</div>
|
||
|
{% else %}
|
||
|
<h2>Twig Metrics</h2>
|
||
|
|
||
|
<div class="metrics">
|
||
|
<div class="metric">
|
||
|
<span class="value">{{ '%0.0f'|format(collector.time) }} <span class="unit">ms</span></span>
|
||
|
<span class="label">Render time</span>
|
||
|
</div>
|
||
|
|
||
|
<div class="metric-divider"></div>
|
||
|
|
||
|
<div class="metric-group">
|
||
|
<div class="metric">
|
||
|
<span class="value">{{ collector.templatecount }}</span>
|
||
|
<span class="label">Template calls</span>
|
||
|
</div>
|
||
|
|
||
|
<div class="metric">
|
||
|
<span class="value">{{ collector.blockcount }}</span>
|
||
|
<span class="label">Block calls</span>
|
||
|
</div>
|
||
|
|
||
|
<div class="metric">
|
||
|
<span class="value">{{ collector.macrocount }}</span>
|
||
|
<span class="label">Macro calls</span>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
<p class="help">
|
||
|
Render time includes sub-requests rendering time (if any).
|
||
|
</p>
|
||
|
|
||
|
<h2>Rendered Templates</h2>
|
||
|
|
||
|
<table id="twig-table">
|
||
|
<thead>
|
||
|
<tr>
|
||
|
<th scope="col">Template Name & Path</th>
|
||
|
<th class="num-col" scope="col">Render Count</th>
|
||
|
</tr>
|
||
|
</thead>
|
||
|
<tbody>
|
||
|
{% for template, count in collector.templates %}
|
||
|
<tr>
|
||
|
{% set file = collector.templatePaths[template]|default(false) %}
|
||
|
{% set link = file ? file|file_link(1) : false %}
|
||
|
<td class="font-normal">
|
||
|
{% if link %}
|
||
|
<a href="{{ link }}" title="{{ file }}" class="stretched-link">
|
||
|
{{ template }}
|
||
|
<span class="template-file-path">{{ file|file_relative|default(file) }}</span>
|
||
|
</a>
|
||
|
{% else %}
|
||
|
{{ template }}
|
||
|
{% endif %}
|
||
|
</td>
|
||
|
<td class="font-normal num-col">{{ count }}</td>
|
||
|
</tr>
|
||
|
{% endfor %}
|
||
|
</tbody>
|
||
|
</table>
|
||
|
|
||
|
<h2>Rendering Call Graph</h2>
|
||
|
|
||
|
<div id="twig-dump">
|
||
|
{{ collector.htmlcallgraph }}
|
||
|
</div>
|
||
|
{% endif %}
|
||
|
{% endblock %}
|