semantic-administrate 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Rakefile +32 -0
- data/app/assets/fonts/administrate/semantic-ui/icons.eot +0 -0
- data/app/assets/fonts/administrate/semantic-ui/icons.otf +0 -0
- data/app/assets/fonts/administrate/semantic-ui/icons.svg +2671 -0
- data/app/assets/fonts/administrate/semantic-ui/icons.ttf +0 -0
- data/app/assets/fonts/administrate/semantic-ui/icons.woff +0 -0
- data/app/assets/fonts/administrate/semantic-ui/icons.woff2 +0 -0
- data/app/assets/images/administrate/semantic-ui/flags.png +0 -0
- data/app/assets/javascripts/administrate/application.js +7 -0
- data/app/assets/javascripts/administrate/components/date_time_picker.js +6 -0
- data/app/assets/javascripts/administrate/components/has_many_form.js +3 -0
- data/app/assets/javascripts/administrate/components/table.js +23 -0
- data/app/assets/javascripts/administrate/vendor/semantic-ui.js +22943 -0
- data/app/assets/stylesheets/administrate/application.scss +27 -0
- data/app/assets/stylesheets/administrate/base/_forms.scss +106 -0
- data/app/assets/stylesheets/administrate/base/_layout.scss +10 -0
- data/app/assets/stylesheets/administrate/base/_lists.scss +19 -0
- data/app/assets/stylesheets/administrate/base/_typography.scss +48 -0
- data/app/assets/stylesheets/administrate/components/_app-container.scss +27 -0
- data/app/assets/stylesheets/administrate/components/_attributes.scss +34 -0
- data/app/assets/stylesheets/administrate/components/_buttons.scss +43 -0
- data/app/assets/stylesheets/administrate/components/_cells.scss +59 -0
- data/app/assets/stylesheets/administrate/components/_field-unit.scss +36 -0
- data/app/assets/stylesheets/administrate/components/_flashes.scss +28 -0
- data/app/assets/stylesheets/administrate/components/_form-actions.scss +3 -0
- data/app/assets/stylesheets/administrate/components/_main-content.scss +42 -0
- data/app/assets/stylesheets/administrate/components/_pagination.scss +18 -0
- data/app/assets/stylesheets/administrate/components/_search.scss +45 -0
- data/app/assets/stylesheets/administrate/components/nav-drawer.scss +156 -0
- data/app/assets/stylesheets/administrate/library/_clearfix.scss +7 -0
- data/app/assets/stylesheets/administrate/library/_data-label.scss +8 -0
- data/app/assets/stylesheets/administrate/library/_variables.scss +65 -0
- data/app/assets/stylesheets/administrate/vendor/semantic-ui.scss +37123 -0
- data/app/assets/stylesheets/docs.scss +93 -0
- data/app/controllers/administrate/application_controller.rb +162 -0
- data/app/helpers/administrate/application_helper.rb +51 -0
- data/app/views/administrate/application/_collection.html.erb +92 -0
- data/app/views/administrate/application/_flashes.html.erb +20 -0
- data/app/views/administrate/application/_form.html.erb +42 -0
- data/app/views/administrate/application/_icons.erb +13 -0
- data/app/views/administrate/application/_javascript.html.erb +21 -0
- data/app/views/administrate/application/_navigation.html.erb +19 -0
- data/app/views/administrate/application/_navigation_extra_links.html.erb +13 -0
- data/app/views/administrate/application/_navigation_footer.html.erb +44 -0
- data/app/views/administrate/application/_navigation_links.html.erb +16 -0
- data/app/views/administrate/application/_search.html.erb +25 -0
- data/app/views/administrate/application/_stylesheet.html.erb +14 -0
- data/app/views/administrate/application/edit.html.erb +36 -0
- data/app/views/administrate/application/index.html.erb +63 -0
- data/app/views/administrate/application/new.html.erb +32 -0
- data/app/views/administrate/application/show.html.erb +49 -0
- data/app/views/fields/belongs_to/_form.html.erb +26 -0
- data/app/views/fields/belongs_to/_index.html.erb +27 -0
- data/app/views/fields/belongs_to/_show.html.erb +27 -0
- data/app/views/fields/boolean/_form.html.erb +23 -0
- data/app/views/fields/boolean/_index.html.erb +19 -0
- data/app/views/fields/boolean/_show.html.erb +19 -0
- data/app/views/fields/date_time/_form.html.erb +24 -0
- data/app/views/fields/date_time/_index.html.erb +21 -0
- data/app/views/fields/date_time/_show.html.erb +21 -0
- data/app/views/fields/email/_form.html.erb +23 -0
- data/app/views/fields/email/_index.html.erb +18 -0
- data/app/views/fields/email/_show.html.erb +18 -0
- data/app/views/fields/has_many/_form.html.erb +29 -0
- data/app/views/fields/has_many/_index.html.erb +19 -0
- data/app/views/fields/has_many/_show.html.erb +35 -0
- data/app/views/fields/has_one/_form.html.erb +28 -0
- data/app/views/fields/has_one/_index.html.erb +23 -0
- data/app/views/fields/has_one/_show.html.erb +40 -0
- data/app/views/fields/number/_form.html.erb +23 -0
- data/app/views/fields/number/_index.html.erb +19 -0
- data/app/views/fields/number/_show.html.erb +19 -0
- data/app/views/fields/polymorphic/_form.html.erb +32 -0
- data/app/views/fields/polymorphic/_index.html.erb +24 -0
- data/app/views/fields/polymorphic/_show.html.erb +28 -0
- data/app/views/fields/select/_form.html.erb +31 -0
- data/app/views/fields/select/_index.html.erb +16 -0
- data/app/views/fields/select/_show.html.erb +16 -0
- data/app/views/fields/string/_form.html.erb +23 -0
- data/app/views/fields/string/_index.html.erb +18 -0
- data/app/views/fields/string/_show.html.erb +18 -0
- data/app/views/fields/text/_form.html.erb +22 -0
- data/app/views/fields/text/_index.html.erb +18 -0
- data/app/views/fields/text/_show.html.erb +19 -0
- data/app/views/layouts/administrate/application.html.erb +43 -0
- data/config/i18n-tasks.yml +18 -0
- data/config/locales/administrate.ar.yml +26 -0
- data/config/locales/administrate.bs.yml +25 -0
- data/config/locales/administrate.ca.yml +26 -0
- data/config/locales/administrate.da.yml +26 -0
- data/config/locales/administrate.de.yml +26 -0
- data/config/locales/administrate.en.yml +26 -0
- data/config/locales/administrate.es.yml +26 -0
- data/config/locales/administrate.fr.yml +26 -0
- data/config/locales/administrate.it.yml +26 -0
- data/config/locales/administrate.ja.yml +26 -0
- data/config/locales/administrate.ko.yml +26 -0
- data/config/locales/administrate.nl.yml +26 -0
- data/config/locales/administrate.pl.yml +26 -0
- data/config/locales/administrate.pt-BR.yml +27 -0
- data/config/locales/administrate.pt.yml +27 -0
- data/config/locales/administrate.ru.yml +26 -0
- data/config/locales/administrate.sv.yml +26 -0
- data/config/locales/administrate.uk.yml +26 -0
- data/config/locales/administrate.vi.yml +26 -0
- data/config/locales/administrate.zh-CN.yml +26 -0
- data/config/locales/administrate.zh-TW.yml +26 -0
- data/config/routes.rb +2 -0
- data/config/unicorn.rb +30 -0
- data/docs/adding_custom_field_types.md +79 -0
- data/docs/authentication.md +61 -0
- data/docs/customizing_attribute_partials.md +53 -0
- data/docs/customizing_controller_actions.md +42 -0
- data/docs/customizing_dashboards.md +202 -0
- data/docs/customizing_page_views.md +78 -0
- data/docs/getting_started.md +115 -0
- data/lib/administrate.rb +4 -0
- data/lib/administrate/base_dashboard.rb +72 -0
- data/lib/administrate/engine.rb +44 -0
- data/lib/administrate/field/associative.rb +33 -0
- data/lib/administrate/field/base.rb +54 -0
- data/lib/administrate/field/belongs_to.rb +36 -0
- data/lib/administrate/field/boolean.rb +15 -0
- data/lib/administrate/field/date_time.rb +21 -0
- data/lib/administrate/field/deferred.rb +35 -0
- data/lib/administrate/field/email.rb +11 -0
- data/lib/administrate/field/has_many.rb +87 -0
- data/lib/administrate/field/has_one.rb +27 -0
- data/lib/administrate/field/number.rb +35 -0
- data/lib/administrate/field/polymorphic.rb +51 -0
- data/lib/administrate/field/select.rb +21 -0
- data/lib/administrate/field/string.rb +21 -0
- data/lib/administrate/field/text.rb +21 -0
- data/lib/administrate/generator_helpers.rb +13 -0
- data/lib/administrate/namespace.rb +31 -0
- data/lib/administrate/namespace/resource.rb +28 -0
- data/lib/administrate/order.rb +45 -0
- data/lib/administrate/page.rb +4 -0
- data/lib/administrate/page/base.rb +35 -0
- data/lib/administrate/page/collection.rb +33 -0
- data/lib/administrate/page/form.rb +28 -0
- data/lib/administrate/page/show.rb +24 -0
- data/lib/administrate/resource_resolver.rb +43 -0
- data/lib/administrate/search.rb +47 -0
- data/lib/administrate/version.rb +3 -0
- data/lib/administrate/view_generator.rb +36 -0
- data/lib/generators/administrate/assets/assets_generator.rb +12 -0
- data/lib/generators/administrate/assets/javascripts_generator.rb +17 -0
- data/lib/generators/administrate/assets/stylesheets_generator.rb +17 -0
- data/lib/generators/administrate/dashboard/USAGE +9 -0
- data/lib/generators/administrate/dashboard/dashboard_generator.rb +141 -0
- data/lib/generators/administrate/dashboard/templates/controller.rb.erb +21 -0
- data/lib/generators/administrate/dashboard/templates/dashboard.rb.erb +56 -0
- data/lib/generators/administrate/field/field_generator.rb +31 -0
- data/lib/generators/administrate/field/templates/_form.html.erb +6 -0
- data/lib/generators/administrate/field/templates/_index.html.erb +1 -0
- data/lib/generators/administrate/field/templates/_show.html.erb +1 -0
- data/lib/generators/administrate/field/templates/field_object.rb.erb +7 -0
- data/lib/generators/administrate/install/install_generator.rb +49 -0
- data/lib/generators/administrate/install/templates/application_controller.rb.erb +21 -0
- data/lib/generators/administrate/routes/routes_generator.rb +91 -0
- data/lib/generators/administrate/routes/templates/routes.rb.erb +5 -0
- data/lib/generators/administrate/views/edit_generator.rb +16 -0
- data/lib/generators/administrate/views/field_generator.rb +50 -0
- data/lib/generators/administrate/views/form_generator.rb +15 -0
- data/lib/generators/administrate/views/index_generator.rb +16 -0
- data/lib/generators/administrate/views/layout_generator.rb +23 -0
- data/lib/generators/administrate/views/navigation_generator.rb +15 -0
- data/lib/generators/administrate/views/new_generator.rb +16 -0
- data/lib/generators/administrate/views/show_generator.rb +15 -0
- data/lib/generators/administrate/views/views_generator.rb +14 -0
- data/lib/tasks/administrate_tasks.rake +4 -0
- 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 %>
|