Rails: удерживать simple_format от добавления разрывов строк в списках? - PullRequest
5 голосов
/ 08 февраля 2011

Вот входной HTML:

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

<ul>
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Если я передам это через Rails 'simple_format, то получится:

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p>

<p><ul>
<br />  <li>Item 1</li>
<br />  <li>Item 2</li>
<br />  <li>Item 3</li>
</ul></p>

<p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>

Обратите внимание на <br /> перед каждым спискомitem.

Как я могу заставить simple_format не делать этого?

В конечном итоге я хочу добавить теги абзаца вокруг содержимого, которое еще не заключено в какой-либо тег (т.е. цитата, ul, ol).

Ответы [ 3 ]

7 голосов
/ 19 августа 2015

Я столкнулся с той же проблемой. Вот как это решить!

Оберните вывод simple_format в div следующим образом:

<div class="single-spacing">
  <%= simple_format @your_content %>          
</div>

Затем добавьте это в свой файл CSS:

.single-spacing {
  ul br {
    display: none;
  }
}

Или, если вы действительно хотите, чтобы br внутри списка, вы можете добавить этот CSS вместо:

.single-spacing{
  ul li br:first-child, ol li br:first-child {
    display: none;
  }
}

Я пытался добавить это как класс к самому simple_format (который является опцией), но по какой-то причине он не работал. Помещение в DIV делает.

Не уверен, почему simple_format добавляет эти дополнительные
в простой список, но, эй, хо.

Michael

0 голосов
/ 12 сентября 2015

Вы можете попытаться отключить sanitize param

simple_format html_input, {}, sanitize: false}

, и это будет работать, но вы должны иметь в виду, что нет sanitize

0 голосов
/ 09 февраля 2011

Насколько мне известно, simple_format предназначен только для обхода разрывов строк '\ n' (которые создаются при нажатии клавиши ввода)

simple_format создает <br /> для \ n и <p> для \ n \ n

simple_format не предназначен для работы с существующим вводом html, но больше для полей text_area из баз данных, текстовых строк и т. Д.

см. Rails docs для примеров: ActionView - simple_format

Пару предложений можно просто обернуть весь ввод с помощью content_tag:

    <%= content_tag :p, :class => "strong" do -%>
      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

      <ul>
       <li>Item 1</li>
       <li>Item 2</li>
       <li>Item 3</li>
     </ul>

     Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
    <% end -%>

или, если возможно, отформатируйте HTML без разрывов строк:

  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

  <ul> <li>Item 1 </li> <li>Item 2</li> <li>Item 3</li> </ul>

  Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Они оба довольно хакерские, лучшее решение было бы сохранить все входные данные в виде HTML, прежде чем они будут вызваны для отображения. Но не зная, как вы получаете информацию, трудно предложить способ сделать это.

...