diff options
| author | Russ Cox <rsc@golang.org> | 2021-02-26 02:15:10 -0500 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2021-06-14 17:41:39 +0000 |
| commit | 5d72b68448e421d8f18f59e3171432b669f62499 (patch) | |
| tree | 3c9c9cdb03fe72fbd1d77a09a34fa47c642fd337 | |
| parent | 5ee419f2eadb4e9213f52ffc1f6fea62bb55fbb7 (diff) | |
| download | go-x-website-5d72b68448e421d8f18f59e3171432b669f62499.tar.xz | |
cmd/golangorg: introduce CodewalkServer
Preparation for moving to a new package.
Change-Id: Ib246f694f950eadcb9afa78e6551c8fb22e109a8
Reviewed-on: https://go-review.googlesource.com/c/website/+/317660
Trust: Russ Cox <rsc@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
| -rw-r--r-- | cmd/golangorg/codewalk.go | 47 | ||||
| -rw-r--r-- | cmd/golangorg/handlers.go | 10 |
2 files changed, 33 insertions, 24 deletions
diff --git a/cmd/golangorg/codewalk.go b/cmd/golangorg/codewalk.go index d3e5cbd1..00a5ea50 100644 --- a/cmd/golangorg/codewalk.go +++ b/cmd/golangorg/codewalk.go @@ -36,36 +36,45 @@ import ( "golang.org/x/website/internal/web" ) +type CodewalkServer struct { + fsys fs.FS + site *web.Site +} + +func NewCodewalkServer(fsys fs.FS, site *web.Site) *CodewalkServer { + return &CodewalkServer{fsys, site} +} + // Handler for /doc/codewalk/ and below. -func codewalk(w http.ResponseWriter, r *http.Request) { +func (s *CodewalkServer) ServeHTTP(w http.ResponseWriter, r *http.Request) { relpath := path.Clean(r.URL.Path[1:]) r.ParseForm() if f := r.FormValue("fileprint"); f != "" { - codewalkFileprint(w, r, f) + s.codewalkFileprint(w, r, f) return } // If directory exists, serve list of code walks. - dir, err := fs.Stat(fsys, relpath) + dir, err := fs.Stat(s.fsys, relpath) if err == nil && dir.IsDir() { - codewalkDir(w, r, relpath) + s.codewalkDir(w, r, relpath) return } // If file exists, serve using standard file server. if err == nil { - site.ServeHTTP(w, r) + s.site.ServeHTTP(w, r) return } // Otherwise append .xml and hope to find // a codewalk description, but before trim // the trailing /. - cw, err := loadCodewalk(relpath + ".xml") + cw, err := s.loadCodewalk(relpath + ".xml") if err != nil { log.Print(err) - site.ServeError(w, r, err) + s.site.ServeError(w, r, err) return } @@ -74,7 +83,7 @@ func codewalk(w http.ResponseWriter, r *http.Request) { return } - site.ServePage(w, r, web.Page{ + s.site.ServePage(w, r, web.Page{ Title: "Codewalk: " + cw.Title, TabTitle: cw.Title, Template: "codewalk.html", @@ -138,8 +147,8 @@ func (st *Codestep) String() string { } // loadCodewalk reads a codewalk from the named XML file. -func loadCodewalk(filename string) (*Codewalk, error) { - f, err := fsys.Open(filename) +func (s *CodewalkServer) loadCodewalk(filename string) (*Codewalk, error) { + f, err := s.fsys.Open(filename) if err != nil { return nil, err } @@ -160,7 +169,7 @@ func loadCodewalk(filename string) (*Codewalk, error) { i = len(st.Src) } filename := st.Src[0:i] - data, err := fs.ReadFile(fsys, filename) + data, err := fs.ReadFile(s.fsys, filename) if err != nil { st.Err = err continue @@ -201,16 +210,16 @@ func loadCodewalk(filename string) (*Codewalk, error) { // codewalkDir serves the codewalk directory listing. // It scans the directory for subdirectories or files named *.xml // and prepares a table. -func codewalkDir(w http.ResponseWriter, r *http.Request, relpath string) { +func (s *CodewalkServer) codewalkDir(w http.ResponseWriter, r *http.Request, relpath string) { type elem struct { Name string Title string } - dir, err := fs.ReadDir(fsys, relpath) + dir, err := fs.ReadDir(s.fsys, relpath) if err != nil { log.Print(err) - site.ServeError(w, r, err) + s.site.ServeError(w, r, err) return } var v []interface{} @@ -219,7 +228,7 @@ func codewalkDir(w http.ResponseWriter, r *http.Request, relpath string) { if fi.IsDir() { v = append(v, &elem{name + "/", ""}) } else if strings.HasSuffix(name, ".xml") { - cw, err := loadCodewalk(relpath + "/" + name) + cw, err := s.loadCodewalk(relpath + "/" + name) if err != nil { continue } @@ -227,7 +236,7 @@ func codewalkDir(w http.ResponseWriter, r *http.Request, relpath string) { } } - site.ServePage(w, r, web.Page{ + s.site.ServePage(w, r, web.Page{ Title: "Codewalks", Template: "codewalkdir.html", Data: v, @@ -240,12 +249,12 @@ func codewalkDir(w http.ResponseWriter, r *http.Request, relpath string) { // in the response. This format is used for the middle window pane // of the codewalk pages. It is a separate iframe and does not get // the usual godoc HTML wrapper. -func codewalkFileprint(w http.ResponseWriter, r *http.Request, f string) { +func (s *CodewalkServer) codewalkFileprint(w http.ResponseWriter, r *http.Request, f string) { relpath := strings.Trim(path.Clean(f), "/") - data, err := fs.ReadFile(fsys, relpath) + data, err := fs.ReadFile(s.fsys, relpath) if err != nil { log.Print(err) - site.ServeError(w, r, err) + s.site.ServeError(w, r, err) return } lo, _ := strconv.Atoi(r.FormValue("lo")) diff --git a/cmd/golangorg/handlers.go b/cmd/golangorg/handlers.go index ee2cb77f..6000ac34 100644 --- a/cmd/golangorg/handlers.go +++ b/cmd/golangorg/handlers.go @@ -67,13 +67,13 @@ func (h hostEnforcerHandler) validHost(host string) bool { return false } -func registerHandlers(pres *web.Site) *http.ServeMux { - if pres == nil { - panic("nil Presentation") +func registerHandlers(site *web.Site) *http.ServeMux { + if site == nil { + panic("nil Site") } mux := http.NewServeMux() - mux.Handle("/", pres) - mux.Handle("/doc/codewalk/", http.HandlerFunc(codewalk)) + mux.Handle("/", site) + mux.Handle("/doc/codewalk/", NewCodewalkServer(fsys, site)) mux.Handle("/fmt", http.HandlerFunc(fmtHandler)) mux.Handle("/x/", http.HandlerFunc(xHandler)) redirect.Register(mux) |
