1
0
mirror of https://github.com/osmarks/mycorrhiza.git synced 2025-01-08 10:51:09 +00:00

Implement primitive search

Basically, it looks if the query is a substring of hypha names
This commit is contained in:
Timur Ismagilov 2021-07-12 18:25:57 +05:00
parent 684172dab4
commit 938a9e832d
5 changed files with 320 additions and 187 deletions

27
shroom/search.go Normal file
View File

@ -0,0 +1,27 @@
package shroom
import (
"strings"
"github.com/bouncepaw/mycorrhiza/hyphae"
"github.com/bouncepaw/mycorrhiza/util"
)
func YieldHyphaNamesContainingString(query string) <-chan string {
query = util.CanonicalName(query)
out := make(chan string)
go func() {
for h := range hyphae.YieldExistingHyphae() {
if hyphaNameMatchesString(h.Name, query) {
out <- h.Name
}
}
close(out)
}()
return out
}
// This thing gotta be changed one day, when a hero has time to implement a good searching algorithm.
func hyphaNameMatchesString(hyphaName, query string) bool {
return strings.Contains(hyphaName, query)
}

View File

@ -44,6 +44,19 @@
</html> </html>
{% endfunc %} {% endfunc %}
{% func PrimitiveSearchHTML(query string, generator func(string) <-chan string) %}
<div class="layout">
<main class="main-width primitive-search">
<ul class="primitive-search__results">
{% for hyphaName := range generator(query) %}
<li class="primitive-search__entry">
<a class="primitive-search__link wikilink" href="/hypha/{%s hyphaName %}">{%s hyphaName %}</a>
</li>
{% endfor %}
</main>
</div>
{% endfunc %}
{% func HelpHTML(content string) %} {% func HelpHTML(content string) %}
<div class="layout"> <div class="layout">
<main class="main-width help"> <main class="main-width help">

View File

@ -142,95 +142,155 @@ func BaseHTML(title, body string, u *user.User, headElements ...string) string {
} }
//line views/stuff.qtpl:47 //line views/stuff.qtpl:47
func StreamHelpHTML(qw422016 *qt422016.Writer, content string) { func StreamPrimitiveSearchHTML(qw422016 *qt422016.Writer, query string, generator func(string) <-chan string) {
//line views/stuff.qtpl:47 //line views/stuff.qtpl:47
qw422016.N().S(` qw422016.N().S(`
<div class="layout"> <div class="layout">
<main class="main-width primitive-search">
<ul class="primitive-search__results">
`)
//line views/stuff.qtpl:51
for hyphaName := range generator(query) {
//line views/stuff.qtpl:51
qw422016.N().S(`
<li class="primitive-search__entry">
<a class="primitive-search__link wikilink" href="/hypha/`)
//line views/stuff.qtpl:53
qw422016.E().S(hyphaName)
//line views/stuff.qtpl:53
qw422016.N().S(`">`)
//line views/stuff.qtpl:53
qw422016.E().S(hyphaName)
//line views/stuff.qtpl:53
qw422016.N().S(`</a>
</li>
`)
//line views/stuff.qtpl:55
}
//line views/stuff.qtpl:55
qw422016.N().S(`
</main>
</div>
`)
//line views/stuff.qtpl:58
}
//line views/stuff.qtpl:58
func WritePrimitiveSearchHTML(qq422016 qtio422016.Writer, query string, generator func(string) <-chan string) {
//line views/stuff.qtpl:58
qw422016 := qt422016.AcquireWriter(qq422016)
//line views/stuff.qtpl:58
StreamPrimitiveSearchHTML(qw422016, query, generator)
//line views/stuff.qtpl:58
qt422016.ReleaseWriter(qw422016)
//line views/stuff.qtpl:58
}
//line views/stuff.qtpl:58
func PrimitiveSearchHTML(query string, generator func(string) <-chan string) string {
//line views/stuff.qtpl:58
qb422016 := qt422016.AcquireByteBuffer()
//line views/stuff.qtpl:58
WritePrimitiveSearchHTML(qb422016, query, generator)
//line views/stuff.qtpl:58
qs422016 := string(qb422016.B)
//line views/stuff.qtpl:58
qt422016.ReleaseByteBuffer(qb422016)
//line views/stuff.qtpl:58
return qs422016
//line views/stuff.qtpl:58
}
//line views/stuff.qtpl:60
func StreamHelpHTML(qw422016 *qt422016.Writer, content string) {
//line views/stuff.qtpl:60
qw422016.N().S(`
<div class="layout">
<main class="main-width help"> <main class="main-width help">
<article> <article>
`) `)
//line views/stuff.qtpl:51 //line views/stuff.qtpl:64
qw422016.N().S(content) qw422016.N().S(content)
//line views/stuff.qtpl:51 //line views/stuff.qtpl:64
qw422016.N().S(` qw422016.N().S(`
</article> </article>
</main> </main>
`) `)
//line views/stuff.qtpl:54 //line views/stuff.qtpl:67
qw422016.N().S(helpTopicsHTML()) qw422016.N().S(helpTopicsHTML())
//line views/stuff.qtpl:54 //line views/stuff.qtpl:67
qw422016.N().S(` qw422016.N().S(`
</div> </div>
`) `)
//line views/stuff.qtpl:56 //line views/stuff.qtpl:69
} }
//line views/stuff.qtpl:56 //line views/stuff.qtpl:69
func WriteHelpHTML(qq422016 qtio422016.Writer, content string) { func WriteHelpHTML(qq422016 qtio422016.Writer, content string) {
//line views/stuff.qtpl:56 //line views/stuff.qtpl:69
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line views/stuff.qtpl:56 //line views/stuff.qtpl:69
StreamHelpHTML(qw422016, content) StreamHelpHTML(qw422016, content)
//line views/stuff.qtpl:56 //line views/stuff.qtpl:69
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line views/stuff.qtpl:56 //line views/stuff.qtpl:69
} }
//line views/stuff.qtpl:56 //line views/stuff.qtpl:69
func HelpHTML(content string) string { func HelpHTML(content string) string {
//line views/stuff.qtpl:56 //line views/stuff.qtpl:69
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line views/stuff.qtpl:56 //line views/stuff.qtpl:69
WriteHelpHTML(qb422016, content) WriteHelpHTML(qb422016, content)
//line views/stuff.qtpl:56 //line views/stuff.qtpl:69
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line views/stuff.qtpl:56 //line views/stuff.qtpl:69
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line views/stuff.qtpl:56 //line views/stuff.qtpl:69
return qs422016 return qs422016
//line views/stuff.qtpl:56 //line views/stuff.qtpl:69
} }
//line views/stuff.qtpl:58 //line views/stuff.qtpl:71
func StreamHelpEmptyErrorHTML(qw422016 *qt422016.Writer) { func StreamHelpEmptyErrorHTML(qw422016 *qt422016.Writer) {
//line views/stuff.qtpl:58 //line views/stuff.qtpl:71
qw422016.N().S(` qw422016.N().S(`
<h1>This entry does not exist!</h1> <h1>This entry does not exist!</h1>
<p>Try finding a different entry that would help you.</p> <p>Try finding a different entry that would help you.</p>
<p>If you want to write this entry by yourself, consider <a class="wikilink wikilink_external wikilink_https" href="https://github.com/bouncepaw/mycorrhiza">contributing</a> to Mycorrhiza Wiki directly.</p> <p>If you want to write this entry by yourself, consider <a class="wikilink wikilink_external wikilink_https" href="https://github.com/bouncepaw/mycorrhiza">contributing</a> to Mycorrhiza Wiki directly.</p>
`) `)
//line views/stuff.qtpl:62 //line views/stuff.qtpl:75
} }
//line views/stuff.qtpl:62 //line views/stuff.qtpl:75
func WriteHelpEmptyErrorHTML(qq422016 qtio422016.Writer) { func WriteHelpEmptyErrorHTML(qq422016 qtio422016.Writer) {
//line views/stuff.qtpl:62 //line views/stuff.qtpl:75
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line views/stuff.qtpl:62 //line views/stuff.qtpl:75
StreamHelpEmptyErrorHTML(qw422016) StreamHelpEmptyErrorHTML(qw422016)
//line views/stuff.qtpl:62 //line views/stuff.qtpl:75
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line views/stuff.qtpl:62 //line views/stuff.qtpl:75
} }
//line views/stuff.qtpl:62 //line views/stuff.qtpl:75
func HelpEmptyErrorHTML() string { func HelpEmptyErrorHTML() string {
//line views/stuff.qtpl:62 //line views/stuff.qtpl:75
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line views/stuff.qtpl:62 //line views/stuff.qtpl:75
WriteHelpEmptyErrorHTML(qb422016) WriteHelpEmptyErrorHTML(qb422016)
//line views/stuff.qtpl:62 //line views/stuff.qtpl:75
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line views/stuff.qtpl:62 //line views/stuff.qtpl:75
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line views/stuff.qtpl:62 //line views/stuff.qtpl:75
return qs422016 return qs422016
//line views/stuff.qtpl:62 //line views/stuff.qtpl:75
} }
//line views/stuff.qtpl:64 //line views/stuff.qtpl:77
func streamhelpTopicsHTML(qw422016 *qt422016.Writer) { func streamhelpTopicsHTML(qw422016 *qt422016.Writer) {
//line views/stuff.qtpl:64 //line views/stuff.qtpl:77
qw422016.N().S(` qw422016.N().S(`
<aside class="help-topics layout-card"> <aside class="help-topics layout-card">
<h2 class="layout-card__title">Help topics</h2> <h2 class="layout-card__title">Help topics</h2>
@ -249,44 +309,44 @@ func streamhelpTopicsHTML(qw422016 *qt422016.Writer) {
</ul> </ul>
</aside> </aside>
`) `)
//line views/stuff.qtpl:81 //line views/stuff.qtpl:94
} }
//line views/stuff.qtpl:81 //line views/stuff.qtpl:94
func writehelpTopicsHTML(qq422016 qtio422016.Writer) { func writehelpTopicsHTML(qq422016 qtio422016.Writer) {
//line views/stuff.qtpl:81 //line views/stuff.qtpl:94
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line views/stuff.qtpl:81 //line views/stuff.qtpl:94
streamhelpTopicsHTML(qw422016) streamhelpTopicsHTML(qw422016)
//line views/stuff.qtpl:81 //line views/stuff.qtpl:94
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line views/stuff.qtpl:81 //line views/stuff.qtpl:94
} }
//line views/stuff.qtpl:81 //line views/stuff.qtpl:94
func helpTopicsHTML() string { func helpTopicsHTML() string {
//line views/stuff.qtpl:81 //line views/stuff.qtpl:94
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line views/stuff.qtpl:81 //line views/stuff.qtpl:94
writehelpTopicsHTML(qb422016) writehelpTopicsHTML(qb422016)
//line views/stuff.qtpl:81 //line views/stuff.qtpl:94
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line views/stuff.qtpl:81 //line views/stuff.qtpl:94
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line views/stuff.qtpl:81 //line views/stuff.qtpl:94
return qs422016 return qs422016
//line views/stuff.qtpl:81 //line views/stuff.qtpl:94
} }
//line views/stuff.qtpl:83 //line views/stuff.qtpl:96
func StreamUserListHTML(qw422016 *qt422016.Writer) { func StreamUserListHTML(qw422016 *qt422016.Writer) {
//line views/stuff.qtpl:83 //line views/stuff.qtpl:96
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>List of users</h1> <h1>List of users</h1>
`) `)
//line views/stuff.qtpl:88 //line views/stuff.qtpl:101
var ( var (
admins = make([]string, 0) admins = make([]string, 0)
moderators = make([]string, 0) moderators = make([]string, 0)
@ -303,345 +363,345 @@ func StreamUserListHTML(qw422016 *qt422016.Writer) {
} }
} }
//line views/stuff.qtpl:103 //line views/stuff.qtpl:116
qw422016.N().S(` qw422016.N().S(`
<section> <section>
<h2>Admins</h2> <h2>Admins</h2>
<ol>`) <ol>`)
//line views/stuff.qtpl:106 //line views/stuff.qtpl:119
for _, name := range admins { for _, name := range admins {
//line views/stuff.qtpl:106 //line views/stuff.qtpl:119
qw422016.N().S(` qw422016.N().S(`
<li><a href="/hypha/`) <li><a href="/hypha/`)
//line views/stuff.qtpl:107 //line views/stuff.qtpl:120
qw422016.E().S(cfg.UserHypha) qw422016.E().S(cfg.UserHypha)
//line views/stuff.qtpl:107 //line views/stuff.qtpl:120
qw422016.N().S(`/`) qw422016.N().S(`/`)
//line views/stuff.qtpl:107 //line views/stuff.qtpl:120
qw422016.E().S(name) qw422016.E().S(name)
//line views/stuff.qtpl:107 //line views/stuff.qtpl:120
qw422016.N().S(`">`) qw422016.N().S(`">`)
//line views/stuff.qtpl:107 //line views/stuff.qtpl:120
qw422016.E().S(name) qw422016.E().S(name)
//line views/stuff.qtpl:107 //line views/stuff.qtpl:120
qw422016.N().S(`</a></li> qw422016.N().S(`</a></li>
`) `)
//line views/stuff.qtpl:108 //line views/stuff.qtpl:121
} }
//line views/stuff.qtpl:108 //line views/stuff.qtpl:121
qw422016.N().S(`</ol> qw422016.N().S(`</ol>
</section> </section>
<section> <section>
<h2>Moderators</h2> <h2>Moderators</h2>
<ol>`) <ol>`)
//line views/stuff.qtpl:112 //line views/stuff.qtpl:125
for _, name := range moderators { for _, name := range moderators {
//line views/stuff.qtpl:112 //line views/stuff.qtpl:125
qw422016.N().S(` qw422016.N().S(`
<li><a href="/hypha/`) <li><a href="/hypha/`)
//line views/stuff.qtpl:113 //line views/stuff.qtpl:126
qw422016.E().S(cfg.UserHypha) qw422016.E().S(cfg.UserHypha)
//line views/stuff.qtpl:113 //line views/stuff.qtpl:126
qw422016.N().S(`/`) qw422016.N().S(`/`)
//line views/stuff.qtpl:113 //line views/stuff.qtpl:126
qw422016.E().S(name) qw422016.E().S(name)
//line views/stuff.qtpl:113 //line views/stuff.qtpl:126
qw422016.N().S(`">`) qw422016.N().S(`">`)
//line views/stuff.qtpl:113 //line views/stuff.qtpl:126
qw422016.E().S(name) qw422016.E().S(name)
//line views/stuff.qtpl:113 //line views/stuff.qtpl:126
qw422016.N().S(`</a></li> qw422016.N().S(`</a></li>
`) `)
//line views/stuff.qtpl:114 //line views/stuff.qtpl:127
} }
//line views/stuff.qtpl:114 //line views/stuff.qtpl:127
qw422016.N().S(`</ol> qw422016.N().S(`</ol>
</section> </section>
<section> <section>
<h2>Editors</h2> <h2>Editors</h2>
<ol>`) <ol>`)
//line views/stuff.qtpl:118 //line views/stuff.qtpl:131
for _, name := range editors { for _, name := range editors {
//line views/stuff.qtpl:118 //line views/stuff.qtpl:131
qw422016.N().S(` qw422016.N().S(`
<li><a href="/hypha/`) <li><a href="/hypha/`)
//line views/stuff.qtpl:119 //line views/stuff.qtpl:132
qw422016.E().S(cfg.UserHypha) qw422016.E().S(cfg.UserHypha)
//line views/stuff.qtpl:119 //line views/stuff.qtpl:132
qw422016.N().S(`/`) qw422016.N().S(`/`)
//line views/stuff.qtpl:119 //line views/stuff.qtpl:132
qw422016.E().S(name) qw422016.E().S(name)
//line views/stuff.qtpl:119 //line views/stuff.qtpl:132
qw422016.N().S(`">`) qw422016.N().S(`">`)
//line views/stuff.qtpl:119 //line views/stuff.qtpl:132
qw422016.E().S(name) qw422016.E().S(name)
//line views/stuff.qtpl:119 //line views/stuff.qtpl:132
qw422016.N().S(`</a></li> qw422016.N().S(`</a></li>
`) `)
//line views/stuff.qtpl:120 //line views/stuff.qtpl:133
} }
//line views/stuff.qtpl:120 //line views/stuff.qtpl:133
qw422016.N().S(`</ol> qw422016.N().S(`</ol>
</section> </section>
</main> </main>
</div> </div>
`) `)
//line views/stuff.qtpl:124 //line views/stuff.qtpl:137
} }
//line views/stuff.qtpl:124 //line views/stuff.qtpl:137
func WriteUserListHTML(qq422016 qtio422016.Writer) { func WriteUserListHTML(qq422016 qtio422016.Writer) {
//line views/stuff.qtpl:124 //line views/stuff.qtpl:137
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line views/stuff.qtpl:124 //line views/stuff.qtpl:137
StreamUserListHTML(qw422016) StreamUserListHTML(qw422016)
//line views/stuff.qtpl:124 //line views/stuff.qtpl:137
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line views/stuff.qtpl:124 //line views/stuff.qtpl:137
} }
//line views/stuff.qtpl:124 //line views/stuff.qtpl:137
func UserListHTML() string { func UserListHTML() string {
//line views/stuff.qtpl:124 //line views/stuff.qtpl:137
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line views/stuff.qtpl:124 //line views/stuff.qtpl:137
WriteUserListHTML(qb422016) WriteUserListHTML(qb422016)
//line views/stuff.qtpl:124 //line views/stuff.qtpl:137
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line views/stuff.qtpl:124 //line views/stuff.qtpl:137
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line views/stuff.qtpl:124 //line views/stuff.qtpl:137
return qs422016 return qs422016
//line views/stuff.qtpl:124 //line views/stuff.qtpl:137
} }
//line views/stuff.qtpl:126 //line views/stuff.qtpl:139
func StreamHyphaListHTML(qw422016 *qt422016.Writer) { func StreamHyphaListHTML(qw422016 *qt422016.Writer) {
//line views/stuff.qtpl:126 //line views/stuff.qtpl:139
qw422016.N().S(` qw422016.N().S(`
<div class="layout"> <div class="layout">
<main class="main-width"> <main class="main-width">
<h1>List of hyphae</h1> <h1>List of hyphae</h1>
<p>This wiki has `) <p>This wiki has `)
//line views/stuff.qtpl:130 //line views/stuff.qtpl:143
qw422016.N().D(hyphae.Count()) qw422016.N().D(hyphae.Count())
//line views/stuff.qtpl:130 //line views/stuff.qtpl:143
qw422016.N().S(` hyphae.</p> qw422016.N().S(` hyphae.</p>
<ul class="hypha-list"> <ul class="hypha-list">
`) `)
//line views/stuff.qtpl:132 //line views/stuff.qtpl:145
for h := range hyphae.YieldExistingHyphae() { for h := range hyphae.YieldExistingHyphae() {
//line views/stuff.qtpl:132 //line views/stuff.qtpl:145
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:134 //line views/stuff.qtpl:147
qw422016.E().S(h.Name) qw422016.E().S(h.Name)
//line views/stuff.qtpl:134 //line views/stuff.qtpl:147
qw422016.N().S(`">`) qw422016.N().S(`">`)
//line views/stuff.qtpl:134 //line views/stuff.qtpl:147
qw422016.E().S(util.BeautifulName(h.Name)) qw422016.E().S(util.BeautifulName(h.Name))
//line views/stuff.qtpl:134 //line views/stuff.qtpl:147
qw422016.N().S(`</a> qw422016.N().S(`</a>
`) `)
//line views/stuff.qtpl:135 //line views/stuff.qtpl:148
if h.BinaryPath != "" { if h.BinaryPath != "" {
//line views/stuff.qtpl:135 //line views/stuff.qtpl:148
qw422016.N().S(` qw422016.N().S(`
<span class="hypha-list__amnt-type">`) <span class="hypha-list__amnt-type">`)
//line views/stuff.qtpl:136 //line views/stuff.qtpl:149
qw422016.E().S(filepath.Ext(h.BinaryPath)[1:]) qw422016.E().S(filepath.Ext(h.BinaryPath)[1:])
//line views/stuff.qtpl:136 //line views/stuff.qtpl:149
qw422016.N().S(`</span> qw422016.N().S(`</span>
`) `)
//line views/stuff.qtpl:137 //line views/stuff.qtpl:150
} }
//line views/stuff.qtpl:137 //line views/stuff.qtpl:150
qw422016.N().S(` qw422016.N().S(`
</li> </li>
`) `)
//line views/stuff.qtpl:139 //line views/stuff.qtpl:152
} }
//line views/stuff.qtpl:139 //line views/stuff.qtpl:152
qw422016.N().S(` qw422016.N().S(`
</ul> </ul>
</main> </main>
</div> </div>
`) `)
//line views/stuff.qtpl:143 //line views/stuff.qtpl:156
} }
//line views/stuff.qtpl:143 //line views/stuff.qtpl:156
func WriteHyphaListHTML(qq422016 qtio422016.Writer) { func WriteHyphaListHTML(qq422016 qtio422016.Writer) {
//line views/stuff.qtpl:143 //line views/stuff.qtpl:156
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line views/stuff.qtpl:143 //line views/stuff.qtpl:156
StreamHyphaListHTML(qw422016) StreamHyphaListHTML(qw422016)
//line views/stuff.qtpl:143 //line views/stuff.qtpl:156
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line views/stuff.qtpl:143 //line views/stuff.qtpl:156
} }
//line views/stuff.qtpl:143 //line views/stuff.qtpl:156
func HyphaListHTML() string { func HyphaListHTML() string {
//line views/stuff.qtpl:143 //line views/stuff.qtpl:156
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line views/stuff.qtpl:143 //line views/stuff.qtpl:156
WriteHyphaListHTML(qb422016) WriteHyphaListHTML(qb422016)
//line views/stuff.qtpl:143 //line views/stuff.qtpl:156
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line views/stuff.qtpl:143 //line views/stuff.qtpl:156
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line views/stuff.qtpl:143 //line views/stuff.qtpl:156
return qs422016 return qs422016
//line views/stuff.qtpl:143 //line views/stuff.qtpl:156
} }
//line views/stuff.qtpl:145 //line views/stuff.qtpl:158
func StreamAboutHTML(qw422016 *qt422016.Writer) { func StreamAboutHTML(qw422016 *qt422016.Writer) {
//line views/stuff.qtpl:145 //line views/stuff.qtpl:158
qw422016.N().S(` qw422016.N().S(`
<div class="layout"> <div class="layout">
<main class="main-width"> <main class="main-width">
<section> <section>
<h1>About `) <h1>About `)
//line views/stuff.qtpl:149 //line views/stuff.qtpl:162
qw422016.E().S(cfg.WikiName) qw422016.E().S(cfg.WikiName)
//line views/stuff.qtpl:149 //line views/stuff.qtpl:162
qw422016.N().S(`</h1> qw422016.N().S(`</h1>
<ul> <ul>
<li><b><a href="https://mycorrhiza.wiki">Mycorrhiza Wiki</a> version:</b> 1.3.0</li> <li><b><a href="https://mycorrhiza.wiki">Mycorrhiza Wiki</a> version:</b> 1.3.0</li>
`) `)
//line views/stuff.qtpl:152 //line views/stuff.qtpl:165
if cfg.UseAuth { if cfg.UseAuth {
//line views/stuff.qtpl:152 //line views/stuff.qtpl:165
qw422016.N().S(` <li><b>User count:</b> `) qw422016.N().S(` <li><b>User count:</b> `)
//line views/stuff.qtpl:153 //line views/stuff.qtpl:166
qw422016.N().DUL(user.Count()) qw422016.N().DUL(user.Count())
//line views/stuff.qtpl:153 //line views/stuff.qtpl:166
qw422016.N().S(`</li> qw422016.N().S(`</li>
<li><b>Home page:</b> <a href="/">`) <li><b>Home page:</b> <a href="/">`)
//line views/stuff.qtpl:154 //line views/stuff.qtpl:167
qw422016.E().S(cfg.HomeHypha) qw422016.E().S(cfg.HomeHypha)
//line views/stuff.qtpl:154 //line views/stuff.qtpl:167
qw422016.N().S(`</a></li> qw422016.N().S(`</a></li>
<li><b>Administrators:</b>`) <li><b>Administrators:</b>`)
//line views/stuff.qtpl:155 //line views/stuff.qtpl:168
for i, username := range user.ListUsersWithGroup("admin") { for i, username := range user.ListUsersWithGroup("admin") {
//line views/stuff.qtpl:156 //line views/stuff.qtpl:169
if i > 0 { if i > 0 {
//line views/stuff.qtpl:156 //line views/stuff.qtpl:169
qw422016.N().S(`<span aria-hidden="true">, </span> qw422016.N().S(`<span aria-hidden="true">, </span>
`) `)
//line views/stuff.qtpl:157 //line views/stuff.qtpl:170
} }
//line views/stuff.qtpl:157 //line views/stuff.qtpl:170
qw422016.N().S(` <a href="/hypha/`) qw422016.N().S(` <a href="/hypha/`)
//line views/stuff.qtpl:158 //line views/stuff.qtpl:171
qw422016.E().S(cfg.UserHypha) qw422016.E().S(cfg.UserHypha)
//line views/stuff.qtpl:158 //line views/stuff.qtpl:171
qw422016.N().S(`/`) qw422016.N().S(`/`)
//line views/stuff.qtpl:158 //line views/stuff.qtpl:171
qw422016.E().S(username) qw422016.E().S(username)
//line views/stuff.qtpl:158 //line views/stuff.qtpl:171
qw422016.N().S(`">`) qw422016.N().S(`">`)
//line views/stuff.qtpl:158 //line views/stuff.qtpl:171
qw422016.E().S(username) qw422016.E().S(username)
//line views/stuff.qtpl:158 //line views/stuff.qtpl:171
qw422016.N().S(`</a>`) qw422016.N().S(`</a>`)
//line views/stuff.qtpl:158 //line views/stuff.qtpl:171
} }
//line views/stuff.qtpl:158 //line views/stuff.qtpl:171
qw422016.N().S(`</li> qw422016.N().S(`</li>
`) `)
//line views/stuff.qtpl:159 //line views/stuff.qtpl:172
} else { } else {
//line views/stuff.qtpl:159 //line views/stuff.qtpl:172
qw422016.N().S(` <li>This wiki does not use authorization</li> qw422016.N().S(` <li>This wiki does not use authorization</li>
`) `)
//line views/stuff.qtpl:161 //line views/stuff.qtpl:174
} }
//line views/stuff.qtpl:161 //line views/stuff.qtpl:174
qw422016.N().S(` </ul> qw422016.N().S(` </ul>
<p>See <a href="/list">/list</a> for information about hyphae on this wiki.</p> <p>See <a href="/list">/list</a> for information about hyphae on this wiki.</p>
</section> </section>
</main> </main>
</div> </div>
`) `)
//line views/stuff.qtpl:167 //line views/stuff.qtpl:180
} }
//line views/stuff.qtpl:167 //line views/stuff.qtpl:180
func WriteAboutHTML(qq422016 qtio422016.Writer) { func WriteAboutHTML(qq422016 qtio422016.Writer) {
//line views/stuff.qtpl:167 //line views/stuff.qtpl:180
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line views/stuff.qtpl:167 //line views/stuff.qtpl:180
StreamAboutHTML(qw422016) StreamAboutHTML(qw422016)
//line views/stuff.qtpl:167 //line views/stuff.qtpl:180
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line views/stuff.qtpl:167 //line views/stuff.qtpl:180
} }
//line views/stuff.qtpl:167 //line views/stuff.qtpl:180
func AboutHTML() string { func AboutHTML() string {
//line views/stuff.qtpl:167 //line views/stuff.qtpl:180
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line views/stuff.qtpl:167 //line views/stuff.qtpl:180
WriteAboutHTML(qb422016) WriteAboutHTML(qb422016)
//line views/stuff.qtpl:167 //line views/stuff.qtpl:180
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line views/stuff.qtpl:167 //line views/stuff.qtpl:180
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line views/stuff.qtpl:167 //line views/stuff.qtpl:180
return qs422016 return qs422016
//line views/stuff.qtpl:167 //line views/stuff.qtpl:180
} }
//line views/stuff.qtpl:169 //line views/stuff.qtpl:182
func StreamCommonScripts(qw422016 *qt422016.Writer) { func StreamCommonScripts(qw422016 *qt422016.Writer) {
//line views/stuff.qtpl:169 //line views/stuff.qtpl:182
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/stuff.qtpl:170 //line views/stuff.qtpl:183
for _, scriptPath := range cfg.CommonScripts { for _, scriptPath := range cfg.CommonScripts {
//line views/stuff.qtpl:170 //line views/stuff.qtpl:183
qw422016.N().S(` qw422016.N().S(`
<script src="`) <script src="`)
//line views/stuff.qtpl:171 //line views/stuff.qtpl:184
qw422016.E().S(scriptPath) qw422016.E().S(scriptPath)
//line views/stuff.qtpl:171 //line views/stuff.qtpl:184
qw422016.N().S(`"></script> qw422016.N().S(`"></script>
`) `)
//line views/stuff.qtpl:172 //line views/stuff.qtpl:185
} }
//line views/stuff.qtpl:172 //line views/stuff.qtpl:185
qw422016.N().S(` qw422016.N().S(`
`) `)
//line views/stuff.qtpl:173 //line views/stuff.qtpl:186
} }
//line views/stuff.qtpl:173 //line views/stuff.qtpl:186
func WriteCommonScripts(qq422016 qtio422016.Writer) { func WriteCommonScripts(qq422016 qtio422016.Writer) {
//line views/stuff.qtpl:173 //line views/stuff.qtpl:186
qw422016 := qt422016.AcquireWriter(qq422016) qw422016 := qt422016.AcquireWriter(qq422016)
//line views/stuff.qtpl:173 //line views/stuff.qtpl:186
StreamCommonScripts(qw422016) StreamCommonScripts(qw422016)
//line views/stuff.qtpl:173 //line views/stuff.qtpl:186
qt422016.ReleaseWriter(qw422016) qt422016.ReleaseWriter(qw422016)
//line views/stuff.qtpl:173 //line views/stuff.qtpl:186
} }
//line views/stuff.qtpl:173 //line views/stuff.qtpl:186
func CommonScripts() string { func CommonScripts() string {
//line views/stuff.qtpl:173 //line views/stuff.qtpl:186
qb422016 := qt422016.AcquireByteBuffer() qb422016 := qt422016.AcquireByteBuffer()
//line views/stuff.qtpl:173 //line views/stuff.qtpl:186
WriteCommonScripts(qb422016) WriteCommonScripts(qb422016)
//line views/stuff.qtpl:173 //line views/stuff.qtpl:186
qs422016 := string(qb422016.B) qs422016 := string(qb422016.B)
//line views/stuff.qtpl:173 //line views/stuff.qtpl:186
qt422016.ReleaseByteBuffer(qb422016) qt422016.ReleaseByteBuffer(qb422016)
//line views/stuff.qtpl:173 //line views/stuff.qtpl:186
return qs422016 return qs422016
//line views/stuff.qtpl:173 //line views/stuff.qtpl:186
} }

32
web/search.go Normal file
View File

@ -0,0 +1,32 @@
package web
import (
"github.com/bouncepaw/mycorrhiza/shroom"
"github.com/bouncepaw/mycorrhiza/user"
"github.com/bouncepaw/mycorrhiza/views"
"io"
"net/http"
"github.com/bouncepaw/mycorrhiza/util"
)
func initSearch() {
http.HandleFunc("/primitive-search/", handlerPrimitiveSearch)
}
func handlerPrimitiveSearch(w http.ResponseWriter, rq *http.Request) {
util.PrepareRq(rq)
var (
// It just so happened that this function does what we need! Sorry for party rocking.
query = util.HyphaNameFromRq(rq, "primitive-search")
u = user.FromRequest(rq)
)
_, _ = io.WriteString(
w,
views.BaseHTML(
"Search: "+query,
views.PrimitiveSearchHTML(query, shroom.YieldHyphaNamesContainingString),
u,
),
)
}

View File

@ -80,6 +80,7 @@ func Init() {
initAuth() initAuth()
initHistory() initHistory()
initStuff() initStuff()
initSearch()
// Miscellaneous // Miscellaneous
http.HandleFunc("/user-list/", handlerUserList) http.HandleFunc("/user-list/", handlerUserList)