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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/express_admin.js +2 -0
- data/app/assets/javascripts/express_admin/admin.js +2 -0
- data/app/assets/stylesheets/express_admin.css +0 -5
- data/app/assets/stylesheets/express_admin/components/_definition.sass +8 -0
- data/app/assets/stylesheets/express_admin/components/_pane.sass +2 -2
- data/app/assets/stylesheets/express_admin/components/_sub_menu.sass +2 -2
- data/app/assets/stylesheets/express_admin/components/_widget_box.sass +4 -4
- data/app/assets/stylesheets/express_admin/globals/_foundation_overrides.sass +2 -1
- data/app/assets/stylesheets/express_admin/globals/_mixins.sass +0 -2
- data/app/assets/stylesheets/express_admin/plugins/_select2.sass +475 -68
- data/app/assets/stylesheets/express_admin/plugins/_tinymce.sass +2 -0
- data/app/assets/stylesheets/express_admin/screen.sass +6 -1
- data/app/assets/stylesheets/express_admin/sections/_header.sass +1 -0
- data/app/assets/stylesheets/express_admin/sections/_main_content.sass +6 -2
- data/app/assets/stylesheets/express_admin/sections/_main_region.sass +10 -7
- data/app/assets/stylesheets/express_admin/sections/_page_body.sass +6 -3
- data/app/assets/stylesheets/express_admin/sections/_page_sidebar.sass +6 -2
- data/app/assets/stylesheets/express_admin/sections/_sidebar_region.sass +4 -3
- data/app/assets/stylesheets/express_admin/shared/_buttons.sass +0 -1
- data/app/assets/stylesheets/express_admin/shared/_forms.sass +14 -2
- data/app/assets/stylesheets/express_admin/shared/_trees.sass +7 -3
- data/app/assets/stylesheets/ionicons/{ionicons.css.sass → ionicons.sass} +0 -0
- data/app/components/express_admin/addon_sidebar_component.rb +23 -34
- data/app/components/express_admin/definition_list.rb +38 -0
- data/app/components/express_admin/definition_table.rb +51 -0
- data/app/components/express_admin/flash_message_component.rb +5 -11
- data/app/components/express_admin/layout_component.rb +2 -9
- data/app/components/express_admin/main_region.rb +4 -4
- data/app/components/express_admin/mega_menu_component.rb +40 -34
- data/app/components/express_admin/page_header_component.rb +8 -18
- data/app/components/express_admin/pane.rb +13 -10
- data/app/components/express_admin/setting_form.rb +23 -20
- data/app/components/express_admin/sidebar_region.rb +6 -4
- data/app/components/express_admin/smart_form.rb +21 -18
- data/app/components/express_admin/smart_table.rb +44 -40
- data/app/components/express_admin/widget_box.rb +8 -8
- data/app/helpers/express_admin/admin_helper.rb +1 -1
- data/app/views/devise/sessions/new.html.et +63 -0
- data/app/views/layouts/express_admin/admin.html.et +8 -9
- data/app/views/shared/express_admin/_navigation_bar.html.et +6 -5
- data/config/tinymce.yml +29 -0
- data/lib/core_extensions/string_promptify.rb +9 -0
- data/lib/express_admin.rb +1 -0
- data/lib/express_admin/engine.rb +11 -9
- data/lib/express_admin/version.rb +1 -1
- data/lib/generators/express_admin/install/install_generator.rb +7 -0
- data/lib/generators/express_admin/install/templates/views/devise/sessions/new.html.et +1 -0
- data/test/dummy/app/views/demo/sign_in.html.et +6 -6
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/test.log +11361 -0
- data/test/dummy/test/components/smart_form_test.rb +57 -34
- data/test/dummy/test/components/smart_table_test.rb +35 -35
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/1EoyfDwFVtgMAOjo7HPkor8TQbVaioOFx9hildx_DTQ.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/4OPIkynisipUm8vKo57HUhBMWFSHBno_IH6OdpK29IA.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/4hK1AdPGHbXGkebvk-nSvhxtCdOSlMYNWvA43CvQKhI.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/6c0H20s6oHf45XogeDELaojxa0PX1NmirTTWV1ClcRw.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/9QvwPXfTSVmgQX6tdK9GuCn0--MZ8Z8eJJbHpUEq1p8.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/BoKdGhgi5NHfGTc42p9nltpEIYj_BBUxVdv7YhpBmmA.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/GJGMlSyTg1AvPCV_6PaLOTVEKbHeVKY1jhCoaKuRlxM.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/H0aD5KRj-4fhORkqWcWZfKPOQfu_ggvt4OmYOl4S5mw.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/IBLgVNsKBbJxN8NQnh6zTc3bC_OG-8BhtA3xCNDV6ks.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/Po8q4NrWy9Kymnz_HbOk-WbdGY_KuuXc6urGogTHe7U.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/V1aP9G-CVtOLR5PTnHleid8WC9TSfFAT1DzAygp_5CQ.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/WhePtBvZPmF1Jhdcc4glsjhxBJQo9Qw0CDgy_F8lClY.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/dVokuKbK8HbOtvPIksKGBAYE8x44l372dQ0gEISqbdo.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/oN1zSGeSEz4KhkAuUF_yFDsCVPkulfFjomEAjFzGdPc.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/qIeSoker4TjM7JYRQTOjgRd4nN0WeHnNY1GMK7Zpe8M.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/tTFLM1bjKSeg4nyH7GWbTY6JVvuYhNKFFvsOMS9h8O0.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/tzX-HHF4F70o-aSB9Z_duoPxFGDv3auYnrpko9SYafU.cache +1 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/vMbWbI1SO5bEaiu2pRvV8NDmms_j5flYoRvCSJavhdU.cache +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/v3.0/ypZCDLo54Pz2ZoUxrxSEUjT5FYMAq8Ozp8OTOYDRdAE.cache +0 -0
- data/test/fixtures/categories.yml +8 -0
- data/test/test_helper.rb +34 -0
- data/vendor/gems/express_templates/CHANGELOG.md +12 -0
- data/vendor/gems/express_templates/Gemfile.lock +4 -1
- data/vendor/gems/express_templates/README.md +22 -41
- data/vendor/gems/express_templates/express_templates.gemspec +1 -0
- data/vendor/gems/express_templates/lib/arbre/patches.rb +50 -0
- data/vendor/gems/express_templates/lib/core_extensions/proc.rb +1 -0
- data/vendor/gems/express_templates/lib/express_templates.rb +2 -3
- data/vendor/gems/express_templates/lib/express_templates/compiler.rb +2 -7
- data/vendor/gems/express_templates/lib/express_templates/components.rb +1 -9
- data/vendor/gems/express_templates/lib/express_templates/components/base.rb +33 -37
- data/vendor/gems/express_templates/lib/express_templates/components/capabilities/resourceful.rb +30 -18
- data/vendor/gems/express_templates/lib/express_templates/components/configurable.rb +41 -0
- data/vendor/gems/express_templates/lib/express_templates/components/form_rails_support.rb +5 -6
- data/vendor/gems/express_templates/lib/express_templates/components/forms.rb +0 -1
- data/vendor/gems/express_templates/lib/express_templates/components/forms/basic_fields.rb +3 -6
- data/vendor/gems/express_templates/lib/express_templates/components/forms/checkbox.rb +1 -1
- data/vendor/gems/express_templates/lib/express_templates/components/forms/express_form.rb +15 -25
- data/vendor/gems/express_templates/lib/express_templates/components/forms/form_component.rb +20 -11
- data/vendor/gems/express_templates/lib/express_templates/components/forms/option_support.rb +2 -2
- data/vendor/gems/express_templates/lib/express_templates/components/forms/radio.rb +7 -8
- data/vendor/gems/express_templates/lib/express_templates/components/forms/select.rb +61 -37
- data/vendor/gems/express_templates/lib/express_templates/components/forms/select_collection.rb +2 -8
- data/vendor/gems/express_templates/lib/express_templates/components/forms/submit.rb +7 -6
- data/vendor/gems/express_templates/lib/express_templates/components/tree_for.rb +26 -42
- data/vendor/gems/express_templates/lib/express_templates/version.rb +1 -1
- data/vendor/gems/express_templates/test/components/base_test.rb +17 -15
- data/vendor/gems/express_templates/test/components/capabilities/resourceful_test.rb +3 -3
- data/vendor/gems/express_templates/test/components/configurable_test.rb +27 -21
- data/vendor/gems/express_templates/test/components/forms/basic_fields_test.rb +57 -17
- data/vendor/gems/express_templates/test/components/forms/checkbox_test.rb +16 -22
- data/vendor/gems/express_templates/test/components/forms/express_form_test.rb +23 -76
- data/vendor/gems/express_templates/test/components/forms/radio_test.rb +31 -27
- data/vendor/gems/express_templates/test/components/forms/select_test.rb +46 -71
- data/vendor/gems/express_templates/test/components/forms/submit_test.rb +10 -5
- data/vendor/gems/express_templates/test/components/tree_for_test.rb +24 -52
- data/vendor/gems/express_templates/test/dummy/app/views/hello/show.html.et +4 -3
- data/vendor/gems/express_templates/test/dummy/app/views/layouts/application.html.et +1 -1
- data/vendor/gems/express_templates/test/dummy/log/test.log +4296 -0
- data/vendor/gems/express_templates/test/express_templates_test.rb +5 -1
- data/vendor/gems/express_templates/test/handler_test.rb +19 -17
- data/vendor/gems/express_templates/test/performance_test.rb +11 -7
- data/vendor/gems/express_templates/test/test_helper.rb +162 -1
- metadata +58 -47
- data/app/assets/stylesheets/express_admin/components/_megadropdown.sass +0 -66
- data/vendor/gems/express_templates/diagrams/diagram.graffle +0 -2404
- data/vendor/gems/express_templates/diagrams/diagram_express_templates.png +0 -0
- data/vendor/gems/express_templates/diagrams/diagram_haml_erb.png +0 -0
- data/vendor/gems/express_templates/lib/express_templates/components/capabilities/adoptable.rb +0 -20
- data/vendor/gems/express_templates/lib/express_templates/components/capabilities/building.rb +0 -14
- data/vendor/gems/express_templates/lib/express_templates/components/capabilities/conditionality.rb +0 -54
- data/vendor/gems/express_templates/lib/express_templates/components/capabilities/configurable.rb +0 -90
- data/vendor/gems/express_templates/lib/express_templates/components/capabilities/iterating.rb +0 -75
- data/vendor/gems/express_templates/lib/express_templates/components/capabilities/parenting.rb +0 -72
- data/vendor/gems/express_templates/lib/express_templates/components/capabilities/rendering.rb +0 -30
- data/vendor/gems/express_templates/lib/express_templates/components/capabilities/templating.rb +0 -198
- data/vendor/gems/express_templates/lib/express_templates/components/capabilities/wrapping.rb +0 -84
- data/vendor/gems/express_templates/lib/express_templates/components/column.rb +0 -13
- data/vendor/gems/express_templates/lib/express_templates/components/container.rb +0 -7
- data/vendor/gems/express_templates/lib/express_templates/components/content_for.rb +0 -42
- data/vendor/gems/express_templates/lib/express_templates/components/for_each.rb +0 -30
- data/vendor/gems/express_templates/lib/express_templates/components/forms/form_support.rb +0 -13
- data/vendor/gems/express_templates/lib/express_templates/components/null_wrap.rb +0 -41
- data/vendor/gems/express_templates/lib/express_templates/components/row.rb +0 -28
- data/vendor/gems/express_templates/lib/express_templates/components/table_for.rb +0 -163
- data/vendor/gems/express_templates/lib/express_templates/components/unless_block.rb +0 -40
- data/vendor/gems/express_templates/lib/express_templates/expander.rb +0 -140
- data/vendor/gems/express_templates/lib/express_templates/macro.rb +0 -45
- data/vendor/gems/express_templates/lib/express_templates/markup.rb +0 -9
- data/vendor/gems/express_templates/lib/express_templates/markup/html_tag.rb +0 -62
- data/vendor/gems/express_templates/lib/express_templates/markup/tag.rb +0 -150
- data/vendor/gems/express_templates/lib/express_templates/markup/wrapper.rb +0 -94
- data/vendor/gems/express_templates/lib/express_templates/markup/yielder.rb +0 -21
- data/vendor/gems/express_templates/test/components/column_test.rb +0 -11
- data/vendor/gems/express_templates/test/components/conditionality_test.rb +0 -37
- data/vendor/gems/express_templates/test/components/container_test.rb +0 -66
- data/vendor/gems/express_templates/test/components/content_for_test.rb +0 -60
- data/vendor/gems/express_templates/test/components/iterating_test.rb +0 -127
- data/vendor/gems/express_templates/test/components/null_wrap_test.rb +0 -28
- data/vendor/gems/express_templates/test/components/row_test.rb +0 -16
- data/vendor/gems/express_templates/test/components/table_for_test.rb +0 -211
- data/vendor/gems/express_templates/test/expander_stack_test.rb +0 -41
- data/vendor/gems/express_templates/test/expander_test.rb +0 -99
- data/vendor/gems/express_templates/test/markup/tag_test.rb +0 -149
- data/vendor/gems/express_templates/test/markup/wrapper_test.rb +0 -42
- 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
|
-
|
10
|
-
|
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
|
-
|
23
|
-
|
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:
|
6
|
+
emits -> (block) {
|
7
|
+
div(id: dom_id, class: pane_classes) {
|
8
8
|
heading if title || status
|
9
|
-
|
9
|
+
block.call(self) if block
|
10
10
|
}
|
11
11
|
}
|
12
12
|
|
13
13
|
def heading
|
14
|
-
|
15
|
-
|
16
|
-
|
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
|
-
|
27
|
+
config[:title] || ''
|
26
28
|
end
|
27
29
|
|
28
30
|
def status
|
29
|
-
|
31
|
+
config[:status] || nil
|
30
32
|
end
|
31
33
|
|
32
|
-
def
|
33
|
-
|
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::
|
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
|
-
|
15
|
+
def save_button
|
16
|
+
submit_tag 'Save', class: 'button tiny right radius ajax-submit'
|
17
|
+
end
|
17
18
|
|
18
|
-
|
19
|
+
def settings_path
|
20
|
+
helpers.instance_eval("admin_#{current_module_path_name.gsub(/express_/, '')}_settings_path")
|
21
|
+
end
|
19
22
|
|
20
|
-
|
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
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
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 <
|
3
|
-
emits -> {
|
4
|
-
|
5
|
-
|
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::
|
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}: {
|
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
|
-
|
38
|
-
|
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
|
-
|
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:
|
51
|
+
resource_class: config[:resource_class],
|
54
52
|
namespace: namespace}
|
55
53
|
end
|
56
54
|
|
57
|
-
|
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
|
-
(
|
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 +=
|
79
|
+
excl += config[:exclude] if config[:exclude]
|
77
80
|
excl
|
78
81
|
end
|
79
82
|
|
80
83
|
def timestamp_attributes
|
81
|
-
|
84
|
+
resource_attributes.select {|attrib| TIMESTAMPS.include?(attrib.name) }
|
82
85
|
end
|
83
86
|
|
84
87
|
def non_timestamp_attributes
|
85
|
-
|
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
|
98
|
+
if config[:only]
|
96
99
|
# if using :only, we respect the order
|
97
|
-
|
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::
|
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(
|
10
|
+
table(id: config[:id], class: 'table striped') {
|
12
11
|
thead {
|
13
12
|
tr {
|
14
13
|
display_columns.each do |column|
|
15
|
-
th
|
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
|
-
|
25
|
-
tr(
|
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
|
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
|
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
|
47
|
+
th(class: 'actions') { 'Actions' }
|
49
48
|
end
|
50
49
|
|
51
50
|
def should_show_actions?
|
52
|
-
|
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',
|
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
|
-
|
63
|
-
|
64
|
-
|
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
|
-
|
73
|
+
config[:permanent].nil? || (config[:permanent].present? && config[:permanent])
|
69
74
|
end
|
70
75
|
|
71
|
-
def row_id
|
72
|
-
"#{collection_member_name}
|
76
|
+
def row_id(item)
|
77
|
+
"#{collection_member_name}:#{item.to_param}"
|
73
78
|
end
|
74
79
|
|
75
|
-
def
|
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 =
|
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
|
-
|
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 =
|
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 =
|
93
|
-
|
98
|
+
relation = item.send(relation_name)
|
99
|
+
relation.try(:name) || relation.to_s
|
94
100
|
else
|
95
|
-
|
101
|
+
item.send(accessor)
|
96
102
|
end
|
97
103
|
end
|
98
|
-
|
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
|
-
|
133
|
+
config[:columns]
|
130
134
|
end
|
131
135
|
|
132
136
|
def hidden_columns_header_indicator
|
133
|
-
th
|
137
|
+
th(class: 'more-columns-indicator') {
|
134
138
|
"..."
|
135
139
|
}
|
136
140
|
end
|
137
141
|
|
138
142
|
def hidden_column_cell
|
139
|
-
td
|
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
|
-
|
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::
|
3
|
-
emits -> {
|
4
|
-
div
|
5
|
-
header
|
6
|
-
div
|
7
|
-
|
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
|
-
|
15
|
+
config[:id].to_s.titleize
|
16
16
|
end
|
17
17
|
|
18
18
|
def box_title
|
19
|
-
|
19
|
+
config[:title] || (helpers.resource.persisted? ? "Edit #{resource_name}" : "New #{resource_name}")
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|