View Source template_compiler_runtime behaviour (template_compiler v3.5.0)

Simple runtime for the compiled templates. Needs to be copied and adapted for different environments.

Summary

Functions

Render image/image_url/image_data_url/media/url/lib/lib_url tag. The Expr is the media item or dispatch rule.

Render a block, cache the result for some time. Caching should be implemented by the runtime.

Compile time mapping of nested value lookup

Render a custom tag (Zotonic scomp) - this can be changed to more complex runtime lookups.

HTML escape a value

Find a list of values at once, easier and more efficient than a nested find_value/4 Add pattern matching here for nested lookups.

Find the value of key in some structure.

Set the context name for this context, used for flush or recompile all templates belonging to a certain context (like a single site).

Fetch the translations for the given text.

Check if a file has been modified

Render a script block, for Zotonic this is added to the scripts in the Context

Find the best fitting translation.

Dynamic mapping of a template to a template name, context sensitive on the template vars.

Dynamically find all templates matching the template

A model call with optional payload. Compiled from m.model.path!payload

Set any contextual arguments from the map or argument list. User for sudo/anondo and language settings

Remove spaces between HTML tags

Convert a value to a boolean.

Convert a value to a list.

Convert a value to an render_result, used for converting values in {{ ... }} expressions.

Convert a value to a more simpler value like binary, list, boolean.

Called when a block function is called. The optionally returned prefix and postfix are inserted into the output stream before and after the block content, respectively.

Called when compiling a module

Called when an enabled template debug checkpoint is hit.

Called when a template is rendered (could be from an include) - the return is kept in a trace for displaying template extends recursion information.

Callbacks

builtin_tag/5

-callback builtin_tag(template_compiler:builtin_tag(),
                      term(),
                      Args :: list(),
                      TplVars :: map(),
                      Context :: term()) ->
                         template_compiler:render_result().

cache_tag/6

-callback cache_tag(Seconds :: integer(),
                    Name :: binary(),
                    Args :: list(),
                    function(),
                    TplVars :: map(),
                    Context :: term()) ->
                       template_compiler:render_result().

compile_map_nested_value/3

-callback compile_map_nested_value(Tokens :: list(), ContextVar :: string(), Context :: term()) ->
                                      NewTokens :: list().

custom_tag/4

-callback custom_tag(Module :: atom(), Args :: list(), TplVars :: map(), Context :: term()) ->
                        template_compiler:render_result().

escape/2

-callback escape(iodata() | undefined, Context :: term()) -> iodata().

find_nested_value/3

-callback find_nested_value(Keys :: list(), TplVars :: term(), Context :: term()) -> term().

find_nested_value/4

-callback find_nested_value(BaseValue :: term(), Keys :: list(), TplVars :: term(), Context :: term()) ->
                               term().

find_value/4

-callback find_value(Key :: term(), Vars :: term(), TplVars :: map(), Context :: term()) -> term().

get_context_name/1

-callback get_context_name(Context :: term()) -> atom().

get_translations/2

-callback get_translations(Text :: binary(), Context :: term()) -> binary() | {trans, [{atom(), binary()}]}.

is_modified/3

-callback is_modified(file:filename_all(), calendar:datetime(), term()) -> boolean().

javascript_tag/3

lookup_translation/3

-callback lookup_translation({trans, [{atom(), binary()}]}, TplVars :: map(), Context :: term()) -> binary().

map_template/3

-callback map_template(template_compiler:template(), map(), term()) ->
                          {ok, template_compiler:template_file()} | {error, enoent | term()}.

map_template_all/3

-callback map_template_all(template_compiler:template(), map(), term()) ->
                              [template_compiler:template_file()].

model_call/4

-callback model_call(Model :: atom(), Path :: list(), Payload :: term(), Context :: term()) ->
                        template_compiler:model_return().

set_context_vars/2

-callback set_context_vars(map() | list(), Context :: term()) -> Context :: term().

spaceless_tag/3

to_bool/2

-callback to_bool(Value :: term(), Context :: term()) -> boolean().

to_list/2

-callback to_list(Value :: term(), Context :: term()) -> list().

to_render_result/3

-callback to_render_result(Value :: term(), TplVars :: map(), Context :: term()) ->
                              template_compiler:render_result().

to_simple_value/2

-callback to_simple_value(Value :: term(), Context :: term()) -> term().

trace_block/4

-callback trace_block({binary(), integer(), integer()}, atom(), atom(), term()) ->
                         ok | {ok, iodata(), iodata()}.

trace_compile/4

-callback trace_compile(atom(), binary(), template_compiler:options(), term()) -> ok.

trace_debug/3

-callback trace_debug({binary(), integer(), integer()}, map(), term()) -> ok.

trace_render/3

-callback trace_render(binary(), template_compiler:options(), term()) -> ok | {ok, iodata(), iodata()}.

Functions

builtin_tag(Tag, Expr, Args, Vars, Context)

-spec builtin_tag(template_compiler:builtin_tag(),
                  Expr :: term(),
                  Args :: list(),
                  Vars :: map(),
                  Context :: term()) ->
                     template_compiler:render_result().

Render image/image_url/image_data_url/media/url/lib/lib_url tag. The Expr is the media item or dispatch rule.

cache_tag(Seconds, Name, Args, Fun, TplVars, Context)

-spec cache_tag(Seconds :: integer(),
                Name :: binary(),
                Args :: list(),
                function(),
                TplVars :: map(),
                Context :: term()) ->
                   template_compiler:render_result().

Render a block, cache the result for some time. Caching should be implemented by the runtime.

compile_map_nested_value(Tokens, _ContextVar, Context)

-spec compile_map_nested_value(Tokens :: list(), _ContextVar :: string(), Context :: term()) ->
                                  NewTokens :: list().

Compile time mapping of nested value lookup

custom_tag(Tag, Args, Vars, Context)

-spec custom_tag(Tag :: atom(), Args :: list(), Vars :: map(), Context :: term()) ->
                    template_compiler:render_result().

Render a custom tag (Zotonic scomp) - this can be changed to more complex runtime lookups.

escape(Value, Context)

-spec escape(Value :: iodata() | undefined, Context :: term()) -> iodata().

HTML escape a value

find_nested_value(Ks, TplVars, Context)

Find a list of values at once, easier and more efficient than a nested find_value/4 Add pattern matching here for nested lookups.

find_nested_value(V, Ks, TplVars, Context)

find_value(Key, Vars, TplVars, Context)

-spec find_value(Key :: term(), Vars :: term(), TplVars :: map(), Context :: term()) -> term().

Find the value of key in some structure.

get_context_name(Context)

-spec get_context_name(term()) -> atom().

Set the context name for this context, used for flush or recompile all templates belonging to a certain context (like a single site).

get_translations(Text, Context)

-spec get_translations(binary(), term()) -> binary() | {trans, [{atom(), binary()}]}.

Fetch the translations for the given text.

is_modified(Filename, Mtime, Context)

-spec is_modified(file:filename_all(), calendar:datetime(), term()) -> boolean().

Check if a file has been modified

javascript_tag(Javascript, TplVars, Context)

Render a script block, for Zotonic this is added to the scripts in the Context

lookup_translation(_, TplVars, Context)

-spec lookup_translation({trans, [{atom(), binary()}]}, TplVars :: map(), Context :: term()) -> binary().

Find the best fitting translation.

map_template(Template_file, Vars, Context)

-spec map_template(template_compiler:template(), map(), Context :: term()) ->
                      {ok, template_compiler:template_file()} | {error, enoent | term()}.

Dynamic mapping of a template to a template name, context sensitive on the template vars.

map_template_all(Template, Vars, Context)

-spec map_template_all(template_compiler:template(), map(), Context :: term()) ->
                          [template_compiler:template_file()].

Dynamically find all templates matching the template

model_call(Model, Path, Payload, Context)

-spec model_call(Model :: atom(), Path :: list(), Payload :: term(), Context :: term()) ->
                    template_compiler:model_return().

A model call with optional payload. Compiled from m.model.path!payload

set_context_vars(Args, Context)

-spec set_context_vars(map() | list(), term()) -> term().

Set any contextual arguments from the map or argument list. User for sudo/anondo and language settings

spaceless_tag(Value, TplVars, Context)

Remove spaces between HTML tags

to_bool(Value, Context)

-spec to_bool(Value :: term(), Context :: term()) -> boolean().

Convert a value to a boolean.

to_list(Value, Context)

-spec to_list(Value :: term(), Context :: term()) -> list().

Convert a value to a list.

to_render_result(Value, TplVars, Context)

-spec to_render_result(Value :: term(), TplVars :: map(), Context :: term()) ->
                          template_compiler:render_result().

Convert a value to an render_result, used for converting values in {{ ... }} expressions.

to_simple_value(Value, Context)

-spec to_simple_value(Value :: term(), Context :: term()) -> term().

Convert a value to a more simpler value like binary, list, boolean.

trace_block(SrcPos, BlockName, Module, Context)

-spec trace_block(SrcPos, BlockName, Module, Context) -> ok | {ok, Before, After}
                     when
                         SrcPos :: {Filename, Line, Column},
                         Filename :: binary(),
                         Line :: integer(),
                         Column :: integer(),
                         BlockName :: atom(),
                         Module :: atom(),
                         Context :: term(),
                         Before :: iodata(),
                         After :: iodata().

Called when a block function is called. The optionally returned prefix and postfix are inserted into the output stream before and after the block content, respectively.

trace_compile(Module, Filename, Options, Context)

-spec trace_compile(atom(), binary(), template_compiler:options(), term()) -> ok.

Called when compiling a module

trace_debug(SrcPos, Vars, Context)

-spec trace_debug(SrcPos, Vars, Context) -> ok
                     when
                         SrcPos :: {File, Line, Col},
                         File :: binary(),
                         Line :: integer(),
                         Col :: integer(),
                         Vars :: map(),
                         Context :: term().

Called when an enabled template debug checkpoint is hit.

trace_render(TemplateFilename, Options, Context)

-spec trace_render(TemplateFilename, Options, Context) -> ok | {ok, Before, After}
                      when
                          TemplateFilename :: binary(),
                          Options :: template_compiler:options(),
                          Context :: term(),
                          Before :: iodata(),
                          After :: iodata().

Called when a template is rendered (could be from an include) - the return is kept in a trace for displaying template extends recursion information.