para 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +65 -0
- data/Rakefile +21 -0
- data/app/assets/images/para/admin/bg.png +0 -0
- data/app/assets/javascripts/admin/app.coffee +1 -0
- data/app/assets/javascripts/para/admin/table.coffee +46 -0
- data/app/assets/javascripts/para/admin/theme_actions.coffee +26 -0
- data/app/assets/javascripts/para/admin/tree.coffee +53 -0
- data/app/assets/javascripts/para/admin.coffee +18 -0
- data/app/assets/javascripts/para/application.js +13 -0
- data/app/assets/javascripts/para/inputs/nested_many.coffee +57 -0
- data/app/assets/javascripts/para/lib/ajax.coffee +11 -0
- data/app/assets/stylesheets/admin/app.sass +0 -0
- data/app/assets/stylesheets/admin/theme.sass +0 -0
- data/app/assets/stylesheets/para/admin/theme/_base.sass +170 -0
- data/app/assets/stylesheets/para/admin/theme/_breadcrumb.sass +29 -0
- data/app/assets/stylesheets/para/admin/theme/_buttons.sass +24 -0
- data/app/assets/stylesheets/para/admin/theme/_checkable.sass +107 -0
- data/app/assets/stylesheets/para/admin/theme/_commonds.sass +213 -0
- data/app/assets/stylesheets/para/admin/theme/_dropdown.sass +53 -0
- data/app/assets/stylesheets/para/admin/theme/_form.sass +141 -0
- data/app/assets/stylesheets/para/admin/theme/_list.sass +138 -0
- data/app/assets/stylesheets/para/admin/theme/_navigation.sass +287 -0
- data/app/assets/stylesheets/para/admin/theme/_navtabs.sass +127 -0
- data/app/assets/stylesheets/para/admin/theme/_orderable.sass +44 -0
- data/app/assets/stylesheets/para/admin/theme/_panel.sass +288 -0
- data/app/assets/stylesheets/para/admin/theme/_responsive.sass +123 -0
- data/app/assets/stylesheets/para/admin/theme/_sorting.sass +30 -0
- data/app/assets/stylesheets/para/admin/theme/_table.sass +24 -0
- data/app/assets/stylesheets/para/admin/theme/_tree.sass +74 -0
- data/app/assets/stylesheets/para/admin/theme/_variables.sass +31 -0
- data/app/assets/stylesheets/para/admin/theme.sass +22 -0
- data/app/assets/stylesheets/para/admin.sass +10 -0
- data/app/assets/stylesheets/para/application.css +15 -0
- data/app/assets/stylesheets/para/lib/_variables.scss +646 -0
- data/app/assets/stylesheets/para/overrides/datetimepicker.sass +17 -0
- data/app/assets/stylesheets/para/overrides/fuelux.sass +43 -0
- data/app/assets/stylesheets/para/overrides/jasny.bootstrap.sass +41 -0
- data/app/assets/stylesheets/para/overrides/redactor.sass +88 -0
- data/app/assets/stylesheets/para/overrides/responsive.sass +63 -0
- data/app/assets/stylesheets/para/overrides/selectize.sass +45 -0
- data/app/assets/stylesheets/para/overrides/slider.sass +13 -0
- data/app/assets/stylesheets/para/overrides/theme.sass +172 -0
- data/app/controllers/concerns/para/admin/resource_controller_concerns.rb +17 -0
- data/app/controllers/para/admin/base_controller.rb +46 -0
- data/app/controllers/para/admin/component_controller.rb +9 -0
- data/app/controllers/para/admin/crud_component_controller.rb +17 -0
- data/app/controllers/para/admin/crud_resources_controller.rb +71 -0
- data/app/controllers/para/admin/main_controller.rb +8 -0
- data/app/controllers/para/admin/resources_controller.rb +163 -0
- data/app/controllers/para/admin/settings_component_controller.rb +11 -0
- data/app/controllers/para/admin/settings_form_controller.rb +21 -0
- data/app/controllers/para/admin/singleton_resource_component_controller.rb +14 -0
- data/app/controllers/para/admin/singleton_resources_controller.rb +30 -0
- data/app/controllers/para/application_controller.rb +7 -0
- data/app/decorators/para/component/base_decorator.rb +48 -0
- data/app/decorators/para/component/crud_decorator.rb +32 -0
- data/app/decorators/para/component/settings_decorator.rb +11 -0
- data/app/decorators/para/component/singleton_resource_decorator.rb +11 -0
- data/app/decorators/para/component_section_decorator.rb +4 -0
- data/app/helpers/para/admin/base_helper.rb +57 -0
- data/app/helpers/para/admin/component_groups_helper.rb +4 -0
- data/app/helpers/para/admin/components_helper.rb +4 -0
- data/app/helpers/para/admin/resources_helper.rb +27 -0
- data/app/helpers/para/application_helper.rb +14 -0
- data/app/helpers/para/exports_helper.rb +11 -0
- data/app/helpers/para/flash_helper.rb +48 -0
- data/app/helpers/para/form_helper.rb +28 -0
- data/app/helpers/para/markup_helper.rb +15 -0
- data/app/helpers/para/model_helper.rb +38 -0
- data/app/helpers/para/navigation_helper.rb +8 -0
- data/app/helpers/para/ordering_helper.rb +20 -0
- data/app/helpers/para/search_helper.rb +22 -0
- data/app/helpers/para/tag_helper.rb +50 -0
- data/app/helpers/para/tree_helper.rb +41 -0
- data/app/models/para/component/base.rb +70 -0
- data/app/models/para/component/crud.rb +45 -0
- data/app/models/para/component/resource.rb +33 -0
- data/app/models/para/component/settings.rb +17 -0
- data/app/models/para/component/singleton_resource.rb +25 -0
- data/app/models/para/component_resource.rb +6 -0
- data/app/models/para/component_section.rb +18 -0
- data/app/views/layouts/para/admin.html.haml +32 -0
- data/app/views/layouts/para/application.html.erb +14 -0
- data/app/views/para/admin/component_sections/_form.html.haml +10 -0
- data/app/views/para/admin/component_sections/edit.html.haml +5 -0
- data/app/views/para/admin/component_sections/new.html.haml +5 -0
- data/app/views/para/admin/components/_form.html.haml +15 -0
- data/app/views/para/admin/components/new.html.haml +4 -0
- data/app/views/para/admin/crud_component/show.html.haml +4 -0
- data/app/views/para/admin/dashboard.html.haml +10 -0
- data/app/views/para/admin/main/index.html.haml +1 -0
- data/app/views/para/admin/resources/_exports_menu.html.haml +12 -0
- data/app/views/para/admin/resources/_fields.html.haml +5 -0
- data/app/views/para/admin/resources/_filters.html.haml +9 -0
- data/app/views/para/admin/resources/_form.html.haml +6 -0
- data/app/views/para/admin/resources/_list.html.haml +22 -0
- data/app/views/para/admin/resources/_table.html.haml +8 -0
- data/app/views/para/admin/resources/_tree.html.haml +15 -0
- data/app/views/para/admin/resources/_tree_item.html.haml +16 -0
- data/app/views/para/admin/resources/edit.html.haml +6 -0
- data/app/views/para/admin/resources/new.html.haml +6 -0
- data/app/views/para/admin/settings_component/show.html.haml +12 -0
- data/app/views/para/admin/shared/_breadcrumb.html.haml +3 -0
- data/app/views/para/admin/shared/_header.html.haml +27 -0
- data/app/views/para/admin/shared/_navigation.html.haml +21 -0
- data/app/views/para/admin/singleton_resource_component/show.html.haml +5 -0
- data/app/views/para/inputs/_nested_many.html.haml +10 -0
- data/app/views/para/inputs/_nested_many_container.html.haml +19 -0
- data/app/views/para/inputs/_nested_one.html.haml +3 -0
- data/config/locales/en.yml +86 -0
- data/config/locales/fr.yml +101 -0
- data/db/migrate/20140911091225_create_para_components.rb +19 -0
- data/db/migrate/20140911112150_add_slug_to_para_components.rb +6 -0
- data/db/migrate/20140929125733_create_para_component_sections.rb +8 -0
- data/db/migrate/20140929131111_add_identifier_to_para_component_sections.rb +5 -0
- data/db/migrate/20140930121822_add_position_to_para_component_section.rb +5 -0
- data/db/migrate/20150129170710_create_para_component_resources.rb +13 -0
- data/db/migrate/20150203173219_add_identifier_to_para_components.rb +5 -0
- data/lib/generators/para/admin_user/admin_user_generator.rb +16 -0
- data/lib/generators/para/component/component_generator.rb +59 -0
- data/lib/generators/para/component/templates/component.rb +3 -0
- data/lib/generators/para/component/templates/component_controller.rb +7 -0
- data/lib/generators/para/component/templates/show.html.haml +2 -0
- data/lib/generators/para/exporter/exporter_generator.rb +42 -0
- data/lib/generators/para/exporter/templates/base_exporter.rb +15 -0
- data/lib/generators/para/exporter/templates/csv_exporter.rb +13 -0
- data/lib/generators/para/form/form_generator.rb +15 -0
- data/lib/generators/para/form/templates/_form.html.haml +7 -0
- data/lib/generators/para/install/install_generator.rb +112 -0
- data/lib/generators/para/install/templates/components.rb +13 -0
- data/lib/generators/para/install/templates/initializer.rb +23 -0
- data/lib/generators/para/nested_fields/nested_fields_generator.rb +15 -0
- data/lib/generators/para/nested_fields/templates/_nested_fields.html.haml +3 -0
- data/lib/generators/para/orderable/orderable_generator.rb +53 -0
- data/lib/generators/para/orderable/templates/orderable_migration.rb +6 -0
- data/lib/generators/para/resource/resource_generator.rb +71 -0
- data/lib/generators/para/resource/templates/resource_controller.rb +5 -0
- data/lib/generators/para/table/table_generator.rb +34 -0
- data/lib/generators/para/table/templates/_table.html.haml +10 -0
- data/lib/para/attribute_field/base.rb +77 -0
- data/lib/para/attribute_field/belongs_to.rb +29 -0
- data/lib/para/attribute_field/boolean.rb +15 -0
- data/lib/para/attribute_field/datetime.rb +9 -0
- data/lib/para/attribute_field/file.rb +20 -0
- data/lib/para/attribute_field/has_many.rb +31 -0
- data/lib/para/attribute_field/image.rb +25 -0
- data/lib/para/attribute_field/nested_many.rb +26 -0
- data/lib/para/attribute_field/nested_one.rb +27 -0
- data/lib/para/attribute_field/password.rb +18 -0
- data/lib/para/attribute_field/redactor.rb +20 -0
- data/lib/para/attribute_field/relation.rb +52 -0
- data/lib/para/attribute_field/translation.rb +9 -0
- data/lib/para/attribute_field_mappings.rb +82 -0
- data/lib/para/cloneable.rb +20 -0
- data/lib/para/component/exportable.rb +25 -0
- data/lib/para/component.rb +27 -0
- data/lib/para/components_configuration.rb +156 -0
- data/lib/para/config.rb +21 -0
- data/lib/para/engine.rb +59 -0
- data/lib/para/errors.rb +15 -0
- data/lib/para/exporter/base.rb +27 -0
- data/lib/para/exporter/csv.rb +49 -0
- data/lib/para/exporter.rb +57 -0
- data/lib/para/ext/cancan.rb +26 -0
- data/lib/para/ext/paperclip.rb +67 -0
- data/lib/para/ext.rb +13 -0
- data/lib/para/form_builder/containers.rb +70 -0
- data/lib/para/form_builder/field_mappings.rb +9 -0
- data/lib/para/form_builder/nested_form.rb +80 -0
- data/lib/para/form_builder/ordering.rb +15 -0
- data/lib/para/form_builder/settings.rb +24 -0
- data/lib/para/form_builder.rb +22 -0
- data/lib/para/generators/field_helpers.rb +32 -0
- data/lib/para/generators/name_helpers.rb +9 -0
- data/lib/para/generators/named_base.rb +7 -0
- data/lib/para/generators.rb +11 -0
- data/lib/para/inputs/nested_many_input.rb +40 -0
- data/lib/para/inputs/nested_one_input.rb +24 -0
- data/lib/para/inputs.rb +11 -0
- data/lib/para/markup/alert.rb +37 -0
- data/lib/para/markup/component.rb +20 -0
- data/lib/para/markup/modal.rb +52 -0
- data/lib/para/markup/panel.rb +41 -0
- data/lib/para/markup/resources_table.rb +178 -0
- data/lib/para/markup.rb +10 -0
- data/lib/para/model_field_parsers/base.rb +20 -0
- data/lib/para/model_field_parsers/devise.rb +37 -0
- data/lib/para/model_field_parsers/globalize.rb +23 -0
- data/lib/para/model_field_parsers/orderable.rb +15 -0
- data/lib/para/model_field_parsers/paperclip.rb +51 -0
- data/lib/para/model_field_parsers/redactor.rb +19 -0
- data/lib/para/model_field_parsers/relations.rb +67 -0
- data/lib/para/model_field_parsers.rb +22 -0
- data/lib/para/orderable.rb +44 -0
- data/lib/para/routes.rb +49 -0
- data/lib/para/version.rb +3 -0
- data/lib/para.rb +65 -0
- data/lib/rails/relation_length_validator.rb +45 -0
- data/lib/rails/routing_mapper.rb +27 -0
- data/lib/tasks/para_tasks.rake +22 -0
- metadata +595 -0
@@ -0,0 +1,41 @@
|
|
1
|
+
/* Jasny Bootstrap Fileupload overrides */
|
2
|
+
|
3
|
+
@import "para/admin/theme/variables"
|
4
|
+
@import "compass/css3/border-radius"
|
5
|
+
|
6
|
+
.fileinput
|
7
|
+
margin-bottom: 0
|
8
|
+
display: block
|
9
|
+
.uneditable-input
|
10
|
+
background-color: $input-bg-disabled
|
11
|
+
|
12
|
+
.fileinput-new.input-group .btn-file
|
13
|
+
.fileinput.input-group .btn-file
|
14
|
+
+border-right-radius($border-radius-base)
|
15
|
+
border-color: $input-border
|
16
|
+
|
17
|
+
.fileinput.input-group .input-group-btn
|
18
|
+
.form-control.file
|
19
|
+
padding: 0 !important
|
20
|
+
position: absolute
|
21
|
+
|
22
|
+
.fileinput
|
23
|
+
.input-group-btn > .btn:hover,
|
24
|
+
.input-group-btn > .btn:focus,
|
25
|
+
.input-group-btn > .btn:active
|
26
|
+
z-index: 0
|
27
|
+
|
28
|
+
.fileinput-preview.thumbnail
|
29
|
+
width: auto
|
30
|
+
height: auto
|
31
|
+
min-width: 80px
|
32
|
+
min-height: 80px
|
33
|
+
max-height: 500px
|
34
|
+
margin-bottom: 0
|
35
|
+
margin-top: 5px
|
36
|
+
background-color: $input-bg
|
37
|
+
|
38
|
+
.empty-thumbnail
|
39
|
+
width: 250px
|
40
|
+
height: 200px
|
41
|
+
background-color: $input-bg
|
@@ -0,0 +1,88 @@
|
|
1
|
+
@import "para/admin/theme/variables"
|
2
|
+
@import "compass/css3/border-radius"
|
3
|
+
@import "compass/css3/box-shadow"
|
4
|
+
|
5
|
+
.redactor-button-disabled
|
6
|
+
&:hover,
|
7
|
+
&:focus
|
8
|
+
background-color: transparent !important
|
9
|
+
color: #333 !important
|
10
|
+
cursor: disabled
|
11
|
+
|
12
|
+
.redactor-dropdown a
|
13
|
+
color: $dropdown-link-color
|
14
|
+
&:hover,
|
15
|
+
&:focus
|
16
|
+
background-color: $dropdown-link-hover-bg
|
17
|
+
color: $dropdown-link-hover-color !important
|
18
|
+
|
19
|
+
.redactor-box
|
20
|
+
.redactor-toolbar
|
21
|
+
/* Override z-index because we don't whant */
|
22
|
+
/* redactor_toolbar fixed somewhere or on top of everythink ..*/
|
23
|
+
z-index: 1 !important
|
24
|
+
+box-shadow(none)
|
25
|
+
+border-radius($input-border-radius $input-border-radius 0 0)
|
26
|
+
border: 1px solid $input-border
|
27
|
+
li a
|
28
|
+
&:hover,
|
29
|
+
&:focus
|
30
|
+
background-color: $btn-primary-bg
|
31
|
+
color: $btn-primary-color
|
32
|
+
|
33
|
+
.redactor-editor
|
34
|
+
background-color: $input-bg
|
35
|
+
border: 1px solid $input-border
|
36
|
+
border-top-width: 0px
|
37
|
+
+border-radius(0 0 $input-border-radius $input-border-radius)
|
38
|
+
&:focus
|
39
|
+
border-color: $input-border-focus
|
40
|
+
background: #FFF
|
41
|
+
&[disabled], &[readonly]
|
42
|
+
color: $gray-dark
|
43
|
+
&[disabled]:focus, &[readonly]:focus
|
44
|
+
background: $input-bg-disabled
|
45
|
+
color: $gray-dark
|
46
|
+
border-color: $gray-lighter
|
47
|
+
|
48
|
+
textarea.form-control
|
49
|
+
background-color: $input-bg
|
50
|
+
color: $input-color
|
51
|
+
border: 1px solid $input-border
|
52
|
+
border-top-width: 0px
|
53
|
+
&:focus
|
54
|
+
background-color: #111
|
55
|
+
color: $gray-lighter
|
56
|
+
|
57
|
+
.redactor-editor
|
58
|
+
div.row
|
59
|
+
margin-left: -15px
|
60
|
+
margin-right: -15px
|
61
|
+
margin-bottom: 0
|
62
|
+
div[class^=col-lg-], div[class^=col-md-], div[class^=col-sm-], div[class^=col-xs-]
|
63
|
+
padding-left: 15px
|
64
|
+
padding-right: 15px
|
65
|
+
border: 1px dashed $gray-light
|
66
|
+
margin-bottom: 0
|
67
|
+
|
68
|
+
#redactor-modal
|
69
|
+
input[type="text"],
|
70
|
+
input[type="password"],
|
71
|
+
input[type="email"],
|
72
|
+
textarea
|
73
|
+
border-color: $input-border
|
74
|
+
background-color: $input-bg
|
75
|
+
color: $input-color
|
76
|
+
+box-shadow(none)
|
77
|
+
&:focus
|
78
|
+
background-color: #fff
|
79
|
+
border-color: $input-border-focus
|
80
|
+
+box-shadow(none)
|
81
|
+
|
82
|
+
footer
|
83
|
+
button.redactor-modal-action-btn
|
84
|
+
background-color: $btn-primary-bg
|
85
|
+
color: $btn-primary-color
|
86
|
+
&:hover,
|
87
|
+
&:focus
|
88
|
+
background-color: darken($btn-primary-bg, 5%)
|
@@ -0,0 +1,63 @@
|
|
1
|
+
@import "para/admin/theme/variables"
|
2
|
+
@import "compass/css3/shared"
|
3
|
+
|
4
|
+
$experimental-support-for-opera: true
|
5
|
+
|
6
|
+
@media (max-width: $screen-xs-max)
|
7
|
+
.control-label
|
8
|
+
margin-top: 10px
|
9
|
+
margin-bottom: 0
|
10
|
+
|
11
|
+
/* Small devices (tablets, 768px and up) */
|
12
|
+
@media (min-width: $screen-sm-min)
|
13
|
+
legend
|
14
|
+
margin-left: 25%
|
15
|
+
|
16
|
+
.form-inputs > legend
|
17
|
+
margin-left: 24%
|
18
|
+
padding-left: 12px
|
19
|
+
|
20
|
+
.form-fixed-actions
|
21
|
+
margin-bottom: 90px
|
22
|
+
|
23
|
+
.form-horizontal .control-label
|
24
|
+
padding-top: 15px
|
25
|
+
|
26
|
+
.form-group-separated
|
27
|
+
.form-group
|
28
|
+
padding-right: 25px
|
29
|
+
.collapse
|
30
|
+
.form-group
|
31
|
+
padding-right: 0
|
32
|
+
|
33
|
+
@media (min-width: $screen-md-min)
|
34
|
+
|
35
|
+
/*
|
36
|
+
* Medium devices (desktops, 1025px and up)
|
37
|
+
* Note : Breakpoint defined by the theme for the sidebar to fix on top
|
38
|
+
*/
|
39
|
+
@media (min-width: 1025px)
|
40
|
+
.form-fixed-actions
|
41
|
+
.form-actions
|
42
|
+
+experimental-value(width, calc(100% - 270px))
|
43
|
+
|
44
|
+
/* Medium high devices (desktops, 1200px and up) */
|
45
|
+
@media (min-width: 1200px)
|
46
|
+
.form-group-separated
|
47
|
+
.form-group
|
48
|
+
padding-right: 150px
|
49
|
+
.collapse
|
50
|
+
.form-group
|
51
|
+
padding-right: 0
|
52
|
+
|
53
|
+
.form-inputs > legend
|
54
|
+
margin-left: 21%
|
55
|
+
|
56
|
+
/* Large devices (large desktops, 1400px and up) */
|
57
|
+
@media (min-width: 1500px)
|
58
|
+
.form-group-separated
|
59
|
+
.form-group
|
60
|
+
padding-right: 250px
|
61
|
+
.collapse
|
62
|
+
.form-group
|
63
|
+
padding-right: 0
|
@@ -0,0 +1,45 @@
|
|
1
|
+
@import "para/admin/theme/variables"
|
2
|
+
@import "compass/css3/border-radius"
|
3
|
+
@import "compass/css3/box-shadow"
|
4
|
+
|
5
|
+
.selectize-dropdown,
|
6
|
+
.selectize-dropdown.form-control
|
7
|
+
+border-radius($border-radius-base)
|
8
|
+
|
9
|
+
.selectize-input,
|
10
|
+
.selectize-input.full
|
11
|
+
border-color: $input-border
|
12
|
+
+border-radius($input-border-radius)
|
13
|
+
&.focus
|
14
|
+
border-color: $input-border-focus
|
15
|
+
+box-shadow(none)
|
16
|
+
&.dropdown-active
|
17
|
+
+border-radius($input-border-radius)
|
18
|
+
|
19
|
+
.selectize-dropdown,
|
20
|
+
.selectize-input,
|
21
|
+
.selectize-input input
|
22
|
+
color: $input-color
|
23
|
+
|
24
|
+
.selectize-input,
|
25
|
+
.selectize-input.full,
|
26
|
+
.selectize-input.not-full
|
27
|
+
background: $input-bg
|
28
|
+
|
29
|
+
.selectize-dropdown
|
30
|
+
[data-selectable]
|
31
|
+
background-color: $dropdown-bg
|
32
|
+
color: $dropdown-link-color
|
33
|
+
.active
|
34
|
+
background-color: $dropdown-link-hover-bg
|
35
|
+
color: $dropdown-link-hover-color
|
36
|
+
.selected
|
37
|
+
background-color: $dropdown-link-active-bg
|
38
|
+
color: $dropdown-link-active-color
|
39
|
+
|
40
|
+
.selectize-control.multi .selectize-input > div
|
41
|
+
background-color: $gray
|
42
|
+
|
43
|
+
.selectize-dropdown-content
|
44
|
+
padding: 0
|
45
|
+
|
@@ -0,0 +1,172 @@
|
|
1
|
+
@import "para/admin/theme/variables"
|
2
|
+
@import "compass/css3/text-shadow"
|
3
|
+
@import "compass/css3/inline-block"
|
4
|
+
@import "compass/css3/transition"
|
5
|
+
@import "compass/css3/box-shadow"
|
6
|
+
@import "compass/css3/border-radius"
|
7
|
+
@import "compass/css3/transform"
|
8
|
+
|
9
|
+
.animated
|
10
|
+
-webkit-animation-duration: 100ms
|
11
|
+
animation-duration: 100ms
|
12
|
+
|
13
|
+
// More button style
|
14
|
+
|
15
|
+
@mixin tab-focus()
|
16
|
+
outline: none
|
17
|
+
outline-offset: 0
|
18
|
+
|
19
|
+
@mixin button-hover-focus-active($color-border, $color-bg)
|
20
|
+
position: relative
|
21
|
+
+box-shadow(0px 2px darken($color-border, 10%) )
|
22
|
+
+single-transition(none)
|
23
|
+
&:hover
|
24
|
+
top: 1px
|
25
|
+
+box-shadow(0px 1px darken($color-border, 10%) )
|
26
|
+
background-color: $color-bg
|
27
|
+
border-color: $color-border
|
28
|
+
&:focus,
|
29
|
+
&:active,
|
30
|
+
&.active,
|
31
|
+
.open &.dropdown-toggle
|
32
|
+
background-color: darken($color-bg, 7%)
|
33
|
+
top: 2px
|
34
|
+
+box-shadow(0px 0 darken($color-border, 10%))
|
35
|
+
border-color: $color-border
|
36
|
+
&:hover
|
37
|
+
background-color: darken($color-bg, 7%)
|
38
|
+
|
39
|
+
@mixin button-variant-inverse($color-border, $color-bg)
|
40
|
+
color: $color-border
|
41
|
+
background-color: transparent
|
42
|
+
+box-shadow(none)
|
43
|
+
+single-transition(all, .2s, linear)
|
44
|
+
&:hover
|
45
|
+
+box-shadow(none)
|
46
|
+
top: 0
|
47
|
+
color: #fff
|
48
|
+
background-color: $color-bg
|
49
|
+
outline: none
|
50
|
+
outline: 0
|
51
|
+
&:focus,
|
52
|
+
&:active,
|
53
|
+
&.active,
|
54
|
+
.open &.dropdown-toggle
|
55
|
+
+box-shadow(none)
|
56
|
+
top: 0
|
57
|
+
color: #fff
|
58
|
+
background-color: darken($color-bg, 7%)
|
59
|
+
outline: none
|
60
|
+
outline: 0
|
61
|
+
|
62
|
+
.btn,
|
63
|
+
input,
|
64
|
+
textarea,
|
65
|
+
select,
|
66
|
+
button
|
67
|
+
+single-transition(all, .1s, linear)
|
68
|
+
&,
|
69
|
+
&:active,
|
70
|
+
&.active
|
71
|
+
&:focus
|
72
|
+
+tab-focus()
|
73
|
+
&:hover,
|
74
|
+
&:focus
|
75
|
+
+tab-focus()
|
76
|
+
|
77
|
+
|
78
|
+
.btn-default
|
79
|
+
+button-hover-focus-active($btn-default-border, $btn-default-bg)
|
80
|
+
&.btn-inverse
|
81
|
+
+button-variant-inverse($btn-default-border, $btn-default-bg)
|
82
|
+
color: $btn-default-color
|
83
|
+
&:hover,
|
84
|
+
&:focus,
|
85
|
+
&:active,
|
86
|
+
&.active,
|
87
|
+
.open &.dropdown-toggle
|
88
|
+
color: $btn-default-color
|
89
|
+
|
90
|
+
.btn-primary
|
91
|
+
+button-hover-focus-active($btn-primary-border, $btn-primary-bg)
|
92
|
+
&.btn-inverse
|
93
|
+
+button-variant-inverse($btn-primary-border, $btn-primary-bg)
|
94
|
+
|
95
|
+
.btn-warning
|
96
|
+
+button-hover-focus-active($btn-warning-border, $btn-warning-bg)
|
97
|
+
&.btn-inverse
|
98
|
+
+button-variant-inverse($btn-warning-border, $btn-warning-bg)
|
99
|
+
|
100
|
+
.btn-success
|
101
|
+
+button-hover-focus-active($btn-success-border, $btn-success-bg)
|
102
|
+
&.btn-inverse
|
103
|
+
+button-variant-inverse($btn-success-border, $btn-success-bg)
|
104
|
+
|
105
|
+
.btn-danger
|
106
|
+
+button-hover-focus-active($btn-danger-border, $btn-danger-bg)
|
107
|
+
&.btn-inverse
|
108
|
+
+button-variant-inverse($btn-danger-border, $btn-danger-bg)
|
109
|
+
|
110
|
+
.btn-info
|
111
|
+
+button-hover-focus-active($btn-info-border, $btn-info-bg)
|
112
|
+
&.btn-inverse
|
113
|
+
+button-variant-inverse($btn-info-border, $btn-info-bg)
|
114
|
+
|
115
|
+
// Badge
|
116
|
+
.label-primary,
|
117
|
+
.badge-primary
|
118
|
+
background-color: $brand-primary
|
119
|
+
|
120
|
+
.label-success,
|
121
|
+
.badge-success
|
122
|
+
background-color: $brand-success
|
123
|
+
|
124
|
+
.label-info,
|
125
|
+
.badge-info
|
126
|
+
background-color: $brand-info
|
127
|
+
|
128
|
+
.label-warning,
|
129
|
+
.badge-warning
|
130
|
+
background-color: $brand-warning
|
131
|
+
|
132
|
+
.label-danger,
|
133
|
+
.badge-danger
|
134
|
+
background-color: $brand-danger
|
135
|
+
|
136
|
+
// Table
|
137
|
+
.para-component-relation-table
|
138
|
+
td > img
|
139
|
+
height: 50px
|
140
|
+
|
141
|
+
.pull-right.btn-group
|
142
|
+
min-width: 97px
|
143
|
+
|
144
|
+
// Form
|
145
|
+
.input-group-btn
|
146
|
+
.btn,
|
147
|
+
.btn:hover,
|
148
|
+
.btn:focus,
|
149
|
+
.btn:active,
|
150
|
+
top: 0
|
151
|
+
+box-shadow(none)
|
152
|
+
|
153
|
+
.form-group-separated
|
154
|
+
&:after
|
155
|
+
clear: both
|
156
|
+
content: " "
|
157
|
+
display: table
|
158
|
+
|
159
|
+
.block.form-inputs
|
160
|
+
margin-bottom: 20px
|
161
|
+
padding: 0px 10px
|
162
|
+
background-color: $body-bg
|
163
|
+
|
164
|
+
.form-actions
|
165
|
+
padding-top: 20px
|
166
|
+
padding-left: 0
|
167
|
+
padding-bottom: 15px
|
168
|
+
padding-right: 15px
|
169
|
+
border-top: 1px dashed $gray
|
170
|
+
background-color: $body-bg
|
171
|
+
.btn
|
172
|
+
margin-bottom: 15px
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Para
|
2
|
+
module Admin
|
3
|
+
module ResourceControllerConcerns
|
4
|
+
def resource_model
|
5
|
+
@resource_model ||= @component.model
|
6
|
+
end
|
7
|
+
|
8
|
+
def resource
|
9
|
+
@resource ||= instance_variable_get(:"@#{ resource_name }")
|
10
|
+
end
|
11
|
+
|
12
|
+
def resource_name
|
13
|
+
resource_model.model_name.singular_route_key
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Para
|
2
|
+
module Admin
|
3
|
+
class BaseController < Para::ApplicationController
|
4
|
+
include Para::Admin::BaseHelper
|
5
|
+
|
6
|
+
if Para.config.authenticate_admin_method
|
7
|
+
before_filter Para.config.authenticate_admin_method
|
8
|
+
end
|
9
|
+
|
10
|
+
before_filter :load_component_sections
|
11
|
+
|
12
|
+
layout 'para/admin'
|
13
|
+
|
14
|
+
def current_admin
|
15
|
+
if Para.config.current_admin_method
|
16
|
+
send(Para.config.current_admin_method)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def current_ability
|
21
|
+
Ability.new(current_admin)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def load_component_sections
|
27
|
+
@component_sections = Para::ComponentSection.ordered.includes(:components)
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.load_and_authorize_component(options = {})
|
31
|
+
before_filter do
|
32
|
+
load_and_authorize_component(options)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def load_and_authorize_component(options = {})
|
37
|
+
options.reverse_merge!(class: 'Para::Component::Base', find_by: :slug)
|
38
|
+
|
39
|
+
loader = self.class.cancan_resource_class.new(self, :component, options)
|
40
|
+
loader.load_and_authorize_resource
|
41
|
+
|
42
|
+
ActiveDecorator::Decorator.instance.decorate(@component) if @component
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_dependency "para/application_controller"
|
2
|
+
|
3
|
+
module Para
|
4
|
+
module Admin
|
5
|
+
class CrudComponentController < Para::Admin::BaseController
|
6
|
+
load_and_authorize_component
|
7
|
+
|
8
|
+
def show
|
9
|
+
@q = @component.resources.search(params[:q])
|
10
|
+
@resources = @q.result.page(params[:page])
|
11
|
+
|
12
|
+
# Sort collection for orderable and trees
|
13
|
+
@resources = @resources.ordered if @resources.respond_to?(:ordered)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require_dependency "para/application_controller"
|
2
|
+
|
3
|
+
module Para
|
4
|
+
module Admin
|
5
|
+
class CrudResourcesController < Para::Admin::ResourcesController
|
6
|
+
include Para::Admin::ResourceControllerConcerns
|
7
|
+
|
8
|
+
before_filter :load_and_authorize_crud_resource
|
9
|
+
after_filter :attach_resource_to_component, only: [:create]
|
10
|
+
after_filter :remove_resource_from_component, only: [:destroy]
|
11
|
+
|
12
|
+
def clone
|
13
|
+
new_resource = resource.deep_clone include: resource.class.cloneable_associations
|
14
|
+
new_resource.save!
|
15
|
+
|
16
|
+
if new_resource.save
|
17
|
+
component_resource = Para::ComponentResource.where(
|
18
|
+
resource: resource
|
19
|
+
).first
|
20
|
+
|
21
|
+
if component_resource
|
22
|
+
Para::ComponentResource.create! do |record|
|
23
|
+
record.resource = new_resource
|
24
|
+
record.component = component_resource.component
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
flash_message(:success, new_resource)
|
29
|
+
redirect_to after_form_submit_path
|
30
|
+
else
|
31
|
+
flash_message(:error, new_resource)
|
32
|
+
render after_form_submit_path
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def export
|
37
|
+
if @component.exportable?
|
38
|
+
exporter = Para::Exporter.for(
|
39
|
+
resource_model.name, params[:format]
|
40
|
+
).new(@component.resources.search(params[:q]).result)
|
41
|
+
|
42
|
+
send_data exporter.render, type: exporter.mime_type,
|
43
|
+
disposition: exporter.disposition,
|
44
|
+
filename: exporter.file_name
|
45
|
+
else
|
46
|
+
redirect_to component_path(@component)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def load_and_authorize_crud_resource
|
53
|
+
loader = self.class.cancan_resource_class.new(
|
54
|
+
self, resource_name, parent: false, class: resource_model.name
|
55
|
+
)
|
56
|
+
|
57
|
+
loader.load_and_authorize_resource
|
58
|
+
end
|
59
|
+
|
60
|
+
def attach_resource_to_component
|
61
|
+
return unless resource.persisted? && @component.namespaced?
|
62
|
+
@component.add_resource(resource)
|
63
|
+
end
|
64
|
+
|
65
|
+
def remove_resource_from_component
|
66
|
+
return unless @component.namespaced?
|
67
|
+
@component.remove_resource(resource)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|