qbrick 2.5.0.pre

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 (297) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +423 -0
  3. data/Rakefile +82 -0
  4. data/app/assets/javascripts/ckeditor/plugins/adv_link/LICENSE.txt +674 -0
  5. data/app/assets/javascripts/ckeditor/plugins/adv_link/README.md +62 -0
  6. data/app/assets/javascripts/ckeditor/plugins/adv_link/dialogs/anchor.js.coffee +81 -0
  7. data/app/assets/javascripts/ckeditor/plugins/adv_link/dialogs/link.js.coffee +1353 -0
  8. data/app/assets/javascripts/ckeditor/plugins/adv_link/images/anchor.png +0 -0
  9. data/app/assets/javascripts/ckeditor/plugins/adv_link/images/hidpi/anchor.png +0 -0
  10. data/app/assets/javascripts/ckeditor/plugins/adv_link/lang/de.js +68 -0
  11. data/app/assets/javascripts/ckeditor/plugins/adv_link/lang/en.js +68 -0
  12. data/app/assets/javascripts/ckeditor/plugins/adv_link/plugin.js.coffee +282 -0
  13. data/app/assets/javascripts/kuhsaft/application.js.coffee +7 -0
  14. data/app/assets/javascripts/kuhsaft/cms/application.js.coffee.erb +136 -0
  15. data/app/assets/javascripts/kuhsaft/views/read_more_view.js.coffee +17 -0
  16. data/app/assets/stylesheets/kuhsaft/application.css.sass +1 -0
  17. data/app/assets/stylesheets/kuhsaft/cms/application.css.sass +204 -0
  18. data/app/assets/stylesheets/kuhsaft/modules/_text_brick.css.sass +16 -0
  19. data/app/controllers/kuhsaft/api/pages_controller.rb +14 -0
  20. data/app/controllers/kuhsaft/cms/admin_controller.rb +18 -0
  21. data/app/controllers/kuhsaft/cms/assets_controller.rb +38 -0
  22. data/app/controllers/kuhsaft/cms/bricks_controller.rb +61 -0
  23. data/app/controllers/kuhsaft/cms/ckimages_controller.rb +26 -0
  24. data/app/controllers/kuhsaft/cms/pages_controller.rb +71 -0
  25. data/app/controllers/kuhsaft/pages_controller.rb +38 -0
  26. data/app/controllers/kuhsaft/sitemaps_controller.rb +12 -0
  27. data/app/helpers/cms_helper.rb +27 -0
  28. data/app/helpers/kuhsaft/admin_helper.rb +20 -0
  29. data/app/helpers/kuhsaft/cms/admin_helper.rb +21 -0
  30. data/app/helpers/kuhsaft/cms/pages_helper.rb +17 -0
  31. data/app/helpers/pages_helper.rb +49 -0
  32. data/app/helpers/sitemaps_helper.rb +12 -0
  33. data/app/models/kuhsaft/accordion_brick.rb +15 -0
  34. data/app/models/kuhsaft/accordion_item_brick.rb +21 -0
  35. data/app/models/kuhsaft/anchor_brick.rb +17 -0
  36. data/app/models/kuhsaft/asset.rb +29 -0
  37. data/app/models/kuhsaft/asset_brick.rb +26 -0
  38. data/app/models/kuhsaft/brick.rb +137 -0
  39. data/app/models/kuhsaft/brick_type.rb +7 -0
  40. data/app/models/kuhsaft/brick_type_filter.rb +18 -0
  41. data/app/models/kuhsaft/ckimage.rb +5 -0
  42. data/app/models/kuhsaft/cms.rb +7 -0
  43. data/app/models/kuhsaft/column_brick.rb +22 -0
  44. data/app/models/kuhsaft/image_brick.rb +16 -0
  45. data/app/models/kuhsaft/image_size.rb +51 -0
  46. data/app/models/kuhsaft/link_brick.rb +21 -0
  47. data/app/models/kuhsaft/page.rb +160 -0
  48. data/app/models/kuhsaft/page_type.rb +11 -0
  49. data/app/models/kuhsaft/partition.rb +18 -0
  50. data/app/models/kuhsaft/placeholder_brick.rb +23 -0
  51. data/app/models/kuhsaft/publish_state.rb +24 -0
  52. data/app/models/kuhsaft/slider_brick.rb +18 -0
  53. data/app/models/kuhsaft/text_brick.rb +23 -0
  54. data/app/models/kuhsaft/two_column_brick.rb +46 -0
  55. data/app/models/kuhsaft/video_brick.rb +22 -0
  56. data/app/uploaders/kuhsaft/asset_brick_asset_uploader.rb +43 -0
  57. data/app/uploaders/kuhsaft/asset_uploader.rb +50 -0
  58. data/app/uploaders/kuhsaft/ckimage_uploader.rb +16 -0
  59. data/app/uploaders/kuhsaft/image_brick_image_uploader.rb +35 -0
  60. data/app/views/kuhsaft/accordion_bricks/_accordion_brick.html.haml +3 -0
  61. data/app/views/kuhsaft/accordion_bricks/accordion_brick/_edit.html.haml +0 -0
  62. data/app/views/kuhsaft/accordion_item_bricks/_accordion_item_brick.html.haml +8 -0
  63. data/app/views/kuhsaft/accordion_item_bricks/accordion_item_brick/_edit.html.haml +1 -0
  64. data/app/views/kuhsaft/anchor_bricks/_anchor_brick.html.haml +1 -0
  65. data/app/views/kuhsaft/anchor_bricks/anchor_brick/_edit.html.haml +1 -0
  66. data/app/views/kuhsaft/asset_bricks/_asset_brick.html.haml +2 -0
  67. data/app/views/kuhsaft/asset_bricks/asset_brick/_edit.html.haml +8 -0
  68. data/app/views/kuhsaft/cms/admin/_brick_type_dropdown.html.haml +14 -0
  69. data/app/views/kuhsaft/cms/admin/_content_language_switch.html.haml +7 -0
  70. data/app/views/kuhsaft/cms/admin/_empty_state.html.haml +5 -0
  71. data/app/views/kuhsaft/cms/admin/_flash.html.haml +7 -0
  72. data/app/views/kuhsaft/cms/admin/_main_navigation.html.haml +6 -0
  73. data/app/views/kuhsaft/cms/assets/_form.html.haml +15 -0
  74. data/app/views/kuhsaft/cms/assets/_list.html.haml +11 -0
  75. data/app/views/kuhsaft/cms/assets/edit.html.haml +2 -0
  76. data/app/views/kuhsaft/cms/assets/index.html.haml +3 -0
  77. data/app/views/kuhsaft/cms/assets/new.html.haml +2 -0
  78. data/app/views/kuhsaft/cms/bricks/_brick_header.html.haml +43 -0
  79. data/app/views/kuhsaft/cms/bricks/_brick_item.html.haml +25 -0
  80. data/app/views/kuhsaft/cms/bricks/_brick_list.html.haml +4 -0
  81. data/app/views/kuhsaft/cms/bricks/_new.html.haml +41 -0
  82. data/app/views/kuhsaft/cms/bricks/_sort_form.html.haml +3 -0
  83. data/app/views/kuhsaft/cms/bricks/create.js.erb +11 -0
  84. data/app/views/kuhsaft/cms/bricks/destroy.js.erb +10 -0
  85. data/app/views/kuhsaft/cms/bricks/new.js.erb +14 -0
  86. data/app/views/kuhsaft/cms/bricks/update.js.erb +8 -0
  87. data/app/views/kuhsaft/cms/ckimages/create.html.haml +11 -0
  88. data/app/views/kuhsaft/cms/ckimages/destroy.js.erb +2 -0
  89. data/app/views/kuhsaft/cms/ckimages/index.html.haml +13 -0
  90. data/app/views/kuhsaft/cms/pages/_branch.html.haml +19 -0
  91. data/app/views/kuhsaft/cms/pages/_form.html.haml +45 -0
  92. data/app/views/kuhsaft/cms/pages/edit.html.haml +16 -0
  93. data/app/views/kuhsaft/cms/pages/index.html.haml +14 -0
  94. data/app/views/kuhsaft/cms/pages/new.html.haml +1 -0
  95. data/app/views/kuhsaft/cms/pages/show.html.haml +0 -0
  96. data/app/views/kuhsaft/cms/pages/sort.js.erb +0 -0
  97. data/app/views/kuhsaft/column_bricks/_column_brick.html.haml +3 -0
  98. data/app/views/kuhsaft/column_bricks/column_brick/_edit.html.haml +0 -0
  99. data/app/views/kuhsaft/image_bricks/_image_brick.html.haml +11 -0
  100. data/app/views/kuhsaft/image_bricks/image_brick/_edit.html.haml +13 -0
  101. data/app/views/kuhsaft/link_bricks/_link_brick.html.haml +2 -0
  102. data/app/views/kuhsaft/link_bricks/link_brick/_edit.html.haml +4 -0
  103. data/app/views/kuhsaft/pages/index.html.haml +7 -0
  104. data/app/views/kuhsaft/pages/show.html.haml +11 -0
  105. data/app/views/kuhsaft/placeholder_bricks/_placeholder_brick.html.haml +2 -0
  106. data/app/views/kuhsaft/placeholder_bricks/placeholder_brick/_edit.html.haml +1 -0
  107. data/app/views/kuhsaft/search/_form.html.haml +2 -0
  108. data/app/views/kuhsaft/search/_results.html.haml +8 -0
  109. data/app/views/kuhsaft/search/_results_entry.html.haml +13 -0
  110. data/app/views/kuhsaft/sitemaps/index.xml.haml +9 -0
  111. data/app/views/kuhsaft/slider_bricks/_slider_brick.html.haml +10 -0
  112. data/app/views/kuhsaft/slider_bricks/slider_brick/_edit.html.haml +0 -0
  113. data/app/views/kuhsaft/text_bricks/_text_brick.html.haml +11 -0
  114. data/app/views/kuhsaft/text_bricks/text_brick/_edit.html.haml +2 -0
  115. data/app/views/kuhsaft/two_column_bricks/_two_column_brick.html.haml +3 -0
  116. data/app/views/kuhsaft/two_column_bricks/two_column_brick/_childs.html.haml +5 -0
  117. data/app/views/kuhsaft/two_column_bricks/two_column_brick/_edit.html.haml +1 -0
  118. data/app/views/kuhsaft/video_bricks/_video_brick.html.haml +9 -0
  119. data/app/views/kuhsaft/video_bricks/video_brick/_edit.html.haml +8 -0
  120. data/app/views/layouts/kuhsaft/cms/application.html.haml +25 -0
  121. data/app/views/layouts/kuhsaft/cms/ckimages.html.haml +18 -0
  122. data/config/initializers/simple_form.rb +142 -0
  123. data/config/initializers/simple_form_bootstrap.rb +45 -0
  124. data/config/locales/de.yml +207 -0
  125. data/config/locales/en.yml +211 -0
  126. data/config/locales/models/kuhsaft/accordion_brick/de.yml +4 -0
  127. data/config/locales/models/kuhsaft/accordion_brick/en.yml +4 -0
  128. data/config/locales/models/kuhsaft/accordion_item_brick/de.yml +7 -0
  129. data/config/locales/models/kuhsaft/accordion_item_brick/en.yml +7 -0
  130. data/config/locales/models/kuhsaft/anchor_brick/de.yml +7 -0
  131. data/config/locales/models/kuhsaft/anchor_brick/en.yml +7 -0
  132. data/config/locales/models/kuhsaft/asset_brick/de.yml +9 -0
  133. data/config/locales/models/kuhsaft/asset_brick/en.yml +9 -0
  134. data/config/locales/models/kuhsaft/brick/de.yml +5 -0
  135. data/config/locales/models/kuhsaft/brick/en.yml +5 -0
  136. data/config/locales/models/kuhsaft/column_brick/de.yml +4 -0
  137. data/config/locales/models/kuhsaft/column_brick/en.yml +4 -0
  138. data/config/locales/models/kuhsaft/image_brick/de.yml +11 -0
  139. data/config/locales/models/kuhsaft/image_brick/en.yml +11 -0
  140. data/config/locales/models/kuhsaft/image_size/de.yml +13 -0
  141. data/config/locales/models/kuhsaft/image_size/en.yml +13 -0
  142. data/config/locales/models/kuhsaft/link_brick/de.yml +10 -0
  143. data/config/locales/models/kuhsaft/link_brick/en.yml +10 -0
  144. data/config/locales/models/kuhsaft/page/de.yml +19 -0
  145. data/config/locales/models/kuhsaft/page/en.yml +19 -0
  146. data/config/locales/models/kuhsaft/placeholder_brick/de.yml +8 -0
  147. data/config/locales/models/kuhsaft/placeholder_brick/en.yml +8 -0
  148. data/config/locales/models/kuhsaft/slider_brick/de.yml +4 -0
  149. data/config/locales/models/kuhsaft/slider_brick/en.yml +4 -0
  150. data/config/locales/models/kuhsaft/text_brick/de.yml +11 -0
  151. data/config/locales/models/kuhsaft/text_brick/en.yml +11 -0
  152. data/config/locales/models/kuhsaft/two_column_brick/de.yml +7 -0
  153. data/config/locales/models/kuhsaft/two_column_brick/en.yml +7 -0
  154. data/config/locales/models/kuhsaft/video_brick/de.yml +9 -0
  155. data/config/locales/models/kuhsaft/video_brick/en.yml +9 -0
  156. data/config/locales/simple_form.en.yml +26 -0
  157. data/config/locales/views/kuhsaft/cms/admin/de.yml +13 -0
  158. data/config/locales/views/kuhsaft/cms/admin/en.yml +12 -0
  159. data/config/locales/views/kuhsaft/cms/bricks/de.yml +18 -0
  160. data/config/locales/views/kuhsaft/cms/bricks/en.yml +18 -0
  161. data/config/locales/views/kuhsaft/cms/pages/de.yml +31 -0
  162. data/config/locales/views/kuhsaft/cms/pages/en.yml +31 -0
  163. data/config/locales/views/kuhsaft/image_brick/de.yml +6 -0
  164. data/config/locales/views/kuhsaft/image_brick/en.yml +6 -0
  165. data/config/locales/views/kuhsaft/search/de.yml +12 -0
  166. data/config/locales/views/kuhsaft/search/en.yml +12 -0
  167. data/config/locales/views/kuhsaft/text_brick/de.yml +6 -0
  168. data/config/locales/views/kuhsaft/text_brick/en.yml +6 -0
  169. data/config/locales/views/kuhsaft/video_brick/de.yml +7 -0
  170. data/config/locales/views/kuhsaft/video_brick/en.yml +7 -0
  171. data/config/routes.rb +30 -0
  172. data/db/migrate/01_create_kuhsaft_pages.rb +31 -0
  173. data/db/migrate/02_create_kuhsaft_bricks.rb +23 -0
  174. data/db/migrate/03_create_kuhsaft_brick_types.rb +12 -0
  175. data/db/migrate/04_create_kuhsaft_assets.rb +10 -0
  176. data/db/migrate/05_remove_cms_admin.rb +9 -0
  177. data/db/migrate/06_add_template_name_to_kuhsaft_bricks.rb +7 -0
  178. data/db/migrate/07_add_default_value_to_brick_type_enabled.rb +6 -0
  179. data/db/migrate/08_add_display_styles_to_bricks.rb +5 -0
  180. data/db/migrate/09_add_additional_fields_to_kuhsaft_bricks.rb +6 -0
  181. data/db/migrate/10_add_redirect_url_to_kuhsaft_pages.rb +7 -0
  182. data/db/migrate/11_update_url_and_redirect_url_value.rb +45 -0
  183. data/db/migrate/12_regenerate_fulltext.rb +12 -0
  184. data/db/migrate/13_add_page_title_to_pages.rb +7 -0
  185. data/db/migrate/14_move_kuhsaft_assets.rb +22 -0
  186. data/db/migrate/15_add_alt_text_to_bricks.rb +5 -0
  187. data/db/migrate/16_update_default_value_for_page_type.rb +9 -0
  188. data/db/migrate/17_set_page_type_to_content_for_empty_fields.rb +7 -0
  189. data/db/migrate/18_add_identifier_to_kuhsaft_pages.rb +6 -0
  190. data/db/migrate/19_add_col_count_to_bricks.rb +5 -0
  191. data/db/migrate/20_create_kuhsaft_ckimages.rb +9 -0
  192. data/db/seeds.rb +20 -0
  193. data/lib/generators/kuhsaft/assets/install_generator.rb +25 -0
  194. data/lib/generators/kuhsaft/translations/add_generator.rb +41 -0
  195. data/lib/kuhsaft.rb +22 -0
  196. data/lib/kuhsaft/brick_list.rb +87 -0
  197. data/lib/kuhsaft/engine.rb +27 -0
  198. data/lib/kuhsaft/gridded.rb +20 -0
  199. data/lib/kuhsaft/image_uploader_mounting.rb +22 -0
  200. data/lib/kuhsaft/orderable.rb +71 -0
  201. data/lib/kuhsaft/page_tree.rb +14 -0
  202. data/lib/kuhsaft/partial_extractor.rb +21 -0
  203. data/lib/kuhsaft/searchable.rb +69 -0
  204. data/lib/kuhsaft/touch_placeholders.rb +31 -0
  205. data/lib/kuhsaft/translatable.rb +54 -0
  206. data/lib/kuhsaft/version.rb +3 -0
  207. data/lib/tasks/kuhsaft_tasks.rake +22 -0
  208. data/lib/templates/kuhsaft/assets/ck-config.js.coffee +48 -0
  209. data/lib/templates/kuhsaft/assets/customizations.css.sass +0 -0
  210. data/lib/templates/kuhsaft/assets/customizations.js.coffee +0 -0
  211. data/lib/templates/kuhsaft/translations/add_translation.erb +8 -0
  212. data/spec/controllers/kuhsaft/api/pages_controller_spec.rb +70 -0
  213. data/spec/controllers/kuhsaft/pages_controller_spec.rb +90 -0
  214. data/spec/controllers/kuhsaft/sitemaps_controller_spec.rb +13 -0
  215. data/spec/dummy/Rakefile +7 -0
  216. data/spec/dummy/app/assets/images/spec-image.png +0 -0
  217. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  218. data/spec/dummy/app/assets/javascripts/kuhsaft/cms/ck-config.js.coffee +48 -0
  219. data/spec/dummy/app/assets/javascripts/kuhsaft/cms/customizations.js.coffee +0 -0
  220. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  221. data/spec/dummy/app/assets/stylesheets/kuhsaft/cms/customizations.css.sass +0 -0
  222. data/spec/dummy/app/controllers/application_controller.rb +4 -0
  223. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  224. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  225. data/spec/dummy/bin/bundle +3 -0
  226. data/spec/dummy/bin/rails +4 -0
  227. data/spec/dummy/bin/rake +4 -0
  228. data/spec/dummy/config.ru +4 -0
  229. data/spec/dummy/config/application.rb +26 -0
  230. data/spec/dummy/config/boot.rb +3 -0
  231. data/spec/dummy/config/database.yml +19 -0
  232. data/spec/dummy/config/environment.rb +5 -0
  233. data/spec/dummy/config/environments/development.rb +29 -0
  234. data/spec/dummy/config/environments/production.rb +81 -0
  235. data/spec/dummy/config/environments/test.rb +36 -0
  236. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  237. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  238. data/spec/dummy/config/initializers/inflections.rb +16 -0
  239. data/spec/dummy/config/initializers/kuhsaft.rb +5 -0
  240. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  241. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  242. data/spec/dummy/config/initializers/session_store.rb +3 -0
  243. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  244. data/spec/dummy/config/locales/en.yml +23 -0
  245. data/spec/dummy/config/routes.rb +3 -0
  246. data/spec/dummy/db/.gitkeep +0 -0
  247. data/spec/dummy/lib/assets/.gitkeep +0 -0
  248. data/spec/dummy/log/.gitkeep +0 -0
  249. data/spec/dummy/public/404.html +26 -0
  250. data/spec/dummy/public/422.html +26 -0
  251. data/spec/dummy/public/500.html +25 -0
  252. data/spec/dummy/public/favicon.ico +0 -0
  253. data/spec/dummy/public/stylesheets/.gitkeep +0 -0
  254. data/spec/dummy/script/rails +6 -0
  255. data/spec/factories.rb +26 -0
  256. data/spec/features/cms_pages_spec.rb +76 -0
  257. data/spec/features/search_spec.rb +78 -0
  258. data/spec/helpers/kuhsaft/cms/admin_helper_spec.rb +25 -0
  259. data/spec/helpers/kuhsaft/cms/pages_helper_spec.rb +46 -0
  260. data/spec/helpers/kuhsaft/pages_helper_spec.rb +21 -0
  261. data/spec/kuhsaft_spec.rb +7 -0
  262. data/spec/lib/brick_list_spec.rb +50 -0
  263. data/spec/lib/engine_spec.rb +25 -0
  264. data/spec/lib/gridded_spec.rb +24 -0
  265. data/spec/lib/image_uploader_mounting_spec.rb +14 -0
  266. data/spec/lib/page_tree_spec.rb +38 -0
  267. data/spec/lib/searchable_spec.rb +30 -0
  268. data/spec/lib/touch_placeholders_spec.rb +44 -0
  269. data/spec/lib/translatable_spec.rb +155 -0
  270. data/spec/models/accordion_brick_spec.rb +38 -0
  271. data/spec/models/accordion_item_brick_spec.rb +50 -0
  272. data/spec/models/anchor_brick_spec.rb +26 -0
  273. data/spec/models/asset_brick_spec.rb +45 -0
  274. data/spec/models/asset_spec.rb +41 -0
  275. data/spec/models/brick_spec.rb +134 -0
  276. data/spec/models/brick_type_filter_spec.rb +64 -0
  277. data/spec/models/column_brick_spec.rb +32 -0
  278. data/spec/models/image_brick_spec.rb +49 -0
  279. data/spec/models/image_size_spec.rb +36 -0
  280. data/spec/models/link_brick_spec.rb +51 -0
  281. data/spec/models/page_spec.rb +472 -0
  282. data/spec/models/placeholder_brick_spec.rb +46 -0
  283. data/spec/models/publish_state_spec.rb +33 -0
  284. data/spec/models/slider_brick_spec.rb +26 -0
  285. data/spec/models/text_brick_spec.rb +30 -0
  286. data/spec/models/two_column_brick_spec.rb +82 -0
  287. data/spec/models/video_brick_spec.rb +32 -0
  288. data/spec/spec_helper.rb +81 -0
  289. data/spec/support/kuhsaft_spec_helper.rb +8 -0
  290. data/spec/support/write_expectation.rb +57 -0
  291. data/spec/views/kuhsaft/sitemaps/index.xml.haml_spec.rb +67 -0
  292. data/vendor/assets/javascripts/bootstrap-modal-v2.js +376 -0
  293. data/vendor/assets/javascripts/bootstrap-modalmanager.js +423 -0
  294. data/vendor/assets/javascripts/jquery.nestable.js +485 -0
  295. data/vendor/assets/stylesheets/bootstrap_modal.css +214 -0
  296. data/vendor/assets/stylesheets/nestable.css +84 -0
  297. metadata +870 -0
@@ -0,0 +1,7 @@
1
+ module Kuhsaft
2
+ class BrickType < ActiveRecord::Base
3
+ scope :grouped, -> { order('`group`, `id` asc') }
4
+ scope :enabled, -> { where(enabled: true) }
5
+ scope :constrained, ->(list) { where(class_name: list) }
6
+ end
7
+ end
@@ -0,0 +1,18 @@
1
+
2
+ module Kuhsaft
3
+ class BrickTypeFilter < SimpleDelegator
4
+ def empty?
5
+ !(respond_to?(:user_can_add_childs?) && user_can_add_childs? && !allowed.empty?)
6
+ end
7
+
8
+ def allowed
9
+ if Kuhsaft::BrickType.enabled.count.zero?
10
+ []
11
+ elsif allowed_brick_types.empty?
12
+ Kuhsaft::BrickType.enabled
13
+ else
14
+ Kuhsaft::BrickType.enabled.constrained(allowed_brick_types)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,5 @@
1
+ module Kuhsaft
2
+ class Ckimage < ActiveRecord::Base
3
+ mount_uploader :file, CkimageUploader
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ module Kuhsaft
2
+ module Cms
3
+ def self.table_name_prefix
4
+ 'kuhsaft_cms_'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,22 @@
1
+ module Kuhsaft
2
+ class ColumnBrick < Brick
3
+ include Kuhsaft::BrickList
4
+ acts_as_brick_list
5
+
6
+ #
7
+ # Users should not be able to delete this brick through the UI
8
+ #
9
+ def user_can_delete?
10
+ false
11
+ end
12
+
13
+ # No need to save
14
+ def user_can_save?
15
+ false
16
+ end
17
+
18
+ def renders_own_childs?
19
+ false
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,16 @@
1
+ module Kuhsaft
2
+ class ImageBrick < Brick
3
+ include Kuhsaft::ImageUploaderMounting
4
+
5
+ validates :image,
6
+ :image_size, presence: true
7
+
8
+ def collect_fulltext
9
+ [super, caption].join(' ')
10
+ end
11
+
12
+ def user_can_add_childs?
13
+ false
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,51 @@
1
+ module Kuhsaft
2
+ class ImageSize
3
+ attr_accessor :name, :width, :height
4
+
5
+ def label
6
+ I18n.t("activerecord.attributes.kuhsaft/image_size.sizes.#{name}")
7
+ end
8
+
9
+ class << self
10
+ def all
11
+ @all ||= []
12
+ end
13
+
14
+ def build_defaults!
15
+ @all = [gallery_size, teaser_size]
16
+ end
17
+
18
+ def find_by_name(name)
19
+ all.find { |size| size.name.to_s == name.to_s }
20
+ end
21
+
22
+ def clear!
23
+ @all = []
24
+ end
25
+
26
+ def add(name, width, height)
27
+ @all << ImageSize.new.tap do |size|
28
+ size.name = name.to_sym
29
+ size.width = width
30
+ size.height = height
31
+ end
32
+ end
33
+
34
+ def gallery_size
35
+ @gallery_size ||= ImageSize.new.tap do |size|
36
+ size.name = :gallery
37
+ size.width = 960
38
+ size.height = 540
39
+ end
40
+ end
41
+
42
+ def teaser_size
43
+ @teaser_size ||= ImageSize.new.tap do |size|
44
+ size.name = :teaser
45
+ size.width = 320
46
+ size.height = 180
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,21 @@
1
+ module Kuhsaft
2
+ class LinkBrick < Brick
3
+ validates :href, :caption, presence: true
4
+
5
+ def self.styles
6
+ %w(pdf word excel button external)
7
+ end
8
+
9
+ def to_style_class
10
+ [super, link_style.presence].join(' ')
11
+ end
12
+
13
+ def collect_fulltext
14
+ [super, caption].join(' ')
15
+ end
16
+
17
+ def user_can_add_childs?
18
+ false
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,160 @@
1
+ module Kuhsaft
2
+ class Page < ActiveRecord::Base
3
+ include Kuhsaft::Engine.routes.url_helpers
4
+ include Kuhsaft::Orderable
5
+ include Kuhsaft::Translatable
6
+ include Kuhsaft::BrickList
7
+ include Kuhsaft::Searchable
8
+
9
+ has_ancestry
10
+ acts_as_brick_list
11
+
12
+ translate :title, :page_title, :slug, :keywords, :description,
13
+ :body, :redirect_url, :url
14
+
15
+ default_scope { order 'position ASC' }
16
+
17
+ scope :published, -> { where published: Kuhsaft::PublishState::PUBLISHED }
18
+ scope :translated, -> { where "url_#{I18n.locale.to_s.underscore} is not null" }
19
+
20
+ scope :content_page, -> { where page_type: Kuhsaft::PageType::CONTENT }
21
+
22
+ scope :navigation, lambda { |slug|
23
+ where(
24
+ locale_attr(:slug) => slug,
25
+ locale_attr(:page_type) => Kuhsaft::PageType::NAVIGATION)
26
+ }
27
+
28
+ before_validation :create_slug, :create_url
29
+ after_save :update_child_urls
30
+
31
+ validates :title, presence: true
32
+ validates :slug, presence: true
33
+ validates :redirect_url, presence: true, if: :redirect?
34
+ validates :title, :slug, :keywords, :page_type, length: { maximum: 255 }
35
+ validates :identifier, uniqueness: true, allow_blank: true
36
+
37
+ class << self
38
+ def flat_tree
39
+ arrange_as_array
40
+ end
41
+
42
+ def arrange_as_array(options = {}, hash = nil)
43
+ hash ||= arrange(options)
44
+
45
+ arr = []
46
+ hash.each do |node, children|
47
+ arr << node
48
+ arr += arrange_as_array(options, children) unless children.empty?
49
+ end
50
+
51
+ arr
52
+ end
53
+
54
+ def by_identifier(identifier)
55
+ where(identifier: identifier).first
56
+ end
57
+ end
58
+
59
+ def without_self
60
+ self.class.where 'id != ?', id
61
+ end
62
+
63
+ def published?
64
+ published == Kuhsaft::PublishState::PUBLISHED
65
+ end
66
+
67
+ def state_class
68
+ published? ? 'published' : 'unpublished'
69
+ end
70
+
71
+ def redirect?
72
+ page_type == Kuhsaft::PageType::REDIRECT
73
+ end
74
+
75
+ def navigation?
76
+ page_type == Kuhsaft::PageType::NAVIGATION
77
+ end
78
+
79
+ def parent_pages
80
+ ancestors
81
+ end
82
+
83
+ def translated?
84
+ url.present? && title.present? && slug.present?
85
+ end
86
+
87
+ def link
88
+ if bricks.count == 0 && children.count > 0
89
+ children.first.link
90
+ else
91
+ url_with_locale
92
+ end
93
+ end
94
+
95
+ # TODO: needs naming and routing refactoring (url/locale/path/slug)
96
+ def path_segments
97
+ paths = parent.present? ? parent.path_segments : []
98
+ paths << slug unless navigation?
99
+ paths
100
+ end
101
+
102
+ def url_without_locale
103
+ path_segments.join('/')
104
+ end
105
+
106
+ def url_with_locale
107
+ opts = { locale: I18n.locale }
108
+ url = url_without_locale
109
+ opts[:url] = url if url.present?
110
+ page_path(opts)
111
+ end
112
+
113
+ def create_url
114
+ self.url = url_with_locale[1..-1]
115
+ end
116
+
117
+ def create_slug
118
+ if title.present? && slug.blank?
119
+ self.slug = title.downcase.parameterize
120
+ elsif slug.present?
121
+ self.slug = slug.downcase
122
+ end
123
+ end
124
+
125
+ def update_child_urls
126
+ return unless children.any?
127
+ children.each { |child| child.update_attributes(url: child.create_url) }
128
+ end
129
+
130
+ def nesting_name
131
+ num_dashes = parent_pages.size
132
+ num_dashes = 0 if num_dashes < 0
133
+ "#{'-' * num_dashes} #{title}".strip
134
+ end
135
+
136
+ def brick_list_type
137
+ 'Kuhsaft::Page'
138
+ end
139
+
140
+ def to_style_class
141
+ 'kuhsaft-page'
142
+ end
143
+
144
+ def allowed_brick_types
145
+ Kuhsaft::BrickType.enabled.pluck(:class_name) - ['Kuhsaft::AccordionItemBrick']
146
+ end
147
+
148
+ def cache_key
149
+ super + bricks.map(&:cache_key).join
150
+ end
151
+
152
+ def as_json
153
+ Hash.new.tap do |json|
154
+ json['title'] = send("title_#{I18n.locale.to_s.underscore}")
155
+ json['pretty_url'] = '/' + send("url_#{I18n.locale.to_s.underscore}")
156
+ json['url'] = "/pages/#{id}"
157
+ end
158
+ end
159
+ end
160
+ end
@@ -0,0 +1,11 @@
1
+ module Kuhsaft
2
+ class PageType
3
+ REDIRECT = 'redirect'
4
+ NAVIGATION = 'navigation'
5
+ CONTENT = 'content'
6
+
7
+ def self.all
8
+ [CONTENT, REDIRECT, NAVIGATION]
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,18 @@
1
+ module Kuhsaft
2
+ class Partition
3
+ attr_reader :name, :id
4
+
5
+ def initialize(name, id)
6
+ @name = name
7
+ @id = id
8
+ end
9
+
10
+ def self.style_for_index(style, idx)
11
+ [
12
+ %w(span8 span4),
13
+ %w(span6 span6),
14
+ %w(span4 span8)
15
+ ][style][idx]
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,23 @@
1
+ require_relative './brick'
2
+
3
+ module Kuhsaft
4
+ class PlaceholderBrick < Brick
5
+ PARTIAL_PATH = '/app/views/kuhsaft/placeholder_bricks/partials/_*.haml'
6
+
7
+ def self.available_partials
8
+ @partials ||= Kuhsaft::PartialExtractor.new.partials(PARTIAL_PATH)
9
+ end
10
+
11
+ def user_can_add_childs?
12
+ false
13
+ end
14
+
15
+ def partial_name
16
+ "kuhsaft/placeholder_bricks/partials/#{template_name}"
17
+ end
18
+
19
+ def cache_key
20
+ super + partial_digest(partial_name)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,24 @@
1
+ module Kuhsaft
2
+ class PublishState
3
+ extend ActiveModel::Translation
4
+
5
+ UNPUBLISHED = 0
6
+ PUBLISHED = 1
7
+ PUBLISHED_AT = 2
8
+
9
+ attr_reader :name
10
+ attr_reader :value
11
+
12
+ def initialize(options)
13
+ options.each_pair { |k, v| instance_variable_set("@#{k}", v) if respond_to?(k) }
14
+ end
15
+
16
+ def self.all
17
+ @all ||= [
18
+ PublishState.new(name: 'published', value: PUBLISHED),
19
+ PublishState.new(name: 'unpublished', value: UNPUBLISHED),
20
+ PublishState.new(name: 'published_at', value: PUBLISHED_AT)
21
+ ]
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,18 @@
1
+ module Kuhsaft
2
+ class SliderBrick < Brick
3
+ include Kuhsaft::BrickList
4
+
5
+ acts_as_brick_list
6
+
7
+ def fulltext
8
+ end
9
+
10
+ def to_style_class
11
+ [super, 'carousel', 'slide'].join(' ')
12
+ end
13
+
14
+ def allowed_brick_types
15
+ %w(Kuhsaft::ImageBrick Kuhsaft::VideoBrick)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,23 @@
1
+ require 'htmlentities'
2
+
3
+ module Kuhsaft
4
+ class TextBrick < Brick
5
+ include ActionView::Helpers::SanitizeHelper
6
+ HTML_ENTITIES = HTMLEntities.new
7
+
8
+ validates :text, presence: true
9
+
10
+ def user_can_add_childs?
11
+ false
12
+ end
13
+
14
+ def collect_fulltext
15
+ HTML_ENTITIES.decode(
16
+ strip_tags([
17
+ text,
18
+ read_more_text
19
+ ].compact.join(' ')).squish
20
+ )
21
+ end
22
+ end
23
+ end