slang~toddsundsted

Slim-inspired templating language for Crystal slang kilt template-language
0.1.1 released

Slang

Very much inspired by slim, this is a templating language which outputs HTML.

Status

Developer Preview: Barely any tests, no real-world usage, just playing with creating a nice parser/lexer that gives us slim-like templating capabilities.

Installation

Add this to your application's shard.yml:

dependencies:
  slang:
    github: jeromegn/slang

Usage

Rendering some slang to HTML

String.build do |str|
  embed_slang("path/to/file.slang", "str")
end

With frameworks...

macro render_slang(filename)
  String.build do |__view__|
    embed_slang "views/{{filename.id}}.slang", "__view__"
  end
end

render_slang :hello # will check for views/hello.slang and render it.

Example with Kemal:

get "/" do
  render_slang :hello
end

Syntax

span#some-id.classname
  #hello.world.world2
    span data-some-var=some_var
      span
        span.deep_nested
          = Process.pid
          | text node
          ' other text node syntax
    span.alongside pid=Process.pid
      custom-tag#with-id pid="#{Process.pid}"
        - strings.each do |s|
          span
            = s
#amazing-div some-attr="hello"

Given the context:

some_var = "hello"
strings = ["ah", "oh"]

Compiles to HTML:

<span id="some-id" class="classname">
  <div id="hello" class="world world2">
    <span data-some-var="hello">
      <span>
        <span class="deep_nested">
          12766
          text node
          other text node
        </span>
      </span>
    </span>
    <span class="alongside" pid="12766">
      <custom-tag id="with-id" pid="12766">
        <span>
          ah
        </span>
        <span>
          oh
        </span>
      </custom-tag>
    </span>
  </div>
</span>
<div id="amazing-div" some-attr="hello"></div>

Roadmap

  • [ ] Documentation
  • [ ] Tests
  • [x] No need to rely on ECR probably, but that's optimization at this point

Contributing

  1. Fork it ( https://github.com/jeromegn/slang/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors

  • jeromegn Jerome Gravel-Niquet - creator, maintainer
slang:
  github: toddsundsted/slang
  version: ~> 0.1.1
License MIT
Crystal none

Authors

Dependencies 0

Development Dependencies 0

Dependents 1

Similar shards

Last synced .
search fire star recently