1
0
mirror of https://github.com/osmarks/mycorrhiza.git synced 2025-11-06 18:43:03 +00:00

Merge l18n with master updates

This commit is contained in:
Mikhail Chekan
2021-09-27 17:06:25 +08:00
19 changed files with 608 additions and 508 deletions

4
go.mod
View File

@@ -3,7 +3,7 @@ module github.com/bouncepaw/mycorrhiza
go 1.16 go 1.16
require ( require (
github.com/bouncepaw/mycomarkup/v2 v2.0.3 github.com/bouncepaw/mycomarkup/v2 v2.1.0
github.com/go-ini/ini v1.62.0 github.com/go-ini/ini v1.62.0
github.com/gorilla/feeds v1.1.1 github.com/gorilla/feeds v1.1.1
github.com/gorilla/mux v1.8.0 github.com/gorilla/mux v1.8.0
@@ -19,7 +19,7 @@ require (
) )
// Use this trick to test mycomarkup: // Use this trick to test mycomarkup:
// replace github.com/bouncepaw/mycomarkup/v2 v2.0.0 => "/Users/bouncepaw/GolandProjects/mycomarkup" // replace github.com/bouncepaw/mycomarkup/v2 v2.1.0 => "/Users/bouncepaw/GolandProjects/mycomarkup"
// Use this utility every time Mycomarkup gets broken: // Use this utility every time Mycomarkup gets broken:
// https://github.com/marwan-at-work/mod // https://github.com/marwan-at-work/mod

6
go.sum
View File

@@ -1,10 +1,8 @@
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
github.com/bouncepaw/mycomarkup/v2 v2.0.2 h1:BT7waogdo7KH7PVqksfmj60j8MFCcmu998oKaPnTfh0= github.com/bouncepaw/mycomarkup/v2 v2.1.0 h1:9ZtgiovBaL9xXLGLoXQG8Jgb1VtZ3mlyU5qPn3BGx+4=
github.com/bouncepaw/mycomarkup/v2 v2.0.2/go.mod h1:sIvtvJFGG61ZeSUC+fNBrFmrQ2xBpTMZezk/QtxiQbk= github.com/bouncepaw/mycomarkup/v2 v2.1.0/go.mod h1:sIvtvJFGG61ZeSUC+fNBrFmrQ2xBpTMZezk/QtxiQbk=
github.com/bouncepaw/mycomarkup/v2 v2.0.3 h1:qIO69XA9lZA87HbMPXhk9R4OL0aF0JJQcKOTx3ZjMIo=
github.com/bouncepaw/mycomarkup/v2 v2.0.3/go.mod h1:sIvtvJFGG61ZeSUC+fNBrFmrQ2xBpTMZezk/QtxiQbk=
github.com/go-ini/ini v1.62.0 h1:7VJT/ZXjzqSrvtraFp4ONq80hTcRQth1c9ZnQ3uNQvU= github.com/go-ini/ini v1.62.0 h1:7VJT/ZXjzqSrvtraFp4ONq80hTcRQth1c9ZnQ3uNQvU=
github.com/go-ini/ini v1.62.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-ini/ini v1.62.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=

19
help/en/prevnext.myco Normal file
View File

@@ -0,0 +1,19 @@
# Previous/next
Under every hypha there is a **previous/next** section with quick links to previous and next hyphae alphabetically.
This design encourages you to name your hyphae in such a way that clicking through these links would make sense. For example, if you are storing pages of a book, you should name them //p01//, //p02//, //p03//, etc.
It is impossible to change what hyphae are linked in this section. If you want to provide a different means of sequential navigation, just place some links by yourself.
## Hotkeys
Press `n` to go to the **n**ext page, press `p` to go to the **p**revious page.
## For administrators: how to remove these links
For some wikis, these links make little or no sense. In this case, it is better to hide them.
In file `your-wiki/static/custom.css` write this:
```css
.prevnext { display: none; }
```
The section would still be there, but no one will see it. The hotkeys will still work.

19
help/ru/prevnext.myco Normal file
View File

@@ -0,0 +1,19 @@
# Назад/далее
Под каждой гифой есть раздел **«назад/далее»** с быстрыми ссылками на предыдущую и следующую гифы по алфавитному порядку.
Эта функция подталкивает вас именовать гифы так, чтобы использование этих ссылок имело смысл. Например, если вы храните страницы книги, вам стоит проименовать их //p01//, //p02//, //p03// и т.д.
Невозможно изменить гифы, на которую ведут ссылки этого раздела. Если вы хотите предоставить другой способ последовательной навигации, проставьте собственные ссылки.
## Горячие клавиши
Нажмите `n` (**n**ext), чтобы перейти на следующую страницу. Для перехода на предыдущую, нажмите `p` (**p**revious).
## Для администраторов: как убрать эти ссылки
Для некоторых вики эти ссылки несут мало смысла или не несут вовсе. В таком случае лучше их скрыть.
В файле `your-wiki/static/custom.css` пропишите следующее:
```css
.prevnext { display: none; }
```
Раздел останется на месте, но никто его не увидит. Горячие клавиши всё ещё будут работать.

View File

@@ -2,8 +2,8 @@
package hyphae package hyphae
import ( import (
"strings"
"sort" "sort"
"strings"
) )
// YieldExistingHyphae iterates over all hyphae and yields all existing ones. // YieldExistingHyphae iterates over all hyphae and yields all existing ones.
@@ -48,14 +48,22 @@ func PathographicSort(src chan string) <-chan string {
// Classic lexicographical sort with a twist // Classic lexicographical sort with a twist
c := 0 c := 0
for { for {
if c == len(raw[i]) { return true } if c == len(raw[i]) {
if c == len(raw[j]) { return false } return true
}
if c == len(raw[j]) {
return false
}
if raw[i][c] == raw[j][c] { if raw[i][c] == raw[j][c] {
c++ c++
} else { } else {
// The twist: subhyphae-awareness is about pushing slash upwards // The twist: subhyphae-awareness is about pushing slash upwards
if raw[i][c] == slash { return true } if raw[i][c] == slash {
if raw[j][c] == slash { return false } return true
}
if raw[j][c] == slash {
return false
}
return raw[i][c] < raw[j][c] return raw[i][c] < raw[j][c]
} }
} }

View File

@@ -1,6 +1,6 @@
// Code generated by go-localize; DO NOT EDIT. // Code generated by go-localize; DO NOT EDIT.
// This file was generated by robots at // This file was generated by robots at
// 2021-09-27 16:30:27.741694276 +0800 +08 m=+0.002576981 // 2021-09-27 16:59:07.562882425 +0800 +08 m=+0.002415944
package l18n package l18n
@@ -109,6 +109,7 @@ var localizations = map[string]string{
"en.help.lock": "Lock", "en.help.lock": "Lock",
"en.help.main": "Main", "en.help.main": "Main",
"en.help.mycomarkup": "Mycomarkup", "en.help.mycomarkup": "Mycomarkup",
"en.help.prevnext": "Previous/next",
"en.help.recent_changes": "Recent changes", "en.help.recent_changes": "Recent changes",
"en.help.sibling_hyphae": "Sibling hyphae", "en.help.sibling_hyphae": "Sibling hyphae",
"en.help.special_pages": "Special pages", "en.help.special_pages": "Special pages",
@@ -210,6 +211,7 @@ var localizations = map[string]string{
"en.ui.rename_recurse": "Rename subhyphae too", "en.ui.rename_recurse": "Rename subhyphae too",
"en.ui.rename_tip": "If you rename this hypha, all incoming links and all relative outcoming links will break. You will also lose all history for the new name. Rename carefully.", "en.ui.rename_tip": "If you rename this hypha, all incoming links and all relative outcoming links will break. You will also lose all history for the new name. Rename carefully.",
"en.ui.rename_to": "New name", "en.ui.rename_to": "New name",
"en.ui.revision_link": "Get Mycomarkup source of this revision",
"en.ui.revision_no_text": "This hypha had no text at this revision.", "en.ui.revision_no_text": "This hypha had no text at this revision.",
"en.ui.revision_title": "{{.name}} at {{.rev}}", "en.ui.revision_title": "{{.name}} at {{.rev}}",
"en.ui.revision_warning": "Please note that viewing attachments of hyphae is not supported in history for now.", "en.ui.revision_warning": "Please note that viewing attachments of hyphae is not supported in history for now.",
@@ -322,6 +324,7 @@ var localizations = map[string]string{
"ru.help.lock": "Блокировка", "ru.help.lock": "Блокировка",
"ru.help.main": "Введение", "ru.help.main": "Введение",
"ru.help.mycomarkup": "Микоразметка", "ru.help.mycomarkup": "Микоразметка",
"ru.help.prevnext": "Назад/далее",
"ru.help.recent_changes": "Недавние изменения", "ru.help.recent_changes": "Недавние изменения",
"ru.help.sibling_hyphae": "Гифы-сиблинги", "ru.help.sibling_hyphae": "Гифы-сиблинги",
"ru.help.special_pages": "Специальные страницы", "ru.help.special_pages": "Специальные страницы",
@@ -427,6 +430,7 @@ var localizations = map[string]string{
"ru.ui.rename_recurse": "Также переименовать подгифы", "ru.ui.rename_recurse": "Также переименовать подгифы",
"ru.ui.rename_tip": "Если вы переименуете эту гифу, сломаются все ссылки, ведущие на неё, а также исходящие относительные ссылки. Также вы потеряете всю текущую историю для нового названия. Переименовывайте аккуратно.", "ru.ui.rename_tip": "Если вы переименуете эту гифу, сломаются все ссылки, ведущие на неё, а также исходящие относительные ссылки. Также вы потеряете всю текущую историю для нового названия. Переименовывайте аккуратно.",
"ru.ui.rename_to": "Новое название", "ru.ui.rename_to": "Новое название",
"ru.ui.revision_link": "Посмотреть код микоразметки для этой ревизии",
"ru.ui.revision_no_text": "В этой ревизии гифы не было текста.", "ru.ui.revision_no_text": "В этой ревизии гифы не было текста.",
"ru.ui.revision_title": "{{.name}} из {{.rev}}", "ru.ui.revision_title": "{{.name}} из {{.rev}}",
"ru.ui.revision_warning": "Обратите внимание, просмотр вложений в истории гифы пока что недоступен.", "ru.ui.revision_warning": "Обратите внимание, просмотр вложений в истории гифы пока что недоступен.",

View File

@@ -13,6 +13,7 @@
"attachment": "Attachment", "attachment": "Attachment",
"mycomarkup": "Mycomarkup", "mycomarkup": "Mycomarkup",
"interface": "Interface", "interface": "Interface",
"prevnext": "Previous/next",
"top_bar": "Top bar", "top_bar": "Top bar",
"sibling_hyphae": "Sibling hyphae", "sibling_hyphae": "Sibling hyphae",
"special_pages": "Special pages", "special_pages": "Special pages",

View File

@@ -67,6 +67,7 @@
"revision_title": "{{.name}} at {{.rev}}", "revision_title": "{{.name}} at {{.rev}}",
"revision_warning": "Please note that viewing attachments of hyphae is not supported in history for now.", "revision_warning": "Please note that viewing attachments of hyphae is not supported in history for now.",
"revision_link": "Get Mycomarkup source of this revision",
"revision_no_text": "This hypha had no text at this revision.", "revision_no_text": "This hypha had no text at this revision.",
"about_title": "About {{.name}}", "about_title": "About {{.name}}",

View File

@@ -13,6 +13,7 @@
"attachment": "Вложение", "attachment": "Вложение",
"mycomarkup": "Микоразметка", "mycomarkup": "Микоразметка",
"interface": "Интерфейс", "interface": "Интерфейс",
"prevnext": "Назад/далее",
"top_bar": "Верхняя панель", "top_bar": "Верхняя панель",
"sibling_hyphae": "Гифы-сиблинги", "sibling_hyphae": "Гифы-сиблинги",
"special_pages": "Специальные страницы", "special_pages": "Специальные страницы",

View File

@@ -70,6 +70,7 @@
"revision_title": "{{.name}} из {{.rev}}", "revision_title": "{{.name}} из {{.rev}}",
"revision_warning": "Обратите внимание, просмотр вложений в истории гифы пока что недоступен.", "revision_warning": "Обратите внимание, просмотр вложений в истории гифы пока что недоступен.",
"revision_link": "Посмотреть код микоразметки для этой ревизии",
"revision_no_text": "В этой ревизии гифы не было текста.", "revision_no_text": "В этой ревизии гифы не было текста.",
"about_title": "О вики «{{.name}}»", "about_title": "О вики «{{.name}}»",

View File

@@ -1,4 +1,3 @@
// TODO: l18n
{% import "fmt" %} {% import "fmt" %}
{% import "net/http" %} {% import "net/http" %}
{% import "time" %} {% import "time" %}

View File

@@ -1,454 +1,452 @@
// Code generated by qtc from "history.qtpl". DO NOT EDIT. // Code generated by qtc from "history.qtpl". DO NOT EDIT.
// See https://github.com/valyala/quicktemplate for details. // See https://github.com/valyala/quicktemplate for details.
// TODO: l18n //line views/history.qtpl:1
//line views/history.qtpl:2
package views package views
//line views/history.qtpl:2 //line views/history.qtpl:1
import "fmt" import "fmt"
//line views/history.qtpl:3 //line views/history.qtpl:2
import "net/http" import "net/http"
//line views/history.qtpl:4 //line views/history.qtpl:3
import "time" import "time"
//line views/history.qtpl:6 //line views/history.qtpl:5
import "github.com/bouncepaw/mycorrhiza/cfg" import "github.com/bouncepaw/mycorrhiza/cfg"
//line views/history.qtpl:7 //line views/history.qtpl:6
import "github.com/bouncepaw/mycorrhiza/l18n" import "github.com/bouncepaw/mycorrhiza/l18n"
//line views/history.qtpl:8 //line views/history.qtpl:7
import "github.com/bouncepaw/mycorrhiza/user" import "github.com/bouncepaw/mycorrhiza/user"
//line views/history.qtpl:9 //line views/history.qtpl:8
import "github.com/bouncepaw/mycorrhiza/hyphae" import "github.com/bouncepaw/mycorrhiza/hyphae"
//line views/history.qtpl:10 //line views/history.qtpl:9
import "github.com/bouncepaw/mycorrhiza/history" import "github.com/bouncepaw/mycorrhiza/history"
//line views/history.qtpl:13 //line views/history.qtpl:12
import ( import (
qtio422016 "io" qtio422016 "io"
qt422016 "github.com/valyala/quicktemplate" qt422016 "github.com/valyala/quicktemplate"
) )
//line views/history.qtpl:13 //line views/history.qtpl:12
var ( var (
_ = qtio422016.Copy _ = qtio422016.Copy
_ = qt422016.AcquireByteBuffer _ = qt422016.AcquireByteBuffer
) )
//line views/history.qtpl:13 //line views/history.qtpl:12
func StreamPrimitiveDiffHTML(qw422016 *qt422016.Writer, rq *http.Request, h *hyphae.Hypha, u *user.User, hash string) { func StreamPrimitiveDiffHTML(qw422016 *qt422016.Writer, rq *http.Request, h *hyphae.Hypha, u *user.User, hash string) {
//line views/history.qtpl:13 //line views/history.qtpl:12
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/history.qtpl:15 //line views/history.qtpl:14
lc := l18n.FromRequest(rq) lc := l18n.FromRequest(rq)
text, err := history.PrimitiveDiffAtRevision(h.TextPartPath(), hash) text, err := history.PrimitiveDiffAtRevision(h.TextPartPath(), hash)
if err != nil { if err != nil {
text = err.Error() text = err.Error()
} }
//line views/history.qtpl:20 //line views/history.qtpl:19
qw422016.N().S(` qw422016.N().S(`
<div class="layout"> <div class="layout">
<main class="main-width"> <main class="main-width">
<article> <article>
<h1>`) <h1>`)
//line views/history.qtpl:24 //line views/history.qtpl:23
qw422016.N().S(lc.Get("ui.diff_title", &l18n.Replacements{"name": beautifulLink(h.Name), "rev": hash})) qw422016.N().S(lc.Get("ui.diff_title", &l18n.Replacements{"name": beautifulLink(h.Name), "rev": hash}))
//line views/history.qtpl:24 //line views/history.qtpl:23
qw422016.N().S(`</h1> qw422016.N().S(`</h1>
<pre class="codeblock"><code>`) <pre class="codeblock"><code>`)
//line views/history.qtpl:25 //line views/history.qtpl:24
qw422016.E().S(text) qw422016.E().S(text)
//line views/history.qtpl:25 //line views/history.qtpl:24
qw422016.N().S(`</code></pre> qw422016.N().S(`</code></pre>
</article> </article>
</main> </main>
</div> </div>
`) `)
//line views/history.qtpl:29 //line views/history.qtpl:28
} }
//line views/history.qtpl:29 //line views/history.qtpl:28
func WritePrimitiveDiffHTML(qq422016 qtio422016.Writer, rq *http.Request, h *hyphae.Hypha, u *user.User, hash string) { func WritePrimitiveDiffHTML(qq422016 qtio422016.Writer, rq *http.Request, h *hyphae.Hypha, u *user.User, hash string) {
//line views/history.qtpl:29 //line views/history.qtpl:28
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line views/history.qtpl:29 //line views/history.qtpl:28
StreamPrimitiveDiffHTML(qw422016, rq, h, u, hash) StreamPrimitiveDiffHTML(qw422016, rq, h, u, hash)
//line views/history.qtpl:29 //line views/history.qtpl:28
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line views/history.qtpl:29 //line views/history.qtpl:28
} }
//line views/history.qtpl:29 //line views/history.qtpl:28
func PrimitiveDiffHTML(rq *http.Request, h *hyphae.Hypha, u *user.User, hash string) string { func PrimitiveDiffHTML(rq *http.Request, h *hyphae.Hypha, u *user.User, hash string) string {
//line views/history.qtpl:29 //line views/history.qtpl:28
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line views/history.qtpl:29 //line views/history.qtpl:28
WritePrimitiveDiffHTML(qb422016, rq, h, u, hash) WritePrimitiveDiffHTML(qb422016, rq, h, u, hash)
//line views/history.qtpl:29 //line views/history.qtpl:28
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line views/history.qtpl:29 //line views/history.qtpl:28
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line views/history.qtpl:29 //line views/history.qtpl:28
return qs422016 return qs422016
//line views/history.qtpl:29 //line views/history.qtpl:28
} }
//line views/history.qtpl:31 //line views/history.qtpl:30
func StreamRecentChangesHTML(qw422016 *qt422016.Writer, n int, lc *l18n.Localizer) { func StreamRecentChangesHTML(qw422016 *qt422016.Writer, n int, lc *l18n.Localizer) {
//line views/history.qtpl:31 //line views/history.qtpl:30
qw422016.N().S(` qw422016.N().S(`
<div class="layout"> <div class="layout">
<main class="main-width recent-changes"> <main class="main-width recent-changes">
<h1>`) <h1>`)
//line views/history.qtpl:34 //line views/history.qtpl:33
qw422016.E().S(lc.Get("ui.recent_heading")) qw422016.E().S(lc.Get("ui.recent_heading"))
//line views/history.qtpl:34 //line views/history.qtpl:33
qw422016.N().S(`</h1> qw422016.N().S(`</h1>
<nav class="recent-changes__count"> <nav class="recent-changes__count">
`) `)
//line views/history.qtpl:37 //line views/history.qtpl:36
qw422016.E().S(lc.Get("ui.recent_count_pre")) qw422016.E().S(lc.Get("ui.recent_count_pre"))
//line views/history.qtpl:37 //line views/history.qtpl:36
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/history.qtpl:38 //line views/history.qtpl:37
for i, m := range []int{20, 50, 100} { for i, m := range []int{20, 50, 100} {
//line views/history.qtpl:38 //line views/history.qtpl:37
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/history.qtpl:39 //line views/history.qtpl:38
if i > 0 { if i > 0 {
//line views/history.qtpl:39 //line views/history.qtpl:38
qw422016.N().S(` qw422016.N().S(`
<span aria-hidden="true">|</span> <span aria-hidden="true">|</span>
`) `)
//line views/history.qtpl:41 //line views/history.qtpl:40
} }
//line views/history.qtpl:41 //line views/history.qtpl:40
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/history.qtpl:42 //line views/history.qtpl:41
if m == n { if m == n {
//line views/history.qtpl:42 //line views/history.qtpl:41
qw422016.N().S(` qw422016.N().S(`
<b>`) <b>`)
//line views/history.qtpl:43 //line views/history.qtpl:42
qw422016.N().D(m) qw422016.N().D(m)
//line views/history.qtpl:43 //line views/history.qtpl:42
qw422016.N().S(`</b> qw422016.N().S(`</b>
`) `)
//line views/history.qtpl:44 //line views/history.qtpl:43
} else { } else {
//line views/history.qtpl:44 //line views/history.qtpl:43
qw422016.N().S(` qw422016.N().S(`
<a href="/recent-changes/`) <a href="/recent-changes/`)
//line views/history.qtpl:45 //line views/history.qtpl:44
qw422016.N().D(m) qw422016.N().D(m)
//line views/history.qtpl:45 //line views/history.qtpl:44
qw422016.N().S(`">`) qw422016.N().S(`">`)
//line views/history.qtpl:45 //line views/history.qtpl:44
qw422016.N().D(m) qw422016.N().D(m)
//line views/history.qtpl:45 //line views/history.qtpl:44
qw422016.N().S(`</a> qw422016.N().S(`</a>
`) `)
//line views/history.qtpl:46 //line views/history.qtpl:45
} }
//line views/history.qtpl:46 //line views/history.qtpl:45
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/history.qtpl:47 //line views/history.qtpl:46
} }
//line views/history.qtpl:47 //line views/history.qtpl:46
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/history.qtpl:48 //line views/history.qtpl:47
qw422016.E().S(lc.Get("ui.recent_count_post")) qw422016.E().S(lc.Get("ui.recent_count_post"))
//line views/history.qtpl:48 //line views/history.qtpl:47
qw422016.N().S(` qw422016.N().S(`
</nav> </nav>
<p><img class="icon" width="20" height="20" src="/static/icon/feed.svg">`) <p><img class="icon" width="20" height="20" src="/static/icon/feed.svg">`)
//line views/history.qtpl:51 //line views/history.qtpl:50
qw422016.N().S(lc.Get("ui.recent_subscribe", &l18n.Replacements{"rss": "<a href=\"/recent-changes-rss\">RSS</a>", "atom": "<a href=\"/recent-changes-atom\">Atom</a>", "json": fmt.Sprintf("<a href=\"/recent-changes-json\">%s</a>", lc.Get("ui.recent_subscribe_json"))})) qw422016.N().S(lc.Get("ui.recent_subscribe", &l18n.Replacements{"rss": "<a href=\"/recent-changes-rss\">RSS</a>", "atom": "<a href=\"/recent-changes-atom\">Atom</a>", "json": fmt.Sprintf("<a href=\"/recent-changes-json\">%s</a>", lc.Get("ui.recent_subscribe_json"))}))
//line views/history.qtpl:51 //line views/history.qtpl:50
qw422016.N().S(`</p> qw422016.N().S(`</p>
`) `)
//line views/history.qtpl:58 //line views/history.qtpl:57
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/history.qtpl:61 //line views/history.qtpl:60
changes := history.RecentChanges(n) changes := history.RecentChanges(n)
var year, day int var year, day int
var month time.Month var month time.Month
//line views/history.qtpl:64 //line views/history.qtpl:63
qw422016.N().S(` qw422016.N().S(`
<section class="recent-changes__list" role="feed"> <section class="recent-changes__list" role="feed">
`) `)
//line views/history.qtpl:66 //line views/history.qtpl:65
if len(changes) == 0 { if len(changes) == 0 {
//line views/history.qtpl:66 //line views/history.qtpl:65
qw422016.N().S(` qw422016.N().S(`
<p>`) <p>`)
//line views/history.qtpl:67 //line views/history.qtpl:66
qw422016.E().S(lc.Get("ui.recent_empty")) qw422016.E().S(lc.Get("ui.recent_empty"))
//line views/history.qtpl:67 //line views/history.qtpl:66
qw422016.N().S(`</p> qw422016.N().S(`</p>
`) `)
//line views/history.qtpl:68 //line views/history.qtpl:67
} else { } else {
//line views/history.qtpl:68 //line views/history.qtpl:67
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/history.qtpl:69 //line views/history.qtpl:68
for i, entry := range changes { for i, entry := range changes {
//line views/history.qtpl:69 //line views/history.qtpl:68
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/history.qtpl:71 //line views/history.qtpl:70
y, m, d := entry.Time.UTC().Date() y, m, d := entry.Time.UTC().Date()
//line views/history.qtpl:71 //line views/history.qtpl:70
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/history.qtpl:72 //line views/history.qtpl:71
if d != day || m != month || y != year { if d != day || m != month || y != year {
//line views/history.qtpl:72 //line views/history.qtpl:71
qw422016.N().S(` qw422016.N().S(`
<h2 class="recent-changes__heading"> <h2 class="recent-changes__heading">
`) `)
//line views/history.qtpl:74 //line views/history.qtpl:73
qw422016.E().S(fmt.Sprintf("%04d-%02d-%02d", y, m, d)) qw422016.E().S(fmt.Sprintf("%04d-%02d-%02d", y, m, d))
//line views/history.qtpl:74 //line views/history.qtpl:73
qw422016.N().S(` qw422016.N().S(`
</h2> </h2>
`) `)
//line views/history.qtpl:76 //line views/history.qtpl:75
year, month, day = y, m, d year, month, day = y, m, d
//line views/history.qtpl:76 //line views/history.qtpl:75
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/history.qtpl:77 //line views/history.qtpl:76
} }
//line views/history.qtpl:77 //line views/history.qtpl:76
qw422016.N().S(` qw422016.N().S(`
<div class="recent-changes__entry" role="article" <div class="recent-changes__entry" role="article"
aria-setsize="`) aria-setsize="`)
//line views/history.qtpl:80 //line views/history.qtpl:79
qw422016.N().D(n) qw422016.N().D(n)
//line views/history.qtpl:80 //line views/history.qtpl:79
qw422016.N().S(`" aria-posinset="`) qw422016.N().S(`" aria-posinset="`)
//line views/history.qtpl:80 //line views/history.qtpl:79
qw422016.N().D(i) qw422016.N().D(i)
//line views/history.qtpl:80 //line views/history.qtpl:79
qw422016.N().S(`"> qw422016.N().S(`">
`) `)
//line views/history.qtpl:81 //line views/history.qtpl:80
qw422016.N().S(recentChangesEntry(entry)) qw422016.N().S(recentChangesEntry(entry))
//line views/history.qtpl:81 //line views/history.qtpl:80
qw422016.N().S(` qw422016.N().S(`
</div> </div>
`) `)
//line views/history.qtpl:84 //line views/history.qtpl:83
} }
//line views/history.qtpl:84 //line views/history.qtpl:83
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/history.qtpl:85 //line views/history.qtpl:84
} }
//line views/history.qtpl:85 //line views/history.qtpl:84
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/history.qtpl:86 //line views/history.qtpl:85
qw422016.N().S(helpTopicBadgeHTML(lc.Locale, "recent_changes")) qw422016.N().S(helpTopicBadgeHTML(lc.Locale, "recent_changes"))
//line views/history.qtpl:86 //line views/history.qtpl:85
qw422016.N().S(` qw422016.N().S(`
</section> </section>
</main> </main>
</div> </div>
`) `)
//line views/history.qtpl:90 //line views/history.qtpl:89
} }
//line views/history.qtpl:90 //line views/history.qtpl:89
func WriteRecentChangesHTML(qq422016 qtio422016.Writer, n int, lc *l18n.Localizer) { func WriteRecentChangesHTML(qq422016 qtio422016.Writer, n int, lc *l18n.Localizer) {
//line views/history.qtpl:90 //line views/history.qtpl:89
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line views/history.qtpl:90 //line views/history.qtpl:89
StreamRecentChangesHTML(qw422016, n, lc) StreamRecentChangesHTML(qw422016, n, lc)
//line views/history.qtpl:90 //line views/history.qtpl:89
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line views/history.qtpl:90 //line views/history.qtpl:89
} }
//line views/history.qtpl:90 //line views/history.qtpl:89
func RecentChangesHTML(n int, lc *l18n.Localizer) string { func RecentChangesHTML(n int, lc *l18n.Localizer) string {
//line views/history.qtpl:90 //line views/history.qtpl:89
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line views/history.qtpl:90 //line views/history.qtpl:89
WriteRecentChangesHTML(qb422016, n, lc) WriteRecentChangesHTML(qb422016, n, lc)
//line views/history.qtpl:90 //line views/history.qtpl:89
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line views/history.qtpl:90 //line views/history.qtpl:89
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line views/history.qtpl:90 //line views/history.qtpl:89
return qs422016 return qs422016
//line views/history.qtpl:90 //line views/history.qtpl:89
} }
//line views/history.qtpl:92 //line views/history.qtpl:91
func streamrecentChangesEntry(qw422016 *qt422016.Writer, rev history.Revision) { func streamrecentChangesEntry(qw422016 *qt422016.Writer, rev history.Revision) {
//line views/history.qtpl:92 //line views/history.qtpl:91
qw422016.N().S(` qw422016.N().S(`
<div> <div>
<time class="recent-changes__entry__time"> <time class="recent-changes__entry__time">
`) `)
//line views/history.qtpl:95 //line views/history.qtpl:94
qw422016.E().S(rev.Time.UTC().Format("15:04 UTC")) qw422016.E().S(rev.Time.UTC().Format("15:04 UTC"))
//line views/history.qtpl:95 //line views/history.qtpl:94
qw422016.N().S(` qw422016.N().S(`
</time> </time>
<span class="recent-changes__entry__message">`) <span class="recent-changes__entry__message">`)
//line views/history.qtpl:97 //line views/history.qtpl:96
qw422016.E().S(rev.Hash) qw422016.E().S(rev.Hash)
//line views/history.qtpl:97 //line views/history.qtpl:96
qw422016.N().S(`</span> qw422016.N().S(`</span>
`) `)
//line views/history.qtpl:99 //line views/history.qtpl:98
if rev.Username != "anon" { if rev.Username != "anon" {
//line views/history.qtpl:99 //line views/history.qtpl:98
qw422016.N().S(` qw422016.N().S(`
<span class="recent-changes__entry__author"> <span class="recent-changes__entry__author">
&mdash; <a href="/hypha/`) &mdash; <a href="/hypha/`)
//line views/history.qtpl:101 //line views/history.qtpl:100
qw422016.E().S(cfg.UserHypha) qw422016.E().S(cfg.UserHypha)
//line views/history.qtpl:101 //line views/history.qtpl:100
qw422016.N().S(`/`) qw422016.N().S(`/`)
//line views/history.qtpl:101 //line views/history.qtpl:100
qw422016.E().S(rev.Username) qw422016.E().S(rev.Username)
//line views/history.qtpl:101 //line views/history.qtpl:100
qw422016.N().S(`" rel="author">`) qw422016.N().S(`" rel="author">`)
//line views/history.qtpl:101 //line views/history.qtpl:100
qw422016.E().S(rev.Username) qw422016.E().S(rev.Username)
//line views/history.qtpl:101 //line views/history.qtpl:100
qw422016.N().S(`</a> qw422016.N().S(`</a>
</span> </span>
`) `)
//line views/history.qtpl:103 //line views/history.qtpl:102
} }
//line views/history.qtpl:103 //line views/history.qtpl:102
qw422016.N().S(` qw422016.N().S(`
</div> </div>
<div> <div>
<span class="recent-changes__entry__links"> <span class="recent-changes__entry__links">
`) `)
//line views/history.qtpl:107 //line views/history.qtpl:106
qw422016.N().S(rev.HyphaeLinksHTML()) qw422016.N().S(rev.HyphaeLinksHTML())
//line views/history.qtpl:107 //line views/history.qtpl:106
qw422016.N().S(` qw422016.N().S(`
</span> </span>
<span class="recent-changes__entry__message"> <span class="recent-changes__entry__message">
`) `)
//line views/history.qtpl:110 //line views/history.qtpl:109
qw422016.E().S(rev.Message) qw422016.E().S(rev.Message)
//line views/history.qtpl:110 //line views/history.qtpl:109
qw422016.N().S(` qw422016.N().S(`
</span> </span>
</div> </div>
`) `)
//line views/history.qtpl:113 //line views/history.qtpl:112
} }
//line views/history.qtpl:113 //line views/history.qtpl:112
func writerecentChangesEntry(qq422016 qtio422016.Writer, rev history.Revision) { func writerecentChangesEntry(qq422016 qtio422016.Writer, rev history.Revision) {
//line views/history.qtpl:113 //line views/history.qtpl:112
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line views/history.qtpl:113 //line views/history.qtpl:112
streamrecentChangesEntry(qw422016, rev) streamrecentChangesEntry(qw422016, rev)
//line views/history.qtpl:113 //line views/history.qtpl:112
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line views/history.qtpl:113 //line views/history.qtpl:112
} }
//line views/history.qtpl:113 //line views/history.qtpl:112
func recentChangesEntry(rev history.Revision) string { func recentChangesEntry(rev history.Revision) string {
//line views/history.qtpl:113 //line views/history.qtpl:112
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line views/history.qtpl:113 //line views/history.qtpl:112
writerecentChangesEntry(qb422016, rev) writerecentChangesEntry(qb422016, rev)
//line views/history.qtpl:113 //line views/history.qtpl:112
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line views/history.qtpl:113 //line views/history.qtpl:112
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line views/history.qtpl:113 //line views/history.qtpl:112
return qs422016 return qs422016
//line views/history.qtpl:113 //line views/history.qtpl:112
} }
//line views/history.qtpl:115 //line views/history.qtpl:114
func StreamHistoryHTML(qw422016 *qt422016.Writer, rq *http.Request, hyphaName, list string, lc *l18n.Localizer) { func StreamHistoryHTML(qw422016 *qt422016.Writer, rq *http.Request, hyphaName, list string, lc *l18n.Localizer) {
//line views/history.qtpl:115 //line views/history.qtpl:114
qw422016.N().S(` qw422016.N().S(`
<div class="layout"> <div class="layout">
<main class="main-width"> <main class="main-width">
<article class="history"> <article class="history">
<h1>`) <h1>`)
//line views/history.qtpl:119 //line views/history.qtpl:118
qw422016.N().S(fmt.Sprintf(lc.Get("ui.history_title"), beautifulLink(hyphaName))) qw422016.N().S(fmt.Sprintf(lc.Get("ui.history_title"), beautifulLink(hyphaName)))
//line views/history.qtpl:119 //line views/history.qtpl:118
qw422016.N().S(`</h1> qw422016.N().S(`</h1>
`) `)
//line views/history.qtpl:120 //line views/history.qtpl:119
qw422016.N().S(list) qw422016.N().S(list)
//line views/history.qtpl:120 //line views/history.qtpl:119
qw422016.N().S(` qw422016.N().S(`
</article> </article>
</main> </main>
</div> </div>
`) `)
//line views/history.qtpl:124 //line views/history.qtpl:123
} }
//line views/history.qtpl:124 //line views/history.qtpl:123
func WriteHistoryHTML(qq422016 qtio422016.Writer, rq *http.Request, hyphaName, list string, lc *l18n.Localizer) { func WriteHistoryHTML(qq422016 qtio422016.Writer, rq *http.Request, hyphaName, list string, lc *l18n.Localizer) {
//line views/history.qtpl:124 //line views/history.qtpl:123
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line views/history.qtpl:124 //line views/history.qtpl:123
StreamHistoryHTML(qw422016, rq, hyphaName, list, lc) StreamHistoryHTML(qw422016, rq, hyphaName, list, lc)
//line views/history.qtpl:124 //line views/history.qtpl:123
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line views/history.qtpl:124 //line views/history.qtpl:123
} }
//line views/history.qtpl:124 //line views/history.qtpl:123
func HistoryHTML(rq *http.Request, hyphaName, list string, lc *l18n.Localizer) string { func HistoryHTML(rq *http.Request, hyphaName, list string, lc *l18n.Localizer) string {
//line views/history.qtpl:124 //line views/history.qtpl:123
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line views/history.qtpl:124 //line views/history.qtpl:123
WriteHistoryHTML(qb422016, rq, hyphaName, list, lc) WriteHistoryHTML(qb422016, rq, hyphaName, list, lc)
//line views/history.qtpl:124 //line views/history.qtpl:123
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line views/history.qtpl:124 //line views/history.qtpl:123
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line views/history.qtpl:124 //line views/history.qtpl:123
return qs422016 return qs422016
//line views/history.qtpl:124 //line views/history.qtpl:123
} }

View File

@@ -78,6 +78,8 @@
{% endfunc %} {% endfunc %}
If `contents` == "", a helpful message is shown instead. If `contents` == "", a helpful message is shown instead.
If you rename .prevnext, change the docs too.
{% func HyphaHTML(rq *http.Request, lc *l18n.Localizer, h *hyphae.Hypha, contents string) %} {% func HyphaHTML(rq *http.Request, lc *l18n.Localizer, h *hyphae.Hypha, contents string) %}
{% code {% code
siblings, subhyphae, prevHyphaName, nextHyphaName := tree.Tree(h.Name) siblings, subhyphae, prevHyphaName, nextHyphaName := tree.Tree(h.Name)
@@ -127,7 +129,7 @@ If `contents` == "", a helpful message is shown instead.
<div class="layout"> <div class="layout">
<main class="main-width"> <main class="main-width">
<article> <article>
<p>{%s lc.Get("ui.revision_warning") %}</p> <p>{%s lc.Get("ui.revision_warning") %} <a href="/rev-text/{%s revHash %}/{%s h.Name %}">{%s lc.Get("ui.revision_link") %}</a></p>
{%s= NaviTitleHTML(h) %} {%s= NaviTitleHTML(h) %}
{%s= contents %} {%s= contents %}
</article> </article>

View File

@@ -299,17 +299,19 @@ func AttachmentMenuHTML(rq *http.Request, h *hyphae.Hypha, u *user.User) string
} }
// If `contents` == "", a helpful message is shown instead. // If `contents` == "", a helpful message is shown instead.
//
// If you rename .prevnext, change the docs too.
//line views/readers.qtpl:81 //line views/readers.qtpl:83
func StreamHyphaHTML(qw422016 *qt422016.Writer, rq *http.Request, lc *l18n.Localizer, h *hyphae.Hypha, contents string) { func StreamHyphaHTML(qw422016 *qt422016.Writer, rq *http.Request, lc *l18n.Localizer, h *hyphae.Hypha, contents string) {
//line views/readers.qtpl:81 //line views/readers.qtpl:83
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/readers.qtpl:83 //line views/readers.qtpl:85
siblings, subhyphae, prevHyphaName, nextHyphaName := tree.Tree(h.Name) siblings, subhyphae, prevHyphaName, nextHyphaName := tree.Tree(h.Name)
u := user.FromRequest(rq) u := user.FromRequest(rq)
//line views/readers.qtpl:85 //line views/readers.qtpl:87
qw422016.N().S(` qw422016.N().S(`
<div class="layout"> <div class="layout">
<main class="main-width"> <main class="main-width">
@@ -318,273 +320,285 @@ func StreamHyphaHTML(qw422016 *qt422016.Writer, rq *http.Request, lc *l18n.Local
<a class="jump-btn__link" href="#hypha-bottom">↓</a> <a class="jump-btn__link" href="#hypha-bottom">↓</a>
</div> </div>
`) `)
//line views/readers.qtpl:92 //line views/readers.qtpl:94
if u.CanProceed("edit") { if u.CanProceed("edit") {
//line views/readers.qtpl:92 //line views/readers.qtpl:94
qw422016.N().S(`<div class="btn edit-btn"> qw422016.N().S(`<div class="btn edit-btn">
<a class="edit-btn__link" href="/edit/`) <a class="edit-btn__link" href="/edit/`)
//line views/readers.qtpl:93 //line views/readers.qtpl:95
qw422016.E().S(h.Name) qw422016.E().S(h.Name)
//line views/readers.qtpl:93 //line views/readers.qtpl:95
qw422016.N().S(`">`) qw422016.N().S(`">`)
//line views/readers.qtpl:93 //line views/readers.qtpl:95
qw422016.E().S(lc.Get("ui.edit_link")) qw422016.E().S(lc.Get("ui.edit_link"))
//line views/readers.qtpl:93 //line views/readers.qtpl:95
qw422016.N().S(`</a> qw422016.N().S(`</a>
</div>`) </div>`)
//line views/readers.qtpl:94 //line views/readers.qtpl:96
} }
//line views/readers.qtpl:94 //line views/readers.qtpl:96
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/readers.qtpl:95 //line views/readers.qtpl:97
qw422016.N().S(NaviTitleHTML(h)) qw422016.N().S(NaviTitleHTML(h))
//line views/readers.qtpl:95 //line views/readers.qtpl:97
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/readers.qtpl:96 //line views/readers.qtpl:98
if h.Exists { if h.Exists {
//line views/readers.qtpl:96 //line views/readers.qtpl:98
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/readers.qtpl:97 //line views/readers.qtpl:99
qw422016.N().S(contents) qw422016.N().S(contents)
//line views/readers.qtpl:97 //line views/readers.qtpl:99
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/readers.qtpl:98 //line views/readers.qtpl:100
} else { } else {
//line views/readers.qtpl:98 //line views/readers.qtpl:100
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/readers.qtpl:99 //line views/readers.qtpl:101
streamnonExistentHyphaNotice(qw422016, h, u, lc) streamnonExistentHyphaNotice(qw422016, h, u, lc)
//line views/readers.qtpl:99 //line views/readers.qtpl:101
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/readers.qtpl:100 //line views/readers.qtpl:102
} }
//line views/readers.qtpl:100 //line views/readers.qtpl:102
qw422016.N().S(` qw422016.N().S(`
</article> </article>
<section class="prevnext"> <section class="prevnext">
`) `)
//line views/readers.qtpl:103 //line views/readers.qtpl:105
if prevHyphaName != "" { if prevHyphaName != "" {
//line views/readers.qtpl:103 //line views/readers.qtpl:105
qw422016.N().S(` qw422016.N().S(`
<a class="prevnext__el prevnext__prev" href="/hypha/`) <a class="prevnext__el prevnext__prev" href="/hypha/`)
//line views/readers.qtpl:104 //line views/readers.qtpl:106
qw422016.E().S(prevHyphaName) qw422016.E().S(prevHyphaName)
//line views/readers.qtpl:104 //line views/readers.qtpl:106
qw422016.N().S(`" rel="prev">← `) qw422016.N().S(`" rel="prev">← `)
//line views/readers.qtpl:104 //line views/readers.qtpl:106
qw422016.E().S(util.BeautifulName(path.Base(prevHyphaName))) qw422016.E().S(util.BeautifulName(path.Base(prevHyphaName)))
//line views/readers.qtpl:104 //line views/readers.qtpl:106
qw422016.N().S(`</a> qw422016.N().S(`</a>
`) `)
//line views/readers.qtpl:105 //line views/readers.qtpl:107
} }
//line views/readers.qtpl:105 //line views/readers.qtpl:107
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/readers.qtpl:106 //line views/readers.qtpl:108
if nextHyphaName != "" { if nextHyphaName != "" {
//line views/readers.qtpl:106 //line views/readers.qtpl:108
qw422016.N().S(` qw422016.N().S(`
<a class="prevnext__el prevnext__next" href="/hypha/`) <a class="prevnext__el prevnext__next" href="/hypha/`)
//line views/readers.qtpl:107 //line views/readers.qtpl:109
qw422016.E().S(nextHyphaName) qw422016.E().S(nextHyphaName)
//line views/readers.qtpl:107 //line views/readers.qtpl:109
qw422016.N().S(`" rel="next">`) qw422016.N().S(`" rel="next">`)
//line views/readers.qtpl:107 //line views/readers.qtpl:109
qw422016.E().S(util.BeautifulName(path.Base(nextHyphaName))) qw422016.E().S(util.BeautifulName(path.Base(nextHyphaName)))
//line views/readers.qtpl:107 //line views/readers.qtpl:109
qw422016.N().S(` →</a> qw422016.N().S(` →</a>
`) `)
//line views/readers.qtpl:108 //line views/readers.qtpl:110
} }
//line views/readers.qtpl:108 //line views/readers.qtpl:110
qw422016.N().S(` qw422016.N().S(`
</section> </section>
`) `)
//line views/readers.qtpl:110 //line views/readers.qtpl:112
StreamSubhyphaeHTML(qw422016, subhyphae, lc) StreamSubhyphaeHTML(qw422016, subhyphae, lc)
//line views/readers.qtpl:110 //line views/readers.qtpl:112
qw422016.N().S(` qw422016.N().S(`
<section id="hypha-bottom"> <section id="hypha-bottom">
<div class="jump-btn"> <div class="jump-btn">
<a class="jump-btn__link" href="#hypha">↑</a> <a class="jump-btn__link" href="#hypha">↑</a>
</div> </div>
`) `)
//line views/readers.qtpl:115 //line views/readers.qtpl:117
streamhyphaInfo(qw422016, rq, h) streamhyphaInfo(qw422016, rq, h)
//line views/readers.qtpl:115 //line views/readers.qtpl:117
qw422016.N().S(` qw422016.N().S(`
</section> </section>
</main> </main>
`) `)
//line views/readers.qtpl:118 //line views/readers.qtpl:120
streamsiblingHyphaeHTML(qw422016, siblings, lc) streamsiblingHyphaeHTML(qw422016, siblings, lc)
//line views/readers.qtpl:118 //line views/readers.qtpl:120
qw422016.N().S(` qw422016.N().S(`
</div> </div>
`) `)
//line views/readers.qtpl:120 //line views/readers.qtpl:122
streamviewScripts(qw422016) streamviewScripts(qw422016)
//line views/readers.qtpl:120 //line views/readers.qtpl:122
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/readers.qtpl:121 //line views/readers.qtpl:123
} }
//line views/readers.qtpl:121 //line views/readers.qtpl:123
func WriteHyphaHTML(qq422016 qtio422016.Writer, rq *http.Request, lc *l18n.Localizer, h *hyphae.Hypha, contents string) { func WriteHyphaHTML(qq422016 qtio422016.Writer, rq *http.Request, lc *l18n.Localizer, h *hyphae.Hypha, contents string) {
//line views/readers.qtpl:121 //line views/readers.qtpl:123
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line views/readers.qtpl:121 //line views/readers.qtpl:123
StreamHyphaHTML(qw422016, rq, lc, h, contents) StreamHyphaHTML(qw422016, rq, lc, h, contents)
//line views/readers.qtpl:121 //line views/readers.qtpl:123
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line views/readers.qtpl:121 //line views/readers.qtpl:123
} }
//line views/readers.qtpl:121 //line views/readers.qtpl:123
func HyphaHTML(rq *http.Request, lc *l18n.Localizer, h *hyphae.Hypha, contents string) string { func HyphaHTML(rq *http.Request, lc *l18n.Localizer, h *hyphae.Hypha, contents string) string {
//line views/readers.qtpl:121 //line views/readers.qtpl:123
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line views/readers.qtpl:121 //line views/readers.qtpl:123
WriteHyphaHTML(qb422016, rq, lc, h, contents) WriteHyphaHTML(qb422016, rq, lc, h, contents)
//line views/readers.qtpl:121 //line views/readers.qtpl:123
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line views/readers.qtpl:121 //line views/readers.qtpl:123
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line views/readers.qtpl:121 //line views/readers.qtpl:123
return qs422016 return qs422016
//line views/readers.qtpl:121 //line views/readers.qtpl:123
} }
//line views/readers.qtpl:123 //line views/readers.qtpl:125
func StreamRevisionHTML(qw422016 *qt422016.Writer, rq *http.Request, lc *l18n.Localizer, h *hyphae.Hypha, contents, revHash string) { func StreamRevisionHTML(qw422016 *qt422016.Writer, rq *http.Request, lc *l18n.Localizer, h *hyphae.Hypha, contents, revHash string) {
//line views/readers.qtpl:123 //line views/readers.qtpl:125
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/readers.qtpl:125 //line views/readers.qtpl:127
siblings, subhyphae, _, _ := tree.Tree(h.Name) siblings, subhyphae, _, _ := tree.Tree(h.Name)
//line views/readers.qtpl:126 //line views/readers.qtpl:128
qw422016.N().S(` qw422016.N().S(`
<div class="layout"> <div class="layout">
<main class="main-width"> <main class="main-width">
<article> <article>
<p>`) <p>`)
//line views/readers.qtpl:130 //line views/readers.qtpl:132
qw422016.E().S(lc.Get("ui.revision_warning")) qw422016.E().S(lc.Get("ui.revision_warning"))
//line views/readers.qtpl:130 //line views/readers.qtpl:132
qw422016.N().S(`</p> qw422016.N().S(` <a href="/rev-text/`)
//line views/readers.qtpl:132
qw422016.E().S(revHash)
//line views/readers.qtpl:132
qw422016.N().S(`/`)
//line views/readers.qtpl:132
qw422016.E().S(h.Name)
//line views/readers.qtpl:132
qw422016.N().S(`">`)
//line views/readers.qtpl:132
qw422016.E().S(lc.Get("ui.revision_link"))
//line views/readers.qtpl:132
qw422016.N().S(`</a></p>
`) `)
//line views/readers.qtpl:131 //line views/readers.qtpl:133
qw422016.N().S(NaviTitleHTML(h)) qw422016.N().S(NaviTitleHTML(h))
//line views/readers.qtpl:131 //line views/readers.qtpl:133
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/readers.qtpl:132 //line views/readers.qtpl:134
qw422016.N().S(contents) qw422016.N().S(contents)
//line views/readers.qtpl:132 //line views/readers.qtpl:134
qw422016.N().S(` qw422016.N().S(`
</article> </article>
`) `)
//line views/readers.qtpl:134 //line views/readers.qtpl:136
StreamSubhyphaeHTML(qw422016, subhyphae, lc) StreamSubhyphaeHTML(qw422016, subhyphae, lc)
//line views/readers.qtpl:134 //line views/readers.qtpl:136
qw422016.N().S(` qw422016.N().S(`
</main> </main>
`) `)
//line views/readers.qtpl:136 //line views/readers.qtpl:138
streamsiblingHyphaeHTML(qw422016, siblings, lc) streamsiblingHyphaeHTML(qw422016, siblings, lc)
//line views/readers.qtpl:136 //line views/readers.qtpl:138
qw422016.N().S(` qw422016.N().S(`
</div> </div>
`) `)
//line views/readers.qtpl:138 //line views/readers.qtpl:140
streamviewScripts(qw422016) streamviewScripts(qw422016)
//line views/readers.qtpl:138 //line views/readers.qtpl:140
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/readers.qtpl:139 //line views/readers.qtpl:141
} }
//line views/readers.qtpl:139 //line views/readers.qtpl:141
func WriteRevisionHTML(qq422016 qtio422016.Writer, rq *http.Request, lc *l18n.Localizer, h *hyphae.Hypha, contents, revHash string) { func WriteRevisionHTML(qq422016 qtio422016.Writer, rq *http.Request, lc *l18n.Localizer, h *hyphae.Hypha, contents, revHash string) {
//line views/readers.qtpl:139 //line views/readers.qtpl:141
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line views/readers.qtpl:139 //line views/readers.qtpl:141
StreamRevisionHTML(qw422016, rq, lc, h, contents, revHash) StreamRevisionHTML(qw422016, rq, lc, h, contents, revHash)
//line views/readers.qtpl:139 //line views/readers.qtpl:141
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line views/readers.qtpl:139 //line views/readers.qtpl:141
} }
//line views/readers.qtpl:139 //line views/readers.qtpl:141
func RevisionHTML(rq *http.Request, lc *l18n.Localizer, h *hyphae.Hypha, contents, revHash string) string { func RevisionHTML(rq *http.Request, lc *l18n.Localizer, h *hyphae.Hypha, contents, revHash string) string {
//line views/readers.qtpl:139 //line views/readers.qtpl:141
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line views/readers.qtpl:139 //line views/readers.qtpl:141
WriteRevisionHTML(qb422016, rq, lc, h, contents, revHash) WriteRevisionHTML(qb422016, rq, lc, h, contents, revHash)
//line views/readers.qtpl:139 //line views/readers.qtpl:141
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line views/readers.qtpl:139 //line views/readers.qtpl:141
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line views/readers.qtpl:139 //line views/readers.qtpl:141
return qs422016 return qs422016
//line views/readers.qtpl:139 //line views/readers.qtpl:141
} }
//line views/readers.qtpl:141 //line views/readers.qtpl:143
func streamviewScripts(qw422016 *qt422016.Writer) { func streamviewScripts(qw422016 *qt422016.Writer) {
//line views/readers.qtpl:141 //line views/readers.qtpl:143
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/readers.qtpl:142 //line views/readers.qtpl:144
for _, scriptPath := range cfg.ViewScripts { for _, scriptPath := range cfg.ViewScripts {
//line views/readers.qtpl:142 //line views/readers.qtpl:144
qw422016.N().S(` qw422016.N().S(`
<script src="`) <script src="`)
//line views/readers.qtpl:143 //line views/readers.qtpl:145
qw422016.E().S(scriptPath) qw422016.E().S(scriptPath)
//line views/readers.qtpl:143 //line views/readers.qtpl:145
qw422016.N().S(`"></script> qw422016.N().S(`"></script>
`) `)
//line views/readers.qtpl:144 //line views/readers.qtpl:146
} }
//line views/readers.qtpl:144 //line views/readers.qtpl:146
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/readers.qtpl:145 //line views/readers.qtpl:147
} }
//line views/readers.qtpl:145 //line views/readers.qtpl:147
func writeviewScripts(qq422016 qtio422016.Writer) { func writeviewScripts(qq422016 qtio422016.Writer) {
//line views/readers.qtpl:145 //line views/readers.qtpl:147
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line views/readers.qtpl:145 //line views/readers.qtpl:147
streamviewScripts(qw422016) streamviewScripts(qw422016)
//line views/readers.qtpl:145 //line views/readers.qtpl:147
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line views/readers.qtpl:145 //line views/readers.qtpl:147
} }
//line views/readers.qtpl:145 //line views/readers.qtpl:147
func viewScripts() string { func viewScripts() string {
//line views/readers.qtpl:145 //line views/readers.qtpl:147
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line views/readers.qtpl:145 //line views/readers.qtpl:147
writeviewScripts(qb422016) writeviewScripts(qb422016)
//line views/readers.qtpl:145 //line views/readers.qtpl:147
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line views/readers.qtpl:145 //line views/readers.qtpl:147
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line views/readers.qtpl:145 //line views/readers.qtpl:147
return qs422016 return qs422016
//line views/readers.qtpl:145 //line views/readers.qtpl:147
} }

View File

@@ -166,6 +166,7 @@ It outputs a poorly formatted JSON, but it works and is valid.
<li><a href="/help/{%s lang %}/mycomarkup">{%s lc.GetWithLocale(lang, "help.mycomarkup") %}</a></li> <li><a href="/help/{%s lang %}/mycomarkup">{%s lc.GetWithLocale(lang, "help.mycomarkup") %}</a></li>
<li>{%s lc.GetWithLocale(lang, "help.interface") %} <li>{%s lc.GetWithLocale(lang, "help.interface") %}
<ul> <ul>
<li><a href="/help/{%s lang %}/prevnext">{%s lc.GetWithLocale(lang, "help.prevnext") %}</a></li>
<li><a href="/help/{%s lang %}/top_bar">{%s lc.GetWithLocale(lang, "help.top_bar") %}</a></li> <li><a href="/help/{%s lang %}/top_bar">{%s lc.GetWithLocale(lang, "help.top_bar") %}</a></li>
<li><a href="/help/{%s lang %}/sibling_hyphae_section">{%s lc.GetWithLocale(lang, "help.sibling_hyphae") %}</a></li> <li><a href="/help/{%s lang %}/sibling_hyphae_section">{%s lc.GetWithLocale(lang, "help.sibling_hyphae") %}</a></li>
<li>...</li> <li>...</li>

View File

@@ -664,72 +664,81 @@ func streamhelpTopicsHTML(qw422016 *qt422016.Writer, lang string, lc *l18n.Local
//line views/stuff.qtpl:169 //line views/stuff.qtpl:169
qw422016.E().S(lang) qw422016.E().S(lang)
//line views/stuff.qtpl:169 //line views/stuff.qtpl:169
qw422016.N().S(`/top_bar">`) qw422016.N().S(`/prevnext">`)
//line views/stuff.qtpl:169 //line views/stuff.qtpl:169
qw422016.E().S(lc.GetWithLocale(lang, "help.top_bar")) qw422016.E().S(lc.GetWithLocale(lang, "help.prevnext"))
//line views/stuff.qtpl:169 //line views/stuff.qtpl:169
qw422016.N().S(`</a></li> qw422016.N().S(`</a></li>
<li><a href="/help/`) <li><a href="/help/`)
//line views/stuff.qtpl:170 //line views/stuff.qtpl:170
qw422016.E().S(lang) qw422016.E().S(lang)
//line views/stuff.qtpl:170 //line views/stuff.qtpl:170
qw422016.N().S(`/top_bar">`)
//line views/stuff.qtpl:170
qw422016.E().S(lc.GetWithLocale(lang, "help.top_bar"))
//line views/stuff.qtpl:170
qw422016.N().S(`</a></li>
<li><a href="/help/`)
//line views/stuff.qtpl:171
qw422016.E().S(lang)
//line views/stuff.qtpl:171
qw422016.N().S(`/sibling_hyphae_section">`) qw422016.N().S(`/sibling_hyphae_section">`)
//line views/stuff.qtpl:170 //line views/stuff.qtpl:171
qw422016.E().S(lc.GetWithLocale(lang, "help.sibling_hyphae")) qw422016.E().S(lc.GetWithLocale(lang, "help.sibling_hyphae"))
//line views/stuff.qtpl:170 //line views/stuff.qtpl:171
qw422016.N().S(`</a></li> qw422016.N().S(`</a></li>
<li>...</li> <li>...</li>
</ul> </ul>
</li> </li>
<li>`) <li>`)
//line views/stuff.qtpl:174 //line views/stuff.qtpl:175
qw422016.E().S(lc.GetWithLocale(lang, "help.special_pages")) qw422016.E().S(lc.GetWithLocale(lang, "help.special_pages"))
//line views/stuff.qtpl:174 //line views/stuff.qtpl:175
qw422016.N().S(` qw422016.N().S(`
<ul> <ul>
<li><a href="/help/`) <li><a href="/help/`)
//line views/stuff.qtpl:176 //line views/stuff.qtpl:177
qw422016.E().S(lang) qw422016.E().S(lang)
//line views/stuff.qtpl:176 //line views/stuff.qtpl:177
qw422016.N().S(`/recent_changes">`) qw422016.N().S(`/recent_changes">`)
//line views/stuff.qtpl:176 //line views/stuff.qtpl:177
qw422016.E().S(lc.GetWithLocale(lang, "help.recent_changes")) qw422016.E().S(lc.GetWithLocale(lang, "help.recent_changes"))
//line views/stuff.qtpl:176 //line views/stuff.qtpl:177
qw422016.N().S(`</a></li> qw422016.N().S(`</a></li>
</ul> </ul>
</li> </li>
<li>`) <li>`)
//line views/stuff.qtpl:179 //line views/stuff.qtpl:180
qw422016.E().S(lc.GetWithLocale(lang, "help.configuration")) qw422016.E().S(lc.GetWithLocale(lang, "help.configuration"))
//line views/stuff.qtpl:179 //line views/stuff.qtpl:180
qw422016.N().S(` qw422016.N().S(`
<ul> <ul>
<li><a href="/help/`) <li><a href="/help/`)
//line views/stuff.qtpl:181 //line views/stuff.qtpl:182
qw422016.E().S(lang) qw422016.E().S(lang)
//line views/stuff.qtpl:181 //line views/stuff.qtpl:182
qw422016.N().S(`/lock">`) qw422016.N().S(`/lock">`)
//line views/stuff.qtpl:181 //line views/stuff.qtpl:182
qw422016.E().S(lc.GetWithLocale(lang, "help.lock")) qw422016.E().S(lc.GetWithLocale(lang, "help.lock"))
//line views/stuff.qtpl:181 //line views/stuff.qtpl:182
qw422016.N().S(`</a></li> qw422016.N().S(`</a></li>
<li><a href="/help/`) <li><a href="/help/`)
//line views/stuff.qtpl:182 //line views/stuff.qtpl:183
qw422016.E().S(lang) qw422016.E().S(lang)
//line views/stuff.qtpl:182 //line views/stuff.qtpl:183
qw422016.N().S(`/whitelist">`) qw422016.N().S(`/whitelist">`)
//line views/stuff.qtpl:182 //line views/stuff.qtpl:183
qw422016.E().S(lc.GetWithLocale(lang, "help.whitelist")) qw422016.E().S(lc.GetWithLocale(lang, "help.whitelist"))
//line views/stuff.qtpl:182 //line views/stuff.qtpl:183
qw422016.N().S(`</a></li> qw422016.N().S(`</a></li>
<li><a href="/help/`) <li><a href="/help/`)
//line views/stuff.qtpl:183 //line views/stuff.qtpl:184
qw422016.E().S(lang) qw422016.E().S(lang)
//line views/stuff.qtpl:183 //line views/stuff.qtpl:184
qw422016.N().S(`/telegram">`) qw422016.N().S(`/telegram">`)
//line views/stuff.qtpl:183 //line views/stuff.qtpl:184
qw422016.E().S(lc.GetWithLocale(lang, "help.telegram")) qw422016.E().S(lc.GetWithLocale(lang, "help.telegram"))
//line views/stuff.qtpl:183 //line views/stuff.qtpl:184
qw422016.N().S(`</a></li> qw422016.N().S(`</a></li>
<li>...</li> <li>...</li>
</ul> </ul>
@@ -737,91 +746,91 @@ func streamhelpTopicsHTML(qw422016 *qt422016.Writer, lang string, lc *l18n.Local
</ul> </ul>
</aside> </aside>
`) `)
//line views/stuff.qtpl:189 //line views/stuff.qtpl:190
} }
//line views/stuff.qtpl:189 //line views/stuff.qtpl:190
func writehelpTopicsHTML(qq422016 qtio422016.Writer, lang string, lc *l18n.Localizer) { func writehelpTopicsHTML(qq422016 qtio422016.Writer, lang string, lc *l18n.Localizer) {
//line views/stuff.qtpl:189 //line views/stuff.qtpl:190
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line views/stuff.qtpl:189 //line views/stuff.qtpl:190
streamhelpTopicsHTML(qw422016, lang, lc) streamhelpTopicsHTML(qw422016, lang, lc)
//line views/stuff.qtpl:189 //line views/stuff.qtpl:190
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line views/stuff.qtpl:189 //line views/stuff.qtpl:190
} }
//line views/stuff.qtpl:189 //line views/stuff.qtpl:190
func helpTopicsHTML(lang string, lc *l18n.Localizer) string { func helpTopicsHTML(lang string, lc *l18n.Localizer) string {
//line views/stuff.qtpl:189 //line views/stuff.qtpl:190
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line views/stuff.qtpl:189 //line views/stuff.qtpl:190
writehelpTopicsHTML(qb422016, lang, lc) writehelpTopicsHTML(qb422016, lang, lc)
//line views/stuff.qtpl:189 //line views/stuff.qtpl:190
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line views/stuff.qtpl:189 //line views/stuff.qtpl:190
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line views/stuff.qtpl:189 //line views/stuff.qtpl:190
return qs422016 return qs422016
//line views/stuff.qtpl:189 //line views/stuff.qtpl:190
} }
//line views/stuff.qtpl:191 //line views/stuff.qtpl:192
func streamhelpTopicBadgeHTML(qw422016 *qt422016.Writer, lang, topic string) { func streamhelpTopicBadgeHTML(qw422016 *qt422016.Writer, lang, topic string) {
//line views/stuff.qtpl:191 //line views/stuff.qtpl:192
qw422016.N().S(` qw422016.N().S(`
<a class="help-topic-badge" href="/help/`) <a class="help-topic-badge" href="/help/`)
//line views/stuff.qtpl:192 //line views/stuff.qtpl:193
qw422016.E().S(lang) qw422016.E().S(lang)
//line views/stuff.qtpl:192 //line views/stuff.qtpl:193
qw422016.N().S(`/`) qw422016.N().S(`/`)
//line views/stuff.qtpl:192 //line views/stuff.qtpl:193
qw422016.E().S(topic) qw422016.E().S(topic)
//line views/stuff.qtpl:192 //line views/stuff.qtpl:193
qw422016.N().S(`">?</a> qw422016.N().S(`">?</a>
`) `)
//line views/stuff.qtpl:193 //line views/stuff.qtpl:194
} }
//line views/stuff.qtpl:193 //line views/stuff.qtpl:194
func writehelpTopicBadgeHTML(qq422016 qtio422016.Writer, lang, topic string) { func writehelpTopicBadgeHTML(qq422016 qtio422016.Writer, lang, topic string) {
//line views/stuff.qtpl:193 //line views/stuff.qtpl:194
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line views/stuff.qtpl:193 //line views/stuff.qtpl:194
streamhelpTopicBadgeHTML(qw422016, lang, topic) streamhelpTopicBadgeHTML(qw422016, lang, topic)
//line views/stuff.qtpl:193 //line views/stuff.qtpl:194
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line views/stuff.qtpl:193 //line views/stuff.qtpl:194
} }
//line views/stuff.qtpl:193 //line views/stuff.qtpl:194
func helpTopicBadgeHTML(lang, topic string) string { func helpTopicBadgeHTML(lang, topic string) string {
//line views/stuff.qtpl:193 //line views/stuff.qtpl:194
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line views/stuff.qtpl:193 //line views/stuff.qtpl:194
writehelpTopicBadgeHTML(qb422016, lang, topic) writehelpTopicBadgeHTML(qb422016, lang, topic)
//line views/stuff.qtpl:193 //line views/stuff.qtpl:194
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line views/stuff.qtpl:193 //line views/stuff.qtpl:194
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line views/stuff.qtpl:193 //line views/stuff.qtpl:194
return qs422016 return qs422016
//line views/stuff.qtpl:193 //line views/stuff.qtpl:194
} }
//line views/stuff.qtpl:195 //line views/stuff.qtpl:196
func StreamUserListHTML(qw422016 *qt422016.Writer, lc *l18n.Localizer) { func StreamUserListHTML(qw422016 *qt422016.Writer, lc *l18n.Localizer) {
//line views/stuff.qtpl:195 //line views/stuff.qtpl:196
qw422016.N().S(` qw422016.N().S(`
<div class="layout"> <div class="layout">
<main class="main-width user-list"> <main class="main-width user-list">
<h1>`) <h1>`)
//line views/stuff.qtpl:198 //line views/stuff.qtpl:199
qw422016.E().S(lc.Get("ui.users_heading")) qw422016.E().S(lc.Get("ui.users_heading"))
//line views/stuff.qtpl:198 //line views/stuff.qtpl:199
qw422016.N().S(`</h1> qw422016.N().S(`</h1>
`) `)
//line views/stuff.qtpl:200 //line views/stuff.qtpl:201
var ( var (
admins = make([]string, 0) admins = make([]string, 0)
moderators = make([]string, 0) moderators = make([]string, 0)
@@ -838,385 +847,385 @@ func StreamUserListHTML(qw422016 *qt422016.Writer, lc *l18n.Localizer) {
} }
} }
//line views/stuff.qtpl:215 //line views/stuff.qtpl:216
qw422016.N().S(` qw422016.N().S(`
<section> <section>
<h2>`) <h2>`)
//line views/stuff.qtpl:217 //line views/stuff.qtpl:218
qw422016.E().S(lc.Get("ui.users_admins")) qw422016.E().S(lc.Get("ui.users_admins"))
//line views/stuff.qtpl:217 //line views/stuff.qtpl:218
qw422016.N().S(`</h2> qw422016.N().S(`</h2>
<ol>`) <ol>`)
//line views/stuff.qtpl:218 //line views/stuff.qtpl:219
for _, name := range admins { for _, name := range admins {
//line views/stuff.qtpl:218 //line views/stuff.qtpl:219
qw422016.N().S(` qw422016.N().S(`
<li><a href="/hypha/`) <li><a href="/hypha/`)
//line views/stuff.qtpl:219 //line views/stuff.qtpl:220
qw422016.E().S(cfg.UserHypha) qw422016.E().S(cfg.UserHypha)
//line views/stuff.qtpl:219 //line views/stuff.qtpl:220
qw422016.N().S(`/`) qw422016.N().S(`/`)
//line views/stuff.qtpl:219 //line views/stuff.qtpl:220
qw422016.E().S(name) qw422016.E().S(name)
//line views/stuff.qtpl:219 //line views/stuff.qtpl:220
qw422016.N().S(`">`) qw422016.N().S(`">`)
//line views/stuff.qtpl:219 //line views/stuff.qtpl:220
qw422016.E().S(name) qw422016.E().S(name)
//line views/stuff.qtpl:219 //line views/stuff.qtpl:220
qw422016.N().S(`</a></li> qw422016.N().S(`</a></li>
`) `)
//line views/stuff.qtpl:220 //line views/stuff.qtpl:221
} }
//line views/stuff.qtpl:220 //line views/stuff.qtpl:221
qw422016.N().S(`</ol> qw422016.N().S(`</ol>
</section> </section>
<section> <section>
<h2>`) <h2>`)
//line views/stuff.qtpl:223 //line views/stuff.qtpl:224
qw422016.E().S(lc.Get("ui.users_moderators")) qw422016.E().S(lc.Get("ui.users_moderators"))
//line views/stuff.qtpl:223 //line views/stuff.qtpl:224
qw422016.N().S(`</h2> qw422016.N().S(`</h2>
<ol>`) <ol>`)
//line views/stuff.qtpl:224 //line views/stuff.qtpl:225
for _, name := range moderators { for _, name := range moderators {
//line views/stuff.qtpl:224 //line views/stuff.qtpl:225
qw422016.N().S(` qw422016.N().S(`
<li><a href="/hypha/`) <li><a href="/hypha/`)
//line views/stuff.qtpl:225 //line views/stuff.qtpl:226
qw422016.E().S(cfg.UserHypha) qw422016.E().S(cfg.UserHypha)
//line views/stuff.qtpl:225 //line views/stuff.qtpl:226
qw422016.N().S(`/`) qw422016.N().S(`/`)
//line views/stuff.qtpl:225 //line views/stuff.qtpl:226
qw422016.E().S(name) qw422016.E().S(name)
//line views/stuff.qtpl:225 //line views/stuff.qtpl:226
qw422016.N().S(`">`) qw422016.N().S(`">`)
//line views/stuff.qtpl:225 //line views/stuff.qtpl:226
qw422016.E().S(name) qw422016.E().S(name)
//line views/stuff.qtpl:225 //line views/stuff.qtpl:226
qw422016.N().S(`</a></li> qw422016.N().S(`</a></li>
`) `)
//line views/stuff.qtpl:226 //line views/stuff.qtpl:227
} }
//line views/stuff.qtpl:226 //line views/stuff.qtpl:227
qw422016.N().S(`</ol> qw422016.N().S(`</ol>
</section> </section>
<section> <section>
<h2>`) <h2>`)
//line views/stuff.qtpl:229 //line views/stuff.qtpl:230
qw422016.E().S(lc.Get("ui.users_editors")) qw422016.E().S(lc.Get("ui.users_editors"))
//line views/stuff.qtpl:229 //line views/stuff.qtpl:230
qw422016.N().S(`</h2> qw422016.N().S(`</h2>
<ol>`) <ol>`)
//line views/stuff.qtpl:230 //line views/stuff.qtpl:231
for _, name := range editors { for _, name := range editors {
//line views/stuff.qtpl:230 //line views/stuff.qtpl:231
qw422016.N().S(` qw422016.N().S(`
<li><a href="/hypha/`) <li><a href="/hypha/`)
//line views/stuff.qtpl:231 //line views/stuff.qtpl:232
qw422016.E().S(cfg.UserHypha) qw422016.E().S(cfg.UserHypha)
//line views/stuff.qtpl:231 //line views/stuff.qtpl:232
qw422016.N().S(`/`) qw422016.N().S(`/`)
//line views/stuff.qtpl:231 //line views/stuff.qtpl:232
qw422016.E().S(name) qw422016.E().S(name)
//line views/stuff.qtpl:231 //line views/stuff.qtpl:232
qw422016.N().S(`">`) qw422016.N().S(`">`)
//line views/stuff.qtpl:231 //line views/stuff.qtpl:232
qw422016.E().S(name) qw422016.E().S(name)
//line views/stuff.qtpl:231 //line views/stuff.qtpl:232
qw422016.N().S(`</a></li> qw422016.N().S(`</a></li>
`) `)
//line views/stuff.qtpl:232 //line views/stuff.qtpl:233
} }
//line views/stuff.qtpl:232 //line views/stuff.qtpl:233
qw422016.N().S(`</ol> qw422016.N().S(`</ol>
</section> </section>
</main> </main>
</div> </div>
`) `)
//line views/stuff.qtpl:236 //line views/stuff.qtpl:237
} }
//line views/stuff.qtpl:236 //line views/stuff.qtpl:237
func WriteUserListHTML(qq422016 qtio422016.Writer, lc *l18n.Localizer) { func WriteUserListHTML(qq422016 qtio422016.Writer, lc *l18n.Localizer) {
//line views/stuff.qtpl:236 //line views/stuff.qtpl:237
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line views/stuff.qtpl:236 //line views/stuff.qtpl:237
StreamUserListHTML(qw422016, lc) StreamUserListHTML(qw422016, lc)
//line views/stuff.qtpl:236 //line views/stuff.qtpl:237
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line views/stuff.qtpl:236 //line views/stuff.qtpl:237
} }
//line views/stuff.qtpl:236 //line views/stuff.qtpl:237
func UserListHTML(lc *l18n.Localizer) string { func UserListHTML(lc *l18n.Localizer) string {
//line views/stuff.qtpl:236 //line views/stuff.qtpl:237
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line views/stuff.qtpl:236 //line views/stuff.qtpl:237
WriteUserListHTML(qb422016, lc) WriteUserListHTML(qb422016, lc)
//line views/stuff.qtpl:236 //line views/stuff.qtpl:237
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line views/stuff.qtpl:236 //line views/stuff.qtpl:237
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line views/stuff.qtpl:236 //line views/stuff.qtpl:237
return qs422016 return qs422016
//line views/stuff.qtpl:236 //line views/stuff.qtpl:237
} }
//line views/stuff.qtpl:238 //line views/stuff.qtpl:239
func StreamHyphaListHTML(qw422016 *qt422016.Writer, lc *l18n.Localizer) { func StreamHyphaListHTML(qw422016 *qt422016.Writer, lc *l18n.Localizer) {
//line views/stuff.qtpl:238 //line views/stuff.qtpl:239
qw422016.N().S(` qw422016.N().S(`
<div class="layout"> <div class="layout">
<main class="main-width"> <main class="main-width">
<h1>`) <h1>`)
//line views/stuff.qtpl:241 //line views/stuff.qtpl:242
qw422016.E().S(lc.Get("ui.list_heading")) qw422016.E().S(lc.Get("ui.list_heading"))
//line views/stuff.qtpl:241 //line views/stuff.qtpl:242
qw422016.N().S(`</h1> qw422016.N().S(`</h1>
<p>`) <p>`)
//line views/stuff.qtpl:242 //line views/stuff.qtpl:243
qw422016.E().S(lc.GetPlural("ui.list_desc", hyphae.Count())) qw422016.E().S(lc.GetPlural("ui.list_desc", hyphae.Count()))
//line views/stuff.qtpl:242 //line views/stuff.qtpl:243
qw422016.N().S(`</p> qw422016.N().S(`</p>
<ul class="hypha-list"> <ul class="hypha-list">
`) `)
//line views/stuff.qtpl:244 //line views/stuff.qtpl:245
for h := range hyphae.YieldExistingHyphae() { for h := range hyphae.YieldExistingHyphae() {
//line views/stuff.qtpl:244 //line views/stuff.qtpl:245
qw422016.N().S(` qw422016.N().S(`
<li class="hypha-list__entry"> <li class="hypha-list__entry">
<a class="hypha-list__link" href="/hypha/`) <a class="hypha-list__link" href="/hypha/`)
//line views/stuff.qtpl:246 //line views/stuff.qtpl:247
qw422016.E().S(h.Name) qw422016.E().S(h.Name)
//line views/stuff.qtpl:246 //line views/stuff.qtpl:247
qw422016.N().S(`">`) qw422016.N().S(`">`)
//line views/stuff.qtpl:246 //line views/stuff.qtpl:247
qw422016.E().S(util.BeautifulName(h.Name)) qw422016.E().S(util.BeautifulName(h.Name))
//line views/stuff.qtpl:246 //line views/stuff.qtpl:247
qw422016.N().S(`</a> qw422016.N().S(`</a>
`) `)
//line views/stuff.qtpl:247 //line views/stuff.qtpl:248
if h.BinaryPath != "" { if h.BinaryPath != "" {
//line views/stuff.qtpl:247 //line views/stuff.qtpl:248
qw422016.N().S(` qw422016.N().S(`
<span class="hypha-list__amnt-type">`) <span class="hypha-list__amnt-type">`)
//line views/stuff.qtpl:248 //line views/stuff.qtpl:249
qw422016.E().S(filepath.Ext(h.BinaryPath)[1:]) qw422016.E().S(filepath.Ext(h.BinaryPath)[1:])
//line views/stuff.qtpl:248 //line views/stuff.qtpl:249
qw422016.N().S(`</span> qw422016.N().S(`</span>
`) `)
//line views/stuff.qtpl:249 //line views/stuff.qtpl:250
} }
//line views/stuff.qtpl:249 //line views/stuff.qtpl:250
qw422016.N().S(` qw422016.N().S(`
</li> </li>
`) `)
//line views/stuff.qtpl:251 //line views/stuff.qtpl:252
} }
//line views/stuff.qtpl:251 //line views/stuff.qtpl:252
qw422016.N().S(` qw422016.N().S(`
</ul> </ul>
</main> </main>
</div> </div>
`) `)
//line views/stuff.qtpl:255 //line views/stuff.qtpl:256
} }
//line views/stuff.qtpl:255 //line views/stuff.qtpl:256
func WriteHyphaListHTML(qq422016 qtio422016.Writer, lc *l18n.Localizer) { func WriteHyphaListHTML(qq422016 qtio422016.Writer, lc *l18n.Localizer) {
//line views/stuff.qtpl:255 //line views/stuff.qtpl:256
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line views/stuff.qtpl:255 //line views/stuff.qtpl:256
StreamHyphaListHTML(qw422016, lc) StreamHyphaListHTML(qw422016, lc)
//line views/stuff.qtpl:255 //line views/stuff.qtpl:256
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line views/stuff.qtpl:255 //line views/stuff.qtpl:256
} }
//line views/stuff.qtpl:255 //line views/stuff.qtpl:256
func HyphaListHTML(lc *l18n.Localizer) string { func HyphaListHTML(lc *l18n.Localizer) string {
//line views/stuff.qtpl:255 //line views/stuff.qtpl:256
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line views/stuff.qtpl:255 //line views/stuff.qtpl:256
WriteHyphaListHTML(qb422016, lc) WriteHyphaListHTML(qb422016, lc)
//line views/stuff.qtpl:255 //line views/stuff.qtpl:256
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line views/stuff.qtpl:255 //line views/stuff.qtpl:256
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line views/stuff.qtpl:255 //line views/stuff.qtpl:256
return qs422016 return qs422016
//line views/stuff.qtpl:255 //line views/stuff.qtpl:256
} }
//line views/stuff.qtpl:257 //line views/stuff.qtpl:258
func StreamAboutHTML(qw422016 *qt422016.Writer, lc *l18n.Localizer) { func StreamAboutHTML(qw422016 *qt422016.Writer, lc *l18n.Localizer) {
//line views/stuff.qtpl:257 //line views/stuff.qtpl:258
qw422016.N().S(` qw422016.N().S(`
<div class="layout"> <div class="layout">
<main class="main-width"> <main class="main-width">
<section> <section>
<h1>`) <h1>`)
//line views/stuff.qtpl:261 //line views/stuff.qtpl:262
qw422016.E().S(lc.Get("ui.about_title", &l18n.Replacements{"name": cfg.WikiName})) qw422016.E().S(lc.Get("ui.about_title", &l18n.Replacements{"name": cfg.WikiName}))
//line views/stuff.qtpl:261 //line views/stuff.qtpl:262
qw422016.N().S(`</h1> qw422016.N().S(`</h1>
<ul> <ul>
<li><b>`) <li><b>`)
//line views/stuff.qtpl:263 //line views/stuff.qtpl:264
qw422016.N().S(lc.Get("ui.about_version", &l18n.Replacements{"pre": "<a href=\"https://mycorrhiza.wiki\">", "post": "</a>"})) qw422016.N().S(lc.Get("ui.about_version", &l18n.Replacements{"pre": "<a href=\"https://mycorrhiza.wiki\">", "post": "</a>"}))
//line views/stuff.qtpl:263 //line views/stuff.qtpl:264
qw422016.N().S(`</b> 1.5.0</li> qw422016.N().S(`</b> 1.5.0</li>
`) `)
//line views/stuff.qtpl:264 //line views/stuff.qtpl:265
if cfg.UseAuth { if cfg.UseAuth {
//line views/stuff.qtpl:264 //line views/stuff.qtpl:265
qw422016.N().S(` <li><b>`) qw422016.N().S(` <li><b>`)
//line views/stuff.qtpl:265 //line views/stuff.qtpl:266
qw422016.E().S(lc.Get("ui.about_usercount")) qw422016.E().S(lc.Get("ui.about_usercount"))
//line views/stuff.qtpl:265 //line views/stuff.qtpl:266
qw422016.N().S(`</b> `) qw422016.N().S(`</b> `)
//line views/stuff.qtpl:265 //line views/stuff.qtpl:266
qw422016.N().DUL(user.Count()) qw422016.N().DUL(user.Count())
//line views/stuff.qtpl:265 //line views/stuff.qtpl:266
qw422016.N().S(`</li> qw422016.N().S(`</li>
<li><b>`) <li><b>`)
//line views/stuff.qtpl:266 //line views/stuff.qtpl:267
qw422016.E().S(lc.Get("ui.about_homepage")) qw422016.E().S(lc.Get("ui.about_homepage"))
//line views/stuff.qtpl:266 //line views/stuff.qtpl:267
qw422016.N().S(`</b> <a href="/">`) qw422016.N().S(`</b> <a href="/">`)
//line views/stuff.qtpl:266 //line views/stuff.qtpl:267
qw422016.E().S(cfg.HomeHypha) qw422016.E().S(cfg.HomeHypha)
//line views/stuff.qtpl:266 //line views/stuff.qtpl:267
qw422016.N().S(`</a></li> qw422016.N().S(`</a></li>
<li><b>`) <li><b>`)
//line views/stuff.qtpl:267 //line views/stuff.qtpl:268
qw422016.E().S(lc.Get("ui.about_admins")) qw422016.E().S(lc.Get("ui.about_admins"))
//line views/stuff.qtpl:267 //line views/stuff.qtpl:268
qw422016.N().S(`</b>`) qw422016.N().S(`</b>`)
//line views/stuff.qtpl:267 //line views/stuff.qtpl:268
for i, username := range user.ListUsersWithGroup("admin") { for i, username := range user.ListUsersWithGroup("admin") {
//line views/stuff.qtpl:268 //line views/stuff.qtpl:269
if i > 0 { if i > 0 {
//line views/stuff.qtpl:268 //line views/stuff.qtpl:269
qw422016.N().S(`<span aria-hidden="true">, </span> qw422016.N().S(`<span aria-hidden="true">, </span>
`) `)
//line views/stuff.qtpl:269 //line views/stuff.qtpl:270
} }
//line views/stuff.qtpl:269 //line views/stuff.qtpl:270
qw422016.N().S(` <a href="/hypha/`) qw422016.N().S(` <a href="/hypha/`)
//line views/stuff.qtpl:270 //line views/stuff.qtpl:271
qw422016.E().S(cfg.UserHypha) qw422016.E().S(cfg.UserHypha)
//line views/stuff.qtpl:270 //line views/stuff.qtpl:271
qw422016.N().S(`/`) qw422016.N().S(`/`)
//line views/stuff.qtpl:270 //line views/stuff.qtpl:271
qw422016.E().S(username) qw422016.E().S(username)
//line views/stuff.qtpl:270 //line views/stuff.qtpl:271
qw422016.N().S(`">`) qw422016.N().S(`">`)
//line views/stuff.qtpl:270 //line views/stuff.qtpl:271
qw422016.E().S(username) qw422016.E().S(username)
//line views/stuff.qtpl:270 //line views/stuff.qtpl:271
qw422016.N().S(`</a>`) qw422016.N().S(`</a>`)
//line views/stuff.qtpl:270 //line views/stuff.qtpl:271
} }
//line views/stuff.qtpl:270 //line views/stuff.qtpl:271
qw422016.N().S(`</li> qw422016.N().S(`</li>
`) `)
//line views/stuff.qtpl:271 //line views/stuff.qtpl:272
} else { } else {
//line views/stuff.qtpl:271 //line views/stuff.qtpl:272
qw422016.N().S(` <li>`) qw422016.N().S(` <li>`)
//line views/stuff.qtpl:272 //line views/stuff.qtpl:273
qw422016.E().S(lc.Get("ui.about_noauth")) qw422016.E().S(lc.Get("ui.about_noauth"))
//line views/stuff.qtpl:272 //line views/stuff.qtpl:273
qw422016.N().S(`</li> qw422016.N().S(`</li>
`) `)
//line views/stuff.qtpl:273 //line views/stuff.qtpl:274
} }
//line views/stuff.qtpl:273 //line views/stuff.qtpl:274
qw422016.N().S(` </ul> qw422016.N().S(` </ul>
<p>`) <p>`)
//line views/stuff.qtpl:275 //line views/stuff.qtpl:276
qw422016.N().S(lc.Get("ui.about_hyphae", &l18n.Replacements{"link": "<a href=\"/list\">/list</a>"})) qw422016.N().S(lc.Get("ui.about_hyphae", &l18n.Replacements{"link": "<a href=\"/list\">/list</a>"}))
//line views/stuff.qtpl:275 //line views/stuff.qtpl:276
qw422016.N().S(`</p> qw422016.N().S(`</p>
</section> </section>
</main> </main>
</div> </div>
`) `)
//line views/stuff.qtpl:279 //line views/stuff.qtpl:280
} }
//line views/stuff.qtpl:279 //line views/stuff.qtpl:280
func WriteAboutHTML(qq422016 qtio422016.Writer, lc *l18n.Localizer) { func WriteAboutHTML(qq422016 qtio422016.Writer, lc *l18n.Localizer) {
//line views/stuff.qtpl:279 //line views/stuff.qtpl:280
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line views/stuff.qtpl:279 //line views/stuff.qtpl:280
StreamAboutHTML(qw422016, lc) StreamAboutHTML(qw422016, lc)
//line views/stuff.qtpl:279 //line views/stuff.qtpl:280
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line views/stuff.qtpl:279 //line views/stuff.qtpl:280
} }
//line views/stuff.qtpl:279 //line views/stuff.qtpl:280
func AboutHTML(lc *l18n.Localizer) string { func AboutHTML(lc *l18n.Localizer) string {
//line views/stuff.qtpl:279 //line views/stuff.qtpl:280
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line views/stuff.qtpl:279 //line views/stuff.qtpl:280
WriteAboutHTML(qb422016, lc) WriteAboutHTML(qb422016, lc)
//line views/stuff.qtpl:279 //line views/stuff.qtpl:280
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line views/stuff.qtpl:279 //line views/stuff.qtpl:280
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line views/stuff.qtpl:279 //line views/stuff.qtpl:280
return qs422016 return qs422016
//line views/stuff.qtpl:279 //line views/stuff.qtpl:280
} }
//line views/stuff.qtpl:281 //line views/stuff.qtpl:282
func StreamCommonScripts(qw422016 *qt422016.Writer) { func StreamCommonScripts(qw422016 *qt422016.Writer) {
//line views/stuff.qtpl:281 //line views/stuff.qtpl:282
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/stuff.qtpl:282 //line views/stuff.qtpl:283
for _, scriptPath := range cfg.CommonScripts { for _, scriptPath := range cfg.CommonScripts {
//line views/stuff.qtpl:282 //line views/stuff.qtpl:283
qw422016.N().S(` qw422016.N().S(`
<script src="`) <script src="`)
//line views/stuff.qtpl:283 //line views/stuff.qtpl:284
qw422016.E().S(scriptPath) qw422016.E().S(scriptPath)
//line views/stuff.qtpl:283 //line views/stuff.qtpl:284
qw422016.N().S(`"></script> qw422016.N().S(`"></script>
`) `)
//line views/stuff.qtpl:284 //line views/stuff.qtpl:285
} }
//line views/stuff.qtpl:284 //line views/stuff.qtpl:285
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/stuff.qtpl:285 //line views/stuff.qtpl:286
} }
//line views/stuff.qtpl:285 //line views/stuff.qtpl:286
func WriteCommonScripts(qq422016 qtio422016.Writer) { func WriteCommonScripts(qq422016 qtio422016.Writer) {
//line views/stuff.qtpl:285 //line views/stuff.qtpl:286
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line views/stuff.qtpl:285 //line views/stuff.qtpl:286
StreamCommonScripts(qw422016) StreamCommonScripts(qw422016)
//line views/stuff.qtpl:285 //line views/stuff.qtpl:286
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line views/stuff.qtpl:285 //line views/stuff.qtpl:286
} }
//line views/stuff.qtpl:285 //line views/stuff.qtpl:286
func CommonScripts() string { func CommonScripts() string {
//line views/stuff.qtpl:285 //line views/stuff.qtpl:286
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line views/stuff.qtpl:285 //line views/stuff.qtpl:286
WriteCommonScripts(qb422016) WriteCommonScripts(qb422016)
//line views/stuff.qtpl:285 //line views/stuff.qtpl:286
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line views/stuff.qtpl:285 //line views/stuff.qtpl:286
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line views/stuff.qtpl:285 //line views/stuff.qtpl:286
return qs422016 return qs422016
//line views/stuff.qtpl:285 //line views/stuff.qtpl:286
} }

View File

@@ -1,4 +1,3 @@
// TODO: l18n
package web package web
import ( import (

View File

@@ -1,4 +1,3 @@
// TODO: l18n
package web package web
import ( import (

View File

@@ -2,6 +2,7 @@ package web
import ( import (
"fmt" "fmt"
"io"
"log" "log"
"net/http" "net/http"
"os" "os"
@@ -30,6 +31,7 @@ func initReaders(r *mux.Router) {
r.PathPrefix("/text/").HandlerFunc(handlerText) r.PathPrefix("/text/").HandlerFunc(handlerText)
r.PathPrefix("/binary/").HandlerFunc(handlerBinary) r.PathPrefix("/binary/").HandlerFunc(handlerBinary)
r.PathPrefix("/rev/").HandlerFunc(handlerRevision) r.PathPrefix("/rev/").HandlerFunc(handlerRevision)
r.PathPrefix("/rev-text/").HandlerFunc(handlerRevisionText)
r.PathPrefix("/primitive-diff/").HandlerFunc(handlerPrimitiveDiff) r.PathPrefix("/primitive-diff/").HandlerFunc(handlerPrimitiveDiff)
r.PathPrefix("/attachment/").HandlerFunc(handlerAttachment) r.PathPrefix("/attachment/").HandlerFunc(handlerAttachment)
} }
@@ -69,7 +71,32 @@ func handlerPrimitiveDiff(w http.ResponseWriter, rq *http.Request) {
u)) u))
} }
// handlerRevision displays a specific revision of text part a page // handlerRevisionText sends Mycomarkup text of the hypha at the given revision. See also: handlerRevision, handlerText.
//
// /rev-text/<revHash>/<hyphaName>
func handlerRevisionText(w http.ResponseWriter, rq *http.Request) {
util.PrepareRq(rq)
var (
shorterUrl = strings.TrimPrefix(rq.URL.Path, "/rev-text/")
firstSlashIndex = strings.IndexRune(shorterUrl, '/')
revHash = shorterUrl[:firstSlashIndex]
hyphaName = util.CanonicalName(shorterUrl[firstSlashIndex+1:])
h = hyphae.ByName(hyphaName)
textContents, err = history.FileAtRevision(h.TextPartPath(), revHash)
)
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
if err != nil {
w.WriteHeader(http.StatusNotFound)
log.Printf("While serving text of %s at revision %s: %s\n", hyphaName, revHash, err.Error())
_, _ = io.WriteString(w, "Error: "+err.Error())
return
}
log.Printf("Serving text of %s from %s at revision %s\n", hyphaName, h.TextPartPath(), revHash)
w.WriteHeader(http.StatusOK)
_, _ = io.WriteString(w, textContents)
}
// handlerRevision displays a specific revision of the text part the hypha
func handlerRevision(w http.ResponseWriter, rq *http.Request) { func handlerRevision(w http.ResponseWriter, rq *http.Request) {
util.PrepareRq(rq) util.PrepareRq(rq)
var ( var (