Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.04.2012, 17:02
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 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.
Ответить с цитированием
  #2 (permalink)  
Старый 22.04.2012, 02:06
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Поставлю 12 бубунут под кедами прикручу туда nodeJS и попробую сие творение
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #3 (permalink)  
Старый 22.04.2012, 02:08
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Gozar, не обязательно, сие заводится даже из-под окон
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Ответить с цитированием
  #4 (permalink)  
Старый 22.04.2012, 21:14
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Довёл до ума документацию: разбил по wiki-страницам, описал остальные моменты. Вникнуть в суть стало теперь намного проще

Осталось только написать мануал по API создания тегов.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Ответить с цитированием
  #5 (permalink)  
Старый 23.04.2012, 18:20
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Вышла новая версия - 2.0.3.

Что изменилось:
1. Добавлен тег set, для изменения значения ранее созданной переменной (тег var). Работает точно по такому же принципу, как и тег var.
2. Добавлен атрибут item в теги for и each, что бы не приходилось явно сохранять текущий элемент массива/значение текущего свойства в переменную.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Ответить с цитированием
  #6 (permalink)  
Старый 26.04.2012, 18:46
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 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.
Ответить с цитированием
  #7 (permalink)  
Старый 26.04.2012, 20:50
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от B~Vladi Посмотреть сообщение
Я понимаю, что всем похуй, но всё же...
Мне интересно, но сейчас не до этого
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #8 (permalink)  
Старый 26.04.2012, 22:36
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от Gozar
Мне интересно, но сейчас не до этого
Я так понял тут нодой никто не балуется. Щас запилю ещё один кейс в новой версии и на хабр тогда напишу. Тут как-то всё тихо. vflash тоже молчит, наверно обидно что их шаблонизатор медленнее.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Ответить с цитированием
  #9 (permalink)  
Старый 27.04.2012, 11:23
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 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.
Ответить с цитированием
  #10 (permalink)  
Старый 27.04.2012, 14:11
Аватар для vflash
Профессор
Отправить личное сообщение для vflash Посмотреть профиль Найти все сообщения от vflash
 
Регистрация: 09.07.2007
Сообщений: 304

Сообщение от B~Vladi
vflash тоже молчит, наверно обидно что их шаблонизатор медленнее.
яж писал что к ним отношение не имею. да и TSN не шибко быстрее, у них try catch и выход идет в поток, а у TSN в переменную. Да и что у них что у TSN на выходе XHTML а не HTML. Контрольный в голову, TSN парсит XML-шаблон регулярками.

И между прочем я тебе помогал с тестированием )
__________________
лучшая rss читалка zzreader.com

Последний раз редактировалось vflash, 27.04.2012 в 14:14.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция system kilogram Серверные языки и технологии 6 22.03.2012 09:36
Browser : Operating System x-yuri Оффтопик 11 22.02.2012 14:44