func RenderDoc(w io.Writer, docFile string) error { // Read the input and build the doc structure. doc, err := parse(docFile, 0) if err != nil { return err } // Find which template should be executed. ext := filepath.Ext(docFile) contentTmpl, ok := extensions_tmpl[ext] if !ok { return fmt.Errorf("no template for extension %v", ext) } // Locate the template file. actionTmpl := action_tmpl //filepath.Join(base, "templates/action.tmpl") // Read and parse the input. tmpl := present.Template() tmpl = tmpl.Funcs(template.FuncMap{"playable": playable}) if tmpl, err = tmpl.New("action").Parse(actionTmpl); err != nil { return err } if tmpl, err = tmpl.New("content").Parse(contentTmpl); err != nil { return err } // Execute the template. return doc.Render(w, tmpl) }
func initTemplates(base string) error { // Locate the template file. actionTmpl := filepath.Join(base, "templates/action.tmpl") contentTemplate = make(map[string]*template.Template) for ext, contentTmpl := range map[string]string{ ".slide": "slides.tmpl", ".article": "article.tmpl", } { contentTmpl = filepath.Join(base, "templates", contentTmpl) // Read and parse the input. tmpl := present.Template() tmpl = tmpl.Funcs(template.FuncMap{"playable": playable}) if _, err := tmpl.ParseFiles(actionTmpl, contentTmpl); err != nil { return err } contentTemplate[ext] = tmpl } var err error dirListTemplate, err = template.ParseFiles(filepath.Join(base, "templates/dir.tmpl")) if err != nil { return err } return nil }
// NewServer constructs a new Server using the specified config. func NewServer(cfg Config) (*Server, error) { present.PlayEnabled = cfg.PlayEnabled root := filepath.Join(cfg.TemplatePath, "root.tmpl") parse := func(name string) (*template.Template, error) { t := template.New("").Funcs(funcMap) return t.ParseFiles(root, filepath.Join(cfg.TemplatePath, name)) } s := &Server{cfg: cfg} // Parse templates. var err error s.template.home, err = parse("home.tmpl") if err != nil { return nil, err } s.template.index, err = parse("index.tmpl") if err != nil { return nil, err } s.template.tag, err = parse("tag.tmpl") if err != nil { return nil, err } s.template.article, err = parse("article.tmpl") if err != nil { return nil, err } p := present.Template().Funcs(funcMap) s.template.doc, err = p.ParseFiles(filepath.Join(cfg.TemplatePath, "doc.tmpl")) if err != nil { return nil, err } // Load content. err = s.loadDocs(filepath.Clean(cfg.ContentPath)) if err != nil { return nil, err } err = s.renderAtomFeed() if err != nil { return nil, err } err = s.renderJSONFeed() if err != nil { return nil, err } // Set up content file server. s.content = http.StripPrefix(s.cfg.BasePath, http.FileServer(http.Dir(cfg.ContentPath))) return s, nil }
func createTemplate() (*template.Template, error) { base := "./" actionTmpl := filepath.Join(base, "templates/action.tmpl") contentTmpl := filepath.Join(base, "templates/slides.tmpl") tmpl := present.Template() tmpl = tmpl.Funcs(template.FuncMap{"playable": playable}) if _, err := tmpl.ParseFiles(actionTmpl, contentTmpl); err != nil { return nil, err } return tmpl, nil }
func parsePresentTemplate(name string) *template.Template { t := present.Template() t = t.Funcs(template.FuncMap{"playable": playable}) if _, err := t.ParseFiles("present/templates/"+name, "present/templates/action.tmpl"); err != nil { panic(err) } t = t.Lookup("root") if t == nil { panic("root template not found for " + name) } return t }
// initTour loads tour.article and the relevant HTML templates from the given // tour root, and renders the template to the tourContent global variable. func initTour(root, transport string) error { // Make sure playground is enabled before rendering. present.PlayEnabled = true // Set up templates. action := filepath.Join(root, "template", "action.tmpl") tmpl, err := present.Template().ParseFiles(action) if err != nil { return fmt.Errorf("parse templates: %v", err) } // Init lessons. contentPath := filepath.Join(root, "content") if err := initLessons(tmpl, contentPath); err != nil { return fmt.Errorf("init lessons: %v", err) } // Init UI index := filepath.Join(root, "template", "index.tmpl") ui, err := template.ParseFiles(index) if err != nil { return fmt.Errorf("parse index.tmpl: %v", err) } buf := new(bytes.Buffer) data := struct { SocketAddr string Transport template.JS }{socketAddr(), template.JS(transport)} if err := ui.Execute(buf, data); err != nil { return fmt.Errorf("render UI: %v", err) } uiContent = buf.Bytes() return initScript(root) }
// NewServer constructs a new Server using the specified config. func NewServer(cfg Config) (*Server, error) { present.PlayEnabled = cfg.PlayEnabled parse := func(fs vfs.FileSystem, t *template.Template, filenames ...string) (*template.Template, error) { if t == nil { t = template.New(filenames[0]).Funcs(funcMap) } else { t = t.Funcs(funcMap) } for _, name := range filenames { data, err := vfs.ReadFile(fs, filepath.ToSlash(filepath.Join(cfg.TemplatePath, name))) if err != nil { return nil, err } if _, err := t.Parse(string(data)); err != nil { return nil, err } } return t, nil } s := &Server{cfg: cfg} // Parse templates. var err error s.template.home, err = parse(s.cfg.RootFS, nil, "root.tmpl", "home.tmpl") if err != nil { return nil, err } s.template.index, err = parse(s.cfg.RootFS, nil, "root.tmpl", "index.tmpl") if err != nil { return nil, err } s.template.article, err = parse(s.cfg.RootFS, nil, "root.tmpl", "article.tmpl") if err != nil { return nil, err } s.template.doc, err = parse(s.cfg.RootFS, present.Template(), "doc.tmpl") if err != nil { return nil, err } // Load content. err = s.loadDocs(s.cfg.ContentPath) if err != nil { return nil, err } err = s.renderAtomFeed() if err != nil { return nil, err } err = s.renderJSONFeed() if err != nil { return nil, err } // Set up content file server. s.content = http.StripPrefix(s.cfg.BasePath, http.FileServer( httpfs.New(getNameSpace(s.cfg.RootFS, s.cfg.ContentPath)), )) return s, nil }