View Source Orbit.Gemtext (Orbit v0.3.0)

Render Gemtext content.

A template is any 1-arity function that accepts an assigns map and returns a string of rendered Gemtext.

A view is a module containing template functions.

Templates can be defined directly as functions, or embedded from .gmi.eex files into view module via embed_templates/1.

EEx templates can be precompiled with sigil_G/2, as long as an assigns variable is in-scope.

Usage

Add the imports to the view module:

import Orbit.Gemtext

Examples

Importing templates from a directory

defmodule MyAppCapsule.PostGmi do
  import Orbit.Gemtext

  embed_templates "post_gmi/*"
end

Writing templates directly

defmodule MyAppCapsule.PostGmi do
  import Orbit.Gemtext

  def list(assigns) do
    ~G"""
    <%= for item <- @items do %>
    * <%= item %>
    <% end %>
    """
  end
end

Summary

Functions

Precompile template functions from external files.

Sigil for defining Gemtext content.

Functions

Link to this macro

embed_templates(path)

View Source (macro)

Precompile template functions from external files.

Every file found in the wildcard path is compiled as EEx and injected as a template function into the view module, using the file basename as the function name. For example, index.gmi.eex will be defined as def index(assigns).

Link to this macro

render(template, assigns \\ [], block \\ [])

View Source (macro)

Renders a template.

The assigns and block arguments are optional.

If a block is passed, its contents set to @inner_content assign of the template.

Examples

<%= render &my_template/1 %>

<%= render &my_template/1, title: @title %>

<%= render &my_template/1 do %>
  inner content here
<% end %>
Link to this macro

sigil_G(arg, modifier)

View Source (macro)

Sigil for defining Gemtext content.

The assigns map must be in-scope.

A single trailing newline character \n will be trimmed, if it exists.

Example

def hello(assigns) do
  ~G"""
  Why hello there, <%= @name %>!
  """
end