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

kobezzza 01.07.2014 23:21

DjDiablo, всё так, но я создал в голове фоновый процесс о внедрении своего механизма биндинга, посмотрим что выйдет.

UPD: внимательно взвесив все за и против, решил, что в планируемый релиз это не войдёт, но сделаю небольшую заготовку на будущее.

kobezzza 06.07.2014 20:18

Чёто я профакапил планируемые сроки, теперь на следующей недели планирую закончить :)

Кстати, уже добавил фичу для локализации:

{template foo()}
    `hello friend`!
{end}


Тоже самое, что и

{template foo()}
    {i18n('hello friend')}!
{end}


А если для метода compile задать параметр language, то замена будет сделана на этапе трансляции:

{template foo()}
    `hello friend`!
{end}


Snakeslin.compile(..., {language: {'hello friend': 'привет друг'}})

melky 06.07.2014 20:49

Цитата:

Сообщение от kobezzza (Сообщение 318585)
Для нового синтаксиса будет добавлена поддержка ссылки на родительский класс а ля Stylus.

.b-foo.&_checked_true
    span.&__master hello world!


=>

<div class="b-foo b-foo_checked_true">
    <span class="b-foo__master">hello world!</span>
</div>


Т.е. & будет ссылаться на последний класс без использования &.

***

Новый синтаксис будет прекрасно сосуществовать и со старым, т.е. если будет нужно, то например

- template foo()
    div fooo bar {call bar()} bla bla bla

kobezzza, а правильно ли я понял, что синтаксис будет Jade-подобный ?

kobezzza 06.07.2014 21:26

Цитата:

Сообщение от melky (Сообщение 319730)
kobezzza, а правильно ли я понял, что синтаксис будет Jade-подобный ?

Он будет опциональным, т.е. старый никуда не денется и будет также использоваться совместно в тех местах, где это удобно. Ну а что касаемо самого синтаксиса, то он он будет очень похожим на Jade, но всё же другим в нюансах: это логично, т.к. возможностей у Snakeskin на голову выше и синтаксис должен все их покрывать.

ЗЫ: я решил проблему соответствия файла шаблона с скомпилированным файлом, так что можно будет делать умный кеш :)

ЗЫЗЫ: таки будет Snakeskin 4, а не Snakeskin 3.4, т.к. было внесено 2 ломающих изменения:

1) Изменён синтаксис директивы attr

Раньше было
<div {attr 'class', 'foo bar'} {attr '-bar', 'foo'}


Стало
<div {attr 'class' => 'foo', 'bar'; '-bar' => 'foo'}


Т.е. новый синтаксис позволяет в одной директивы задавать много атрибутов, а также множество значений для одного атрибута, которые будут соединены через пробел.

2) Изменение работы модификатора контекста @ внутри with блока

Раньше было
{with foo}
    {a + @bar} /// foo.a + bar
{/}


Стало
{with foo}
    {@a + bar} /// foo.a + bar
{/}


Т.е. теперь если у идентификатора нет модификатора контекста, то он считается глобальным, а раньше было наоборот. Это нововведение было сделано, чтобы стал доступен следующий синтаксис:

{with foo}
    {@['a']} /// foo['a']
    {@[1 + 'bar']} /// foo[1 + 'bar'] и т.д.
{/}

melky 07.07.2014 01:43

неплохо! годные изменения.

Холовейчук, как мы знаем, ушел из ноды - фич для Jade от новых мейнтейнеров не дождемся)


дьякую некий список вопросов :

1. что делать с переменными, переданными в шаблон (я передавал их как глобальные)?
2. как задать layout для шаблона?
3. что насчёт сахарку для директив ангуляра (тут сам не додумал, но, возможно, как-то писать без префикса "ng" или группировать их)?

kobezzza 07.07.2014 07:07

Цитата:

что делать с переменными, переданными в шаблон (я передавал их как глобальные)?
Я решил эту проблему в новой версии. Будешь передавать переменные как первый параметр и юзать так:

{template foo(@params)} /// @params - это сахарная форма для with params
    {@foo} /// params.foo
{/}


Если пользователь решит задать дополнительные параметры для шаблона, то они просто будут передаваться как последующие, т.е.

{template foo(@params, some1, some2)}
    {@foo + some1 + some2} 
{/}


Это на мой взгляд самое лучшее решение проблемы.

Цитата:

как задать layout для шаблона?
Имеешь ввиду, как делать include сторонних файлов? Ну пока я интегрировал Jossy, т.е.

//#include ./file1.ss
//#include ./file2.ss


Но есть задумка интегрировать include как директиву, тогда можно будет делать так:

{for var i = 0; i < 10; i++}
    {include './file' + i + '.ss'}
{/}


Цитата:

что насчёт сахарку для директив ангуляра (тут сам не додумал, но, возможно, как-то писать без префикса "ng" или группировать их)?
{attr ng-(foo1 => val1; foo2 => val2)} нормально?

melky 07.07.2014 11:09

отлично )
ещё одна деталь

как перевести *.ss сразу в *.html, минуя *.ss.js ?

есть ли какое-то особое имя у template, которое отличается от остальных тем, что именно оно будет запускаться при переводе *.ss в *.html ?

kobezzza 07.07.2014 11:18

Цитата:

как перевести *.ss сразу в *.html, минуя *.ss.js ?
Можно скомпилить шаблон и сразу же его выполнить, т.е. не сохраняя результат в файл, могу сделать отдельный метод для этого.

Цитата:

есть ли какое-то особое имя у template, которое отличается от остальных тем, что именно оно будет запускаться при переводе *.ss в *.html ?
Нет, но таким именем можно сделать имя файла где лежит шаблон, т.е. если файл profile.ss и там есть template с именем profile, то он считается главным.

ЗЫ: сделал директиву include, теперь можно делать, например, так:

{fs = require('fs')}

{forEach @fs.readdirSync('...') => el}
    {include el}
{/}

{template foo()}
    ...
{/}


или тоже самое в новом синтаксисе :)

- fs = require('fs')

- forEach @fs.readdirSync('...') => el
    - include el

- template foo()
    ...


Директива работает только на этапе трансляции, также есть защита от дублирования файлов, т.е. если много раз написать include одного файла, то подключится он только один раз. Директиву можно юзать только вне тела шаблона.

melky 07.07.2014 11:59

Цитата:

Сообщение от kobezzza
Нет, но таким именем можно сделать имя файла где лежит шаблон, т.е. если файл profile.ss и там есть template с именем profile, то он считается главным.

примерно это же я и сделал в express-snakeskin, только если нет имени шаблона, совпадающего с именем файла, вызывается шаблон 'main', или тот, что указан в options.

а новый синтаксис можно уже юзать? будут ли какие ошибки, если попробовать подсветку Jade на файле Snakeskin ?

можно ли делать ss файл без записей template? как бы получится неявное оборачивание в template, который будет переводить в html

kobezzza 07.07.2014 12:13

Цитата:

Сообщение от melky (Сообщение 319814)
а новый синтаксис можно уже юзать? будут ли какие ошибки, если попробовать подсветку Jade на файле Snakeskin ?l

Ещё нет, ведь релиза 4-й версии ещё не было, но постараюсь на этой недели всё закончить и обновить доку. Если юзать ограниченно то ошибок не будет, но это идиотизм, т.к. тогда можно оставаться на Jade :) Ну а Snakeskin фишки будут варнить к сожалению. Если бы было время, то мб я бы покурил как написать плагин для WS, но его нет:(

Цитата:

Сообщение от melky (Сообщение 319814)
можно ли делать ss файл без записей template? как бы получится неявное оборачивание в template, который будет переводить в html

Нет, и лучше так не делать, т.к. это убьёт многие фишки Snakeskin.

***

Когда буду обновлять доку, то сниму пару роликов про главные фичи, такие как наследование, прототипы и т.д.


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