Как сохранить пользовательские параметры в WYSIWYG Trix Editor при редактировании (Ruby on Rails, Actiontext)
Я создаю сайт Rails с WYSIWYG, используя Trix и actiontext. Я использую Ruby 2.6.3 и Rails 5.2.3.
Проблема: когда я внедряю пользовательскую редакцию (т.е. добавляю красный цвет текста), он отлично работает при создании (CRUD: новый), отлично отображается при его рендеринге (CRUD: показать), но когда я пытаюсь редактировать текст, моя пользовательская стиль не отображается в моем редакторе в режиме редактирования, а диапазон, добавленный триксом к форматированному тексту, отсутствует в DOM клиента (CRUD: редактировать).
Поскольку он отображается в представлении "Показать", я подтверждаю, что мое пользовательское издание сохраняется в базе данных.
Я полагаю, это проблема дезинфекции. Раньше у меня была эта проблема с шоу, поэтому я добавил атрибут style в разрешенные атрибуты дезинфицирующего средства Rails.
Мой трикс-настройщик выглядит так, чтобы добавить красный вариант:
// Attributes definition :
Trix.config.textAttributes.red = {
style: { color: "red" },
parser: function(element) {
return element.style.color === "red"
},
inheritable: true
}
addEventListener("trix-initialize", function(event) {
var buttonHTML = '<button type="button" data-trix-attribute="red">RED</button>'
event.target.toolbarElement.
querySelector(".trix-button-group.trix-button-group--text-tools").
insertAdjacentHTML("beforeend", buttonHTML)
})
Он хорошо работает при использовании в редакторе (опция на панели инструментов работает как в режиме редактирования, так и в новом представлении).
Кроме того, для правильного отображения в представлении представления я добавил инициализатор Rails, чтобы разрешить атрибуты стиля:
Rails::Html::Sanitizer.white_list_sanitizer.allowed_attributes.add 'style'
Проблема в том, что при переходе в режим редактирования ранее примененный красный стиль больше не отображается. Обратите внимание, что я использую один и тот же _form.html.erb для создания и редактирования представления:
<%= simple_form_for([@owner, @article] , url: @action[:url], method: @action[:method]) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :title %>
<%= f.rich_text_area :content %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
Не стесняйтесь, если вам нужно больше деталей. Спасибо большое за помощь!
0 ответов
Используйте формат rgb:
Trix.config.textAttributes.color = {
style: { color: 'rgb(255, 0, 0)' },
parser: (element) => element.style.color === 'rgb(255, 0, 0)',
inheritable: true
}