Add package synopsis.
This commit is contained in:
parent
2e785d367f
commit
48d36c04db
32
page.go
32
page.go
@ -1,10 +1,12 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"html/template"
|
"html/template"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
@ -132,6 +134,7 @@ const packageTemplateString = `<!DOCTYPE html>
|
|||||||
{{if .CleanPackageName}}<p>Refer to it as <i>{{.CleanPackageName}}</i>.{{end}}
|
{{if .CleanPackageName}}<p>Refer to it as <i>{{.CleanPackageName}}</i>.{{end}}
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
|
{{if .Synopsis}}<p>{{.Synopsis}}</p>{{end}}
|
||||||
<p>For more details, see the API documentation.</p>
|
<p>For more details, see the API documentation.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -197,12 +200,22 @@ type packageData struct {
|
|||||||
LatestVersions VersionList // Contains only the latest version for each major
|
LatestVersions VersionList // Contains only the latest version for each major
|
||||||
FullVersion Version // Version that the major requested resolves to
|
FullVersion Version // Version that the major requested resolves to
|
||||||
CleanPackageName string
|
CleanPackageName string
|
||||||
|
Synopsis string
|
||||||
|
}
|
||||||
|
|
||||||
|
type gddoApiSynopsisResult struct {
|
||||||
|
Results []struct {
|
||||||
|
Path string `json:"path"`
|
||||||
|
Synopsis string `json:"synopsis"`
|
||||||
|
} `json:"results"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func renderPackagePage(resp http.ResponseWriter, req *http.Request, repo *Repo) {
|
func renderPackagePage(resp http.ResponseWriter, req *http.Request, repo *Repo) {
|
||||||
data := &packageData{
|
data := &packageData{
|
||||||
Repo: repo,
|
Repo: repo,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// calculate version mapping
|
||||||
latestVersionsMap := make(map[int]Version)
|
latestVersionsMap := make(map[int]Version)
|
||||||
for _, v := range repo.AllVersions {
|
for _, v := range repo.AllVersions {
|
||||||
v2, exists := latestVersionsMap[v.Major]
|
v2, exists := latestVersionsMap[v.Major]
|
||||||
@ -217,6 +230,7 @@ func renderPackagePage(resp http.ResponseWriter, req *http.Request, repo *Repo)
|
|||||||
}
|
}
|
||||||
sort.Sort(sort.Reverse(data.LatestVersions))
|
sort.Sort(sort.Reverse(data.LatestVersions))
|
||||||
|
|
||||||
|
// find clean package name
|
||||||
data.CleanPackageName = repo.PackageName
|
data.CleanPackageName = repo.PackageName
|
||||||
if strings.HasPrefix(data.CleanPackageName, "go-") {
|
if strings.HasPrefix(data.CleanPackageName, "go-") {
|
||||||
data.CleanPackageName = data.CleanPackageName[3:]
|
data.CleanPackageName = data.CleanPackageName[3:]
|
||||||
@ -235,7 +249,23 @@ func renderPackagePage(resp http.ResponseWriter, req *http.Request, repo *Repo)
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
err := packageTemplate.Execute(resp, data)
|
// retrieve synopsis
|
||||||
|
gddoResp, err := http.Get(`http://api.godoc.org/search?q=` + url.QueryEscape(repo.GopkgPath()))
|
||||||
|
if err == nil {
|
||||||
|
synopsisResult := &gddoApiSynopsisResult{}
|
||||||
|
err = json.NewDecoder(gddoResp.Body).Decode(&synopsisResult)
|
||||||
|
gddoResp.Body.Close()
|
||||||
|
if err == nil {
|
||||||
|
for _, apiPkg := range synopsisResult.Results {
|
||||||
|
if apiPkg.Path == repo.GopkgPath() {
|
||||||
|
data.Synopsis = apiPkg.Synopsis
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
err = packageTemplate.Execute(resp, data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error executing tmplPackage: %s\n", err)
|
log.Printf("error executing tmplPackage: %s\n", err)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user