semantic-administrate 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (174) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +32 -0
  3. data/app/assets/fonts/administrate/semantic-ui/icons.eot +0 -0
  4. data/app/assets/fonts/administrate/semantic-ui/icons.otf +0 -0
  5. data/app/assets/fonts/administrate/semantic-ui/icons.svg +2671 -0
  6. data/app/assets/fonts/administrate/semantic-ui/icons.ttf +0 -0
  7. data/app/assets/fonts/administrate/semantic-ui/icons.woff +0 -0
  8. data/app/assets/fonts/administrate/semantic-ui/icons.woff2 +0 -0
  9. data/app/assets/images/administrate/semantic-ui/flags.png +0 -0
  10. data/app/assets/javascripts/administrate/application.js +7 -0
  11. data/app/assets/javascripts/administrate/components/date_time_picker.js +6 -0
  12. data/app/assets/javascripts/administrate/components/has_many_form.js +3 -0
  13. data/app/assets/javascripts/administrate/components/table.js +23 -0
  14. data/app/assets/javascripts/administrate/vendor/semantic-ui.js +22943 -0
  15. data/app/assets/stylesheets/administrate/application.scss +27 -0
  16. data/app/assets/stylesheets/administrate/base/_forms.scss +106 -0
  17. data/app/assets/stylesheets/administrate/base/_layout.scss +10 -0
  18. data/app/assets/stylesheets/administrate/base/_lists.scss +19 -0
  19. data/app/assets/stylesheets/administrate/base/_typography.scss +48 -0
  20. data/app/assets/stylesheets/administrate/components/_app-container.scss +27 -0
  21. data/app/assets/stylesheets/administrate/components/_attributes.scss +34 -0
  22. data/app/assets/stylesheets/administrate/components/_buttons.scss +43 -0
  23. data/app/assets/stylesheets/administrate/components/_cells.scss +59 -0
  24. data/app/assets/stylesheets/administrate/components/_field-unit.scss +36 -0
  25. data/app/assets/stylesheets/administrate/components/_flashes.scss +28 -0
  26. data/app/assets/stylesheets/administrate/components/_form-actions.scss +3 -0
  27. data/app/assets/stylesheets/administrate/components/_main-content.scss +42 -0
  28. data/app/assets/stylesheets/administrate/components/_pagination.scss +18 -0
  29. data/app/assets/stylesheets/administrate/components/_search.scss +45 -0
  30. data/app/assets/stylesheets/administrate/components/nav-drawer.scss +156 -0
  31. data/app/assets/stylesheets/administrate/library/_clearfix.scss +7 -0
  32. data/app/assets/stylesheets/administrate/library/_data-label.scss +8 -0
  33. data/app/assets/stylesheets/administrate/library/_variables.scss +65 -0
  34. data/app/assets/stylesheets/administrate/vendor/semantic-ui.scss +37123 -0
  35. data/app/assets/stylesheets/docs.scss +93 -0
  36. data/app/controllers/administrate/application_controller.rb +162 -0
  37. data/app/helpers/administrate/application_helper.rb +51 -0
  38. data/app/views/administrate/application/_collection.html.erb +92 -0
  39. data/app/views/administrate/application/_flashes.html.erb +20 -0
  40. data/app/views/administrate/application/_form.html.erb +42 -0
  41. data/app/views/administrate/application/_icons.erb +13 -0
  42. data/app/views/administrate/application/_javascript.html.erb +21 -0
  43. data/app/views/administrate/application/_navigation.html.erb +19 -0
  44. data/app/views/administrate/application/_navigation_extra_links.html.erb +13 -0
  45. data/app/views/administrate/application/_navigation_footer.html.erb +44 -0
  46. data/app/views/administrate/application/_navigation_links.html.erb +16 -0
  47. data/app/views/administrate/application/_search.html.erb +25 -0
  48. data/app/views/administrate/application/_stylesheet.html.erb +14 -0
  49. data/app/views/administrate/application/edit.html.erb +36 -0
  50. data/app/views/administrate/application/index.html.erb +63 -0
  51. data/app/views/administrate/application/new.html.erb +32 -0
  52. data/app/views/administrate/application/show.html.erb +49 -0
  53. data/app/views/fields/belongs_to/_form.html.erb +26 -0
  54. data/app/views/fields/belongs_to/_index.html.erb +27 -0
  55. data/app/views/fields/belongs_to/_show.html.erb +27 -0
  56. data/app/views/fields/boolean/_form.html.erb +23 -0
  57. data/app/views/fields/boolean/_index.html.erb +19 -0
  58. data/app/views/fields/boolean/_show.html.erb +19 -0
  59. data/app/views/fields/date_time/_form.html.erb +24 -0
  60. data/app/views/fields/date_time/_index.html.erb +21 -0
  61. data/app/views/fields/date_time/_show.html.erb +21 -0
  62. data/app/views/fields/email/_form.html.erb +23 -0
  63. data/app/views/fields/email/_index.html.erb +18 -0
  64. data/app/views/fields/email/_show.html.erb +18 -0
  65. data/app/views/fields/has_many/_form.html.erb +29 -0
  66. data/app/views/fields/has_many/_index.html.erb +19 -0
  67. data/app/views/fields/has_many/_show.html.erb +35 -0
  68. data/app/views/fields/has_one/_form.html.erb +28 -0
  69. data/app/views/fields/has_one/_index.html.erb +23 -0
  70. data/app/views/fields/has_one/_show.html.erb +40 -0
  71. data/app/views/fields/number/_form.html.erb +23 -0
  72. data/app/views/fields/number/_index.html.erb +19 -0
  73. data/app/views/fields/number/_show.html.erb +19 -0
  74. data/app/views/fields/polymorphic/_form.html.erb +32 -0
  75. data/app/views/fields/polymorphic/_index.html.erb +24 -0
  76. data/app/views/fields/polymorphic/_show.html.erb +28 -0
  77. data/app/views/fields/select/_form.html.erb +31 -0
  78. data/app/views/fields/select/_index.html.erb +16 -0
  79. data/app/views/fields/select/_show.html.erb +16 -0
  80. data/app/views/fields/string/_form.html.erb +23 -0
  81. data/app/views/fields/string/_index.html.erb +18 -0
  82. data/app/views/fields/string/_show.html.erb +18 -0
  83. data/app/views/fields/text/_form.html.erb +22 -0
  84. data/app/views/fields/text/_index.html.erb +18 -0
  85. data/app/views/fields/text/_show.html.erb +19 -0
  86. data/app/views/layouts/administrate/application.html.erb +43 -0
  87. data/config/i18n-tasks.yml +18 -0
  88. data/config/locales/administrate.ar.yml +26 -0
  89. data/config/locales/administrate.bs.yml +25 -0
  90. data/config/locales/administrate.ca.yml +26 -0
  91. data/config/locales/administrate.da.yml +26 -0
  92. data/config/locales/administrate.de.yml +26 -0
  93. data/config/locales/administrate.en.yml +26 -0
  94. data/config/locales/administrate.es.yml +26 -0
  95. data/config/locales/administrate.fr.yml +26 -0
  96. data/config/locales/administrate.it.yml +26 -0
  97. data/config/locales/administrate.ja.yml +26 -0
  98. data/config/locales/administrate.ko.yml +26 -0
  99. data/config/locales/administrate.nl.yml +26 -0
  100. data/config/locales/administrate.pl.yml +26 -0
  101. data/config/locales/administrate.pt-BR.yml +27 -0
  102. data/config/locales/administrate.pt.yml +27 -0
  103. data/config/locales/administrate.ru.yml +26 -0
  104. data/config/locales/administrate.sv.yml +26 -0
  105. data/config/locales/administrate.uk.yml +26 -0
  106. data/config/locales/administrate.vi.yml +26 -0
  107. data/config/locales/administrate.zh-CN.yml +26 -0
  108. data/config/locales/administrate.zh-TW.yml +26 -0
  109. data/config/routes.rb +2 -0
  110. data/config/unicorn.rb +30 -0
  111. data/docs/adding_custom_field_types.md +79 -0
  112. data/docs/authentication.md +61 -0
  113. data/docs/customizing_attribute_partials.md +53 -0
  114. data/docs/customizing_controller_actions.md +42 -0
  115. data/docs/customizing_dashboards.md +202 -0
  116. data/docs/customizing_page_views.md +78 -0
  117. data/docs/getting_started.md +115 -0
  118. data/lib/administrate.rb +4 -0
  119. data/lib/administrate/base_dashboard.rb +72 -0
  120. data/lib/administrate/engine.rb +44 -0
  121. data/lib/administrate/field/associative.rb +33 -0
  122. data/lib/administrate/field/base.rb +54 -0
  123. data/lib/administrate/field/belongs_to.rb +36 -0
  124. data/lib/administrate/field/boolean.rb +15 -0
  125. data/lib/administrate/field/date_time.rb +21 -0
  126. data/lib/administrate/field/deferred.rb +35 -0
  127. data/lib/administrate/field/email.rb +11 -0
  128. data/lib/administrate/field/has_many.rb +87 -0
  129. data/lib/administrate/field/has_one.rb +27 -0
  130. data/lib/administrate/field/number.rb +35 -0
  131. data/lib/administrate/field/polymorphic.rb +51 -0
  132. data/lib/administrate/field/select.rb +21 -0
  133. data/lib/administrate/field/string.rb +21 -0
  134. data/lib/administrate/field/text.rb +21 -0
  135. data/lib/administrate/generator_helpers.rb +13 -0
  136. data/lib/administrate/namespace.rb +31 -0
  137. data/lib/administrate/namespace/resource.rb +28 -0
  138. data/lib/administrate/order.rb +45 -0
  139. data/lib/administrate/page.rb +4 -0
  140. data/lib/administrate/page/base.rb +35 -0
  141. data/lib/administrate/page/collection.rb +33 -0
  142. data/lib/administrate/page/form.rb +28 -0
  143. data/lib/administrate/page/show.rb +24 -0
  144. data/lib/administrate/resource_resolver.rb +43 -0
  145. data/lib/administrate/search.rb +47 -0
  146. data/lib/administrate/version.rb +3 -0
  147. data/lib/administrate/view_generator.rb +36 -0
  148. data/lib/generators/administrate/assets/assets_generator.rb +12 -0
  149. data/lib/generators/administrate/assets/javascripts_generator.rb +17 -0
  150. data/lib/generators/administrate/assets/stylesheets_generator.rb +17 -0
  151. data/lib/generators/administrate/dashboard/USAGE +9 -0
  152. data/lib/generators/administrate/dashboard/dashboard_generator.rb +141 -0
  153. data/lib/generators/administrate/dashboard/templates/controller.rb.erb +21 -0
  154. data/lib/generators/administrate/dashboard/templates/dashboard.rb.erb +56 -0
  155. data/lib/generators/administrate/field/field_generator.rb +31 -0
  156. data/lib/generators/administrate/field/templates/_form.html.erb +6 -0
  157. data/lib/generators/administrate/field/templates/_index.html.erb +1 -0
  158. data/lib/generators/administrate/field/templates/_show.html.erb +1 -0
  159. data/lib/generators/administrate/field/templates/field_object.rb.erb +7 -0
  160. data/lib/generators/administrate/install/install_generator.rb +49 -0
  161. data/lib/generators/administrate/install/templates/application_controller.rb.erb +21 -0
  162. data/lib/generators/administrate/routes/routes_generator.rb +91 -0
  163. data/lib/generators/administrate/routes/templates/routes.rb.erb +5 -0
  164. data/lib/generators/administrate/views/edit_generator.rb +16 -0
  165. data/lib/generators/administrate/views/field_generator.rb +50 -0
  166. data/lib/generators/administrate/views/form_generator.rb +15 -0
  167. data/lib/generators/administrate/views/index_generator.rb +16 -0
  168. data/lib/generators/administrate/views/layout_generator.rb +23 -0
  169. data/lib/generators/administrate/views/navigation_generator.rb +15 -0
  170. data/lib/generators/administrate/views/new_generator.rb +16 -0
  171. data/lib/generators/administrate/views/show_generator.rb +15 -0
  172. data/lib/generators/administrate/views/views_generator.rb +14 -0
  173. data/lib/tasks/administrate_tasks.rake +4 -0
  174. metadata +388 -0
@@ -0,0 +1,93 @@
1
+ $blue: #53adc6;
2
+ $red: #cf726e;
3
+ $green: #5bc89e;
4
+ $white: #f0f0f0;
5
+
6
+ $code-black: #202020;
7
+ $code-white: #e0e0dc;
8
+ $code-green: #b0bf82;
9
+ $code-blue: #8fbdcc;
10
+ $code-yellow: #f8d29d;
11
+ $code-red: #b95c56;
12
+
13
+ html,
14
+ body {
15
+ font-family: 'Lato', serif;
16
+ font-size: 18px;
17
+ line-height: 1.62em;
18
+ margin: 0;
19
+ }
20
+
21
+ img {
22
+ max-width: 100%;
23
+ }
24
+
25
+ h1,
26
+ h2,
27
+ h3 {
28
+ font-family: 'Fjalla One', sans-serif;
29
+ margin-top: 2em;
30
+ }
31
+
32
+ a {
33
+ color: $blue;
34
+ text-decoration: none;
35
+ }
36
+
37
+ .content {
38
+ margin-bottom: 2em;
39
+ margin-left: auto;
40
+ margin-right: auto;
41
+ margin-top: 2em;
42
+ width: 60em;
43
+
44
+ .sidebar {
45
+ float: left;
46
+ width: 20em;
47
+
48
+ &-links {
49
+ list-style: none;
50
+ padding-left: 0;
51
+ }
52
+ }
53
+
54
+ .main {
55
+ float: right;
56
+ width: 40em;
57
+ }
58
+ }
59
+
60
+ .flash-wrapper {
61
+ background-color: $red;
62
+ color: $white;
63
+ padding: 1em;
64
+
65
+ .flash {
66
+ margin-left: auto;
67
+ margin-right: auto;
68
+ width: 40em;
69
+ }
70
+ }
71
+
72
+ code {
73
+ font-family: "Source Code Pro";
74
+ font-size: 0.8rem;
75
+ padding: 0.4em 0.2em 0;
76
+
77
+ &.hljs {
78
+ background-color: $code-black;
79
+ color: $code-white;
80
+ padding-left: 1rem;
81
+
82
+ .hljs-string { color: $code-green; }
83
+ .hljs-subst { color: $code-white; }
84
+ .hljs-constant { color: $code-blue; }
85
+ .hljs-symbol { color: $code-red; }
86
+ .hljs-keyword { color: $code-yellow; }
87
+
88
+ .hljs-title,
89
+ .hljs-parent { color: $code-blue; }
90
+
91
+ .hljs-tag { color: $code-yellow; }
92
+ }
93
+ }
@@ -0,0 +1,162 @@
1
+ module Administrate
2
+ class ApplicationController < ActionController::Base
3
+ protect_from_forgery with: :exception
4
+
5
+ def index
6
+ search_term = params[:search].to_s.strip
7
+ resources = Administrate::Search.new(scoped_resource,
8
+ dashboard_class,
9
+ search_term).run
10
+ resources = resources.includes(*resource_includes) if resource_includes.any?
11
+ resources = order.apply(resources)
12
+ resources = resources.page(params[:page]).per(records_per_page)
13
+ page = Administrate::Page::Collection.new(dashboard, order: order)
14
+
15
+ render locals: {
16
+ resources: resources,
17
+ search_term: search_term,
18
+ page: page,
19
+ show_search_bar: show_search_bar?
20
+ }
21
+ end
22
+
23
+ def show
24
+ render locals: {
25
+ page: Administrate::Page::Show.new(dashboard, requested_resource),
26
+ }
27
+ end
28
+
29
+ def new
30
+ render locals: {
31
+ page: Administrate::Page::Form.new(dashboard, resource_class.new),
32
+ }
33
+ end
34
+
35
+ def edit
36
+ render locals: {
37
+ page: Administrate::Page::Form.new(dashboard, requested_resource),
38
+ }
39
+ end
40
+
41
+ def create
42
+ resource = resource_class.new(resource_params)
43
+
44
+ if resource.save
45
+ redirect_to(
46
+ [namespace, resource],
47
+ notice: translate_with_resource("create.success"),
48
+ )
49
+ else
50
+ render :new, locals: {
51
+ page: Administrate::Page::Form.new(dashboard, resource),
52
+ }
53
+ end
54
+ end
55
+
56
+ def update
57
+ if requested_resource.update(resource_params)
58
+ redirect_to(
59
+ [namespace, requested_resource],
60
+ notice: translate_with_resource("update.success"),
61
+ )
62
+ else
63
+ render :edit, locals: {
64
+ page: Administrate::Page::Form.new(dashboard, requested_resource),
65
+ }
66
+ end
67
+ end
68
+
69
+ def destroy
70
+ requested_resource.destroy
71
+ flash[:notice] = translate_with_resource("destroy.success")
72
+ redirect_to action: :index
73
+ end
74
+
75
+ private
76
+
77
+ helper_method :nav_link_state
78
+ def nav_link_state(resource)
79
+ resource_name.to_s.pluralize == resource.to_s ? :active : :inactive
80
+ end
81
+
82
+ helper_method :valid_action?
83
+ def valid_action?(name, resource = resource_class)
84
+ !!routes.detect do |controller, action|
85
+ controller == resource.to_s.underscore.pluralize && action == name.to_s
86
+ end
87
+ end
88
+
89
+ def routes
90
+ @routes ||= Namespace.new(namespace).routes
91
+ end
92
+
93
+ def records_per_page
94
+ params[:per_page] || 20
95
+ end
96
+
97
+ def order
98
+ @_order ||= Administrate::Order.new(params[:order], params[:direction])
99
+ end
100
+
101
+ def dashboard
102
+ @_dashboard ||= dashboard_class.new
103
+ end
104
+
105
+ def requested_resource
106
+ @_requested_resource ||= find_resource(params[:id])
107
+ end
108
+
109
+ def find_resource(param)
110
+ scoped_resource.find(param)
111
+ end
112
+
113
+ def scoped_resource
114
+ resource_class.default_scoped
115
+ end
116
+
117
+ def resource_includes
118
+ dashboard.association_includes
119
+ end
120
+
121
+ def resource_params
122
+ params.require(resource_class.model_name.param_key).
123
+ permit(dashboard.permitted_attributes).
124
+ transform_values { |v| read_param_value(v) }
125
+ end
126
+
127
+ def read_param_value(data)
128
+ if data.is_a?(ActionController::Parameters) && data[:type]
129
+ if data[:type] == Administrate::Field::Polymorphic.to_s
130
+ GlobalID::Locator.locate(data[:value])
131
+ else
132
+ raise "Unrecognised param data: #{data.inspect}"
133
+ end
134
+ else
135
+ data
136
+ end
137
+ end
138
+
139
+ delegate :dashboard_class, :resource_class, :resource_name, :namespace,
140
+ to: :resource_resolver
141
+ helper_method :namespace
142
+ helper_method :resource_name
143
+
144
+ def resource_resolver
145
+ @_resource_resolver ||=
146
+ Administrate::ResourceResolver.new(controller_path)
147
+ end
148
+
149
+ def translate_with_resource(key)
150
+ t(
151
+ "administrate.controller.#{key}",
152
+ resource: resource_resolver.resource_title,
153
+ )
154
+ end
155
+
156
+ def show_search_bar?
157
+ dashboard.attribute_types_for(
158
+ dashboard.collection_attributes
159
+ ).any? { |_name, attribute| attribute.searchable? }
160
+ end
161
+ end
162
+ end
@@ -0,0 +1,51 @@
1
+ require 'digest'
2
+
3
+ module Administrate
4
+ module ApplicationHelper
5
+ PLURAL_MANY_COUNT = 2.1
6
+
7
+ def gravatar_for_email(email, size = 120)
8
+ hash = Digest::MD5.hexdigest(email)
9
+
10
+ "//www.gravatar.com/avatar/#{hash}?s=#{size}"
11
+ end
12
+
13
+ def render_field(field, locals = {})
14
+ locals.merge!(field: field)
15
+ render locals: locals, partial: field.to_partial_path
16
+ end
17
+
18
+ def class_from_resource(resource_name)
19
+ resource_name.to_s.classify.constantize
20
+ end
21
+
22
+ def display_resource_name(resource_name)
23
+ class_from_resource(resource_name).
24
+ model_name.
25
+ human(
26
+ count: PLURAL_MANY_COUNT,
27
+ default: resource_name.to_s.pluralize.titleize,
28
+ )
29
+ end
30
+
31
+ def sort_order(order)
32
+ case order
33
+ when "asc" then "ascending"
34
+ when "desc" then "descending"
35
+ else "none"
36
+ end
37
+ end
38
+
39
+ def resource_index_route_key(resource_name)
40
+ ActiveModel::Naming.route_key(class_from_resource(resource_name))
41
+ end
42
+
43
+ def sanitized_order_params
44
+ params.permit(:search, :id, :order, :page, :per_page, :direction, :orders)
45
+ end
46
+
47
+ def clear_search_params
48
+ params.except(:search, :page).permit(:order, :direction, :per_page)
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,92 @@
1
+ <%#
2
+ # Collection
3
+
4
+ This partial is used on the `index` and `show` pages
5
+ to display a collection of resources in an HTML table.
6
+
7
+ ## Local variables:
8
+
9
+ - `collection_presenter`:
10
+ An instance of [Administrate::Page::Collection][1].
11
+ The table presenter uses `ResourceDashboard::COLLECTION_ATTRIBUTES` to determine
12
+ the columns displayed in the table
13
+ - `resources`:
14
+ An ActiveModel::Relation collection of resources to be displayed in the table.
15
+ By default, the number of resources is limited by pagination
16
+ or by a hard limit to prevent excessive page load times
17
+
18
+ [1]: http://www.rubydoc.info/gems/administrate/Administrate/Page/Collection
19
+ %>
20
+
21
+ <table class="ui very basic table" aria-labelledby="<%= table_title %>">
22
+ <thead>
23
+ <tr>
24
+ <% collection_presenter.attribute_types.each do |attr_name, attr_type| %>
25
+ <th class="cell-label
26
+ cell-label--<%= attr_type.html_class %>
27
+ cell-label--<%= collection_presenter.ordered_html_class(attr_name) %>"
28
+ scope="col"
29
+ role="columnheader"
30
+ aria-sort="<%= sort_order(collection_presenter.ordered_html_class(attr_name)) %>">
31
+ <%= link_to(sanitized_order_params.merge(
32
+ collection_presenter.order_params_for(attr_name)
33
+ )) do %>
34
+ <%= t(
35
+ "helpers.label.#{collection_presenter.resource_name}.#{attr_name}",
36
+ default: attr_name.to_s,
37
+ ).titleize %>
38
+
39
+ <% if collection_presenter.ordered_by?(attr_name) %>
40
+ <span class="cell-label__sort-indicator cell-label__sort-indicator--<%= collection_presenter.ordered_html_class(attr_name) %>">
41
+ <svg aria-hidden="true">
42
+ <use xlink:href="#icon-up-caret" />
43
+ </svg>
44
+ </span>
45
+ <% end %>
46
+ <% end %>
47
+ </th>
48
+ <% end %>
49
+ <% [valid_action?(:edit, collection_presenter.resource_name),
50
+ valid_action?(:destroy, collection_presenter.resource_name)].count(true).times do %>
51
+ <th scope="col"></th>
52
+ <% end %>
53
+ </tr>
54
+ </thead>
55
+
56
+ <tbody>
57
+ <% resources.each do |resource| %>
58
+ <tr class="js-table-row"
59
+ tabindex="0"
60
+ <% if valid_action? :show, collection_presenter.resource_name %>
61
+ <%= %(role=link data-url=#{polymorphic_path([namespace, resource])}) %>
62
+ <% end %>
63
+ >
64
+ <% collection_presenter.attributes_for(resource).each do |attribute| %>
65
+ <td class="cell-data cell-data--<%= attribute.html_class %>">
66
+ <a href="<%= polymorphic_path([namespace, resource]) -%>"
67
+ class="action-show"
68
+ >
69
+ <%= render_field attribute %>
70
+ </a>
71
+ </td>
72
+ <% end %>
73
+
74
+ <% if valid_action? :edit, collection_presenter.resource_name %>
75
+ <td><%= link_to(
76
+ t("administrate.actions.edit"),
77
+ [:edit, namespace, resource],
78
+ ) %></td>
79
+ <% end %>
80
+
81
+ <% if valid_action? :destroy, collection_presenter.resource_name %>
82
+ <td class="cell-data--red"><%= link_to(
83
+ t("administrate.actions.destroy"),
84
+ [namespace, resource],
85
+ method: :delete,
86
+ data: { confirm: t("administrate.actions.confirm") }
87
+ ) %></td>
88
+ <% end %>
89
+ </tr>
90
+ <% end %>
91
+ </tbody>
92
+ </table>
@@ -0,0 +1,20 @@
1
+ <%#
2
+ # Flash Partial
3
+
4
+ This partial renders flash messages on every page.
5
+
6
+ ## Relevant Helpers:
7
+
8
+ - `flash`:
9
+ Returns a hash,
10
+ where the keys are the type of flash (alert, error, notice, etc)
11
+ and the values are the message to be displayed.
12
+ %>
13
+
14
+ <% if flash.any? %>
15
+ <div class="flashes">
16
+ <% flash.each do |key, value| -%>
17
+ <div class="flash flash-<%= key %>"><%= value %></div>
18
+ <% end -%>
19
+ </div>
20
+ <% end %>
@@ -0,0 +1,42 @@
1
+ <%#
2
+ # Form Partial
3
+
4
+ This partial is rendered on a resource's `new` and `edit` pages,
5
+ and renders all form fields for a resource's editable attributes.
6
+
7
+ ## Local variables:
8
+
9
+ - `page`:
10
+ An instance of [Administrate::Page::Form][1].
11
+ Contains helper methods to display a form,
12
+ and knows which attributes should be displayed in the resource's form.
13
+
14
+ [1]: http://www.rubydoc.info/gems/administrate/Administrate/Page/Form
15
+ %>
16
+
17
+ <%= form_for([namespace, page.resource], html: { class: "form" }) do |f| %>
18
+ <% if page.resource.errors.any? %>
19
+ <div id="error_explanation">
20
+ <h2>
21
+ <%= pluralize(page.resource.errors.count, "error") %>
22
+ prohibited this <%= page.resource_name %> from being saved:
23
+ </h2>
24
+
25
+ <ul>
26
+ <% page.resource.errors.full_messages.each do |message| %>
27
+ <li class="flash-error"><%= message %></li>
28
+ <% end %>
29
+ </ul>
30
+ </div>
31
+ <% end %>
32
+
33
+ <% page.attributes.each do |attribute| -%>
34
+ <div class="field-unit field-unit--<%= attribute.html_class %>">
35
+ <%= render_field attribute, f: f %>
36
+ </div>
37
+ <% end -%>
38
+
39
+ <div class="form-actions">
40
+ <%= f.submit %>
41
+ </div>
42
+ <% end %>