Skip to content

Commit 57961eb

Browse files
authored
Merge pull request #2949 from d9su/simple-mde
Add markdown field support through SimpleMDE
2 parents 5c5044d + f7b2378 commit 57961eb

6 files changed

Lines changed: 111 additions & 0 deletions

File tree

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,31 @@ $(document).on 'rails_admin.dom_ready', (e, content) ->
171171
html = html.add(option)
172172
object_select.html(html)
173173

174+
175+
# simplemde
176+
177+
goSimpleMDEs = ->
178+
content.find('[data-richtext=simplemde]').not('.simplemded').each (index, domEle) ->
179+
options = $(this).data('options')
180+
instance_config = options.instance_config
181+
new window.SimpleMDE($.extend(true, {
182+
element: document.getElementById(this.id),
183+
autosave: {
184+
uniqueId: this.id
185+
}
186+
}, instance_config))
187+
$(this).addClass('simplemded')
188+
189+
$editors = content.find('[data-richtext=simplemde]').not('.simplemded')
190+
if $editors.length
191+
if not window.SimpleMDE
192+
options = $editors.first().data('options')
193+
$('head').append('<link href="' + options['css_location'] + '" rel="stylesheet" media="all" type="text\/css">')
194+
$.getScript options['js_location'], (script, textStatus, jqXHR) ->
195+
goSimpleMDEs()
196+
else
197+
goSimpleMDEs()
198+
174199
# ckeditor
175200

176201
goCkeditors = ->
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
:ruby
2+
js_data = {
3+
js_location: field.js_location,
4+
css_location: field.css_location,
5+
instance_config: field.instance_config
6+
}
7+
8+
= form.text_area field.method_name, field.html_attributes.reverse_merge(data: { richtext: 'simplemde', options: js_data.to_json }).reverse_merge({ value: field.form_value })

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
require 'rails_admin/config/fields/types/time'
2626
require 'rails_admin/config/fields/types/timestamp'
2727
require 'rails_admin/config/fields/types/color'
28+
require 'rails_admin/config/fields/types/simple_mde'
2829
require 'rails_admin/config/fields/types/ck_editor'
2930
require 'rails_admin/config/fields/types/code_mirror'
3031
require 'rails_admin/config/fields/types/wysihtml5'
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
require 'rails_admin/config/fields/base'
2+
3+
module RailsAdmin
4+
module Config
5+
module Fields
6+
module Types
7+
class SimpleMDE < RailsAdmin::Config::Fields::Types::Text
8+
# Register field type for the type loader
9+
RailsAdmin::Config::Fields::Types.register(self)
10+
11+
# If you want to have a different SimpleMDE config for each instance
12+
# you can override this option with these values: https://github.com/sparksuite/simplemde-markdown-editor#configuration
13+
register_instance_option :instance_config do
14+
nil
15+
end
16+
17+
# Use this if you want to point to a cloud instance of the base SimpleMDE
18+
register_instance_option :js_location do
19+
"#{Rails.application.config.assets.prefix}/simplemde.min.js"
20+
end
21+
22+
register_instance_option :css_location do
23+
"#{Rails.application.config.assets.prefix}/simplemde.min.css"
24+
end
25+
26+
register_instance_option :partial do
27+
:form_simple_mde
28+
end
29+
end
30+
end
31+
end
32+
end
33+
end

spec/integration/config/edit/rails_admin_config_edit_spec.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -901,6 +901,18 @@ class HelpTest < Tableless
901901
end
902902
end
903903

904+
describe 'SimpleMDE Support' do
905+
it 'adds Javascript to enable SimpleMDE' do
906+
RailsAdmin.config Draft do
907+
edit do
908+
field :notes, :simple_mde
909+
end
910+
end
911+
visit new_path(model_name: 'draft')
912+
is_expected.to have_selector('textarea#draft_notes[data-richtext="simplemde"]')
913+
end
914+
end
915+
904916
describe 'CKEditor Support' do
905917
it 'adds Javascript to enable CKEditor' do
906918
RailsAdmin.config Draft do
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
require 'spec_helper'
2+
3+
describe RailsAdmin::Config::Fields::Types::SimpleMDE do
4+
describe 'asset locations' do
5+
before do
6+
@custom_prefix = '/foo'
7+
@default_prefix = Rails.application.config.assets.prefix
8+
Rails.application.config.assets.prefix = @custom_prefix
9+
RailsAdmin.config FieldTest do
10+
field :text_field, :simple_mde
11+
end
12+
end
13+
14+
after do
15+
Rails.application.config.assets.prefix = @default_prefix
16+
end
17+
18+
it 'allows custom assets prefix for js' do
19+
expect(
20+
RailsAdmin.config(FieldTest).fields.detect { |f| f.name == :text_field }.with(object: FieldTest.new).js_location[0..(@custom_prefix.length - 1)],
21+
).to eq @custom_prefix
22+
end
23+
24+
it 'allows custom assets prefix for css' do
25+
expect(
26+
RailsAdmin.config(FieldTest).fields.detect { |f| f.name == :text_field }.with(object: FieldTest.new).css_location[0..(@custom_prefix.length - 1)],
27+
).to eq @custom_prefix
28+
end
29+
end
30+
31+
it_behaves_like 'a generic field type', :text_field, :simple_mde
32+
end

0 commit comments

Comments
 (0)