mirror of https://github.com/jlelse/GoBlog
Open Search
This commit is contained in:
parent
5b06d3ec59
commit
9242305be4
1
http.go
1
http.go
|
@ -227,6 +227,7 @@ func (a *goBlog) buildStaticHandlersRouters() error {
|
||||||
a.searchRouter.Use(a.cache.cacheMiddleware)
|
a.searchRouter.Use(a.cache.cacheMiddleware)
|
||||||
a.searchRouter.Get("/", a.serveSearch)
|
a.searchRouter.Get("/", a.serveSearch)
|
||||||
a.searchRouter.Post("/", a.serveSearch)
|
a.searchRouter.Post("/", a.serveSearch)
|
||||||
|
a.searchRouter.Get("/opensearch.xml", a.serveOpenSearch)
|
||||||
searchResultPath := "/" + searchPlaceholder
|
searchResultPath := "/" + searchPlaceholder
|
||||||
a.searchRouter.Get(searchResultPath, a.serveSearchResult)
|
a.searchRouter.Get(searchResultPath, a.serveSearchResult)
|
||||||
a.searchRouter.Get(searchResultPath+feedPath, a.serveSearchResult)
|
a.searchRouter.Get(searchResultPath+feedPath, a.serveSearchResult)
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (a *goBlog) serveOpenSearch(w http.ResponseWriter, r *http.Request) {
|
||||||
|
blog := r.Context().Value(blogContextKey).(string)
|
||||||
|
b := a.cfg.Blogs[blog]
|
||||||
|
title := b.Title
|
||||||
|
sURL := a.cfg.Server.PublicAddress + b.getRelativePath(b.Search.Path)
|
||||||
|
xml := fmt.Sprintf("<?xml version=\"1.0\"?><OpenSearchDescription xmlns=\"http://a9.com/-/spec/opensearch/1.1/\" xmlns:moz=\"http://www.mozilla.org/2006/browser/search/\">"+
|
||||||
|
"<ShortName>%s</ShortName><Description>%s</Description>"+
|
||||||
|
"<Url type=\"text/html\" method=\"post\" template=\"%s\"><Param name=\"q\" value=\"{searchTerms}\" /></Url>"+
|
||||||
|
"<moz:SearchForm>%s</moz:SearchForm>"+
|
||||||
|
"</OpenSearchDescription>",
|
||||||
|
title, title, sURL, sURL)
|
||||||
|
w.Header().Set(contentType, "application/opensearchdescription+xml")
|
||||||
|
writeMinified(w, contentTypeXML, []byte(xml))
|
||||||
|
}
|
||||||
|
|
||||||
|
func openSearchUrl(b *configBlog) string {
|
||||||
|
if b.Search != nil && b.Search.Enabled {
|
||||||
|
return b.getRelativePath(b.Search.Path + "/opensearch.xml")
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
|
@ -180,7 +180,8 @@ func (a *goBlog) initRendering() error {
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
},
|
},
|
||||||
"geotitle": a.db.geoTitle,
|
"geotitle": a.db.geoTitle,
|
||||||
|
"opensearch": openSearchUrl,
|
||||||
}
|
}
|
||||||
|
|
||||||
baseTemplate, err := template.New("base").Funcs(templateFunctions).ParseFiles(path.Join(templatesDir, templateBase+templatesExt))
|
baseTemplate, err := template.New("base").Funcs(templateFunctions).ParseFiles(path.Join(templatesDir, templateBase+templatesExt))
|
||||||
|
|
|
@ -20,6 +20,10 @@
|
||||||
<link rel="me" href="{{ . }}" />
|
<link rel="me" href="{{ . }}" />
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
{{ $os := opensearch .Blog }}
|
||||||
|
{{ if $os }}
|
||||||
|
<link rel="search" type="application/opensearchdescription+xml" href="{{ $os }}" title="{{ .Blog.Title }}" />
|
||||||
|
{{ end }}
|
||||||
{{ include "header" . }}
|
{{ include "header" . }}
|
||||||
{{ block "main" . }}{{ end }}
|
{{ block "main" . }}{{ end }}
|
||||||
{{ include "footer" . }}
|
{{ include "footer" . }}
|
||||||
|
|
Loading…
Reference in New Issue