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 будет ещё гибче :)

Gozar 21.02.2015 21:03

Цитата:

Сообщение от kobezzza
SS7 будет ещё гибче

Главное совместимость чтобы осталась.

kobezzza 21.02.2015 21:11

Цитата:

Сообщение от Gozar (Сообщение 357698)
Главное совместимость чтобы осталась.

Для 99% вещей она останется, а с тем 1% ты вряд ли столкнёшься :) Сейчас я намерен "сломать" только одну вещь - псевдоклассы, т.е.

{tag myCustomTag:inline}{/}


->

<myCustomTag />


Но когда я вводил такой синтаксис, то не подумал про неймспесы в XML

<xlink:a />


Поэтому нужно заменить синтаксис псевдоклассов, например на

{tag myCustomTag::inline}{/}

Safort 21.02.2015 21:25

kobezzza,
Цитата:

Для 99% вещей она останется, а с тем 1% ты вряд ли столкнёшься :)
Хах, прикинь, он как раз чаще всего и использует функционал из этого 1% :)

Safort 21.02.2015 23:43

kobezzza,
[маркетолог мод]
ещё, как мне кажется, на страницу "Установка и варианты применения" было бы не плохо добавить инфу о поддержке Node.js 0.12 и IO.js.
[/маркетолог мод]

kobezzza 22.02.2015 00:04

Цитата:

Сообщение от Safort (Сообщение 357725)
kobezzza,
[маркетолог мод]
ещё, как мне кажется, на страницу "Установка и варианты применения" было бы не плохо добавить инфу о поддержке Node.js 0.12 и IO.js.
[/маркетолог мод]

Можно :)

grisina 25.02.2015 10:23

Угу, заломили цену ппц под 40к, но они жуки тупо считают количество букв и не выделяют код, поэтому нужно будет всю доку для них засунуть в один файл и вырезать весь код, чтобы не наебать У мя ща предновогодняя лень идёт, поэтому процесс ползёт медленно.

Zend 25.02.2015 17:37

Цитата:

Сообщение от grisina
Угу, заломили цену ппц под 40к, но они жуки тупо считают количество букв и не выделяют код, поэтому нужно будет всю доку для них засунуть в один файл и вырезать весь код, чтобы не наебать У мя ща предновогодняя лень идёт, поэтому процесс ползёт медленно.

WAT?

Safort 25.02.2015 17:53

Zend,
он, наверное, про переводчиков, которым Кобеззза хотел заказать перевод на английский. Правда, я не совсем понял к чему он это написал.

melky 25.02.2015 17:57

Цитата:

Сообщение от grisina
предновогодняя лень

Цитата:

Сообщение от Safort (Сообщение 358412)
Zend,
он, наверное, про переводчиков, которым Кобеззза хотел заказать перевод на английский. Правда, я не совсем понял к чему он это написал.

это из "назад в будущее". прилетели к нам из своих 90х)

kobezzza 25.02.2015 18:01

Цитата:

Сообщение от Safort (Сообщение 358412)
Zend,
он, наверное, про переводчиков, которым Кобеззза хотел заказать перевод на английский. Правда, я не совсем понял к чему он это написал.

Это спам бот :)

moron 05.03.2015 02:41

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

kobezzza 05.03.2015 09:00

Цитата:

Сообщение от moron (Сообщение 359660)
Слушай, а как ты справляешься с мыслями о том, что твой продукт может не взлететь? Вот сделаешь ты, напишешь пару постов на хабр, а среди разработчиков он не взыскает популярности...стараний вложено-то не мало.
Неужели просто для себя?
Я не хочу никого обидеть.

Меня на самом деле это мало волнует, т.е. я конечно хотел бы, что бы о моих разработках узнали, но не более того.

Я пишу свои библиотеки для себя и под реальные задачи, а ещё потому что я программист и люблю это делать, да и в конце концов, был ли я тем кем являюсь без всего этого? Думаю нет. Более того, это отличное портфолио.

Что касается документации, перевода на английски и т.д. Тут тоже всё просто:

1) Доку пишу, потому что этого требует мой перфекционизм;
2) На английский перевожу, т.к. учу английский.

Safort 08.03.2015 23:01

kobezzza,
кстати, думаю, им можно прислать пуллреквест с бенчмарками SS. Подойдёт для начальной раскрутки)
https://github.com/Deathspike/template-benchmark

kobezzza 09.03.2015 11:12

Цитата:

Сообщение от Safort (Сообщение 360178)
kobezzza,
кстати, думаю, им можно прислать пуллреквест с бенчмарками SS. Подойдёт для начальной раскрутки)
https://github.com/Deathspike/template-benchmark

Нормальные бенчмарки трудно сделать, т.к. возможности у шаблонок разные и ни одна (из списка по ссылке) не умеет всего, что умеет SS. Да и самое главное, что большинство шаблонок умеют делать предварительную транслцию.

Gozar 14.03.2015 11:55

Цитата:

Сообщение от moron
как ты справляешься с мыслями о том, что твой продукт может не взлететь?

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

Хороший инструмент, простой в освоении :). Сделал и забыл, нужно доделать, вернулся 1 секунду повтыкал, доделал.

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

kobezzza 14.03.2015 13:45

Цитата:

Сообщение от Gozar (Сообщение 361187)
Для меня он уже взлетел, ума не приложу чтобы я без него делал, скорее всего крутил бы костыли. Если рассматривать верстку шаблонов под nodejs, то лучшего продукта я пожалуй не видел.

Хороший инструмент, простой в освоении :). Сделал и забыл, нужно доделать, вернулся 1 секунду повтыкал, доделал.

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

Спасибо за теплые слова, прям мотивирует развивать проект с новыми силами :)

Кстати о развитии: со след недели у меняя снова появляется время на проект, т.к. ухожу на пол ставки на работе, поэтому выход SS7 думаю произойдёт в начале след месяца. А ещё я таки проникся WebPack (ууууу какой крутой инструмент :dance: ) поэтому в зоопарке плагинов к SS появится лоадер для WebPack. Также после выхода SS7 проект переедет в свою сосбтвенную группу на Github: https://github.com/SnakeskinTpl где также будут лежать все плагины (gulp, grunt, express, webpack и т.д.).

kobezzza 14.03.2015 15:48

Придумал ещё пару полезных фич для SS7:

Новый модификатор контекста: @: и директива env. По имени директивы уже можно догадаться, что данные вещи будут упрощать работу с переменными окружения:

{env DEBUG = 'true'}


или

{void @:DEBUG = 'true'}


Использование в других директивах:

{if @:DEBUG == 'true'}
    ...
{/}

{switch @:NODE_ENV}
    {case 'dev'}
        ...
    {/}

    {case  'prod'}
        ...
    {/}
{/}


***

Также появится новый параметр компиляциии: engine, этот параметр будет задавать используемое окружение скомпиленного шаблона, например: default (он же nodejs, думаю для io пока нет смысла делать, ибо там все совпадает пока), nashorn (это встроенный в Java8 JS движок, чтобы использовать шаблоны из Java).

В зависимости от этого параматра полученный код шаблона может немного отличаться, например, получение переменной окружения в node это process.env, а в nashorn как то иначе и т.д.

kobezzza 14.03.2015 16:00

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

{proto myTpl->foo() @final}
   ...
{/}


Но это пока только мысли вслух :)

kobezzza 26.03.2015 19:55

trikadin придумал новую систему code-reuse для SS, в добавление к наследованию и примесям, встречайте (барабанная дробь), враперы!

- template wrapper(data1, data2)
  < span style = color: red;
    {data1}
    
  < span style = color: blue;
    {data2}
    
- template main()
  - wrap call wrapper
    Мой текст
  - and
    Мой текст 2


Думаю результат всем понятен :)

trikadin 26.03.2015 20:40

Допишу ещё, а то из примера неочевидно, что враппером может быть кто угодно: темплейт, прототип, блок -- главное ключевое слово wrap не забыть :)

Safort 29.03.2015 01:17

kobezzza,
а для SS обязательно нужен bower? Потому, что
Цитата:

npm i -S snakeskin
не устанавливает и пишет
Цитата:

bower: not found

kobezzza 29.03.2015 02:42

Цитата:

Сообщение от Safort (Сообщение 363729)
kobezzza,
а для SS обязательно нужен bower? Потому, что не устанавливает и пишет

Только для dev установки, ну установи, раз ругается, потом гляну.

kobezzza 31.03.2015 22:29

Разработка проекта переехала на https://github.com/SnakeskinTpl

kobezzza 04.04.2015 09:59

http://babeljs.io/users/ :)

Zend 14.04.2015 12:35

Цитата:

Сообщение от kobezzza
в зоопарке плагинов к SS появится лоадер для WebPack


kobezzza 10.06.2015 09:53

Давно не писал новостей и профакапил заявленые сроки, поэтому отпишусь: разработка SS7 идёт, хотя нехватка времени + лень (лето и велик мешают :)).

Уже сделано много и в июле (ориентировочно конец первой недели) думаю таки выйдет релиз. SS7 выходит просто потрясающий, это будет качественный шаг вперёд по сравнению с SS6, но при этом обратная совместимость по всем документированным фичам нарушена не будет, однако будут введены ряд новых синтаксических расширений, который позволят писать старые фичи с куда большим сахаром, чем это делается сейчас. Я бы назвал SS7 "переосмысливающем" релизом, т.к. в отличии от прошлых версий, где я просто добавлял фичи под требования своих проектов, то тут я впервые уделил время "спецификации", если так можно выразиться.

В общем я стараюсь :)

Gozar 10.06.2015 11:14

Цитата:

Сообщение от kobezzza
В общем я стараюсь

Обязательно посмотрю.

cyber 10.06.2015 12:12

kobezzza, ты статью на харбе написал, ты вроде говорил что хотел, я профукал или еще нет?)

kobezzza 10.06.2015 12:20

Цитата:

Сообщение от cyber (Сообщение 374605)
kobezzza, ты статью на харбе написал, ты вроде говорил что хотел, я профукал или еще нет?)

Не, я ж ленивая жопа, но напишу :)

cyber 11.06.2015 17:45

Цитата:

Сообщение от kobezzza
но напишу

Будущее не определенное время:)


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