para 0.6.9 → 0.7.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.
- checksums.yaml +4 -4
- data/app/assets/images/para/admin/tangram-mosaic.png +0 -0
- data/app/assets/images/para/admin/template-section.svg +23 -0
- data/app/assets/javascripts/para/admin.coffee +20 -0
- data/app/assets/javascripts/para/admin/tabs.coffee +22 -5
- data/app/assets/javascripts/para/admin/theme_actions.coffee +3 -3
- data/app/assets/javascripts/para/inputs/material-input.coffee +4 -0
- data/app/assets/javascripts/para/inputs/multi-select-input.coffee +173 -0
- data/app/assets/javascripts/para/inputs/nested_many.coffee +9 -9
- data/app/assets/stylesheets/para/admin.sass +5 -5
- data/app/assets/stylesheets/para/admin/main.sass +32 -0
- data/app/assets/stylesheets/para/admin/src/_alert.sass +17 -0
- data/app/assets/stylesheets/para/admin/src/_base.sass +51 -0
- data/app/assets/stylesheets/para/admin/src/_bootstrap-variables.scss +874 -0
- data/app/assets/stylesheets/para/admin/src/_breadcrumb.sass +22 -0
- data/app/assets/stylesheets/para/admin/src/_buttons.sass +107 -0
- data/app/assets/stylesheets/para/admin/src/_checkable.sass +94 -0
- data/app/assets/stylesheets/para/admin/src/_common.sass +203 -0
- data/app/assets/stylesheets/para/admin/src/_dropdown.sass +40 -0
- data/app/assets/stylesheets/para/admin/src/_form.sass +271 -0
- data/app/assets/stylesheets/para/admin/src/_list.sass +61 -0
- data/app/assets/stylesheets/para/admin/src/_mixins.sass +113 -0
- data/app/assets/stylesheets/para/admin/src/_multi-select.sass +91 -0
- data/app/assets/stylesheets/para/admin/src/_navigation.sass +150 -0
- data/app/assets/stylesheets/para/admin/src/_navtabs.sass +41 -0
- data/app/assets/stylesheets/para/admin/src/_nested-many.sass +69 -0
- data/app/assets/stylesheets/para/admin/src/_nested_one.sass +13 -0
- data/app/assets/stylesheets/para/admin/src/_orderable.sass +44 -0
- data/app/assets/stylesheets/para/admin/src/_page-loading.sass +39 -0
- data/app/assets/stylesheets/para/admin/src/_pagination.sass +34 -0
- data/app/assets/stylesheets/para/admin/src/_panel.sass +55 -0
- data/app/assets/stylesheets/para/admin/src/_responsive.sass +100 -0
- data/app/assets/stylesheets/para/admin/{theme → src}/_sorting.sass +11 -3
- data/app/assets/stylesheets/para/admin/src/_statcard.sass +41 -0
- data/app/assets/stylesheets/para/admin/src/_table.sass +33 -0
- data/app/assets/stylesheets/para/admin/src/_tree.sass +52 -0
- data/app/assets/stylesheets/para/admin/src/_variables.sass +37 -0
- data/app/assets/stylesheets/para/admin/src/_well.sass +12 -0
- data/app/assets/stylesheets/para/{admin/src → lib}/datetimepicker.sass +1 -3
- data/app/assets/stylesheets/para/{admin/src → lib}/fuelux.sass +3 -5
- data/app/assets/stylesheets/para/lib/jasny-bootstrap.sass +97 -0
- data/app/assets/stylesheets/para/{admin/src → lib}/redactor.sass +2 -5
- data/app/assets/stylesheets/para/lib/selectize.sass +112 -0
- data/app/assets/stylesheets/para/lib/slider.sass +12 -0
- data/app/controllers/concerns/para/admin/resource_controller_concerns.rb +14 -2
- data/app/controllers/para/admin/base_controller.rb +7 -0
- data/app/controllers/para/admin/crud_resources_controller.rb +13 -6
- data/app/controllers/para/admin/form_resources_controller.rb +5 -3
- data/app/controllers/para/admin/resources_controller.rb +9 -3
- data/app/controllers/para/admin/search_controller.rb +15 -0
- data/app/controllers/para/application_controller.rb +10 -2
- data/app/helpers/para/admin/page_helper.rb +9 -9
- data/app/helpers/para/application_helper.rb +1 -10
- data/app/helpers/para/form_helper.rb +5 -6
- data/app/helpers/para/model_helper.rb +13 -3
- data/app/helpers/para/ordering_helper.rb +1 -1
- data/app/helpers/para/search_results_helper.rb +16 -0
- data/app/helpers/para/tree_helper.rb +10 -6
- data/app/models/para/page.rb +5 -0
- data/app/models/para/page/section.rb +42 -0
- data/app/models/para/page/section_resource.rb +12 -0
- data/app/views/layouts/para/admin.html.haml +5 -8
- data/app/views/para/admin/dashboard.html.haml +21 -8
- data/app/views/para/admin/form_resources/show.html.haml +1 -1
- data/app/views/para/admin/imports/new.html.haml +2 -2
- data/app/views/para/admin/resources/_actions.html.haml +3 -3
- data/app/views/para/admin/resources/_add_button.html.haml +1 -1
- data/app/views/para/admin/resources/_exports_menu.html.haml +6 -6
- data/app/views/para/admin/resources/_filters.html.haml +7 -8
- data/app/views/para/admin/resources/_imports_menu.html.haml +6 -6
- data/app/views/para/admin/resources/_list.html.haml +14 -15
- data/app/views/para/admin/resources/_per_page_select.html.haml +4 -3
- data/app/views/para/admin/resources/_subclassable_add_button.html.haml +3 -3
- data/app/views/para/admin/resources/_tree.html.haml +7 -9
- data/app/views/para/admin/resources/_tree_item.html.haml +5 -6
- data/app/views/para/admin/resources/edit.html.haml +1 -1
- data/app/views/para/admin/resources/new.html.haml +1 -1
- data/app/views/para/admin/search/_result.html.haml +7 -0
- data/app/views/para/admin/search/index.html.haml +1 -0
- data/app/views/para/admin/settings_component/show.html.haml +1 -1
- data/app/views/para/admin/shared/_breadcrumbs.html.haml +2 -3
- data/app/views/para/admin/shared/_header.html.haml +16 -27
- data/app/views/para/admin/shared/_navigation.html.haml +20 -19
- data/app/views/para/form/_tabs.html.haml +6 -7
- data/app/views/para/inputs/_multi_select.html.haml +40 -0
- data/app/views/para/inputs/_nested_many.html.haml +4 -4
- data/app/views/para/inputs/multi_select/_no_items.html.haml +6 -0
- data/app/views/para/inputs/nested_many/_add.html.haml +1 -2
- data/app/views/para/inputs/nested_many/_add_with_subclasses.html.haml +4 -5
- data/app/views/para/inputs/nested_many/_container.html.haml +7 -8
- data/app/views/shared/_breadcrumbs.html.haml +4 -0
- data/config/locales/fr.yml +29 -4
- data/db/migrate/20170324125547_create_para_page_section_resources.rb +15 -0
- data/lib/generators/para/filters/templates/_filters.html.haml +3 -5
- data/lib/generators/para/install/templates/initializer.rb +12 -0
- data/lib/generators/para/page/section/section_generator.rb +13 -2
- data/lib/generators/para/page/section/templates/section.html.haml.erb +3 -0
- data/lib/generators/para/resource/resource_generator.rb +1 -1
- data/lib/para.rb +25 -21
- data/lib/para/attribute_field.rb +2 -0
- data/lib/para/attribute_field/base.rb +1 -1
- data/lib/para/attribute_field/belongs_to.rb +1 -1
- data/lib/para/attribute_field/boolean.rb +1 -1
- data/lib/para/attribute_field/friendly_id.rb +19 -0
- data/lib/para/attribute_field/has_many.rb +43 -4
- data/lib/para/attribute_field/nested_field.rb +46 -0
- data/lib/para/attribute_field/nested_many.rb +30 -9
- data/lib/para/attribute_field/nested_one.rb +28 -9
- data/lib/para/attribute_field/password.rb +1 -1
- data/lib/para/attribute_field/relation.rb +19 -1
- data/lib/para/attribute_field_mappings.rb +9 -3
- data/lib/para/breadcrumbs/breadcrumb.rb +57 -10
- data/lib/para/breadcrumbs/controller.rb +19 -6
- data/lib/para/breadcrumbs/manager.rb +9 -1
- data/lib/para/config.rb +3 -0
- data/lib/para/controller_resource.rb +34 -0
- data/lib/para/engine.rb +33 -14
- data/lib/para/exporter/base.rb +1 -1
- data/lib/para/ext.rb +1 -1
- data/lib/para/ext/active_record_nested_attributes.rb +51 -0
- data/lib/para/ext/paperclip.rb +2 -6
- data/lib/para/form_builder.rb +3 -0
- data/lib/para/form_builder/attributes_mappings_tracker.rb +45 -0
- data/lib/para/form_builder/containers.rb +13 -17
- data/lib/para/form_builder/nested_form.rb +2 -3
- data/lib/para/helpers.rb +8 -0
- data/lib/para/helpers/attributes_mappings.rb +13 -0
- data/lib/para/helpers/resource_name.rb +14 -0
- data/lib/para/inputs.rb +1 -0
- data/lib/para/inputs/multi_select_input.rb +90 -0
- data/lib/para/inputs/nested_many_input.rb +6 -1
- data/lib/para/markup/resources_table.rb +15 -11
- data/lib/para/model_field_parsers.rb +3 -2
- data/lib/para/model_field_parsers/base.rb +7 -2
- data/lib/para/model_field_parsers/friendly_id.rb +19 -0
- data/lib/para/model_field_parsers/relations.rb +20 -1
- data/lib/para/page/model.rb +3 -1
- data/lib/para/routes.rb +1 -0
- data/lib/para/simple_form_config.rb +85 -0
- data/lib/para/version.rb +1 -1
- data/lib/rails/routing_mapper.rb +5 -8
- data/vendor/assets/javascripts/jasny-bootstrap.js +577 -0
- data/vendor/assets/stylesheets/animate.css +3340 -0
- data/vendor/assets/stylesheets/hint.css +649 -0
- data/vendor/assets/stylesheets/jasny-bootstrap.css +287 -0
- metadata +114 -67
- data/app/assets/images/para/admin/bg.png +0 -0
- data/app/assets/javascripts/para/admin.js +0 -20
- data/app/assets/stylesheets/admin/theme.sass +0 -0
- data/app/assets/stylesheets/para/admin/src/jasny.bootstrap.sass +0 -40
- data/app/assets/stylesheets/para/admin/src/nested_many.sass +0 -5
- data/app/assets/stylesheets/para/admin/src/page-loading.sass +0 -24
- data/app/assets/stylesheets/para/admin/src/page-top-bar.sass +0 -9
- data/app/assets/stylesheets/para/admin/src/selectize.sass +0 -46
- data/app/assets/stylesheets/para/admin/src/slider.sass +0 -12
- data/app/assets/stylesheets/para/admin/theme.sass +0 -22
- data/app/assets/stylesheets/para/admin/theme/_base.sass +0 -176
- data/app/assets/stylesheets/para/admin/theme/_breadcrumb.sass +0 -75
- data/app/assets/stylesheets/para/admin/theme/_buttons.sass +0 -27
- data/app/assets/stylesheets/para/admin/theme/_checkable.sass +0 -108
- data/app/assets/stylesheets/para/admin/theme/_commonds.sass +0 -210
- data/app/assets/stylesheets/para/admin/theme/_dropdown.sass +0 -52
- data/app/assets/stylesheets/para/admin/theme/_form.sass +0 -150
- data/app/assets/stylesheets/para/admin/theme/_list.sass +0 -139
- data/app/assets/stylesheets/para/admin/theme/_navigation.sass +0 -229
- data/app/assets/stylesheets/para/admin/theme/_navtabs.sass +0 -151
- data/app/assets/stylesheets/para/admin/theme/_orderable.sass +0 -45
- data/app/assets/stylesheets/para/admin/theme/_panel.sass +0 -264
- data/app/assets/stylesheets/para/admin/theme/_responsive.sass +0 -123
- data/app/assets/stylesheets/para/admin/theme/_table.sass +0 -28
- data/app/assets/stylesheets/para/admin/theme/_tree.sass +0 -74
- data/app/assets/stylesheets/para/admin/theme/_variables.sass +0 -31
- data/app/assets/stylesheets/para/application.css +0 -15
- data/app/assets/stylesheets/para/lib/_variables.scss +0 -646
- data/app/assets/stylesheets/para/overrides/responsive.sass +0 -62
- data/app/assets/stylesheets/para/overrides/theme.sass +0 -172
- data/lib/para/ext/cancan.rb +0 -26
- data/vendor/assets/javascripts/jasny.bootstrap.min.js +0 -7
- data/vendor/assets/stylesheets/animate.min.css +0 -6
- data/vendor/assets/stylesheets/jasny.bootstrap.min.css +0 -7
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Selectize
|
|
3
|
+
// --------------------------------------------------
|
|
4
|
+
@import "compass/css3/user-interface"
|
|
5
|
+
@import "para/admin/src/variables"
|
|
6
|
+
@import "para/admin/src/mixins"
|
|
7
|
+
|
|
8
|
+
//== Selectize
|
|
9
|
+
//
|
|
10
|
+
//## Override default style
|
|
11
|
+
|
|
12
|
+
//** Debug ghost margin bottom
|
|
13
|
+
.selectize-control,
|
|
14
|
+
.selectize-control.form-control
|
|
15
|
+
line-height: 0
|
|
16
|
+
|
|
17
|
+
//** Single
|
|
18
|
+
.selectize-control
|
|
19
|
+
&.single
|
|
20
|
+
.selectize-input
|
|
21
|
+
padding-right: 30px
|
|
22
|
+
//** Caret by para
|
|
23
|
+
&:after
|
|
24
|
+
right: 12px
|
|
25
|
+
+fontAwesome
|
|
26
|
+
content: "\f107"
|
|
27
|
+
border: none
|
|
28
|
+
margin-top: -6px
|
|
29
|
+
color: $gray
|
|
30
|
+
|
|
31
|
+
//** Dropdown
|
|
32
|
+
|
|
33
|
+
//** Active system
|
|
34
|
+
|
|
35
|
+
//** Dropdown active
|
|
36
|
+
|
|
37
|
+
.selectize-input,
|
|
38
|
+
.selectize-input.full
|
|
39
|
+
border-color: $input-border
|
|
40
|
+
+border-radius($input-border-radius)
|
|
41
|
+
&.focus
|
|
42
|
+
border-color: $input-border-focus
|
|
43
|
+
&.dropdown-active
|
|
44
|
+
+border-radius($input-border-radius)
|
|
45
|
+
&:after
|
|
46
|
+
border: none
|
|
47
|
+
+transform(rotate(180deg))
|
|
48
|
+
margin-top: -6px
|
|
49
|
+
|
|
50
|
+
.selectize-control.single .selectize-input
|
|
51
|
+
&.dropdown-active
|
|
52
|
+
&:after
|
|
53
|
+
margin-top: -6px
|
|
54
|
+
|
|
55
|
+
.selectize-dropdown,
|
|
56
|
+
.selectize-input,
|
|
57
|
+
.selectize-input input
|
|
58
|
+
color: $input-color
|
|
59
|
+
|
|
60
|
+
.selectize-input,
|
|
61
|
+
.selectize-control.single .selectize-input.input-active
|
|
62
|
+
background: $input-bg
|
|
63
|
+
|
|
64
|
+
.selectize-input,
|
|
65
|
+
.selectize-input.full,
|
|
66
|
+
.selectize-input.not-full
|
|
67
|
+
background: $input-bg
|
|
68
|
+
|
|
69
|
+
.selectize-input.not-full input
|
|
70
|
+
+input-placeholder
|
|
71
|
+
color: $input-color-placeholder
|
|
72
|
+
font-size: 0.9em
|
|
73
|
+
|
|
74
|
+
.selectize-dropdown
|
|
75
|
+
[data-selectable]
|
|
76
|
+
background-color: $dropdown-bg
|
|
77
|
+
color: $dropdown-link-color
|
|
78
|
+
.active
|
|
79
|
+
background-color: $gray-lighter
|
|
80
|
+
color: $dropdown-link-hover-color
|
|
81
|
+
.selected
|
|
82
|
+
background-color: $dropdown-link-active-bg
|
|
83
|
+
color: $dropdown-link-active-color
|
|
84
|
+
|
|
85
|
+
.selectize-control.multi .selectize-input > div
|
|
86
|
+
background-color: $gray-light
|
|
87
|
+
+border-radius(2px)
|
|
88
|
+
color: $text-color
|
|
89
|
+
&:hover,
|
|
90
|
+
&:focus,
|
|
91
|
+
&.active
|
|
92
|
+
background-color: $navbar-default-bg
|
|
93
|
+
color: $gray-lighter
|
|
94
|
+
.remove
|
|
95
|
+
&:hover
|
|
96
|
+
background-color: $blue-darker
|
|
97
|
+
|
|
98
|
+
//== Selectize Dropdown
|
|
99
|
+
//
|
|
100
|
+
//## Override z-index because of Fixed actions container
|
|
101
|
+
|
|
102
|
+
.selectize-dropdown,
|
|
103
|
+
.selectize-dropdown.form-control
|
|
104
|
+
+material-box-shadow-soft(2)
|
|
105
|
+
border: none
|
|
106
|
+
margin: 8px 0 0 0
|
|
107
|
+
z-index: $zindex-navbar-fixed + 20
|
|
108
|
+
|
|
109
|
+
.selectize-dropdown
|
|
110
|
+
[data-selectable]
|
|
111
|
+
line-weight: 300
|
|
112
|
+
padding: 8px 12px
|
|
@@ -1,13 +1,25 @@
|
|
|
1
1
|
module Para
|
|
2
2
|
module Admin
|
|
3
3
|
module ResourceControllerConcerns
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
|
|
6
|
+
included do
|
|
7
|
+
before_action :set_resource_model_from_resource
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
private
|
|
11
|
+
|
|
12
|
+
def set_resource_model_from_resource
|
|
13
|
+
@resource_model = resource.class if resource
|
|
14
|
+
end
|
|
15
|
+
|
|
4
16
|
def resource_model
|
|
5
17
|
@resource_model ||= @component.try(:model)
|
|
6
18
|
end
|
|
7
19
|
|
|
8
20
|
def resource
|
|
9
21
|
@resource ||= begin
|
|
10
|
-
resource = instance_variable_get(:"@#{ resource_name }")
|
|
22
|
+
resource = instance_variable_get(:"@#{ resource_name }") if resource_name
|
|
11
23
|
# We ensure that the fetched resource is not a relation, which could
|
|
12
24
|
# happen for uncountable resource names (like "news") and would make
|
|
13
25
|
# code depending on the `resource` getter to fail unexpectedly
|
|
@@ -16,7 +28,7 @@ module Para
|
|
|
16
28
|
end
|
|
17
29
|
|
|
18
30
|
def resource_name
|
|
19
|
-
resource_model.model_name.singular_route_key
|
|
31
|
+
resource_model.model_name.singular_route_key if resource_model
|
|
20
32
|
end
|
|
21
33
|
end
|
|
22
34
|
end
|
|
@@ -27,6 +27,13 @@ module Para
|
|
|
27
27
|
|
|
28
28
|
private
|
|
29
29
|
|
|
30
|
+
# Override cancan controlelr resource class to avoid attributes
|
|
31
|
+
# assignation issues with resources
|
|
32
|
+
#
|
|
33
|
+
def self.cancan_resource_class
|
|
34
|
+
Para::ControllerResource
|
|
35
|
+
end
|
|
36
|
+
|
|
30
37
|
def authorize_admin_access
|
|
31
38
|
authorize! :access, :admin
|
|
32
39
|
end
|
|
@@ -3,17 +3,20 @@ require_dependency "para/application_controller"
|
|
|
3
3
|
module Para
|
|
4
4
|
module Admin
|
|
5
5
|
class CrudResourcesController < Para::Admin::ResourcesController
|
|
6
|
-
include Para::Admin::ResourceControllerConcerns
|
|
7
6
|
include Para::SearchHelper
|
|
8
7
|
|
|
9
8
|
before_action :load_and_authorize_crud_resource
|
|
10
9
|
before_action :add_breadcrumbs, only: [:show, :index, :edit, :new]
|
|
11
10
|
|
|
11
|
+
# Include after resource loading to allow the concern to use the resource
|
|
12
|
+
# in before_action hooks
|
|
13
|
+
include Para::Admin::ResourceControllerConcerns
|
|
14
|
+
|
|
12
15
|
after_action :attach_resource_to_component, only: [:create]
|
|
13
16
|
after_action :remove_resource_from_component, only: [:destroy]
|
|
14
17
|
|
|
15
18
|
def index
|
|
16
|
-
@q = @component.resources.
|
|
19
|
+
@q = @component.resources.ransack(params[:q])
|
|
17
20
|
@resources = distinct_search_results(@q).page(params[:page]).per(params[:per_page])
|
|
18
21
|
|
|
19
22
|
# Sort collection for orderable and trees
|
|
@@ -51,17 +54,21 @@ module Para
|
|
|
51
54
|
private
|
|
52
55
|
|
|
53
56
|
def resource_model
|
|
54
|
-
@resource_model ||=
|
|
55
|
-
|
|
56
|
-
|
|
57
|
+
@resource_model ||= begin
|
|
58
|
+
type = params[:type].presence || (params[:resource] && params[:resource][:type])
|
|
59
|
+
|
|
60
|
+
if type && @component.subclassable_with?(type)
|
|
61
|
+
type.constantize
|
|
57
62
|
else
|
|
58
63
|
super
|
|
59
64
|
end
|
|
65
|
+
end
|
|
60
66
|
end
|
|
61
67
|
|
|
62
68
|
def load_and_authorize_crud_resource
|
|
63
69
|
loader = self.class.cancan_resource_class.new(
|
|
64
|
-
self, resource_name, parent: false, class: resource_model.name,
|
|
70
|
+
self, resource_name, parent: false, class: resource_model.name,
|
|
71
|
+
find_by: :id, bypass_params_assignation: true
|
|
65
72
|
)
|
|
66
73
|
|
|
67
74
|
loader.load_and_authorize_resource
|
|
@@ -3,11 +3,13 @@ require_dependency "para/application_controller"
|
|
|
3
3
|
module Para
|
|
4
4
|
module Admin
|
|
5
5
|
class FormResourcesController < Para::Admin::ResourcesController
|
|
6
|
-
include Para::Admin::ResourceControllerConcerns
|
|
7
|
-
|
|
8
6
|
before_action :load_and_authorize_form
|
|
9
7
|
after_action :attach_resource_to_component, only: [:create]
|
|
10
8
|
|
|
9
|
+
# Include after resource loading to allow the concern to use the resource
|
|
10
|
+
# in before_action hooks
|
|
11
|
+
include Para::Admin::ResourceControllerConcerns
|
|
12
|
+
|
|
11
13
|
private
|
|
12
14
|
|
|
13
15
|
def attach_resource_to_component
|
|
@@ -19,7 +21,7 @@ module Para
|
|
|
19
21
|
def load_and_authorize_form
|
|
20
22
|
loader = self.class.cancan_resource_class.new(
|
|
21
23
|
self, :resource, parent: false, class: resource_model.name,
|
|
22
|
-
singleton: true, through: :component
|
|
24
|
+
singleton: true, through: :component, bypass_params_assignation: true
|
|
23
25
|
)
|
|
24
26
|
|
|
25
27
|
loader.load_and_authorize_resource
|
|
@@ -4,6 +4,7 @@ module Para
|
|
|
4
4
|
module Admin
|
|
5
5
|
class ResourcesController < Para::Admin::BaseController
|
|
6
6
|
include Para::ModelHelper
|
|
7
|
+
include Para::Helpers::AttributesMappings
|
|
7
8
|
|
|
8
9
|
class_attribute :resource_name, :resource_class
|
|
9
10
|
load_and_authorize_component
|
|
@@ -17,6 +18,11 @@ module Para
|
|
|
17
18
|
# Assign component the resource belongs to it
|
|
18
19
|
resource.component = @component if resource.respond_to?(:component=)
|
|
19
20
|
|
|
21
|
+
# We overriden Cancan so it does not try to assign our params during the
|
|
22
|
+
# create action, allowing our attribute fields to parse them with an
|
|
23
|
+
# actual resource.
|
|
24
|
+
resource.assign_attributes(resource_params)
|
|
25
|
+
|
|
20
26
|
if resource.save
|
|
21
27
|
flash_message(:success, resource)
|
|
22
28
|
redirect_to after_form_submit_path
|
|
@@ -86,7 +92,7 @@ module Para
|
|
|
86
92
|
end
|
|
87
93
|
|
|
88
94
|
def resource_model
|
|
89
|
-
self.class.resource_model
|
|
95
|
+
@resource_model ||= self.class.resource_model
|
|
90
96
|
end
|
|
91
97
|
|
|
92
98
|
def resource
|
|
@@ -112,8 +118,8 @@ module Para
|
|
|
112
118
|
end
|
|
113
119
|
|
|
114
120
|
def parse_resource_params(hash)
|
|
115
|
-
model_field_mappings(resource_model).fields.each do |field|
|
|
116
|
-
field.parse_input(hash)
|
|
121
|
+
model_field_mappings(resource_model, mappings: attributes_mappings_for(hash)).fields.each do |field|
|
|
122
|
+
field.parse_input(hash, resource)
|
|
117
123
|
end
|
|
118
124
|
|
|
119
125
|
hash
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Para
|
|
2
|
+
module Admin
|
|
3
|
+
class SearchController < ApplicationController
|
|
4
|
+
include Para::ModelHelper
|
|
5
|
+
include Para::SearchHelper
|
|
6
|
+
|
|
7
|
+
def index
|
|
8
|
+
model = params[:model_name].constantize
|
|
9
|
+
attributes = model_field_mappings(model).fields
|
|
10
|
+
@results = model.ransack(fulltext_search_param_for(attributes) => params[:search]).result
|
|
11
|
+
render layout: false
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
module Para
|
|
2
2
|
class ApplicationController < ActionController::Base
|
|
3
|
-
|
|
3
|
+
before_action :add_admin_home_breadcrumb
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
def admin?
|
|
6
|
+
true
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
def add_admin_home_breadcrumb
|
|
12
|
+
add_breadcrumb :home, admin_path
|
|
13
|
+
end
|
|
6
14
|
end
|
|
7
15
|
end
|
|
@@ -2,23 +2,23 @@ module Para
|
|
|
2
2
|
module Admin
|
|
3
3
|
module PageHelper
|
|
4
4
|
def page_top_bar(options = {})
|
|
5
|
-
content_tag(:div, class: 'page-title') do
|
|
5
|
+
content_tag(:div, class: 'page-title row') do
|
|
6
6
|
content_tag(:h1, options[:title]) +
|
|
7
7
|
|
|
8
8
|
if (actions = actions_for(options[:type]))
|
|
9
|
-
|
|
10
|
-
actions.map(&method(:build_action)).join('').html_safe
|
|
11
|
-
end
|
|
9
|
+
actions.map(&method(:build_action)).join('').html_safe
|
|
12
10
|
end
|
|
13
11
|
end
|
|
14
12
|
end
|
|
15
13
|
|
|
16
14
|
def build_action(action)
|
|
17
|
-
|
|
18
|
-
(
|
|
19
|
-
(
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
content_tag(:div, class: 'actions-control pull-right') do
|
|
16
|
+
link_to(action[:url], class: 'btn btn-default btn-shadow') do
|
|
17
|
+
(
|
|
18
|
+
(fa_icon(action[:icon], class: 'fa-fw') if action[:icon]) +
|
|
19
|
+
action[:label]
|
|
20
|
+
).html_safe
|
|
21
|
+
end
|
|
22
22
|
end
|
|
23
23
|
end
|
|
24
24
|
|
|
@@ -1,14 +1,5 @@
|
|
|
1
1
|
module Para
|
|
2
2
|
module ApplicationHelper
|
|
3
|
-
include Para::
|
|
4
|
-
include Para::ModelHelper
|
|
5
|
-
include Para::OrderingHelper
|
|
6
|
-
include Para::NavigationHelper
|
|
7
|
-
include Para::FormHelper
|
|
8
|
-
include Para::MarkupHelper
|
|
9
|
-
include Para::TagHelper
|
|
10
|
-
include Para::TreeHelper
|
|
11
|
-
include Para::FlashHelper
|
|
12
|
-
include Para::TranslationsHelper
|
|
3
|
+
include Para::Helpers::ResourceName
|
|
13
4
|
end
|
|
14
5
|
end
|
|
@@ -3,7 +3,8 @@ module Para
|
|
|
3
3
|
def para_form_for(resource, options = {}, &block)
|
|
4
4
|
default_options = {
|
|
5
5
|
as: :resource,
|
|
6
|
-
wrapper: :
|
|
6
|
+
wrapper: :vertical_form,
|
|
7
|
+
wrapper_mappings: Para::SimpleFormConfig.wrapper_mappings,
|
|
7
8
|
html: { class: '', data: { :'para-form' => true } }
|
|
8
9
|
}
|
|
9
10
|
|
|
@@ -11,17 +12,13 @@ module Para
|
|
|
11
12
|
|
|
12
13
|
options[:html][:class] = [
|
|
13
14
|
options[:html][:class].presence,
|
|
14
|
-
'form-
|
|
15
|
+
'form-vertical forms-outline'
|
|
15
16
|
].compact.join(' ')
|
|
16
17
|
|
|
17
18
|
unless options.key?(:url)
|
|
18
19
|
options[:url] = @component.relation_path(resource)
|
|
19
20
|
end
|
|
20
21
|
|
|
21
|
-
if options.fetch(:fixed_actions, true)
|
|
22
|
-
default_options[:html][:class] << ' form-fixed-actions'
|
|
23
|
-
end
|
|
24
|
-
|
|
25
22
|
simple_form_for(resource, options) do |form|
|
|
26
23
|
capture { block.call(form) }.tap do |content|
|
|
27
24
|
# Append hidden field with type if resource is subclassable
|
|
@@ -29,6 +26,8 @@ module Para
|
|
|
29
26
|
if @component.subclassable? && resource.new_record?
|
|
30
27
|
content << form.hidden_field(:type, value: resource.type)
|
|
31
28
|
end
|
|
29
|
+
|
|
30
|
+
content << form.attributes_mappings_field_for(form)
|
|
32
31
|
end
|
|
33
32
|
end
|
|
34
33
|
end
|
|
@@ -5,11 +5,21 @@ module Para
|
|
|
5
5
|
model_field_mappings(model).fields
|
|
6
6
|
end
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
# Second argument can be the whitelist_attributes array or keyword
|
|
9
|
+
# arguments. This is to ensure backwards compatibility with old plugins.
|
|
10
|
+
#
|
|
11
|
+
def model_field_mappings(model, options = {})
|
|
12
|
+
if Array == options
|
|
13
|
+
whitelist_attributes = options
|
|
14
|
+
else
|
|
15
|
+
whitelist_attributes = options.fetch(:whitelist_attributes, nil)
|
|
16
|
+
mappings = options.fetch(:mappings, {})
|
|
17
|
+
end
|
|
18
|
+
|
|
9
19
|
store_key = ['model', 'mappings', model.name.underscore].join(':')
|
|
10
20
|
|
|
11
|
-
Para
|
|
12
|
-
model, whitelist_attributes:
|
|
21
|
+
Para::AttributeFieldMappings.new(
|
|
22
|
+
model, whitelist_attributes: whitelist_attributes, mappings: mappings
|
|
13
23
|
)
|
|
14
24
|
end
|
|
15
25
|
|