🧑‍💻 Added revision info in templates footer
continuous-integration/drone/push Build is passing Details
continuous-integration/drone Build is passing Details

This commit is contained in:
Maxim Lebedev 2022-06-10 04:12:21 +05:00
parent b92992d1d6
commit 52166f6602
Signed by: toby3d
GPG Key ID: 1F14E25B7C119FC5
7 changed files with 252 additions and 162 deletions

View File

@ -6,14 +6,14 @@ SHELL = /bin/sh
srcdir = . srcdir = .
GO ?= go GO ?= go
GOFLAGS ?= GOFLAGS ?= -buildvcs=true
EXECUTABLE ?= indieauth EXECUTABLE ?= indieauth
#### End of system configuration section. #### #### End of system configuration section. ####
.PHONY: all clean check help .PHONY: all clean check help
all: main.go all:
$(GO) build -v $(GOFLAGS) -o $(EXECUTABLE) $< $(GO) build -v $(GOFLAGS) -o $(EXECUTABLE) $<
clean: ## Delete all files in the current directory that are normally created by building the program clean: ## Delete all files in the current directory that are normally created by building the program

View File

@ -44,37 +44,38 @@ var messageKeyToIndex = map[string]int{
"Authorize application": 1, "Authorize application": 1,
"Choose your scopes": 2, "Choose your scopes": 2,
"Deny": 3, "Deny": 3,
"Error": 5, "Error": 6,
"How do I fix it?": 6, "How do I fix it?": 7,
"Recipient": 9, "Recipient": 10,
"Resource": 10, "Resource": 11,
"Send": 11, "Send": 12,
"Sign In": 7, "Sign In": 8,
"TicketAuth": 8, "TicketAuth": 9,
"version": 5,
} }
var enIndex = []uint32{ // 13 elements var enIndex = []uint32{ // 14 elements
0x00000000, 0x00000010, 0x00000026, 0x00000039, 0x00000000, 0x00000010, 0x00000026, 0x00000039,
0x0000003e, 0x00000044, 0x0000004a, 0x0000005b, 0x0000003e, 0x00000044, 0x0000004c, 0x00000052,
0x00000063, 0x0000006e, 0x00000078, 0x00000081, 0x00000063, 0x0000006b, 0x00000076, 0x00000080,
0x00000086, 0x00000089, 0x0000008e,
} // Size: 76 bytes } // Size: 80 bytes
const enData string = "" + // Size: 134 bytes const enData string = "" + // Size: 142 bytes
"\x02Authorize %[1]s\x02Authorize application\x02Choose your scopes\x02De" + "\x02Authorize %[1]s\x02Authorize application\x02Choose your scopes\x02De" +
"ny\x02Allow\x02Error\x02How do I fix it?\x02Sign In\x02TicketAuth\x02Rec" + "ny\x02Allow\x02version\x02Error\x02How do I fix it?\x02Sign In\x02Ticket" +
"ipient\x02Resource\x02Send" "Auth\x02Recipient\x02Resource\x02Send"
var ruIndex = []uint32{ // 13 elements var ruIndex = []uint32{ // 14 elements
0x00000000, 0x0000001f, 0x0000004d, 0x0000008e, 0x00000000, 0x0000001f, 0x0000004d, 0x0000008e,
0x0000009f, 0x000000b2, 0x000000bf, 0x000000e1, 0x0000009f, 0x000000b2, 0x000000bf, 0x000000cc,
0x000000ec, 0x000000f7, 0x0000010c, 0x00000119, 0x000000ee, 0x000000f9, 0x00000104, 0x00000119,
0x0000012c, 0x00000126, 0x00000139,
} // Size: 76 bytes } // Size: 80 bytes
const ruData string = "" + // Size: 300 bytes const ruData string = "" + // Size: 313 bytes
"\x02Авторизовать %[1]s\x02Авторизовать приложение\x02Выбери предоставляе" + "\x02Авторизовать %[1]s\x02Авторизовать приложение\x02Выбери предоставляе" +
"мые разрешения\x02Отказать\x02Разрешить\x02Ошибка\x02Как исправить это?" + "мые разрешения\x02Отказать\x02Разрешить\x02версия\x02Ошибка\x02Как испр" +
"\x02Войти\x02TicketAuth\x02Получатель\x02Ресурс\x02Отправить" "авить это?\x02Войти\x02TicketAuth\x02Получатель\x02Ресурс\x02Отправить"
// Total table size 586 bytes (0KiB); checksum: D0ACA2B7 // Total table size 615 bytes (0KiB); checksum: 66FB60EC

View File

@ -46,6 +46,13 @@
"translatorComment": "The name of the button to continue the application authorization process", "translatorComment": "The name of the button to continue the application authorization process",
"fuzzy": true "fuzzy": true
}, },
{
"id": "version",
"message": "version",
"translation": "version",
"translatorComment": "Copied from source.",
"fuzzy": true
},
{ {
"id": "Error", "id": "Error",
"message": "Error", "message": "Error",

View File

@ -40,6 +40,11 @@
"translation": "Разрешить", "translation": "Разрешить",
"translatorComment": "Название кнопки продолжения процесса авторизациии приложения" "translatorComment": "Название кнопки продолжения процесса авторизациии приложения"
}, },
{
"id": "version",
"message": "version",
"translation": "версия"
},
{ {
"id": "Error", "id": "Error",
"message": "Error", "message": "Error",

View File

@ -40,6 +40,11 @@
"translation": "Разрешить", "translation": "Разрешить",
"translatorComment": "Название кнопки продолжения процесса авторизациии приложения" "translatorComment": "Название кнопки продолжения процесса авторизациии приложения"
}, },
{
"id": "version",
"message": "version",
"translation": "версия"
},
{ {
"id": "Error", "id": "Error",
"message": "Error", "message": "Error",

View File

@ -1,4 +1,6 @@
{% import ( {% import (
"runtime/debug"
"golang.org/x/text/language" "golang.org/x/text/language"
"golang.org/x/text/message" "golang.org/x/text/message"
@ -75,6 +77,33 @@
</head> </head>
<body class="page__body body"> <body class="page__body body">
{%= p.Body() %} {%= p.Body() %}
{% code
var path, vcsRevision string
if bi, ok := debug.ReadBuildInfo(); ok {
path = bi.Path
for i := range bi.Settings {
if bi.Settings[i].Key != "vcs.revision" {
continue
}
vcsRevision = bi.Settings[i].Value
}
}
%}
{% if vcsRevision != "" %}
<footer>
<small>
{%= p.T("version") %}
<a href="https://{%s path %}/commit/{%s vcsRevision %}" target="_blank">
{%s vcsRevision[:7] -%}
</a>
</small>
</footer>
{% endif %}
</body> </body>
</html> </html>
{% endfunc %} {% endfunc %}

View File

@ -6,309 +6,352 @@ package web
//line web/baseof.qtpl:1 //line web/baseof.qtpl:1
import ( import (
"runtime/debug"
"golang.org/x/text/language" "golang.org/x/text/language"
"golang.org/x/text/message" "golang.org/x/text/message"
"source.toby3d.me/toby3d/auth/internal/domain" "source.toby3d.me/toby3d/auth/internal/domain"
) )
//line web/baseof.qtpl:8 //line web/baseof.qtpl:10
import ( import (
qtio422016 "io" qtio422016 "io"
qt422016 "github.com/valyala/quicktemplate" qt422016 "github.com/valyala/quicktemplate"
) )
//line web/baseof.qtpl:8 //line web/baseof.qtpl:10
var ( var (
_ = qtio422016.Copy _ = qtio422016.Copy
_ = qt422016.AcquireByteBuffer _ = qt422016.AcquireByteBuffer
) )
//line web/baseof.qtpl:8 //line web/baseof.qtpl:10
type Page interface { type Page interface {
//line web/baseof.qtpl:8 //line web/baseof.qtpl:10
Body() string Body() string
//line web/baseof.qtpl:8 //line web/baseof.qtpl:10
StreamBody(qw422016 *qt422016.Writer) StreamBody(qw422016 *qt422016.Writer)
//line web/baseof.qtpl:8 //line web/baseof.qtpl:10
WriteBody(qq422016 qtio422016.Writer) WriteBody(qq422016 qtio422016.Writer)
//line web/baseof.qtpl:8 //line web/baseof.qtpl:10
Head() string Head() string
//line web/baseof.qtpl:8 //line web/baseof.qtpl:10
StreamHead(qw422016 *qt422016.Writer) StreamHead(qw422016 *qt422016.Writer)
//line web/baseof.qtpl:8 //line web/baseof.qtpl:10
WriteHead(qq422016 qtio422016.Writer) WriteHead(qq422016 qtio422016.Writer)
//line web/baseof.qtpl:8 //line web/baseof.qtpl:10
Lang() string Lang() string
//line web/baseof.qtpl:8 //line web/baseof.qtpl:10
StreamLang(qw422016 *qt422016.Writer) StreamLang(qw422016 *qt422016.Writer)
//line web/baseof.qtpl:8 //line web/baseof.qtpl:10
WriteLang(qq422016 qtio422016.Writer) WriteLang(qq422016 qtio422016.Writer)
//line web/baseof.qtpl:8 //line web/baseof.qtpl:10
Title() string Title() string
//line web/baseof.qtpl:8 //line web/baseof.qtpl:10
StreamTitle(qw422016 *qt422016.Writer) StreamTitle(qw422016 *qt422016.Writer)
//line web/baseof.qtpl:8 //line web/baseof.qtpl:10
WriteTitle(qq422016 qtio422016.Writer) WriteTitle(qq422016 qtio422016.Writer)
//line web/baseof.qtpl:8 //line web/baseof.qtpl:10
T(format string, args ...interface{}) string T(format string, args ...interface{}) string
//line web/baseof.qtpl:8 //line web/baseof.qtpl:10
StreamT(qw422016 *qt422016.Writer, format string, args ...interface{}) StreamT(qw422016 *qt422016.Writer, format string, args ...interface{})
//line web/baseof.qtpl:8 //line web/baseof.qtpl:10
WriteT(qq422016 qtio422016.Writer, format string, args ...interface{}) WriteT(qq422016 qtio422016.Writer, format string, args ...interface{})
//line web/baseof.qtpl:8 //line web/baseof.qtpl:10
} }
//line web/baseof.qtpl:16 //line web/baseof.qtpl:18
type BaseOf struct { type BaseOf struct {
Config *domain.Config Config *domain.Config
Language language.Tag Language language.Tag
Printer *message.Printer Printer *message.Printer
} }
//line web/baseof.qtpl:23
func (p *BaseOf) StreamLang(qw422016 *qt422016.Writer) {
//line web/baseof.qtpl:24
if p.Language != language.Und {
//line web/baseof.qtpl:25 //line web/baseof.qtpl:25
func (p *BaseOf) StreamLang(qw422016 *qt422016.Writer) {
//line web/baseof.qtpl:26
if p.Language != language.Und {
//line web/baseof.qtpl:27
qw422016.E().S(p.Language.String()) qw422016.E().S(p.Language.String())
//line web/baseof.qtpl:26
} else {
//line web/baseof.qtpl:26
qw422016.N().S(`en`)
//line web/baseof.qtpl:28 //line web/baseof.qtpl:28
} else {
//line web/baseof.qtpl:28
qw422016.N().S(`en`)
//line web/baseof.qtpl:30
} }
//line web/baseof.qtpl:29 //line web/baseof.qtpl:31
} }
//line web/baseof.qtpl:29 //line web/baseof.qtpl:31
func (p *BaseOf) WriteLang(qq422016 qtio422016.Writer) { func (p *BaseOf) WriteLang(qq422016 qtio422016.Writer) {
//line web/baseof.qtpl:29 //line web/baseof.qtpl:31
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line web/baseof.qtpl:29 //line web/baseof.qtpl:31
p.StreamLang(qw422016) p.StreamLang(qw422016)
//line web/baseof.qtpl:29 //line web/baseof.qtpl:31
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line web/baseof.qtpl:29 //line web/baseof.qtpl:31
} }
//line web/baseof.qtpl:29 //line web/baseof.qtpl:31
func (p *BaseOf) Lang() string { func (p *BaseOf) Lang() string {
//line web/baseof.qtpl:29 //line web/baseof.qtpl:31
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line web/baseof.qtpl:29 //line web/baseof.qtpl:31
p.WriteLang(qb422016) p.WriteLang(qb422016)
//line web/baseof.qtpl:29 //line web/baseof.qtpl:31
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line web/baseof.qtpl:29 //line web/baseof.qtpl:31
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line web/baseof.qtpl:29 //line web/baseof.qtpl:31
return qs422016 return qs422016
//line web/baseof.qtpl:29 //line web/baseof.qtpl:31
} }
//line web/baseof.qtpl:33 //line web/baseof.qtpl:35
func (p *BaseOf) StreamTitle(qw422016 *qt422016.Writer) { func (p *BaseOf) StreamTitle(qw422016 *qt422016.Writer) {
//line web/baseof.qtpl:33 //line web/baseof.qtpl:35
qw422016.N().S(` `) qw422016.N().S(` `)
//line web/baseof.qtpl:34 //line web/baseof.qtpl:36
qw422016.E().S(p.Config.Name) qw422016.E().S(p.Config.Name)
//line web/baseof.qtpl:34 //line web/baseof.qtpl:36
qw422016.N().S(` `) qw422016.N().S(` `)
//line web/baseof.qtpl:35 //line web/baseof.qtpl:37
} }
//line web/baseof.qtpl:35 //line web/baseof.qtpl:37
func (p *BaseOf) WriteTitle(qq422016 qtio422016.Writer) { func (p *BaseOf) WriteTitle(qq422016 qtio422016.Writer) {
//line web/baseof.qtpl:35 //line web/baseof.qtpl:37
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line web/baseof.qtpl:35 //line web/baseof.qtpl:37
p.StreamTitle(qw422016) p.StreamTitle(qw422016)
//line web/baseof.qtpl:35 //line web/baseof.qtpl:37
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line web/baseof.qtpl:35 //line web/baseof.qtpl:37
} }
//line web/baseof.qtpl:35 //line web/baseof.qtpl:37
func (p *BaseOf) Title() string { func (p *BaseOf) Title() string {
//line web/baseof.qtpl:35 //line web/baseof.qtpl:37
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line web/baseof.qtpl:35 //line web/baseof.qtpl:37
p.WriteTitle(qb422016) p.WriteTitle(qb422016)
//line web/baseof.qtpl:35 //line web/baseof.qtpl:37
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line web/baseof.qtpl:35 //line web/baseof.qtpl:37
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line web/baseof.qtpl:35 //line web/baseof.qtpl:37
return qs422016 return qs422016
//line web/baseof.qtpl:35 //line web/baseof.qtpl:37
} }
//line web/baseof.qtpl:37 //line web/baseof.qtpl:39
func (p *BaseOf) StreamHead(qw422016 *qt422016.Writer) { func (p *BaseOf) StreamHead(qw422016 *qt422016.Writer) {
//line web/baseof.qtpl:37 //line web/baseof.qtpl:39
qw422016.N().S(` `) qw422016.N().S(` `)
//line web/baseof.qtpl:38 //line web/baseof.qtpl:40
qw422016.N().S(` <link rel="icon" href="`) qw422016.N().S(` <link rel="icon" href="`)
//line web/baseof.qtpl:41 //line web/baseof.qtpl:43
qw422016.E().S(p.Config.Server.StaticURLPrefix) qw422016.E().S(p.Config.Server.StaticURLPrefix)
//line web/baseof.qtpl:41 //line web/baseof.qtpl:43
qw422016.N().S(`/favicon.ico" sizes="any"> <link rel="icon" href="`) qw422016.N().S(`/favicon.ico" sizes="any"> <link rel="icon" href="`)
//line web/baseof.qtpl:46 //line web/baseof.qtpl:48
qw422016.E().S(p.Config.Server.StaticURLPrefix) qw422016.E().S(p.Config.Server.StaticURLPrefix)
//line web/baseof.qtpl:46 //line web/baseof.qtpl:48
qw422016.N().S(`/icon.svg" type="image/svg+xml"> <link rel="apple-touch-icon" href="`) qw422016.N().S(`/icon.svg" type="image/svg+xml"> <link rel="apple-touch-icon" href="`)
//line web/baseof.qtpl:51 //line web/baseof.qtpl:53
qw422016.E().S(p.Config.Server.StaticURLPrefix) qw422016.E().S(p.Config.Server.StaticURLPrefix)
//line web/baseof.qtpl:51 //line web/baseof.qtpl:53
qw422016.N().S(`/apple-touch-icon.png"> <link rel="manifest" href="`) qw422016.N().S(`/apple-touch-icon.png"> <link rel="manifest" href="`)
//line web/baseof.qtpl:55 //line web/baseof.qtpl:57
qw422016.E().S(p.Config.Server.StaticURLPrefix) qw422016.E().S(p.Config.Server.StaticURLPrefix)
//line web/baseof.qtpl:55 //line web/baseof.qtpl:57
qw422016.N().S(`/manifest.webmanifest"> `) qw422016.N().S(`/manifest.webmanifest"> `)
//line web/baseof.qtpl:56 //line web/baseof.qtpl:58
} }
//line web/baseof.qtpl:56 //line web/baseof.qtpl:58
func (p *BaseOf) WriteHead(qq422016 qtio422016.Writer) { func (p *BaseOf) WriteHead(qq422016 qtio422016.Writer) {
//line web/baseof.qtpl:56 //line web/baseof.qtpl:58
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line web/baseof.qtpl:56 //line web/baseof.qtpl:58
p.StreamHead(qw422016) p.StreamHead(qw422016)
//line web/baseof.qtpl:56 //line web/baseof.qtpl:58
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line web/baseof.qtpl:56 //line web/baseof.qtpl:58
} }
//line web/baseof.qtpl:56 //line web/baseof.qtpl:58
func (p *BaseOf) Head() string { func (p *BaseOf) Head() string {
//line web/baseof.qtpl:56 //line web/baseof.qtpl:58
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line web/baseof.qtpl:56 //line web/baseof.qtpl:58
p.WriteHead(qb422016) p.WriteHead(qb422016)
//line web/baseof.qtpl:56 //line web/baseof.qtpl:58
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line web/baseof.qtpl:56 //line web/baseof.qtpl:58
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line web/baseof.qtpl:56 //line web/baseof.qtpl:58
return qs422016 return qs422016
//line web/baseof.qtpl:56 //line web/baseof.qtpl:58
} }
//line web/baseof.qtpl:58 //line web/baseof.qtpl:60
func (p *BaseOf) StreamBody(qw422016 *qt422016.Writer) { func (p *BaseOf) StreamBody(qw422016 *qt422016.Writer) {
//line web/baseof.qtpl:58 //line web/baseof.qtpl:60
} }
//line web/baseof.qtpl:58 //line web/baseof.qtpl:60
func (p *BaseOf) WriteBody(qq422016 qtio422016.Writer) { func (p *BaseOf) WriteBody(qq422016 qtio422016.Writer) {
//line web/baseof.qtpl:58 //line web/baseof.qtpl:60
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line web/baseof.qtpl:58 //line web/baseof.qtpl:60
p.StreamBody(qw422016) p.StreamBody(qw422016)
//line web/baseof.qtpl:58 //line web/baseof.qtpl:60
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line web/baseof.qtpl:58 //line web/baseof.qtpl:60
} }
//line web/baseof.qtpl:58 //line web/baseof.qtpl:60
func (p *BaseOf) Body() string { func (p *BaseOf) Body() string {
//line web/baseof.qtpl:58 //line web/baseof.qtpl:60
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line web/baseof.qtpl:58 //line web/baseof.qtpl:60
p.WriteBody(qb422016) p.WriteBody(qb422016)
//line web/baseof.qtpl:58 //line web/baseof.qtpl:60
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line web/baseof.qtpl:58 //line web/baseof.qtpl:60
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line web/baseof.qtpl:58 //line web/baseof.qtpl:60
return qs422016 return qs422016
//line web/baseof.qtpl:58 //line web/baseof.qtpl:60
} }
//line web/baseof.qtpl:60 //line web/baseof.qtpl:62
func StreamTemplate(qw422016 *qt422016.Writer, p Page) { func StreamTemplate(qw422016 *qt422016.Writer, p Page) {
//line web/baseof.qtpl:60 //line web/baseof.qtpl:62
qw422016.N().S(` <!DOCTYPE html> <html class="page" lang="`) qw422016.N().S(` <!DOCTYPE html> <html class="page" lang="`)
//line web/baseof.qtpl:64 //line web/baseof.qtpl:66
p.StreamLang(qw422016) p.StreamLang(qw422016)
//line web/baseof.qtpl:64 //line web/baseof.qtpl:66
qw422016.N().S(`"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> `) qw422016.N().S(`"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> `)
//line web/baseof.qtpl:72 //line web/baseof.qtpl:74
p.StreamHead(qw422016) p.StreamHead(qw422016)
//line web/baseof.qtpl:72 //line web/baseof.qtpl:74
qw422016.N().S(` <title>`) qw422016.N().S(` <title>`)
//line web/baseof.qtpl:74 //line web/baseof.qtpl:76
p.StreamTitle(qw422016) p.StreamTitle(qw422016)
//line web/baseof.qtpl:74 //line web/baseof.qtpl:76
qw422016.N().S(`</title> </head> <body class="page__body body"> `) qw422016.N().S(`</title> </head> <body class="page__body body"> `)
//line web/baseof.qtpl:77 //line web/baseof.qtpl:79
p.StreamBody(qw422016) p.StreamBody(qw422016)
//line web/baseof.qtpl:77 //line web/baseof.qtpl:79
qw422016.N().S(` `)
//line web/baseof.qtpl:82
var path, vcsRevision string
if bi, ok := debug.ReadBuildInfo(); ok {
path = bi.Path
for i := range bi.Settings {
if bi.Settings[i].Key != "vcs.revision" {
continue
}
vcsRevision = bi.Settings[i].Value
}
}
//line web/baseof.qtpl:95
qw422016.N().S(` `)
//line web/baseof.qtpl:97
if vcsRevision != "" {
//line web/baseof.qtpl:97
qw422016.N().S(` <footer> <small> `)
//line web/baseof.qtpl:100
p.StreamT(qw422016, "version")
//line web/baseof.qtpl:100
qw422016.N().S(` <a href="https://`)
//line web/baseof.qtpl:101
qw422016.E().S(path)
//line web/baseof.qtpl:101
qw422016.N().S(`/commit/`)
//line web/baseof.qtpl:101
qw422016.E().S(vcsRevision)
//line web/baseof.qtpl:101
qw422016.N().S(`" target="_blank"> `)
//line web/baseof.qtpl:102
qw422016.E().S(vcsRevision[:7])
//line web/baseof.qtpl:102
qw422016.N().S(`</a> </small> </footer> `)
//line web/baseof.qtpl:106
}
//line web/baseof.qtpl:106
qw422016.N().S(` </body> </html> `) qw422016.N().S(` </body> </html> `)
//line web/baseof.qtpl:80 //line web/baseof.qtpl:109
} }
//line web/baseof.qtpl:80 //line web/baseof.qtpl:109
func WriteTemplate(qq422016 qtio422016.Writer, p Page) { func WriteTemplate(qq422016 qtio422016.Writer, p Page) {
//line web/baseof.qtpl:80 //line web/baseof.qtpl:109
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line web/baseof.qtpl:80 //line web/baseof.qtpl:109
StreamTemplate(qw422016, p) StreamTemplate(qw422016, p)
//line web/baseof.qtpl:80 //line web/baseof.qtpl:109
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line web/baseof.qtpl:80 //line web/baseof.qtpl:109
} }
//line web/baseof.qtpl:80 //line web/baseof.qtpl:109
func Template(p Page) string { func Template(p Page) string {
//line web/baseof.qtpl:80 //line web/baseof.qtpl:109
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line web/baseof.qtpl:80 //line web/baseof.qtpl:109
WriteTemplate(qb422016, p) WriteTemplate(qb422016, p)
//line web/baseof.qtpl:80 //line web/baseof.qtpl:109
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line web/baseof.qtpl:80 //line web/baseof.qtpl:109
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line web/baseof.qtpl:80 //line web/baseof.qtpl:109
return qs422016 return qs422016
//line web/baseof.qtpl:80 //line web/baseof.qtpl:109
} }
//line web/baseof.qtpl:82 //line web/baseof.qtpl:111
func (p *BaseOf) StreamT(qw422016 *qt422016.Writer, format string, args ...interface{}) { func (p *BaseOf) StreamT(qw422016 *qt422016.Writer, format string, args ...interface{}) {
//line web/baseof.qtpl:82 //line web/baseof.qtpl:111
qw422016.N().S(` `) qw422016.N().S(` `)
//line web/baseof.qtpl:83 //line web/baseof.qtpl:112
qw422016.E().S(p.Printer.Sprintf(format, args...)) qw422016.E().S(p.Printer.Sprintf(format, args...))
//line web/baseof.qtpl:83 //line web/baseof.qtpl:112
qw422016.N().S(` `) qw422016.N().S(` `)
//line web/baseof.qtpl:84 //line web/baseof.qtpl:113
} }
//line web/baseof.qtpl:84 //line web/baseof.qtpl:113
func (p *BaseOf) WriteT(qq422016 qtio422016.Writer, format string, args ...interface{}) { func (p *BaseOf) WriteT(qq422016 qtio422016.Writer, format string, args ...interface{}) {
//line web/baseof.qtpl:84 //line web/baseof.qtpl:113
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line web/baseof.qtpl:84 //line web/baseof.qtpl:113
p.StreamT(qw422016, format, args...) p.StreamT(qw422016, format, args...)
//line web/baseof.qtpl:84 //line web/baseof.qtpl:113
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line web/baseof.qtpl:84 //line web/baseof.qtpl:113
} }
//line web/baseof.qtpl:84 //line web/baseof.qtpl:113
func (p *BaseOf) T(format string, args ...interface{}) string { func (p *BaseOf) T(format string, args ...interface{}) string {
//line web/baseof.qtpl:84 //line web/baseof.qtpl:113
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line web/baseof.qtpl:84 //line web/baseof.qtpl:113
p.WriteT(qb422016, format, args...) p.WriteT(qb422016, format, args...)
//line web/baseof.qtpl:84 //line web/baseof.qtpl:113
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line web/baseof.qtpl:84 //line web/baseof.qtpl:113
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line web/baseof.qtpl:84 //line web/baseof.qtpl:113
return qs422016 return qs422016
//line web/baseof.qtpl:84 //line web/baseof.qtpl:113
} }