mirror of
https://github.com/osmarks/mycorrhiza.git
synced 2024-10-30 11:46:16 +00:00
bd6b46f346
Encapsulate translations, but still use QTPL. Hmm
205 lines
6.5 KiB
Plaintext
205 lines
6.5 KiB
Plaintext
{% import "fmt" %}
|
|
{% import "path/filepath" %}
|
|
|
|
{% import "github.com/bouncepaw/mycorrhiza/cfg" %}
|
|
{% import "github.com/bouncepaw/mycorrhiza/hyphae" %}
|
|
{% import "github.com/bouncepaw/mycorrhiza/user" %}
|
|
{% import "github.com/bouncepaw/mycorrhiza/util" %}
|
|
{% import "github.com/bouncepaw/mycorrhiza/l18n" %}
|
|
|
|
{% func BaseHTML(title, body string, lc *l18n.Localizer, u *user.User, headElements ...string) %}
|
|
<!doctype html>
|
|
<html lang="{%s lc.Locale %}">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>{%s title %}</title>
|
|
<link rel="shortcut icon" href="/static/favicon.ico">
|
|
<link rel="stylesheet" href="/static/style.css">
|
|
<script src="/static/shortcuts.js"></script>
|
|
{% for _, el := range headElements %}{%s= el %}{% endfor %}
|
|
</head>
|
|
<body>
|
|
<header>
|
|
<nav class="main-width top-bar">
|
|
<ul class="top-bar__wrapper">
|
|
<li class="top-bar__section top-bar__section_home">
|
|
<div class="top-bar__home-link-wrapper">
|
|
<a class="top-bar__home-link" href="/">{%s cfg.WikiName %}</a>
|
|
</div>
|
|
</li>
|
|
<li class="top-bar__section top-bar__section_search">
|
|
<form class="top-bar__search" method="GET" action="/title-search">
|
|
<input type="text" name="q" placeholder="{%s lc.Get("ui.title_search") %}" class="top-bar__search-bar">
|
|
</form>
|
|
</li>
|
|
<li class="top-bar__section top-bar__section_auth">
|
|
{% if cfg.UseAuth %}
|
|
<ul class="top-bar__auth auth-links">
|
|
<li class="auth-links__box auth-links__user-box">
|
|
{% if u.Group == "anon" %}
|
|
<a href="/login" class="auth-links__link auth-links__login-link">{%s lc.Get("ui.login") %}</a>
|
|
{% else %}
|
|
<a href="/hypha/{%s cfg.UserHypha %}/{%s u.Name %}" class="auth-links__link auth-links__user-link">{%s util.BeautifulName(u.Name) %}</a>
|
|
{% endif %}
|
|
</li>
|
|
{% if cfg.AllowRegistration && u.Group == "anon" %}
|
|
<li class="auth-links__box auth-links__register-box">
|
|
<a href="/register" class="auth-links__link auth-links__register-link">{%s lc.Get("ui.register") %}</a>
|
|
</li>
|
|
{% endif %}
|
|
</ul>
|
|
{% endif %}
|
|
</li>
|
|
<li class="top-bar__section top-bar__section_highlights">
|
|
<ul class="top-bar__highlights">
|
|
{%- for _, link := range cfg.HeaderLinks -%}
|
|
{% if link.Href != "/" %}
|
|
<li class="top-bar__highlight">
|
|
<a class="top-bar__highlight-link" href="{%s link.Href %}">{%s link.Display %}</a>
|
|
</li>
|
|
{% endif %}
|
|
{%- endfor -%}
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
</header>
|
|
{%s= body %}
|
|
<template id="dialog-template">
|
|
<div class="dialog-backdrop"></div>
|
|
<div class="dialog" tabindex="0">
|
|
<div class="dialog__header">
|
|
<h1 class="dialog__title"></h1>
|
|
<button class="dialog__close-button" aria-label="{%s lc.Get("ui.close_dialog") %}"></button>
|
|
</div>
|
|
|
|
<div class="dialog__content"></div>
|
|
</div>
|
|
</template>
|
|
{%= CommonScripts() %}
|
|
<script src="/static/view.js"></script>
|
|
</body>
|
|
</html>
|
|
{% endfunc %}
|
|
|
|
{% func TitleSearchHTML(query string, generator func(string) <-chan string, lc *l18n.Localizer) %}
|
|
<div class="layout">
|
|
<main class="main-width title-search">
|
|
<h1>{%s lc.Get("ui.search_results_query", &l18n.Replacements{"query": query})%}</h1>
|
|
<p>{%s lc.Get("ui.search_results_desc")%}</p>
|
|
<ul class="title-search__results">
|
|
{% for hyphaName := range generator(query) %}
|
|
<li class="title-search__entry">
|
|
<a class="title-search__link wikilink" href="/hypha/{%s hyphaName %}">{%s util.BeautifulName(hyphaName) %}</a>
|
|
</li>
|
|
{% endfor %}
|
|
</main>
|
|
</div>
|
|
{% endfunc %}
|
|
|
|
It outputs a poorly formatted JSON, but it works and is valid.
|
|
{% func TitleSearchJSON(query string, generator func(string) <-chan string) %}
|
|
{% code
|
|
// Lol
|
|
counter := 0
|
|
%}
|
|
{
|
|
"source_query": "{%s query %}",
|
|
"results": [
|
|
{% for hyphaName := range generator(query) %}
|
|
{% if counter > 0 %}, {% endif %}{
|
|
"canonical_name": "{%s hyphaName %}",
|
|
"beautiful_name": "{%s util.BeautifulName(hyphaName) %}",
|
|
"url": "{%s cfg.URL + "/hypha/" + hyphaName %}"
|
|
}{% code counter++ %}
|
|
{% endfor %}
|
|
]
|
|
}
|
|
{% endfunc %}
|
|
|
|
{% func BacklinksHTML(hyphaName string, generator func(string) <-chan string, lc *l18n.Localizer) %}
|
|
<div class="layout">
|
|
<main class="main-width backlinks">
|
|
<h1>{%s= lc.Get(
|
|
"ui.backlinks_heading",
|
|
&l18n.Replacements{
|
|
"hypha_link": fmt.Sprintf(
|
|
`<a href="/hypha/%s">%s</a>`,
|
|
hyphaName,
|
|
util.BeautifulName(hyphaName),
|
|
),
|
|
},
|
|
)%}</h1>
|
|
<p>{%s lc.Get("ui.backlinks_desc")%}</p>
|
|
<ul class="backlinks__list">
|
|
{% for hyphaName := range generator(hyphaName) %}
|
|
<li class="backlinks__entry">
|
|
<a class="backlinks__link wikilink" href="/hypha/{%s hyphaName %}">{%s util.BeautifulName(hyphaName) %}</a>
|
|
</li>
|
|
{% endfor %}
|
|
</ul>
|
|
</main>
|
|
</div>
|
|
{% endfunc %}
|
|
|
|
{% func HelpHTML(content, lang string, lc *l18n.Localizer) %}
|
|
<div class="layout">
|
|
<main class="main-width help">
|
|
<article>
|
|
{%s= content %}
|
|
</article>
|
|
</main>
|
|
{%s= helpTopicsHTML(lang, lc) %}
|
|
</div>
|
|
{% endfunc %}
|
|
|
|
{% func HelpEmptyErrorHTML(lc *l18n.Localizer) %}
|
|
<h1>{%s lc.Get("help.empty_error_title") %}</h1>
|
|
<p>{%s lc.Get("help.empty_error_line_1") %}</p>
|
|
<p>{%s lc.Get("help.empty_error_line_2a") %} <a class="wikilink wikilink_external wikilink_https" href="https://github.com/bouncepaw/mycorrhiza">{%s lc.Get("help.empty_error_link") %}</a> {%s lc.Get("help.empty_error_line_2b") %}</p>
|
|
{% endfunc %}
|
|
|
|
{% func helpTopicBadgeHTML(lang, topic string) %}
|
|
<a class="help-topic-badge" href="/help/en/{%s topic %}">?</a>
|
|
{% endfunc %}
|
|
|
|
{% func HyphaListHTML(lc *l18n.Localizer) %}
|
|
<div class="layout">
|
|
<main class="main-width">
|
|
<h1>{%s lc.Get("ui.list_heading") %}</h1>
|
|
<p>{%s lc.GetPlural("ui.list_desc", hyphae.Count()) %}</p>
|
|
<ul class="hypha-list">
|
|
{% code
|
|
hyphaNames := make(chan string)
|
|
sortedHypha := hyphae.PathographicSort(hyphaNames)
|
|
for hypha := range hyphae.YieldExistingHyphae() {
|
|
hyphaNames <- hypha.CanonicalName()
|
|
}
|
|
close(hyphaNames)
|
|
%}
|
|
{% for hyphaName := range sortedHypha %}
|
|
{% code h := hyphae.ByName(hyphaName) %}
|
|
<li class="hypha-list__entry">
|
|
<a class="hypha-list__link" href="/hypha/{%s h.CanonicalName() %}">
|
|
{%s util.BeautifulName(h.CanonicalName()) %}
|
|
</a>
|
|
{% switch h := h.(type) %}
|
|
{% case *hyphae.MediaHypha %}
|
|
<span class="hypha-list__amnt-type">
|
|
{%s filepath.Ext(h.MediaFilePath())[1:] %}
|
|
</span>
|
|
{% endswitch %}
|
|
</li>
|
|
{% endfor %}
|
|
</ul>
|
|
</main>
|
|
</div>
|
|
{% endfunc %}
|
|
|
|
{% func CommonScripts() %}
|
|
{% for _, scriptPath := range cfg.CommonScripts %}
|
|
<script src="{%s scriptPath %}"></script>
|
|
{% endfor %}
|
|
{% endfunc %}
|