Фрагмент кода Froala теряет линии разрыва при редактировании

Я делаю простой блог в RoR. Когда я редактирую сообщение, я теряю все разрывы строк во фрагменте кода. Как я могу убедиться, что при перезагрузке содержимого поста редактор правильно форматирует фрагменты кода?

Это ввод в текстовый редактор:

A B

Это исходный код в редакторе froala, сгенерированный с помощью пользовательской кнопки:

<pre><code>A B</code></pre>

Это данные, вставленные в базу данных:

"<pre><code>A\r\nB</code></pre>"

Вот как это выглядит на веб-странице:

введите здесь описание изображения

Вот как это выглядит в редакторе Froala, когда я пытаюсь обновить пост:

введите здесь описание изображения

Вот как на этот раз выглядит исходный код:

<pre><code>AB</code></pre>

Это код пользовательской кнопки:

customButtons: {
insertCode: {
title: 'Insert code',
  icon: {
    type: 'font',
      value: 'fa fa-code'
  },
    callback: function() {
      if (!this.selectionInEditor()) {
        this.$element.focus(); // Focus on editor if it's not.
      }

      var html = '<pre><code>' + (this.text() || '&#8203;') + '<span class="f-marker" data-type="false" data-id="0" data-fr-verified="true"></span><span class="f-marker" data-type="true" data-id="0" data-fr-verified="true"></span></code></pre>';

      this.insertHTML(html);
      this.restoreSelectionByMarkers();
      this.saveUndoStep();
    }
  }
}

-------------------------Обновлять------------------------ -----

Проблема, похоже, связана с функцией инициации froala:

шаг 1: создайте текстовое поле с содержимым:

<textarea id="froalaedit" name="content">
<pre><code>A
B</code></pre>
</textarea>

шаг 2: добавьте кнопку для запуска редактора froala:

<button onclick="myFunction()">Click me</button>

<script>
function myFunction(){
  $('textarea#froalaedit').editable({
    inlineMode: false,
    buttons: ['html', 'removeFormat', 'sep', 'undo', 'redo', 'sep', 'insertHorizontalRule', 'bold', 'italic', 'underline', 'strikeThrough', 'subscript', 'superscript', 'sep', 'fontFamily', 'fontSize', 'color', 'sep', 'formatBlock', 'blockStyle', 'align', 'sep', 'insertOrderedList', 'insertUnorderedList', 'sep', 'createLink', 'insertImage', 'insertVideo', 'table', 'uploadFile', 'fullscreen', 'insertCode'],
    minHeight: 200,
    customButtons: {
      insertCode: {
        title: 'Insert code',
        icon: {
          type: 'font',
          value: 'fa fa-code'
        },
        callback: function() {
          if (!this.selectionInEditor()) {
            this.$element.focus(); // Focus on editor if it's not.
          }

          var html = '<pre><code>' + (this.text() || '&#8203;') + '<span class="f-marker" data-type="false" data-id="0" data-fr-verified="true"></span><span class="f-marker" data-type="true" data-id="0" data-fr-verified="true"></span></code></pre>';

          this.insertHTML(html);
          this.restoreSelectionByMarkers();
          this.saveUndoStep();
        }
      }
    }
  })
};
</script>

Шаг 3: поведение повторяется при нажатии кнопки.

--------------------Исправлено------------------------

сделал это:

<div id="eg-textarea"><%= @post.content.html_safe %></div>

вместо этого:

<%= f.text_area :content, rows: 40, id: 'eg-textarea' %>

person Vlad Otrocol    schedule 19.05.2015    source источник


Ответы (1)


Возникла проблема с \n внутри textarea, и она не отображалась должным образом. Вы можете использовать div вместо текстового поля или использовать основную версию из Github, которая решает проблему.

person st3fan    schedule 19.05.2015