Skip to content

Commit 4fd5c8c

Browse files
committed
Add ActionText support
Attachment support is not included here, since it requires webpack-built javascripts. Closes #3144
1 parent 18d072c commit 4fd5c8c

File tree

11 files changed

+93
-0
lines changed

11 files changed

+93
-0
lines changed

app/assets/javascripts/rails_admin/ra.widgets.coffee

+8
Original file line numberDiff line numberDiff line change
@@ -349,3 +349,11 @@ $(document).on 'rails_admin.dom_ready', (e, content) ->
349349
goFroalaWysiwygs(array)
350350
else
351351
goFroalaWysiwygs(array)
352+
353+
# action_text
354+
355+
content.find('trix-editor').each ->
356+
if !window.Trix
357+
options = $(this).data('options')
358+
$('head').append('<link href="' + options['csspath'] + '" rel="stylesheet" media="all" type="text\/css">')
359+
$.getScript options['jspath']
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
:ruby
2+
js_data = {
3+
csspath: field.css_location,
4+
jspath: field.js_location
5+
}
6+
7+
= form.rich_text_area field.method_name, field.html_attributes.reverse_merge(data: { options: js_data.to_json })

lib/rails_admin/config/fields.rb

+1
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,5 @@ def self.register_factory(&block)
8585
require 'rails_admin/config/fields/factories/refile'
8686
require 'rails_admin/config/fields/factories/active_storage'
8787
require 'rails_admin/config/fields/factories/shrine'
88+
require 'rails_admin/config/fields/factories/action_text'
8889
require 'rails_admin/config/fields/factories/association'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
require 'rails_admin/config/fields'
2+
require 'rails_admin/config/fields/types'
3+
4+
RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
5+
if defined?(::ActionText) && properties.try(:association?) && (match = /\Arich_text_(.+)\Z/.match properties.name) && properties.klass.to_s == 'ActionText::RichText'
6+
field = RailsAdmin::Config::Fields::Types.load(:action_text).new(parent, match[1], properties)
7+
fields << field
8+
true
9+
else
10+
false
11+
end
12+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
require 'rails_admin/config/fields/base'
2+
require 'rails_admin/config/fields/types/text'
3+
4+
module RailsAdmin
5+
module Config
6+
module Fields
7+
module Types
8+
class ActionText < RailsAdmin::Config::Fields::Types::Text
9+
# Register field type for the type loader
10+
RailsAdmin::Config::Fields::Types.register(self)
11+
12+
register_instance_option :version do
13+
'1.1.1'
14+
end
15+
16+
register_instance_option :css_location do
17+
"https://cdnjs.cloudflare.com/ajax/libs/trix/#{version}/trix.css"
18+
end
19+
20+
register_instance_option :js_location do
21+
"https://cdnjs.cloudflare.com/ajax/libs/trix/#{version}/trix.js"
22+
end
23+
24+
register_instance_option :partial do
25+
:form_action_text
26+
end
27+
end
28+
end
29+
end
30+
end
31+
end

lib/rails_admin/config/fields/types/all.rb

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
require 'rails_admin/config/fields/types/action_text'
12
require 'rails_admin/config/fields/types/active_record_enum'
23
require 'rails_admin/config/fields/types/active_storage'
34
require 'rails_admin/config/fields/types/belongs_to_association'

spec/dummy_app/app/active_record/field_test.rb

+2
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ def carrierwave_assets=(files)
5252
include ShrineUploader.attachment(:shrine_asset)
5353
include ShrineVersioningUploader.attachment(:shrine_versioning_asset)
5454

55+
has_rich_text :action_text_field if defined?(ActionText)
56+
5557
enum string_enum_field: {S: 's', M: 'm', L: 'l'}
5658
enum integer_enum_field: [:small, :medium, :large]
5759
end

spec/dummy_app/config/application.rb

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
end
1212

1313
require 'active_storage/engine' if Rails.version >= '5.2.0' && CI_ORM == :active_record
14+
require 'action_text/engine' if Rails.version >= '6.0.0' && CI_ORM == :active_record
1415

1516
# Require the gems listed in Gemfile, including any gems
1617
# you've limited to :test, :development, or :production.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class CreateActionTextTables < ActiveRecord::Migration[5.0]
2+
def change
3+
create_table :action_text_rich_texts do |t|
4+
t.string :name, null: false
5+
t.text :body, size: :long
6+
t.references :record, null: false, polymorphic: true, index: false
7+
8+
t.timestamps
9+
10+
t.index [:record_type, :record_id, :name], name: "index_action_text_rich_texts_uniqueness", unique: true
11+
end
12+
end
13+
end

spec/integration/config/edit/rails_admin_config_edit_spec.rb

+12
Original file line numberDiff line numberDiff line change
@@ -1005,6 +1005,18 @@ class HelpTest < Tableless
10051005
end
10061006
end
10071007

1008+
describe 'ActionText Support' do
1009+
it 'works without error', js: true do
1010+
RailsAdmin.config FieldTest do
1011+
edit do
1012+
field :action_text_field
1013+
end
1014+
end
1015+
expect { visit new_path(model_name: 'field_test') }.not_to raise_error
1016+
is_expected.to have_selector('trix-toolbar')
1017+
end
1018+
end if defined?(ActionText)
1019+
10081020
describe 'Paperclip Support' do
10091021
it 'shows a file upload field' do
10101022
RailsAdmin.config User do
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
require 'spec_helper'
2+
3+
describe RailsAdmin::Config::Fields::Types::ActionText do
4+
it_behaves_like 'a generic field type', :action_text_field
5+
end if defined?(ActionText)

0 commit comments

Comments
 (0)