express_admin 1.2.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
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