Как сохранить пользовательские параметры в 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
}
Другие вопросы по тегам