solovyov.net

Коли я писав TwinSpark, однією з ідей була code locality: так, щоб в момент читання коду можна було прям на елементі побачити все, що він тут збирається робити. По-простому — я хотів мати у верстці елементівonclick="hide()", щоб не треба було ходити в інший файл (або купу їх), як з jQuery. В реакті воно так і є, прям у JSX ти пишеш що має відбутися на кліку.

Але я не хочу як в реакті, де треба передати функцію, або як в хтмлі, де строка на джаваскрипті. Перше занадто обмежене, а друге занадто безкрає і незручне — настільки, що й раніше туди максимум func(1,2) писали. Тож хочеться щось досить обмежене, достатньо зручне і просте.

Так з’явилися екшени ts-action. Ідея така: є тригер екшенів ts-trigger, за замовчуванням це click (або submit для форми), є ціль ts-target, за замовчуванням це сам елемент, де все трапляється, і є строка екшенів виду class+ loading, delay 1s, remove. Коми розділяють екшени, перше слово — це назва екшену, всі інші передаються просто строками — це вже робота кожного екшену вирішити що з тим робити.

Екшен або виконується одразу (синхронно), або може повернути проміс, і тоді увесь механізм його чекає. Це дозволяє зробити щось на кшталт class+ fade, wait transitionend, remove, де .fade вмикає якийсь цсс-перехід на елементі, і після завершення того елементу все вбивається. Краса!

Але є одне занепокоєння — експресивність. Найбільше обмеження, мені здається, це неможливість вмістити два різних набори екшенів на одному елементі. Те, що самі екшени досить тупий синтаксис мають — так он шели все життя так, і ніяких проблем. :) Але ж тут я теж можу помилятися.

Тож я з реальнім інтересом слідкую за проектом https://hyperscript.org, де Карсон (автор Intercooler.js та HTMx) намається щось розвивати у тому ж напрямку, але з більшою експресивністю. Одна штука, що дратує — це HyperTalk або AppleScript направленість, вони роблять все це дуже схожим на нормальну англійську мову, з різними опціональними штуками. Я досить багато возився з AppleScript і знаю що це потім дуже складно вивчати і розбирати, тож я б волів би бачити тупішу формальнішу граматику.

Але щось ідеї кращого синтаксису поки що не прийшли до голови. От я і думаю, у якому напрямку копати?.. Чи може у вас є якісь міркування на цю тему?

(@ tg)