Сейчас подумал, что можно сделать маску для имени шаблона, будет как раз компромисс.
base.ss {template %filename%()} ... {/} profile.ss {include 'base.ss'} {template %fileName%() extends base} ... {/} Т.е. %fileName% будет реплейсится на имя файла. |
Фак, похоже придётся опять на наделю релиз перенести, завтра уезжаю в Мск, иду на свадьбу гулять, наверн дня на 3-4 выпаду :)
|
Цитата:
|
Цитата:
|
Сейчас продумываю такую концепцию, как вызываемые блоки:
{template foo()} {forEach arr => el} {block elem(el)} ... {/} {/} {/} Конструкция с block будет отрендерена как if (!foo.elem) { foo.elem = function (el) { ... }; } foo.elem(el); Т.е. создаётся функция, которая сохраняется как свойство функции-шаблона. Это решает проблему, когда нужно создать подшаблон, который должен иметь доступ к переменным замыкания главного шаблона и быть доступен для повторного вызова "вне шаблона", т.е. из JS, но в тоже время будет являться структурной единицей Snakeskin, т.е. можно явно переопределять в дочернем шаблоне и использовать директиву super. |
Добавил поддержку генераторов.
{template *foo(data)} <div class="bar"> {forEach data => el} {apply row(el)} {yield} {/} </div> {/} Директива yield будет отрендерена как yeild __RESULT__; __RESULT__ = ''; т.е. каждый "тик" (вызов next) будет возвращать кусок отрендеренного шаблона. Зачем я это добавил: у меня в проекте есть места, где данные из БД возвращаются асинхронными чанками из разных сегментов и сейчас мне приходится ждать пока появятся все данные, затем выполнить шаблон (который вернёт огромную строку, и также может надолго залочить поток, т.к. внутри большой цикл) и уже потом отправлять клиенту. С использованием генератора можно очень легко преобразовать шаблон, чтобы он также возвращал чанки по фрагментам данных, которые приходят из БД и сразу же отправлял их клиенту. В данной схеме нету опасности залочить поток и с точки зрения конечной производительности наблюдается реальный профит. Также генераторы позволят легко "дробить" тяжёлый шаблон на куски с помощью setImmediate, чтобы не лочить поток. ЗЫ: напоминаю, что пока, чтобы юзать генераторы в ноде, то нужно запускать её с флагом --harmony. |
Чего то ппц затянулся этот релиз :(
Сегодня заканчиваю активную разработку, завтра финальный review и тесты и начинаю работать над докой. ЗЫ: самое глобальное обновление за всю историю проекта, количество коммитов почти равно общему количеству коммитов всех предыдущих версий :) Собственная кодовая база увеличилась на 3к строк кода (8.2к), а с учётом сторонних либ почти 14к (а ведь первая версия была примерно 400 строк :D), жесть в общем :) Но полученным результатом я очень доволен и наверное даже горжусь, пускай это звучит громко, но Snakeskin 4 будет объективно самым продвинутым "классическим" (т.е. без привязки к определённой технологии или окружению) шаблонным движком из существующих для JS. |
Цитата:
а вот я будто в астрале пребываю) |
Алилуйя, я закончил фазу активной разработки. Теперь приступаю к обновлению доки и выкатываю релиз :)
|
Добавлю сюда тоже, релизная версия видео-мана по настройке вотчеров.
Планирую также снять видео по основам и по наследованию, а остальное будет только в текстовом виде в вики, которая уже пилится :) |
Часовой пояс GMT +3, время: 00:23. |