releaf-core 0.2.1

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 (288) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +24 -0
  3. data/app/assets/fonts/releaf/RobotoRegular_normal_400.ttf +0 -0
  4. data/app/assets/fonts/releaf/RobotoRegular_normal_400.woff +0 -0
  5. data/app/assets/fonts/releaf/RobotoRegular_normal_400.woff2 +0 -0
  6. data/app/assets/images/releaf/icons/apple-touch-icon-114x114-precomposed.png +0 -0
  7. data/app/assets/images/releaf/icons/apple-touch-icon-152x152-precomposed.png +0 -0
  8. data/app/assets/images/releaf/icons/apple-touch-icon-72x72-precomposed.png +0 -0
  9. data/app/assets/images/releaf/icons/favicon.ico +0 -0
  10. data/app/assets/images/releaf/icons/favicon.png +0 -0
  11. data/app/assets/images/releaf/icons/msapplication-tile-144x144.png +0 -0
  12. data/app/assets/images/releaf/logo-login.png +0 -0
  13. data/app/assets/images/releaf/logo.png +0 -0
  14. data/app/assets/javascripts/ckeditor/plugins/mediaembed/icons/hidpi/mediaembed.png +0 -0
  15. data/app/assets/javascripts/ckeditor/plugins/mediaembed/icons/mediaembed.png +0 -0
  16. data/app/assets/javascripts/ckeditor/plugins/mediaembed/lang/en.js +12 -0
  17. data/app/assets/javascripts/ckeditor/plugins/mediaembed/lang/es.js +12 -0
  18. data/app/assets/javascripts/ckeditor/plugins/mediaembed/plugin.js +63 -0
  19. data/app/assets/javascripts/releaf/3rd_party/jquery-ui-timepicker-addon.js +1882 -0
  20. data/app/assets/javascripts/releaf/3rd_party/jquery.magnific-popup.min.js +4 -0
  21. data/app/assets/javascripts/releaf/application.js +13 -0
  22. data/app/assets/javascripts/releaf/include/ajax.js +66 -0
  23. data/app/assets/javascripts/releaf/include/ajaxbox.js +179 -0
  24. data/app/assets/javascripts/releaf/include/dialogs.js +13 -0
  25. data/app/assets/javascripts/releaf/include/field.type_associated_set.js +32 -0
  26. data/app/assets/javascripts/releaf/include/field.type_date_or_datetime_or_time.js +73 -0
  27. data/app/assets/javascripts/releaf/include/field.type_richtext.js +188 -0
  28. data/app/assets/javascripts/releaf/include/loader.js +45 -0
  29. data/app/assets/javascripts/releaf/include/localization.js +213 -0
  30. data/app/assets/javascripts/releaf/include/nested_fields.js +295 -0
  31. data/app/assets/javascripts/releaf/include/notifications.js +267 -0
  32. data/app/assets/javascripts/releaf/include/pagination.js +19 -0
  33. data/app/assets/javascripts/releaf/include/profile_settings.js +28 -0
  34. data/app/assets/javascripts/releaf/include/remote_validator.js +437 -0
  35. data/app/assets/javascripts/releaf/include/search.js +140 -0
  36. data/app/assets/javascripts/releaf/include/sidebar.js +149 -0
  37. data/app/assets/javascripts/releaf/include/sortable.js +69 -0
  38. data/app/assets/javascripts/releaf/include/toolbox.js +221 -0
  39. data/app/assets/javascripts/releaf/include/url_builder.js +193 -0
  40. data/app/assets/stylesheets/releaf/application.scss +9 -0
  41. data/app/assets/stylesheets/releaf/environment/extras.scss +11 -0
  42. data/app/assets/stylesheets/releaf/environment/functions/units.scss +12 -0
  43. data/app/assets/stylesheets/releaf/environment/functions.scss +1 -0
  44. data/app/assets/stylesheets/releaf/environment/mixins/blocks.scss +133 -0
  45. data/app/assets/stylesheets/releaf/environment/mixins/elements.scss +64 -0
  46. data/app/assets/stylesheets/releaf/environment/mixins/text.scss +61 -0
  47. data/app/assets/stylesheets/releaf/environment/mixins.scss +3 -0
  48. data/app/assets/stylesheets/releaf/environment/variables/colors.scss +93 -0
  49. data/app/assets/stylesheets/releaf/environment/variables/dimensions.scss +0 -0
  50. data/app/assets/stylesheets/releaf/environment/variables/magnific-popup.scss +6 -0
  51. data/app/assets/stylesheets/releaf/environment/variables.scss +5 -0
  52. data/app/assets/stylesheets/releaf/environment.scss +4 -0
  53. data/app/assets/stylesheets/releaf/layout/base.scss +32 -0
  54. data/app/assets/stylesheets/releaf/layout/breadcrumbs.scss +47 -0
  55. data/app/assets/stylesheets/releaf/layout/buttons.scss +107 -0
  56. data/app/assets/stylesheets/releaf/layout/deprecated.scss +29 -0
  57. data/app/assets/stylesheets/releaf/layout/dialogs.scss +138 -0
  58. data/app/assets/stylesheets/releaf/layout/errors.scss +28 -0
  59. data/app/assets/stylesheets/releaf/layout/extras.scss +10 -0
  60. data/app/assets/stylesheets/releaf/layout/fields.scss +305 -0
  61. data/app/assets/stylesheets/releaf/layout/fonts.scss +16 -0
  62. data/app/assets/stylesheets/releaf/layout/footer.scss +80 -0
  63. data/app/assets/stylesheets/releaf/layout/forms.scss +23 -0
  64. data/app/assets/stylesheets/releaf/layout/header.scss +55 -0
  65. data/app/assets/stylesheets/releaf/layout/icons.scss +4 -0
  66. data/app/assets/stylesheets/releaf/layout/images.scss +4 -0
  67. data/app/assets/stylesheets/releaf/layout/links.scss +7 -0
  68. data/app/assets/stylesheets/releaf/layout/localization.scss +79 -0
  69. data/app/assets/stylesheets/releaf/layout/main.scss +43 -0
  70. data/app/assets/stylesheets/releaf/layout/notifications.scss +67 -0
  71. data/app/assets/stylesheets/releaf/layout/pagination.scss +18 -0
  72. data/app/assets/stylesheets/releaf/layout/search.scss +70 -0
  73. data/app/assets/stylesheets/releaf/layout/sections.scss +138 -0
  74. data/app/assets/stylesheets/releaf/layout/sidebar.scss +306 -0
  75. data/app/assets/stylesheets/releaf/layout/tables.scss +99 -0
  76. data/app/assets/stylesheets/releaf/layout/text.scss +31 -0
  77. data/app/assets/stylesheets/releaf/layout/toolboxes.scss +69 -0
  78. data/app/assets/stylesheets/releaf/layout.scss +35 -0
  79. data/app/assets/stylesheets/releaf/vendor/magnific-popup/main.scss +596 -0
  80. data/app/assets/stylesheets/releaf/vendor/magnific-popup/settings.scss +45 -0
  81. data/app/builders/releaf/builders/association_reflector.rb +58 -0
  82. data/app/builders/releaf/builders/base.rb +80 -0
  83. data/app/builders/releaf/builders/collection.rb +8 -0
  84. data/app/builders/releaf/builders/confirm_destroy_dialog_builder.rb +25 -0
  85. data/app/builders/releaf/builders/confirm_dialog_builder.rb +54 -0
  86. data/app/builders/releaf/builders/edit_builder.rb +66 -0
  87. data/app/builders/releaf/builders/form_builder.rb +594 -0
  88. data/app/builders/releaf/builders/index_builder.rb +118 -0
  89. data/app/builders/releaf/builders/orderer.rb +5 -0
  90. data/app/builders/releaf/builders/page/header_builder.rb +70 -0
  91. data/app/builders/releaf/builders/page/layout_builder.rb +155 -0
  92. data/app/builders/releaf/builders/page/menu_builder.rb +140 -0
  93. data/app/builders/releaf/builders/pagination_builder.rb +107 -0
  94. data/app/builders/releaf/builders/refused_destroy_dialog_builder.rb +68 -0
  95. data/app/builders/releaf/builders/resource.rb +9 -0
  96. data/app/builders/releaf/builders/resource_dialog.rb +8 -0
  97. data/app/builders/releaf/builders/resource_view.rb +54 -0
  98. data/app/builders/releaf/builders/show_builder.rb +3 -0
  99. data/app/builders/releaf/builders/table_builder.rb +280 -0
  100. data/app/builders/releaf/builders/tags/releaf_associated_set_field.rb +40 -0
  101. data/app/builders/releaf/builders/template.rb +8 -0
  102. data/app/builders/releaf/builders/toolbox.rb +23 -0
  103. data/app/builders/releaf/builders/toolbox_builder.rb +27 -0
  104. data/app/builders/releaf/builders/view.rb +132 -0
  105. data/app/builders/releaf/builders.rb +38 -0
  106. data/app/builders/releaf/core/settings/form_builder.rb +21 -0
  107. data/app/builders/releaf/core/settings/table_builder.rb +11 -0
  108. data/app/controllers/concerns/releaf/breadcrumbs.rb +42 -0
  109. data/app/controllers/concerns/releaf/richtext_attachments.rb +20 -0
  110. data/app/controllers/releaf/base_controller.rb +458 -0
  111. data/app/controllers/releaf/core/errors_controller.rb +5 -0
  112. data/app/controllers/releaf/core/settings_controller.rb +50 -0
  113. data/app/helpers/releaf/application_helper.rb +53 -0
  114. data/app/helpers/releaf/button_helper.rb +50 -0
  115. data/app/helpers/releaf/javascript_helper.rb +75 -0
  116. data/app/lib/releaf/core/assets_resolver.rb +58 -0
  117. data/app/lib/releaf/core/default_searchable_fields.rb +43 -0
  118. data/app/lib/releaf/core/error_formatter.rb +103 -0
  119. data/app/lib/releaf/core/item_orderer.rb +102 -0
  120. data/app/lib/releaf/core/resource_base.rb +66 -0
  121. data/app/lib/releaf/core/resource_fields.rb +6 -0
  122. data/app/lib/releaf/core/resource_params.rb +47 -0
  123. data/app/lib/releaf/core/resource_table_fields.rb +10 -0
  124. data/app/lib/releaf/core/resource_utilities.rb +36 -0
  125. data/app/lib/releaf/core/responders/access_denied_responder.rb +9 -0
  126. data/app/lib/releaf/core/responders/after_save_responder.rb +28 -0
  127. data/app/lib/releaf/core/responders/confirm_destroy_responder.rb +13 -0
  128. data/app/lib/releaf/core/responders/destroy_responder.rb +10 -0
  129. data/app/lib/releaf/core/responders/error_responder.rb +9 -0
  130. data/app/lib/releaf/core/responders/feature_disabled_responder.rb +9 -0
  131. data/app/lib/releaf/core/responders/page_not_found_responder.rb +9 -0
  132. data/app/lib/releaf/core/responders.rb +31 -0
  133. data/app/lib/releaf/core/search.rb +147 -0
  134. data/app/lib/releaf/core/template_field_type_mapper.rb +127 -0
  135. data/app/models/releaf/richtext_attachment.rb +6 -0
  136. data/app/models/releaf/settings.rb +27 -0
  137. data/app/views/layouts/releaf/admin.html.erb +1 -0
  138. data/app/views/releaf/base/confirm_destroy.ruby +1 -0
  139. data/app/views/releaf/base/create_releaf_richtext_attachment.haml +1 -0
  140. data/app/views/releaf/base/edit.ruby +1 -0
  141. data/app/views/releaf/base/index.ruby +1 -0
  142. data/app/views/releaf/base/new.ruby +1 -0
  143. data/app/views/releaf/base/refused_destroy.ruby +1 -0
  144. data/app/views/releaf/base/show.ruby +1 -0
  145. data/app/views/releaf/base/toolbox.ruby +1 -0
  146. data/app/views/releaf/error_pages/_error.html.haml +10 -0
  147. data/app/views/releaf/error_pages/access_denied.html.haml +1 -0
  148. data/app/views/releaf/error_pages/feature_disabled.html.haml +1 -0
  149. data/app/views/releaf/error_pages/page_not_found.html.haml +2 -0
  150. data/lib/generators/dummy/install_generator.rb +18 -0
  151. data/lib/generators/dummy/templates/builders/admin/books/form_builder.rb +13 -0
  152. data/lib/generators/dummy/templates/builders/admin/books/index_builder.rb +30 -0
  153. data/lib/generators/dummy/templates/builders/admin/books/table_builder.rb +7 -0
  154. data/lib/generators/dummy/templates/builders/admin/nodes/form_builder.rb +7 -0
  155. data/lib/generators/dummy/templates/config/routes.rb +19 -0
  156. data/lib/generators/dummy/templates/controllers/admin/authors_controller.rb +12 -0
  157. data/lib/generators/dummy/templates/controllers/admin/books_controller.rb +17 -0
  158. data/lib/generators/dummy/templates/controllers/admin/chapters_controller.rb +3 -0
  159. data/lib/generators/dummy/templates/controllers/admin/publishers_controller.rb +3 -0
  160. data/lib/generators/dummy/templates/controllers/application_controller.rb +39 -0
  161. data/lib/generators/dummy/templates/controllers/concerns/.keep +0 -0
  162. data/lib/generators/dummy/templates/controllers/concerns/node_controller.rb +37 -0
  163. data/lib/generators/dummy/templates/controllers/contacts_controller.rb +3 -0
  164. data/lib/generators/dummy/templates/controllers/home_pages_controller.rb +3 -0
  165. data/lib/generators/dummy/templates/controllers/text_pages_controller.rb +3 -0
  166. data/lib/generators/dummy/templates/initializers/releaf.rb +35 -0
  167. data/lib/generators/dummy/templates/migrations/create_authors.rb +14 -0
  168. data/lib/generators/dummy/templates/migrations/create_banners.rb +11 -0
  169. data/lib/generators/dummy/templates/migrations/create_book_sequels.rb +14 -0
  170. data/lib/generators/dummy/templates/migrations/create_books.rb +27 -0
  171. data/lib/generators/dummy/templates/migrations/create_bundles.rb +7 -0
  172. data/lib/generators/dummy/templates/migrations/create_chapters.rb +13 -0
  173. data/lib/generators/dummy/templates/migrations/create_home_pages.rb +9 -0
  174. data/lib/generators/dummy/templates/migrations/create_node_extra_fields.rb +5 -0
  175. data/lib/generators/dummy/templates/migrations/create_publishers.rb +8 -0
  176. data/lib/generators/dummy/templates/migrations/create_text_pages.rb +9 -0
  177. data/lib/generators/dummy/templates/models/author.rb +10 -0
  178. data/lib/generators/dummy/templates/models/banner.rb +5 -0
  179. data/lib/generators/dummy/templates/models/book.rb +19 -0
  180. data/lib/generators/dummy/templates/models/book_sequel.rb +4 -0
  181. data/lib/generators/dummy/templates/models/bundle.rb +17 -0
  182. data/lib/generators/dummy/templates/models/chapter.rb +7 -0
  183. data/lib/generators/dummy/templates/models/home_page.rb +5 -0
  184. data/lib/generators/dummy/templates/models/node.rb +10 -0
  185. data/lib/generators/dummy/templates/models/publisher.rb +9 -0
  186. data/lib/generators/dummy/templates/models/text_page.rb +5 -0
  187. data/lib/generators/dummy/templates/views/contacts/show.html.haml +1 -0
  188. data/lib/generators/dummy/templates/views/home_pages/show.haml +1 -0
  189. data/lib/generators/dummy/templates/views/layouts/application.html.haml +22 -0
  190. data/lib/generators/dummy/templates/views/text_pages/show.haml +1 -0
  191. data/lib/generators/releaf/install_generator.rb +93 -0
  192. data/lib/generators/releaf/templates/initializers/haml.rb +1 -0
  193. data/lib/generators/releaf/templates/initializers/releaf.rb +30 -0
  194. data/lib/generators/releaf/templates/migrations/create_releaf_nodes.rb +28 -0
  195. data/lib/generators/releaf/templates/migrations/create_releaf_permissions.rb +12 -0
  196. data/lib/generators/releaf/templates/migrations/create_releaf_richtext_attachments.rb +12 -0
  197. data/lib/generators/releaf/templates/migrations/create_releaf_roles.rb +9 -0
  198. data/lib/generators/releaf/templates/migrations/create_releaf_settings.rb +17 -0
  199. data/lib/generators/releaf/templates/migrations/create_releaf_translations.rb +21 -0
  200. data/lib/generators/releaf/templates/migrations/create_releaf_users.rb +52 -0
  201. data/lib/generators/releaf/templates/models/node.rb +3 -0
  202. data/lib/generators/releaf/templates/seeds/seeds.rb +54 -0
  203. data/lib/releaf/core/application.rb +17 -0
  204. data/lib/releaf/core/builders_autoload.rb +27 -0
  205. data/lib/releaf/core/component.rb +9 -0
  206. data/lib/releaf/core/configuration.rb +101 -0
  207. data/lib/releaf/core/engine.rb +35 -0
  208. data/lib/releaf/core/exceptions.rb +38 -0
  209. data/lib/releaf/core/route_mapper.rb +59 -0
  210. data/lib/releaf/core/settings_ui_component.rb +7 -0
  211. data/lib/releaf/core/validation_error_codes.rb +36 -0
  212. data/lib/releaf/version.rb +3 -0
  213. data/lib/releaf-core.rb +14 -0
  214. data/lib/tasks/releaf_tasks.rake +4 -0
  215. data/releaf-core.gemspec +35 -0
  216. data/spec/builders/builders/association_reflector_spec.rb +138 -0
  217. data/spec/builders/builders/base_spec.rb +276 -0
  218. data/spec/builders/builders/collection_spec.rb +18 -0
  219. data/spec/builders/builders/confirm_destroy_dialog_builder_spec.rb +71 -0
  220. data/spec/builders/builders/confirm_dialog_builder_spec.rb +105 -0
  221. data/spec/builders/builders/edit_builder_spec.rb +215 -0
  222. data/spec/builders/builders/form_builder_spec.rb +562 -0
  223. data/spec/builders/builders/index_builder_spec.rb +345 -0
  224. data/spec/builders/builders/orderer_spec.rb +22 -0
  225. data/spec/builders/builders/page/header_builder_spec.rb +143 -0
  226. data/spec/builders/builders/page/layout_builder_spec.rb +73 -0
  227. data/spec/builders/builders/page/menu_builder_spec.rb +160 -0
  228. data/spec/builders/builders/pagination_builder_spec.rb +330 -0
  229. data/spec/builders/builders/resource_dialog_spec.rb +21 -0
  230. data/spec/builders/builders/resource_view_spec.rb +158 -0
  231. data/spec/builders/builders/show_builder_spec.rb +7 -0
  232. data/spec/builders/builders/table_builder_spec.rb +638 -0
  233. data/spec/builders/builders/template_spec.rb +12 -0
  234. data/spec/builders/builders/toolbox_builder_spec.rb +67 -0
  235. data/spec/builders/builders/toolbox_spec.rb +48 -0
  236. data/spec/builders/builders/view_spec.rb +281 -0
  237. data/spec/builders/builders_spec.rb +134 -0
  238. data/spec/builders/core/settings/form_builder_spec.rb +69 -0
  239. data/spec/builders/core/settings/table_builder_spec.rb +21 -0
  240. data/spec/controllers/concerns/releaf/richtext_attachments_spec.rb +51 -0
  241. data/spec/controllers/releaf/base_controller_spec.rb +447 -0
  242. data/spec/controllers/releaf/core/settings_controller_spec.rb +31 -0
  243. data/spec/features/ajaxbox_spec.rb +111 -0
  244. data/spec/features/authorization_spec.rb +50 -0
  245. data/spec/features/dragonfly_integration_spec.rb +24 -0
  246. data/spec/features/edit_actions_spec.rb +142 -0
  247. data/spec/features/errors_spec.rb +29 -0
  248. data/spec/features/index_actions_spec.rb +85 -0
  249. data/spec/features/index_table_spec.rb +32 -0
  250. data/spec/features/menu_spec.rb +71 -0
  251. data/spec/features/richtext_attachments_spec.rb +64 -0
  252. data/spec/features/richtext_embed_spec.rb +29 -0
  253. data/spec/features/richtext_spec.rb +19 -0
  254. data/spec/features/search_spec.rb +825 -0
  255. data/spec/features/settings_spec.rb +38 -0
  256. data/spec/features/title_spec.rb +13 -0
  257. data/spec/fixtures/common_fields.yml +17 -0
  258. data/spec/fixtures/cs.png +0 -0
  259. data/spec/fixtures/time.formats.xlsx +0 -0
  260. data/spec/fixtures/unicorn.jpg +0 -0
  261. data/spec/helpers/application_helper_spec.rb +75 -0
  262. data/spec/helpers/button_helper_spec.rb +146 -0
  263. data/spec/lib/releaf/core/application_spec.rb +42 -0
  264. data/spec/lib/releaf/core/assets_resolver_spec.rb +113 -0
  265. data/spec/lib/releaf/core/configuration_spec.rb +230 -0
  266. data/spec/lib/releaf/core/default_searchable_fields_spec.rb +161 -0
  267. data/spec/lib/releaf/core/error_formatter_spec.rb +242 -0
  268. data/spec/lib/releaf/core/item_orderer_spec.rb +142 -0
  269. data/spec/lib/releaf/core/resource_base_spec.rb +174 -0
  270. data/spec/lib/releaf/core/resource_fields_spec.rb +12 -0
  271. data/spec/lib/releaf/core/resource_params_spec.rb +117 -0
  272. data/spec/lib/releaf/core/resource_table_fields_spec.rb +18 -0
  273. data/spec/lib/releaf/core/resource_utilities_spec.rb +87 -0
  274. data/spec/lib/releaf/core/responders/access_denied_responder_spec.rb +12 -0
  275. data/spec/lib/releaf/core/responders/after_save_responder_spec.rb +102 -0
  276. data/spec/lib/releaf/core/responders/confirm_destroy_responder_spec.rb +26 -0
  277. data/spec/lib/releaf/core/responders/destroy_responder_spec.rb +30 -0
  278. data/spec/lib/releaf/core/responders/error_responder_spec.rb +26 -0
  279. data/spec/lib/releaf/core/responders/feature_disabled_responder_spec.rb +12 -0
  280. data/spec/lib/releaf/core/responders/page_not_found_responder_spec.rb +12 -0
  281. data/spec/lib/releaf/core/responders_spec.rb +60 -0
  282. data/spec/lib/releaf/core/template_field_type_mapper_spec.rb +311 -0
  283. data/spec/lib/validation_error_codes_spec.rb +56 -0
  284. data/spec/misc/factories_spec.rb +43 -0
  285. data/spec/models/settings_spec.rb +58 -0
  286. data/spec/routing/route_mapper_spec.rb +185 -0
  287. data/spec/rspec_helpers/test_helpers_spec.rb +20 -0
  288. metadata +657 -0
@@ -0,0 +1,127 @@
1
+ module Releaf::Core
2
+ module TemplateFieldTypeMapper
3
+
4
+ # Helps to determinate which template to render in :edit feature
5
+ # for given objects attribute.
6
+ #
7
+ # @return field_type
8
+ #
9
+ # where field_type is a string representing field type
10
+ # and use_i18n is a `true` or `false`. If use_i18n is true, then template
11
+ # with localization features should be used (if exists)
12
+ #
13
+ # This helper is used by views.
14
+ #
15
+ # @todo document rendering conventions
16
+ def self.field_type_name obj, attribute_name
17
+ field_type = nil
18
+ column_type = nil
19
+
20
+ if use_i18n?(obj, attribute_name)
21
+ begin
22
+ column_type = obj.class::Translation.columns_hash[attribute_name.to_s].try(:type)
23
+ rescue
24
+ end
25
+ else
26
+ column_type = obj.class.columns_hash[attribute_name.to_s].try(:type)
27
+ end
28
+
29
+ column_type ||= 'string'
30
+
31
+ if respond_to?("field_type_name_for_#{column_type}")
32
+ field_type = send("field_type_name_for_#{column_type}", attribute_name, obj)
33
+ end
34
+
35
+ return field_type || 'text'
36
+ end
37
+
38
+ # should localized template be preffered?
39
+ def self.use_i18n? obj, attribute_name
40
+ return false unless obj.class.respond_to? :translates?
41
+ return false unless obj.class.translates?
42
+ return obj.class.translated_attribute_names.include?(attribute_name.to_sym)
43
+ end
44
+
45
+ protected
46
+
47
+ def self.image_or_error attribute_name, obj
48
+ field_type_or_error 'image', attribute_name, obj
49
+ end
50
+
51
+ def self.file_or_error attribute_name, obj
52
+ field_type_or_error 'file', attribute_name, obj
53
+ end
54
+
55
+ def self.field_type_or_error type, attribute_name, obj
56
+ raise ArgumentError, 'attribute_name must end with _uid' unless attribute_name =~ /_uid$/
57
+ file_method_name = attribute_name.to_s.sub(/_uid$/, '')
58
+ if obj.respond_to? file_method_name
59
+ return type
60
+ else
61
+ raise "object doesn't respond to `#{file_method_name}` method. Did you forgot to add `#{type}_accessor :#{file_method_name}` to `#{obj.class.name}` model?"
62
+ end
63
+ end
64
+
65
+ def self.field_type_name_for_string attribute_name, obj
66
+ case attribute_name.to_s
67
+ when /(thumbnail|image|photo(graphy)?|picture|avatar|logo|banner|icon)_uid$/
68
+ return image_or_error attribute_name, obj
69
+
70
+ when /_uid$/
71
+ return file_or_error attribute_name, obj
72
+
73
+ when /password/, 'pin'
74
+ return 'password'
75
+
76
+ when /_email$/, 'email'
77
+ return 'email'
78
+
79
+ when /_link$/, 'link'
80
+ return 'link'
81
+
82
+ else
83
+ return 'text'
84
+ end
85
+ end
86
+
87
+ def self.field_type_name_for_text attribute_name, obj
88
+ case attribute_name.to_s
89
+ when /_(url|homepage|link)$/, 'homepage', 'url'
90
+ 'link'
91
+ when /_html$/, 'html'
92
+ 'richtext'
93
+ else
94
+ 'textarea'
95
+ end
96
+ end
97
+
98
+ def self.field_type_name_for_datetime attribute_name, obj
99
+ 'datetime'
100
+ end
101
+
102
+ def self.field_type_name_for_date attribute_name, obj
103
+ 'date'
104
+ end
105
+
106
+ def self.field_type_name_for_time attribute_name, obj
107
+ 'time'
108
+ end
109
+
110
+ def self.field_type_name_for_float attribute_name, obj
111
+ 'float'
112
+ end
113
+
114
+ def self.field_type_name_for_decimal attribute_name, obj
115
+ 'decimal'
116
+ end
117
+
118
+ def self.field_type_name_for_integer attribute_name, obj
119
+ return 'item' if attribute_name.to_s =~ /_id$/ && obj.class.reflect_on_association(attribute_name[0..-4].to_sym)
120
+ return 'integer'
121
+ end
122
+
123
+ def self.field_type_name_for_boolean attribute_name, obj
124
+ return 'boolean'
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,6 @@
1
+ module Releaf
2
+ class RichtextAttachment < ActiveRecord::Base
3
+ self.table_name = 'releaf_richtext_attachments'
4
+ dragonfly_accessor :file
5
+ end
6
+ end
@@ -0,0 +1,27 @@
1
+ class Releaf::Settings < RailsSettings::CachedSettings
2
+
3
+ cattr_accessor :registry
4
+ @@registry = {}.with_indifferent_access
5
+
6
+ def to_text
7
+ var
8
+ end
9
+
10
+ def self.registered_keys
11
+ @@registry.keys
12
+ end
13
+
14
+ def self.register(args)
15
+ if args.is_a? Hash
16
+ list = [args]
17
+ else
18
+ list = args
19
+ end
20
+
21
+ list.each do|item|
22
+ @@registry[item[:key]] = item
23
+ @@defaults[item[:key]] = item[:default]
24
+ self[item[:key]] = item[:default] if table_exists? && !where(var: item[:key], thing_type: nil).exists?
25
+ end
26
+ end
27
+ end
@@ -0,0 +1 @@
1
+ <%= Releaf.application.render_layout(self){ yield } %>
@@ -0,0 +1 @@
1
+ builder_class(:confirm_destroy_dialog).new(self).output
@@ -0,0 +1 @@
1
+ %script{type: "text/javascript"}= "window.parent.CKEDITOR.tools.callFunction(#{params[:CKEditorFuncNum]}, '#{@resource.file.url}', '');"
@@ -0,0 +1 @@
1
+ builder_class(:edit).new(self).output
@@ -0,0 +1 @@
1
+ builder_class(:index).new(self).output
@@ -0,0 +1 @@
1
+ builder_class(:edit).new(self).output
@@ -0,0 +1 @@
1
+ builder_class(:refused_destroy_dialog).new(self).output
@@ -0,0 +1 @@
1
+ builder_class(:show).new(self).output
@@ -0,0 +1 @@
1
+ builder_class(:toolbox).new(self).output
@@ -0,0 +1,10 @@
1
+ %section.error
2
+ %header
3
+ %h1
4
+ = message
5
+ .body
6
+ - if defined? description
7
+ %div.description= description
8
+ %a.return{href: releaf_root_path }
9
+ = t("Go home")
10
+ %i.fa.fa-chevron-right
@@ -0,0 +1 @@
1
+ = render 'releaf/error_pages/error', message: t('You are not authorized to access %{controller}', controller: controller_name, default: 'You are not authorized to access %{controller}', scope: controller_scope_name)
@@ -0,0 +1 @@
1
+ = render 'releaf/error_pages/error', message: t('%{feature} feature disabled for %{controller}', feature: @feature, controller: controller_name, scope: controller_scope_name, default: '%{feature} feature disabled for %{controller}')
@@ -0,0 +1,2 @@
1
+ = render 'releaf/error_pages/error', message: t('Page not found', scope: controller_scope_name), description: t('Something went wrong.', scope: controller_scope_name)
2
+
@@ -0,0 +1,18 @@
1
+ require File.expand_path('../../releaf/install_generator', __FILE__)
2
+
3
+ module Dummy
4
+ module Generators
5
+ class InstallGenerator < Releaf::Generators::InstallGenerator
6
+ @dummy_generator = true
7
+
8
+ source_root File.expand_path('../templates', __FILE__)
9
+
10
+ private
11
+
12
+ def get_current_dir
13
+ File.dirname(__FILE__)
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,13 @@
1
+ module Admin::Books
2
+ class FormBuilder < Releaf::Builders::FormBuilder
3
+ def render_book_sequels_sequel_id
4
+ releaf_item_field('sequel_id', options: { select_options: book_sequels_sequel_id_options })
5
+ end
6
+
7
+ def book_sequels_sequel_id_options
8
+ original_book = options[:parent_builder].object
9
+ books = Book.where(Book.arel_table[:id].not_eq(original_book.id))
10
+ options_from_collection_for_select(books, :id, :to_text, object.sequel_id)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,30 @@
1
+ module Admin::Books
2
+ class IndexBuilder < Releaf::Builders::IndexBuilder
3
+
4
+ def extra_search_content
5
+ active_search_field + publishing_date_search_fields
6
+ end
7
+
8
+ def active_search_field
9
+ search_field :only_active do
10
+ [
11
+ check_box_tag(:only_active, 'true', params['only_active'].present?),
12
+ label_tag(:only_active, t("Only active"))
13
+ ]
14
+ end
15
+ end
16
+
17
+ def publishing_date_search_fields
18
+ search_field :published_between do
19
+ [
20
+ tag(:label, t('Published between'), for: "search_published_since" ),
21
+ tag(:input, "", name: "published_since", type: "date", class: "text date-picker", value: params[:published_since], id: "search_published_since"),
22
+ tag(:label, t('and'), for: "search_published_up_to" ),
23
+ tag(:input, "", name: "published_up_to", type: "date", class: "text date-picker", value: params[:published_up_to], id: "search_published_up_to")
24
+ ]
25
+ end
26
+ end
27
+
28
+ end
29
+ end
30
+
@@ -0,0 +1,7 @@
1
+ module Admin::Books
2
+ class TableBuilder < Releaf::Builders::TableBuilder
3
+ def column_names
4
+ super + ["author.publisher.title"]
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Admin::Nodes
2
+ class FormBuilder < Releaf::Content::Nodes::FormBuilder
3
+ def node_fields
4
+ super << :description
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,19 @@
1
+ Dummy::Application.routes.draw do
2
+ mount_releaf_at '/admin' do
3
+ releaf_resources :books, :authors, :chapters, :publishers
4
+ end
5
+
6
+ releaf_routes_for(HomePage) do
7
+ get 'show'
8
+ end
9
+
10
+ releaf_routes_for(TextPage) do
11
+ get 'show'
12
+ end
13
+
14
+ releaf_routes_for(ContactsController) do
15
+ get 'show'
16
+ end
17
+
18
+ root to: 'application#redirect_to_locale_root'
19
+ end
@@ -0,0 +1,12 @@
1
+ class Admin::AuthorsController < Releaf::BaseController
2
+ def searchable_fields
3
+ [:name, :surname, books: [:title, chapters: [:title]]]
4
+ end
5
+
6
+ protected
7
+
8
+ def setup
9
+ super
10
+ @resources_per_page = params.has_key?(:show_all) ? nil : 20
11
+ end
12
+ end
@@ -0,0 +1,17 @@
1
+ class Admin::BooksController < Releaf::BaseController
2
+
3
+ def searchable_fields
4
+ [:title, :genre, author: [:name] ]
5
+ end
6
+
7
+ def resources
8
+ relation = super
9
+
10
+ relation = relation.where(active: true) if params[:only_active]
11
+ relation = relation.where( 'published_at >= ?', params[:published_since]) if params[:published_since].present?
12
+ relation = relation.where( 'published_at <= ?', params[:published_up_to]) if params[:published_up_to].present?
13
+
14
+ relation
15
+ end
16
+
17
+ end
@@ -0,0 +1,3 @@
1
+ class Admin::ChaptersController < Releaf::BaseController
2
+ end
3
+
@@ -0,0 +1,3 @@
1
+ class Admin::PublishersController < Releaf::BaseController
2
+ end
3
+
@@ -0,0 +1,39 @@
1
+ class ApplicationController < ActionController::Base
2
+ class PageNotFound < StandardError; end
3
+ rescue_from ActionController::RoutingError, with: :render_404
4
+ rescue_from ActiveRecord::RecordNotFound, with: :render_404
5
+
6
+ protect_from_forgery with: :exception
7
+ before_filter :set_locale
8
+ layout "application"
9
+ helper_method :translation_scope
10
+
11
+ def render_404
12
+ render file: Rails.root.join('public', '404.html'), status: 404, layout: nil
13
+ end
14
+
15
+ def set_locale
16
+ I18n.locale = params[:locale]
17
+ end
18
+
19
+ def redirect_to_locale_root
20
+ # if no matching root found for any of client locales
21
+ # use first root
22
+ target_root = available_roots.first
23
+ if target_root
24
+ redirect_to target_root.url
25
+ else
26
+ render text: "Welcome to Releaf", layout: true
27
+ end
28
+ end
29
+
30
+ def translation_scope
31
+ "public." + self.class.name.gsub("Controller", "").underscore
32
+ end
33
+
34
+ private
35
+
36
+ def available_roots
37
+ @roots ||= Node.roots.where(locale: I18n.available_locales, active: true)
38
+ end
39
+ end
@@ -0,0 +1,37 @@
1
+ module NodeController
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ before_filter :load_node
6
+ # node finding helpers
7
+ helper_method :root_node, :menu, :node_active?
8
+ end
9
+
10
+ def show
11
+ end
12
+
13
+ def root_node
14
+ @root ||= available_roots.find_by(locale: I18n.locale)
15
+ end
16
+
17
+ def menu
18
+ @menu ||= root_node.children.where(active: true)
19
+ end
20
+
21
+ def node_active? node
22
+ @active_nodes.include? node
23
+ end
24
+
25
+ private
26
+
27
+ def load_node
28
+ @node = Node.find(params[:node_id])
29
+ @content = @node.content unless @node.nil?
30
+
31
+ @active_nodes = []
32
+ if @node.present?
33
+ @active_nodes += @node.ancestors.reorder(Node.arel_table[:depth])
34
+ @active_nodes << @node
35
+ end
36
+ end
37
+ end