action_admin 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cfa12b281f6b7400703f1de253f6748bb55dd2d5
4
- data.tar.gz: c334bd62b1f4c7ff4b2176542d17f77b606a6f4c
3
+ metadata.gz: a9012703a5f2b71c90cf819ea615adc7a01b4962
4
+ data.tar.gz: 04d2c416ffd490f115d0a2355c4ca992dd4c7868
5
5
  SHA512:
6
- metadata.gz: 1cf489226899b73d86acde8e54469a7b5a980555a7b138f44162a665bec5b4a988958ad8885157b7fe91054f6f1c44fad3915718fd78607f4134638e26179700
7
- data.tar.gz: 2febc76021ba622ac7b9818694f30825999257fd9a3c649a224bad0c1105a42d2bbfafe7266d9ced7acbd13e37e6f239be0f306a7f696686261574bee2855b4c
6
+ metadata.gz: 4a2515331cca4dc5faddff423557a13ccffc09270efb4b88422c27747091d1676727cca40c89a11161a9e930885f3759ef54b64864ddc87b4a828d497c54144b
7
+ data.tar.gz: f8e510880908c0c62abd7a73e5416dc8b268d5ecda0dbc051498406f96817ef011c5fff8b4ce5f15ca3f66c55be0c53ad3098c5bc4956db9da05841410b121be
@@ -5,6 +5,7 @@ module ActionAdmin
5
5
  action_title :new, 'Register'
6
6
  action_title :edit, 'Edit Profile'
7
7
 
8
- layout -> { action_name == 'edit' ? 'admin' : 'admin/devise' }
8
+ layout 'admin', only: :edit
9
+ layout 'admin/devise', except: :edit
9
10
  end
10
11
  end
@@ -0,0 +1,23 @@
1
+ module ActionAdmin
2
+ class ShortcodesController < ActionController::Base
3
+ layout nil, except: :preview
4
+ layout ActionAdmin.config.shortcode_layout, only: :preview
5
+
6
+ def list
7
+ shortcodes = ActionAdmin.config.shortcodes
8
+ shortcodes.each do |key, value|
9
+ shortcodes[key][:icon] = "mdi mdi-#{value[:icon]}" if value[:icon].present?
10
+ end
11
+
12
+ render json: shortcodes
13
+ end
14
+
15
+ def form
16
+ @shortcode = params[:id]
17
+ end
18
+
19
+ def preview
20
+ @shortcode = params[:shortcode]
21
+ end
22
+ end
23
+ end
@@ -61,5 +61,31 @@ module ActionAdmin
61
61
  def admin_search_url
62
62
  url_for merge_params({}, [:per_page, :filter, :sort], params.permit(:per_page, filter: {}, sort: {}).to_h)
63
63
  end
64
+
65
+ def admin_shortcode_present(shortcode, presenter=nil)
66
+ class_name = shortcode.classify
67
+ presenter = presenter || "Admin::Shortcode::#{class_name}Presenter"
68
+ presenter = "#{presenter}".safe_constantize || 'ActionAdmin::ShortcodePresenter'.constantize
69
+
70
+ presenter.new(shortcode, self)
71
+ end
72
+
73
+ def admin_render_shortcode(string)
74
+ method(ActionAdmin.config.shortcode_helper).call(string)
75
+ end
76
+
77
+ def admin_shortcode_assets
78
+ assets = ActionAdmin.config.shortcode_assets.map do |asset|
79
+ type = asset.split('.').last
80
+ type == 'css' ? stylesheet_link_tag(asset) : javascript_include_tag(asset)
81
+ end
82
+
83
+ packs = ActionAdmin.config.shortcode_packs.map do |asset|
84
+ type = asset.split('.').last
85
+ type == 'css' ? stylesheet_pack_tag(asset) : javascript_pack_tag(asset)
86
+ end
87
+
88
+ assets.join.html_safe + packs.join.html_safe
89
+ end
64
90
  end
65
91
  end
@@ -130,5 +130,9 @@ module ActionAdmin
130
130
 
131
131
  app_link.nil? ? all_links : (app_link + all_links)
132
132
  end
133
+
134
+ def admin_sidebar_status
135
+ 'is-collapsed' unless cookies[:"_sidebar-collapsed"].nil?
136
+ end
133
137
  end
134
138
  end
@@ -10,19 +10,32 @@ module ActionAdmin
10
10
  def input_placeholder
11
11
  span = content_tag :span, 'No thumbnail', class: 'margin-bottom-1'
12
12
  icon = content_tag :i, nil, class: 'mdi mdi-camera-off'
13
- button = content_tag :a, 'Add Thumbnail', data: { open: input_html_id }, class: 'button success small hollow margin-0'
14
- content = content_tag :div, empty_input + icon + span + button, class: 'no-content hide', data: { empty_state: '' }
13
+ button = content_tag :a, 'Add Thumbnail', data: { open: input_html_id }, class: 'button success small hollow'
14
+ content = content_tag :div, empty_input + icon + span + button, class: 'no-content panel-section expanded border first last hide', data: { empty_state: '' }
15
15
  image = attachment(attachment_url) if attachment_url.present?
16
16
 
17
17
  content + content_tag(:div, image, data: { list_remove: '' }, class: 'attachments')
18
18
  end
19
19
 
20
+ def final_attribute_name
21
+ if object.is_a? ::ActiveRecord::Base
22
+ :"#{attribute_name}_id"
23
+ else
24
+ :"#{attribute_name}"
25
+ end
26
+ end
27
+
20
28
  def empty_input
21
- @builder.hidden_field(:"#{attribute_name}_id", value: '', id: nil)
29
+ @builder.hidden_field(final_attribute_name, value: '', id: nil)
22
30
  end
23
31
 
24
32
  def hidden_input
25
- @builder.hidden_field(:"#{attribute_name}_id", data: { value: :id })
33
+ input_options = input_html_options
34
+
35
+ input_options[:data] ||= {}
36
+ input_options[:data][:value] = :id
37
+
38
+ @builder.hidden_field(final_attribute_name, input_options)
26
39
  end
27
40
 
28
41
  def input_html_id
@@ -30,15 +43,15 @@ module ActionAdmin
30
43
  end
31
44
 
32
45
  def attachment_url
33
- object.send(attribute_name).try(:file_url, :preview)
46
+ object.try(attribute_name).try(:file_url, :preview)
34
47
  end
35
48
 
36
49
  def attachment(image_url=nil)
37
- image = content_tag :img, nil, src: image_url, class: 'width-100 margin-bottom-1', data: { src: 'file.preview.url', url: "#{template.root_url.chomp('/')}[src]" }
38
- remove = content_tag :a, 'Remove', class: 'button alert small hollow margin-0', data: { remove: '' }
39
- change = content_tag :a, 'Change', class: 'button success small hollow margin-0', data: { open: input_html_id }
40
- remove = content_tag :div, remove, class: 'cell auto text-left'
41
- change = content_tag :div, change, class: 'cell shrink'
50
+ image = content_tag :img, nil, src: image_url, class: 'width-100 margin-bottom-1', data: { src: 'file.preview.url', url: "#{template.root_url.chomp('/')}[src]" }
51
+ remove = content_tag :a, 'Remove', class: 'button alert small hollow margin-0', data: { remove: '' }
52
+ change = content_tag :a, 'Change', class: 'button success small hollow margin-0', data: { open: input_html_id }
53
+ remove = content_tag :div, remove, class: 'cell auto text-left'
54
+ change = content_tag :div, change, class: 'cell shrink'
42
55
  buttons = content_tag :div, remove + change, class: 'panel-section expanded border last grid-x'
43
56
 
44
57
  content_tag :div, hidden_input + image + buttons, class: 'attachment text-center', data: { list_item: '' }
@@ -0,0 +1,71 @@
1
+ module ActionAdmin
2
+ class AttachmentsInput < SimpleForm::Inputs::Base
3
+ def input(wrapper_options)
4
+ modal = options.fetch :modal, 'media-modal'
5
+ html = content_tag :div, input_placeholder, id: input_html_id, data: { media_attach: modal, media_multiple: true }
6
+
7
+ html + input_template
8
+ end
9
+
10
+ def input_placeholder
11
+ span = content_tag :span, 'No media attached', class: 'margin-bottom-1'
12
+ icon = content_tag :i, nil, class: 'mdi mdi-camera-off'
13
+ button = content_tag :a, 'Add media', data: { open: input_html_id }, class: 'button success small hollow margin-0'
14
+ content = content_tag :div, empty_input + icon + span, class: 'no-content hide', data: { empty_state: '' }
15
+ images = attachments(attachment_urls) if attachment_urls.present?
16
+ grid = content_tag(:div, images, data: { list_remove: '' }, class: 'attachments-grid removable')
17
+
18
+ content + grid + content_tag(:div, button, class: 'panel-section expanded border last')
19
+ end
20
+
21
+ def final_attribute_name
22
+ if object.is_a? ::ActiveRecord::Base
23
+ :"#{attribute_name}_ids"
24
+ else
25
+ :"#{attribute_name}"
26
+ end
27
+ end
28
+
29
+ def empty_input
30
+ @builder.hidden_field(final_attribute_name, value: '', id: nil, multiple: true)
31
+ end
32
+
33
+ def hidden_input
34
+ input_options = input_html_options
35
+
36
+ input_options[:data] ||= {}
37
+ input_options[:data][:value] = :id
38
+
39
+ @builder.hidden_field(final_attribute_name, input_options.merge(multiple: true))
40
+ end
41
+
42
+ def input_html_id
43
+ hidden_input[/id=\"(.*)\"/, 1].dasherize
44
+ end
45
+
46
+ def attachment_urls
47
+ Array(object.try(attribute_name)).map { |a| a.try(:file_url, :small) }
48
+ end
49
+
50
+ def attachments(urls=[])
51
+ urls.map { |u| attachment(u) }.join.html_safe
52
+ end
53
+
54
+ def attachment(image_url=nil)
55
+ image = content_tag :img, nil, src: image_url, class: 'width-100 margin-bottom-1', data: { src: 'file.small.url', url: "#{template.root_url.chomp('/')}[src]" }
56
+ filename = content_tag :span, nil, class: 'filename', data: { text: 'name' }
57
+ remove = content_tag :span, nil, class: 'remove-button mdi mdi-close', data: { remove: '' }
58
+ thumb = content_tag :div, image + filename + remove, class: 'thumbnail'
59
+
60
+ content_tag :div, hidden_input + thumb, class: 'attachment', data: { list_item: '' }
61
+ end
62
+
63
+ def input_template
64
+ content_tag :script, attachment, id: "#{input_html_id}-item-template", type: 'text/template'
65
+ end
66
+
67
+ def label(wrapper_options)
68
+ ''
69
+ end
70
+ end
71
+ end
@@ -5,10 +5,11 @@ module ActionAdmin
5
5
  input_html_options[:data].merge!({
6
6
  tiny_mce_editor: '',
7
7
  content_css: template.asset_path('admin/tinymce-editor.css'),
8
- media_handler: 'media-modal',
9
- media_src: "file.large.url",
10
- media_alt: "name",
11
- media_url: "[src]",
8
+ # media_handler: 'media-modal',
9
+ # media_src: "file.large.url",
10
+ # media_alt: "name",
11
+ # media_url: "[src]",
12
+ shortcode_handler: 'shortcode-modal',
12
13
  convert_urls: false
13
14
  })
14
15
 
@@ -0,0 +1,30 @@
1
+ module ActionAdmin
2
+ class ShortcodePresenter
3
+ include ActionAdmin::Presentable
4
+
5
+ def initialize(shortcode, context)
6
+ @shortcode = shortcode
7
+ @context = context
8
+ end
9
+
10
+ def fields
11
+ self.record_fields
12
+ end
13
+
14
+ def render_field(form, field, options={})
15
+ options = Hash(options)
16
+
17
+ options[:input_html] ||= {}
18
+ options[:input_html][:data] ||= {}
19
+
20
+ options[:input_html][:data][:attribute] = field
21
+ options[:input_html][:include_hidden] = false
22
+
23
+ form.input field, options
24
+ end
25
+
26
+ def render_fields(form)
27
+ fields.map { |f, o| render_field(form, f, o) }.join.html_safe
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,2 @@
1
+ = admin_form_for(:"#{@shortcode}", url: root_url, method: :get) do |f|
2
+ = admin_shortcode_present(@shortcode).render_fields(f)
@@ -0,0 +1,2 @@
1
+ #shortcode-preview
2
+ = admin_render_shortcode("#{@shortcode}")
@@ -9,7 +9,7 @@ ruby:
9
9
  thumbnail_width: "300"
10
10
  }
11
11
 
12
- #media-modal.reveal.full.reveal-panel.media-reveal data-media-reveal="" data-media-url=admin_media_url(per_page: 10000, format: :json)
12
+ #media-modal.reveal.full.reveal-panel.media-reveal data-media-reveal="" data-multiple-opened="true" data-media-url=admin_media_url(per_page: 10000, format: :json)
13
13
  .panel
14
14
  .panel-header.border
15
15
  = 'Add Media'
@@ -0,0 +1,33 @@
1
+ ruby:
2
+ list_url = admin.shortcode_list_url
3
+ form_url = URI.unescape admin.shortcode_form_url(id: '[name]')
4
+ preview_url = URI.unescape admin.shortcode_preview_url(id: '[name]')
5
+
6
+ #shortcode-modal.reveal.full.reveal-panel.shortcode-reveal data-shortcode-reveal="" data-multiple-opened="true" data-form-url=form_url data-preview-url=preview_url data-shortcodes-url=list_url
7
+ .panel
8
+ .panel-header.border
9
+ = 'Add Shortcode'
10
+ button.close-button aria-label="Close modal" data-close="" type="button"
11
+ span aria-hidden="true" &times;
12
+
13
+ .panel-content.border.padding-0
14
+ .shortcode-columns
15
+ .shortcode-menu data-menu=""
16
+
17
+ .shortcode-preview
18
+ .shortcode-inner
19
+ div.shortcode-content data-preview=""
20
+ .no-content data-empty=""
21
+ = admin_icon 'eye-off'
22
+ span = 'No preview available'
23
+
24
+ .shortcode-form
25
+ h4.shortcode-title = 'Customize'
26
+ div.shortcode-content data-form=""
27
+
28
+ .panel-footer
29
+ .grid-x
30
+ .cell.auto
31
+ button.button.hollow.alert.margin-0 aria-label="Close modal" data-close="" type="button" = 'Close'
32
+ .cell.shrink
33
+ button.button.margin-0 aria-label="Insert Shortcode" data-insert="" type="button" = 'Insert'
@@ -6,11 +6,12 @@ html
6
6
  = csrf_meta_tags
7
7
  = favicon_link_tag 'admin/favicon.png'
8
8
  = stylesheet_link_tag 'admin/application', media: 'all'
9
+ script = '/** ActionAdmin **/'
9
10
 
10
11
  body
11
- .off-canvas-wrapper
12
+ .off-canvas-wrapper data-resize-watcher=""
12
13
  .off-canvas-menu-wrapper.off-canvas-content data-off-canvas-content=""
13
- #sidebar.off-canvas-menu.position-left data-off-canvas-menu=""
14
+ #sidebar.off-canvas-menu.position-left data-off-canvas-menu="" class=admin_sidebar_status
14
15
  = render 'admin/common/sidebar'
15
16
 
16
17
  .off-canvas-menu-content data-off-canvas-content=""
@@ -20,10 +21,12 @@ html
20
21
  = render 'admin/common/header'
21
22
  = yield
22
23
  = render 'admin/common/footer'
23
- = render 'admin/common/media_modal'
24
- = render 'admin/common/dropzone_template'
25
24
 
26
25
  #offcanvas.off-canvas.position-right data-off-canvas=""
27
26
  = render 'admin/common/messagebar'
28
27
 
28
+ = render 'admin/common/media_modal'
29
+ = render 'admin/common/shortcode_modal'
30
+ = render 'admin/common/dropzone_template'
31
+
29
32
  = javascript_include_tag 'admin/application'
@@ -6,6 +6,7 @@ html
6
6
  = csrf_meta_tags
7
7
  = favicon_link_tag 'admin/favicon.png'
8
8
  = stylesheet_link_tag 'admin/application', media: 'all'
9
+ script = '/** ActionAdmin **/'
9
10
 
10
11
  body
11
12
  .login-box
@@ -0,0 +1,7 @@
1
+ doctype html
2
+
3
+ html
4
+ head
5
+ = admin_shortcode_assets
6
+ body
7
+ .row = yield
@@ -1,3 +1,9 @@
1
1
  ActionAdmin::Engine.routes.draw do
2
2
  root 'action_admin/welcome#index'
3
+
4
+ scope :shortcodes do
5
+ get 'list', to: 'action_admin/shortcodes#list', as: :shortcode_list
6
+ get 'form/:id', to: 'action_admin/shortcodes#form', as: :shortcode_form
7
+ get 'preview/:id', to: 'action_admin/shortcodes#preview', as: :shortcode_preview
8
+ end
3
9
  end
@@ -1,9 +1,14 @@
1
1
  module ActionAdmin
2
2
  class Config < Hashie::Dash
3
- property :app_name, default: 'Action Admin'
4
- property :app_urls, default: :web_url
5
- property :admin_locale, default: :en
6
- property :menus, default: Hashie::Mash.new
3
+ property :app_name, default: 'Action Admin'
4
+ property :app_urls, default: :web_url
5
+ property :admin_locale, default: :en
6
+ property :menus, default: Hashie::Mash.new
7
+ property :shortcodes, default: Hashie::Mash.new
8
+ property :shortcode_helper, default: :render_shortcode
9
+ property :shortcode_layout, default: 'shortcode'
10
+ property :shortcode_assets, default: ['application.css', 'application.js']
11
+ property :shortcode_packs, default: []
7
12
 
8
13
  def menu(name, &block)
9
14
  if self.menus.send(:"#{name}").nil?
@@ -17,7 +17,7 @@ module ActionAdmin
17
17
 
18
18
  initializer 'action_admin', before: :load_config_initializers do
19
19
  Rails.application.routes.append do
20
- mount ActionAdmin::Engine, at: 'admin'
20
+ mount ActionAdmin::Engine, at: 'admin', as: :admin
21
21
  end
22
22
  end
23
23
  end
@@ -1,3 +1,3 @@
1
1
  module ActionAdmin
2
- VERSION = '0.1.6'
2
+ VERSION = '0.1.7'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: action_admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonian Guveli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-22 00:00:00.000000000 Z
11
+ date: 2017-12-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -190,6 +190,7 @@ files:
190
190
  - app/controllers/action_admin/devise/registrations_controller.rb
191
191
  - app/controllers/action_admin/devise/sessions_controller.rb
192
192
  - app/controllers/action_admin/devise/unlocks_controller.rb
193
+ - app/controllers/action_admin/shortcodes_controller.rb
193
194
  - app/controllers/action_admin/welcome_controller.rb
194
195
  - app/controllers/concerns/action_admin/actionable.rb
195
196
  - app/controllers/concerns/action_admin/controller.rb
@@ -198,6 +199,7 @@ files:
198
199
  - app/helpers/action_admin/form_helper.rb
199
200
  - app/helpers/action_admin/markup_helper.rb
200
201
  - app/inputs/action_admin/attachment_input.rb
202
+ - app/inputs/action_admin/attachments_input.rb
201
203
  - app/inputs/action_admin/select_list_input.rb
202
204
  - app/inputs/action_admin/seo_analysis_input.rb
203
205
  - app/inputs/action_admin/slug_input.rb
@@ -207,6 +209,7 @@ files:
207
209
  - app/inputs/action_admin/toggle_input.rb
208
210
  - app/inputs/action_admin/upload_input.rb
209
211
  - app/presenters/action_admin/presenter.rb
212
+ - app/presenters/action_admin/shortcode_presenter.rb
210
213
  - app/presenters/concerns/action_admin/presentable.rb
211
214
  - app/views/action_admin/devise/confirmations/new.html.slim
212
215
  - app/views/action_admin/devise/passwords/edit.html.slim
@@ -216,6 +219,8 @@ files:
216
219
  - app/views/action_admin/devise/sessions/new.html.slim
217
220
  - app/views/action_admin/devise/shared/_links.html.slim
218
221
  - app/views/action_admin/devise/unlocks/new.html.slim
222
+ - app/views/action_admin/shortcodes/form.html.slim
223
+ - app/views/action_admin/shortcodes/preview.html.slim
219
224
  - app/views/action_admin/welcome/index.html.slim
220
225
  - app/views/admin/common/_alerts.html.slim
221
226
  - app/views/admin/common/_dropzone_template.html.slim
@@ -225,6 +230,7 @@ files:
225
230
  - app/views/admin/common/_media_modal.html.slim
226
231
  - app/views/admin/common/_messagebar.html.slim
227
232
  - app/views/admin/common/_noresults.html.slim
233
+ - app/views/admin/common/_shortcode_modal.html.slim
228
234
  - app/views/admin/common/_sidebar.html.slim
229
235
  - app/views/admin/common/_topbar.html.slim
230
236
  - app/views/admin/common/action.html.slim
@@ -244,6 +250,7 @@ files:
244
250
  - app/views/admin/templates/_upload.html.slim
245
251
  - app/views/layouts/admin.html.slim
246
252
  - app/views/layouts/admin/devise.html.slim
253
+ - app/views/layouts/shortcode.html.slim
247
254
  - config/initializers/admin_simple_form.rb
248
255
  - config/initializers/simple_attribute.rb
249
256
  - config/routes.rb