Тема: Snakeskin
Показать сообщение отдельно
  #69 (permalink)  
Старый 22.12.2013, 21:15
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сегодня потратил день, на сортировку скопившихся "хотелок" от новой версии Snakeskin и утвердил следующее:

1) Директива
{super}
- для безопасной подстановки тела родительского блока или прототипа в указанное место в дочернем.

2) Поддержка параметров для директивы proto
Я долго думал над этой фичей, т.к. сама суть прототипов - это "мягкая" декомпозиция шаблона, с поддержкой механизма наследования и безопасной работой, т.е. замена пресловутых вызовов других шаблонов в шаблоне. В общем получается, что сейчас прототипы могут очень ограниченно выполнять свою функцию, т.к. не хватает двух вещей: параметров и поддержки рекурсии. Ожидаемый синтаксис будет таким:

{template foo(param)}
	{proto icon(%iconName)}
		{param} - {%iconName}
	{end}
	
	{apply icon('foo')}
{end}


Разумеется, старый синтаксис прототипов (без указания параметров) останется рабочим.

3) Поддержка рекурсий в прототипах. Хотя прототип напоминает простые функции JS, но на самом деле это не так, поэтому использование рекурсии изначально было запрещено, ввиду некорректной работы транслятора (он уходил в бесконечный цикл), но любую рекурсию можно представить в виде простого цикла, собственно что я и планирую сделать для рекурсивных прототипов.

4) Директива для конструкции switch-case-default
5) Директивы {return} {break} и {continue} для прерывания в теле директив циклов и прерывания общего шаблона (return)

6) Директива-хэлпер для безопасной работы с атрибутами узлов:

<input {attr 'type', 'text'} />


7) Декларация прототипов вне тела шаблона:

/// Прототип getIcon добавится в конец шаблона foo
{proto foo->getIcon}
      ...
{end}


8) Поддержка JSDoc комментариев: комментарии вида /** ... */ не будут вырезаться из шаблона и будут вставлены в конечный JS, чтобы можно было использовать их при дальнейшем сжатии с помощью GCC.

В остальном будут исправления ошибок и различные доработки.
Завтра приступаю к реализации.
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 23.12.2013 в 00:13.
Ответить с цитированием