Move rendering into private templates

Add an explicit template renderer with HTML views and partials for the app, bootstrap, package, and catalog pages. Move shared reporting setup into config/reporting.php and relocate stylesheet assets under css/.
This commit is contained in:
www-data
2026-05-26 12:50:26 +02:00
parent 2f2e8869d6
commit 475765e31f
55 changed files with 2328 additions and 1175 deletions
@@ -0,0 +1,5 @@
<tr class="{{status_class}}">
<td><code>{{token}}</code></td>
<td>{{created_at}}</td>
<td>{{expires_at}}</td>
</tr>
@@ -0,0 +1,8 @@
<table>
<tr>
<th>{{token_label}}</th>
<th>{{created_at_label}}</th>
<th>{{expires_at_label}}</th>
</tr>
{{{token_rows_html}}}
</table>
@@ -0,0 +1 @@
<span class="small">({{admin_label}})</span>
@@ -0,0 +1 @@
<input type="hidden" name="{{name}}" value="{{value}}">
@@ -0,0 +1,9 @@
<form class="header-language-form" method="get" action="{{language_action}}">
{{{hidden_inputs_html}}}
<label>
{{language_label}}
<select name="lang" onchange="this.form.submit()">
{{{language_options_html}}}
</select>
</label>
</form>
@@ -0,0 +1,5 @@
<span class="nav-separator" aria-hidden="true">|</span>
<form class="header-action-form" method="post" action="{{logout_action}}">
<input type="hidden" name="action" value="logout">
<button type="submit">{{logout_label}}</button>
</form>
@@ -0,0 +1 @@
<strong>{{label}}</strong>
@@ -0,0 +1 @@
<a href="{{url}}">{{label}}</a>
@@ -0,0 +1 @@
<span class="nav-separator" aria-hidden="true">|</span>
+6
View File
@@ -0,0 +1,6 @@
<span class="nav-separator" aria-hidden="true">|</span>
<span class="nav-user">
{{user_prefix}}
{{display_name}}
{{{admin_html}}}
</span>
@@ -0,0 +1,11 @@
<h3>{{generated_link_label}}</h3>
<div class="generated-link-row">
<a href="{{issued_link}}" target="_blank" rel="noopener noreferrer">{{issued_link}}</a>
<button type="button"
class="js-copy-button"
data-copy-text="{{issued_link}}"
data-copy-label="{{copy_label}}"
data-copied-label="{{copied_label}}">
{{copy_label}}
</button>
</div>
@@ -0,0 +1,21 @@
<div class="bootstrap-prompt-tool">
<label>
{{select_prompt_label}}<br>
<select id="bootstrapPromptSelect">
{{{prompt_options_html}}}
</select>
</label>
<textarea id="bootstrapPromptOutput" readonly rows="12"></textarea>
<button type="button"
class="js-copy-button"
data-copy-target="bootstrapPromptOutput"
data-copy-label="{{copy_label}}"
data-copied-label="{{copied_label}}">
{{copy_full_prompt_label}}
</button>
</div>
<script type="application/json" id="bootstrapPromptData">
{{{bootstrap_prompt_json}}}
</script>
@@ -0,0 +1,6 @@
<div>
<h3>{{copy_full_prompt_label}}</h3>
<p>{{bootstrap_prompt_help}}</p>
{{{prompt_tool_html}}}
</div>
+1
View File
@@ -0,0 +1 @@
<p><a href="/login.php">{{login_label}}</a></p>
+1
View File
@@ -0,0 +1 @@
<div class="{{class}}">{{message}}</div>
@@ -0,0 +1,6 @@
<tr id="pkg-{{id}}">
<td>{{index}}</td>
<td class="pkg-name">
<a class="pkg-link" href="{{url}}">{{name}}</a>
</td>
</tr>
@@ -0,0 +1,5 @@
<tr>
<td>{{number}}</td>
<td>{{base64_bytes}}</td>
<td><a href="{{url}}">{{url}}</a></td>
</tr>
@@ -0,0 +1 @@
<tr><th>{{label}}</th><td>{{{value_html}}}</td></tr>
+1
View File
@@ -0,0 +1 @@
<p class="{{class}}">{{text}}</p>
@@ -0,0 +1,4 @@
<div class="default-admin-notice">
<strong>{{badge}}</strong>
<span>{{hint}}</span>
</div>
@@ -0,0 +1,15 @@
<details class="create-drawer">
<summary>{{create_default_label}}</summary>
<form method="post" action="/prompts?lang={{language_url}}&mode=defaults">
<input type="hidden" name="action" value="create_default">
<label>{{default_key_label}}<br><input type="text" name="default_key" placeholder="bootstrap-racket"></label>
<label>{{name_label}}<br><input type="text" name="name"></label>
<label>{{language_label}}<br>
<select name="language">
{{{language_options_html}}}
</select>
</label>
<label>{{prompt_content_label}}<br><textarea name="content" rows="7"></textarea></label>
<button type="submit">{{create_default_label}}</button>
</form>
</details>
@@ -0,0 +1,6 @@
<form method="post" action="/prompts?lang={{language_url}}&mode=defaults"
onsubmit="return confirm({{{confirm_json}}});">
<input type="hidden" name="action" value="delete_default">
<input type="hidden" name="default_id" value="{{id}}">
<button type="submit">{{delete_label}}</button>
</form>
@@ -0,0 +1,17 @@
<div class="prompt-list-item default-prompt-item">
<button type="button"
class="prompt-select js-open-prompt"
data-kind="default"
data-id="{{id}}">
<span class="prompt-name">{{name}}</span>
<span class="prompt-subline">{{{metadata}}}</span>
</button>
<form method="post" action="/prompts?lang={{language_url}}&mode=personal">
<input type="hidden" name="action" value="copy_default">
<input type="hidden" name="default_id" value="{{id}}">
<button type="submit">{{copy_label}}</button>
</form>
{{{admin_delete_html}}}
</div>
@@ -0,0 +1,15 @@
<div class="prompt-list-item">
<button type="button"
class="prompt-select js-open-prompt"
data-kind="personal"
data-id="{{id}}">
<span class="prompt-name">{{name}}</span>
<span class="prompt-subline">{{metadata}}</span>
</button>
<form method="post" action="/prompts?lang={{language_url}}&mode=personal"
onsubmit="return confirm({{{confirm_json}}});">
<input type="hidden" name="action" value="delete_prompt">
<input type="hidden" name="prompt_id" value="{{id}}">
<button type="submit">{{delete_label}}</button>
</form>
</div>
@@ -0,0 +1,6 @@
<tr>
<td>{{index}}</td>
<td>{{number}}</td>
<td>{{size}}</td>
<td><a href="{{url}}">{{url}}</a></td>
</tr>
@@ -0,0 +1 @@
<option value="{{value}}"{{{selected}}}>{{label}}</option>
@@ -0,0 +1,6 @@
<form method="post" action="/users?lang={{language_url}}"
onsubmit="return confirm({{{confirm_json}}});">
<input type="hidden" name="action" value="delete_user">
<input type="hidden" name="user_id" value="{{user_id}}">
<button type="submit">{{delete_user_label}}</button>
</form>
+27
View File
@@ -0,0 +1,27 @@
<tr>
<td colspan="7">
<form method="post" action="/users?lang={{language_url}}" class="user-row-form">
<input type="hidden" name="action" value="update_user">
<input type="hidden" name="user_id" value="{{user_id}}">
<label>{{full_name_label}}<br><input type="text" name="full_name" value="{{full_name}}" required></label>
<label>{{email_label}}<br><input type="email" name="email" value="{{email}}" required></label>
<label><input type="checkbox" name="is_admin" value="1"{{{is_admin_checked}}}> {{admin_label}}</label>
<label><input type="checkbox" name="is_enabled" value="1"{{{is_enabled_checked}}}> {{enabled_label}}</label>
<span>{{created_at}}</span>
<span>{{last_login_at}}</span>
<button type="submit">{{update_user_label}}</button>
</form>
<div class="user-row-actions">
<form method="post" action="/users?lang={{language_url}}">
<input type="hidden" name="action" value="set_password">
<input type="hidden" name="email" value="{{email}}">
<label>{{new_password_label}}<br><input type="password" name="password" autocomplete="new-password"></label>
<button type="submit">{{change_password_label}}</button>
</form>
{{{delete_html}}}
</div>
</td>
</tr>
@@ -0,0 +1 @@
<p class="small">{{cannot_delete_self}}</p>