Skip to content

Commit

Permalink
Add ActionText support
Browse files Browse the repository at this point in the history
Attachment support is not included here, since it requires webpack-built javascripts.
Closes #3144
  • Loading branch information
mshibuya committed Jun 1, 2019
1 parent 18d072c commit 4fd5c8c
Show file tree
Hide file tree
Showing 11 changed files with 93 additions and 0 deletions.
8 changes: 8 additions & 0 deletions app/assets/javascripts/rails_admin/ra.widgets.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -349,3 +349,11 @@ $(document).on 'rails_admin.dom_ready', (e, content) ->
goFroalaWysiwygs(array)
else
goFroalaWysiwygs(array)

# action_text

content.find('trix-editor').each ->
if !window.Trix
options = $(this).data('options')
$('head').append('<link href="' + options['csspath'] + '" rel="stylesheet" media="all" type="text\/css">')
$.getScript options['jspath']
7 changes: 7 additions & 0 deletions app/views/rails_admin/main/_form_action_text.html.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
:ruby
js_data = {
csspath: field.css_location,
jspath: field.js_location
}

= form.rich_text_area field.method_name, field.html_attributes.reverse_merge(data: { options: js_data.to_json })
1 change: 1 addition & 0 deletions lib/rails_admin/config/fields.rb
Original file line number Diff line number Diff line change
Expand Up @@ -85,4 +85,5 @@ def self.register_factory(&block)
require 'rails_admin/config/fields/factories/refile'
require 'rails_admin/config/fields/factories/active_storage'
require 'rails_admin/config/fields/factories/shrine'
require 'rails_admin/config/fields/factories/action_text'
require 'rails_admin/config/fields/factories/association'
12 changes: 12 additions & 0 deletions lib/rails_admin/config/fields/factories/action_text.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
require 'rails_admin/config/fields'
require 'rails_admin/config/fields/types'

RailsAdmin::Config::Fields.register_factory do |parent, properties, fields|
if defined?(::ActionText) && properties.try(:association?) && (match = /\Arich_text_(.+)\Z/.match properties.name) && properties.klass.to_s == 'ActionText::RichText'
field = RailsAdmin::Config::Fields::Types.load(:action_text).new(parent, match[1], properties)
fields << field
true
else
false
end
end
31 changes: 31 additions & 0 deletions lib/rails_admin/config/fields/types/action_text.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
require 'rails_admin/config/fields/base'
require 'rails_admin/config/fields/types/text'

module RailsAdmin
module Config
module Fields
module Types
class ActionText < RailsAdmin::Config::Fields::Types::Text
# Register field type for the type loader
RailsAdmin::Config::Fields::Types.register(self)

register_instance_option :version do
'1.1.1'
end

register_instance_option :css_location do
"https://cdnjs.cloudflare.com/ajax/libs/trix/#{version}/trix.css"
end

register_instance_option :js_location do
"https://cdnjs.cloudflare.com/ajax/libs/trix/#{version}/trix.js"
end

register_instance_option :partial do
:form_action_text
end
end
end
end
end
end
1 change: 1 addition & 0 deletions lib/rails_admin/config/fields/types/all.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
require 'rails_admin/config/fields/types/action_text'
require 'rails_admin/config/fields/types/active_record_enum'
require 'rails_admin/config/fields/types/active_storage'
require 'rails_admin/config/fields/types/belongs_to_association'
Expand Down
2 changes: 2 additions & 0 deletions spec/dummy_app/app/active_record/field_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ def carrierwave_assets=(files)
include ShrineUploader.attachment(:shrine_asset)
include ShrineVersioningUploader.attachment(:shrine_versioning_asset)

has_rich_text :action_text_field if defined?(ActionText)

enum string_enum_field: {S: 's', M: 'm', L: 'l'}
enum integer_enum_field: [:small, :medium, :large]
end
1 change: 1 addition & 0 deletions spec/dummy_app/config/application.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
end

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

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
class CreateActionTextTables < ActiveRecord::Migration[5.0]
def change
create_table :action_text_rich_texts do |t|
t.string :name, null: false
t.text :body, size: :long
t.references :record, null: false, polymorphic: true, index: false

t.timestamps

t.index [:record_type, :record_id, :name], name: "index_action_text_rich_texts_uniqueness", unique: true
end
end
end
12 changes: 12 additions & 0 deletions spec/integration/config/edit/rails_admin_config_edit_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1005,6 +1005,18 @@ class HelpTest < Tableless
end
end

describe 'ActionText Support' do
it 'works without error', js: true do
RailsAdmin.config FieldTest do
edit do
field :action_text_field
end
end
expect { visit new_path(model_name: 'field_test') }.not_to raise_error
is_expected.to have_selector('trix-toolbar')
end
end if defined?(ActionText)

describe 'Paperclip Support' do
it 'shows a file upload field' do
RailsAdmin.config User do
Expand Down
5 changes: 5 additions & 0 deletions spec/rails_admin/config/fields/types/action_text_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
require 'spec_helper'

describe RailsAdmin::Config::Fields::Types::ActionText do
it_behaves_like 'a generic field type', :action_text_field
end if defined?(ActionText)

0 comments on commit 4fd5c8c

Please sign in to comment.