sjtc
sjtc is a simple javascript template compiler based on regexp. it can compile javascript template to be readability javascript function. it support the following features:
- embed javascript code : <%...%>
- insert variant: <%=...%>
- escape charators: <%% equals <% and %%> equals %>
- include file:
- include file once:
- support heredoc in embed code in the from "@(\w+) [\S\s]*? \1\b", for example:
<%{ return @eof // you can use any words after @ <li class="list-item user" data-order="#{u.order}"> <span class="user-name">#uname</span> <span class="user-age" >#uage</span> <span class="user-gender">#ugender</span> </li> eof;}%>
the following is an example to explain how to use it:
the contents from render-user.html
<%function render_user(u){ return @eof #{u.name} #{u.age} #{u.gender} eof.trim();}%>
the contents from tmpl.html
<!--#include_once file="render-user.html"--> <%if(obj.users && obj.users.length > 0){%> <% obj.users.forEach(function(u){ %> <%= render_user(u) %> <% }); %> <%}else{%> no user record! <%}%>
the code used to compile the template
var fs = ;var sjtc = ;var file = __dirname + "/tmpl.html"; var tmplCode = sjtc;var tmplFn = 'return ' + tmplCode; var users = order: 1 name: 'user-1' age: 24 gender: 'f' order: 2 name: 'user-2' age: 24 gender: 'fm' order: 3 name: 'user-3' age: 23 gender: 'f' order: 5 name: 'user-4' age: 24 gender: 'fm' order: 6 name: 'user-5' age: 24 gender: 'f' order: 7 name: 'user-6' age: 34 gender: 'fm' order: 8 name: 'user-7' age: 32 gender: 'f' order: 9 name: 'user-8' age: 52 gender: 'f' order: 10 name: 'user-9' age: 57 gender: 'f' order: 11 name: 'user-10' age: 18 gender: 'f' ; console;console;
the result code that generate by stjc
{ var __bf = ; withobj "use strict"; { return "" + "<li class=\"list-item user\" data-order=\"" + uorder + "\">" + "<span class=\"user-name\">" + uname + "</span>" + "<span class=\"user-age\" >" + uage + "</span>" + "<span class=\"user-gender\">" + ugender + "</span>" + "</li>" ; } ifobjusers && objuserslength > 0 __bf; objusers; __bf; else __bf; return __bf;}
while you can config the generate code style through the following config tiems:
- func_name default ''
- extra_space default 0
- func_arg_name default obj
- input_tab_space default 4
- output_tab_space default 4
- output_buff_name default __bf
- always_wrap_insert default false
- first_line_no_space default false