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) 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) 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) 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 }