express_admin 1.2.1 → 1.3.0

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.
Files changed (159) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/express_admin.js +2 -0
  3. data/app/assets/javascripts/express_admin/admin.js +2 -0
  4. data/app/assets/stylesheets/express_admin.css +0 -5
  5. data/app/assets/stylesheets/express_admin/components/_definition.sass +8 -0
  6. data/app/assets/stylesheets/express_admin/components/_pane.sass +2 -2
  7. data/app/assets/stylesheets/express_admin/components/_sub_menu.sass +2 -2
  8. data/app/assets/stylesheets/express_admin/components/_widget_box.sass +4 -4
  9. data/app/assets/stylesheets/express_admin/globals/_foundation_overrides.sass +2 -1
  10. data/app/assets/stylesheets/express_admin/globals/_mixins.sass +0 -2
  11. data/app/assets/stylesheets/express_admin/plugins/_select2.sass +475 -68
  12. data/app/assets/stylesheets/express_admin/plugins/_tinymce.sass +2 -0
  13. data/app/assets/stylesheets/express_admin/screen.sass +6 -1
  14. data/app/assets/stylesheets/express_admin/sections/_header.sass +1 -0
  15. data/app/assets/stylesheets/express_admin/sections/_main_content.sass +6 -2
  16. data/app/assets/stylesheets/express_admin/sections/_main_region.sass +10 -7
  17. data/app/assets/stylesheets/express_admin/sections/_page_body.sass +6 -3
  18. data/app/assets/stylesheets/express_admin/sections/_page_sidebar.sass +6 -2
  19. data/app/assets/stylesheets/express_admin/sections/_sidebar_region.sass +4 -3
  20. data/app/assets/stylesheets/express_admin/shared/_buttons.sass +0 -1
  21. data/app/assets/stylesheets/express_admin/shared/_forms.sass +14 -2
  22. data/app/assets/stylesheets/express_admin/shared/_trees.sass +7 -3
  23. data/app/assets/stylesheets/ionicons/{ionicons.css.sass → ionicons.sass} +0 -0
  24. data/app/components/express_admin/addon_sidebar_component.rb +23 -34
  25. data/app/components/express_admin/definition_list.rb +38 -0
  26. data/app/components/express_admin/definition_table.rb +51 -0
  27. data/app/components/express_admin/flash_message_component.rb +5 -11
  28. data/app/components/express_admin/layout_component.rb +2 -9
  29. data/app/components/express_admin/main_region.rb +4 -4
  30. data/app/components/express_admin/mega_menu_component.rb +40 -34
  31. data/app/components/express_admin/page_header_component.rb +8 -18
  32. data/app/components/express_admin/pane.rb +13 -10
  33. data/app/components/express_admin/setting_form.rb +23 -20
  34. data/app/components/express_admin/sidebar_region.rb +6 -4
  35. data/app/components/express_admin/smart_form.rb +21 -18
  36. data/app/components/express_admin/smart_table.rb +44 -40
  37. data/app/components/express_admin/widget_box.rb +8 -8
  38. data/app/helpers/express_admin/admin_helper.rb +1 -1
  39. data/app/views/devise/sessions/new.html.et +63 -0
  40. data/app/views/layouts/express_admin/admin.html.et +8 -9
  41. data/app/views/shared/express_admin/_navigation_bar.html.et +6 -5
  42. data/config/tinymce.yml +29 -0
  43. data/lib/core_extensions/string_promptify.rb +9 -0
  44. data/lib/express_admin.rb +1 -0
  45. data/lib/express_admin/engine.rb +11 -9
  46. data/lib/express_admin/version.rb +1 -1
  47. data/lib/generators/express_admin/install/install_generator.rb +7 -0
  48. data/lib/generators/express_admin/install/templates/views/devise/sessions/new.html.et +1 -0
  49. data/test/dummy/app/views/demo/sign_in.html.et +6 -6
  50. data/test/dummy/db/test.sqlite3 +0 -0
  51. data/test/dummy/log/test.log +11361 -0
  52. data/test/dummy/test/components/smart_form_test.rb +57 -34
  53. data/test/dummy/test/components/smart_table_test.rb +35 -35
  54. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1EoyfDwFVtgMAOjo7HPkor8TQbVaioOFx9hildx_DTQ.cache +0 -0
  55. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/4OPIkynisipUm8vKo57HUhBMWFSHBno_IH6OdpK29IA.cache +1 -0
  56. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/4hK1AdPGHbXGkebvk-nSvhxtCdOSlMYNWvA43CvQKhI.cache +0 -0
  57. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/6c0H20s6oHf45XogeDELaojxa0PX1NmirTTWV1ClcRw.cache +0 -0
  58. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/9QvwPXfTSVmgQX6tdK9GuCn0--MZ8Z8eJJbHpUEq1p8.cache +1 -0
  59. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/BoKdGhgi5NHfGTc42p9nltpEIYj_BBUxVdv7YhpBmmA.cache +0 -0
  60. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/GJGMlSyTg1AvPCV_6PaLOTVEKbHeVKY1jhCoaKuRlxM.cache +1 -0
  61. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/H0aD5KRj-4fhORkqWcWZfKPOQfu_ggvt4OmYOl4S5mw.cache +0 -0
  62. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/IBLgVNsKBbJxN8NQnh6zTc3bC_OG-8BhtA3xCNDV6ks.cache +1 -0
  63. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Po8q4NrWy9Kymnz_HbOk-WbdGY_KuuXc6urGogTHe7U.cache +0 -0
  64. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/V1aP9G-CVtOLR5PTnHleid8WC9TSfFAT1DzAygp_5CQ.cache +1 -0
  65. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/WhePtBvZPmF1Jhdcc4glsjhxBJQo9Qw0CDgy_F8lClY.cache +0 -0
  66. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/dVokuKbK8HbOtvPIksKGBAYE8x44l372dQ0gEISqbdo.cache +0 -0
  67. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/oN1zSGeSEz4KhkAuUF_yFDsCVPkulfFjomEAjFzGdPc.cache +0 -0
  68. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/qIeSoker4TjM7JYRQTOjgRd4nN0WeHnNY1GMK7Zpe8M.cache +0 -0
  69. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/tTFLM1bjKSeg4nyH7GWbTY6JVvuYhNKFFvsOMS9h8O0.cache +0 -0
  70. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/tzX-HHF4F70o-aSB9Z_duoPxFGDv3auYnrpko9SYafU.cache +1 -0
  71. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/vMbWbI1SO5bEaiu2pRvV8NDmms_j5flYoRvCSJavhdU.cache +0 -0
  72. data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ypZCDLo54Pz2ZoUxrxSEUjT5FYMAq8Ozp8OTOYDRdAE.cache +0 -0
  73. data/test/fixtures/categories.yml +8 -0
  74. data/test/test_helper.rb +34 -0
  75. data/vendor/gems/express_templates/CHANGELOG.md +12 -0
  76. data/vendor/gems/express_templates/Gemfile.lock +4 -1
  77. data/vendor/gems/express_templates/README.md +22 -41
  78. data/vendor/gems/express_templates/express_templates.gemspec +1 -0
  79. data/vendor/gems/express_templates/lib/arbre/patches.rb +50 -0
  80. data/vendor/gems/express_templates/lib/core_extensions/proc.rb +1 -0
  81. data/vendor/gems/express_templates/lib/express_templates.rb +2 -3
  82. data/vendor/gems/express_templates/lib/express_templates/compiler.rb +2 -7
  83. data/vendor/gems/express_templates/lib/express_templates/components.rb +1 -9
  84. data/vendor/gems/express_templates/lib/express_templates/components/base.rb +33 -37
  85. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/resourceful.rb +30 -18
  86. data/vendor/gems/express_templates/lib/express_templates/components/configurable.rb +41 -0
  87. data/vendor/gems/express_templates/lib/express_templates/components/form_rails_support.rb +5 -6
  88. data/vendor/gems/express_templates/lib/express_templates/components/forms.rb +0 -1
  89. data/vendor/gems/express_templates/lib/express_templates/components/forms/basic_fields.rb +3 -6
  90. data/vendor/gems/express_templates/lib/express_templates/components/forms/checkbox.rb +1 -1
  91. data/vendor/gems/express_templates/lib/express_templates/components/forms/express_form.rb +15 -25
  92. data/vendor/gems/express_templates/lib/express_templates/components/forms/form_component.rb +20 -11
  93. data/vendor/gems/express_templates/lib/express_templates/components/forms/option_support.rb +2 -2
  94. data/vendor/gems/express_templates/lib/express_templates/components/forms/radio.rb +7 -8
  95. data/vendor/gems/express_templates/lib/express_templates/components/forms/select.rb +61 -37
  96. data/vendor/gems/express_templates/lib/express_templates/components/forms/select_collection.rb +2 -8
  97. data/vendor/gems/express_templates/lib/express_templates/components/forms/submit.rb +7 -6
  98. data/vendor/gems/express_templates/lib/express_templates/components/tree_for.rb +26 -42
  99. data/vendor/gems/express_templates/lib/express_templates/version.rb +1 -1
  100. data/vendor/gems/express_templates/test/components/base_test.rb +17 -15
  101. data/vendor/gems/express_templates/test/components/capabilities/resourceful_test.rb +3 -3
  102. data/vendor/gems/express_templates/test/components/configurable_test.rb +27 -21
  103. data/vendor/gems/express_templates/test/components/forms/basic_fields_test.rb +57 -17
  104. data/vendor/gems/express_templates/test/components/forms/checkbox_test.rb +16 -22
  105. data/vendor/gems/express_templates/test/components/forms/express_form_test.rb +23 -76
  106. data/vendor/gems/express_templates/test/components/forms/radio_test.rb +31 -27
  107. data/vendor/gems/express_templates/test/components/forms/select_test.rb +46 -71
  108. data/vendor/gems/express_templates/test/components/forms/submit_test.rb +10 -5
  109. data/vendor/gems/express_templates/test/components/tree_for_test.rb +24 -52
  110. data/vendor/gems/express_templates/test/dummy/app/views/hello/show.html.et +4 -3
  111. data/vendor/gems/express_templates/test/dummy/app/views/layouts/application.html.et +1 -1
  112. data/vendor/gems/express_templates/test/dummy/log/test.log +4296 -0
  113. data/vendor/gems/express_templates/test/express_templates_test.rb +5 -1
  114. data/vendor/gems/express_templates/test/handler_test.rb +19 -17
  115. data/vendor/gems/express_templates/test/performance_test.rb +11 -7
  116. data/vendor/gems/express_templates/test/test_helper.rb +162 -1
  117. metadata +58 -47
  118. data/app/assets/stylesheets/express_admin/components/_megadropdown.sass +0 -66
  119. data/vendor/gems/express_templates/diagrams/diagram.graffle +0 -2404
  120. data/vendor/gems/express_templates/diagrams/diagram_express_templates.png +0 -0
  121. data/vendor/gems/express_templates/diagrams/diagram_haml_erb.png +0 -0
  122. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/adoptable.rb +0 -20
  123. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/building.rb +0 -14
  124. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/conditionality.rb +0 -54
  125. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/configurable.rb +0 -90
  126. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/iterating.rb +0 -75
  127. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/parenting.rb +0 -72
  128. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/rendering.rb +0 -30
  129. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/templating.rb +0 -198
  130. data/vendor/gems/express_templates/lib/express_templates/components/capabilities/wrapping.rb +0 -84
  131. data/vendor/gems/express_templates/lib/express_templates/components/column.rb +0 -13
  132. data/vendor/gems/express_templates/lib/express_templates/components/container.rb +0 -7
  133. data/vendor/gems/express_templates/lib/express_templates/components/content_for.rb +0 -42
  134. data/vendor/gems/express_templates/lib/express_templates/components/for_each.rb +0 -30
  135. data/vendor/gems/express_templates/lib/express_templates/components/forms/form_support.rb +0 -13
  136. data/vendor/gems/express_templates/lib/express_templates/components/null_wrap.rb +0 -41
  137. data/vendor/gems/express_templates/lib/express_templates/components/row.rb +0 -28
  138. data/vendor/gems/express_templates/lib/express_templates/components/table_for.rb +0 -163
  139. data/vendor/gems/express_templates/lib/express_templates/components/unless_block.rb +0 -40
  140. data/vendor/gems/express_templates/lib/express_templates/expander.rb +0 -140
  141. data/vendor/gems/express_templates/lib/express_templates/macro.rb +0 -45
  142. data/vendor/gems/express_templates/lib/express_templates/markup.rb +0 -9
  143. data/vendor/gems/express_templates/lib/express_templates/markup/html_tag.rb +0 -62
  144. data/vendor/gems/express_templates/lib/express_templates/markup/tag.rb +0 -150
  145. data/vendor/gems/express_templates/lib/express_templates/markup/wrapper.rb +0 -94
  146. data/vendor/gems/express_templates/lib/express_templates/markup/yielder.rb +0 -21
  147. data/vendor/gems/express_templates/test/components/column_test.rb +0 -11
  148. data/vendor/gems/express_templates/test/components/conditionality_test.rb +0 -37
  149. data/vendor/gems/express_templates/test/components/container_test.rb +0 -66
  150. data/vendor/gems/express_templates/test/components/content_for_test.rb +0 -60
  151. data/vendor/gems/express_templates/test/components/iterating_test.rb +0 -127
  152. data/vendor/gems/express_templates/test/components/null_wrap_test.rb +0 -28
  153. data/vendor/gems/express_templates/test/components/row_test.rb +0 -16
  154. data/vendor/gems/express_templates/test/components/table_for_test.rb +0 -211
  155. data/vendor/gems/express_templates/test/expander_stack_test.rb +0 -41
  156. data/vendor/gems/express_templates/test/expander_test.rb +0 -99
  157. data/vendor/gems/express_templates/test/markup/tag_test.rb +0 -149
  158. data/vendor/gems/express_templates/test/markup/wrapper_test.rb +0 -42
  159. data/vendor/gems/express_templates/test/markup/yielder_test.rb +0 -9
@@ -3,29 +3,19 @@ module ExpressAdmin
3
3
  ETC = ExpressTemplates::Components
4
4
 
5
5
  class PageHeader < ExpressTemplates::Components::Base
6
- include ETC::Capabilities::Conditionality
7
-
8
6
  emits -> {
9
- h1 {
10
- content_for(:page_header)
11
- }
12
- }
13
-
14
- only_if -> { content_for?(:page_header) }
15
-
7
+ h1 {
8
+ content_for(:page_header) if content_for?(:page_header)
9
+ }
10
+ }
16
11
  end
17
12
 
18
13
  class PageHeaderLead < ExpressTemplates::Components::Base
19
- include ETC::Capabilities::Conditionality
20
-
21
14
  emits -> {
22
- p.lead {
23
- content_for(:page_header_lead)
24
- }
25
- }
26
-
27
- only_if -> { content_for?(:page_header_lead) }
28
-
15
+ p(class: 'lead') {
16
+ content_for(:page_header_lead) if content_for?(:page_header_lead)
17
+ }
18
+ }
29
19
  end
30
20
 
31
21
  emits -> {
@@ -3,17 +3,19 @@ require File.join(File.dirname(__FILE__), 'layout_component')
3
3
  module ExpressAdmin
4
4
  class Pane < LayoutComponent
5
5
 
6
- emits -> {
7
- div(dom_id, class: classes) {
6
+ emits -> (block) {
7
+ div(id: dom_id, class: pane_classes) {
8
8
  heading if title || status
9
- _yield
9
+ block.call(self) if block
10
10
  }
11
11
  }
12
12
 
13
13
  def heading
14
- h2.title {
15
- null_wrap { title }
16
- span.status(status) if status
14
+ h4(class: 'title') {
15
+ current_arbre_element.add_child title
16
+ if status
17
+ span(class: 'status') { status }
18
+ end
17
19
  }
18
20
  end
19
21
 
@@ -22,15 +24,16 @@ module ExpressAdmin
22
24
  end
23
25
 
24
26
  def title
25
- @config[:title] || ''
27
+ config[:title] || ''
26
28
  end
27
29
 
28
30
  def status
29
- @config[:status] || nil
31
+ config[:status] || nil
30
32
  end
31
33
 
32
- def classes
33
- super << " #{@config[:id]}"
34
+ def pane_classes
35
+ add_class config[:id].to_s
36
+ class_names
34
37
  end
35
38
 
36
39
  end
@@ -1,6 +1,5 @@
1
1
  module ExpressAdmin
2
- class SettingForm < ExpressTemplates::Components::Container
3
- include ExpressTemplates::Components::Capabilities::Configurable
2
+ class SettingForm < ExpressTemplates::Components::Configurable
4
3
 
5
4
  # .widget-box
6
5
  # %h2.widget-header Blog
@@ -13,32 +12,36 @@ module ExpressAdmin
13
12
  # = submit_tag 'Save', class: 'button tiny right radius ajax-submit'
14
13
 
15
14
 
16
- helper(:save_button) { submit_tag 'Save', class: 'button tiny right radius ajax-submit' }
15
+ def save_button
16
+ submit_tag 'Save', class: 'button tiny right radius ajax-submit'
17
+ end
17
18
 
18
- helper(:settings_path) { self.send("admin_#{current_module_path_name.gsub(/express_/, '')}_settings_path") }
19
+ def settings_path
20
+ helpers.instance_eval("admin_#{current_module_path_name.gsub(/express_/, '')}_settings_path")
21
+ end
19
22
 
20
- helper(:settings) { |setting_type|
23
+ def settings(setting_type)
21
24
  current_module.settings.send("#{setting_type}_setting").map do |setting|
22
25
  edit_setting(setting)
23
26
  end.join()
24
- }
25
-
26
- emits -> {
27
- widget_box(my[:id]) {
28
- setting_selector = my[:id].to_s.gsub('_', '-')
29
- form(href: ExpressAdmin::SettingForm.settings_path, id: "#{setting_selector}-setting-form", onSubmit: 'return false;', method: 'POST') {
30
- form_rails_support(:patch)
31
- hidden_field_tag :form_id, "#{setting_selector}-setting-form"
32
- div._form_group {
33
- _yield
34
- }
35
- settings(my[:id])
36
- div._form_group._widget_buttons {
37
- save_button
38
- }
27
+ end
28
+
29
+ emits -> (block) {
30
+ widget_box(config[:id]) {
31
+ setting_selector = config[:id].to_s.gsub('_', '-')
32
+ form(href: ExpressAdmin::SettingForm.settings_path, id: "#{setting_selector}-setting-form", onSubmit: 'return false;', method: 'POST') {
33
+ form_rails_support(:patch)
34
+ hidden_field_tag :form_id, "#{setting_selector}-setting-form"
35
+ div(class: 'form-group') {
36
+ block.call(self) if block
37
+ }
38
+ settings(config[:id])
39
+ div(class: "form-group widget-buttons") {
40
+ save_button
39
41
  }
40
42
  }
41
43
  }
44
+ }
42
45
 
43
46
 
44
47
  end
@@ -1,8 +1,10 @@
1
1
  module ExpressAdmin
2
- class SidebarRegion < ExpressTemplates::Components::Container
3
- emits -> {
4
- div._sidebar_region {
5
- _yield
2
+ class SidebarRegion < LayoutComponent
3
+ emits -> (block) {
4
+ add_class('sidebar-region')
5
+ add_class(config.try(:[], :class))
6
+ div(id: dom_id, class: class_names) {
7
+ block.call(self) if block
6
8
  }
7
9
  }
8
10
  end
@@ -1,10 +1,8 @@
1
1
  require 'rails/generators/generated_attribute'
2
2
 
3
3
  module ExpressAdmin
4
- class SmartForm < ExpressTemplates::Components::Base
5
- include ExpressTemplates::Components::Capabilities::Configurable
4
+ class SmartForm < ExpressTemplates::Components::Configurable
6
5
  include ExpressTemplates::Components::Capabilities::Resourceful
7
- include ExpressTemplates::Components::Forms::FormSupport
8
6
 
9
7
  emits -> {
10
8
  express_form(form_args) {
@@ -13,12 +11,12 @@ module ExpressAdmin
13
11
  form_field_for(attrib)
14
12
  end
15
13
  filter_by_name(has_many_through_associations).each do |assoc|
16
- select_collection(assoc.name)
14
+ select_collection(assoc.name, nil, nil, class: 'select2')
17
15
  end
18
16
  filter_by_name(timestamp_attributes).each do |timestamp|
19
17
  div {
20
18
  label {
21
- "#{timestamp.name.titleize}: {{@#{resource_name}.try(:#{timestamp.name})}}"
19
+ "#{timestamp.name.titleize}: #{resource.try(timestamp.name.to_sym)}"
22
20
  }
23
21
  }
24
22
  end
@@ -34,13 +32,13 @@ module ExpressAdmin
34
32
  'check_box' => 'checkbox'}
35
33
  field_type = attrib.field_type.to_s.sub(/_field$/,'')
36
34
  if relation = attrib.name.match(/(\w+)_id$/).try(:[], 1)
37
- if opts = @config["#{relation}_collection".to_sym]
38
- select(attrib.name, opts)
35
+ select(attrib.name, config["#{relation}_collection".to_sym], select2: true)
36
+ else
37
+ if field_type == 'text_area'
38
+ textarea attrib.name.to_sym, rows: 10
39
39
  else
40
- select(attrib.name)
40
+ self.send((field_type_substitutions[field_type] || field_type), attrib.name.to_sym)
41
41
  end
42
- else
43
- self.send((field_type_substitutions[field_type] || field_type), attrib.name.to_sym)
44
42
  end
45
43
  end
46
44
 
@@ -50,11 +48,16 @@ module ExpressAdmin
50
48
  { id: resource_name,
51
49
  action: form_action,
52
50
  resource_name: resource_name,
53
- resource_class: @config[:resource_class],
51
+ resource_class: config[:resource_class],
54
52
  namespace: namespace}
55
53
  end
56
54
 
57
- def attributes
55
+ # from express_form - perhaps move back to shared module
56
+ def form_action
57
+ config[:action] || (helpers.resource.try(:persisted?) ? resource_path(ivar: true) : collection_path)
58
+ end
59
+
60
+ def resource_attributes
58
61
  super.map do |attrib|
59
62
  field_definition = [attrib.name, attrib.type] # index not important here for now
60
63
  Rails::Generators::GeneratedAttribute.parse(field_definition.join(":"))
@@ -66,23 +69,23 @@ module ExpressAdmin
66
69
  end
67
70
 
68
71
  def virtual_attributes
69
- (@config[:virtual]||[]).map do |attrib_name|
72
+ (config[:virtual]||[]).map do |attrib_name|
70
73
  Rails::Generators::GeneratedAttribute.parse("#{attrib_name}:string")
71
74
  end
72
75
  end
73
76
 
74
77
  def excluded_attributes
75
78
  excl = [:id]
76
- excl += @config[:exclude] if @config[:exclude]
79
+ excl += config[:exclude] if config[:exclude]
77
80
  excl
78
81
  end
79
82
 
80
83
  def timestamp_attributes
81
- attributes.select {|attrib| TIMESTAMPS.include?(attrib.name) }
84
+ resource_attributes.select {|attrib| TIMESTAMPS.include?(attrib.name) }
82
85
  end
83
86
 
84
87
  def non_timestamp_attributes
85
- attributes.reject {|attrib| TIMESTAMPS.include?(attrib.name) }
88
+ resource_attributes.reject {|attrib| TIMESTAMPS.include?(attrib.name) }
86
89
  end
87
90
 
88
91
  def has_many_through_associations
@@ -92,9 +95,9 @@ module ExpressAdmin
92
95
  end
93
96
 
94
97
  def filter_by_name(attribs)
95
- if @config[:only]
98
+ if config[:only]
96
99
  # if using :only, we respect the order
97
- @config[:only].map do |only|
100
+ config[:only].map do |only|
98
101
  attribs.detect {|attrib| only.to_s.eql?(attrib.name)} || nil
99
102
  end.compact
100
103
  else
@@ -1,6 +1,5 @@
1
1
  module ExpressAdmin
2
- class SmartTable < ExpressTemplates::Components::Base
3
- include ExpressTemplates::Components::Capabilities::Configurable
2
+ class SmartTable < ExpressTemplates::Components::Configurable
4
3
  include ExpressTemplates::Components::Capabilities::Resourceful
5
4
 
6
5
  MAX_COLS_TO_SHOW_IDX = 5
@@ -8,11 +7,11 @@ module ExpressAdmin
8
7
  attr :columns
9
8
 
10
9
  emits -> {
11
- table(my[:id]).table.striped {
10
+ table(id: config[:id], class: 'table striped') {
12
11
  thead {
13
12
  tr {
14
13
  display_columns.each do |column|
15
- th.send(column.name) {
14
+ th(class: column.name) {
16
15
  column.title
17
16
  }
18
17
  end
@@ -21,21 +20,21 @@ module ExpressAdmin
21
20
  }
22
21
  }
23
22
  tbody {
24
- for_each(collection, as: collection_member_name) {
25
- tr(row_args) {
23
+ helpers.collection.each do |item|
24
+ tr(id: row_id(item), class: row_class(item)) {
26
25
  display_columns.each do |column|
27
- td.send(column.name) {
28
- cell_value(column.accessor)
26
+ td(class: column.name) {
27
+ cell_value(item, column.accessor)
29
28
  }
30
29
  end
31
- actions_column if should_show_actions?
30
+ actions_column(item) if should_show_actions?
32
31
  hidden_column_cell if columns_hidden?
33
32
  }
34
- }
33
+ end ; nil
35
34
  }
36
35
  }
37
36
 
38
- scroll_table if !!@config[:scroll_table]
37
+ scroll_table if !!config[:scroll_table]
39
38
  }
40
39
 
41
40
  def scroll_table
@@ -45,59 +44,64 @@ module ExpressAdmin
45
44
  end
46
45
 
47
46
  def actions_header
48
- th.actions { 'Actions' }
47
+ th(class: 'actions') { 'Actions' }
49
48
  end
50
49
 
51
50
  def should_show_actions?
52
- @config[:actions].nil? || !!@config[:actions]
51
+ config[:actions].nil? || !!config[:actions]
52
+ end
53
+
54
+ def resource_path(item)
55
+ helpers.send(resource_path_helper, item.to_param)
53
56
  end
54
57
 
55
- def actions_column
58
+ def actions_column(item)
56
59
  td {
57
- link_to 'Delete', "{{#{resource_path}}}", method: :delete, data: {confirm: 'Are you sure?'}, class: 'button small secondary'
60
+ link_to 'Delete', resource_path(item), method: :delete, data: {confirm: 'Are you sure?'}, class: 'button small secondary'
58
61
  }
59
62
  end
60
63
 
61
- def row_class
62
- @config[:row_class].try(:respond_to?, :call) ?
63
- "{{#{@config[:row_class].source}.call(#{collection_member_name})}}" :
64
- "{{#{collection_member_name}.eql?(@#{resource_name}) ? 'current' : ''}}"
64
+ def row_class(item)
65
+ if config[:row_class].try(:respond_to?, :call)
66
+ config[:row_class].call(item)
67
+ else
68
+ item.eql?(helpers.resource) ? 'current' : ''
69
+ end
65
70
  end
66
71
 
67
72
  def is_permanent?
68
- @config[:permanent].nil? || (@config[:permanent].present? && @config[:permanent])
73
+ config[:permanent].nil? || (config[:permanent].present? && config[:permanent])
69
74
  end
70
75
 
71
- def row_id
72
- "#{collection_member_name}:{{#{collection_member_name}.id}}"
76
+ def row_id(item)
77
+ "#{collection_member_name}:#{item.to_param}"
73
78
  end
74
79
 
75
- def row_args
76
- {id: row_id, class: row_class}
77
- end
78
-
79
- def cell_value(accessor)
80
+ def cell_value(item, accessor)
80
81
  if accessor.respond_to?(:call)
81
- value = "(begin #{accessor.source}.call(#{collection_member_name}).to_s rescue 'Error: '+$!.to_s ; end)"
82
+ value = begin
83
+ helpers.instance_eval "(#{accessor.source}).call(item).to_s"
84
+ rescue
85
+ 'Error: '+$!.to_s
86
+ end
82
87
  elsif attrib = accessor.to_s.match(/(\w+)_link$/).try(:[], 1)
83
- value = "(link_to #{collection_member_name}.#{attrib}, #{collection_member_name}_path(#{collection_member_name}.id))"
88
+ # TODO: only works with non-namespaced routes
89
+ value = helpers.link_to item.send(attrib), helpers.resource_path(item)
84
90
  elsif attrib = accessor.to_s.match(/(\w+)_in_words/).try(:[], 1)
85
- value = "(#{collection_member_name}.#{attrib} ? time_ago_in_words(#{collection_member_name}.#{attrib})+' ago' : 'never')"
91
+ value = item.send(attrib) ? (helpers.time_ago_in_words(item.send(attrib))+' ago') : 'never'
86
92
  else
87
93
  if relation_name = accessor.to_s.match(/(.*)_id$/).try(:[], 1)
88
94
  reflection = resource_class.reflect_on_association(relation_name.to_sym)
89
95
  end
90
96
 
91
97
  value = if reflection
92
- relation = "#{collection_member_name}.#{relation_name}"
93
- "#{relation}.try(:name) || #{relation}.to_s"
98
+ relation = item.send(relation_name)
99
+ relation.try(:name) || relation.to_s
94
100
  else
95
- "#{collection_member_name}.#{accessor}"
101
+ item.send(accessor)
96
102
  end
97
103
  end
98
- span {
99
- "{{#{value}}}"
100
- }
104
+ current_arbre_element.add_child value
101
105
  end
102
106
 
103
107
  def display_columns
@@ -126,17 +130,17 @@ module ExpressAdmin
126
130
  end
127
131
 
128
132
  def specified_columns
129
- @config[:columns]
133
+ config[:columns]
130
134
  end
131
135
 
132
136
  def hidden_columns_header_indicator
133
- th._more_columns_indicator {
137
+ th(class: 'more-columns-indicator') {
134
138
  "..."
135
139
  }
136
140
  end
137
141
 
138
142
  def hidden_column_cell
139
- td._more_columns_indicator
143
+ td(class: 'more-columns-indicator')
140
144
  end
141
145
 
142
146
  private
@@ -149,7 +153,7 @@ module ExpressAdmin
149
153
  specified_columns.map { |title, accessor| Column.new(accessor, title) }
150
154
 
151
155
  else
152
- attributes.map { |column| Column.new(column.name.to_sym) }
156
+ resource_attributes.map { |column| Column.new(column.name.to_sym) }
153
157
  end
154
158
  end
155
159
 
@@ -1,10 +1,10 @@
1
1
  module ExpressAdmin
2
- class WidgetBox < ExpressTemplates::Components::Column
3
- emits -> {
4
- div._widget_box(id: "#{my[:id].to_s.dasherize}-box") {
5
- header.title(box_title)
6
- div._widget_body {
7
- _yield
2
+ class WidgetBox < ExpressTemplates::Components::Configurable
3
+ emits -> (block) {
4
+ div(class: 'widget-box', id: "#{config[:id].to_s.dasherize}-box") {
5
+ header(class: 'title') { box_title }
6
+ div(class: 'widget-body') {
7
+ block.call(self) if block
8
8
  }
9
9
  }
10
10
  }
@@ -12,11 +12,11 @@ module ExpressAdmin
12
12
  protected
13
13
 
14
14
  def resource_name
15
- my[:id].to_s.titleize
15
+ config[:id].to_s.titleize
16
16
  end
17
17
 
18
18
  def box_title
19
- "{{resource.persisted? ? 'Edit #{resource_name}' : 'New #{resource_name}'}}"
19
+ config[:title] || (helpers.resource.persisted? ? "Edit #{resource_name}" : "New #{resource_name}")
20
20
  end
21
21
  end
22
22
  end