RoRで簡単なブログを作っています。投稿を編集すると、コード スニペットのすべての改行が失われます。投稿のコンテンツをリロードするときに、エディターがコード スニペットを正しくフォーマットするようにするにはどうすればよいですか?
これは、テキスト エディターへの入力です。
A
B
これは、カスタム ボタンを使用して生成された froala エディターのソース コードです。
<pre><code>A
B</code></pre>
これは、データベースに挿入されたデータです。
"<pre><code>A\r\nB</code></pre>"
これは、Web ページでの表示方法です。
投稿を更新しようとすると、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() || '​') + '<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() || '​') + '<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' %>