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.
Files changed (180) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/para/admin/tangram-mosaic.png +0 -0
  3. data/app/assets/images/para/admin/template-section.svg +23 -0
  4. data/app/assets/javascripts/para/admin.coffee +20 -0
  5. data/app/assets/javascripts/para/admin/tabs.coffee +22 -5
  6. data/app/assets/javascripts/para/admin/theme_actions.coffee +3 -3
  7. data/app/assets/javascripts/para/inputs/material-input.coffee +4 -0
  8. data/app/assets/javascripts/para/inputs/multi-select-input.coffee +173 -0
  9. data/app/assets/javascripts/para/inputs/nested_many.coffee +9 -9
  10. data/app/assets/stylesheets/para/admin.sass +5 -5
  11. data/app/assets/stylesheets/para/admin/main.sass +32 -0
  12. data/app/assets/stylesheets/para/admin/src/_alert.sass +17 -0
  13. data/app/assets/stylesheets/para/admin/src/_base.sass +51 -0
  14. data/app/assets/stylesheets/para/admin/src/_bootstrap-variables.scss +874 -0
  15. data/app/assets/stylesheets/para/admin/src/_breadcrumb.sass +22 -0
  16. data/app/assets/stylesheets/para/admin/src/_buttons.sass +107 -0
  17. data/app/assets/stylesheets/para/admin/src/_checkable.sass +94 -0
  18. data/app/assets/stylesheets/para/admin/src/_common.sass +203 -0
  19. data/app/assets/stylesheets/para/admin/src/_dropdown.sass +40 -0
  20. data/app/assets/stylesheets/para/admin/src/_form.sass +271 -0
  21. data/app/assets/stylesheets/para/admin/src/_list.sass +61 -0
  22. data/app/assets/stylesheets/para/admin/src/_mixins.sass +113 -0
  23. data/app/assets/stylesheets/para/admin/src/_multi-select.sass +91 -0
  24. data/app/assets/stylesheets/para/admin/src/_navigation.sass +150 -0
  25. data/app/assets/stylesheets/para/admin/src/_navtabs.sass +41 -0
  26. data/app/assets/stylesheets/para/admin/src/_nested-many.sass +69 -0
  27. data/app/assets/stylesheets/para/admin/src/_nested_one.sass +13 -0
  28. data/app/assets/stylesheets/para/admin/src/_orderable.sass +44 -0
  29. data/app/assets/stylesheets/para/admin/src/_page-loading.sass +39 -0
  30. data/app/assets/stylesheets/para/admin/src/_pagination.sass +34 -0
  31. data/app/assets/stylesheets/para/admin/src/_panel.sass +55 -0
  32. data/app/assets/stylesheets/para/admin/src/_responsive.sass +100 -0
  33. data/app/assets/stylesheets/para/admin/{theme → src}/_sorting.sass +11 -3
  34. data/app/assets/stylesheets/para/admin/src/_statcard.sass +41 -0
  35. data/app/assets/stylesheets/para/admin/src/_table.sass +33 -0
  36. data/app/assets/stylesheets/para/admin/src/_tree.sass +52 -0
  37. data/app/assets/stylesheets/para/admin/src/_variables.sass +37 -0
  38. data/app/assets/stylesheets/para/admin/src/_well.sass +12 -0
  39. data/app/assets/stylesheets/para/{admin/src → lib}/datetimepicker.sass +1 -3
  40. data/app/assets/stylesheets/para/{admin/src → lib}/fuelux.sass +3 -5
  41. data/app/assets/stylesheets/para/lib/jasny-bootstrap.sass +97 -0
  42. data/app/assets/stylesheets/para/{admin/src → lib}/redactor.sass +2 -5
  43. data/app/assets/stylesheets/para/lib/selectize.sass +112 -0
  44. data/app/assets/stylesheets/para/lib/slider.sass +12 -0
  45. data/app/controllers/concerns/para/admin/resource_controller_concerns.rb +14 -2
  46. data/app/controllers/para/admin/base_controller.rb +7 -0
  47. data/app/controllers/para/admin/crud_resources_controller.rb +13 -6
  48. data/app/controllers/para/admin/form_resources_controller.rb +5 -3
  49. data/app/controllers/para/admin/resources_controller.rb +9 -3
  50. data/app/controllers/para/admin/search_controller.rb +15 -0
  51. data/app/controllers/para/application_controller.rb +10 -2
  52. data/app/helpers/para/admin/page_helper.rb +9 -9
  53. data/app/helpers/para/application_helper.rb +1 -10
  54. data/app/helpers/para/form_helper.rb +5 -6
  55. data/app/helpers/para/model_helper.rb +13 -3
  56. data/app/helpers/para/ordering_helper.rb +1 -1
  57. data/app/helpers/para/search_results_helper.rb +16 -0
  58. data/app/helpers/para/tree_helper.rb +10 -6
  59. data/app/models/para/page.rb +5 -0
  60. data/app/models/para/page/section.rb +42 -0
  61. data/app/models/para/page/section_resource.rb +12 -0
  62. data/app/views/layouts/para/admin.html.haml +5 -8
  63. data/app/views/para/admin/dashboard.html.haml +21 -8
  64. data/app/views/para/admin/form_resources/show.html.haml +1 -1
  65. data/app/views/para/admin/imports/new.html.haml +2 -2
  66. data/app/views/para/admin/resources/_actions.html.haml +3 -3
  67. data/app/views/para/admin/resources/_add_button.html.haml +1 -1
  68. data/app/views/para/admin/resources/_exports_menu.html.haml +6 -6
  69. data/app/views/para/admin/resources/_filters.html.haml +7 -8
  70. data/app/views/para/admin/resources/_imports_menu.html.haml +6 -6
  71. data/app/views/para/admin/resources/_list.html.haml +14 -15
  72. data/app/views/para/admin/resources/_per_page_select.html.haml +4 -3
  73. data/app/views/para/admin/resources/_subclassable_add_button.html.haml +3 -3
  74. data/app/views/para/admin/resources/_tree.html.haml +7 -9
  75. data/app/views/para/admin/resources/_tree_item.html.haml +5 -6
  76. data/app/views/para/admin/resources/edit.html.haml +1 -1
  77. data/app/views/para/admin/resources/new.html.haml +1 -1
  78. data/app/views/para/admin/search/_result.html.haml +7 -0
  79. data/app/views/para/admin/search/index.html.haml +1 -0
  80. data/app/views/para/admin/settings_component/show.html.haml +1 -1
  81. data/app/views/para/admin/shared/_breadcrumbs.html.haml +2 -3
  82. data/app/views/para/admin/shared/_header.html.haml +16 -27
  83. data/app/views/para/admin/shared/_navigation.html.haml +20 -19
  84. data/app/views/para/form/_tabs.html.haml +6 -7
  85. data/app/views/para/inputs/_multi_select.html.haml +40 -0
  86. data/app/views/para/inputs/_nested_many.html.haml +4 -4
  87. data/app/views/para/inputs/multi_select/_no_items.html.haml +6 -0
  88. data/app/views/para/inputs/nested_many/_add.html.haml +1 -2
  89. data/app/views/para/inputs/nested_many/_add_with_subclasses.html.haml +4 -5
  90. data/app/views/para/inputs/nested_many/_container.html.haml +7 -8
  91. data/app/views/shared/_breadcrumbs.html.haml +4 -0
  92. data/config/locales/fr.yml +29 -4
  93. data/db/migrate/20170324125547_create_para_page_section_resources.rb +15 -0
  94. data/lib/generators/para/filters/templates/_filters.html.haml +3 -5
  95. data/lib/generators/para/install/templates/initializer.rb +12 -0
  96. data/lib/generators/para/page/section/section_generator.rb +13 -2
  97. data/lib/generators/para/page/section/templates/section.html.haml.erb +3 -0
  98. data/lib/generators/para/resource/resource_generator.rb +1 -1
  99. data/lib/para.rb +25 -21
  100. data/lib/para/attribute_field.rb +2 -0
  101. data/lib/para/attribute_field/base.rb +1 -1
  102. data/lib/para/attribute_field/belongs_to.rb +1 -1
  103. data/lib/para/attribute_field/boolean.rb +1 -1
  104. data/lib/para/attribute_field/friendly_id.rb +19 -0
  105. data/lib/para/attribute_field/has_many.rb +43 -4
  106. data/lib/para/attribute_field/nested_field.rb +46 -0
  107. data/lib/para/attribute_field/nested_many.rb +30 -9
  108. data/lib/para/attribute_field/nested_one.rb +28 -9
  109. data/lib/para/attribute_field/password.rb +1 -1
  110. data/lib/para/attribute_field/relation.rb +19 -1
  111. data/lib/para/attribute_field_mappings.rb +9 -3
  112. data/lib/para/breadcrumbs/breadcrumb.rb +57 -10
  113. data/lib/para/breadcrumbs/controller.rb +19 -6
  114. data/lib/para/breadcrumbs/manager.rb +9 -1
  115. data/lib/para/config.rb +3 -0
  116. data/lib/para/controller_resource.rb +34 -0
  117. data/lib/para/engine.rb +33 -14
  118. data/lib/para/exporter/base.rb +1 -1
  119. data/lib/para/ext.rb +1 -1
  120. data/lib/para/ext/active_record_nested_attributes.rb +51 -0
  121. data/lib/para/ext/paperclip.rb +2 -6
  122. data/lib/para/form_builder.rb +3 -0
  123. data/lib/para/form_builder/attributes_mappings_tracker.rb +45 -0
  124. data/lib/para/form_builder/containers.rb +13 -17
  125. data/lib/para/form_builder/nested_form.rb +2 -3
  126. data/lib/para/helpers.rb +8 -0
  127. data/lib/para/helpers/attributes_mappings.rb +13 -0
  128. data/lib/para/helpers/resource_name.rb +14 -0
  129. data/lib/para/inputs.rb +1 -0
  130. data/lib/para/inputs/multi_select_input.rb +90 -0
  131. data/lib/para/inputs/nested_many_input.rb +6 -1
  132. data/lib/para/markup/resources_table.rb +15 -11
  133. data/lib/para/model_field_parsers.rb +3 -2
  134. data/lib/para/model_field_parsers/base.rb +7 -2
  135. data/lib/para/model_field_parsers/friendly_id.rb +19 -0
  136. data/lib/para/model_field_parsers/relations.rb +20 -1
  137. data/lib/para/page/model.rb +3 -1
  138. data/lib/para/routes.rb +1 -0
  139. data/lib/para/simple_form_config.rb +85 -0
  140. data/lib/para/version.rb +1 -1
  141. data/lib/rails/routing_mapper.rb +5 -8
  142. data/vendor/assets/javascripts/jasny-bootstrap.js +577 -0
  143. data/vendor/assets/stylesheets/animate.css +3340 -0
  144. data/vendor/assets/stylesheets/hint.css +649 -0
  145. data/vendor/assets/stylesheets/jasny-bootstrap.css +287 -0
  146. metadata +114 -67
  147. data/app/assets/images/para/admin/bg.png +0 -0
  148. data/app/assets/javascripts/para/admin.js +0 -20
  149. data/app/assets/stylesheets/admin/theme.sass +0 -0
  150. data/app/assets/stylesheets/para/admin/src/jasny.bootstrap.sass +0 -40
  151. data/app/assets/stylesheets/para/admin/src/nested_many.sass +0 -5
  152. data/app/assets/stylesheets/para/admin/src/page-loading.sass +0 -24
  153. data/app/assets/stylesheets/para/admin/src/page-top-bar.sass +0 -9
  154. data/app/assets/stylesheets/para/admin/src/selectize.sass +0 -46
  155. data/app/assets/stylesheets/para/admin/src/slider.sass +0 -12
  156. data/app/assets/stylesheets/para/admin/theme.sass +0 -22
  157. data/app/assets/stylesheets/para/admin/theme/_base.sass +0 -176
  158. data/app/assets/stylesheets/para/admin/theme/_breadcrumb.sass +0 -75
  159. data/app/assets/stylesheets/para/admin/theme/_buttons.sass +0 -27
  160. data/app/assets/stylesheets/para/admin/theme/_checkable.sass +0 -108
  161. data/app/assets/stylesheets/para/admin/theme/_commonds.sass +0 -210
  162. data/app/assets/stylesheets/para/admin/theme/_dropdown.sass +0 -52
  163. data/app/assets/stylesheets/para/admin/theme/_form.sass +0 -150
  164. data/app/assets/stylesheets/para/admin/theme/_list.sass +0 -139
  165. data/app/assets/stylesheets/para/admin/theme/_navigation.sass +0 -229
  166. data/app/assets/stylesheets/para/admin/theme/_navtabs.sass +0 -151
  167. data/app/assets/stylesheets/para/admin/theme/_orderable.sass +0 -45
  168. data/app/assets/stylesheets/para/admin/theme/_panel.sass +0 -264
  169. data/app/assets/stylesheets/para/admin/theme/_responsive.sass +0 -123
  170. data/app/assets/stylesheets/para/admin/theme/_table.sass +0 -28
  171. data/app/assets/stylesheets/para/admin/theme/_tree.sass +0 -74
  172. data/app/assets/stylesheets/para/admin/theme/_variables.sass +0 -31
  173. data/app/assets/stylesheets/para/application.css +0 -15
  174. data/app/assets/stylesheets/para/lib/_variables.scss +0 -646
  175. data/app/assets/stylesheets/para/overrides/responsive.sass +0 -62
  176. data/app/assets/stylesheets/para/overrides/theme.sass +0 -172
  177. data/lib/para/ext/cancan.rb +0 -26
  178. data/vendor/assets/javascripts/jasny.bootstrap.min.js +0 -7
  179. data/vendor/assets/stylesheets/animate.min.css +0 -6
  180. data/vendor/assets/stylesheets/jasny.bootstrap.min.css +0 -7
@@ -1,23 +1,24 @@
1
- %ul.sidebar-navigation.collapse.navbar-collapse#menu-sidebar
2
- %li.brand-logo
3
- = link_to admin_path do
4
- = t('para.admin.title')
1
+ .navmenu.navmenu-default.navmenu-fixed-left.offcanvas-sm
2
+ = link_to admin_path, class: 'navmenu-brand' do
3
+ = t('para.admin.brand').html_safe
5
4
 
6
- - if admin_component_sections.any?
7
- - admin_component_sections.each do |component_section|
8
- - next unless component_section.components.any? { |component| can?(:manage, component) }
5
+ %ul.nav.navmenu-nav
6
+ - if admin_component_sections.any?
7
+ - admin_component_sections.each_with_index do |component_section, index|
8
+ - next unless component_section.components.any? { |component| can?(:manage, component) }
9
9
 
10
- %li.component-section-item
11
- = link_to "#", class: 'component-section-title' do
12
- = component_section.name
10
+ %li.component-section-item
11
+ = link_to "#collapse-section-#{index}", class: 'component-section-title', data: { toggle: 'collapse' } do
12
+ = component_section.name
13
+ %i.fa.fa-angle-up.pull-right
13
14
 
14
- %ul.component-section-list-items
15
- - component_section.components.each do |component|
16
- - if can? :manage, component
17
- %li.component-item{ class: (@component == component) && 'active' }
18
- = link_to component.name, component.path
15
+ %ul.component-section-list-items.collapse.in{ id: "collapse-section-#{index}" }
16
+ - component_section.components.each do |component|
17
+ - if can? :manage, component
18
+ %li.component-item{ class: (@component == component) && 'active' }
19
+ = link_to component.name, component.path
19
20
 
20
- - else
21
- %li.component-section-item
22
- .component-section-title
23
- = t('para.component.none_created')
21
+ - else
22
+ %li.component-section-item
23
+ .component-section-title
24
+ = t('para.component.none_created')
@@ -1,11 +1,10 @@
1
1
  .form-tabs{ data: { :'form-tabs' => true } }
2
- %nav.navbar.navbar-inverse
3
- %ul.nav.navbar-nav{ role: 'tablist' }
4
- - tabs.each_with_index do |tab, index|
5
- %li{ class: ('active' if index == 0), role: 'presentation' }
6
- = link_to "##{ tab.dom_id }", role: 'tab', aria: { controls: 'settings' }, data: { toggle: 'tab' } do
7
- %i.fa{ class: "fa-#{ tab.icon }" }
8
- = tab.title
2
+ %ul.nav.nav-tabs{ role: 'tablist' }
3
+ - tabs.each_with_index do |tab, index|
4
+ %li{ class: ('active' if index == 0), role: 'presentation' }
5
+ = link_to "##{ tab.dom_id }", role: 'tab', aria: { controls: 'settings' }, data: { toggle: 'tab' } do
6
+ %i.fa{ class: "fa-#{ tab.icon }" }
7
+ = tab.title
9
8
 
10
9
  .tab-content
11
10
  - tabs.each_with_index do |tab, index|
@@ -0,0 +1,40 @@
1
+ .multi-select-field{ class: ('orderable' if orderable), data: { :'multi-select-input' => true, :'search-url' => admin_search_path(model_name: model.name), orderable: orderable } }
2
+ = form.hidden_field attribute_name, value: resources.map(&:id).join(', '), data: { :'multi-select-input-field' => true }
3
+
4
+ .row
5
+ .col-md-6
6
+ .input-group.filter-form
7
+ = text_field_tag :search, nil, class: 'string required form-control', autocomplete: 'off', data: { :'search-field' => true }
8
+ %span.input-group-btn
9
+ = button_tag type: 'button', class: 'btn' do
10
+ = fa_icon 'search'
11
+
12
+ .row
13
+ .col-md-6
14
+ .panel.panel-default.available-items
15
+ .panel-heading
16
+ %span.panel-title
17
+ = t('para.form.multi_select.available.title')
18
+ .panel-btns
19
+ = button_tag type: 'button', class: 'btn btn-success btn-xs', data: { :'add-all' => true } do
20
+ = t('para.form.multi_select.available.add_all')
21
+
22
+ .panel-body
23
+ %table.table{ data: { :'available-items' => true, :'no-available-items' => render(partial: 'para/inputs/multi_select/no_items', locals: { available: true }) } }
24
+ %tbody
25
+ = render partial: 'para/admin/search/result', collection: option_resources
26
+
27
+ .col-md-6
28
+ .panel.panel-default.selected-items
29
+ .panel-heading
30
+ %span.panel-title
31
+ = t('para.form.multi_select.selected.title')
32
+ .panel-btns
33
+ = button_tag type: 'button', class: 'btn btn-danger btn-xs', data: { :'remove-all' => true } do
34
+ = t('para.form.multi_select.selected.remove_all')
35
+ .panel-body
36
+ %table.table{ data: { :'selected-items' => true, :'no-selected-items' => render(partial: 'para/inputs/multi_select/no_items', locals: { available: false }) } }
37
+ %tbody
38
+ - if resources.length > 0
39
+ - resources.each do |resource|
40
+ = selected_item_for(resource)
@@ -1,10 +1,10 @@
1
- .nested-many-field{ class: ('orderable' if orderable) }
1
+ .nested-many-field{ class: [('orderable' if orderable), ('nested-many-field-inset' if inset)] }
2
2
  .fields-list{ id: dom_identifier }
3
3
  = form.simple_fields_for attribute_name, resources, nested_attribute_name: attribute_name, orderable: orderable do |nested_form|
4
- = render partial: find_partial_for(model, 'nested_many/container', partial_dir: 'inputs'), locals: { form: nested_form, model: nested_form.object.class, subclass: subclass, nested_locals: nested_locals }
4
+ = render partial: find_partial_for(model, 'nested_many/container', partial_dir: 'inputs'), locals: { form: nested_form, model: nested_form.object.class, subclass: subclass, nested_locals: nested_locals, inset: inset }
5
5
  -# Add button
6
6
  - if add_button
7
7
  - if subclass
8
- = render partial: 'para/inputs/nested_many/add_with_subclasses', locals: { form: form, model: model, dom_identifier: dom_identifier, nested_locals: nested_locals, attribute_name: attribute_name, orderable: orderable, subclasses: subclasses }
8
+ = render partial: 'para/inputs/nested_many/add_with_subclasses', locals: { form: form, model: model, dom_identifier: dom_identifier, nested_locals: nested_locals, attribute_name: attribute_name, orderable: orderable, subclasses: subclasses, inset: inset }
9
9
  - else
10
- = render partial: 'para/inputs/nested_many/add', locals: { form: form, model: model, dom_identifier: dom_identifier, nested_locals: nested_locals, attribute_name: attribute_name, orderable: orderable }
10
+ = render partial: 'para/inputs/nested_many/add', locals: { form: form, model: model, dom_identifier: dom_identifier, nested_locals: nested_locals, attribute_name: attribute_name, orderable: orderable, inset: inset }
@@ -0,0 +1,6 @@
1
+ - if available
2
+ %tr
3
+ %td.no-items= t('para.form.multi_select.available.no_items')
4
+ - else
5
+ %tr
6
+ %td.no-items= t('para.form.multi_select.selected.no_items')
@@ -1,3 +1,2 @@
1
- = link_to_add_association form, attribute_name, partial: find_partial_for(model, 'nested_many/container', partial_dir: 'inputs'), form_name: 'form', class: 'btn btn-primary', data: { :'association-insertion-node' => "##{ dom_identifier }", :'association-insertion-method' => 'append' }, render_options: { nested_attribute_name: attribute_name, orderable: orderable, locals: { model: model, nested_locals: nested_locals } } do
2
- %i.fa.fa-plus
1
+ = link_to_add_association form, attribute_name, partial: find_partial_for(model, 'nested_many/container', partial_dir: 'inputs'), form_name: 'form', class: 'btn btn-primary btn-shadow add-button nested-many-inset-add-button', data: { :'association-insertion-node' => "##{ dom_identifier }", :'association-insertion-method' => 'append' }, render_options: { nested_attribute_name: attribute_name, orderable: orderable, locals: { model: model, nested_locals: nested_locals, inset: inset } } do
3
2
  = t('para.form.nested.add')
@@ -1,10 +1,9 @@
1
- .add-button.dropdown
2
- %button.btn.btn-primary{ type: 'button', data: { toggle: 'dropdown' } }
3
- %i.fa.fa-plus
1
+ .add-button.nested-many-inset-add-button.dropdown
2
+ %button.btn.btn-shadow.dropdown-toggle{ type: 'button', data: { toggle: 'dropdown' } }
4
3
  = t('para.form.nested.add')
5
- %span.caret
4
+ %i.fa.fa-angle-down
6
5
  %ul.dropdown-menu
7
6
  - subclasses.each do |submodel|
8
7
  %li
9
- = link_to_add_association form, attribute_name, wrap_object: proc { submodel.new }, partial: find_partial_for(submodel, 'nested_many/container', partial_dir: 'inputs'), form_name: 'form', class: 'dropdown-link', data: { :'association-insertion-node' => "##{ dom_identifier }", :'association-insertion-method' => 'append' }, render_options: { nested_attribute_name: attribute_name, orderable: orderable, locals: { model: submodel, nested_locals: nested_locals } } do
8
+ = link_to_add_association form, attribute_name, wrap_object: proc { submodel.new }, partial: find_partial_for(submodel, 'nested_many/container', partial_dir: 'inputs'), form_name: 'form', class: 'dropdown-link', data: { :'association-insertion-node' => "##{ dom_identifier }", :'association-insertion-method' => 'append' }, render_options: { nested_attribute_name: attribute_name, orderable: orderable, locals: { model: submodel, nested_locals: nested_locals, inset: inset } } do
10
9
  = submodel.model_name.human
@@ -1,22 +1,21 @@
1
1
  - nested_locals ||= {}
2
2
 
3
- .panel.panel-default.form-fields
3
+ .panel.panel-default.form-fields{ class: ('nested-many-inset-panel' if inset), data: { :'persisted' => form.object.persisted? } }
4
4
  .panel-heading
5
5
  = form.reorder_anchor
6
6
 
7
7
  %h3.panel-title
8
8
  = link_to "##{ form.nested_resource_dom_id }", class: 'collapsed', data: { toggle: 'collapse', :'open-on-insert' => true } do
9
9
  = form.nested_resource_name
10
- %span.caret
10
+ %i.fa.fa-angle-up
11
11
 
12
12
  = form.remove_association_button
13
13
 
14
- .clearfix
14
+ .panel-collapse.form-inputs.collapse{ id: form.nested_resource_dom_id, class: ('in' if inset) }
15
+ .panel-body
16
+ = render partial: find_partial_for(model, :fields), locals: { form: form }.merge(nested_locals)
15
17
 
16
- .panel-body.form-inputs.collapse{ id: form.nested_resource_dom_id }
17
- = render partial: find_partial_for(model, :fields), locals: { form: form }.merge(nested_locals)
18
-
19
- -# Add inheritance column field if needed
20
- = form.hidden_field form.object.class.inheritance_column if form.object.class.column_names.include?(form.object.class.inheritance_column)
18
+ -# Add inheritance column field if needed
19
+ = form.hidden_field form.object.class.inheritance_column if form.object.class.column_names.include?(form.object.class.inheritance_column)
21
20
 
22
21
  .clearfix
@@ -0,0 +1,4 @@
1
+ %ul.breadcrumb
2
+ - breadcrumbs.each do |breadcrumb|
3
+ %li{ class: ('active' if breadcrumb.active?(request)) }
4
+ = link_to_unless breadcrumb.active?(request), breadcrumb.title, breadcrumb.path
@@ -31,7 +31,8 @@ fr:
31
31
  error: "Erreur lors de la génération du fichier d'export ..."
32
32
 
33
33
  admin:
34
- title: "Administration"
34
+ title: Administration
35
+ brand: "<b>Admin</b>istration"
35
36
  toggle_navigation: "Open navigation"
36
37
  back_to_app: "Afficher le site"
37
38
  sign_out: "Se déconnecter"
@@ -45,6 +46,9 @@ fr:
45
46
 
46
47
  dashboard:
47
48
  title: "Tableau de bord"
49
+ statcard:
50
+ ressources_count: "Nombre d'entrée(s) : %{count}"
51
+ component_form_ressource: "Voir la page"
48
52
 
49
53
  form:
50
54
  shared:
@@ -57,12 +61,31 @@ fr:
57
61
  add: "Ajouter"
58
62
  remove: "Supprimer"
59
63
  new: "Nouveau"
64
+ multi_select:
65
+ available:
66
+ title: "Disponibles"
67
+ no_items: |
68
+ Recherchez des éléments avec la barre de recherche ci-dessus
69
+ add_all: "Tout rajouter"
70
+ already_selected: "Ajouté"
71
+ selected:
72
+ title: "Ajoutés"
73
+ no_items: |
74
+ Utilisez le formulaire de recherche sur la gauche afin d'ajouter
75
+ des éléments.
76
+ remove_all: "Tout retirer"
77
+
60
78
 
61
79
  list:
62
80
  search_title: "Recherche"
63
- delete_confirmation: "Êtes vous sûr de bien vouloir supprimer cette entrée ?"
64
- no_results: "Aucun résultat pour cette recherche, merci d'essayer avec d'autres critères ou de créer une nouvelle entrée avec le bouton suivant :"
65
- empty: "Aucune entrée créée pour le moment. Créez une nouvelle entrée avec le bouton suivant :"
81
+ delete_confirmation: |
82
+ Êtes vous sûr de bien vouloir supprimer cette entrée ?
83
+ no_results: |
84
+ Aucun résultat pour cette recherche, merci d'essayer avec d'autres
85
+ critères ou de créer une nouvelle entrée avec le bouton suivant :
86
+ empty: |
87
+ Aucune entrée créée pour le moment. Créez une nouvelle entrée avec le
88
+ bouton suivant :
66
89
 
67
90
  export:
68
91
  name: "Exporter"
@@ -86,6 +109,8 @@ fr:
86
109
  save_and_edit: "Enregistrer et éditer"
87
110
  save_and_add_another_button: "Enregistrer et créer un(e) autre"
88
111
  destroy: "Supprimer"
112
+ edit: "éditer"
113
+ copy: "Dupliquer"
89
114
  close: "Fermer"
90
115
 
91
116
  types:
@@ -0,0 +1,15 @@
1
+ class CreateParaPageSectionResources < ActiveRecord::Migration
2
+ def change
3
+ create_table :para_page_section_resources do |t|
4
+ t.references :section
5
+ t.references :resource, polymorphic: true, index: false
6
+ t.integer :position, default: 0
7
+ t.jsonb :data
8
+
9
+ t.timestamps
10
+ end
11
+
12
+ add_index :para_page_section_resources, [:resource_type, :resource_id], name: :index_para_section_resources_on_resource_type_and_id
13
+ add_foreign_key :para_page_section_resources, :para_page_sections, column: 'section_id'
14
+ end
15
+ end
@@ -1,9 +1,7 @@
1
1
  = search_form_for @q, builder: SimpleForm::FormBuilder, url: @component.path, html: { data: { :'filters-form' => true } } do |form|
2
- .input-group
3
- %span.input-group-addon
4
- %i.fa.fa-search
5
-
2
+ .input-group.filter-form
6
3
  = form.input_field :<%= fulltext_search_param_for(attributes) %>, as: :string, placeholder: t('para.shared.search'), class: 'form-control'
7
4
 
8
5
  %span.input-group-btn
9
- = form.submit t('para.shared.search'), class: 'btn btn-default'
6
+ %button.btn{ type: 'submit'}
7
+ %i.fa.fa-search
@@ -1,17 +1,22 @@
1
1
  Para.config do |config|
2
2
  # Configure authentication method to be called when accessing the admin panel
3
+ #
3
4
  # config.authenticate_admin_method = :authenticate_admin!
4
5
 
5
6
  # Configure the method to retrieve current admin user from
7
+ #
6
8
  # config.current_admin_method = :current_admin_user
7
9
 
8
10
  # Configure the default Kaminari pagination theme to use
11
+ #
9
12
  # config.pagination_theme = 'twitter-bootstrap-3'
10
13
 
11
14
  # Configure the default admin HTML page <title>
15
+ #
12
16
  # config.admin_title = ::I18n.t('para.admin.title')
13
17
 
14
18
  # Configure the default max depth for trees
19
+ #
15
20
  # config.default_tree_max_depth = 3
16
21
 
17
22
  # Configure the methods which Para will try to call on resources to fetch
@@ -21,6 +26,13 @@ Para.config do |config|
21
26
  #
22
27
  # config.resource_name_methods += [:full_name]
23
28
 
29
+ # Set if the Para::Breadcrumb::Controller module should be included into the
30
+ # app, allowing easy breadcrumbs management in the app.
31
+ #
32
+ # Default is true
33
+ #
34
+ # config.enable_app_breadcrumbs = false
35
+
24
36
  # Para plugins to load
25
37
  #
26
38
  # config.plugins = []
@@ -5,15 +5,26 @@ module Para
5
5
 
6
6
  source_root File.expand_path("../templates", __FILE__)
7
7
 
8
- argument :attributes, type: :array
8
+ argument :attributes, type: :array, required: false, default: []
9
9
 
10
- def generate_form
10
+ def generate_model
11
11
  template(
12
12
  "section.rb.erb",
13
13
  "app/models/page_section/#{ singular_namespaced_path }.rb"
14
14
  )
15
15
  end
16
16
 
17
+ def generate_fields
18
+ generate 'para:nested_fields', "page_section/#{ singular_namespaced_path }"
19
+ end
20
+
21
+ def generate_template
22
+ template(
23
+ "section.html.haml.erb",
24
+ "app/views/page_section/#{ plural_namespaced_path }/_#{ singular_namespaced_path }.html.haml"
25
+ )
26
+ end
27
+
17
28
  private
18
29
 
19
30
  def attributes_separated_with_commas
@@ -0,0 +1,3 @@
1
+ <%- attributes.each do |attribute| -%>
2
+ = <%= singular_namespaced_path %>.<%= attribute.name %>
3
+ <%- end -%>
@@ -21,7 +21,7 @@ module Para
21
21
  def add_resource_to_component_controller
22
22
  gsub_file "app/controllers/admin/#{ component_name.singularize }_component_controller.rb", /# You can access @component here/ do
23
23
  <<-RUBY
24
- @q = @component.#{ plural_file_name }.search(params[:q])
24
+ @q = @component.#{ plural_file_name }.ransack(params[:q])
25
25
  @resources = @q.result.page(params[:page])
26
26
  RUBY
27
27
  end
@@ -18,6 +18,7 @@ require 'ransack'
18
18
  require 'friendly_id'
19
19
  require 'deep_cloneable'
20
20
  require 'closure_tree'
21
+ require 'friendly_id'
21
22
 
22
23
  require 'jquery-rails'
23
24
  require 'turbolinks'
@@ -34,34 +35,16 @@ require 'rails/relation_length_validator'
34
35
 
35
36
  require 'para/postgres_extensions_checker'
36
37
 
37
- require 'para/ext'
38
- require 'para/errors'
39
- require 'para/plugins'
40
- require 'para/config'
41
- require 'para/model_field_parsers'
42
- require 'para/attribute_field'
43
- require 'para/attribute_field_mappings'
44
- require 'para/inputs'
45
- require 'para/cloneable'
46
- require 'para/orderable'
47
- require 'para/form_builder'
48
- require 'para/markup'
49
- require 'para/engine'
50
- require 'para/components_configuration'
51
- require 'para/job'
52
- require 'para/exporter'
53
- require 'para/importer'
54
- require 'para/sti'
55
- require 'para/page'
56
- require 'para/search'
57
-
58
38
  module Para
59
39
  extend ActiveSupport::Autoload
60
40
 
61
41
  eager_autoload do
62
42
  autoload :Config
63
43
  autoload :Component
44
+ autoload :ControllerResource
64
45
  autoload :Generators
46
+ autoload :Helpers
47
+ autoload :SimpleFormConfig
65
48
  autoload :Routing
66
49
  autoload :Routes
67
50
  autoload :Breadcrumbs
@@ -89,3 +72,24 @@ module Para
89
72
  'para_'
90
73
  end
91
74
  end
75
+
76
+ require 'para/ext'
77
+ require 'para/errors'
78
+ require 'para/plugins'
79
+ require 'para/config'
80
+ require 'para/model_field_parsers'
81
+ require 'para/attribute_field'
82
+ require 'para/attribute_field_mappings'
83
+ require 'para/inputs'
84
+ require 'para/cloneable'
85
+ require 'para/orderable'
86
+ require 'para/form_builder'
87
+ require 'para/markup'
88
+ require 'para/engine'
89
+ require 'para/components_configuration'
90
+ require 'para/job'
91
+ require 'para/exporter'
92
+ require 'para/importer'
93
+ require 'para/sti'
94
+ require 'para/page'
95
+ require 'para/search'
@@ -13,7 +13,9 @@ require 'para/attribute_field/enum'
13
13
  require 'para/attribute_field/relation'
14
14
  require 'para/attribute_field/belongs_to'
15
15
  require 'para/attribute_field/has_many'
16
+ require 'para/attribute_field/nested_field'
16
17
  require 'para/attribute_field/nested_one'
17
18
  require 'para/attribute_field/nested_many'
18
19
  require 'para/attribute_field/redactor'
19
20
  require 'para/attribute_field/translation'
21
+ require 'para/attribute_field/friendly_id'
@@ -86,7 +86,7 @@ module Para
86
86
  # it can be easy to edit them according to some field type specific
87
87
  # behavior
88
88
  #
89
- def parse_input(params); end
89
+ def parse_input(params, resource); end
90
90
 
91
91
  def field_options
92
92
  self.class._field_options.each_with_object({}) do |params, hash|