releaf-core 0.2.1 → 1.0.3

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 (256) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +19 -21
  3. data/app/assets/javascripts/releaf/application.js +1 -2
  4. data/app/assets/javascripts/releaf/include/field.type_date_or_datetime_or_time.js +19 -21
  5. data/app/assets/javascripts/releaf/include/field.type_richtext.js +31 -9
  6. data/app/assets/javascripts/releaf/include/localization.js +3 -8
  7. data/app/assets/javascripts/releaf/include/nested_fields.js +1 -1
  8. data/app/assets/javascripts/releaf/include/remote_validator.js +7 -4
  9. data/app/assets/javascripts/releaf/include/sortable.js +1 -1
  10. data/app/assets/javascripts/releaf/include/{profile_settings.js → store_settings.js} +4 -10
  11. data/app/assets/javascripts/releaf/include/toolbox.js +7 -11
  12. data/app/assets/stylesheets/releaf/layout/fields.scss +1 -0
  13. data/app/assets/stylesheets/releaf/layout/header.scss +1 -0
  14. data/app/assets/stylesheets/releaf/layout/search.scss +15 -0
  15. data/app/builders/releaf/builders/base.rb +11 -9
  16. data/app/builders/releaf/builders/confirm_destroy_dialog_builder.rb +2 -2
  17. data/app/builders/releaf/builders/confirm_dialog_builder.rb +3 -3
  18. data/app/builders/releaf/builders/edit_builder.rb +51 -6
  19. data/app/builders/releaf/builders/form_builder/associated_set_field.rb +37 -0
  20. data/app/builders/releaf/builders/form_builder/associations.rb +153 -0
  21. data/app/builders/releaf/builders/form_builder/boolean_fields.rb +12 -0
  22. data/app/builders/releaf/builders/form_builder/date_fields.rb +30 -0
  23. data/app/builders/releaf/builders/form_builder/fields.rb +10 -0
  24. data/app/builders/releaf/builders/form_builder/file_fields.rb +47 -0
  25. data/app/builders/releaf/builders/form_builder/i18n_fields.rb +75 -0
  26. data/app/builders/releaf/builders/form_builder/label.rb +34 -0
  27. data/app/builders/releaf/builders/form_builder/number_fields.rb +13 -0
  28. data/app/builders/releaf/builders/form_builder/richtext_fields.rb +28 -0
  29. data/app/builders/releaf/builders/form_builder/text_fields.rb +43 -0
  30. data/app/builders/releaf/builders/form_builder.rb +8 -489
  31. data/app/builders/releaf/builders/index_builder.rb +10 -3
  32. data/app/builders/releaf/builders/page/header_builder.rb +23 -59
  33. data/app/builders/releaf/builders/page/layout_builder.rb +125 -115
  34. data/app/builders/releaf/builders/page/menu_builder.rb +96 -106
  35. data/app/builders/releaf/builders/refused_destroy_dialog_builder.rb +7 -12
  36. data/app/builders/releaf/builders/resource_view.rb +4 -4
  37. data/app/builders/releaf/builders/table_builder.rb +20 -30
  38. data/app/builders/releaf/builders/toolbox_builder.rb +1 -1
  39. data/app/builders/releaf/builders/utilities/date_fields.rb +100 -0
  40. data/app/builders/releaf/builders/utilities/resolve_attribute_field_method_name.rb +80 -0
  41. data/app/builders/releaf/builders/view.rb +5 -2
  42. data/app/builders/releaf/settings/form_builder.rb +18 -0
  43. data/app/builders/releaf/settings/table_builder.rb +9 -0
  44. data/app/controllers/releaf/action_controller.rb +174 -0
  45. data/app/controllers/releaf/{core/errors_controller.rb → errors_controller.rb} +1 -1
  46. data/app/controllers/releaf/root_controller.rb +23 -0
  47. data/app/controllers/releaf/settings_controller.rb +22 -0
  48. data/app/helpers/releaf/application_helper.rb +1 -1
  49. data/app/lib/releaf/action_controller/ajax.rb +24 -0
  50. data/app/lib/releaf/action_controller/breadcrumbs.rb +26 -0
  51. data/app/lib/releaf/action_controller/builders.rb +34 -0
  52. data/app/lib/releaf/action_controller/features.rb +47 -0
  53. data/app/lib/releaf/action_controller/notifications.rb +28 -0
  54. data/app/lib/releaf/action_controller/resources.rb +59 -0
  55. data/app/{controllers/concerns/releaf → lib/releaf/action_controller}/richtext_attachments.rb +1 -1
  56. data/app/lib/releaf/action_controller/search.rb +22 -0
  57. data/app/lib/releaf/action_controller/urls.rb +49 -0
  58. data/app/lib/releaf/action_controller/views.rb +29 -0
  59. data/app/lib/releaf/assets_resolver.rb +51 -0
  60. data/app/lib/releaf/build_errors_hash.rb +81 -0
  61. data/app/lib/releaf/controller_definition.rb +22 -0
  62. data/app/lib/releaf/controller_group_definition.rb +12 -0
  63. data/app/lib/releaf/{core/default_searchable_fields.rb → default_searchable_fields.rb} +1 -1
  64. data/app/lib/releaf/{core/resource_base.rb → resource_base.rb} +14 -6
  65. data/app/lib/releaf/{core/resource_fields.rb → resource_fields.rb} +1 -1
  66. data/app/lib/releaf/{core/resource_params.rb → resource_params.rb} +3 -3
  67. data/app/lib/releaf/resource_table_fields.rb +10 -0
  68. data/app/lib/releaf/{core/resource_utilities.rb → resource_utilities.rb} +2 -2
  69. data/app/lib/releaf/{core/responders → responders}/access_denied_responder.rb +2 -2
  70. data/app/lib/releaf/{core/responders → responders}/after_save_responder.rb +3 -3
  71. data/app/lib/releaf/{core/responders → responders}/confirm_destroy_responder.rb +1 -1
  72. data/app/lib/releaf/{core/responders → responders}/destroy_responder.rb +1 -1
  73. data/app/lib/releaf/{core/responders → responders}/error_responder.rb +1 -1
  74. data/app/lib/releaf/{core/responders → responders}/feature_disabled_responder.rb +2 -2
  75. data/app/lib/releaf/{core/responders → responders}/page_not_found_responder.rb +2 -2
  76. data/app/lib/releaf/responders.rb +31 -0
  77. data/app/lib/releaf/{core/search.rb → search.rb} +1 -1
  78. data/app/lib/releaf/settings/normalize_value.rb +45 -0
  79. data/app/lib/releaf/settings/register.rb +45 -0
  80. data/app/models/releaf/settings.rb +25 -13
  81. data/app/services/array/reorder.rb +82 -0
  82. data/app/views/releaf/{base → action}/confirm_destroy.ruby +0 -0
  83. data/app/views/releaf/{base → action}/create_releaf_richtext_attachment.haml +0 -0
  84. data/app/views/releaf/{base → action}/edit.ruby +0 -0
  85. data/app/views/releaf/{base → action}/index.ruby +0 -0
  86. data/app/views/releaf/{base → action}/new.ruby +0 -0
  87. data/app/views/releaf/{base → action}/refused_destroy.ruby +0 -0
  88. data/app/views/releaf/{base → action}/show.ruby +0 -0
  89. data/app/views/releaf/{base → action}/toolbox.ruby +0 -0
  90. data/lib/generators/dummy/install_generator.rb +5 -0
  91. data/lib/generators/dummy/templates/assets/javascripts/controllers/admin/books.js +23 -0
  92. data/lib/generators/dummy/templates/assets/javascripts/controllers/admin/nodes.js +1 -0
  93. data/lib/generators/dummy/templates/assets/javascripts/controllers/admin/other_site/other_nodes.js +1 -0
  94. data/lib/generators/dummy/templates/assets/stylesheets/controllers/admin/nodes.scss +1 -0
  95. data/lib/generators/dummy/templates/assets/stylesheets/controllers/admin/other_site/other_nodes.scss +1 -0
  96. data/lib/generators/dummy/templates/builders/admin/books/form_builder.rb +11 -1
  97. data/lib/generators/dummy/templates/config/routes.rb +31 -7
  98. data/lib/generators/dummy/templates/controllers/admin/authors_controller.rb +3 -6
  99. data/lib/generators/dummy/templates/controllers/admin/books_controller.rb +1 -1
  100. data/lib/generators/dummy/templates/controllers/admin/chapters_controller.rb +1 -1
  101. data/lib/generators/dummy/templates/controllers/admin/nodes_controller.rb +3 -0
  102. data/lib/generators/dummy/templates/controllers/admin/other_site/other_nodes_controller.rb +3 -0
  103. data/lib/generators/dummy/templates/controllers/admin/publishers_controller.rb +1 -1
  104. data/lib/generators/dummy/templates/controllers/application_controller.rb +27 -5
  105. data/lib/generators/dummy/templates/controllers/concerns/node_controller.rb +13 -3
  106. data/lib/generators/dummy/templates/controllers/contacts_controller.rb +3 -1
  107. data/lib/generators/dummy/templates/initializers/releaf.rb +31 -25
  108. data/lib/generators/dummy/templates/migrations/create_home_pages.rb +1 -0
  109. data/lib/generators/dummy/templates/migrations/create_other_nodes.rb +29 -0
  110. data/lib/generators/dummy/templates/models/author.rb +2 -2
  111. data/lib/generators/dummy/templates/models/book.rb +0 -2
  112. data/lib/generators/dummy/templates/models/chapter.rb +0 -2
  113. data/lib/generators/dummy/templates/models/home_page.rb +1 -0
  114. data/lib/generators/dummy/templates/models/other_site/other_node.rb +7 -0
  115. data/lib/generators/dummy/templates/models/publisher.rb +0 -5
  116. data/lib/generators/dummy/templates/models/text_page.rb +0 -1
  117. data/lib/generators/dummy/templates/views/contacts/show.html.haml +1 -1
  118. data/lib/generators/dummy/templates/views/layouts/application.html.haml +9 -1
  119. data/lib/generators/dummy/templates/views/text_pages/show.haml +1 -1
  120. data/lib/generators/releaf/templates/initializers/releaf.rb +6 -17
  121. data/lib/generators/releaf/templates/migrations/create_releaf_translations.rb +13 -14
  122. data/lib/generators/releaf/templates/seeds/seeds.rb +28 -32
  123. data/lib/releaf/{core/application.rb → application.rb} +5 -4
  124. data/lib/releaf/{core/component.rb → component.rb} +6 -2
  125. data/lib/releaf/configuration.rb +95 -0
  126. data/lib/releaf/core_ext/array/reorder.rb +5 -0
  127. data/lib/releaf/engine.rb +12 -0
  128. data/lib/releaf/exceptions.rb +5 -0
  129. data/lib/releaf/instance_cache.rb +72 -0
  130. data/lib/releaf/{core → rails_ext}/validation_error_codes.rb +1 -1
  131. data/lib/releaf/root/configuration.rb +6 -0
  132. data/lib/releaf/root/default_controller_resolver.rb +37 -0
  133. data/lib/releaf/root/settings_manager.rb +12 -0
  134. data/lib/releaf/root.rb +17 -0
  135. data/lib/releaf/{core/route_mapper.rb → route_mapper.rb} +6 -6
  136. data/lib/releaf/service.rb +11 -0
  137. data/lib/releaf/settings_ui.rb +7 -0
  138. data/lib/releaf/version.rb +1 -1
  139. data/lib/releaf-core.rb +38 -9
  140. data/spec/builders/{builders → releaf/builders}/association_reflector_spec.rb +0 -0
  141. data/spec/builders/{builders → releaf/builders}/base_spec.rb +17 -21
  142. data/spec/builders/{builders → releaf/builders}/collection_spec.rb +0 -0
  143. data/spec/builders/{builders → releaf/builders}/confirm_destroy_dialog_builder_spec.rb +5 -5
  144. data/spec/builders/{builders → releaf/builders}/confirm_dialog_builder_spec.rb +9 -7
  145. data/spec/builders/{builders → releaf/builders}/edit_builder_spec.rb +127 -20
  146. data/spec/builders/releaf/builders/form_builder/associations_spec.rb +129 -0
  147. data/spec/builders/releaf/builders/form_builder/date_fields_spec.rb +86 -0
  148. data/spec/builders/releaf/builders/form_builder/i18n_fields_spec.rb +48 -0
  149. data/spec/builders/releaf/builders/form_builder/label_spec.rb +106 -0
  150. data/spec/builders/releaf/builders/form_builder/number_fields_spec.rb +37 -0
  151. data/spec/builders/releaf/builders/form_builder_spec.rb +228 -0
  152. data/spec/builders/{builders → releaf/builders}/index_builder_spec.rb +29 -10
  153. data/spec/builders/releaf/builders/page/header_builder_spec.rb +65 -0
  154. data/spec/builders/releaf/builders/page/layout_builder_spec.rb +170 -0
  155. data/spec/builders/releaf/builders/page/menu_builder_spec.rb +345 -0
  156. data/spec/builders/{builders → releaf/builders}/pagination_builder_spec.rb +0 -0
  157. data/spec/builders/{builders → releaf/builders}/resource_dialog_spec.rb +0 -0
  158. data/spec/builders/{builders → releaf/builders}/resource_view_spec.rb +8 -8
  159. data/spec/builders/{builders → releaf/builders}/show_builder_spec.rb +0 -0
  160. data/spec/builders/{builders → releaf/builders}/table_builder_spec.rb +31 -75
  161. data/spec/builders/{builders → releaf/builders}/template_spec.rb +0 -0
  162. data/spec/builders/{builders → releaf/builders}/toolbox_builder_spec.rb +4 -4
  163. data/spec/builders/{builders → releaf/builders}/toolbox_spec.rb +0 -0
  164. data/spec/builders/releaf/builders/utilities/date_fields_spec.rb +125 -0
  165. data/spec/builders/releaf/builders/utilities/resolve_attribute_field_method_name_spec.rb +318 -0
  166. data/spec/builders/{builders → releaf/builders}/view_spec.rb +1 -1
  167. data/spec/builders/{builders_spec.rb → releaf/builders_spec.rb} +0 -0
  168. data/spec/builders/releaf/settings/form_builder_spec.rb +48 -0
  169. data/spec/builders/{core → releaf}/settings/table_builder_spec.rb +6 -4
  170. data/spec/controllers/concerns/releaf/richtext_attachments_spec.rb +1 -1
  171. data/spec/controllers/releaf/{base_controller_spec.rb → action_controller_spec.rb} +132 -161
  172. data/spec/controllers/releaf/root_controller_spec.rb +40 -0
  173. data/spec/controllers/releaf/settings_controller_spec.rb +52 -0
  174. data/spec/error_hash_builder_spec.rb +83 -0
  175. data/spec/ext/array_reorder_spec.rb +12 -0
  176. data/spec/features/ajaxbox_spec.rb +6 -6
  177. data/spec/features/errors_spec.rb +2 -1
  178. data/spec/features/index_table_spec.rb +6 -3
  179. data/spec/features/richtext_attachments_spec.rb +2 -2
  180. data/spec/features/richtext_custom_config_spec.rb +28 -0
  181. data/spec/features/richtext_embed_spec.rb +1 -1
  182. data/spec/features/richtext_spec.rb +10 -1
  183. data/spec/features/search_spec.rb +1 -1
  184. data/spec/features/settings_spec.rb +10 -5
  185. data/spec/helpers/application_helper_spec.rb +4 -6
  186. data/spec/lib/releaf/action_controller/features_spec.rb +171 -0
  187. data/spec/lib/releaf/action_controller/search_spec.rb +84 -0
  188. data/spec/lib/releaf/{core/application_spec.rb → application_spec.rb} +7 -6
  189. data/spec/lib/releaf/assets_resolver_spec.rb +130 -0
  190. data/spec/lib/releaf/build_errors_hash_spec.rb +141 -0
  191. data/spec/lib/releaf/configuration_spec.rb +205 -0
  192. data/spec/lib/releaf/controller_definition_spec.rb +49 -0
  193. data/spec/lib/releaf/controller_group_definition_spec.rb +27 -0
  194. data/spec/lib/releaf/{core/default_searchable_fields_spec.rb → default_searchable_fields_spec.rb} +1 -1
  195. data/spec/lib/releaf/instance_cache_spec.rb +98 -0
  196. data/spec/lib/releaf/{core/resource_base_spec.rb → resource_base_spec.rb} +59 -21
  197. data/spec/lib/releaf/{core/resource_fields_spec.rb → resource_fields_spec.rb} +1 -1
  198. data/spec/lib/releaf/{core/resource_params_spec.rb → resource_params_spec.rb} +3 -5
  199. data/spec/lib/releaf/resource_table_fields_spec.rb +20 -0
  200. data/spec/lib/releaf/{core/resource_utilities_spec.rb → resource_utilities_spec.rb} +1 -1
  201. data/spec/lib/releaf/{core/responders → responders}/access_denied_responder_spec.rb +1 -1
  202. data/spec/lib/releaf/{core/responders → responders}/after_save_responder_spec.rb +9 -8
  203. data/spec/lib/releaf/{core/responders → responders}/confirm_destroy_responder_spec.rb +2 -2
  204. data/spec/lib/releaf/{core/responders → responders}/destroy_responder_spec.rb +2 -2
  205. data/spec/lib/releaf/{core/responders → responders}/error_responder_spec.rb +4 -4
  206. data/spec/lib/releaf/{core/responders → responders}/feature_disabled_responder_spec.rb +1 -1
  207. data/spec/lib/releaf/{core/responders → responders}/page_not_found_responder_spec.rb +1 -1
  208. data/spec/lib/releaf/{core/responders_spec.rb → responders_spec.rb} +14 -14
  209. data/spec/lib/releaf/root/configuration_spec.rb +9 -0
  210. data/spec/lib/releaf/root/default_controller_resolver_spec.rb +108 -0
  211. data/spec/lib/releaf/root_spec.rb +13 -0
  212. data/spec/lib/releaf/service_spec.rb +20 -0
  213. data/spec/lib/releaf/settings/normalize_value_spec.rb +103 -0
  214. data/spec/lib/releaf/settings/register_spec.rb +135 -0
  215. data/spec/lib/releaf/settings_manager_spec.rb +22 -0
  216. data/spec/lib/validation_error_codes_spec.rb +1 -1
  217. data/spec/misc/factories_spec.rb +0 -12
  218. data/spec/models/settings_spec.rb +74 -32
  219. data/spec/routing/route_mapper_spec.rb +5 -5
  220. data/spec/rspec_helpers/test_helpers_spec.rb +1 -1
  221. data/spec/rspec_helpers/test_spec.rb +14 -0
  222. data/spec/{lib/releaf/core/item_orderer_spec.rb → services/array/reorder_spec.rb} +32 -53
  223. metadata +299 -224
  224. data/app/builders/releaf/builders/orderer.rb +0 -5
  225. data/app/builders/releaf/builders/tags/releaf_associated_set_field.rb +0 -40
  226. data/app/builders/releaf/core/settings/form_builder.rb +0 -21
  227. data/app/builders/releaf/core/settings/table_builder.rb +0 -11
  228. data/app/controllers/concerns/releaf/breadcrumbs.rb +0 -42
  229. data/app/controllers/releaf/base_controller.rb +0 -458
  230. data/app/controllers/releaf/core/settings_controller.rb +0 -50
  231. data/app/helpers/releaf/javascript_helper.rb +0 -75
  232. data/app/lib/releaf/core/assets_resolver.rb +0 -58
  233. data/app/lib/releaf/core/error_formatter.rb +0 -103
  234. data/app/lib/releaf/core/item_orderer.rb +0 -102
  235. data/app/lib/releaf/core/resource_table_fields.rb +0 -10
  236. data/app/lib/releaf/core/responders.rb +0 -31
  237. data/app/lib/releaf/core/template_field_type_mapper.rb +0 -127
  238. data/lib/generators/dummy/templates/controllers/concerns/.keep +0 -0
  239. data/lib/releaf/core/builders_autoload.rb +0 -27
  240. data/lib/releaf/core/configuration.rb +0 -101
  241. data/lib/releaf/core/engine.rb +0 -35
  242. data/lib/releaf/core/exceptions.rb +0 -38
  243. data/lib/releaf/core/settings_ui_component.rb +0 -7
  244. data/releaf-core.gemspec +0 -35
  245. data/spec/builders/builders/form_builder_spec.rb +0 -562
  246. data/spec/builders/builders/orderer_spec.rb +0 -22
  247. data/spec/builders/builders/page/header_builder_spec.rb +0 -143
  248. data/spec/builders/builders/page/layout_builder_spec.rb +0 -73
  249. data/spec/builders/builders/page/menu_builder_spec.rb +0 -160
  250. data/spec/builders/core/settings/form_builder_spec.rb +0 -69
  251. data/spec/controllers/releaf/core/settings_controller_spec.rb +0 -31
  252. data/spec/lib/releaf/core/assets_resolver_spec.rb +0 -113
  253. data/spec/lib/releaf/core/configuration_spec.rb +0 -230
  254. data/spec/lib/releaf/core/error_formatter_spec.rb +0 -242
  255. data/spec/lib/releaf/core/resource_table_fields_spec.rb +0 -18
  256. data/spec/lib/releaf/core/template_field_type_mapper_spec.rb +0 -311
@@ -1,155 +1,165 @@
1
- class Releaf::Builders::Page::LayoutBuilder
2
- include Releaf::Builders::Base
3
- include Releaf::Builders::Template
1
+ module Releaf::Builders::Page
2
+ class LayoutBuilder
3
+ include Releaf::Builders::Base
4
+ include Releaf::Builders::Template
5
+
6
+ def output(&block)
7
+ doctype.html_safe << tag(:html) do
8
+ head << body(&block)
9
+ end
10
+ end
4
11
 
5
- def output(&block)
6
- doctype.html_safe << tag(:html) do
7
- head << body(&block)
12
+ def doctype
13
+ "<!DOCTYPE html>"
8
14
  end
9
- end
10
15
 
11
- def doctype
12
- "<!DOCTYPE html>"
13
- end
16
+ def head
17
+ tag(:head) do
18
+ head_blocks
19
+ end
20
+ end
14
21
 
15
- def head
16
- tag(:head) do
17
- head_blocks
22
+ def body
23
+ tag(:body, body_atttributes) do
24
+ body_content{ yield } << assets(:javascripts, :javascript_include_tag)
25
+ end
18
26
  end
19
- end
20
27
 
21
- def body(&block)
22
- tag(:body, class: body_classes) do
23
- body_content(&block) << assets(:javascripts, :javascript_include_tag)
28
+ def body_atttributes
29
+ {class: body_classes, "data-settings-path" => settings_path}
30
+ end
31
+
32
+ def settings_path
33
+ url_for(action: "store_settings", controller: "/releaf/root", only_path: true)
24
34
  end
25
- end
26
35
 
27
- def body_content(&block)
28
- if access_control.authorized?
36
+ def body_content(&block)
29
37
  header << menu << tag(:main, id: "main", &block) << notifications
30
- else
31
- yield
32
38
  end
33
- end
34
39
 
35
- def notifications
36
- tag(:div, nil, class: 'notifications', 'data' => {'close-text' => t("Close")})
37
- end
40
+ def notifications
41
+ tag(:div, nil, class: 'notifications', 'data' => {'close-text' => t("Close")})
42
+ end
38
43
 
39
- def header
40
- tag(:header, header_builder.new(template).output)
41
- end
44
+ def header
45
+ tag(:header, header_builder.new(template).output)
46
+ end
42
47
 
43
- def header_builder
44
- Releaf::Builders::Page::HeaderBuilder
45
- end
48
+ def header_builder
49
+ Releaf::Builders::Page::HeaderBuilder
50
+ end
46
51
 
47
- def menu
48
- tag(:aside, menu_builder.new(template).output)
49
- end
52
+ def menu
53
+ tag(:aside, menu_builder.new(template).output)
54
+ end
50
55
 
51
- def menu_builder
52
- Releaf::Builders::Page::MenuBuilder
53
- end
56
+ def menu_builder
57
+ Releaf::Builders::Page::MenuBuilder
58
+ end
54
59
 
55
- def assets(type, tag_method)
56
- safe_join do
57
- send(type).collect do |asset|
58
- template.send(tag_method, asset)
60
+ def assets(type, tag_method)
61
+ safe_join do
62
+ send(type).collect do |asset|
63
+ template.send(tag_method, asset)
64
+ end
59
65
  end
60
66
  end
61
- end
62
67
 
63
- def body_classes
64
- list = []
65
- list << "application-#{Rails.application.class.parent_name.downcase}"
66
- list += controller_body_classes
67
- list << "view-#{controller.active_view}" if controller.respond_to? :active_view
68
- list << "side-compact" if layout_settings("releaf.side.compact")
69
- list
70
- end
68
+ def body_classes
69
+ list = []
70
+ list << "application-#{Rails.application.class.parent_name.downcase}"
71
+ list += controller_body_classes
72
+ list << "view-#{controller.active_view}" if controller.respond_to? :active_view
73
+ list << "side-compact" if layout_settings("releaf.side.compact")
74
+ list
75
+ end
71
76
 
72
- def controller_classes
73
- ancestors = controller.class.ancestors.grep(Class)
74
- slice_index = ancestors.index(Releaf::BaseController) || (ancestors.index(controller.class) + 1)
75
- ancestors[0, slice_index].reverse
76
- end
77
+ def controller_classes
78
+ ancestors = controller.class.ancestors.grep(Class)
79
+ slice_index = ancestors.index(Releaf::ActionController) || (ancestors.index(controller.class) + 1)
80
+ ancestors[0, slice_index].reverse
81
+ end
77
82
 
78
- def controller_body_classes
79
- controller_classes.collect do|c_class|
80
- "controller-" + c_class.name.gsub(/Controller$/, "").underscore.tr( '_/', '-' )
83
+ def controller_body_classes
84
+ controller_classes.collect do|c_class|
85
+ "controller-" + c_class.name.gsub(/Controller$/, "").underscore.tr( '_/', '-' )
86
+ end
81
87
  end
82
- end
83
88
 
84
- def head_blocks
85
- [title, content_type, favicons, ms_tile, assets(:stylesheets, :stylesheet_link_tag), csrf]
86
- end
89
+ def head_blocks
90
+ [title, content_type, favicons, ms_tile, assets(:stylesheets, :stylesheet_link_tag), csrf]
91
+ end
87
92
 
88
- def controller_name
89
- params[:controller]
90
- end
93
+ def controller_name
94
+ params[:controller]
95
+ end
91
96
 
92
- def stylesheets
93
- Releaf.application.config.assets_resolver.controller_assets(controller_name, :stylesheets)
94
- end
97
+ def assets_resolver
98
+ Releaf::AssetsResolver
99
+ end
95
100
 
96
- def javascripts
97
- Releaf.application.config.assets_resolver.controller_assets(controller_name, :javascripts)
98
- end
101
+ def stylesheets
102
+ assets_resolver.controller_assets(controller_name, :stylesheets)
103
+ end
99
104
 
100
- def csrf
101
- template.csrf_meta_tags
102
- end
105
+ def javascripts
106
+ assets_resolver.controller_assets(controller_name, :javascripts)
107
+ end
103
108
 
104
- def content_type
105
- meta(content: 'text/html; charset=utf-8', 'http-equiv': 'Content-Type')
106
- end
109
+ def csrf
110
+ template.csrf_meta_tags
111
+ end
107
112
 
108
- def meta(options)
109
- tag(:meta, nil, options)
110
- end
113
+ def content_type
114
+ meta(content: 'text/html; charset=utf-8', 'http-equiv': 'Content-Type')
115
+ end
111
116
 
112
- def title
113
- tag(:title) do
114
- controller.page_title
117
+ def meta(options)
118
+ tag(:meta, nil, options)
115
119
  end
116
- end
117
120
 
118
- def favicon_path
119
- File.join('releaf', 'icons')
120
- end
121
+ def title
122
+ tag(:title) do
123
+ controller.page_title
124
+ end
125
+ end
121
126
 
122
- def ms_tile_path
123
- favicon_path
124
- end
127
+ def favicon_path
128
+ File.join('releaf', 'icons')
129
+ end
125
130
 
126
- def ms_tile_color
127
- '#151515'
128
- end
131
+ def ms_tile_path
132
+ favicon_path
133
+ end
129
134
 
130
- def favicon(source, options = {})
131
- controller.view_context.favicon_link_tag(File.join(favicon_path, source), options)
132
- end
135
+ def ms_tile_color
136
+ '#151515'
137
+ end
133
138
 
134
- def apple_favicon(source, options = {})
135
- favicon(source, options.merge(rel: 'apple-touch-icon-precomposed', type: 'image/png'))
136
- end
139
+ def favicon(source, options = {})
140
+ controller.view_context.favicon_link_tag(File.join(favicon_path, source), options)
141
+ end
137
142
 
138
- def favicons
139
- [
140
- apple_favicon("favicon.png"),
141
- apple_favicon("apple-touch-icon-152x152-precomposed.png", sizes: "152x152"),
142
- apple_favicon("apple-touch-icon-114x114-precomposed.png", sizes: "114x114"),
143
- apple_favicon("apple-touch-icon-72x72-precomposed.png", sizes: "72x72"),
144
- favicon("favicon.png", type: 'image/png', rel: 'icon'),
145
- ]
146
- end
143
+ def apple_favicon(source, options = {})
144
+ favicon(source, options.merge(rel: 'apple-touch-icon-precomposed', type: 'image/png'))
145
+ end
147
146
 
148
- def ms_tile
149
- tile_path = ActionController::Base.helpers.image_path(File.join(ms_tile_path, 'msapplication-tile-144x144.png'))
150
- [
151
- meta(name: 'msapplication-TileColor', content: ms_tile_color),
152
- meta(name: 'msapplication-TileImage', content: tile_path)
153
- ]
147
+ def favicons
148
+ [
149
+ apple_favicon("favicon.png"),
150
+ apple_favicon("apple-touch-icon-152x152-precomposed.png", sizes: "152x152"),
151
+ apple_favicon("apple-touch-icon-114x114-precomposed.png", sizes: "114x114"),
152
+ apple_favicon("apple-touch-icon-72x72-precomposed.png", sizes: "72x72"),
153
+ favicon("favicon.png", type: 'image/png', rel: 'icon'),
154
+ ]
155
+ end
156
+
157
+ def ms_tile
158
+ tile_path = ActionController::Base.helpers.image_path(File.join(ms_tile_path, 'msapplication-tile-144x144.png'))
159
+ [
160
+ meta(name: 'msapplication-TileColor', content: ms_tile_color),
161
+ meta(name: 'msapplication-TileImage', content: tile_path)
162
+ ]
163
+ end
154
164
  end
155
165
  end
@@ -1,140 +1,130 @@
1
- class Releaf::Builders::Page::MenuBuilder
2
- include Releaf::Builders::Base
3
- include Releaf::Builders::Template
4
-
5
- class Menu
6
- mattr_accessor :access_control
7
-
8
- def self.build(list, access_control)
9
- self.access_control = access_control
10
- build_list(list)
1
+ module Releaf::Builders::Page
2
+ class MenuBuilder
3
+ include Releaf::InstanceCache
4
+ include Releaf::Builders::Base
5
+ include Releaf::Builders::Template
6
+
7
+ def output
8
+ compacter << tag(:nav, menu_level(Releaf.application.config.menu))
11
9
  end
12
10
 
13
- def self.build_list(list)
14
- list.collect{|item| build_item(item) }.compact
11
+ def active?(item)
12
+ instance_cache("active_#{item.class.name}_#{item.name}") do
13
+ if controller_group?(item)
14
+ item.controllers.find{|subitem| active?(subitem) }.present?
15
+ else
16
+ item.controller_name == controller.short_name
17
+ end
18
+ end
15
19
  end
16
20
 
17
- def self.build_item(source_item)
18
- item = source_item.dup
19
- item[:items] = build_list(item.fetch(:items, []))
20
- item.delete(:items) if item[:items].empty?
21
+ def menu_level(items)
22
+ level_content = items.map{|item| menu_item(item) }.compact
23
+ tag(:ul){ level_content } if level_content.present?
24
+ end
21
25
 
22
- if item[:items]
23
- item[:active] = item[:items].find{|i| i[:active] == true }.present?
24
- item[:url_helper] = item[:items].first[:url_helper] if item[:items].present?
25
- item
26
- elsif access_control.controller_permitted?(item[:controller])
27
- item[:active] = active_controller?(item[:controller])
28
- item
29
- else
30
- nil
26
+ def menu_item(item)
27
+ tag(:li, item_attributes(item)) do
28
+ if controller_group?(item)
29
+ menu_item_group(item)
30
+ else
31
+ menu_item_single(item)
32
+ end
31
33
  end
32
34
  end
33
35
 
34
- def self.active_controller?(controller_name)
35
- access_control.current_controller_name == controller_name
36
+ def controller_group?(item)
37
+ item.respond_to? :controllers
36
38
  end
37
- end
38
-
39
- def output
40
- menu_items = Menu.build(Releaf.application.config.menu, access_control)
41
- compacter << tag(:nav, menu_level(menu_items))
42
- end
43
39
 
44
- def menu_level(items)
45
- tag(:ul) do
46
- items.collect{|item| menu_item(item) }
40
+ def menu_item_single(item)
41
+ tag(:a, class: "trigger", href: item.path) do
42
+ item_name_content(item)
43
+ end
47
44
  end
48
- end
49
45
 
50
- def menu_item(item)
51
- tag(:li, item_attributes(item)) do
52
- if item[:items]
53
- tag(:span, class: "trigger") do
54
- item_name_content(item) << item_collapser(item)
55
- end << menu_level(item[:items])
56
- else
57
- tag(:a, class: "trigger", href: url_for(item[:url_helper])) do
58
- item_name_content(item)
59
- end
60
- end
46
+ def menu_item_group(item)
47
+ tag(:span, class: "trigger") do
48
+ item_name_content(item) << item_collapser(item)
49
+ end << menu_level(item.controllers)
61
50
  end
62
- end
63
51
 
64
- def collapsed_item?(item)
65
- item[:items] && !item[:active] && layout_settings("releaf.menu.collapsed.#{item[:name]}") == true
66
- end
52
+ def collapsed_item?(item)
53
+ controller_group?(item) && !active?(item) && layout_settings("releaf.menu.collapsed.#{item.name}") == true
54
+ end
67
55
 
68
- def item_attributes(item)
69
- attributes = {
70
- class: [],
71
- data: {
72
- name: item[:name]
56
+ def item_attributes(item)
57
+ attributes = {
58
+ class: item_classes(item),
59
+ data: {
60
+ name: item.name
61
+ }
73
62
  }
74
- }
75
63
 
76
- attributes[:class] << "collapsed" if collapsed_item?(item)
77
- attributes[:class] << "active" if item[:active]
78
- attributes.delete(:class) if attributes[:class].empty?
79
-
80
- attributes
81
- end
64
+ attributes.delete(:class) if attributes[:class].empty?
65
+ attributes
66
+ end
82
67
 
68
+ def item_classes(item)
69
+ list = []
70
+ list << "collapsed" if collapsed_item?(item)
71
+ list << "active" if active?(item)
72
+ list
73
+ end
83
74
 
84
- def item_name_content(item)
85
- item_full_name = t(item[:name], scope: "admin.controllers")
86
- item_abbreviation = item_name_abbreviation( item_full_name )
75
+ def item_name_content(item)
76
+ item_full_name = item.localized_name
77
+ item_abbreviation = item_name_abbreviation( item_full_name )
87
78
 
88
- tag(:abbr, item_abbreviation, title: item_full_name) + tag(:span, item_full_name, class: "name")
89
- end
79
+ tag(:abbr, item_abbreviation, title: item_full_name) + tag(:span, item_full_name, class: "name")
80
+ end
90
81
 
91
- def item_name_abbreviation( item_full_name )
92
- return "" if item_full_name.blank?
93
- # use the first two letters after the last slash that is not preceded by a space
94
- # to avoid identical abbreviations for namespaced items in case of missing translations
95
- # but still use the first word in cases of user-entered slashes, e.g. "Inputs / Outputs"
96
- item_full_name.split(/(?<!\s)\//).last.to_s[0..1].mb_chars.capitalize
97
- end
82
+ def item_name_abbreviation( item_full_name )
83
+ return "" if item_full_name.blank?
84
+ # use the first two letters after the last slash that is not preceded by a space
85
+ # to avoid identical abbreviations for namespaced items in case of missing translations
86
+ # but still use the first word in cases of user-entered slashes, e.g. "Inputs / Outputs"
87
+ item_full_name.split(/(?<!\s)\//).last.to_s[0..1].mb_chars.capitalize
88
+ end
98
89
 
99
- def item_collapser(item)
100
- tag(:span, class: "collapser") do
101
- tag(:button, type: "button") do
102
- item_collapser_icon(item)
90
+ def item_collapser(item)
91
+ tag(:span, class: "collapser") do
92
+ tag(:button, type: "button") do
93
+ item_collapser_icon(item)
94
+ end
103
95
  end
104
96
  end
105
- end
106
-
107
- def compact_side?
108
- layout_settings('releaf.side.compact')
109
- end
110
97
 
111
- def item_collapser_icon(item)
112
- if compact_side?
113
- icon("chevron-right")
114
- else
115
- icon(collapsed_item?(item) ? "chevron-down" : "chevron-up")
98
+ def compact_side?
99
+ layout_settings('releaf.side.compact')
116
100
  end
117
- end
118
101
 
119
- def compacter
120
- tag(:div, class: "compacter") do
102
+ def item_collapser_icon(item)
121
103
  if compact_side?
122
- icon_name = "angle-double-right"
123
- title_attribute = 'title-expand'
104
+ icon("chevron-right")
124
105
  else
125
- icon_name = "angle-double-left"
126
- title_attribute = 'title-collapse'
106
+ icon(collapsed_item?(item) ? "chevron-down" : "chevron-up")
127
107
  end
128
- button(nil, icon_name, title: compacter_data[title_attribute], data: compacter_data )
129
108
  end
130
- end
131
-
132
- def compacter_data
133
- {
134
- 'title-expand' => t("Expand", scope: :admin),
135
- 'title-collapse' => t("Collapse", scope: :admin)
136
- }
137
- end
138
109
 
110
+ def compacter
111
+ tag(:div, class: "compacter") do
112
+ if compact_side?
113
+ icon_name = "angle-double-right"
114
+ title_attribute = 'title-expand'
115
+ else
116
+ icon_name = "angle-double-left"
117
+ title_attribute = 'title-collapse'
118
+ end
119
+ button(nil, icon_name, title: compacter_data[title_attribute], data: compacter_data )
120
+ end
121
+ end
139
122
 
123
+ def compacter_data
124
+ {
125
+ 'title-expand' => t("Expand", scope: :admin),
126
+ 'title-collapse' => t("Collapse", scope: :admin)
127
+ }
128
+ end
129
+ end
140
130
  end
@@ -2,10 +2,11 @@ class Releaf::Builders::RefusedDestroyDialogBuilder
2
2
  include Releaf::Builders::ResourceDialog
3
3
 
4
4
  def section_body
5
+ message = "Deletion of %{resource} restricted due to existing relations:"
5
6
  tag(:div, class: "body") do
6
7
  [
7
8
  icon("ban"),
8
- tag(:div, t("Deletion of %{resource} was refused due to existing relations:", default: "Deletion of %{resource} restricted, due to existing relations:", resource: resource_to_text(resource)), class: "description"),
9
+ tag(:div, t(message, default: message, resource: resource_title(resource)), class: "description"),
9
10
  restricted_relations
10
11
  ]
11
12
  end
@@ -22,13 +23,7 @@ class Releaf::Builders::RefusedDestroyDialogBuilder
22
23
  end
23
24
 
24
25
  def relation_description(relation, key)
25
- (
26
- unless relation[:controller].nil?
27
- I18n.t(relation[:controller], scope: 'admin.controllers')
28
- else
29
- I18n.t(key, scope: 'admin.controllers')
30
- end
31
- ) << " (#{relation[:objects].count})"
26
+ "#{resource.class.human_attribute_name(key)} (#{relation[:objects].count})"
32
27
  end
33
28
 
34
29
  def relation_objects(relation)
@@ -41,10 +36,10 @@ class Releaf::Builders::RefusedDestroyDialogBuilder
41
36
 
42
37
  def relation_objects_item(item, relation)
43
38
  tag(:li) do
44
- unless relation[:controller].nil?
45
- link_to(resource_to_text(item), controller: relation[:controller], action: "edit", id: item)
39
+ if relation[:controller].nil?
40
+ resource_title(item)
46
41
  else
47
- resource_to_text(item)
42
+ link_to(resource_title(item), controller: relation[:controller], action: "edit", id: item)
48
43
  end
49
44
  end
50
45
  end
@@ -58,7 +53,7 @@ class Releaf::Builders::RefusedDestroyDialogBuilder
58
53
 
59
54
  def footer_primary_tools
60
55
  [
61
- button(t("Ok"), "check", href: index_url, data: {type: 'cancel'})
56
+ button(t("Ok"), "check", href: index_path, data: {type: 'cancel'})
62
57
  ]
63
58
  end
64
59
 
@@ -14,13 +14,13 @@ module Releaf::Builders::ResourceView
14
14
  end
15
15
 
16
16
  def section_header_text
17
- resource.new_record? ? t("Create new resource") : resource_to_text(resource)
17
+ resource.new_record? ? t("Create new resource") : resource_title(resource)
18
18
  end
19
19
 
20
20
  def section_header_extras
21
21
  return unless feature_available? :toolbox
22
22
  tag(:div, class: "extras toolbox-wrap") do
23
- toolbox(resource, index_url: index_url)
23
+ toolbox(resource, index_path: index_path)
24
24
  end
25
25
  end
26
26
 
@@ -45,10 +45,10 @@ module Releaf::Builders::ResourceView
45
45
  end
46
46
 
47
47
  def back_to_list?
48
- feature_available?(:index) && params[:index_url].present?
48
+ feature_available?(:index) && params[:index_path].present?
49
49
  end
50
50
 
51
51
  def back_to_list_button
52
- button(t("Back to list"), "caret-left", class: "secondary", href: index_url)
52
+ button(t("Back to list"), "caret-left", class: "secondary", href: index_path)
53
53
  end
54
54
  end