21.04.2012, 17:02
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Templating System for Node.JS.
Допилил. Наконец-то.
В общем, тем кто ещё не знает, хочу рассказать про свой шаблонизатор для NodeJS.
Исходники: https://github.com/B-Vladi/TSN
Основные характеристики: - Простота. Т.е. это классический шаблонизатор, типа CTPP. Не требуется изучать новый синтаксис. Используется только HTML и JS.
- Гибкость. За счет переменных и динамической подстановки контекста.
- Скорость. Рвет fest, а fest рвет CTPP. Так же рвет Dust и Mu.
- Расширяемость. Свои теги можно реализовать в этом файле, используя API шаблонизатора. Под это документации пока нет, но всегда можно подсмотреть в других тегах или спросить у меня.
- IDE-friendly. Подсветка, автокомплит и валидация (если подцепить DTD к IDE), Zen-coding, не ломает синтаксис.
Некоторые моменты: - Подчищает отступы и переводы строк так, если бы шаблон изначально писался без тегов TSN.
- При использовании TSN-сущности, допустимы только символы /a-z0-9\-_\./, в соответствии со спецификацией XML.
- При парсинге корректно обрабатывает ошибки вложенности тегов. Обрабатывает только TSN-теги.
- Скомпилированный шаблон можно отправить на клиент и юзать там, но для этого лучше использовать специально заточенные под это шаблонизаторы, имхо.
- В значениях атрибутов тегов TSN можно использовать следующие сущности: & < > " ', а можно и не использовать, кому как больше нравиться.
На данный момент нет такого же классического XML-шаблонизатора для ноды. Да и XML-шаблонизаторов я знаю только 2 - Fest и TSN.
Убедительная просьба: не разводить holy war на тему - "Синтаксис XML - говно, юзай Dust".
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Последний раз редактировалось B~Vladi, 22.04.2012 в 02:13.
|
|
22.04.2012, 02:06
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
Поставлю 12 бубунут под кедами прикручу туда nodeJS и попробую сие творение
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
|
|
22.04.2012, 02:08
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Gozar, не обязательно, сие заводится даже из-под окон
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
|
|
22.04.2012, 21:14
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Довёл до ума документацию: разбил по wiki-страницам, описал остальные моменты. Вникнуть в суть стало теперь намного проще
Осталось только написать мануал по API создания тегов.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
|
|
23.04.2012, 18:20
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Вышла новая версия - 2.0.3.
Что изменилось:
1. Добавлен тег set, для изменения значения ранее созданной переменной (тег var). Работает точно по такому же принципу, как и тег var.
2. Добавлен атрибут item в теги for и each, что бы не приходилось явно сохранять текущий элемент массива/значение текущего свойства в переменную.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
|
|
26.04.2012, 18:46
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Я понимаю, что всем похуй, но всё же...
Вышла новая версия - 2.1.0
Что изменилось:
1. Выпилил тег set за ненадобностью
2. Теперь переменные из внешнего шаблона не доступны в подключаемых, дабы не прострелить себе ногу.
3. Добавлен метод extend, для расширения набора тегов из кода.
4. Пойманы и наказаны несколько багов.
5. Расширилось API тегов.
Приведу пример шаблона:
page.xml:
<tsn:root xmlns:tsn="TSN">
<!-- Создаем скрипт для хедера -->
<!-- Сначала сгенерируем конечный результат и сохраним в переменную -->
<tsn:var name="header">
<script type="text/javascript">
//<![CDATA[
console.log();
//
]]>
</script>
</tsn:var>
<!-- А при вызове шаблона просто будем возвращать результат -->
<tsn:template name="header">
<tsn:echo text="_var.header" />
</tsn:template>
<!-- Контент страницы -->
<tsn:template name="body">
<div>Body</div>
</tsn:template>
<!-- Подключаем базовый шаблон -->
<tsn:include src="base.xml" context="this.globalData" />
</tsn:root>
Файл с базовой разметкой base.xml:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link href="base.css" type="text/css" rel="stylesheet"/>
<!-- Здесь будет выводиться стили для конкретной страницы -->
<tsn:include name="header" />
</head>
<body>
<!-- Вставляем навигацию с передачей необходимых данных -->
<tsn:include src="common/navigation.xml" context="this.navigation" />
<!-- Вставляем контент, который был определён ранее и унаследован здесь -->
<tsn:include name="body" />
<!-- Вставляем футер с передачей необходимых данных -->
<tsn:include src="footer.xml" context="this.footer" />
</body>
</html>
Вроде всё логично и понятно, как думаете?
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Последний раз редактировалось B~Vladi, 26.04.2012 в 23:46.
|
|
26.04.2012, 20:50
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
Сообщение от B~Vladi
|
Я понимаю, что всем похуй, но всё же...
|
Мне интересно, но сейчас не до этого
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
|
|
26.04.2012, 22:36
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Сообщение от Gozar
|
Мне интересно, но сейчас не до этого
|
Я так понял тут нодой никто не балуется. Щас запилю ещё один кейс в новой версии и на хабр тогда напишу. Тут как-то всё тихо. vflash тоже молчит, наверно обидно что их шаблонизатор медленнее.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
|
|
27.04.2012, 11:23
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Сообщение от B~Vladi
|
запилю ещё один кейс
|
Как и обещал:
Вышла новая версия - 2.1.1
Что изменилось:
1. Теперь в теге include абсолютные пути в атрибуте src начинаются с TSN.config.templateRoot. Относительные пути начинаются с папки текущего шаблона или от TSN.config.templateRoot, если текущий шаблон компилируется методом TSN.compile.
2. Пофикшен мелкий баг.
Более серьёзных правок не предполагается, все основные моменты, которые хотел реализовать - реализовал. Если пользователи будут предлагать достойные изменения - буду впиливать.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Последний раз редактировалось B~Vladi, 27.04.2012 в 11:26.
|
|
27.04.2012, 14:11
|
|
Профессор
|
|
Регистрация: 09.07.2007
Сообщений: 304
|
|
Сообщение от B~Vladi
|
vflash тоже молчит, наверно обидно что их шаблонизатор медленнее.
|
яж писал что к ним отношение не имею. да и TSN не шибко быстрее, у них try catch и выход идет в поток, а у TSN в переменную. Да и что у них что у TSN на выходе XHTML а не HTML. Контрольный в голову, TSN парсит XML-шаблон регулярками.
И между прочем я тебе помогал с тестированием )
Последний раз редактировалось vflash, 27.04.2012 в 14:14.
|
|
|
|