Current section
Files
Jump to
Current section
Files
priv/templates/admin_development.tpl
{% extends "admin_base.tpl" %}
{% block head_extra %}
{% lib "css/development.css" %}
{% endblock %}
{% block title %}{_ Development _}{% endblock %}
{% block content %}
<div class="admin-header">
<h2>{_ Site Development _}</h2>
<p>{_ Tools and settings that are useful for site development. _}</p>
</div>
{% if m.acl.is_allowed.use.mod_development %}
<div class="widget">
<div class="widget-header">
{_ Settings _}
</div>
<div class="widget-content">
{% wire id="tpldbg"
action={config_toggle module="mod_development" key="debug_includes"}
action={admin_tasks task='flush'}
%}
<label class="checkbox">
<input type="checkbox" id="tpldbg" value="1" {% if m.development.debug_includes %}checked="checked"{% endif %} />
{_ Show paths to included template files in generated templates _}
</label>
{% wire id="blkdbg"
action={config_toggle module="mod_development" key="debug_blocks"}
action={admin_tasks task='flush'}
%}
<label class="checkbox">
<input type="checkbox" id="blkdbg" value="1" {% if m.development.debug_blocks %}checked="checked"{% endif %} />
{_ Show defined blocks in generated templates _}
</label>
{% wire id="hide_trace_button"
action={config_toggle module="mod_development" key="hide_trace_button"}
%}
<label class="checkbox">
<input type="checkbox" id="hide_trace_button" value="1" {% if m.development.hide_trace_button %}checked="checked"{% endif %} />
{_ Always hide the floating template trace button. _}
</label>
{% wire id="trace_button"
action={config_toggle module="mod_development" key="trace_button"}
%}
<label class="checkbox">
<input type="checkbox" id="trace_button" value="1" {% if m.development.trace_button %}checked="checked"{% endif %} />
{_ Allow to show the floating template trace button on production and acceptance sites. _}
</label>
{% wire id="libsep"
action={config_toggle module="mod_development" key="libsep"}
%}
<label class="checkbox">
<input type="checkbox" id="libsep" value="1" {% if m.development.libsep %}checked="checked"{% endif %} />
{_ Download CSS and JavaScript files as separate files. Don’t combine them in one URL. _}
</label>
{% wire id="livereload"
action={config_toggle module="mod_development" key="livereload"}
action={script script="
if ($('#livereload').is(':checked') && !$('#libsep').is(':checked')) {
$('#libsep').click();
};" }
%}
<label class="checkbox">
<input type="checkbox" id="livereload" value="1" {% if m.development.livereload %}checked="checked"{% endif %} />
{_ Live reload of changed CSS files. Reload page on change of templates or JavaScript. _}
</label>
{% wire id="nocache"
action={config_toggle module="mod_development" key="nocache"}
%}
<label class="checkbox">
<input type="checkbox" id="nocache" value="1" {% if m.development.nocache %}checked="checked"{% endif %} />
{_ Disable caching by the <tt>{% cache %}</tt> tag. _}
</label>
{% if m.modules.provided.server_storage %}
{% wire id="dbtrace"
postback=`dbtrace_toggle`
delegate=`z_development_dbtrace`
%}
<label class="checkbox">
<input type="checkbox" id="dbtrace" value="1" {% if m.development.is_dbtrace %}checked="checked"{% endif %} />
{_ Trace all database queries for the current session _}
</label>
{% else %}
<p class="help-block">
<br>
{_ Enable <tt>mod_server_storage</tt> to use database query tracing. _}
</p>
{% endif %}
{% wire id="devapi"
action={config_toggle module="mod_development" key="enable_api"}
%}
<label class="checkbox">
<input type="checkbox" id="devapi" value="1" {% if m.development.enable_api %}checked="checked"{% endif %} />
{_ Enable API to recompile and build Zotonic _}
</label>
{% if m.modules.provided.mod_logging %}
{% if m.site.environment == `development` and m.log.is_log_client_allowed %}
<p class="alert alert-info">
{_ Set the class <tt>environment-development</tt> on the <tt><html></tt> element of your pages to see the server log in the browser console.<br>In development, admin pages always show the server log in the javascript console. _}
</p>
{% elseif m.log.is_log_client_allowed %}
<label class="checkbox">
<input type="checkbox" id="logclient" value="1" disabled>
{_ Show server log in the browser console _}
</label>
{% javascript %}
cotonic.broker
.call("bridge/origin/model/log/get/is_log_client_session")
.then((msg) => {
const elt = document.getElementById("logclient");
elt.disabled = false;
if (msg.payload.result) {
elt.checked = true;
} else {
elt.checked = false;
}
});
$('#logclient').on('input', function(e) {
const is_enabled = $(this).is(":checked");
z_event("log_client_enable", { is_enabled: is_enabled });
});
{% endjavascript %}
{% wire name="log_client_enable"
postback=`log_client_enable`
delegate=`mod_development`
%}
{% elseif m.acl.is_admin %}
<p class="help-block">
{_ Log in as the admin to enable logging to the javascript console. _}
</p>
{% endif %}
{% endif %}
</div>
</div>
<div class="widget">
<div class="widget-header">
{_ Template debugging _}
</div>
<div class="widget-content">
<p>{_ Find a template, check which template will be selected _}</p>
{% wire id="explain-tpl" type="submit"
postback=`explain_tpl`
delegate=`z_development_template`
%}
<form id="explain-tpl" class="form-inline" method="GET" action="postback">
<div class="form-group">
<select class="form-control" name="tpl_cat">
<option value="">{_ Optional category for catinclude _}</option>
<option disabled></option>
{% for c in m.category.tree_flat %}
<option value="{{ c.id.name }}">{{ c.indent }}{{ c.id.name }}</option>
{% endfor%}
</select>
</div>
<div class="form-group">
<input class="form-control" type="text" name="tpl_name" placeholder="foo.tpl" value="">
</div>
<button class="btn btn-primary" type="submit">{_ Find _}</button>
</form>
<div id="explain-tpl-output" style="display:none"></div>
<hr/>
<p>
<a href="{% url admin_development_templates_xref %}">{_ Cross-reference check of templates _} ></a>
</p>
<p class="help-block">
{% trans "All templates are checked for missing includes or missing <tt>{ext}</tt> template references."
ext="extends/overrules"
%}
{_ All templates will be compiled. _}
</p>
<hr/>
<p>
<a href="{% url admin_development_templates_trace %}">{_ Live dependency graph of templates _} ></a>
</p>
<p class="help-block">{_ Traces all templates for the current session-id, or all sessions, and renders them as a graph. _}</p>
<hr/>
<p>
<a href="{% url admin_development_templates_graph %}">{_ Dependency graph of all available templates _} ></a>
</p>
<p class="help-block">{_ Calculate and visualize a dependency graph of all templates. _}
{_ All templates will be compiled. _}</p>
<hr/>
<p>
{% button class="btn btn-primary" text=_"Recompile templates"
action={admin_tasks task="templates_reset"}
%}
{% button class="btn btn-default" text=_"Rescan modules"
action={module_rescan}
%}
</p>
<p class="help-block">{_ Force a recompilation of all templates. This fixes any issues where the compiled templates might be out of sync with the template index. _}</p>
</p>
</div>
</div>
<div class="widget">
<div class="widget-header">
{_ Dispatch rule debugging _}
</div>
<div class="widget-content">
<p>
<a href="{% url admin_development_dispatch_details %}">{_ View all dispatch rules _} ></a>
</p>
<p class="help-block">{_ View all dispatch rules and hostnames usable in the site. _}</p>
<hr />
<p>{_ Match a request URL, display matched dispatch rule. _}</p>
{% wire id="explain-dispatch" type="submit"
postback=`explain_dispatch`
delegate=`z_development_dispatch`
%}
<form id="explain-dispatch" class="form-inline" method="GET" action="postback">
<div class="form-group">
<select id="explain_protocol" name="explain_protocol" class="col-md-4 form-control">
<option value="https">https://{{ m.site.hostname }}</option>
<option value="http">http://{{ m.site.hostname }}</option>
</select>
</div>
<div class="form-group">
<input class="form-control" type="text" id="explain_req" name="explain_req" placeholder="/foo/bar" value="" />
</div>
<button class="btn btn-primary" type="submit">{_ Explain _}</button>
</form>
<br>
<div id="explain-dispatch-output" style="display:none"></div>
</div>
</div>
<div class="widget">
<div class="widget-header">
{_ Introspection _}
</div>
<div class="widget-content">
<p>{_ Show internals of Zotonic and the modules. _}</p>
<p>
<a href="{% url admin_development_observers %}">{_ Show an overview of all observers _} ></a>
</p>
</div>
</div>
<div class="widget">
<div class="widget-header">
{_ Function Call Tracing _}
</div>
<div class="widget-content">
<p>{_ Live trace of function calls on the server (only for the admin user). _}</p>
{% if m.acl.user == 1 %}
<p>
<a href="{% url admin_development_function_trace %}">{_ Trace function calls _} ></a>
</p>
{% else %}
<p class="alert alert-info">
{_ Only the admin user can use function call tracing. _}
</p>
{% endif %}
</div>
</div>
{% else %}
<div class="alert alert-danger">
{_ You do not have permission to access development tools. _}
</div>
{% endif %}
{% endblock %}