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

kobezzza 20.02.2015 01:04

Цитата:

Сообщение от Gozar (Сообщение 357407)
Да, да, точно, так тоже завелось :)

Там если жмакнешь в настройках insert macro, то он покажет список возможных плейсхолдеров, это точно нужно в вики описать :)

Цитата:

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

kobezzza 21.02.2015 15:49

Начал работу над 7-й версией SS.

Из планируемых фич:

1) Поддержка потоков Collection;

{forEach [realBigArray] => {thread: true} => el, i}
   ...
{onChunk => data}
  ...
{onIterationEnd => data}
  ...
{onComplete => data}
  ...
{/}


2) Улучшена поддержка Angular;
3) Поддержка React;
4) Поддержка сорспамов;
5) Поддержка фильтров для входных параметров шаблонов и подшаблонов:

{template foo((param1|trim), (param2|round = 1.3|round))}


6) Поддержка async / await;

{template-async foo()}
{await getFile()}
{/}

7) Поддержка задания атрибутов в директиве tag через массив;

8) Будет улучшен способ установки параметров по умолчанию:

// param = param == null ? 1 : param
{template foo(param = 1)}

// param = param === undefined ? 1 : param
{template foo2(?param = 1)}


9) Полный перевод доки на инглишь (русская версия разумеется останется) и общая доработка доки;
10) Статья на хабр :)

Ломающие изменения:

1) Будет немного изменён синтаксис tag для работы XML неймспейсами: изменния будт очень незначительны и скорее всего ничего и не сломают в большинстве случаев.

***

Скорее всего работа займёт несколько месяцев.

kobezzza 21.02.2015 15:49

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

Safort 21.02.2015 15:57

kobezzza,
Цитата:

9) Статья на хабр
Ещё не поздно её на первое место поставить) Если сделаешь публичный анонс, то это только даст тебе мотивации меньше лениться и продуктивнее работать)

Цитата:

1) Будет изменён способ установки параметров по умолчанию:

// param = param === undefined ? 1 : param
{template foo(param = 1)}

// param = param == null ? 1 : param
{template foo2(?param = 1)}
О, нет! А, собственно, почему пришлось ломать синтаксис?


Цитата:

Забыл сказать: если есть пожелания по фичами, то прошу не стесняться)
В SS уже настолько много всего, что даже не знаю чего ещё придумать)

kobezzza 21.02.2015 16:00

Цитата:

А, собственно, почему пришлось ломать синтаксис?
Да я уже изменил концепт так, чтобы не сломать совместимость, т.е. логика такая:

// Параметр 1 будет установлен если foo == undefined или null (т.е. сейчас так и есть)
foo = 1

// Параметр 1 будет установлен если foo == undefined
?foo = 1


Цитата:

Ещё не поздно её на первое место поставить) Если сделаешь публичный анонс, то это только даст тебе мотивации меньше лениться и продуктивнее работать)
Я буду делать её параллельно, скорее она и выйдет раньше релиза. Да и сейчас дело не в лени: я немного устал от пиления своего проекта и решил сделать перерыв и устроился just for fun на работу на пол ставки (3 дня в неделю), но первый месяц я обещался отработать на полную, поэтому ща времени свободного оч мало.

И потом я решил таки полностью довести все свои разработки до масс, т.е. перевод док, статьи и т.д. А проект никуда не денется, подумаешь, закончу на пол года позже и хрен с ним :)

kobezzza 21.02.2015 16:09

Ещё добавлю фичу, на которую меня натолкнул Gozar: при добавлении фильтра ему можно будет указать свойство unsafe, которое будет отменять фильтр html по умолчанию

Snakeskin.Filter.n2br = function (str) {
  str.replace(/\r?\n|\r/, '<br />');
};

Snakeskin.Filter.n2br.unsafe = true;

kobezzza 21.02.2015 16:15

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

{template foo() @= filter [Typograf(), Speller()]}


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

kobezzza 21.02.2015 16:27

https://github.com/kobezzza/Snakeskin/issues/24

Завёл темку на Гх, где буду складировать фичи для SS 7.

***

Буду рад помощи по работе с проектом: нужен человек, которой бы причесал имеющуюся доку в вики, т.е. я имею ввиду улучшение имеющих глав, возможно их реструктуризация и т.д.

Gozar 21.02.2015 20:24

Цитата:

Сообщение от kobezzza
Буду рад помощи по работе с проектом: нужен человек, которой бы причесал имеющуюся доку в вики, т.е. я имею ввиду улучшение имеющих глав, возможно их реструктуризация и т.д.

В доке лично для меня были не очевидны следующие вещи.

1. Подключение множества вложенных шаблонов.

2. Передача параметров при наследовании во вложенные
{call myContent(param)}
. Где надо ставить
@
, а где нет. Где надо передавать
param
, а где нет. Почему называть надо
param
, обязательно нужно ли называть
param
.

3. Отсутствие вызова шаблона, только код шаблона(это очень важно, когда начинаешь).

4. Примеры слишком простые, нужны ещё и сложные примеры(объявление двух шаблонов в одном, подключение и наследование в другой трех и т.п.)

5. Применение фильтров было не очевидно.
{el.des|br|!html}
особенно в каком-нибудь
{forEach @city => el}


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

Ещё раз спасибо за такую гибкую шаблонку. По скорости пока претензий нет. Попозже попробую под нагрузкой. :)

kobezzza 21.02.2015 20:43

Цитата:

, а где нет. Где надо передавать
param
, а где нет. Почему называть надо
param
, обязательно нужно ли называть
param
О, я даже не думал, что тут могут проблемы, т.к. написал в одной из первых глав, что template == function и думал, что логично что параметры могу называться как угодно (тоже самое касается и всех "функциональных" директив, типа block, proto, forEach, callback и т.д.) и их может сколько угодно много.

[1, 2, 3].forEach(function (el, i, data) {
   ...
});

[1, 2, 3].forEach(function (elem, key, self) {
   ...
});


{forEach [1, 2, 3] => el, i, data}
   ...
{/}

{forEach [1, 2, 3] => elem, key, self}
   ...
{/}

{forEach [1, 2, 3] => elem, key, self, isFirst, isLast, length}
   ...
{/}

{forEach {a: 1, b: 2} => elem, key, self, i, isFirst, isLast, length}
   ...
{/}


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

Цитата:

Ещё раз спасибо за такую гибкую шаблонку.
SS7 будет ещё гибче :)


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