para 0.4.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.
Files changed (203) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +65 -0
  4. data/Rakefile +21 -0
  5. data/app/assets/images/para/admin/bg.png +0 -0
  6. data/app/assets/javascripts/admin/app.coffee +1 -0
  7. data/app/assets/javascripts/para/admin/table.coffee +46 -0
  8. data/app/assets/javascripts/para/admin/theme_actions.coffee +26 -0
  9. data/app/assets/javascripts/para/admin/tree.coffee +53 -0
  10. data/app/assets/javascripts/para/admin.coffee +18 -0
  11. data/app/assets/javascripts/para/application.js +13 -0
  12. data/app/assets/javascripts/para/inputs/nested_many.coffee +57 -0
  13. data/app/assets/javascripts/para/lib/ajax.coffee +11 -0
  14. data/app/assets/stylesheets/admin/app.sass +0 -0
  15. data/app/assets/stylesheets/admin/theme.sass +0 -0
  16. data/app/assets/stylesheets/para/admin/theme/_base.sass +170 -0
  17. data/app/assets/stylesheets/para/admin/theme/_breadcrumb.sass +29 -0
  18. data/app/assets/stylesheets/para/admin/theme/_buttons.sass +24 -0
  19. data/app/assets/stylesheets/para/admin/theme/_checkable.sass +107 -0
  20. data/app/assets/stylesheets/para/admin/theme/_commonds.sass +213 -0
  21. data/app/assets/stylesheets/para/admin/theme/_dropdown.sass +53 -0
  22. data/app/assets/stylesheets/para/admin/theme/_form.sass +141 -0
  23. data/app/assets/stylesheets/para/admin/theme/_list.sass +138 -0
  24. data/app/assets/stylesheets/para/admin/theme/_navigation.sass +287 -0
  25. data/app/assets/stylesheets/para/admin/theme/_navtabs.sass +127 -0
  26. data/app/assets/stylesheets/para/admin/theme/_orderable.sass +44 -0
  27. data/app/assets/stylesheets/para/admin/theme/_panel.sass +288 -0
  28. data/app/assets/stylesheets/para/admin/theme/_responsive.sass +123 -0
  29. data/app/assets/stylesheets/para/admin/theme/_sorting.sass +30 -0
  30. data/app/assets/stylesheets/para/admin/theme/_table.sass +24 -0
  31. data/app/assets/stylesheets/para/admin/theme/_tree.sass +74 -0
  32. data/app/assets/stylesheets/para/admin/theme/_variables.sass +31 -0
  33. data/app/assets/stylesheets/para/admin/theme.sass +22 -0
  34. data/app/assets/stylesheets/para/admin.sass +10 -0
  35. data/app/assets/stylesheets/para/application.css +15 -0
  36. data/app/assets/stylesheets/para/lib/_variables.scss +646 -0
  37. data/app/assets/stylesheets/para/overrides/datetimepicker.sass +17 -0
  38. data/app/assets/stylesheets/para/overrides/fuelux.sass +43 -0
  39. data/app/assets/stylesheets/para/overrides/jasny.bootstrap.sass +41 -0
  40. data/app/assets/stylesheets/para/overrides/redactor.sass +88 -0
  41. data/app/assets/stylesheets/para/overrides/responsive.sass +63 -0
  42. data/app/assets/stylesheets/para/overrides/selectize.sass +45 -0
  43. data/app/assets/stylesheets/para/overrides/slider.sass +13 -0
  44. data/app/assets/stylesheets/para/overrides/theme.sass +172 -0
  45. data/app/controllers/concerns/para/admin/resource_controller_concerns.rb +17 -0
  46. data/app/controllers/para/admin/base_controller.rb +46 -0
  47. data/app/controllers/para/admin/component_controller.rb +9 -0
  48. data/app/controllers/para/admin/crud_component_controller.rb +17 -0
  49. data/app/controllers/para/admin/crud_resources_controller.rb +71 -0
  50. data/app/controllers/para/admin/main_controller.rb +8 -0
  51. data/app/controllers/para/admin/resources_controller.rb +163 -0
  52. data/app/controllers/para/admin/settings_component_controller.rb +11 -0
  53. data/app/controllers/para/admin/settings_form_controller.rb +21 -0
  54. data/app/controllers/para/admin/singleton_resource_component_controller.rb +14 -0
  55. data/app/controllers/para/admin/singleton_resources_controller.rb +30 -0
  56. data/app/controllers/para/application_controller.rb +7 -0
  57. data/app/decorators/para/component/base_decorator.rb +48 -0
  58. data/app/decorators/para/component/crud_decorator.rb +32 -0
  59. data/app/decorators/para/component/settings_decorator.rb +11 -0
  60. data/app/decorators/para/component/singleton_resource_decorator.rb +11 -0
  61. data/app/decorators/para/component_section_decorator.rb +4 -0
  62. data/app/helpers/para/admin/base_helper.rb +57 -0
  63. data/app/helpers/para/admin/component_groups_helper.rb +4 -0
  64. data/app/helpers/para/admin/components_helper.rb +4 -0
  65. data/app/helpers/para/admin/resources_helper.rb +27 -0
  66. data/app/helpers/para/application_helper.rb +14 -0
  67. data/app/helpers/para/exports_helper.rb +11 -0
  68. data/app/helpers/para/flash_helper.rb +48 -0
  69. data/app/helpers/para/form_helper.rb +28 -0
  70. data/app/helpers/para/markup_helper.rb +15 -0
  71. data/app/helpers/para/model_helper.rb +38 -0
  72. data/app/helpers/para/navigation_helper.rb +8 -0
  73. data/app/helpers/para/ordering_helper.rb +20 -0
  74. data/app/helpers/para/search_helper.rb +22 -0
  75. data/app/helpers/para/tag_helper.rb +50 -0
  76. data/app/helpers/para/tree_helper.rb +41 -0
  77. data/app/models/para/component/base.rb +70 -0
  78. data/app/models/para/component/crud.rb +45 -0
  79. data/app/models/para/component/resource.rb +33 -0
  80. data/app/models/para/component/settings.rb +17 -0
  81. data/app/models/para/component/singleton_resource.rb +25 -0
  82. data/app/models/para/component_resource.rb +6 -0
  83. data/app/models/para/component_section.rb +18 -0
  84. data/app/views/layouts/para/admin.html.haml +32 -0
  85. data/app/views/layouts/para/application.html.erb +14 -0
  86. data/app/views/para/admin/component_sections/_form.html.haml +10 -0
  87. data/app/views/para/admin/component_sections/edit.html.haml +5 -0
  88. data/app/views/para/admin/component_sections/new.html.haml +5 -0
  89. data/app/views/para/admin/components/_form.html.haml +15 -0
  90. data/app/views/para/admin/components/new.html.haml +4 -0
  91. data/app/views/para/admin/crud_component/show.html.haml +4 -0
  92. data/app/views/para/admin/dashboard.html.haml +10 -0
  93. data/app/views/para/admin/main/index.html.haml +1 -0
  94. data/app/views/para/admin/resources/_exports_menu.html.haml +12 -0
  95. data/app/views/para/admin/resources/_fields.html.haml +5 -0
  96. data/app/views/para/admin/resources/_filters.html.haml +9 -0
  97. data/app/views/para/admin/resources/_form.html.haml +6 -0
  98. data/app/views/para/admin/resources/_list.html.haml +22 -0
  99. data/app/views/para/admin/resources/_table.html.haml +8 -0
  100. data/app/views/para/admin/resources/_tree.html.haml +15 -0
  101. data/app/views/para/admin/resources/_tree_item.html.haml +16 -0
  102. data/app/views/para/admin/resources/edit.html.haml +6 -0
  103. data/app/views/para/admin/resources/new.html.haml +6 -0
  104. data/app/views/para/admin/settings_component/show.html.haml +12 -0
  105. data/app/views/para/admin/shared/_breadcrumb.html.haml +3 -0
  106. data/app/views/para/admin/shared/_header.html.haml +27 -0
  107. data/app/views/para/admin/shared/_navigation.html.haml +21 -0
  108. data/app/views/para/admin/singleton_resource_component/show.html.haml +5 -0
  109. data/app/views/para/inputs/_nested_many.html.haml +10 -0
  110. data/app/views/para/inputs/_nested_many_container.html.haml +19 -0
  111. data/app/views/para/inputs/_nested_one.html.haml +3 -0
  112. data/config/locales/en.yml +86 -0
  113. data/config/locales/fr.yml +101 -0
  114. data/db/migrate/20140911091225_create_para_components.rb +19 -0
  115. data/db/migrate/20140911112150_add_slug_to_para_components.rb +6 -0
  116. data/db/migrate/20140929125733_create_para_component_sections.rb +8 -0
  117. data/db/migrate/20140929131111_add_identifier_to_para_component_sections.rb +5 -0
  118. data/db/migrate/20140930121822_add_position_to_para_component_section.rb +5 -0
  119. data/db/migrate/20150129170710_create_para_component_resources.rb +13 -0
  120. data/db/migrate/20150203173219_add_identifier_to_para_components.rb +5 -0
  121. data/lib/generators/para/admin_user/admin_user_generator.rb +16 -0
  122. data/lib/generators/para/component/component_generator.rb +59 -0
  123. data/lib/generators/para/component/templates/component.rb +3 -0
  124. data/lib/generators/para/component/templates/component_controller.rb +7 -0
  125. data/lib/generators/para/component/templates/show.html.haml +2 -0
  126. data/lib/generators/para/exporter/exporter_generator.rb +42 -0
  127. data/lib/generators/para/exporter/templates/base_exporter.rb +15 -0
  128. data/lib/generators/para/exporter/templates/csv_exporter.rb +13 -0
  129. data/lib/generators/para/form/form_generator.rb +15 -0
  130. data/lib/generators/para/form/templates/_form.html.haml +7 -0
  131. data/lib/generators/para/install/install_generator.rb +112 -0
  132. data/lib/generators/para/install/templates/components.rb +13 -0
  133. data/lib/generators/para/install/templates/initializer.rb +23 -0
  134. data/lib/generators/para/nested_fields/nested_fields_generator.rb +15 -0
  135. data/lib/generators/para/nested_fields/templates/_nested_fields.html.haml +3 -0
  136. data/lib/generators/para/orderable/orderable_generator.rb +53 -0
  137. data/lib/generators/para/orderable/templates/orderable_migration.rb +6 -0
  138. data/lib/generators/para/resource/resource_generator.rb +71 -0
  139. data/lib/generators/para/resource/templates/resource_controller.rb +5 -0
  140. data/lib/generators/para/table/table_generator.rb +34 -0
  141. data/lib/generators/para/table/templates/_table.html.haml +10 -0
  142. data/lib/para/attribute_field/base.rb +77 -0
  143. data/lib/para/attribute_field/belongs_to.rb +29 -0
  144. data/lib/para/attribute_field/boolean.rb +15 -0
  145. data/lib/para/attribute_field/datetime.rb +9 -0
  146. data/lib/para/attribute_field/file.rb +20 -0
  147. data/lib/para/attribute_field/has_many.rb +31 -0
  148. data/lib/para/attribute_field/image.rb +25 -0
  149. data/lib/para/attribute_field/nested_many.rb +26 -0
  150. data/lib/para/attribute_field/nested_one.rb +27 -0
  151. data/lib/para/attribute_field/password.rb +18 -0
  152. data/lib/para/attribute_field/redactor.rb +20 -0
  153. data/lib/para/attribute_field/relation.rb +52 -0
  154. data/lib/para/attribute_field/translation.rb +9 -0
  155. data/lib/para/attribute_field_mappings.rb +82 -0
  156. data/lib/para/cloneable.rb +20 -0
  157. data/lib/para/component/exportable.rb +25 -0
  158. data/lib/para/component.rb +27 -0
  159. data/lib/para/components_configuration.rb +156 -0
  160. data/lib/para/config.rb +21 -0
  161. data/lib/para/engine.rb +59 -0
  162. data/lib/para/errors.rb +15 -0
  163. data/lib/para/exporter/base.rb +27 -0
  164. data/lib/para/exporter/csv.rb +49 -0
  165. data/lib/para/exporter.rb +57 -0
  166. data/lib/para/ext/cancan.rb +26 -0
  167. data/lib/para/ext/paperclip.rb +67 -0
  168. data/lib/para/ext.rb +13 -0
  169. data/lib/para/form_builder/containers.rb +70 -0
  170. data/lib/para/form_builder/field_mappings.rb +9 -0
  171. data/lib/para/form_builder/nested_form.rb +80 -0
  172. data/lib/para/form_builder/ordering.rb +15 -0
  173. data/lib/para/form_builder/settings.rb +24 -0
  174. data/lib/para/form_builder.rb +22 -0
  175. data/lib/para/generators/field_helpers.rb +32 -0
  176. data/lib/para/generators/name_helpers.rb +9 -0
  177. data/lib/para/generators/named_base.rb +7 -0
  178. data/lib/para/generators.rb +11 -0
  179. data/lib/para/inputs/nested_many_input.rb +40 -0
  180. data/lib/para/inputs/nested_one_input.rb +24 -0
  181. data/lib/para/inputs.rb +11 -0
  182. data/lib/para/markup/alert.rb +37 -0
  183. data/lib/para/markup/component.rb +20 -0
  184. data/lib/para/markup/modal.rb +52 -0
  185. data/lib/para/markup/panel.rb +41 -0
  186. data/lib/para/markup/resources_table.rb +178 -0
  187. data/lib/para/markup.rb +10 -0
  188. data/lib/para/model_field_parsers/base.rb +20 -0
  189. data/lib/para/model_field_parsers/devise.rb +37 -0
  190. data/lib/para/model_field_parsers/globalize.rb +23 -0
  191. data/lib/para/model_field_parsers/orderable.rb +15 -0
  192. data/lib/para/model_field_parsers/paperclip.rb +51 -0
  193. data/lib/para/model_field_parsers/redactor.rb +19 -0
  194. data/lib/para/model_field_parsers/relations.rb +67 -0
  195. data/lib/para/model_field_parsers.rb +22 -0
  196. data/lib/para/orderable.rb +44 -0
  197. data/lib/para/routes.rb +49 -0
  198. data/lib/para/version.rb +3 -0
  199. data/lib/para.rb +65 -0
  200. data/lib/rails/relation_length_validator.rb +45 -0
  201. data/lib/rails/routing_mapper.rb +27 -0
  202. data/lib/tasks/para_tasks.rake +22 -0
  203. 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,13 @@
1
+ @import "para/admin/theme/variables"
2
+
3
+
4
+ .form-group
5
+ &.slider
6
+ display: block
7
+ .slider
8
+ .slider-horizontal
9
+ width: 100%
10
+
11
+ .slider-handle
12
+ background-image: none
13
+ background-color: $brand-primary
@@ -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,9 @@
1
+ require_dependency 'para/application_controller'
2
+
3
+ module Para
4
+ module Admin
5
+ class ComponentController < Para::Admin::BaseController
6
+ load_and_authorize_component
7
+ end
8
+ end
9
+ 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
@@ -0,0 +1,8 @@
1
+ module Para
2
+ module Admin
3
+ class MainController < Para::Admin::BaseController
4
+ def index
5
+ end
6
+ end
7
+ end
8
+ end