1
0
Fork 0
mirror of https://github.com/MillironX/Kelpie.jl.git synced 2024-11-14 13:43:08 +00:00
🐕 I accidentally built an HTML templating engine in Julia
Find a file
Thomas A. Christensen II 0efeef1572
Update spelling dictionary
Signed-off-by: Thomas A. Christensen II <25492070+MillironX@users.noreply.github.com>
2022-04-04 17:30:54 -05:00
.github Update code to use Prettier style 2022-04-04 17:22:25 -05:00
.vscode Update code to use Prettier style 2022-04-04 17:22:25 -05:00
docs Update code to use Prettier style 2022-04-04 17:22:25 -05:00
src Add function for divs 2022-03-31 19:42:06 -05:00
test Add doctests as unit tests 2022-03-31 18:57:53 -05:00
.gitignore Files generated by PkgTemplates 2022-03-31 18:24:13 -05:00
.JuliaFormatter.toml Add .JuliaFormatter.toml 2022-03-31 18:36:46 -05:00
.markdownlint.yml Add markdownlint config file 2022-04-04 11:12:40 -05:00
CHANGELOG.md Add a changelog 2022-04-04 16:44:04 -05:00
CITATION.bib Files generated by PkgTemplates 2022-03-31 18:24:13 -05:00
CODE_OF_CONDUCT.md Add CODE_OF_CONDUCT 2022-04-04 09:10:13 -05:00
CONTRIBUTING.md Add contributing guidelines 2022-04-04 11:13:54 -05:00
cspell.json Update spelling dictionary 2022-04-04 17:30:54 -05:00
LICENSE Files generated by PkgTemplates 2022-03-31 18:24:13 -05:00
Project.toml Add EzXML to test deps 2022-03-31 19:52:36 -05:00
README.md Update code to use Prettier style 2022-04-04 17:22:25 -05:00

Kelpie

Stable Dev Build Status Coverage Code Style: Blue PkgEval Genie Downloads

🐕 I accidentally built an HTML templating engine in Julia. It looked a lot like Pug, but I like working dogs better, so I named it Kelpie.

Installation

You can install straight from the Julia REPL. Press ] to enter pkg mode, then:

add Kelpie

Usage

Most HTML elements1 now have functions of the same name: simply pass the contents as a positional argument, and attributes as keyword arguments, and everything will be returned as an EzXML Document or Node.

import EzXML: prettyprint

doc = html([
  head([
    title("Kelpie.jl is awesome!"),
  ]),
  body([
    header([
      h1("Dogs are cool"),
      h2("Julia is cool"),
    ]),
    main([
      img(;
        src="/kelpie-on-sheep-back.jpg",
        alt="A Kelpie herding sheep"
      ),
      [
        p("Kelpies make great herding dogs for $animal.")
        for animal in ["cows", "sheep", "chickens"]
      ]...,
    ]),
  ]),
])

prettyprint(doc)

Turns into

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<head>
  <title>Kelpie.jl is awesome!</title>
</head>
<body>
  <header>
    <h1>Dogs are cool</h1>
    <h2>Julia is cool</h2>
  </header>
  <main>
    <img src="/kelpie-on-sheep-back.jpg" alt="A Kelpie herding sheep" />
    <p>Kelpies make great herding dogs for cows.</p>
    <p>Kelpies make great herding dogs for sheep.</p>
    <p>Kelpies make great herding dogs for chickens.</p>
  </main>
</body>

Everything is pure Julia, so your imagination is the limit!


  1. Exception: div is the division function, and I wanted to leave it that way. To make <div>s, you need to use html_div. ↩︎