mulate

package module
v0.0.0-...-635edb2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 22, 2018 License: MIT Imports: 8 Imported by: 0

README

mulate

golang package for multiple layouts & templates processing by single handler

GoCard GitHub Release GitHub code size in bytes GitHub license

  • Project status: MVP is ready
  • Future plans: tests & docs

This package offers 2-step template processing, where page content template called first, so it can

  1. change page layout (among them previous markup)
  2. abort processing and return error page (this will go to way 1)
  3. abort processing and return redirect

If page content template returns HTML, at step 2, layout template will be called for result page markup build.

Request processing flow

Request processing flow

Template structure

According to sample, site templates tree might looks like:

tmpl
├── inc
│   ├── footer.tmpl
│   ├── head.tmpl
│   └── menu.tmpl
├── layout
│   ├── default.tmpl
│   ├── error.tmpl
│   └── wide.tmpl
└── page
    ├── admin
    │   └── index.tmpl
    ├── err.tmpl
    ├── index.tmpl
    ├── page.tmpl
    └── redir.tmpl

Usage


import "github.com/apisite/mulate"

func main() {

    mlt := mulate.New(cfg.Template)
    mlt.DisableCache(true)

    allFuncs := make(template.FuncMap, 0)

    err = mlt.LoadTemplates(allFuncs)

    for _, uri := range mlt.Pages() {
        log.Debugf("Registering uri: %s", uri)
        http.HandleFunc("/"+uri, handleHTML(mlt, uri, log))
    }
}  
See also
Template methods

Get http.Request data

{{ .Request.Host }}{{ .Request.URL.String }}

Get query params

{{ $param := .Request.URL.Query.Get "param" -}}

Set page title

{{ .SetTitle "admin:index" -}}

Choose layout

{{ .SetLayout "wide" -}}

Stop template processing and raise error

{{ .Raise 403 "Test error" "Error description" true }}

Stop template processing and return redirect

{{ .RedirectFound "/page" }}
Custom methods

in code

reqFuncs["data"] = func() interface{} {
    return data
}
p, err := mlt.RenderPage(uri, reqFuncs, r)

in templates

{{range data.Todos -}}
    <li>{{- .Title }}
{{end -}}

TODO

  • docs, part 1
  • tests, part 1
  • google and ask reddit for analogs
  • tests, part 2
  • docs, part 2
  • release

Library name

mulate means multiple layouts & templates.

License

The MIT License (MIT), see LICENSE.

Copyright (c) 2018 Aleksei Kovrizhkin lekovr+apisite@gmail.com

Documentation

Overview

Package mulate represents multiple layouts template functionality

Index

Constants

This section is empty.

Variables

View Source
var ErrRedirect = errors.New("Abort with redirect")

ErrRedirect is an error returned when page needs to be redirected

Functions

This section is empty.

Types

type Config

type Config struct {
	Root        string `long:"templates" default:"tmpl/" description:"Templates root path"`
	Ext         string `long:"mask" default:".tmpl" description:"Templates filename mask"`
	Includes    string `long:"includes" default:"inc/" description:"Includes path"`
	Layouts     string `long:"layouts" default:"layout/" description:"Layouts path"`
	Pages       string `long:"pages" default:"page/" description:"Pages path"`
	DefLayout   string `long:"def_layout" default:"default" description:"Default layout template"`
	ErrLayout   string `long:"err_layout" default:"error" description:"Error page layout template"`
	ContentType string `long:"content-type" default:"text/html; charset=utf-8" description:"Default content type"`
	BufferSize  int    `long:"buffer" default:"64" description:"Template buffer size"`
}

Config holds config variables and its defaults

type Page

type Page struct {
	Title       string
	Status      int
	ContentType string
	Layout      string
	JS          []string
	CSS         []string
	Request     *http.Request
	// contains filtered or unexported fields
}

Page holds page attributes

func (*Page) AddCSS

func (p *Page) AddCSS(file string) (string, error)

AddCSS - add .css file to styles list

func (*Page) AddJS

func (p *Page) AddJS(file string) (string, error)

AddJS - add .js file to scripts list

func (*Page) Raise

func (p *Page) Raise(status int, title, message string, abort bool) (string, error)

Raise - abort template processing (if given) and raise error

func (*Page) RedirectFound

func (p *Page) RedirectFound(uri string) (string, error)

RedirectFound - abort template processing and return redirect with StatusFound status

func (*Page) SetContentType

func (p *Page) SetContentType(name string) (string, error)

SetContentType - set page content type

func (*Page) SetLayout

func (p *Page) SetLayout(name string) (string, error)

SetLayout - set page layout

func (*Page) SetTitle

func (p *Page) SetTitle(name string) (string, error)

SetTitle - set page title

func (*Page) URI

func (p *Page) URI() (string, error)

URI returns GIN page uri

type Renderer

type Renderer struct {
	// contains filtered or unexported fields
}

Renderer holds per request rendering attributes

func NewRenderer

func NewRenderer(mlt *Template, page *Page) *Renderer

NewRenderer creates new renderer object

func (Renderer) Render

func (r Renderer) Render(w http.ResponseWriter) error

Render - render page and write it to w

func (Renderer) WriteContentType

func (r Renderer) WriteContentType(w http.ResponseWriter)

WriteContentType writes page content type

type Template

type Template struct {
	Funcs template.FuncMap // used externally as default runtime func map
	// contains filtered or unexported fields
}

Template holds all internally used template attributes

func New

func New(cfg Config) *Template

New creates mulate object

func (*Template) DisableCache

func (t *Template) DisableCache(flag bool)

DisableCache disables template caching

func (*Template) Layouts

func (t *Template) Layouts() []string

Layouts returns a list of page layouts founded

func (*Template) LoadTemplates

func (t *Template) LoadTemplates(funcs template.FuncMap) error

LoadTemplates parses template files

func (*Template) Pages

func (t *Template) Pages() []string

Pages returns a list of page templates founded

func (*Template) RenderLayout

func (t *Template) RenderLayout(w http.ResponseWriter, p *Page) (err error)

RenderLayout renders page content in given layout

func (*Template) RenderPage

func (t *Template) RenderPage(uri string, funcs template.FuncMap, r *http.Request) (p *Page, err error)

RenderPage renders content for given uri

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL