github.com/powerman/golang-tools@v0.1.11-0.20220410185822-5ad214d8d803/godoc/page.go (about)

     1  // Copyright 2009 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package godoc
     6  
     7  import (
     8  	"net/http"
     9  	"os"
    10  	"path/filepath"
    11  	"runtime"
    12  )
    13  
    14  // Page describes the contents of the top-level godoc webpage.
    15  type Page struct {
    16  	Title    string
    17  	Tabtitle string
    18  	Subtitle string
    19  	SrcPath  string
    20  	Query    string
    21  	Body     []byte
    22  	TreeView bool // page needs to contain treeview related js and css
    23  
    24  	// filled in by ServePage
    25  	SearchBox       bool
    26  	Playground      bool
    27  	Version         string
    28  	GoogleAnalytics string
    29  }
    30  
    31  func (p *Presentation) ServePage(w http.ResponseWriter, page Page) {
    32  	if page.Tabtitle == "" {
    33  		page.Tabtitle = page.Title
    34  	}
    35  	page.SearchBox = p.Corpus.IndexEnabled
    36  	page.Playground = p.ShowPlayground
    37  	page.Version = runtime.Version()
    38  	page.GoogleAnalytics = p.GoogleAnalytics
    39  	applyTemplateToResponseWriter(w, p.GodocHTML, page)
    40  }
    41  
    42  func (p *Presentation) ServeError(w http.ResponseWriter, r *http.Request, relpath string, err error) {
    43  	w.WriteHeader(http.StatusNotFound)
    44  	if perr, ok := err.(*os.PathError); ok {
    45  		rel, err := filepath.Rel(runtime.GOROOT(), perr.Path)
    46  		if err != nil {
    47  			perr.Path = "REDACTED"
    48  		} else {
    49  			perr.Path = filepath.Join("$GOROOT", rel)
    50  		}
    51  	}
    52  	p.ServePage(w, Page{
    53  		Title:           "File " + relpath,
    54  		Subtitle:        relpath,
    55  		Body:            applyTemplate(p.ErrorHTML, "errorHTML", err),
    56  		GoogleAnalytics: p.GoogleAnalytics,
    57  	})
    58  }