Orasund/elm-handlebars/1.0.1

NOTE: the latest version is 1.0.2

Handlebars.Syntax

Parsing a Template

exp : Parser Expression
import Parser
import Handlebars.Expression as Expression exposing (Expression(..), SubExp(..))
import Result.Extra as Result

text

"Hello {{"
|> Parser.run exp
--> Ok (Text "Hello ")


"Hello \\{\\{world\\}\\}"
|> Parser.run exp
--> Ok (Text "Hello {{world}}")

variables

"{{test}}"
|> Parser.run exp
--> Ok (Variable (LookUp (0,["test"])))

For block

"{{#test}}hello world{{/test}}"
    |> Parser.run exp
--> Ok (For (0,["test"]) [Text "hello world"])


"{{#some}}hello world{{/test}}"
    |> Parser.run exp
    |> Result.isOk
--> False


"{{#test}}hello world"
    |> Parser.run exp
    |> Result.isOk
--> False

Helper Block

"{{#test a}}hello world{{/test}}"
|> Parser.run exp
--> Ok (Block "test" (LookUp (0,["a"])) [Text "hello world"])


"{{#some.test a}}hello world{{/test}}"
|> Parser.run exp
|> Result.isOk
--> False


"{{#blockHelper (helper a)}}hello world{{/blockHelper}}"
|> Parser.run exp
--> Ok (Block "blockHelper" (Helper "helper" (LookUp (0,["a"]),[])) [Text "hello world"])


"{{#test}}hello {{name}}{{/test}}"
|> Parser.run exp
--> Ok (For (0,["test"]) [Text "hello ",Variable (LookUp (0,["name"]))])


"{{#test}}{{#test}}hello world{{/test}}{{/test}}"
|> Parser.run exp
--> Ok (For (0,["test"]) [For (0,["test"]) [Text "hello world"]])
parser : Parser (List Expression)

Parser for a template

path : Parser RelativePath
import Parser
import Handlebars.Expression as Expression exposing (Expression(..), SubExp(..))
import Result.Extra as Result


""
|> Parser.run path
|> Result.isOk
--> False


"."
|> Parser.run path
--> Ok (0,[])


"../"
|> Parser.run path
|> Result.isOk
--> False


"../."
|> Parser.run path
--> Ok (1,[])


"some.test"
|> Parser.run path
--> Ok (0,["some", "test"])


"../some"
|> Parser.run path
--> Ok (1,["some"])


"some.test a"
|> Parser.run path
--> Ok (0,["some", "test"])
subExp : Parser SubExp
import Parser
import Handlebars.Expression as Expression exposing (Expression(..), SubExp(..))
import Result.Extra as Result


"test some.test"
|> Parser.run subExp
--> Ok (Helper "test" (LookUp (0,["some","test"]),[]))


"test a b c"
|> Parser.run subExp
--> Ok (Helper "test" (LookUp (0,["a"]),[LookUp (0,["b"]),LookUp (0,["c"])]))


"some.test a"
|> Parser.run subExp
|> Result.isOk
--> False


"some (test a) b"
|> Parser.run subExp
--> Ok (Helper "some" ( (Helper "test" (LookUp (0,["a"]),[]) ), [LookUp (0,["b"])]) )


"(test)"
|> Parser.run subExp
|> Result.isOk
--> False


"some (a)"
|> Parser.run subExp
--> Ok (Helper "some" (LookUp (0,["a"]),[]))
variable : Parser String
import Parser
import Handlebars.Expression as Expression exposing (Expression(..), SubExp(..))
import Result.Extra as Result


""
    |> Parser.run variable
    |> Result.isOk
    --> False