releaf-core 0.2.1 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
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