action_admin 0.1.2 → 0.1.3

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: 9c130d9173df9250a76f41a1fb2687c8042ac842
4
- data.tar.gz: d26a179831e85af820d332744ad27b64c15e2380
3
+ metadata.gz: 744d35d72168f97e4b21090228b74cb79f7e63e4
4
+ data.tar.gz: 37e859e3f7beb0093b102796002490a04cbe1b59
5
5
  SHA512:
6
- metadata.gz: 9c081bec36607b46f36237b4782fcd56f871bcfbd3a7c2bc55d1695df3452260751d25512991006f73b2940214acced809d883389306f2f046626119ffc5f882
7
- data.tar.gz: e3168380227a10278a910c516a423b840bb5c16a458dd9d637df1046724367e2eeecc996978a1aaf5312604e036845d32908473be8481d6b457387e9827218d1
6
+ metadata.gz: 2873abf6a53398466252f625d5019f150b0f11fa4238f8757a5ce86f737169fed06c396b77693b9a04828f92c26afa2739343943d843539097da6072c129b0a2
7
+ data.tar.gz: 215d8e6fdf62b86e3b20247afc1f77cd7b51c2c95069179f3522e1539be645a1aacde44772f1b217b4ee100e87ecc51085f6cb668c2916b3f321fd8590c92a4e
@@ -8,7 +8,7 @@
8
8
 
9
9
  .input:last-child:not(.error) {
10
10
 
11
- input, textarea, select, .select2 {
11
+ input, textarea, select, .select2, .switch {
12
12
  margin-bottom: 0;
13
13
  }
14
14
  }
@@ -1,5 +1,5 @@
1
1
  module ActionAdmin
2
- class AttachmentInput < SimpleForm::Inputs::StringInput
2
+ class AttachmentInput < SimpleForm::Inputs::Base
3
3
  def input(wrapper_options)
4
4
  modal = options.fetch :modal, 'media-modal'
5
5
  html = content_tag :div, input_placeholder, id: input_html_id, data: { media_attach: modal }
@@ -35,9 +35,13 @@ module ActionAdmin
35
35
 
36
36
  def attachment(image_url=nil)
37
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
- button = content_tag :a, 'Remove Thumbnail', class: 'button alert small hollow margin-0', data: { remove: '' }
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'
42
+ buttons = content_tag :div, remove + change, class: 'panel-section expanded border last grid-x'
39
43
 
40
- content_tag :div, hidden_input + image + button, class: 'attachment text-center', data: { list_item: '' }
44
+ content_tag :div, hidden_input + image + buttons, class: 'attachment text-center', data: { list_item: '' }
41
45
  end
42
46
 
43
47
  def input_template
@@ -0,0 +1,109 @@
1
+ module ActionAdmin
2
+ class SeoAnalysisInput < SimpleForm::Inputs::Base
3
+ def input(wrapper_options)
4
+ seo_data_options = {
5
+ seo_analysis: '',
6
+ base_url: base_url,
7
+ text: text_html_id,
8
+ slug: id_from_html(slug_hidden_field),
9
+ title: id_from_html(title_hidden_field),
10
+ meta: id_from_html(description_hidden_field),
11
+ keywords: id_from_html(keywords_hidden_field),
12
+ score: id_from_html(score_hidden_field)
13
+ }
14
+
15
+ template.content_tag :div, class: 'seo-analysis', data: seo_data_options do
16
+ template.concat title_hidden_field
17
+ template.concat description_hidden_field
18
+ template.concat keywords_hidden_field
19
+ template.concat score_hidden_field
20
+ template.concat slug_hidden_field if options[:slug_input].present?
21
+
22
+ template.concat seo_keyword
23
+ template.concat seo_preview
24
+ template.concat seo_output
25
+ end
26
+ end
27
+
28
+ def base_url
29
+ url_value = object.try(options.fetch :slug, :slug)
30
+ method = options.fetch :url, ActionAdmin.config.app_urls
31
+
32
+ if object.new_record?
33
+ template.root_url.chomp('/')
34
+ else
35
+ template.try(method, object).to_s.sub(url_value, '').chomp('/')
36
+ end
37
+ end
38
+
39
+ def seo_keyword
40
+ attrib = options.fetch :focus_keyword, :seo_focus_keyword
41
+ content = @builder.text_field(attrib, placeholder: 'Enter focus keyword...', data: { seo_keyword: '' })
42
+
43
+ content_tag :div, content, class: 'seo-keyword'
44
+ end
45
+
46
+ def seo_preview
47
+ content_tag :div, nil, class: 'seo-preview', data: { seo_preview: '' }
48
+ end
49
+
50
+ def seo_output
51
+ content_tag :div, nil, class: 'seo-output', data: { seo_output: '' }
52
+ end
53
+
54
+ def title_hidden_field
55
+ attrib = options.fetch :title, :seo_title
56
+ @builder.hidden_field(attrib, data: { default: attribute_default(attrib) })
57
+ end
58
+
59
+ def description_hidden_field
60
+ attrib = options.fetch :description, :seo_description
61
+ @builder.hidden_field(attrib, data: { default: attribute_default(attrib) })
62
+ end
63
+
64
+ def keywords_hidden_field
65
+ attrib = options.fetch :keywords, :seo_keywords
66
+ @builder.hidden_field(attrib, data: { default: attribute_default(attrib) })
67
+ end
68
+
69
+ def slug_hidden_field
70
+ attrib = options.fetch :slug, :slug
71
+ @builder.hidden_field(attrib, data: { default: attribute_default(attrib) })
72
+ end
73
+
74
+ def score_hidden_field
75
+ attrib = options.fetch :score, :seo_score
76
+ @builder.hidden_field(attrib, data: { default: attribute_default(attrib) })
77
+ end
78
+
79
+ def label(wrapper_options)
80
+ ''
81
+ end
82
+
83
+ private
84
+
85
+ def attribute_default(attrib)
86
+ items = object.try(attribute_name).select do |k, v|
87
+ "#{k}" == "#{attrib}" || "#{k}" == "#{attrib}".sub('seo_', '')
88
+ end
89
+
90
+ items.values.first
91
+ end
92
+
93
+ def text_html_id
94
+ attrib = options.fetch :content, detect_text_attribute
95
+ id_from_html @builder.hidden_field(attrib)
96
+ end
97
+
98
+ def detect_text_attribute
99
+ items = ['content', 'description', 'body']
100
+ attrib = object.class.attribute_names.select { |n| n.in? items }
101
+
102
+ attrib.sort_by { |a| items.index(a).to_i }.first
103
+ end
104
+
105
+ def id_from_html(field)
106
+ field.to_s[/id=\"(.*)\"/, 1]
107
+ end
108
+ end
109
+ end
@@ -34,7 +34,11 @@ module ActionAdmin
34
34
  end
35
35
 
36
36
  def value_pattern
37
- prefix "#{url}".sub("#{input_value}", '[val]')
37
+ if url.present?
38
+ prefix "#{url}".sub("#{input_value}", '[val]')
39
+ else
40
+ prefix "#{template.root_url}[val]"
41
+ end
38
42
  end
39
43
 
40
44
  def preview_value
@@ -2,7 +2,16 @@ module ActionAdmin
2
2
  class TinymceInput < SimpleForm::Inputs::TextInput
3
3
  def input(wrapper_options)
4
4
  input_html_options[:data] ||= {}
5
- input_html_options[:data].merge!({ tiny_mce_editor: '', content_css: template.asset_path('admin/tinymce-editor.css') })
5
+ input_html_options[:data].merge!({
6
+ tiny_mce_editor: '',
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]",
12
+ convert_urls: false
13
+ })
14
+
6
15
  super
7
16
  end
8
17
  end
@@ -0,0 +1,36 @@
1
+ module ActionAdmin
2
+ class ToggleInput < SimpleForm::Inputs::BooleanInput
3
+ def input(wrapper_options)
4
+ @initial_label_text = raw_label_text
5
+
6
+ input_html_options[:class] ||= []
7
+ input_html_options[:class] << 'switch-input'
8
+
9
+ options[:label_html] = { class: 'switch-paddle' }
10
+ options[:label] = content_tag :span, raw_label_text, class: 'show-for-sr'
11
+
12
+ super
13
+ end
14
+
15
+ def label_input(wrapper_options)
16
+ field_html = field_input(wrapper_options)
17
+
18
+ template.content_tag :div, class: 'grid-x' do
19
+ template.concat content_tag(:div, field_name, class: 'cell auto')
20
+ template.concat content_tag(:div, field_html, class: 'cell shrink')
21
+ end
22
+ end
23
+
24
+ def field_input(wrapper_options)
25
+ content_tag :div, input(wrapper_options) + label(wrapper_options), class: 'switch tiny'
26
+ end
27
+
28
+ def field_name
29
+ content_tag :label, @initial_label_text
30
+ end
31
+
32
+ def nested_boolean_style?
33
+ false
34
+ end
35
+ end
36
+ end
@@ -16,7 +16,7 @@ module ActionAdmin
16
16
  content = content_tag :div, icon + span + file_input + button, class: 'no-content'
17
17
  image = attachment(attachment_url) if attachment_url.present?
18
18
 
19
- content_tag(:div, content, class: 'dz-message bordered') +
19
+ content_tag(:div, content, class: 'dz-message bordered hide') +
20
20
  content_tag(:div, image, id: "#{input_html_id}-preview")
21
21
  end
22
22
 
@@ -45,8 +45,8 @@ module ActionAdmin
45
45
  end
46
46
 
47
47
  def attachment(image_url=nil)
48
- image = content_tag :img, nil, src: image_url, class: 'width-100 margin-bottom-1', 'dz-thumbnail' => ''
49
- button = content_tag :a, 'Remove File', class: 'button alert small hollow margin-0', 'dz-remove' => ''
48
+ image = content_tag :img, nil, src: image_url, class: 'width-100 margin-bottom-1', data: { dz_thumbnail: '' }
49
+ button = content_tag :a, 'Remove File', class: 'button alert small hollow margin-0', data: { dz_remove: '' }
50
50
 
51
51
  content_tag :div, hidden_input + image + button, class: 'text-center'
52
52
  end
@@ -84,25 +84,29 @@ module ActionAdmin
84
84
 
85
85
  def render_panel(form, options={})
86
86
  template = "admin/panels/#{options.fetch :template, 'default'}"
87
- content = Array(options[:fields]).map do |f|
88
- opts = fields[f]
89
-
90
- opts[:label] = false if options[:labels] == false
91
- opts[:label] = true if Array(options[:labels]).include?(f)
92
-
93
- render_field(form, f, opts)
94
- end
87
+ content = Array(options[:fields]).map { |f| render_panel_field(form, f, options) }
88
+ footer = Array(Hash(options[:footer])[:fields]).map { |f| render_panel_field(form, f, options) }.join.html_safe
89
+ footer = nil if footer.blank?
95
90
 
96
91
  options = {
97
92
  layout: false,
98
93
  content: content.join.html_safe,
99
94
  title: options[:title],
100
- footer: options[:footer]
95
+ footer: footer
101
96
  }
102
97
 
103
98
  @context.render template, options
104
99
  end
105
100
 
101
+ def render_panel_field(form, field, options)
102
+ opts = fields[field]
103
+
104
+ opts[:label] = false if options[:labels] == false
105
+ opts[:label] = true if Array(options[:labels]).include?(field)
106
+
107
+ render_field(form, field, opts)
108
+ end
109
+
106
110
  def render_panels(options={})
107
111
  form = options[:form]
108
112
  context = options[:context]
@@ -1,5 +1,5 @@
1
1
  - if notice.present?
2
- .callout.primary
2
+ .callout.info
3
3
  - [notice].flatten.each do |msg|
4
4
  = msg
5
5
  br
@@ -1,3 +1,3 @@
1
1
  module ActionAdmin
2
- VERSION = '0.1.2'
2
+ VERSION = '0.1.3'
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.2
4
+ version: 0.1.3
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-14 00:00:00.000000000 Z
11
+ date: 2017-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -199,10 +199,12 @@ files:
199
199
  - app/helpers/action_admin/markup_helper.rb
200
200
  - app/inputs/action_admin/attachment_input.rb
201
201
  - app/inputs/action_admin/select_list_input.rb
202
+ - app/inputs/action_admin/seo_analysis_input.rb
202
203
  - app/inputs/action_admin/slug_input.rb
203
204
  - app/inputs/action_admin/tag_list_input.rb
204
205
  - app/inputs/action_admin/tinymce_input.rb
205
206
  - app/inputs/action_admin/title_input.rb
207
+ - app/inputs/action_admin/toggle_input.rb
206
208
  - app/inputs/action_admin/upload_input.rb
207
209
  - app/presenters/action_admin/presenter.rb
208
210
  - app/presenters/concerns/action_admin/presentable.rb