administrate 0.19.0 → 1.0.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 (108) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +9 -9
  3. data/app/assets/builds/administrate/application.css +2614 -0
  4. data/app/assets/builds/administrate/application.css.map +1 -0
  5. data/app/assets/builds/administrate/application.js +31661 -0
  6. data/app/assets/builds/administrate/application.js.map +7 -0
  7. data/app/assets/builds/administrate-internal/docs.css +102 -0
  8. data/app/assets/builds/administrate-internal/docs.css.map +1 -0
  9. data/app/assets/config/administrate_manifest.js +2 -0
  10. data/app/assets/javascripts/administrate/add_jquery.js +4 -0
  11. data/app/assets/javascripts/administrate/application.js +9 -4
  12. data/app/assets/javascripts/administrate/controllers/application.js +9 -0
  13. data/app/assets/javascripts/administrate/controllers/index.js +9 -0
  14. data/app/assets/javascripts/administrate/controllers/select_controller.js +25 -0
  15. data/app/assets/javascripts/administrate/{components/table.js → controllers/table_controller.js} +9 -9
  16. data/app/assets/javascripts/administrate/controllers/tooltip_controller.js +24 -0
  17. data/app/assets/javascripts/administrate/vendor/css-anchor-positioning.js +9310 -0
  18. data/app/assets/stylesheets/administrate/application.scss +3 -3
  19. data/app/assets/stylesheets/administrate/base/_forms.scss +4 -4
  20. data/app/assets/stylesheets/administrate/base/_layout.scss +5 -0
  21. data/app/assets/stylesheets/administrate/base/_tables.scss +1 -1
  22. data/app/assets/stylesheets/administrate/base/_typography.scss +15 -1
  23. data/app/assets/stylesheets/administrate/components/_attributes.scss +1 -0
  24. data/app/assets/stylesheets/administrate/components/_buttons.scss +37 -12
  25. data/app/assets/stylesheets/administrate/components/_cells.scss +26 -19
  26. data/app/assets/stylesheets/administrate/components/_field-unit.scss +10 -3
  27. data/app/assets/stylesheets/administrate/components/_main-content.scss +1 -1
  28. data/app/assets/stylesheets/administrate/components/_navigation.scss +3 -3
  29. data/app/assets/stylesheets/administrate/components/_search.scss +55 -14
  30. data/app/assets/stylesheets/administrate/library/_variables.scss +7 -3
  31. data/app/assets/stylesheets/administrate/reset/_normalize.scss +7 -1
  32. data/app/assets/stylesheets/{docs.scss → administrate-internal/docs.scss} +25 -23
  33. data/app/controllers/administrate/application_controller.rb +28 -39
  34. data/app/controllers/concerns/administrate/punditize.rb +19 -31
  35. data/app/helpers/administrate/application_helper.rb +13 -5
  36. data/app/views/administrate/application/_collection.html.erb +30 -20
  37. data/app/views/administrate/application/_collection_header_actions.html.erb +1 -1
  38. data/app/views/administrate/application/_collection_item_actions.html.erb +4 -4
  39. data/app/views/administrate/application/_form.html.erb +20 -5
  40. data/app/views/administrate/application/_icons.html.erb +14 -6
  41. data/app/views/administrate/application/_index_header.html.erb +23 -0
  42. data/app/views/administrate/application/_javascript.html.erb +1 -1
  43. data/app/views/administrate/application/edit.html.erb +15 -3
  44. data/app/views/administrate/application/index.html.erb +20 -11
  45. data/app/views/administrate/application/new.html.erb +16 -4
  46. data/app/views/administrate/application/show.html.erb +37 -17
  47. data/app/views/fields/belongs_to/_form.html.erb +3 -2
  48. data/app/views/fields/has_many/_form.html.erb +2 -2
  49. data/app/views/fields/has_one/_form.html.erb +20 -4
  50. data/app/views/fields/has_one/_show.html.erb +18 -12
  51. data/app/views/fields/polymorphic/_form.html.erb +1 -1
  52. data/app/views/fields/rich_text/_form.html.erb +22 -0
  53. data/app/views/fields/rich_text/_index.html.erb +18 -0
  54. data/app/views/fields/rich_text/_show.html.erb +18 -0
  55. data/app/views/fields/select/_form.html.erb +2 -1
  56. data/app/views/fields/text/_form.html.erb +1 -1
  57. data/app/views/layouts/administrate/application.html.erb +1 -2
  58. data/docs/customizing_controller_actions.md +14 -0
  59. data/docs/customizing_dashboards.md +268 -12
  60. data/docs/customizing_page_views.md +48 -1
  61. data/docs/getting_started.md +1 -1
  62. data/docs/guides/scoping_has_many_relations.md +2 -2
  63. data/docs/guides/switching_templates_with_view_variants.md +45 -0
  64. data/docs/guides.md +1 -0
  65. data/docs/migrating-to-v1.md +34 -0
  66. data/lib/administrate/base_dashboard.rb +20 -10
  67. data/lib/administrate/engine.rb +7 -6
  68. data/lib/administrate/field/associative.rb +8 -23
  69. data/lib/administrate/field/base.rb +40 -5
  70. data/lib/administrate/field/belongs_to.rb +8 -8
  71. data/lib/administrate/field/date.rb +6 -2
  72. data/lib/administrate/field/date_time.rb +3 -4
  73. data/lib/administrate/field/deferred.rb +14 -18
  74. data/lib/administrate/field/has_many.rb +29 -6
  75. data/lib/administrate/field/has_one.rb +11 -15
  76. data/lib/administrate/field/number.rb +2 -8
  77. data/lib/administrate/field/password.rb +4 -0
  78. data/lib/administrate/field/polymorphic.rb +4 -4
  79. data/lib/administrate/field/rich_text.rb +21 -0
  80. data/lib/administrate/field/select.rb +4 -0
  81. data/lib/administrate/field/time.rb +5 -4
  82. data/lib/administrate/generator_helpers.rb +1 -1
  83. data/lib/administrate/namespace/resource.rb +1 -1
  84. data/lib/administrate/namespace.rb +10 -10
  85. data/lib/administrate/order.rb +40 -35
  86. data/lib/administrate/page/base.rb +2 -7
  87. data/lib/administrate/page/collection.rb +3 -2
  88. data/lib/administrate/page/form.rb +10 -2
  89. data/lib/administrate/page/show.rb +10 -2
  90. data/lib/administrate/resource_resolver.rb +1 -1
  91. data/lib/administrate/search.rb +14 -16
  92. data/lib/administrate/version.rb +1 -1
  93. data/lib/administrate/view_generator.rb +4 -3
  94. data/lib/administrate.rb +3 -36
  95. data/lib/generators/administrate/dashboard/dashboard_generator.rb +12 -9
  96. data/lib/generators/administrate/field/field_generator.rb +2 -2
  97. data/lib/generators/administrate/install/install_generator.rb +3 -2
  98. data/lib/generators/administrate/routes/routes_generator.rb +6 -5
  99. data/lib/generators/administrate/views/field_generator.rb +2 -2
  100. data/lib/generators/administrate/views/index_generator.rb +5 -0
  101. data/lib/generators/administrate/views/layout_generator.rb +1 -1
  102. metadata +54 -77
  103. data/app/assets/javascripts/administrate/components/associative.js +0 -5
  104. data/app/assets/javascripts/administrate/components/select.js +0 -3
  105. data/app/assets/stylesheets/administrate/utilities/_text-color.scss +0 -3
  106. data/lib/generators/administrate/assets/assets_generator.rb +0 -12
  107. data/lib/generators/administrate/assets/javascripts_generator.rb +0 -17
  108. data/lib/generators/administrate/assets/stylesheets_generator.rb +0 -17
@@ -23,6 +23,8 @@ as well as a link to its edit page.
23
23
  <%= content_for(:title) %>
24
24
  </h1>
25
25
 
26
+ <%= content_for(:header_middle) %>
27
+
26
28
  <div>
27
29
  <%= link_to(
28
30
  t("administrate.actions.edit_resource", name: page.page_title),
@@ -30,28 +32,46 @@ as well as a link to its edit page.
30
32
  class: "button",
31
33
  ) if accessible_action?(page.resource, :edit) %>
32
34
 
33
- <%= link_to(
35
+ <%= button_to(
34
36
  t("administrate.actions.destroy"),
35
37
  [namespace, page.resource],
36
38
  class: "button button--danger",
37
39
  method: :delete,
38
- data: { confirm: t("administrate.actions.confirm") }
40
+ data: { turbo_confirm: t("administrate.actions.confirm") }
39
41
  ) if accessible_action?(page.resource, :destroy) %>
40
42
  </div>
43
+
44
+ <%= content_for(:header_last) %>
41
45
  </header>
42
46
 
43
- <section class="main-content__body">
44
- <dl>
45
- <% page.attributes.each do |attribute| %>
46
- <dt class="attribute-label" id="<%= attribute.name %>">
47
- <%= t(
48
- "helpers.label.#{resource_name}.#{attribute.name}",
49
- default: page.resource.class.human_attribute_name(attribute.name),
50
- ) %>
51
- </dt>
52
-
53
- <dd class="attribute-data attribute-data--<%=attribute.html_class%>"
54
- ><%= render_field attribute, page: page %></dd>
55
- <% end %>
56
- </dl>
57
- </section>
47
+ <%= content_for(:before_main) %>
48
+
49
+ <% if content_for?(:main) %>
50
+ <%= content_for(:main) %>
51
+ <% else %>
52
+ <section class="main-content__body">
53
+ <dl>
54
+ <% page.attributes.each do |title, attributes| %>
55
+ <fieldset class="<%= "field-unit--nested" if title.present? %>">
56
+ <% if title.present? %>
57
+ <legend><%= t "helpers.label.#{page.resource_name}.#{title}", default: title %></legend>
58
+ <% end %>
59
+
60
+ <% attributes.each do |attribute| %>
61
+ <dt class="attribute-label" id="<%= attribute.name %>">
62
+ <%= t(
63
+ "helpers.label.#{resource_name}.#{attribute.name}",
64
+ default: page.resource.class.human_attribute_name(attribute.name),
65
+ ) %>
66
+ </dt>
67
+
68
+ <dd class="attribute-data attribute-data--<%=attribute.html_class%>"
69
+ ><%= render_field attribute, page: page %></dd>
70
+ <% end %>
71
+ </fieldset>
72
+ <% end %>
73
+ </dl>
74
+ </section>
75
+ <% end %>
76
+
77
+ <%= content_for(:after_main) %>
@@ -17,10 +17,11 @@ that displays all possible records to associate with.
17
17
  %>
18
18
 
19
19
  <div class="field-unit__label">
20
- <%= f.label field.permitted_attribute %>
20
+ <%= f.label field.attribute, for: "#{f.object_name}_#{field.permitted_attribute}" %>
21
21
  </div>
22
22
  <div class="field-unit__field">
23
23
  <%= f.select(field.permitted_attribute,
24
24
  options_for_select(field.associated_resource_options, field.selected_option),
25
- include_blank: field.include_blank_option) %>
25
+ {include_blank: field.include_blank_option},
26
+ data: {controller: field.html_controller}) %>
26
27
  </div>
@@ -16,14 +16,14 @@ and is augmented with [Selectize].
16
16
  Contains helper methods for displaying a collection select box.
17
17
 
18
18
  [1]: http://www.rubydoc.info/gems/administrate/Administrate/Field/HasMany
19
- [Selectize]: http://brianreavis.github.io/selectize.js
19
+ [Selectize]: https://github.com/selectize/selectize.js
20
20
  %>
21
21
 
22
22
  <div class="field-unit__label">
23
23
  <%= f.label field.attribute, for: "#{f.object_name}_#{field.attribute_key}" %>
24
24
  </div>
25
25
  <div class="field-unit__field">
26
- <%= f.select(field.attribute_key, nil, {}, multiple: true) do %>
26
+ <%= f.select(field.attribute_key, nil, {}, multiple: true, data: {controller: field.html_controller}) do %>
27
27
  <%= options_for_select(field.associated_resource_options, field.selected_options) %>
28
28
  <% end %>
29
29
  </div>
@@ -19,10 +19,26 @@ The form will be rendered as nested_from to parent relationship.
19
19
  <%= f.fields_for field.attribute, field.data || field.nested_form.resource.class.new do |has_one_f| %>
20
20
  <fieldset class="field-unit--nested">
21
21
  <legend><%= t "helpers.label.#{f.object_name}.#{field.name}", default: field.name.titleize %></legend>
22
- <% field.nested_form.attributes.each do |attribute| -%>
23
- <div class="field-unit field-unit--<%= attribute.html_class %>">
24
- <%= render_field attribute, f: has_one_f %>
25
- </div>
22
+ <% field.nested_form.attributes.each do |title, attributes| -%>
23
+
24
+ <fieldset class="<%= "field-unit--nested" if title.present? %>">
25
+ <% if title.present? %>
26
+ <legend><%= t "helpers.label.#{f.object_name}.#{title}", default: title %></legend>
27
+ <% end %>
28
+
29
+ <% attributes.each do |attribute| %>
30
+ <div class="field-unit field-unit--<%= attribute.html_class %>">
31
+ <%= render_field attribute, f: has_one_f %>
32
+ </div>
33
+ <% hint_key = "administrate.field_hints.#{field.name}.#{attribute.name}" %>
34
+ <% if I18n.exists?(hint_key) -%>
35
+ <div class="field-unit__hint">
36
+ <%= I18n.t(hint_key) %>
37
+ </div>
38
+ <% end -%>
39
+ <% end %>
40
+ </fieldset>
41
+
26
42
  <% end -%>
27
43
  </fieldset>
28
44
  <% end %>
@@ -24,18 +24,24 @@ All show page attributes of has_one relationship would be rendered
24
24
  [namespace, field.data],
25
25
  ) %>
26
26
  </legend>
27
- <% field.nested_show.attributes.each do |attribute| -%>
28
- <div>
29
- <dt class="attribute-label">
30
- <%= t(
31
- "helpers.label.#{field.associated_class_name.underscore}.#{attribute.name}",
32
- default: attribute.name.titleize,
33
- ) %>
34
- </dt>
35
- <dd class="attribute-data attribute-data--<%= attribute.html_class %>">
36
- <%= render_field attribute, { page: page } %>
37
- </dd>
38
- </div>
27
+ <% field.nested_show.attributes.each do |title, attributes| -%>
28
+ <fieldset class="<%= "field-unit--nested" if title.present? %>">
29
+ <% if title.present? %>
30
+ <legend><%= t "helpers.label.#{namespace}.#{title}", default: title %></legend>
31
+ <% end %>
32
+
33
+ <% attributes.each do |attribute| %>
34
+ <dt class="attribute-label">
35
+ <%= t(
36
+ "helpers.label.#{field.associated_class_name.underscore}.#{attribute.name}",
37
+ default: attribute.name.titleize,
38
+ ) %>
39
+ </dt>
40
+ <dd class="attribute-data attribute-data--<%= attribute.html_class %>">
41
+ <%= render_field attribute, { page: page } %>
42
+ </dd>
43
+ <% end %>
44
+ </fieldset>
39
45
  <% end -%>
40
46
  </fieldset>
41
47
  <% end %>
@@ -22,7 +22,7 @@ This partial renders an input element for polymorphic relationships.
22
22
 
23
23
  <div class="field-unit__field">
24
24
  <%= pf.hidden_field(:type, value: field.class.name) %>
25
- <%= pf.select(:value) do %>
25
+ <%= pf.select(:value, nil, {}, data: {controller: field.html_controller}) do %>
26
26
  <%= grouped_options_for_select(field.associated_resource_grouped_options, field.selected_global_id, prompt: true) %>
27
27
  <% end %>
28
28
  </div>
@@ -0,0 +1,22 @@
1
+ <%#
2
+ # Rich Text Form Partial
3
+
4
+ This partial renders a trix-editor element for ActionText::RichText attributes.
5
+
6
+ ## Local variables:
7
+
8
+ - `f`:
9
+ A Rails form generator, used to help create the appropriate trix-editor fields.
10
+ - `field`:
11
+ An instance of [Administrate::Field::RichText][1].
12
+ A wrapper around the tmie attributes pulled from the model.
13
+
14
+ [1]: http://www.rubydoc.info/gems/administrate/Administrate/Field/RichText
15
+ %>
16
+
17
+ <div class="field-unit__label">
18
+ <%= f.label field.attribute %>
19
+ </div>
20
+ <div class="field-unit__field">
21
+ <%= f.rich_text_area(field.attribute) %>
22
+ </div>
@@ -0,0 +1,18 @@
1
+ <%#
2
+ # RichText Index Partial
3
+
4
+ This partial renders a rich_text attribute
5
+ to be displayed on a resource's index page.
6
+
7
+ By default, the attribute is rendered as a plain text truncated string.
8
+
9
+ ## Local variables:
10
+
11
+ - `field`:
12
+ An instance of [Administrate::Field::RichText][1].
13
+ A wrapper around the RichText pulled from the database.
14
+
15
+ [1]: http://www.rubydoc.info/gems/administrate/Administrate/Field/RichText
16
+ %>
17
+
18
+ <%= field.truncate %>
@@ -0,0 +1,18 @@
1
+ <%#
2
+ # RichText Show Partial
3
+
4
+ This partial renders a rich_text attribute,
5
+ to be displayed on a resource's show page.
6
+
7
+ By default, the attribute is rendered as HTML.
8
+
9
+ ## Local variables:
10
+
11
+ - `field`:
12
+ An instance of [Administrate::Field::RichText][1].
13
+ A wrapper around the RichText object pulled from the database.
14
+
15
+ [1]: http://www.rubydoc.info/gems/administrate/Administrate/Field/RichText
16
+ %>
17
+
18
+ <%= field.data %>
@@ -26,7 +26,8 @@ to be displayed on a resource's edit form page.
26
26
  field.selectable_options,
27
27
  field.data,
28
28
  ),
29
- include_blank: field.include_blank_option
29
+ {include_blank: field.include_blank_option},
30
+ data: {controller: field.html_controller}
30
31
  )
31
32
  %>
32
33
  </div>
@@ -18,5 +18,5 @@ This partial renders a textarea element for a text attribute.
18
18
  <%= f.label field.attribute %>
19
19
  </div>
20
20
  <div class="field-unit__field">
21
- <%= f.text_area field.attribute %>
21
+ <%= f.text_area field.attribute, field.options.fetch(:input_options, {}) %>
22
22
  </div>
@@ -24,6 +24,7 @@ By default, it renders:
24
24
  <%= render "stylesheet" %>
25
25
  <%= csrf_meta_tags %>
26
26
  <%= csp_meta_tag if defined?(csp_meta_tag) %>
27
+ <%= render "javascript" %>
27
28
  </head>
28
29
  <body>
29
30
  <%= render "icons" %>
@@ -36,7 +37,5 @@ By default, it renders:
36
37
  <%= yield %>
37
38
  </main>
38
39
  </div>
39
-
40
- <%= render "javascript" %>
41
40
  </body>
42
41
  </html>
@@ -93,3 +93,17 @@ To set custom redirects after the actions `create`, `update` and `destroy` you c
93
93
  [namespace, requested_resource.some_other_resource]
94
94
  end
95
95
  ```
96
+
97
+ ## Creating Records
98
+
99
+ You can perform actions after creation by passing a `block` to `super` in the
100
+ `create` method. The block will only be called if the resource is successfully
101
+ created.
102
+
103
+ ```ruby
104
+ def create
105
+ super do |resource|
106
+ # do something with the newly created resource
107
+ end
108
+ end
109
+ ```