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,54 @@
1
+ module Kuhsaft
2
+ module Translatable
3
+ def self.included(base)
4
+ base.extend ClassMethods
5
+ end
6
+
7
+ extend self
8
+
9
+ module ClassMethods
10
+ def translate(*args)
11
+ args.each do |attr_name|
12
+ define_localized_attr_getter attr_name
13
+ define_localized_attr_setter attr_name
14
+ define_localized_attr_finder attr_name
15
+ define_localized_attr_predicate_method attr_name
16
+ end
17
+ end
18
+
19
+ def define_localized_attr_getter(attr_name)
20
+ define_method attr_name do
21
+ send "#{attr_name}_#{locale_for_attr_name}"
22
+ end
23
+ end
24
+
25
+ def define_localized_attr_predicate_method(attr_name)
26
+ define_method "#{attr_name}?" do
27
+ send "#{attr_name}_#{locale_for_attr_name}?"
28
+ end
29
+ end
30
+
31
+ def define_localized_attr_setter(attr_name)
32
+ define_method "#{attr_name}=" do |val|
33
+ send "#{attr_name}_#{locale_for_attr_name}=", val
34
+ end
35
+ end
36
+
37
+ def define_localized_attr_finder(attr_name)
38
+ define_singleton_method "find_by_#{attr_name}" do |val|
39
+ send "find_by_#{attr_name}_#{locale_for_attr_name}", val
40
+ end
41
+ end
42
+
43
+ def locale_for_attr_name
44
+ I18n.locale.to_s.underscore
45
+ end
46
+
47
+ def locale_attr(attr_name)
48
+ "#{attr_name}_#{I18n.locale.to_s.underscore}"
49
+ end
50
+ end
51
+
52
+ include ClassMethods
53
+ end
54
+ end
@@ -0,0 +1,3 @@
1
+ module Kuhsaft
2
+ VERSION = '2.5.0.pre'
3
+ end
@@ -0,0 +1,22 @@
1
+ namespace :kuhsaft do
2
+ namespace :db do
3
+ desc "Load kuhsaft seeds"
4
+ task :seed => :environment do
5
+ Kuhsaft::Engine.load_seed
6
+ end
7
+ end
8
+ end
9
+
10
+ Rake::Task['db:seed'].enhance ['kuhsaft:db:seed']
11
+
12
+ desc "Create nondigest versions of all ckeditor digest assets"
13
+ task "assets:precompile" do
14
+ fingerprint = /\-[0-9a-f]{32}\./
15
+ for file in Dir["public/assets/kuhsaft/cms/ck-config*"]
16
+ next unless file =~ fingerprint
17
+ nondigest = file.sub fingerprint, '.'
18
+ if !File.exist?(nondigest) or File.mtime(file) > File.mtime(nondigest)
19
+ FileUtils.cp file, nondigest, verbose: true
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,48 @@
1
+ CKEDITOR.editorConfig = (config) ->
2
+ config.language = "de"
3
+ config.extraAllowedContent = 'iframe[*]'
4
+ config.removeButtons = "Anchor,Underline,Strike,Subscript,Superscript"
5
+ config.format_tags = "p;h1;h2;h3;h4;pre"
6
+ config.toolbar = [["Format"],
7
+ ["Bold", "Italic", "Underline", "Strike", "-", "Subscript", "Superscript"],
8
+ ["Table", "HorizontalRule", "SpecialChar"], ["Link", "Unlink"],
9
+ ["Undo", "Redo", "-", "RemoveFormat", "Cut", "Copy", "Paste"],
10
+ ["Source", "-", "ShowBlocks", "-", "About"],
11
+ ["Maximize"]]
12
+
13
+ config.linkShowAdvancedTab = false
14
+ config.linkShowTargetTab = false
15
+
16
+ config.removePlugins = 'link'
17
+ config.extraPlugins = 'adv_link'
18
+
19
+ true
20
+
21
+ # Image Upload options:
22
+ # ---------------------
23
+
24
+ # enable theese two:
25
+ # config.filebrowserUploadUrl = '/cms/ckimages'
26
+ # config.filebrowserBrowseUrl = '/cms/ckimages'
27
+
28
+ # and add this button:
29
+ # 'Image'
30
+
31
+
32
+ # FULL OPTIONS:
33
+ #[
34
+ #['Source','-','Save','NewPage','Preview','-','Templates'],
35
+ #['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print', 'SpellChecker', 'Scayt'],
36
+ #['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],
37
+ #['Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField'],
38
+ #'/',
39
+ #['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],
40
+ #['NumberedList','BulletedList','-','Outdent','Indent','Blockquote','CreateDiv'],
41
+ #['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
42
+ #['Link','Unlink','Anchor'],
43
+ #['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],
44
+ #'/',
45
+ #['Styles','Format','Font','FontSize'],
46
+ #['TextColor','BGColor'],
47
+ #['Maximize', 'ShowBlocks','-','About']
48
+ #]
@@ -0,0 +1,8 @@
1
+ class Add<%= formatted_locale.camelize %>Translation < ActiveRecord::Migration
2
+
3
+ def change
4
+ <%- translated_columns.each do |column_hash| %>
5
+ add_column(:kuhsaft_pages, "<%= get_attribute column_hash %>", :<%= get_type column_hash %>) unless Kuhsaft::Page.column_names.include?("<%= get_attribute column_hash %>")
6
+ <%- end %>
7
+ end
8
+ end
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+
3
+ describe Kuhsaft::Api::PagesController do
4
+ describe '#index' do
5
+ before do
6
+ @pages = []
7
+ @pages << @page1 = create(:page, published: true, title_de: 'foobar de',
8
+ url_de: 'de/foobar-de', title_en: 'foobar en', url_en: 'en/foobar-en')
9
+ @pages << @page2 = create(:page, published: true, title_de: 'barfoo de',
10
+ url_de: 'de/barfoo-de', title_en: 'barfoo en', url_en: 'en/barfoo-en')
11
+ @pages << @unpublished = create(:page, published: false, title_de: 'unpublished de',
12
+ url_de: 'de/unpublished-de', title_en: 'unpublished en',
13
+ url_en: 'en/unpublished-en')
14
+ end
15
+
16
+ it 'gets only published pages' do
17
+ I18n.with_locale :de do
18
+ get :index, use_route: :kuhsaft
19
+ expect(JSON.parse(response.body)).to eq([@page1, @page2].as_json)
20
+ end
21
+ end
22
+
23
+ it 'gets specific translated pages for each locale' do
24
+ I18n.with_locale :de do
25
+ @pages << @only_german = create(:page, published: true, title: 'foobar de', url: 'de/foobar-de')
26
+ get :index, use_route: :kuhsaft
27
+ expect(JSON.parse(response.body)).to eq([@page1, @page2, @only_german].as_json)
28
+ end
29
+
30
+ I18n.with_locale :en do
31
+ get :index, use_route: :kuhsaft
32
+ expect(JSON.parse(response.body)).to eq([@page1, @page2].as_json)
33
+ end
34
+ end
35
+ end
36
+
37
+ describe 'expected json format of a page' do
38
+ before do
39
+ @pages = []
40
+ @pages << @page1 = create(:page, published: true, title_de: 'foobar de',
41
+ url_de: 'de/foobar-de', title_en: 'foobar en', url_en: 'en/foobar-en')
42
+ @pages << @page2 = create(:page, published: true, title_de: 'barfoo de',
43
+ url_de: 'de/barfoo-de', title_en: 'barfoo en', url_en: 'en/barfoo-en')
44
+
45
+ I18n.with_locale :de do
46
+ get :index, use_route: :kuhsaft
47
+ @json = JSON.parse(response.body)
48
+ @page_hash = @json.first
49
+ end
50
+ end
51
+
52
+ it 'contains the title' do
53
+ I18n.with_locale :de do
54
+ expect(@page_hash['title']).to eq(@page1.title)
55
+ end
56
+ end
57
+
58
+ it 'contains the url with page ID' do
59
+ I18n.with_locale :de do
60
+ expect(@page_hash['url']).to eq('/pages/' + @page1.id.to_s)
61
+ end
62
+ end
63
+
64
+ it 'does not contain the slug' do
65
+ I18n.with_locale :de do
66
+ expect(@page_hash['slug']).to eq(nil)
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,90 @@
1
+ require 'spec_helper'
2
+
3
+ describe Kuhsaft::PagesController do
4
+ subject { described_class }
5
+
6
+ describe '#index' do
7
+ before do
8
+ @pages = [
9
+ create(:page, published: true, fulltext_de: 'foobar'),
10
+ create(:page, published: true, fulltext_de: 'barfoo')
11
+ ]
12
+ end
13
+
14
+ context 'with search parameter' do
15
+ it 'assigns the search results' do
16
+ I18n.with_locale :de do
17
+ get(:index, use_route: :kuhsaft, search: 'foobar')
18
+ end
19
+ assigns(:pages).should eq([@pages.first])
20
+ end
21
+ end
22
+ end
23
+
24
+ describe '#show' do
25
+ describe 'routing' do
26
+ context 'without url' do
27
+ before do
28
+ @page = FactoryGirl.create(:page, url_de: 'de')
29
+ end
30
+
31
+ context 'with matching locale' do
32
+ it 'sets the corresponding page' do
33
+ I18n.with_locale(:de) do
34
+ get(:show, use_route: :kuhsaft)
35
+ end
36
+ assigns(:page).should eq(@page)
37
+ end
38
+ end
39
+
40
+ context 'without matching locale' do
41
+ it 'raises a routing error' do
42
+ I18n.with_locale(:en) do
43
+ expect { get(:show, use_route: :kuhsaft) }.to raise_error(ActionController::RoutingError)
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+
50
+ describe 'page type' do
51
+ around(:each) do |example|
52
+ I18n.with_locale :de do
53
+ example.run
54
+ end
55
+ end
56
+
57
+ context 'when page is not a redirect page' do
58
+ it 'responds with page' do
59
+ page = FactoryGirl.create(:page, slug: 'dumdidum',
60
+ url: 'de/dumdidum')
61
+ get :show, url: page.slug, use_route: :kuhsaft
62
+ assigns(:page).should eq(page)
63
+ end
64
+ end
65
+
66
+ context 'when page is a redirect page' do
67
+ it 'redirects to the redirected url' do
68
+ page = FactoryGirl.create(:page, page_type: 'redirect', slug: 'dumdidum',
69
+ url: 'de/dumdidum', redirect_url: 'de/redirect_page')
70
+ get :show, url: page.slug, use_route: :kuhsaft
71
+ expect(response).to redirect_to('/de/redirect_page')
72
+ end
73
+
74
+ it 'redirects to invalid redirect urls with too many preceding slashes' do
75
+ page = FactoryGirl.create(:page, page_type: 'redirect', slug: 'dumdidum',
76
+ url: 'de/dumdidum', redirect_url: '///de/redirect_page')
77
+ get :show, url: page.slug, use_route: :kuhsaft
78
+ expect(response).to redirect_to('/de/redirect_page')
79
+ end
80
+
81
+ it 'redirects to root' do
82
+ page = FactoryGirl.create(:page, page_type: 'redirect', slug: 'dumdidum',
83
+ url: 'de/dumdidum', redirect_url: '/')
84
+ get :show, url: page.slug, use_route: :kuhsaft
85
+ expect(response).to redirect_to('/')
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Kuhsaft::SitemapsController do
4
+ describe '#index' do
5
+ before do
6
+ @page = FactoryGirl.create(:page)
7
+ end
8
+
9
+ it 'should be able to send a xml file' do
10
+ get(:index, use_route: :kuhsaft, format: 'xml')
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env rake
2
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
3
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
4
+
5
+ require File.expand_path('../config/application', __FILE__)
6
+
7
+ Dummy::Application.load_tasks
@@ -0,0 +1,15 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // the compiled file.
9
+ //
10
+ // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11
+ // GO AFTER THE REQUIRES BELOW.
12
+ //
13
+ //= require jquery
14
+ //= require jquery_ujs
15
+ //= require_tree .
@@ -0,0 +1,48 @@
1
+ CKEDITOR.editorConfig = (config) ->
2
+ config.language = "de"
3
+ config.extraAllowedContent = 'iframe[*]'
4
+ config.removeButtons = "Anchor,Underline,Strike,Subscript,Superscript"
5
+ config.format_tags = "p;h1;h2;h3;h4;pre"
6
+ config.toolbar = [["Format"],
7
+ ["Bold", "Italic", "Underline", "Strike", "-", "Subscript", "Superscript"],
8
+ ["Table", "HorizontalRule", "SpecialChar"], ["Link", "Unlink"],
9
+ ["Undo", "Redo", "-", "RemoveFormat", "Cut", "Copy", "Paste"],
10
+ ["Source", "-", "ShowBlocks", "-", "About"],
11
+ ["Maximize"]]
12
+
13
+ config.linkShowAdvancedTab = false
14
+ config.linkShowTargetTab = false
15
+
16
+ config.removePlugins = 'link'
17
+ config.extraPlugins = 'adv_link'
18
+
19
+ true
20
+
21
+ # Image Upload options:
22
+ # ---------------------
23
+
24
+ # enable theese two:
25
+ # config.filebrowserUploadUrl = '/cms/ckimages'
26
+ # config.filebrowserBrowseUrl = '/cms/ckimages'
27
+
28
+ # and add this button:
29
+ # 'Image'
30
+
31
+
32
+ # FULL OPTIONS:
33
+ #[
34
+ #['Source','-','Save','NewPage','Preview','-','Templates'],
35
+ #['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print', 'SpellChecker', 'Scayt'],
36
+ #['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],
37
+ #['Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField'],
38
+ #'/',
39
+ #['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],
40
+ #['NumberedList','BulletedList','-','Outdent','Indent','Blockquote','CreateDiv'],
41
+ #['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
42
+ #['Link','Unlink','Anchor'],
43
+ #['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],
44
+ #'/',
45
+ #['Styles','Format','Font','FontSize'],
46
+ #['TextColor','BGColor'],
47
+ #['Maximize', 'ShowBlocks','-','About']
48
+ #]
@@ -0,0 +1,13 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the top of the
9
+ * compiled file, but it's generally better to create a new file per style scope.
10
+ *
11
+ *= require_self
12
+ *= require_tree .
13
+ */
@@ -0,0 +1,4 @@
1
+ class ApplicationController < ActionController::Base
2
+ protect_from_forgery
3
+ helper Kuhsaft::Engine.helpers
4
+ end
@@ -0,0 +1,2 @@
1
+ module ApplicationHelper
2
+ end
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <%= yield(:head) %>
5
+ <%= stylesheet_link_tag "application", :media => "all" %>
6
+ <%= javascript_include_tag "application" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>