mirror of
https://github.com/golang/go
synced 2024-11-18 10:04:43 -07:00
688c506a55
The canonical home for the golang.org website by now is the golang.org/x/website/cmd/golangorg command. That is the command that should be used to run the website locally instead of godoc. This change reduces the scope of x/tools/cmd/godoc to be a minimal Go Documentation Server. It removes the remaining pieces of the golang.org website and changes the title from "The Go Programming Language" to "Go Documentation Server". The web tree is modified as follows: • The index page has been modified to redirect to /pkg/, which serves a list of packages. • The /doc/ tree is removed. • The /robots.txt and /opensearch.xml pages are removed, since the primary use case for godoc now is a local web server. • The Google Analytics sections are removed from static templates, since it's always an empty value in local web server mode. Fixes golang/go#32011 Updates golang/go#29206 Change-Id: Id62c5f335fa2059774893ef4dcd268649278e99d Reviewed-on: https://go-review.googlesource.com/c/tools/+/207777 Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org> Run-TryBot: Andrew Bonventre <andybons@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Andrew Bonventre <andybons@golang.org>
101 lines
2.7 KiB
Go
101 lines
2.7 KiB
Go
// Copyright 2010 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"go/format"
|
|
"log"
|
|
"net/http"
|
|
"text/template"
|
|
|
|
"golang.org/x/tools/godoc"
|
|
"golang.org/x/tools/godoc/redirect"
|
|
"golang.org/x/tools/godoc/vfs"
|
|
)
|
|
|
|
// This package registers "/compile" and "/share" handlers
|
|
// that redirect to the golang.org playground.
|
|
import _ "golang.org/x/tools/playground"
|
|
|
|
var (
|
|
pres *godoc.Presentation
|
|
fs = vfs.NameSpace{}
|
|
)
|
|
|
|
func registerHandlers(pres *godoc.Presentation) {
|
|
if pres == nil {
|
|
panic("nil Presentation")
|
|
}
|
|
mux := http.NewServeMux()
|
|
mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
|
|
if req.URL.Path == "/" {
|
|
http.Redirect(w, req, "/pkg/", http.StatusFound)
|
|
return
|
|
}
|
|
pres.ServeHTTP(w, req)
|
|
})
|
|
mux.Handle("/pkg/C/", redirect.Handler("/cmd/cgo/"))
|
|
mux.HandleFunc("/fmt", fmtHandler)
|
|
redirect.Register(mux)
|
|
|
|
http.Handle("/", mux)
|
|
}
|
|
|
|
func readTemplate(name string) *template.Template {
|
|
if pres == nil {
|
|
panic("no global Presentation set yet")
|
|
}
|
|
path := "lib/godoc/" + name
|
|
|
|
// use underlying file system fs to read the template file
|
|
// (cannot use template ParseFile functions directly)
|
|
data, err := vfs.ReadFile(fs, path)
|
|
if err != nil {
|
|
log.Fatal("readTemplate: ", err)
|
|
}
|
|
// be explicit with errors (for app engine use)
|
|
t, err := template.New(name).Funcs(pres.FuncMap()).Parse(string(data))
|
|
if err != nil {
|
|
log.Fatal("readTemplate: ", err)
|
|
}
|
|
return t
|
|
}
|
|
|
|
func readTemplates(p *godoc.Presentation) {
|
|
p.CallGraphHTML = readTemplate("callgraph.html")
|
|
p.DirlistHTML = readTemplate("dirlist.html")
|
|
p.ErrorHTML = readTemplate("error.html")
|
|
p.ExampleHTML = readTemplate("example.html")
|
|
p.GodocHTML = readTemplate("godoc.html")
|
|
p.ImplementsHTML = readTemplate("implements.html")
|
|
p.MethodSetHTML = readTemplate("methodset.html")
|
|
p.PackageHTML = readTemplate("package.html")
|
|
p.PackageRootHTML = readTemplate("packageroot.html")
|
|
p.SearchHTML = readTemplate("search.html")
|
|
p.SearchDocHTML = readTemplate("searchdoc.html")
|
|
p.SearchCodeHTML = readTemplate("searchcode.html")
|
|
p.SearchTxtHTML = readTemplate("searchtxt.html")
|
|
}
|
|
|
|
type fmtResponse struct {
|
|
Body string
|
|
Error string
|
|
}
|
|
|
|
// fmtHandler takes a Go program in its "body" form value, formats it with
|
|
// standard gofmt formatting, and writes a fmtResponse as a JSON object.
|
|
func fmtHandler(w http.ResponseWriter, r *http.Request) {
|
|
resp := new(fmtResponse)
|
|
body, err := format.Source([]byte(r.FormValue("body")))
|
|
if err != nil {
|
|
resp.Error = err.Error()
|
|
} else {
|
|
resp.Body = string(body)
|
|
}
|
|
w.Header().Set("Content-type", "application/json; charset=utf-8")
|
|
json.NewEncoder(w).Encode(resp)
|
|
}
|