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,25 @@
1
+ require 'rails/generators'
2
+
3
+ module Kuhsaft
4
+ module Assets
5
+ class Install < Rails::Generators::Base
6
+ source_root(File.join(Kuhsaft::Engine.root, '/lib/templates/kuhsaft/assets'))
7
+
8
+ def copy_customizations
9
+ custom_css_folder = 'app/assets/stylesheets/kuhsaft/cms/'
10
+ custom_js_folder = 'app/assets/javascripts/kuhsaft/cms/'
11
+
12
+ empty_directory custom_css_folder
13
+ empty_directory custom_js_folder
14
+
15
+ copy_file 'customizations.css.sass', "#{custom_css_folder}/customizations.css.sass"
16
+ copy_file 'customizations.js.coffee', "#{custom_js_folder}/customizations.js.coffee"
17
+ copy_file 'ck-config.js.coffee', "#{custom_js_folder}/ck-config.js.coffee"
18
+
19
+ inject_into_file 'config/environments/production.rb', after: /config\.assets\.precompile.*$/ do
20
+ "\n config.assets.precompile += %w( kuhsaft/cms/customizations.css kuhsaft/cms/customizations.js )"
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,41 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/migration'
3
+ require 'rails/generators/active_record'
4
+
5
+ module Kuhsaft
6
+ module Translations
7
+ class Add < Rails::Generators::Base
8
+ include Rails::Generators::Migration
9
+
10
+ source_root(File.join(Kuhsaft::Engine.root, '/lib/templates/kuhsaft/translations'))
11
+ argument :locale, type: :string
12
+
13
+ def self.next_migration_number(dirname)
14
+ ActiveRecord::Generators::Base.next_migration_number(dirname)
15
+ end
16
+
17
+ def translated_columns
18
+ Kuhsaft::Page.column_names.select { |attr| attr.end_with? "_#{I18n.default_locale}" }
19
+ end
20
+
21
+ def formatted_locale
22
+ locale.underscore
23
+ end
24
+
25
+ def create_locale_migration_file
26
+ migration_template('add_translation.erb',
27
+ Rails.root.join('db', 'migrate', "add_#{formatted_locale}_translation.rb"))
28
+ end
29
+
30
+ private
31
+
32
+ def get_attribute(attribute_name = '')
33
+ attribute_name.gsub("_#{I18n.default_locale}", "_#{formatted_locale}")
34
+ end
35
+
36
+ def get_type(key = '')
37
+ Kuhsaft::Page.columns_hash[key].type
38
+ end
39
+ end
40
+ end
41
+ end
data/lib/kuhsaft.rb ADDED
@@ -0,0 +1,22 @@
1
+ module Kuhsaft
2
+ require 'kuhsaft/engine'
3
+ require 'kuhsaft/orderable'
4
+ require 'kuhsaft/image_uploader_mounting'
5
+ require 'kuhsaft/translatable'
6
+ require 'kuhsaft/searchable'
7
+ require 'kuhsaft/gridded'
8
+ require 'kuhsaft/brick_list'
9
+ require 'kuhsaft/partial_extractor'
10
+ require 'kuhsaft/touch_placeholders'
11
+ require 'simple_form'
12
+ require 'carrierwave'
13
+ require 'rdiscount'
14
+ require 'bourbon'
15
+ require 'jquery-rails'
16
+ require 'jquery-ui-rails'
17
+ require 'remotipart'
18
+ require 'ancestry'
19
+ require 'bootstrap-sass'
20
+ require 'haml'
21
+ require 'ckeditor_rails'
22
+ end
@@ -0,0 +1,87 @@
1
+ module Kuhsaft
2
+ module BrickList
3
+ def self.included(base)
4
+ def base.acts_as_brick_list
5
+ has_many :bricks,
6
+ class_name: 'Kuhsaft::Brick',
7
+ dependent: :destroy,
8
+ as: :brick_list
9
+ end
10
+ end
11
+
12
+ def to_brick_item_id
13
+ "brick-item-#{id}-#{self.class.to_s.underscore.gsub('/', '_')}"
14
+ end
15
+
16
+ def to_brick_list_id
17
+ "brick-list-#{id}-#{self.class.to_s.underscore.gsub('/', '_')}"
18
+ end
19
+
20
+ #
21
+ # See TwoColumnBrick as an example, which can only have to ColumBricks
22
+ # and the User should not be able to add more
23
+ #
24
+ def user_can_add_childs?
25
+ true
26
+ end
27
+
28
+ #
29
+ # return true if the user should be able to delete the brick through the UI.
30
+ # return false if not.
31
+ # See ColumnBrick, which should not be deleted inside the TwoColumnBrick
32
+ #
33
+ def user_can_delete?
34
+ true
35
+ end
36
+
37
+ #
38
+ # Return true if the user can hit the save button
39
+ # Return false if not
40
+ # See column brick, which has no data on its own except childs, therefore no button is needed
41
+ #
42
+ def user_can_save?
43
+ true
44
+ end
45
+
46
+ #
47
+ # When true, the brick must implement the rendering of its childs by itself
48
+ # by using the _childs partial
49
+ # When false, the default BrickList rendering is used
50
+ # See _brick_item partial
51
+ #
52
+ def renders_own_childs?
53
+ false
54
+ end
55
+
56
+ #
57
+ # Return relevant fulltext information for this brick (e.g: it's name, description etc ).
58
+ # It will be stored in the related Page.
59
+ # Implement how you see fit.
60
+ #
61
+ def collect_fulltext
62
+ return '' unless respond_to?(:bricks)
63
+ bricks.localized.reduce('') do |text, brick|
64
+ text << brick.collect_fulltext
65
+ end
66
+ end
67
+
68
+ #
69
+ # Return a list of classnames which can be added as childs
70
+ # Return an empty array if you want no constraints
71
+ #
72
+ def allowed_brick_types
73
+ []
74
+ end
75
+
76
+ #
77
+ # Returns all possible brick types which can be added as child to this brick list instance
78
+ #
79
+ def brick_types
80
+ @brick_types ||= Kuhsaft::BrickTypeFilter.new(self)
81
+ end
82
+
83
+ def uploader?
84
+ self.class.ancestors.include? CarrierWave::Mount::Extension
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,27 @@
1
+ module Kuhsaft
2
+ class ImageSizeDelegator
3
+ def method_missing(method, *args, &block)
4
+ Kuhsaft::ImageSize.send(method, *args, &block)
5
+ rescue NoMethodError
6
+ super
7
+ end
8
+ end
9
+
10
+ class Engine < ::Rails::Engine
11
+ isolate_namespace Kuhsaft
12
+
13
+ config.i18n.fallbacks = [:de]
14
+ config.i18n.load_path += Dir[Kuhsaft::Engine.root.join('config', 'locales', '**', '*.{yml}').to_s]
15
+
16
+ # defaults to nil
17
+ config.sublime_video_token = nil
18
+
19
+ # delegate image size config to ImageSize class
20
+ config.image_sizes = ImageSizeDelegator.new
21
+
22
+ initializer 'kuhsaft.initialize_haml_dependency_tracker' do
23
+ require 'action_view/dependency_tracker'
24
+ ActionView::DependencyTracker.register_tracker :haml, ActionView::DependencyTracker::ERBTracker
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,20 @@
1
+ module Kuhsaft
2
+ module Gridded
3
+ def self.included(base)
4
+ base.extend(ClassMethods)
5
+ base.send :include, InstanceMethods
6
+ end
7
+
8
+ module InstanceMethods
9
+ def gridded?
10
+ col_count != 0
11
+ end
12
+ end
13
+
14
+ module ClassMethods
15
+ def available_grid_sizes
16
+ (0..12).to_a
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ require 'carrierwave'
2
+ require 'active_support/concern'
3
+
4
+ module Kuhsaft
5
+ module ImageUploaderMounting
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ extend CarrierWave::Mount
10
+
11
+ mount_uploader :image, Kuhsaft::ImageBrickImageUploader
12
+
13
+ after_save :resize_image_if_size_changed
14
+
15
+ def resize_image_if_size_changed
16
+ image.recreate_versions! if image_size_changed? && image_present?
17
+ end
18
+
19
+ delegate :present?, to: :image, prefix: true
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,71 @@
1
+ module Kuhsaft
2
+ # If you use this mixin, your class must implement the following methods
3
+ # siblings(), returns the siblings of the same type of object
4
+
5
+ module Orderable
6
+ def self.included(base)
7
+ base.extend(ClassMethods)
8
+ base.send :include, InstanceMethods
9
+ base.after_create :set_position
10
+ end
11
+
12
+ module InstanceMethods
13
+ def increment_position
14
+ update_attribute :position, position + 1
15
+ end
16
+
17
+ def decrement_position
18
+ update_attribute :position, position - 1
19
+ end
20
+
21
+ def preceding_sibling
22
+ siblings.where('position = ?', position - 1).first
23
+ end
24
+
25
+ def succeeding_sibling
26
+ siblings.where('position = ?', position + 1).first
27
+ end
28
+
29
+ def preceding_siblings
30
+ siblings.where('position <= ?', position).where('id != ?', id)
31
+ end
32
+
33
+ def succeeding_siblings
34
+ siblings.where('position >= ?', position).where('id != ?', id)
35
+ end
36
+
37
+ def position_to_top
38
+ update_attribute :position, 1
39
+ recount_siblings_position_from 1
40
+ end
41
+
42
+ def recount_siblings_position_from(position)
43
+ counter = position
44
+ succeeding_siblings.each do |s|
45
+ counter += 1
46
+ s.update_attribute(:position, counter)
47
+ end
48
+ end
49
+
50
+ def reposition(before_id)
51
+ if before_id.blank?
52
+ position_to_top
53
+ else
54
+ update_attribute :position, self.class.position_of(before_id) + 1
55
+ recount_siblings_position_from position
56
+ end
57
+ end
58
+
59
+ def set_position
60
+ initial_position = siblings.blank? ? 1 : siblings.count + 1
61
+ update_attribute(:position, initial_position)
62
+ end
63
+ end
64
+
65
+ module ClassMethods
66
+ def position_of(id)
67
+ find(id).position rescue 1
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,14 @@
1
+ module Kuhsaft
2
+ module PageTree
3
+ extend self
4
+
5
+ def update(params, parent_id = nil)
6
+ params.each do |page_position, page_content|
7
+ page = Page.find(page_content['id'])
8
+ page.update_attributes(parent_id: parent_id, position: page_position)
9
+ next if page_content['children'].nil?
10
+ update(page_content['children'], page.id)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,21 @@
1
+ module Kuhsaft
2
+ class PartialExtractor
3
+ def extract_filenames(partial_paths)
4
+ partials = []
5
+ partial_paths.each do |partial|
6
+ filename = File.basename(partial).split('.', 0).first
7
+ filename.slice!(0)
8
+ partials << filename
9
+ end
10
+ partials.map { |d| [I18n.t(d), d] }
11
+ end
12
+
13
+ def collect_partials(path)
14
+ extract_filenames(Dir.glob("#{Rails.root}#{path}"))
15
+ end
16
+
17
+ def partials(path)
18
+ @partials = collect_partials(path)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,69 @@
1
+ require 'active_support/concern'
2
+ require 'pg_search'
3
+
4
+ module Kuhsaft
5
+ module Searchable
6
+ extend ActiveSupport::Concern
7
+
8
+ DICTIONARIES = {
9
+ en: 'english',
10
+ de: 'german'
11
+ }
12
+
13
+ def update_fulltext
14
+ self.fulltext = collect_fulltext
15
+ end
16
+
17
+ included do
18
+ unless included_modules.include?(BrickList)
19
+ raise 'Kuhsaft::Searchable needs Kuhsaft::BrickList to be included'
20
+ end
21
+
22
+ translate :fulltext if included_modules.include?(Translatable)
23
+ before_validation :update_fulltext
24
+
25
+ if ActiveRecord::Base.connection.instance_values['config'][:adapter] == 'postgresql'
26
+ include ::PgSearch
27
+ cb = lambda do |query|
28
+ {
29
+ against: {
30
+ locale_attr(:title) => 'A',
31
+ locale_attr(:page_title) => 'A',
32
+ locale_attr(:keywords) => 'B',
33
+ locale_attr(:description) => 'C',
34
+ locale_attr(:fulltext) => 'C'
35
+ },
36
+ query: query,
37
+ using: { tsearch: { dictionary: DICTIONARIES[I18n.locale] || 'simple' } }
38
+ }
39
+ end
40
+ pg_search_scope :search_without_excerpt, cb
41
+ scope :search, lambda { |query|
42
+ ts_headline = sanitize_sql_array([
43
+ "ts_headline(%s, plainto_tsquery('%s')) AS excerpt",
44
+ locale_attr(:fulltext),
45
+ query
46
+ ])
47
+ search_without_excerpt(query).select(ts_headline)
48
+ }
49
+ else
50
+ # TODO: Tests run in this branch because dummy app uses mysql. Change it!
51
+ # define empty fallback excerpt attribute
52
+ attr_reader :excerpt
53
+ scope :search, lambda { |query|
54
+ if query.is_a? Hash
55
+ where("#{query.first[0]} LIKE ?", "%#{query.first[1]}%")
56
+ else
57
+ stmt = ''
58
+ stmt += "#{locale_attr(:keywords)} LIKE ? OR "
59
+ stmt += "#{locale_attr(:title)} LIKE ? OR "
60
+ stmt += "#{locale_attr(:page_title)} LIKE ? OR "
61
+ stmt += "#{locale_attr(:description)} LIKE ? OR "
62
+ stmt += "#{locale_attr(:fulltext)} LIKE ?"
63
+ where(stmt, *(["%#{query}%"] * 5))
64
+ end
65
+ }
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,31 @@
1
+ require_relative '../../app/models/kuhsaft/placeholder_brick'
2
+
3
+ module Kuhsaft
4
+ module TouchPlaceholders
5
+ def self.included(base)
6
+ base.extend(ClassMethods)
7
+
8
+ base.class_eval do
9
+ after_save :touch_placeholders
10
+ end
11
+ end
12
+
13
+ def touch_placeholders
14
+ return unless self.class.placeholder_templates.present?
15
+ self.class.placeholder_templates.each do |template_name|
16
+ related_templates = Kuhsaft::PlaceholderBrick.where(template_name: template_name)
17
+ related_templates.each { |p| p.touch } if related_templates
18
+ end
19
+ end
20
+
21
+ module ClassMethods
22
+ def placeholder_templates(*attributes)
23
+ if attributes.empty?
24
+ @shoestrap_placeholder_templates
25
+ else
26
+ @shoestrap_placeholder_templates = attributes
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end