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,38 @@
1
+ module Kuhsaft
2
+ class PagesController < ::ApplicationController
3
+ respond_to :html
4
+ before_action :find_page_by_url, only: :show
5
+
6
+ def index
7
+ @search = params[:search]
8
+ return if @search.blank?
9
+ @pages = Kuhsaft::Page.unscoped.published.content_page.search(@search)
10
+ end
11
+
12
+ def show
13
+ if @page.present? && @page.redirect? && @page.redirect_url.present?
14
+ redirect_url = @page.redirect_url.sub(/\A\/+/, '') # remove all preceding slashes
15
+ redirect_to "/#{redirect_url}"
16
+ elsif @page.present?
17
+ respond_with @page
18
+ elsif @page.blank? && respond_to?(:handle_404)
19
+ handle_404
20
+ else
21
+ raise ActionController::RoutingError, 'Not Found'
22
+ end
23
+ end
24
+
25
+ def lookup_by_id
26
+ @page = Page.find(params[:id])
27
+ redirect_to "/#{@page.url}"
28
+ end
29
+
30
+ private
31
+
32
+ def find_page_by_url
33
+ url = locale.to_s
34
+ url += "/#{params[:url]}" if params[:url].present?
35
+ @page = Kuhsaft::Page.find_by_url(url)
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,12 @@
1
+ module Kuhsaft
2
+ class SitemapsController < ::ApplicationController
3
+ def index
4
+ last_page = Kuhsaft::Page.published.last
5
+ return unless stale?(etag: last_page, last_modified: last_page.updated_at.utc)
6
+ respond_to do |format|
7
+ format.html
8
+ format.xml { @pages = Kuhsaft::Page.published }
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,27 @@
1
+ module CmsHelper
2
+ def admin_tab(title, path)
3
+ content_tag :li, link_to(title, path), class: (:current if request.path.include?(path))
4
+ end
5
+
6
+ def available_parent_pages
7
+ pages = []
8
+ pages << { title: t('kuhsaft.cms.pages.new.pages'), link: kuhsaft.cms_pages_path(locale: :en) }
9
+ if params[:parent_id].present?
10
+ parent_page = Kuhsaft::Page.find(params[:parent_id])
11
+ pages += parent_page.parent_pages
12
+ end
13
+ pages << { title: t('kuhsaft.cms.pages.new.new_page'), link: '#' }
14
+ end
15
+
16
+ def cms_brick_item(brick_list, type)
17
+ type_name = type.class_name.constantize.model_name.human
18
+ link_to type_name, kuhsaft.new_cms_brick_path(
19
+ brick: {
20
+ type: type.class_name,
21
+ brick_list_id: brick_list.id,
22
+ brick_list_type: brick_list.brick_list_type
23
+ }), remote: true
24
+ rescue NameError
25
+ I18n.t type.class_name.underscore, scope: [:activerecord, :models]
26
+ end
27
+ end
@@ -0,0 +1,20 @@
1
+ module Kuhsaft
2
+ module AdminHelper
3
+ #
4
+ # When rendering the layout of our host application,
5
+ # the paths of the host application are not visible to the engine
6
+ # therefore we delegate all failing helper calls to 'main_app',
7
+ # which is our host application
8
+ #
9
+ def method_missing(method, *args, &block)
10
+ main_app.send(method, *args, &block)
11
+ rescue NoMethodError
12
+ super
13
+ end
14
+
15
+ def sublime_video_include_tag
16
+ token = Kuhsaft::Engine.config.sublime_video_token
17
+ javascript_include_tag "//cdn.sublimevideo.net/js/#{token}-beta.js"
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,21 @@
1
+ module Kuhsaft
2
+ module Cms
3
+ module AdminHelper
4
+ def render_language_switch?
5
+ I18n.available_locales.size > 1
6
+ end
7
+
8
+ def link_to_content_locale(locale)
9
+ action = params[:action]
10
+ if params[:action] == 'create'
11
+ action = 'new'
12
+ elsif params[:action] == 'update'
13
+ action = 'edit'
14
+ end
15
+
16
+ link_to locale.to_s.upcase, url_for(
17
+ action: action, content_locale: locale)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ module Kuhsaft
2
+ module Cms
3
+ module PagesHelper
4
+ def content_tab_active(page)
5
+ :active unless hide_content_tab?(page)
6
+ end
7
+
8
+ def metadata_tab_active(page)
9
+ :active if hide_content_tab?(page)
10
+ end
11
+
12
+ def hide_content_tab?(page)
13
+ page.redirect? || !page.translated? || !page.persisted? || page.errors.present?
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,49 @@
1
+ module PagesHelper
2
+ def asset_for(id)
3
+ Kuhsaft::Asset.find(id)
4
+ end
5
+
6
+ def render_markdown(text)
7
+ RDiscount.new(text).to_html if text.present?
8
+ end
9
+
10
+ def homepage
11
+ Kuhsaft::Page.roots.first
12
+ end
13
+
14
+ def page_for_level(num)
15
+ input = controller.current_url if controller.respond_to? :current_url
16
+ input ||= params[:url].presence || ''
17
+ url = input.split('/').take(num + 1).join('/') unless input.blank?
18
+ page = Kuhsaft::Page.find_by_url(url)
19
+ yield page if block_given?
20
+ page
21
+ end
22
+
23
+ def active_page_class(page)
24
+ input = controller.current_url if controller.respond_to? :current_url
25
+ input ||= params[:url].presence || ''
26
+ input.include?(page.url.to_s) ? :active : nil
27
+ end
28
+
29
+ def current_page_class(page)
30
+ :current if active_page_class(page) == :active
31
+ end
32
+
33
+ def read_more_link(id)
34
+ link_to(id, :'data-toggle' => 'collapse', :'data-target' => id, :class => 'collapsed button button-read-more') do
35
+ @content = content_tag(:p, t('kuhsaft.text_bricks.text_brick.read_more'), class: 'read-more-text')
36
+ @content << content_tag(:p, t('kuhsaft.text_bricks.text_brick.read_less'), class: 'read-less-text')
37
+ end
38
+ end
39
+
40
+ def search_page_form
41
+ form_tag kuhsaft.pages_path, method: :get, class: 'form-inline' do
42
+ if block_given?
43
+ yield
44
+ else
45
+ render 'kuhsaft/search/form'
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,12 @@
1
+ module SitemapsHelper
2
+ def locales_with_block(page)
3
+ I18n.available_locales.each do |locale|
4
+ I18n.with_locale locale do
5
+ if page.url.present?
6
+ url = "http://#{request.host_with_port}/#{page.url}"
7
+ yield(url)
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,15 @@
1
+ module Kuhsaft
2
+ class AccordionBrick < ColumnBrick
3
+ def user_can_delete?
4
+ true
5
+ end
6
+
7
+ def to_style_class
8
+ [super, 'accordion'].join(' ')
9
+ end
10
+
11
+ def allowed_brick_types
12
+ %w(Kuhsaft::AccordionItemBrick)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,21 @@
1
+ module Kuhsaft
2
+ class AccordionItemBrick < ColumnBrick
3
+ validates :caption, presence: true
4
+
5
+ def user_can_delete?
6
+ true
7
+ end
8
+
9
+ def to_style_class
10
+ [super, 'accordion-group'].join(' ')
11
+ end
12
+
13
+ def user_can_save?
14
+ true
15
+ end
16
+
17
+ def collect_fulltext
18
+ [super, caption].join(' ')
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ module Kuhsaft
2
+ class AnchorBrick < Brick
3
+ validates :caption, presence: true
4
+
5
+ def user_can_add_childs?
6
+ false
7
+ end
8
+
9
+ def collect_fulltext
10
+ [super, caption].join(' ')
11
+ end
12
+
13
+ def to_id
14
+ "anchor-#{caption.parameterize}"
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,29 @@
1
+ module Kuhsaft
2
+ class Asset < ActiveRecord::Base
3
+ scope :by_date, -> { order('updated_at DESC') }
4
+ mount_uploader :file, Kuhsaft::AssetUploader
5
+
6
+ def file_type
7
+ return unless file.path.present?
8
+
9
+ ext = File.extname(file.path).split('.').last
10
+ ext.to_sym if ext.present?
11
+ end
12
+
13
+ def name
14
+ File.basename(file.path) if file.present? && file.path.present?
15
+ end
16
+
17
+ def path
18
+ file.url
19
+ end
20
+
21
+ def path=(_val)
22
+ # do nothing
23
+ end
24
+
25
+ def filename
26
+ try(:file).try(:file).try(:filename)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,26 @@
1
+ module Kuhsaft
2
+ class AssetBrick < Brick
3
+ mount_uploader :asset, Kuhsaft::AssetBrickAssetUploader
4
+
5
+ validates :caption,
6
+ :asset, presence: true
7
+
8
+ def self.styles
9
+ %w(pdf word excel button)
10
+ end
11
+
12
+ def to_style_class
13
+ [super, link_style.presence].join(' ')
14
+ end
15
+
16
+ def collect_fulltext
17
+ [super, caption].join(' ')
18
+ end
19
+
20
+ def user_can_add_childs?
21
+ false
22
+ end
23
+
24
+ delegate :present?, to: :asset, prefix: true
25
+ end
26
+ end
@@ -0,0 +1,137 @@
1
+ require_relative '../../../lib/kuhsaft/brick_list'
2
+
3
+ module Kuhsaft
4
+ class Brick < ActiveRecord::Base
5
+ include Kuhsaft::BrickList
6
+
7
+ belongs_to :brick_list, polymorphic: true, touch: true
8
+
9
+ scope :localized, -> { where(locale: I18n.locale) }
10
+ default_scope { order('position ASC').localized }
11
+
12
+ serialize :display_styles, Array
13
+
14
+ before_validation :set_position
15
+
16
+ validates :locale,
17
+ :position,
18
+ :type,
19
+ :brick_list_id,
20
+ :brick_list_type,
21
+ presence: true
22
+
23
+ validates :template_name,
24
+ :type,
25
+ :locale,
26
+ :caption,
27
+ :link_style,
28
+ :image_size,
29
+ :video,
30
+ :alt_text,
31
+ length: { maximum: 255 }
32
+
33
+ after_initialize do
34
+ self.position ||= has_siblings? ? brick_list.bricks.maximum(:position).to_i + 1 : 1
35
+ end
36
+
37
+ after_save do
38
+ # TODO: replace callback with fulltext row on each
39
+ # searchable model
40
+ brick_list.update_fulltext
41
+ brick_list.save!
42
+ end
43
+
44
+ # TODO: yes. temporary workaround. see above
45
+ def update_fulltext
46
+ if brick_list.is_a? Page
47
+ brick_list.update_fulltext
48
+ else
49
+ brick_list.brick_list.update_fulltext
50
+ end
51
+ end
52
+
53
+ def to_edit_partial_path
54
+ path = to_partial_path.split '/'
55
+ path << 'edit'
56
+ path.join '/'
57
+ end
58
+
59
+ def has_siblings?
60
+ brick_list.present? && brick_list.bricks.any?
61
+ end
62
+
63
+ #
64
+ # The child partial can contain your own implementation
65
+ # of how the brick renders it's child in the edit form.
66
+ # Returns the path to this partial.
67
+ #
68
+ def to_edit_childs_partial_path
69
+ path = to_partial_path.split '/'
70
+ path << 'childs'
71
+ path.join '/'
72
+ end
73
+
74
+ def parents
75
+ p = []
76
+ parent = brick_list.presence
77
+
78
+ while parent
79
+ p << parent
80
+ parent = parent.respond_to?(:brick_list) ? parent.brick_list : nil
81
+ end
82
+ p.reverse
83
+ end
84
+
85
+ def set_position
86
+ self.position = if self.position.present?
87
+ self.position
88
+ elsif self.respond_to?(:brick_list) && brick_list.respond_to?(:bricks)
89
+ brick_list.bricks.maximum(:position).to_i + 1
90
+ else
91
+ 1
92
+ end
93
+ end
94
+
95
+ def brick_list_type
96
+ 'Kuhsaft::Brick'
97
+ end
98
+
99
+ # Returns a css classname suitable for use in the frontend
100
+ def to_style_class
101
+ ([self.class.to_s.underscore.dasherize.gsub('/', '-')] + display_styles).join(' ')
102
+ end
103
+
104
+ # Returns a unique DOM id suitable for use in the frontend
105
+ def to_style_id
106
+ "#{self.class.to_s.underscore.dasherize.gsub('/', '-')}-#{id}"
107
+ end
108
+
109
+ # return a list of css classnames that can be applied to the brick
110
+ def available_display_styles
111
+ []
112
+ end
113
+
114
+ def translated_available_display_styles
115
+ available_display_styles.map do |style|
116
+ [I18n.t("#{self.class.to_s.demodulize.underscore}.display_styles.#{style}"), style]
117
+ end
118
+ end
119
+
120
+ def backend_label(options = {})
121
+ label = self.class.model_name.human
122
+ if options[:parenthesis] == true
123
+ "(#{label})"
124
+ else
125
+ label
126
+ end
127
+ end
128
+
129
+ def partial_digest(name)
130
+ ActionView::Digestor.digest(name, 'haml', ApplicationController.new.lookup_context, partial: true)
131
+ end
132
+
133
+ def cache_key
134
+ super + partial_digest(to_partial_path)
135
+ end
136
+ end
137
+ end