diff --git a/views/stuff.qtpl b/views/stuff.qtpl index 0d23b3d..e3f7d9a 100644 --- a/views/stuff.qtpl +++ b/views/stuff.qtpl @@ -64,6 +64,26 @@ {% endfunc %} +It outputs a poorly formatted JSON, but it works and is valid. +{% func TitleSearchJSON(query string, generator func(string) <-chan string) %} +{% code + // Lol + counter := 0 +%} +{ + "source_query": "{%s query %}", + "results": [ + {% for hyphaName := range generator(query) %} + {% if counter > 0 %}, {% endif %}{ + "canonical_name": "{%s hyphaName %}", + "beautiful_name": "{%s util.BeautifulName(hyphaName) %}", + "url": "{%s cfg.URL + "/hypha/" + hyphaName %}" + }{% code counter++ %} + {% endfor %} + ] +} +{% endfunc %} + {% func HelpHTML(content string) %}
diff --git a/views/stuff.qtpl.go b/views/stuff.qtpl.go index 433b2bf..b77364a 100644 --- a/views/stuff.qtpl.go +++ b/views/stuff.qtpl.go @@ -212,96 +212,188 @@ func TitleSearchHTML(query string, generator func(string) <-chan string) string //line views/stuff.qtpl:65 } -//line views/stuff.qtpl:67 +// It outputs a poorly formatted JSON, but it works and is valid. + +//line views/stuff.qtpl:68 +func StreamTitleSearchJSON(qw422016 *qt422016.Writer, query string, generator func(string) <-chan string) { +//line views/stuff.qtpl:68 + qw422016.N().S(` +`) +//line views/stuff.qtpl:70 + // Lol + counter := 0 + +//line views/stuff.qtpl:72 + qw422016.N().S(` +{ + "source_query": "`) +//line views/stuff.qtpl:74 + qw422016.E().S(query) +//line views/stuff.qtpl:74 + qw422016.N().S(`", + "results": [ + `) +//line views/stuff.qtpl:76 + for hyphaName := range generator(query) { +//line views/stuff.qtpl:76 + qw422016.N().S(` + `) +//line views/stuff.qtpl:77 + if counter > 0 { +//line views/stuff.qtpl:77 + qw422016.N().S(`, `) +//line views/stuff.qtpl:77 + } +//line views/stuff.qtpl:77 + qw422016.N().S(`{ + "canonical_name": "`) +//line views/stuff.qtpl:78 + qw422016.E().S(hyphaName) +//line views/stuff.qtpl:78 + qw422016.N().S(`", + "beautiful_name": "`) +//line views/stuff.qtpl:79 + qw422016.E().S(util.BeautifulName(hyphaName)) +//line views/stuff.qtpl:79 + qw422016.N().S(`", + "url": "`) +//line views/stuff.qtpl:80 + qw422016.E().S(cfg.URL + "/hypha/" + hyphaName) +//line views/stuff.qtpl:80 + qw422016.N().S(`" + }`) +//line views/stuff.qtpl:81 + counter++ + +//line views/stuff.qtpl:81 + qw422016.N().S(` + `) +//line views/stuff.qtpl:82 + } +//line views/stuff.qtpl:82 + qw422016.N().S(` + ] +} +`) +//line views/stuff.qtpl:85 +} + +//line views/stuff.qtpl:85 +func WriteTitleSearchJSON(qq422016 qtio422016.Writer, query string, generator func(string) <-chan string) { +//line views/stuff.qtpl:85 + qw422016 := qt422016.AcquireWriter(qq422016) +//line views/stuff.qtpl:85 + StreamTitleSearchJSON(qw422016, query, generator) +//line views/stuff.qtpl:85 + qt422016.ReleaseWriter(qw422016) +//line views/stuff.qtpl:85 +} + +//line views/stuff.qtpl:85 +func TitleSearchJSON(query string, generator func(string) <-chan string) string { +//line views/stuff.qtpl:85 + qb422016 := qt422016.AcquireByteBuffer() +//line views/stuff.qtpl:85 + WriteTitleSearchJSON(qb422016, query, generator) +//line views/stuff.qtpl:85 + qs422016 := string(qb422016.B) +//line views/stuff.qtpl:85 + qt422016.ReleaseByteBuffer(qb422016) +//line views/stuff.qtpl:85 + return qs422016 +//line views/stuff.qtpl:85 +} + +//line views/stuff.qtpl:87 func StreamHelpHTML(qw422016 *qt422016.Writer, content string) { -//line views/stuff.qtpl:67 +//line views/stuff.qtpl:87 qw422016.N().S(`
`) -//line views/stuff.qtpl:71 +//line views/stuff.qtpl:91 qw422016.N().S(content) -//line views/stuff.qtpl:71 +//line views/stuff.qtpl:91 qw422016.N().S(`
`) -//line views/stuff.qtpl:74 +//line views/stuff.qtpl:94 qw422016.N().S(helpTopicsHTML()) -//line views/stuff.qtpl:74 +//line views/stuff.qtpl:94 qw422016.N().S(`
`) -//line views/stuff.qtpl:76 +//line views/stuff.qtpl:96 } -//line views/stuff.qtpl:76 +//line views/stuff.qtpl:96 func WriteHelpHTML(qq422016 qtio422016.Writer, content string) { -//line views/stuff.qtpl:76 +//line views/stuff.qtpl:96 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/stuff.qtpl:76 +//line views/stuff.qtpl:96 StreamHelpHTML(qw422016, content) -//line views/stuff.qtpl:76 +//line views/stuff.qtpl:96 qt422016.ReleaseWriter(qw422016) -//line views/stuff.qtpl:76 +//line views/stuff.qtpl:96 } -//line views/stuff.qtpl:76 +//line views/stuff.qtpl:96 func HelpHTML(content string) string { -//line views/stuff.qtpl:76 +//line views/stuff.qtpl:96 qb422016 := qt422016.AcquireByteBuffer() -//line views/stuff.qtpl:76 +//line views/stuff.qtpl:96 WriteHelpHTML(qb422016, content) -//line views/stuff.qtpl:76 +//line views/stuff.qtpl:96 qs422016 := string(qb422016.B) -//line views/stuff.qtpl:76 +//line views/stuff.qtpl:96 qt422016.ReleaseByteBuffer(qb422016) -//line views/stuff.qtpl:76 +//line views/stuff.qtpl:96 return qs422016 -//line views/stuff.qtpl:76 +//line views/stuff.qtpl:96 } -//line views/stuff.qtpl:78 +//line views/stuff.qtpl:98 func StreamHelpEmptyErrorHTML(qw422016 *qt422016.Writer) { -//line views/stuff.qtpl:78 +//line views/stuff.qtpl:98 qw422016.N().S(`

This entry does not exist!

Try finding a different entry that would help you.

If you want to write this entry by yourself, consider contributing to Mycorrhiza Wiki directly.

`) -//line views/stuff.qtpl:82 +//line views/stuff.qtpl:102 } -//line views/stuff.qtpl:82 +//line views/stuff.qtpl:102 func WriteHelpEmptyErrorHTML(qq422016 qtio422016.Writer) { -//line views/stuff.qtpl:82 +//line views/stuff.qtpl:102 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/stuff.qtpl:82 +//line views/stuff.qtpl:102 StreamHelpEmptyErrorHTML(qw422016) -//line views/stuff.qtpl:82 +//line views/stuff.qtpl:102 qt422016.ReleaseWriter(qw422016) -//line views/stuff.qtpl:82 +//line views/stuff.qtpl:102 } -//line views/stuff.qtpl:82 +//line views/stuff.qtpl:102 func HelpEmptyErrorHTML() string { -//line views/stuff.qtpl:82 +//line views/stuff.qtpl:102 qb422016 := qt422016.AcquireByteBuffer() -//line views/stuff.qtpl:82 +//line views/stuff.qtpl:102 WriteHelpEmptyErrorHTML(qb422016) -//line views/stuff.qtpl:82 +//line views/stuff.qtpl:102 qs422016 := string(qb422016.B) -//line views/stuff.qtpl:82 +//line views/stuff.qtpl:102 qt422016.ReleaseByteBuffer(qb422016) -//line views/stuff.qtpl:82 +//line views/stuff.qtpl:102 return qs422016 -//line views/stuff.qtpl:82 +//line views/stuff.qtpl:102 } -//line views/stuff.qtpl:84 +//line views/stuff.qtpl:104 func streamhelpTopicsHTML(qw422016 *qt422016.Writer) { -//line views/stuff.qtpl:84 +//line views/stuff.qtpl:104 qw422016.N().S(` `) -//line views/stuff.qtpl:101 +//line views/stuff.qtpl:121 } -//line views/stuff.qtpl:101 +//line views/stuff.qtpl:121 func writehelpTopicsHTML(qq422016 qtio422016.Writer) { -//line views/stuff.qtpl:101 +//line views/stuff.qtpl:121 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/stuff.qtpl:101 +//line views/stuff.qtpl:121 streamhelpTopicsHTML(qw422016) -//line views/stuff.qtpl:101 +//line views/stuff.qtpl:121 qt422016.ReleaseWriter(qw422016) -//line views/stuff.qtpl:101 +//line views/stuff.qtpl:121 } -//line views/stuff.qtpl:101 +//line views/stuff.qtpl:121 func helpTopicsHTML() string { -//line views/stuff.qtpl:101 +//line views/stuff.qtpl:121 qb422016 := qt422016.AcquireByteBuffer() -//line views/stuff.qtpl:101 +//line views/stuff.qtpl:121 writehelpTopicsHTML(qb422016) -//line views/stuff.qtpl:101 +//line views/stuff.qtpl:121 qs422016 := string(qb422016.B) -//line views/stuff.qtpl:101 +//line views/stuff.qtpl:121 qt422016.ReleaseByteBuffer(qb422016) -//line views/stuff.qtpl:101 +//line views/stuff.qtpl:121 return qs422016 -//line views/stuff.qtpl:101 +//line views/stuff.qtpl:121 } -//line views/stuff.qtpl:103 +//line views/stuff.qtpl:123 func StreamUserListHTML(qw422016 *qt422016.Writer) { -//line views/stuff.qtpl:103 +//line views/stuff.qtpl:123 qw422016.N().S(`

List of users

`) -//line views/stuff.qtpl:108 +//line views/stuff.qtpl:128 var ( admins = make([]string, 0) moderators = make([]string, 0) @@ -374,345 +466,345 @@ func StreamUserListHTML(qw422016 *qt422016.Writer) { } } -//line views/stuff.qtpl:123 +//line views/stuff.qtpl:143 qw422016.N().S(`

Admins

    `) -//line views/stuff.qtpl:126 +//line views/stuff.qtpl:146 for _, name := range admins { -//line views/stuff.qtpl:126 +//line views/stuff.qtpl:146 qw422016.N().S(`
  1. `) -//line views/stuff.qtpl:127 +//line views/stuff.qtpl:147 qw422016.E().S(name) -//line views/stuff.qtpl:127 +//line views/stuff.qtpl:147 qw422016.N().S(`
  2. `) -//line views/stuff.qtpl:128 +//line views/stuff.qtpl:148 } -//line views/stuff.qtpl:128 +//line views/stuff.qtpl:148 qw422016.N().S(`

Moderators

    `) -//line views/stuff.qtpl:132 +//line views/stuff.qtpl:152 for _, name := range moderators { -//line views/stuff.qtpl:132 +//line views/stuff.qtpl:152 qw422016.N().S(`
  1. `) -//line views/stuff.qtpl:133 +//line views/stuff.qtpl:153 qw422016.E().S(name) -//line views/stuff.qtpl:133 +//line views/stuff.qtpl:153 qw422016.N().S(`
  2. `) -//line views/stuff.qtpl:134 +//line views/stuff.qtpl:154 } -//line views/stuff.qtpl:134 +//line views/stuff.qtpl:154 qw422016.N().S(`

Editors

    `) -//line views/stuff.qtpl:138 +//line views/stuff.qtpl:158 for _, name := range editors { -//line views/stuff.qtpl:138 +//line views/stuff.qtpl:158 qw422016.N().S(`
  1. `) -//line views/stuff.qtpl:139 +//line views/stuff.qtpl:159 qw422016.E().S(name) -//line views/stuff.qtpl:139 +//line views/stuff.qtpl:159 qw422016.N().S(`
  2. `) -//line views/stuff.qtpl:140 +//line views/stuff.qtpl:160 } -//line views/stuff.qtpl:140 +//line views/stuff.qtpl:160 qw422016.N().S(`
`) -//line views/stuff.qtpl:144 +//line views/stuff.qtpl:164 } -//line views/stuff.qtpl:144 +//line views/stuff.qtpl:164 func WriteUserListHTML(qq422016 qtio422016.Writer) { -//line views/stuff.qtpl:144 +//line views/stuff.qtpl:164 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/stuff.qtpl:144 +//line views/stuff.qtpl:164 StreamUserListHTML(qw422016) -//line views/stuff.qtpl:144 +//line views/stuff.qtpl:164 qt422016.ReleaseWriter(qw422016) -//line views/stuff.qtpl:144 +//line views/stuff.qtpl:164 } -//line views/stuff.qtpl:144 +//line views/stuff.qtpl:164 func UserListHTML() string { -//line views/stuff.qtpl:144 +//line views/stuff.qtpl:164 qb422016 := qt422016.AcquireByteBuffer() -//line views/stuff.qtpl:144 +//line views/stuff.qtpl:164 WriteUserListHTML(qb422016) -//line views/stuff.qtpl:144 +//line views/stuff.qtpl:164 qs422016 := string(qb422016.B) -//line views/stuff.qtpl:144 +//line views/stuff.qtpl:164 qt422016.ReleaseByteBuffer(qb422016) -//line views/stuff.qtpl:144 +//line views/stuff.qtpl:164 return qs422016 -//line views/stuff.qtpl:144 +//line views/stuff.qtpl:164 } -//line views/stuff.qtpl:146 +//line views/stuff.qtpl:166 func StreamHyphaListHTML(qw422016 *qt422016.Writer) { -//line views/stuff.qtpl:146 +//line views/stuff.qtpl:166 qw422016.N().S(`

List of hyphae

This wiki has `) -//line views/stuff.qtpl:150 +//line views/stuff.qtpl:170 qw422016.N().D(hyphae.Count()) -//line views/stuff.qtpl:150 +//line views/stuff.qtpl:170 qw422016.N().S(` hyphae.

    `) -//line views/stuff.qtpl:152 +//line views/stuff.qtpl:172 for h := range hyphae.YieldExistingHyphae() { -//line views/stuff.qtpl:152 +//line views/stuff.qtpl:172 qw422016.N().S(`
  • `) -//line views/stuff.qtpl:154 +//line views/stuff.qtpl:174 qw422016.E().S(util.BeautifulName(h.Name)) -//line views/stuff.qtpl:154 +//line views/stuff.qtpl:174 qw422016.N().S(` `) -//line views/stuff.qtpl:155 +//line views/stuff.qtpl:175 if h.BinaryPath != "" { -//line views/stuff.qtpl:155 +//line views/stuff.qtpl:175 qw422016.N().S(` `) -//line views/stuff.qtpl:156 +//line views/stuff.qtpl:176 qw422016.E().S(filepath.Ext(h.BinaryPath)[1:]) -//line views/stuff.qtpl:156 +//line views/stuff.qtpl:176 qw422016.N().S(` `) -//line views/stuff.qtpl:157 +//line views/stuff.qtpl:177 } -//line views/stuff.qtpl:157 +//line views/stuff.qtpl:177 qw422016.N().S(`
  • `) -//line views/stuff.qtpl:159 +//line views/stuff.qtpl:179 } -//line views/stuff.qtpl:159 +//line views/stuff.qtpl:179 qw422016.N().S(`
`) -//line views/stuff.qtpl:163 +//line views/stuff.qtpl:183 } -//line views/stuff.qtpl:163 +//line views/stuff.qtpl:183 func WriteHyphaListHTML(qq422016 qtio422016.Writer) { -//line views/stuff.qtpl:163 +//line views/stuff.qtpl:183 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/stuff.qtpl:163 +//line views/stuff.qtpl:183 StreamHyphaListHTML(qw422016) -//line views/stuff.qtpl:163 +//line views/stuff.qtpl:183 qt422016.ReleaseWriter(qw422016) -//line views/stuff.qtpl:163 +//line views/stuff.qtpl:183 } -//line views/stuff.qtpl:163 +//line views/stuff.qtpl:183 func HyphaListHTML() string { -//line views/stuff.qtpl:163 +//line views/stuff.qtpl:183 qb422016 := qt422016.AcquireByteBuffer() -//line views/stuff.qtpl:163 +//line views/stuff.qtpl:183 WriteHyphaListHTML(qb422016) -//line views/stuff.qtpl:163 +//line views/stuff.qtpl:183 qs422016 := string(qb422016.B) -//line views/stuff.qtpl:163 +//line views/stuff.qtpl:183 qt422016.ReleaseByteBuffer(qb422016) -//line views/stuff.qtpl:163 +//line views/stuff.qtpl:183 return qs422016 -//line views/stuff.qtpl:163 +//line views/stuff.qtpl:183 } -//line views/stuff.qtpl:165 +//line views/stuff.qtpl:185 func StreamAboutHTML(qw422016 *qt422016.Writer) { -//line views/stuff.qtpl:165 +//line views/stuff.qtpl:185 qw422016.N().S(`

About `) -//line views/stuff.qtpl:169 +//line views/stuff.qtpl:189 qw422016.E().S(cfg.WikiName) -//line views/stuff.qtpl:169 +//line views/stuff.qtpl:189 qw422016.N().S(`

See /list for information about hyphae on this wiki.

`) -//line views/stuff.qtpl:187 +//line views/stuff.qtpl:207 } -//line views/stuff.qtpl:187 +//line views/stuff.qtpl:207 func WriteAboutHTML(qq422016 qtio422016.Writer) { -//line views/stuff.qtpl:187 +//line views/stuff.qtpl:207 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/stuff.qtpl:187 +//line views/stuff.qtpl:207 StreamAboutHTML(qw422016) -//line views/stuff.qtpl:187 +//line views/stuff.qtpl:207 qt422016.ReleaseWriter(qw422016) -//line views/stuff.qtpl:187 +//line views/stuff.qtpl:207 } -//line views/stuff.qtpl:187 +//line views/stuff.qtpl:207 func AboutHTML() string { -//line views/stuff.qtpl:187 +//line views/stuff.qtpl:207 qb422016 := qt422016.AcquireByteBuffer() -//line views/stuff.qtpl:187 +//line views/stuff.qtpl:207 WriteAboutHTML(qb422016) -//line views/stuff.qtpl:187 +//line views/stuff.qtpl:207 qs422016 := string(qb422016.B) -//line views/stuff.qtpl:187 +//line views/stuff.qtpl:207 qt422016.ReleaseByteBuffer(qb422016) -//line views/stuff.qtpl:187 +//line views/stuff.qtpl:207 return qs422016 -//line views/stuff.qtpl:187 +//line views/stuff.qtpl:207 } -//line views/stuff.qtpl:189 +//line views/stuff.qtpl:209 func StreamCommonScripts(qw422016 *qt422016.Writer) { -//line views/stuff.qtpl:189 +//line views/stuff.qtpl:209 qw422016.N().S(` `) -//line views/stuff.qtpl:190 +//line views/stuff.qtpl:210 for _, scriptPath := range cfg.CommonScripts { -//line views/stuff.qtpl:190 +//line views/stuff.qtpl:210 qw422016.N().S(` `) -//line views/stuff.qtpl:192 +//line views/stuff.qtpl:212 } -//line views/stuff.qtpl:192 +//line views/stuff.qtpl:212 qw422016.N().S(` `) -//line views/stuff.qtpl:193 +//line views/stuff.qtpl:213 } -//line views/stuff.qtpl:193 +//line views/stuff.qtpl:213 func WriteCommonScripts(qq422016 qtio422016.Writer) { -//line views/stuff.qtpl:193 +//line views/stuff.qtpl:213 qw422016 := qt422016.AcquireWriter(qq422016) -//line views/stuff.qtpl:193 +//line views/stuff.qtpl:213 StreamCommonScripts(qw422016) -//line views/stuff.qtpl:193 +//line views/stuff.qtpl:213 qt422016.ReleaseWriter(qw422016) -//line views/stuff.qtpl:193 +//line views/stuff.qtpl:213 } -//line views/stuff.qtpl:193 +//line views/stuff.qtpl:213 func CommonScripts() string { -//line views/stuff.qtpl:193 +//line views/stuff.qtpl:213 qb422016 := qt422016.AcquireByteBuffer() -//line views/stuff.qtpl:193 +//line views/stuff.qtpl:213 WriteCommonScripts(qb422016) -//line views/stuff.qtpl:193 +//line views/stuff.qtpl:213 qs422016 := string(qb422016.B) -//line views/stuff.qtpl:193 +//line views/stuff.qtpl:213 qt422016.ReleaseByteBuffer(qb422016) -//line views/stuff.qtpl:193 +//line views/stuff.qtpl:213 return qs422016 -//line views/stuff.qtpl:193 +//line views/stuff.qtpl:213 } diff --git a/web/search.go b/web/search.go index 3cbbe36..842f3cb 100644 --- a/web/search.go +++ b/web/search.go @@ -12,6 +12,8 @@ import ( func initSearch() { http.HandleFunc("/title-search/", handlerTitleSearch) + http.HandleFunc("/title-search-json/", handlerTitleSearchJSON) // we get a little shroomy + } func handlerTitleSearch(w http.ResponseWriter, rq *http.Request) { @@ -30,3 +32,15 @@ func handlerTitleSearch(w http.ResponseWriter, rq *http.Request) { ), ) } + +func handlerTitleSearchJSON(w http.ResponseWriter, rq *http.Request) { + util.PrepareRq(rq) + _ = rq.ParseForm() + var ( + query = rq.FormValue("q") + ) + _, _ = io.WriteString( + w, + views.TitleSearchJSON(query, shroom.YieldHyphaNamesContainingString), + ) +}