Skip to content

zdebeer99/gojade

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GoJade

Jade template rendering library for the Go programing language (golang). GoJade is inspired by the javascript template library http://jade-lang.com/

GoJade renders a jade file directly to HTML.

all examples on http://jade-lang.com/ and http://jade-lang.com/reference/ is working except for inline tags and filters. See status for more details.

pull request welcomed.

MIT License (MIT)

Using GoJade

Installing gojade

go get github.com/zdebeer99/gojade

Importing into your project

import (
  "github.com/zdebeer99/gojade"
)

Basic Usage

import (
  "github.com/zdebeer99/gojade"
  "fmt"
)

func main(){
  //GoJade can be declared globally. it will cache templates and keep config information for parsing.
  jade:=gojade.New()
  jade.ViewPath = "./view"

  //RenderFile renders a jade file into html.
  fmt.Println(jade.RenderFile("index.jade", nil).String())
}

GoJade Examples

See the Example Folder folder for examples. Currently the example folder includes;

gojade supports math operators, operator precedence, boolean operators and string concatenation.

-var x = 5
p Do some maths with x = 5
p x * 2 = #{x*2}
p More Maths (x+3)*2
p=(x+3)*2
//- boolean operations
if x>=0 && x<10
  p x is smaller than ten
else
  p x is equal or larger than 10

Status

What is out standing

  • Filters
  • Tag Interpolation

gojade requires a clean up, some function names and parameters may change.

debug information can be improved.

benchmarks and performance improvements has not been done yet.

Differences between jade and gojade

javascript

Keep in mind that gojade does not run in a javascript environment, because of this server side javascript in gojade is not supported as in jade, a work around will be to register custom functions defined in go and calling these functions from your jade template.

Registering Custom Functions.

jade:=gojade.New()
// Register a function called hello, that can be used in your jade template
jade.RegisterFunction("hello", func(name string){return "Hello"+name})

Using the function in your jade.

p= hello("Ben")

methods defined on the model struct passed to the render function is also accessible from jade.

Variables

  • Variable names is case sensitive.

  • Only public fields and methods can be accessed from a struct passed to the render method.

  • nil will eval to an empty string or false in a condition.

  • calling a field or a method on a nil variable will throw an error. Example: lets say the object person is null then "person.Name" will throw an error. but just "person" will return a empty string.

doctype

The doctype shortcut does not support custom doctypes.

Boolean Attribute

the Boolean Attribute

input(type='checkbox', checked=true && 'checked')

is not supported and no plans for support is currently in the pipeline, please log an issue if required. use the ? conditional instead. Example:

input(type='checkbox', checked=true ? 'checked')

Unbuffered Code

Full javascript support for unbuffered code will not be supported as the template runs in go runtime.

Special cases are:

Defining a variable using var

- var x = 5
- var person = {name:"ben", age:5}

[Planned] Calling Unbuffered Functions defined in go.

//Future Implementation, not done yet.
- SomeGoFunction(5,64)
  p This Content will be passed to the last argument of SomeGoFunction()
  p This content is outside of SomeGoFunctions scope.

Useful functions

because gojade does not support javascript, the following will not work.

somestring.toUpperCase()
someArray.length

in go strings does not have methods linked to the string. The Time type for example in go has methods map to it, show this will work.

type Model struct{
  Time time.Time
}
p The Current date is
p= Time.Format("02 Jan 2006")

To assist with these scenarios gojade includes some built in functions and you can register your own go functions, any struct that has methods passed to the render function it's methods will also automatically be available in the Jade parser.

Built in Functions included is:

  • len(value)

    Get the length of an array or string.

  • upper(string)

    Change a string to uppercase

  • lower(string)

    Change a string to lower case

  • format(string,args...)

    The same as fmt.SPrintf() in go

  • isnull(value) bool

    Check if a value is nil

  • ifnull(value, replace)

    Returns replace a value if the value is nil else it returns value

  • json(value)

    convert object to json encoding

  • more is planned, suggestions is welcomed.

Inspired by: jade, go templates, gojade, amber, and indirectly by slim, haml

About

jade to html rendering library for go

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published