Как обрезать начальные пробелы с помощью `<% =` в шаблонах ERB в Rails, которые заканчиваются элементами `pre`? - PullRequest
0 голосов
/ 06 ноября 2018

(Насколько я здесь исследовал, это не повторяющийся вопрос. Обрезание пробелов - часто заканчивающихся символами новой строки - обсуждается для <%- или -%>, но не для <%=. Это может быть незначительный дефект в шаблонном движке Erubi, который используется Rails для шаблонов ERB.)

Я хочу отобразить / выделить синтаксис кода в представлении, и мой шаблон представления ERB содержит:

<code><p>
  <strong>Code:</strong>
  <pre class="highlight github">
    <%= highlight(@code.code, @code.language) %>
  

Результатом является вывод HTML:

<code><p>
  <strong>Code:</strong>
  <pre class="highlight github">
    <span class="kt">[and here's the code, but indented too much]</span>
  

Из-за тега pre пробелы перед первой строкой кода включаются в HTML и, следовательно, отображаются, в результате чего первая строка кода имеет слишком много отступов в четыре пробела.

Очевидно, я также могу сделать шаблон представления ERB как:

<code><p>
  <strong>Code:</strong>
  <pre class="highlight github">
<%= highlight(@code.code, @code.language) %>
  

но это выглядит некрасиво (потому что отступы отключены) в моем представлении шаблона.

Вопрос: как я могу заставить <%= также проглотить ведущие пробелы? Я знаю, что использование -%> в качестве закрывающего тега удаляет завершающие пробелы / переводы строк ... но я хочу, чтобы также были удалены начальные пробелы (не только переводы строк).

1 Ответ

0 голосов
/ 06 марта 2019

Попробуйте использовать вспомогательный метод concat с тегом ERB, который начинается с <% вместо <%=:

<code><p>
  <strong>Code:</strong>
  <pre class="highlight github">
    <% concat(highlight(@code.code, @code.language)) %>
  
...