Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Snakeskin (https://javascript.ru/forum/project/35057-snakeskin.html)

kobezzza 07.02.2014 14:42

Выпустил новую версию: 3.2.0.

1) Добавлена директива $forEach для совместной работы с Collection:

{$forEach [1, 2, 3] => el, i}
{end}

{$forEach [1, 2, 3] => {filter: ':el > 2'} => el, i}
{end}


2) Улучшена работы с пробельными символами;
3) Исправлены найденные ошибки.

ЗЫ: в пример в фидле подключил также Collection, что бы можно было потестить.

kobezzza 14.04.2014 18:33

Выпустил версию 3.3.0

1) Добавлена новая директива interface, которая позволяет декларировать шаблоны, которые войдут в скомпилированный файл как пустые функции с входными параметрами;

{interface foo(a1, a2, a3)}
    ...
{end}


=>

function foo(a1, a2, a3) {}


Таким образом сейчас существует 3 директивы для декларации шаблона:

*) template - простая декларация шаблона;
*) interface - декларация шаблона, но в конечный JS войдёт только интерфейс;
*) placeholder - декларация шаблона доступного только на этапе трансляции.

2) Исправлены некоторые ошибки;
3) Улучшена обработка ошибок на этапе трансляции.

Octane 14.04.2014 18:50

А почему не работает, если используемое в шаблоне пространство имен уже было объявлено ранее? Что мешает сделать в нем ссылку на функцию шаблона?

kobezzza 14.04.2014 18:52

Цитата:

Сообщение от Octane (Сообщение 307658)
А почему не работает, если используемое в шаблоне пространство имен уже было объявлено ранее? Что мешает сделать в нем ссылку на функцию шаблона?

Не совсем понял, можно пример?

***

Переопределять шаблоны можно, пример (тут в новый шаблон ссылается на старый через супер-глобальную переменную)
{template helloWorld(name = 'world')}
    <h1>Hello {name}!</h1>
{/template}
    
{old = helloWorld}
    
{template helloWorld()}
    {call @old()}
{/template}

Octane 14.04.2014 19:03

http://jsfiddle.net/PqQ5w/2/
Uncaught TypeError: undefined is not a function

kobezzza 14.04.2014 19:06

Цитата:

Сообщение от Octane (Сообщение 307661)
http://jsfiddle.net/PqQ5w/2/
Uncaught TypeError: undefined is not a function

Гм, это баг, ща буду разбираться, спс за репорт

upd: хм, баг воспроизводится только в фидле, мистика :) А вообще так можно делать и так нужно делать, ибо это одна из самых первых фич которые я закладывал в шаблонку когда я её разрабатывал.

upd upd: это особенность работы в фидле и компиляции в живом режиме, мб придумаю как зафиксить.

***

Вот так работает, видимо из-за eval-ов в фидле глючит.

window.ns = {};
Snakeskin.compile(document.getElementById('templates'));
document.getElementById('test').innerHTML = ns.helloWorld();

tenshi 20.04.2014 21:55

https://developer.chrome.com/extensi...yPolicy#JSEval

kobezzza 20.04.2014 23:42

tenshi, не совсем понял причём тут манифест аддонов к хрому, но кстати, выполнение eval там можно разрешить в том же манифесте, я писал в своём время аддоны к хрому (как для первой версии манифеста, так и для второй).

tenshi 21.04.2014 17:47

При том, что не во всех окружениях эвал разрешен. И вообще замыкания быстрее эвалов.

Кроме экстеншенов есть еще апликейшены, где говорят нельзя включить.

kobezzza 21.04.2014 18:22

tenshi, ну дык, предварительная компиляция и никаких эвалов.


Часовой пояс GMT +3, время: 13:08.