ERb — стандартный язык разметки в мире Ruby. Это html со вставками на Ruby. В мире Elixir ту же роль выполняет EEx. Такой же синтаксис, только вместо Ruby — Elixir. Вот как это выглядит:
<!DOCTYPE html>
<html>
<head>
<title>Заголовок</title>
<meta name="keywords" content="template <%= language_name %>">
<meta name="author" content="<%= user_name %>">
</head>
<body>
<h1 class="page-header"><%= page_header %></h1>
<div id="content">
<p><%= page_content %></p>
Дополнительный текст.
</div>
</body>
</html>
То же самое можно написать в 1.5 раза короче без потери читаемости.
Встречайте: язык разметки Slim и его Elixir-аналог Slime:
Прошу прощенья за картинку вместо текста, Хабр неправильно подсвечивает Slim.
Особенности
- Вложенность управляется отступами. Всё равно ведь форматируете код;
- Сокращённый синтаксис для айдишников и классов;
- Если название тега не указано, подставится
div
; Атрибуты можно по желанию обрамлять либо не обрамлять скобками:
meta name="author" meta[name="author"] meta(name="author") meta{name="author"}
- Поддерживается текстовыми редакторами. Вообще, без подсветки синтаксиса slim'ом было бы невозможно пользоваться: названия тегов и их содержимое сливались бы. А с подсветкой всё ок.
- Есть интеграция с популярными фреймворками (Rails, Sinatra, Phoenix);
- Работает быстро. Здесь бенчмарк от 2014 года. Показывается, что Slim чуть медленнее Erb (Slime работает со скоростью EEx).
Как перевести проект на Slim?
Есть онлайн-конвертер; подойдёт, если темплейтов не много. Есть гем html2slim, который сконвертирует все темплейты проекта:
$ gem install html2slim
$ erb2slim app/views
Как перевести проект на Slime?
Программистов на Elixir'е меньше, чем рубистов (кстати, как их называть, «эликсиристы»?). Slime используется и того реже. В общем, когда я, поплевавшись часик на EEx, пошёл искать реализацию Slim, обнаружил экосистему Slime в незрелом состоянии. Т.е. сам язык работал, с фениксом отлично интегрировался, но общее впечатление было как от клавиатуры с западающей клавишей.
Что ж, это opensource. Закатив рукава, я добавил поддержку Slime в Sublime Text, улучшил официальный сайт языка (slime-lang.com) и сделал утилиту eex2slime для конвертирования. Проверял её на опенсорсных исходниках hex.pm и changelog.com: из-за небольших ограничений Slime исходные шаблоны пришлось немного подготовить, но в целом конвертация происходит успешно. Эта утилита — адаптация гема html2slim, поэтому для работы нужен Ruby >= 1.9.3. Использование:
$ gem install eex2slime
$ eex2slime lib/web/templates/
Ещё сделал онлайн-конвертер. Пока что он работает только в режиме slime->eex. Полезен для проверки того, как именно отработает конкретный Slime-темплейт.
Оно того стоит?
Писать и редактировать код на Slim'е быстрее, чем на Erb. Из минусов: не все его знают; кому-то синтаксис кажется плохо читаемым. Впрочем, выучить его просто, а подсветка синтаксиса избавляет от возможных проблем с читаемостью.
Eсли команда вашего проекта небольшая и коллеги не против — попробовать Slim/Slime стоит.
P.S. Если писать горы тегов неудобно, а синтаксис Slim не нравится, можете попробовать Emmet.
Комментарии (13)
Dreyk
29.03.2017 15:04+1не перешел на слим, так как верстает у нас верстальщик, а программист потом "оживляет" html. Копировать из хрома готовую верстку и разбавлять erb гораздо проще и быстрее, чем переписывать все на slim =)
зато слим/хамл и т.д. умеют нормально минифицировать хтмл
develop7
29.03.2017 15:12у меня верстальщик очень проникся и верстает сразу в slim :)
Dreyk
29.03.2017 15:17тут такое дело, что верстальщик чтобы много не фигачить и не копипастить использует простенькие пхп-конструкции и инклюды, поэтому я копирую готовый хтмл прям из хрома
Fedcomp
29.03.2017 15:52+2https://html2haml.herokuapp.com/
https://html2slim.herokuapp.com/Dreyk
29.03.2017 16:46ну да ну да… но это все равно неудобно, надо действительно пересаживать верстальщика, чтобы на мой вопрос "так а что это тут вот такое" мне не отвечали "это ваще че такое? где мой хтмл?" :D
printercu
29.03.2017 16:20+1Можете попробовать предложить ему middleman. Live-reload из коробки может его заинтересовать.
tomgif
30.03.2017 09:07Jade/pug в новой упаковке?
HedgeSky
30.03.2017 10:14Синтаксис схож, но pug нацелен на исполнение в среде node.js.
Ну и не такая уж и новая упаковка: первая версия slim опубликована в сентябре 2010.
neenik
Заиспользовали немного HAML (практически, аналог описываемого вами шаблонизатора).
Потом плевались — переписывали.
Достоинства шаблонизаторов на базе HTML — его знают все и он читаем.
Недостатки шаблонизатора на отступах: в идеальном мире (когда шаблон того же размера, что вы привели — десяток строк) — все замечательно читается/правится. В реальном мире — страницы большие и они плохо читаемы/дорабатываемы.
develop7
лично я в HAML всё время спотыкался об
%
ну, я распиливал такие страницы на partials где возможно, выходило приемлемо
HedgeSky
Я раньше тоже использовал HAML, и тоже недолюбивал постоянные знаки процента: неудобно было их набирать, с зажатым шифтом до пятёрки тянуться. В slim такой проблемы нет.