© 2020 WebHive

Расширяем возможности Slim в Rails приложении

Как добавить собственный тип блоков в шаблонизатор slim

В slim есть возможность использовать так называемые engines — блоки с отличным от slim синтаксисом. Таким образом можно в slim шаблоне писать код используя одновременно несколько разных синтаксисов.

Например:

markdown:
  #Header
    Hello from #{"Markdown!"}
    Second Line!

И всё бы ничего, но в один прекрасный момент мне понадобилось внедрить не совсем стандартный синтаксис. На самом-то деле довольно стандартный — просто инлайновый css. Но встроенный в slim engine для css/scss/sass оборачивает написанный код в тэг style. А в моём случае планировалось использовать эту возможность для AMP страниц и там такой подход уже не работает.

Ну и собственно, чтобы добиться желаемого просто добавим в файл инициализации config/initialize/slim.rb нужный нам код

# создаем свой rendering engine
class AmpScssEngine < Slim::Embedded::SassEngine
  def on_slim_embedded(engine, body, attrs)
    super(:scss, body, attrs)
  end
end

# регистрируем его в slim 
Slim::Embedded.register :amp_scss, AmpScssEngine

После этого использовать в шаблоне этот рендерер можно следующим образом:

style amp-custom
  amp_scss:
    .amenity {
      &__icon {
        display: inline-flex;
      }
    }

Комментарии