01.07.2014, 23:21
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
DjDiablo, всё так, но я создал в голове фоновый процесс о внедрении своего механизма биндинга, посмотрим что выйдет.
UPD: внимательно взвесив все за и против, решил, что в планируемый релиз это не войдёт, но сделаю небольшую заготовку на будущее.
Последний раз редактировалось kobezzza, 02.07.2014 в 01:21.
|
|
06.07.2014, 20:18
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Чёто я профакапил планируемые сроки, теперь на следующей недели планирую закончить
Кстати, уже добавил фичу для локализации:
{template foo()}
`hello friend`!
{end}
Тоже самое, что и
{template foo()}
{i18n('hello friend')}!
{end}
А если для метода compile задать параметр language, то замена будет сделана на этапе трансляции:
{template foo()}
`hello friend`!
{end}
Snakeslin.compile(..., {language: {'hello friend': 'привет друг'}})
|
|
06.07.2014, 20:49
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от kobezzza
|
Для нового синтаксиса будет добавлена поддержка ссылки на родительский класс а ля 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-подобный ?
|
|
06.07.2014, 21:26
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от melky
|
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'] и т.д.
{/}
Последний раз редактировалось kobezzza, 06.07.2014 в 21:49.
|
|
07.07.2014, 01:43
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
неплохо! годные изменения.
Холовейчук, как мы знаем, ушел из ноды - фич для Jade от новых мейнтейнеров не дождемся)
дьякую некий список вопросов :
1. что делать с переменными, переданными в шаблон (я передавал их как глобальные)?
2. как задать layout для шаблона?
3. что насчёт сахарку для директив ангуляра (тут сам не додумал, но, возможно, как-то писать без префикса "ng" или группировать их)?
|
|
07.07.2014, 07:07
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Цитата:
|
что делать с переменными, переданными в шаблон (я передавал их как глобальные)?
|
Я решил эту проблему в новой версии. Будешь передавать переменные как первый параметр и юзать так:
{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)} нормально?
|
|
07.07.2014, 11:09
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
отлично )
ещё одна деталь
как перевести *.ss сразу в *.html, минуя *.ss.js ?
есть ли какое-то особое имя у template, которое отличается от остальных тем, что именно оно будет запускаться при переводе *.ss в *.html ?
|
|
07.07.2014, 11:18
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Цитата:
|
как перевести *.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 одного файла, то подключится он только один раз. Директиву можно юзать только вне тела шаблона.
Последний раз редактировалось kobezzza, 07.07.2014 в 11:29.
|
|
07.07.2014, 11:59
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от kobezzza
|
Нет, но таким именем можно сделать имя файла где лежит шаблон, т.е. если файл profile.ss и там есть template с именем profile, то он считается главным.
|
примерно это же я и сделал в express-snakeskin, только если нет имени шаблона, совпадающего с именем файла, вызывается шаблон 'main', или тот, что указан в options.
а новый синтаксис можно уже юзать? будут ли какие ошибки, если попробовать подсветку Jade на файле Snakeskin ?
можно ли делать ss файл без записей template? как бы получится неявное оборачивание в template, который будет переводить в html
Последний раз редактировалось melky, 07.07.2014 в 12:05.
|
|
07.07.2014, 12:13
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от melky
|
а новый синтаксис можно уже юзать? будут ли какие ошибки, если попробовать подсветку Jade на файле Snakeskin ?l
|
Ещё нет, ведь релиза 4-й версии ещё не было, но постараюсь на этой недели всё закончить и обновить доку. Если юзать ограниченно то ошибок не будет, но это идиотизм, т.к. тогда можно оставаться на Jade Ну а Snakeskin фишки будут варнить к сожалению. Если бы было время, то мб я бы покурил как написать плагин для WS, но его нет
Сообщение от melky
|
можно ли делать ss файл без записей template? как бы получится неявное оборачивание в template, который будет переводить в html
|
Нет, и лучше так не делать, т.к. это убьёт многие фишки Snakeskin.
***
Когда буду обновлять доку, то сниму пару роликов про главные фичи, такие как наследование, прототипы и т.д.
Последний раз редактировалось kobezzza, 07.07.2014 в 12:18.
|
|
|
|