Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
4) Поддержка шаблонов в любом текстовом редакторе — ибо они на самом деле представляют из себя чистый JS синтаксисДа, вот только
Line 17: hr; --- Expected an assignment or function call and instead saw an expression.(html (:mytag :id "bar" "Foo"))
<div class='mytag' id='bar'>Foo</div>
// Partial - подшаблон
function _item(){
b[args({style: 'color: blue', class: 'test'})].raw("Name:").b;
div.context.name.div;
hr;
alert.raw("Привет");
}
<div class="alert">Привет</div>
var result = absurdTpl(function (ctx) {
h1.head | "AbsurdTpl";
form[{ action: "/", type: "post" }];
h2 | "Simple form";
ctx.items.forEach(function (inp) {
label | inp.label + ":";
input[{ value: inp.value }];
});
hr;
button[{ type: "submit" }] | "Send";
});
console.log(result({ items: [{ label: "E-mail", value: "trash@rubaxa.org" }] }));
Строчка «div.context.foo.bar.baz.qux» моментально падает с ошибкой.Это вы невнимательно читаете, я как раз об это и написал. Падение с JS-ошибкой это неправильное, я бы даже сказал фатальное поведение для шаблонизатора.
Ну во-первых ваш шаблонизатор не совместим ни с jsbin ни с jsfiddleОй, ну могли бы сами поправить jsbin.com/juxusofo/1/edit
Во-вторых. У вас нет возможности вызвать один шаблон из другово.Ой, ну это это делается очень просто, количество кода увеличится на
.replace(/~([\w+_-]+)/, 'buf += absurdTpl["$1"]') var item = absurdTpl("form-item", function (ctx) {
label | ctx.label + ":";
input[{ value: ctx.value }]
});
var result = absurdTpl("form", function (ctx) {
form[{ action: "/", type: "post" }]
h2 | "Simple form" // !!!
ctx.items.forEach(function (inp) {
~form-item(inp);
});
hr;
button[{ type: "submit" }] | "Send"
});
Кстати, спасибо — подтолкнули на ряд идей, по оптимизации. Плюс нашел ряд проблем как у вас так и у себя.Лол, весь мой код одна сплошная проблема, так что не благодарите.
А про отсутствие «нормальных» сообщений об ошибках знаю — но что вообще можно с этим сделать идей никаких нет. Тут даже это не проблема STAN. Это проблема всех шаблонных движков — туда можно отправить undefined или {} — и на выходе получить html.
Div.prototype.toString = function() {
return "<div ....";
}
STAN — самый короткий шаблонный движок