func (s *Site) renderAndWriteXML(name string, dest string, d interface{}, layouts ...string) error { renderBuffer := bp.GetBuffer() defer bp.PutBuffer(renderBuffer) renderBuffer.WriteString("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>\n") err := s.render(name, d, renderBuffer, layouts...) outBuffer := bp.GetBuffer() defer bp.PutBuffer(outBuffer) var path []byte if viper.GetBool("RelativeURLs") { path = []byte(helpers.GetDottedRelativePath(dest)) } else { s := viper.GetString("BaseURL") if !strings.HasSuffix(s, "/") { s += "/" } path = []byte(s) } transformer := transform.NewChain(transform.AbsURLInXML) transformer.Apply(outBuffer, renderBuffer, path) if err == nil { err = s.WriteDestFile(dest, outBuffer) } return err }
func (s *Site) renderAndWritePage(name string, dest string, d interface{}, layouts ...string) error { renderBuffer := bp.GetBuffer() defer bp.PutBuffer(renderBuffer) err := s.render(name, d, renderBuffer, layouts...) outBuffer := bp.GetBuffer() defer bp.PutBuffer(outBuffer) transformLinks := transform.NewEmptyTransforms() if viper.GetBool("CanonifyUrls") { absURL, err := transform.AbsURL(viper.GetString("BaseUrl")) if err != nil { return err } transformLinks = append(transformLinks, absURL...) } if viper.GetBool("watch") && !viper.GetBool("DisableLiveReload") { transformLinks = append(transformLinks, transform.LiveReloadInject) } transformer := transform.NewChain(transformLinks...) transformer.Apply(outBuffer, renderBuffer) if err == nil { if err = s.WriteDestPage(dest, outBuffer); err != nil { return err } } return err }
func (s *Site) renderAndWritePage(name string, dest string, d interface{}, layouts ...string) error { renderBuffer := bp.GetBuffer() defer bp.PutBuffer(renderBuffer) err := s.render(name, d, renderBuffer, layouts...) outBuffer := bp.GetBuffer() defer bp.PutBuffer(outBuffer) transformLinks := transform.NewEmptyTransforms() if viper.GetBool("RelativeURLs") || viper.GetBool("CanonifyURLs") { transformLinks = append(transformLinks, transform.AbsURL) } if s.Running() && viper.GetBool("watch") && !viper.GetBool("DisableLiveReload") { transformLinks = append(transformLinks, transform.LiveReloadInject) } var path []byte if viper.GetBool("RelativeURLs") { translated, err := s.PageTarget().(target.OptionalTranslator).TranslateRelative(dest) if err != nil { return err } path = []byte(helpers.GetDottedRelativePath(translated)) } else if viper.GetBool("CanonifyURLs") { s := viper.GetString("BaseURL") if !strings.HasSuffix(s, "/") { s += "/" } path = []byte(s) } transformer := transform.NewChain(transformLinks...) transformer.Apply(outBuffer, renderBuffer, path) if outBuffer.Len() == 0 { jww.WARN.Printf("%q is rendered empty\n", dest) if dest == "/" { jww.ERROR.Println("=============================================================") jww.ERROR.Println("Your rendered home page is blank: /index.html is zero-length") jww.ERROR.Println(" * Did you specify a theme on the command-line or in your") jww.ERROR.Printf(" %q file? (Current theme: %q)\n", filepath.Base(viper.ConfigFileUsed()), viper.GetString("Theme")) if !viper.GetBool("Verbose") { jww.ERROR.Println(" * For more debugging information, run \"hugo -v\"") } jww.ERROR.Println("=============================================================") } } if err == nil { if err = s.WriteDestPage(dest, outBuffer); err != nil { return err } } return err }
func (s *Site) render(d interface{}, out string, layouts ...string) (err error) { layout, found := s.findFirstLayout(layouts...) if found == false { jww.WARN.Printf("Unable to locate layout: %s\n", layouts) return } transformLinks := transform.NewEmptyTransforms() if viper.GetBool("CanonifyUrls") { absURL, err := transform.AbsURL(viper.GetString("BaseUrl")) if err != nil { return err } transformLinks = append(transformLinks, absURL...) } if viper.GetBool("watch") && !viper.GetBool("DisableLiveReload") { transformLinks = append(transformLinks, transform.LiveReloadInject) } transformer := transform.NewChain(transformLinks...) var renderBuffer *bytes.Buffer if strings.HasSuffix(out, ".xml") { renderBuffer = s.NewXMLBuffer() } else { renderBuffer = new(bytes.Buffer) } err = s.renderThing(d, layout, renderBuffer) if err != nil { // Behavior here should be dependent on if running in server or watch mode. jww.ERROR.Println(fmt.Errorf("Rendering error: %v", err)) if !s.Running() { os.Exit(-1) } } var outBuffer = new(bytes.Buffer) if strings.HasSuffix(out, ".xml") { outBuffer = renderBuffer } else { transformer.Apply(outBuffer, renderBuffer) } return s.WritePublic(out, outBuffer) }
func (s *Site) renderXML(name string, d interface{}, layouts ...string) (io.Reader, error) { renderBuffer := s.NewXMLBuffer() err := s.render(name, d, renderBuffer, layouts...) var outBuffer = new(bytes.Buffer) absURLInXML, err := transform.AbsURLInXML(viper.GetString("BaseUrl")) if err != nil { return nil, err } transformer := transform.NewChain(absURLInXML...) transformer.Apply(outBuffer, renderBuffer) return outBuffer, err }
func (s *Site) render(d interface{}, out string, layouts ...string) (err error) { layout := s.findFirstLayout(layouts...) if layout == "" { if s.Config.Verbose { fmt.Printf("Unable to locate layout: %s\n", layouts) } return } transformLinks := transform.NewEmptyTransforms() if s.Config.CanonifyUrls { absURL, err := transform.AbsURL(s.Config.BaseUrl) if err != nil { return err } transformLinks = append(transformLinks, absURL...) } transformer := transform.NewChain(transformLinks...) var renderBuffer *bytes.Buffer if strings.HasSuffix(out, ".xml") { renderBuffer = s.NewXMLBuffer() } else { renderBuffer = new(bytes.Buffer) } err = s.renderThing(d, layout, renderBuffer) if err != nil { // Behavior here should be dependent on if running in server or watch mode. fmt.Println(fmt.Errorf("Rendering error: %v", err)) if !s.Running() { os.Exit(-1) } } var outBuffer = new(bytes.Buffer) if strings.HasSuffix(out, ".xml") { outBuffer = renderBuffer } else { transformer.Apply(outBuffer, renderBuffer) } return s.WritePublic(out, outBuffer) }
func (s *Site) renderAndWritePage(name string, dest string, d interface{}, layouts ...string) error { renderBuffer := bp.GetBuffer() defer bp.PutBuffer(renderBuffer) err := s.render(name, d, renderBuffer, layouts...) outBuffer := bp.GetBuffer() defer bp.PutBuffer(outBuffer) transformLinks := transform.NewEmptyTransforms() if viper.GetBool("RelativeURLs") || viper.GetBool("CanonifyURLs") { transformLinks = append(transformLinks, transform.AbsURL) } if s.Running() && viper.GetBool("watch") && !viper.GetBool("DisableLiveReload") { transformLinks = append(transformLinks, transform.LiveReloadInject) } var path []byte if viper.GetBool("RelativeURLs") { translated, err := s.PageTarget().(target.OptionalTranslator).TranslateRelative(dest) if err != nil { return err } path = []byte(helpers.GetDottedRelativePath(translated)) } else if viper.GetBool("CanonifyURLs") { s := viper.GetString("BaseURL") if !strings.HasSuffix(s, "/") { s += "/" } path = []byte(s) } transformer := transform.NewChain(transformLinks...) transformer.Apply(outBuffer, renderBuffer, path) if err == nil { if err = s.WriteDestPage(dest, outBuffer); err != nil { return err } } return err }
func (s *Site) renderPage(name string, d interface{}, layouts ...string) (io.Reader, error) { renderBuffer := new(bytes.Buffer) err := s.render(name, d, renderBuffer, layouts...) var outBuffer = new(bytes.Buffer) transformLinks := transform.NewEmptyTransforms() if viper.GetBool("CanonifyUrls") { absURL, err := transform.AbsURL(viper.GetString("BaseUrl")) if err != nil { return nil, err } transformLinks = append(transformLinks, absURL...) } if viper.GetBool("watch") && !viper.GetBool("DisableLiveReload") { transformLinks = append(transformLinks, transform.LiveReloadInject) } transformer := transform.NewChain(transformLinks...) transformer.Apply(outBuffer, renderBuffer) return outBuffer, err }
func (s *Site) renderAndWriteXML(name string, dest string, d interface{}, layouts ...string) error { renderBuffer := bp.GetBuffer() defer bp.PutBuffer(renderBuffer) renderBuffer.WriteString("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>\n") err := s.render(name, d, renderBuffer, layouts...) absURLInXML, err := transform.AbsURLInXML(viper.GetString("BaseUrl")) if err != nil { return err } outBuffer := bp.GetBuffer() defer bp.PutBuffer(outBuffer) transformer := transform.NewChain(absURLInXML...) transformer.Apply(outBuffer, renderBuffer) if err == nil { err = s.WriteDestFile(dest, outBuffer) } return err }
func (s *Site) render(d interface{}, out string, layouts ...string) (err error) { layout := s.findFirstLayout(layouts...) if layout == "" { if s.Config.Verbose { fmt.Printf("Unable to locate layout: %s\n", layouts) } return } section := "" if page, ok := d.(*Page); ok { section, _ = page.RelPermalink() } transformer := transform.NewChain( &transform.AbsURL{BaseURL: s.Config.BaseUrl}, &transform.NavActive{Section: section}, ) renderReader, renderWriter := io.Pipe() go func() { err = s.renderThing(d, layout, renderWriter) if err != nil { panic(err) } }() trReader, trWriter := io.Pipe() go func() { transformer.Apply(trWriter, renderReader) trWriter.Close() }() return s.WritePublic(out, trReader) }