Files
mans 7efc16cf06
Build docker container / Build image (push) Successful in 5m27s
refactor: extract DRY template layout and add localized page titles
2026-08-05 17:43:40 +02:00

82 lines
2.3 KiB
HTML

{{ template "layout" . }}
{{ define "page_title" }}{{ .T.TitleSimple }}{{ end }}
{{ define "extra_css" }}
body {
font-size: 2rem;
height: 100vh;
padding: 0;
}
ul {
max-width: 90%;
}
li {
padding: 15px 0px;
}
@media (min-width: 600px) {
body { font-size: 3rem; padding: 0 20px; }
}
@media (min-width: 900px) {
body { font-size: 4rem; }
}
{{ end }}
{{ define "content" }}
<ul id="ips">
<li><span class="label">{{ .NetAddress.Type }}: </span><b>{{ .NetAddress.Address }}</b></li>
</ul>
{{ end }}
{{ define "nav_links" }}
<a href="/advanced" class="nav-link">{{ .T.AdvancedView }}</a>
<span style="border-left: 1px solid var(--divider-color); height: 18px; margin: 0 15px;"></span>
<a href="/headers" class="nav-link">{{ .T.HeadersView }}</a>
<span style="border-left: 1px solid var(--divider-color); height: 18px; margin: 0 15px;"></span>
<a id="copy-btn" class="nav-link">{{ .T.CopyInfo }}</a>
{{ end }}
{{ define "extra_js" }}
async function getIp() {
const isIpv4 = "{{ .NetAddress.Type }}" == "IPv4";
let requestUrl = isIpv4 ? "{{ .IPv6Endpoint }}" : "{{ .IPv4Endpoint }}";
const response = await fetch(requestUrl);
const data = await response.json();
const ul = document.getElementById("ips")
if (data.address) {
let child = document.createElement("li");
let span = document.createElement("span");
span.className = "label";
span.textContent = data.type + ": ";
let b = document.createElement("b");
b.textContent = data.address;
child.appendChild(span);
child.appendChild(b);
ul.appendChild(child);
}
}
getIp();
document.getElementById('copy-btn').addEventListener('click', async (e) => {
e.preventDefault();
let info = [];
document.querySelectorAll('#ips li').forEach(li => info.push(li.innerText));
try {
await navigator.clipboard.writeText(info.join('\n'));
const btn = document.getElementById('copy-btn');
btn.innerText = '{{ .T.Copied }}';
setTimeout(() => btn.innerText = '{{ .T.CopyInfo }}', 2000);
} catch (err) {
console.error('Failed to copy', err);
}
});
{{ end }}