qbrick 2.5.0.pre → 2.5.0

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 (341) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +69 -379
  3. data/Rakefile +4 -4
  4. data/app/assets/images/logo.png +0 -0
  5. data/app/assets/javascripts/{kuhsaft → qbrick}/application.js.coffee +1 -1
  6. data/app/assets/javascripts/{kuhsaft → qbrick}/cms/application.js.coffee.erb +40 -17
  7. data/app/assets/javascripts/{kuhsaft → qbrick}/views/read_more_view.js.coffee +0 -0
  8. data/app/assets/stylesheets/{kuhsaft → qbrick}/application.css.sass +0 -0
  9. data/app/assets/stylesheets/{kuhsaft → qbrick}/cms/application.css.sass +38 -1
  10. data/app/assets/stylesheets/{kuhsaft → qbrick}/modules/_text_brick.css.sass +1 -1
  11. data/app/controllers/{kuhsaft → qbrick}/api/pages_controller.rb +2 -2
  12. data/app/controllers/qbrick/cms/accounts_controller.rb +28 -0
  13. data/app/controllers/qbrick/cms/admins_controller.rb +79 -0
  14. data/app/controllers/{kuhsaft → qbrick}/cms/assets_controller.rb +9 -9
  15. data/app/controllers/qbrick/cms/backend_controller.rb +25 -0
  16. data/app/controllers/{kuhsaft → qbrick}/cms/bricks_controller.rb +16 -13
  17. data/app/controllers/{kuhsaft → qbrick}/cms/ckimages_controller.rb +6 -6
  18. data/app/controllers/qbrick/cms/pages_controller.rb +87 -0
  19. data/app/controllers/qbrick/cms/settings_collections_controller.rb +26 -0
  20. data/app/controllers/{kuhsaft → qbrick}/pages_controller.rb +10 -5
  21. data/app/controllers/{kuhsaft → qbrick}/sitemaps_controller.rb +3 -3
  22. data/app/helpers/cms_helper.rb +4 -4
  23. data/app/helpers/pages_helper.rb +18 -10
  24. data/app/helpers/{kuhsaft → qbrick}/admin_helper.rb +2 -2
  25. data/app/helpers/qbrick/cms/admin_helper.rb +73 -0
  26. data/app/helpers/{kuhsaft → qbrick}/cms/pages_helper.rb +2 -2
  27. data/app/models/{kuhsaft → qbrick}/accordion_brick.rb +2 -2
  28. data/app/models/{kuhsaft → qbrick}/accordion_item_brick.rb +1 -1
  29. data/app/models/qbrick/admin.rb +8 -0
  30. data/app/models/{kuhsaft → qbrick}/anchor_brick.rb +1 -1
  31. data/app/models/{kuhsaft → qbrick}/asset.rb +2 -2
  32. data/app/models/{kuhsaft → qbrick}/asset_brick.rb +2 -2
  33. data/app/models/{kuhsaft → qbrick}/brick.rb +11 -8
  34. data/app/models/{kuhsaft → qbrick}/brick_type.rb +1 -1
  35. data/app/models/{kuhsaft → qbrick}/brick_type_filter.rb +4 -4
  36. data/app/models/{kuhsaft → qbrick}/ckimage.rb +1 -1
  37. data/app/models/{kuhsaft → qbrick}/cms.rb +2 -2
  38. data/app/models/qbrick/cms_model.rb +25 -0
  39. data/app/models/{kuhsaft → qbrick}/column_brick.rb +2 -2
  40. data/app/models/{kuhsaft → qbrick}/image_brick.rb +2 -2
  41. data/app/models/{kuhsaft → qbrick}/image_size.rb +3 -3
  42. data/app/models/{kuhsaft → qbrick}/link_brick.rb +1 -1
  43. data/app/models/{kuhsaft → qbrick}/page.rb +78 -17
  44. data/app/models/{kuhsaft → qbrick}/page_type.rb +3 -2
  45. data/app/models/{kuhsaft → qbrick}/partition.rb +1 -1
  46. data/app/models/{kuhsaft → qbrick}/placeholder_brick.rb +4 -4
  47. data/app/models/{kuhsaft → qbrick}/publish_state.rb +1 -1
  48. data/app/models/qbrick/setting.rb +13 -0
  49. data/app/models/qbrick/settings_collection.rb +10 -0
  50. data/app/models/{kuhsaft → qbrick}/slider_brick.rb +3 -3
  51. data/app/models/{kuhsaft → qbrick}/text_brick.rb +1 -1
  52. data/app/models/{kuhsaft → qbrick}/two_column_brick.rb +2 -2
  53. data/app/models/{kuhsaft → qbrick}/video_brick.rb +1 -1
  54. data/app/uploaders/qbrick/asset_brick_asset_uploader.rb +26 -0
  55. data/app/uploaders/{kuhsaft → qbrick}/asset_uploader.rb +3 -2
  56. data/app/uploaders/{kuhsaft → qbrick}/ckimage_uploader.rb +1 -1
  57. data/app/uploaders/{kuhsaft → qbrick}/image_brick_image_uploader.rb +4 -4
  58. data/app/views/devise/confirmations/new.html.haml +10 -0
  59. data/app/views/devise/mailer/confirmation_instructions.html.haml +4 -0
  60. data/app/views/devise/mailer/reset_password_instructions.html.haml +6 -0
  61. data/app/views/devise/mailer/unlock_instructions.html.haml +5 -0
  62. data/app/views/devise/passwords/edit.html.haml +10 -0
  63. data/app/views/devise/passwords/new.html.haml +8 -0
  64. data/app/views/devise/registrations/edit.html.haml +9 -0
  65. data/app/views/devise/registrations/new.html.haml +21 -0
  66. data/app/views/devise/sessions/new.html.haml +12 -0
  67. data/app/views/devise/shared/_links.html.haml +19 -0
  68. data/app/views/devise/unlocks/new.html.haml +10 -0
  69. data/app/views/layouts/devise.html.haml +16 -0
  70. data/app/views/layouts/{kuhsaft → qbrick}/cms/application.html.haml +4 -5
  71. data/app/views/layouts/qbrick/cms/ckimages.html.haml +18 -0
  72. data/app/views/{kuhsaft → qbrick}/accordion_bricks/_accordion_brick.html.haml +0 -0
  73. data/app/views/{kuhsaft → qbrick}/accordion_bricks/accordion_brick/_edit.html.haml +0 -0
  74. data/app/views/{kuhsaft → qbrick}/accordion_item_bricks/_accordion_item_brick.html.haml +0 -0
  75. data/app/views/{kuhsaft → qbrick}/accordion_item_bricks/accordion_item_brick/_edit.html.haml +0 -0
  76. data/app/views/{kuhsaft → qbrick}/anchor_bricks/_anchor_brick.html.haml +0 -0
  77. data/app/views/{kuhsaft → qbrick}/anchor_bricks/anchor_brick/_edit.html.haml +0 -0
  78. data/app/views/{kuhsaft → qbrick}/asset_bricks/_asset_brick.html.haml +0 -0
  79. data/app/views/{kuhsaft → qbrick}/asset_bricks/asset_brick/_edit.html.haml +1 -1
  80. data/app/views/qbrick/cms/accounts/edit.html.haml +12 -0
  81. data/app/views/qbrick/cms/admins/_form.html.haml +10 -0
  82. data/app/views/qbrick/cms/admins/edit.html.haml +5 -0
  83. data/app/views/qbrick/cms/admins/index.html.haml +26 -0
  84. data/app/views/qbrick/cms/admins/new.html.haml +5 -0
  85. data/app/views/{kuhsaft → qbrick}/cms/assets/_form.html.haml +0 -0
  86. data/app/views/{kuhsaft → qbrick}/cms/assets/_list.html.haml +0 -0
  87. data/app/views/{kuhsaft → qbrick}/cms/assets/edit.html.haml +0 -0
  88. data/app/views/qbrick/cms/assets/index.html.haml +3 -0
  89. data/app/views/{kuhsaft → qbrick}/cms/assets/new.html.haml +0 -0
  90. data/app/views/qbrick/cms/backend/_brick_clone_menu.html.haml +16 -0
  91. data/app/views/qbrick/cms/backend/_brick_type_dropdown.html.haml +15 -0
  92. data/app/views/{kuhsaft/cms/admin → qbrick/cms/backend}/_empty_state.html.haml +0 -0
  93. data/app/views/{kuhsaft/cms/admin → qbrick/cms/backend}/_flash.html.haml +0 -0
  94. data/app/views/qbrick/cms/backend/_main_navigation.html.haml +20 -0
  95. data/app/views/{kuhsaft → qbrick}/cms/bricks/_brick_header.html.haml +4 -4
  96. data/app/views/{kuhsaft → qbrick}/cms/bricks/_brick_item.html.haml +6 -5
  97. data/app/views/{kuhsaft → qbrick}/cms/bricks/_brick_list.html.haml +1 -1
  98. data/app/views/{kuhsaft → qbrick}/cms/bricks/_new.html.haml +3 -3
  99. data/app/views/{kuhsaft → qbrick}/cms/bricks/_sort_form.html.haml +0 -0
  100. data/app/views/{kuhsaft → qbrick}/cms/bricks/create.js.erb +1 -1
  101. data/app/views/{kuhsaft → qbrick}/cms/bricks/destroy.js.erb +0 -0
  102. data/app/views/{kuhsaft → qbrick}/cms/bricks/new.js.erb +1 -1
  103. data/app/views/{kuhsaft → qbrick}/cms/bricks/update.js.erb +1 -1
  104. data/app/views/{kuhsaft → qbrick}/cms/ckimages/create.html.haml +0 -0
  105. data/app/views/{kuhsaft → qbrick}/cms/ckimages/destroy.js.erb +0 -0
  106. data/app/views/{kuhsaft → qbrick}/cms/ckimages/index.html.haml +1 -1
  107. data/app/views/{kuhsaft → qbrick}/cms/pages/_branch.html.haml +4 -4
  108. data/app/views/{kuhsaft → qbrick}/cms/pages/_form.html.haml +15 -6
  109. data/app/views/qbrick/cms/pages/_mirror_modal.html.haml +52 -0
  110. data/app/views/qbrick/cms/pages/edit.html.haml +16 -0
  111. data/app/views/{kuhsaft → qbrick}/cms/pages/index.html.haml +1 -1
  112. data/app/views/qbrick/cms/pages/mirror.js.haml +5 -0
  113. data/app/views/qbrick/cms/pages/new.html.haml +1 -0
  114. data/app/views/{kuhsaft → qbrick}/cms/pages/show.html.haml +0 -0
  115. data/app/views/{kuhsaft → qbrick}/cms/pages/sort.js.erb +0 -0
  116. data/app/views/qbrick/cms/settings_collections/_form.html.haml +8 -0
  117. data/app/views/qbrick/cms/settings_collections/index.html.haml +6 -0
  118. data/app/views/{kuhsaft → qbrick}/column_bricks/_column_brick.html.haml +0 -0
  119. data/app/views/{kuhsaft → qbrick}/column_bricks/column_brick/_edit.html.haml +0 -0
  120. data/app/views/{kuhsaft → qbrick}/image_bricks/_image_brick.html.haml +0 -0
  121. data/app/views/{kuhsaft → qbrick}/image_bricks/image_brick/_edit.html.haml +1 -1
  122. data/app/views/{kuhsaft → qbrick}/link_bricks/_link_brick.html.haml +0 -0
  123. data/app/views/{kuhsaft → qbrick}/link_bricks/link_brick/_edit.html.haml +1 -1
  124. data/app/views/{kuhsaft → qbrick}/pages/index.html.haml +2 -2
  125. data/app/views/{kuhsaft → qbrick}/pages/show.html.haml +2 -0
  126. data/app/views/{kuhsaft → qbrick}/placeholder_bricks/_placeholder_brick.html.haml +0 -0
  127. data/app/views/qbrick/placeholder_bricks/placeholder_brick/_edit.html.haml +1 -0
  128. data/app/views/{kuhsaft → qbrick}/search/_form.html.haml +0 -0
  129. data/app/views/{kuhsaft → qbrick}/search/_results.html.haml +2 -2
  130. data/app/views/{kuhsaft → qbrick}/search/_results_entry.html.haml +1 -1
  131. data/app/views/{kuhsaft → qbrick}/sitemaps/index.xml.haml +0 -0
  132. data/app/views/{kuhsaft → qbrick}/slider_bricks/_slider_brick.html.haml +0 -0
  133. data/app/views/{kuhsaft → qbrick}/slider_bricks/slider_brick/_edit.html.haml +0 -0
  134. data/app/views/{kuhsaft → qbrick}/text_bricks/_text_brick.html.haml +0 -0
  135. data/app/views/{kuhsaft → qbrick}/text_bricks/text_brick/_edit.html.haml +0 -0
  136. data/app/views/{kuhsaft → qbrick}/two_column_bricks/_two_column_brick.html.haml +1 -1
  137. data/app/views/qbrick/two_column_bricks/two_column_brick/_childs.html.haml +5 -0
  138. data/app/views/qbrick/two_column_bricks/two_column_brick/_edit.html.haml +1 -0
  139. data/app/views/{kuhsaft → qbrick}/video_bricks/_video_brick.html.haml +2 -2
  140. data/app/views/{kuhsaft → qbrick}/video_bricks/video_brick/_edit.html.haml +1 -1
  141. data/config/initializers/devise.rb +259 -0
  142. data/config/locales/cms.de.yml +11 -0
  143. data/config/locales/cms.en.yml +11 -0
  144. data/config/locales/devise.en.yml +60 -0
  145. data/config/locales/models/qbrick/accordion_brick/de.yml +4 -0
  146. data/config/locales/models/qbrick/accordion_brick/en.yml +4 -0
  147. data/config/locales/models/qbrick/accordion_item_brick/de.yml +7 -0
  148. data/config/locales/models/qbrick/accordion_item_brick/en.yml +7 -0
  149. data/config/locales/models/qbrick/admin/de.yml +13 -0
  150. data/config/locales/models/qbrick/admin/en.yml +13 -0
  151. data/config/locales/models/{kuhsaft → qbrick}/anchor_brick/de.yml +2 -2
  152. data/config/locales/models/{kuhsaft → qbrick}/anchor_brick/en.yml +2 -2
  153. data/config/locales/models/{kuhsaft → qbrick}/asset_brick/de.yml +2 -2
  154. data/config/locales/models/{kuhsaft → qbrick}/asset_brick/en.yml +2 -2
  155. data/config/locales/models/{kuhsaft → qbrick}/brick/de.yml +1 -1
  156. data/config/locales/models/{kuhsaft → qbrick}/brick/en.yml +1 -1
  157. data/config/locales/models/qbrick/column_brick/de.yml +4 -0
  158. data/config/locales/models/qbrick/column_brick/en.yml +4 -0
  159. data/config/locales/models/{kuhsaft → qbrick}/image_brick/de.yml +2 -2
  160. data/config/locales/models/{kuhsaft → qbrick}/image_brick/en.yml +2 -2
  161. data/config/locales/models/{kuhsaft → qbrick}/image_size/de.yml +2 -2
  162. data/config/locales/models/{kuhsaft → qbrick}/image_size/en.yml +2 -2
  163. data/config/locales/models/{kuhsaft → qbrick}/link_brick/de.yml +2 -2
  164. data/config/locales/models/{kuhsaft → qbrick}/link_brick/en.yml +2 -2
  165. data/config/locales/models/{kuhsaft → qbrick}/page/de.yml +2 -2
  166. data/config/locales/models/{kuhsaft → qbrick}/page/en.yml +3 -2
  167. data/config/locales/models/{kuhsaft → qbrick}/placeholder_brick/de.yml +2 -2
  168. data/config/locales/models/{kuhsaft → qbrick}/placeholder_brick/en.yml +2 -2
  169. data/config/locales/models/qbrick/slider_brick/de.yml +4 -0
  170. data/config/locales/models/qbrick/slider_brick/en.yml +4 -0
  171. data/config/locales/models/{kuhsaft → qbrick}/text_brick/de.yml +2 -2
  172. data/config/locales/models/{kuhsaft → qbrick}/text_brick/en.yml +2 -2
  173. data/config/locales/models/qbrick/two_column_brick/de.yml +7 -0
  174. data/config/locales/models/qbrick/two_column_brick/en.yml +7 -0
  175. data/config/locales/models/{kuhsaft → qbrick}/video_brick/de.yml +2 -2
  176. data/config/locales/models/{kuhsaft → qbrick}/video_brick/en.yml +2 -2
  177. data/config/locales/views/qbrick/cms/admin/de.yml +36 -0
  178. data/config/locales/views/{kuhsaft → qbrick}/cms/admin/en.yml +1 -1
  179. data/config/locales/views/{kuhsaft → qbrick}/cms/bricks/de.yml +1 -1
  180. data/config/locales/views/{kuhsaft → qbrick}/cms/bricks/en.yml +1 -1
  181. data/config/locales/views/qbrick/cms/navigation.yml +8 -0
  182. data/config/locales/views/{kuhsaft → qbrick}/cms/pages/de.yml +14 -1
  183. data/config/locales/views/{kuhsaft → qbrick}/cms/pages/en.yml +1 -1
  184. data/config/locales/views/qbrick/cms/settings_collection/de.yml +14 -0
  185. data/config/locales/views/qbrick/cms/settings_collection/en.yml +14 -0
  186. data/config/locales/views/{kuhsaft → qbrick}/image_brick/de.yml +1 -1
  187. data/config/locales/views/{kuhsaft → qbrick}/image_brick/en.yml +1 -1
  188. data/config/locales/views/{kuhsaft → qbrick}/search/de.yml +1 -1
  189. data/config/locales/views/{kuhsaft → qbrick}/search/en.yml +1 -1
  190. data/config/locales/views/{kuhsaft → qbrick}/text_brick/de.yml +1 -1
  191. data/config/locales/views/{kuhsaft → qbrick}/text_brick/en.yml +1 -1
  192. data/config/locales/views/{kuhsaft → qbrick}/video_brick/de.yml +1 -1
  193. data/config/locales/views/{kuhsaft → qbrick}/video_brick/en.yml +1 -1
  194. data/config/routes.rb +14 -2
  195. data/db/migrate/{01_create_kuhsaft_pages.rb → 01_create_qbrick_pages.rb} +5 -5
  196. data/db/migrate/{02_create_kuhsaft_bricks.rb → 02_create_qbrick_bricks.rb} +3 -3
  197. data/db/migrate/03_create_qbrick_brick_types.rb +12 -0
  198. data/db/migrate/04_create_qbrick_assets.rb +10 -0
  199. data/db/migrate/05_remove_cms_admin.rb +3 -3
  200. data/db/migrate/06_add_template_name_to_qbrick_bricks.rb +7 -0
  201. data/db/migrate/07_add_default_value_to_brick_type_enabled.rb +2 -2
  202. data/db/migrate/08_add_display_styles_to_bricks.rb +1 -1
  203. data/db/migrate/09_add_additional_fields_to_qbrick_bricks.rb +6 -0
  204. data/db/migrate/10_add_redirect_url_to_qbrick_pages.rb +7 -0
  205. data/db/migrate/11_update_url_and_redirect_url_value.rb +2 -2
  206. data/db/migrate/12_regenerate_fulltext.rb +1 -1
  207. data/db/migrate/13_add_page_title_to_pages.rb +1 -1
  208. data/db/migrate/14_move_qbrick_assets.rb +22 -0
  209. data/db/migrate/15_add_alt_text_to_bricks.rb +1 -1
  210. data/db/migrate/16_update_default_value_for_page_type.rb +2 -2
  211. data/db/migrate/17_set_page_type_to_content_for_empty_fields.rb +2 -2
  212. data/db/migrate/18_add_identifier_to_qbrick_pages.rb +6 -0
  213. data/db/migrate/19_add_col_count_to_bricks.rb +1 -1
  214. data/db/migrate/20_create_qbrick_ckimages.rb +9 -0
  215. data/db/migrate/21_add_google_verification_key_to_qbrick_pages.rb +5 -0
  216. data/db/migrate/22_create_settings.rb +15 -0
  217. data/db/migrate/22_create_settings_collections.rb +11 -0
  218. data/db/migrate/23_add_metadata_to_asset.rb +6 -0
  219. data/db/migrate/23_devise_create_qbrick_admins.rb +42 -0
  220. data/db/seeds.rb +36 -13
  221. data/lib/generators/{kuhsaft → qbrick}/assets/install_generator.rb +5 -5
  222. data/lib/generators/qbrick/custom_model_generator.rb +117 -0
  223. data/lib/generators/{kuhsaft → qbrick}/translations/add_generator.rb +4 -4
  224. data/lib/qbrick.rb +24 -0
  225. data/lib/{kuhsaft → qbrick}/brick_list.rb +3 -3
  226. data/lib/{kuhsaft → qbrick}/engine.rb +5 -5
  227. data/lib/{kuhsaft → qbrick}/gridded.rb +1 -1
  228. data/lib/{kuhsaft → qbrick}/image_uploader_mounting.rb +2 -2
  229. data/lib/{kuhsaft → qbrick}/orderable.rb +1 -1
  230. data/lib/{kuhsaft → qbrick}/page_tree.rb +1 -1
  231. data/lib/{kuhsaft → qbrick}/partial_extractor.rb +1 -1
  232. data/lib/{kuhsaft → qbrick}/searchable.rb +5 -3
  233. data/lib/{kuhsaft → qbrick}/touch_placeholders.rb +4 -4
  234. data/lib/{kuhsaft → qbrick}/translatable.rb +1 -1
  235. data/lib/qbrick/version.rb +3 -0
  236. data/lib/tasks/{kuhsaft_tasks.rake → qbrick_tasks.rake} +5 -5
  237. data/lib/templates/{kuhsaft → qbrick}/assets/ck-config.js.coffee +0 -0
  238. data/lib/templates/{kuhsaft → qbrick}/assets/customizations.css.sass +0 -0
  239. data/lib/templates/{kuhsaft → qbrick}/assets/customizations.js.coffee +0 -0
  240. data/lib/templates/qbrick/custom_model_generator/base_controller.rb +17 -0
  241. data/lib/templates/qbrick/custom_model_generator/inherited_views/base/_form.html.haml +12 -0
  242. data/lib/templates/qbrick/custom_model_generator/inherited_views/base/edit.html.haml +5 -0
  243. data/lib/templates/qbrick/custom_model_generator/inherited_views/base/index.html.haml +28 -0
  244. data/lib/templates/qbrick/custom_model_generator/inherited_views/base/new.html.haml +5 -0
  245. data/lib/templates/qbrick/custom_model_generator/translations/qbrick_base.yml +11 -0
  246. data/lib/templates/qbrick/custom_model_generator/translations/resource.yml.erb +14 -0
  247. data/lib/templates/qbrick/translations/add_translation.erb +8 -0
  248. data/spec/command_wrapper_helper.rb +21 -0
  249. data/spec/controllers/{kuhsaft → qbrick}/api/pages_controller_spec.rb +5 -5
  250. data/spec/controllers/qbrick/cms/pages_controller_spec.rb +61 -0
  251. data/spec/controllers/{kuhsaft → qbrick}/pages_controller_spec.rb +11 -13
  252. data/spec/controllers/{kuhsaft → qbrick}/sitemaps_controller_spec.rb +2 -2
  253. data/spec/dummy/app/assets/javascripts/{kuhsaft → qbrick}/cms/ck-config.js.coffee +0 -0
  254. data/spec/dummy/app/assets/javascripts/{kuhsaft → qbrick}/cms/customizations.js.coffee +0 -0
  255. data/spec/dummy/app/assets/stylesheets/{kuhsaft → qbrick}/cms/customizations.css.sass +0 -0
  256. data/spec/dummy/app/controllers/application_controller.rb +1 -1
  257. data/spec/dummy/config/application.rb +3 -2
  258. data/spec/dummy/config/database.yml +2 -2
  259. data/spec/dummy/config/environments/production.rb +2 -2
  260. data/spec/dummy/config/environments/test.rb +1 -1
  261. data/spec/dummy/config/initializers/{kuhsaft.rb → qbrick.rb} +1 -1
  262. data/spec/dummy/config/routes.rb +4 -1
  263. data/spec/factories.rb +24 -9
  264. data/spec/features/administrator_management_spec.rb +70 -0
  265. data/spec/features/cms_pages_spec.rb +15 -11
  266. data/spec/features/search_spec.rb +15 -15
  267. data/spec/features_helper.rb +36 -0
  268. data/spec/generators/custom_model_generator_spec.rb +83 -0
  269. data/spec/helpers/{kuhsaft → qbrick}/cms/admin_helper_spec.rb +5 -5
  270. data/spec/helpers/{kuhsaft → qbrick}/cms/pages_helper_spec.rb +6 -6
  271. data/spec/helpers/{kuhsaft → qbrick}/pages_helper_spec.rb +4 -5
  272. data/spec/lib/brick_list_spec.rb +12 -11
  273. data/spec/lib/engine_spec.rb +5 -9
  274. data/spec/lib/gridded_spec.rb +4 -5
  275. data/spec/lib/image_uploader_mounting_spec.rb +3 -4
  276. data/spec/lib/page_tree_spec.rb +5 -5
  277. data/spec/lib/searchable_spec.rb +7 -8
  278. data/spec/lib/touch_placeholders_spec.rb +4 -5
  279. data/spec/lib/translatable_spec.rb +20 -20
  280. data/spec/models/accordion_brick_spec.rb +7 -8
  281. data/spec/models/accordion_item_brick_spec.rb +8 -9
  282. data/spec/models/anchor_brick_spec.rb +5 -6
  283. data/spec/models/asset_brick_spec.rb +8 -9
  284. data/spec/models/asset_spec.rb +9 -11
  285. data/spec/models/brick_spec.rb +34 -34
  286. data/spec/models/brick_type_filter_spec.rb +14 -14
  287. data/spec/models/column_brick_spec.rb +6 -7
  288. data/spec/models/image_brick_spec.rb +9 -10
  289. data/spec/models/image_size_spec.rb +8 -8
  290. data/spec/models/link_brick_spec.rb +9 -10
  291. data/spec/models/page_spec.rb +113 -73
  292. data/spec/models/placeholder_brick_spec.rb +12 -13
  293. data/spec/models/publish_state_spec.rb +7 -7
  294. data/spec/models/setting_spec.rb +28 -0
  295. data/spec/models/slider_brick_spec.rb +5 -6
  296. data/spec/models/text_brick_spec.rb +5 -5
  297. data/spec/models/two_column_brick_spec.rb +14 -15
  298. data/spec/models/video_brick_spec.rb +5 -6
  299. data/spec/postgres_helper.rb +66 -0
  300. data/spec/{kuhsaft_spec.rb → qbrick_spec.rb} +2 -2
  301. data/spec/spec_helper.rb +23 -10
  302. data/spec/support/{kuhsaft_spec_helper.rb → qbrick_spec_helper.rb} +1 -1
  303. data/spec/support/write_expectation.rb +2 -2
  304. data/spec/views/{kuhsaft → qbrick}/sitemaps/index.xml.haml_spec.rb +3 -3
  305. metadata +451 -330
  306. data/app/controllers/kuhsaft/cms/admin_controller.rb +0 -18
  307. data/app/controllers/kuhsaft/cms/pages_controller.rb +0 -71
  308. data/app/helpers/kuhsaft/cms/admin_helper.rb +0 -21
  309. data/app/uploaders/kuhsaft/asset_brick_asset_uploader.rb +0 -43
  310. data/app/views/kuhsaft/cms/admin/_brick_type_dropdown.html.haml +0 -14
  311. data/app/views/kuhsaft/cms/admin/_content_language_switch.html.haml +0 -7
  312. data/app/views/kuhsaft/cms/admin/_main_navigation.html.haml +0 -6
  313. data/app/views/kuhsaft/cms/assets/index.html.haml +0 -3
  314. data/app/views/kuhsaft/cms/pages/edit.html.haml +0 -16
  315. data/app/views/kuhsaft/cms/pages/new.html.haml +0 -1
  316. data/app/views/kuhsaft/placeholder_bricks/placeholder_brick/_edit.html.haml +0 -1
  317. data/app/views/kuhsaft/two_column_bricks/two_column_brick/_childs.html.haml +0 -5
  318. data/app/views/kuhsaft/two_column_bricks/two_column_brick/_edit.html.haml +0 -1
  319. data/app/views/layouts/kuhsaft/cms/ckimages.html.haml +0 -18
  320. data/config/locales/models/kuhsaft/accordion_brick/de.yml +0 -4
  321. data/config/locales/models/kuhsaft/accordion_brick/en.yml +0 -4
  322. data/config/locales/models/kuhsaft/accordion_item_brick/de.yml +0 -7
  323. data/config/locales/models/kuhsaft/accordion_item_brick/en.yml +0 -7
  324. data/config/locales/models/kuhsaft/column_brick/de.yml +0 -4
  325. data/config/locales/models/kuhsaft/column_brick/en.yml +0 -4
  326. data/config/locales/models/kuhsaft/slider_brick/de.yml +0 -4
  327. data/config/locales/models/kuhsaft/slider_brick/en.yml +0 -4
  328. data/config/locales/models/kuhsaft/two_column_brick/de.yml +0 -7
  329. data/config/locales/models/kuhsaft/two_column_brick/en.yml +0 -7
  330. data/config/locales/views/kuhsaft/cms/admin/de.yml +0 -13
  331. data/db/migrate/03_create_kuhsaft_brick_types.rb +0 -12
  332. data/db/migrate/04_create_kuhsaft_assets.rb +0 -10
  333. data/db/migrate/06_add_template_name_to_kuhsaft_bricks.rb +0 -7
  334. data/db/migrate/09_add_additional_fields_to_kuhsaft_bricks.rb +0 -6
  335. data/db/migrate/10_add_redirect_url_to_kuhsaft_pages.rb +0 -7
  336. data/db/migrate/14_move_kuhsaft_assets.rb +0 -22
  337. data/db/migrate/18_add_identifier_to_kuhsaft_pages.rb +0 -6
  338. data/db/migrate/20_create_kuhsaft_ckimages.rb +0 -9
  339. data/lib/kuhsaft.rb +0 -22
  340. data/lib/kuhsaft/version.rb +0 -3
  341. data/lib/templates/kuhsaft/translations/add_translation.erb +0 -8
@@ -1,24 +1,24 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  module Cms
3
- class CkimagesController < AdminController
4
- layout 'kuhsaft/cms/ckimages'
3
+ class CkimagesController < BackendController
4
+ layout 'qbrick/cms/ckimages'
5
5
  skip_before_action :verify_authenticity_token
6
6
  respond_to :html, :js
7
7
 
8
8
  def create
9
9
  @func_num = params['CKEditorFuncNum']
10
10
  @ck_editor = params['CKEditor']
11
- @ckimage = Kuhsaft::Ckimage.create(file: params[:upload])
11
+ @ckimage = Qbrick::Ckimage.create(file: params[:upload])
12
12
  end
13
13
 
14
14
  def index
15
15
  @func_num = params['CKEditorFuncNum']
16
16
  @ck_editor = params['CKEditor']
17
- @ckimages = Kuhsaft::Ckimage.all
17
+ @ckimages = Qbrick::Ckimage.all
18
18
  end
19
19
 
20
20
  def destroy
21
- @ckimage = Kuhsaft::Ckimage.find(params[:id])
21
+ @ckimage = Qbrick::Ckimage.find(params[:id])
22
22
  @ckimage.destroy
23
23
  end
24
24
  end
@@ -0,0 +1,87 @@
1
+ require 'qbrick/page_tree'
2
+
3
+ module Qbrick
4
+ module Cms
5
+ class PagesController < BackendController
6
+ def index
7
+ @pages = Qbrick::Page.roots
8
+ respond_with @pages
9
+ end
10
+
11
+ def show
12
+ @page = Qbrick::Page.find(params[:id])
13
+ respond_with @page
14
+ end
15
+
16
+ def new
17
+ @page = Qbrick::Page.new
18
+ @page.published ||= Qbrick::PublishState::UNPUBLISHED
19
+ respond_with @page
20
+ end
21
+
22
+ def create
23
+ @page = Qbrick::Page.create(page_params)
24
+
25
+ if @page.valid?
26
+ flash[:success] = t('layouts.qbrick.cms.flash.success', subject: Qbrick::Page.model_name.human)
27
+ respond_with @page, location: qbrick.edit_cms_page_path(@page)
28
+ else
29
+ render 'new'
30
+ end
31
+ end
32
+
33
+ def edit
34
+ @page = Qbrick::Page.find(params[:id])
35
+ @page.published ||= Qbrick::PublishState::UNPUBLISHED
36
+ @page.bricks.each(&:valid?)
37
+ respond_with @page
38
+ end
39
+
40
+ def update
41
+ @page = Qbrick::Page.find(params[:id])
42
+ if @page.update_attributes(page_params)
43
+ flash[:success] = t('layouts.qbrick.cms.flash.success', subject: Qbrick::Page.model_name.human)
44
+ respond_with @page, location: qbrick.edit_cms_page_path(@page)
45
+ else
46
+ render 'edit'
47
+ end
48
+ end
49
+
50
+ def destroy
51
+ @page = Qbrick::Page.find(params[:id])
52
+ @page.destroy
53
+ redirect_to qbrick.cms_pages_path
54
+ end
55
+
56
+ def sort
57
+ Qbrick::PageTree.update(params[:page_tree])
58
+ end
59
+
60
+ def mirror
61
+ @page = Qbrick::Page.find(params[:page_id])
62
+ mirror_page if page_can_be_mirrored?
63
+ respond_to :js, :html
64
+ end
65
+
66
+ private
67
+
68
+ def page_can_be_mirrored?
69
+ !@page.bricks.empty? && (params[:rutheless] == 'true' || I18n.with_locale(params[:target_locale]) { @page.bricks }.empty?)
70
+ end
71
+
72
+ def mirror_page
73
+ @page.clear_bricks_for_locale(params[:target_locale])
74
+ params[:failed_bricks] = @page.clone_bricks_to(params[:target_locale])
75
+ params[:rutheless] = 'true'
76
+ end
77
+
78
+ def page_params
79
+ safe_params = [
80
+ :title, :page_title, :slug, :redirect_url, :url, :page_type, :parent_id,
81
+ :keywords, :description, :published, :position, :google_verification_key
82
+ ]
83
+ params.require(:page).permit(*safe_params)
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,26 @@
1
+ module Qbrick
2
+ module Cms
3
+ class SettingsCollectionsController < BackendController
4
+ def index
5
+ @settings_collections = [
6
+ Qbrick::SettingsCollection.find_by(collection_type: 'site'),
7
+ Qbrick::SettingsCollection.find_by(collection_type: 'page'),
8
+ Qbrick::SettingsCollection.find_by(collection_type: 'global')
9
+ ]
10
+ end
11
+
12
+ def update
13
+ @settings_collection = Qbrick::SettingsCollection.find(params[:id])
14
+ @settings_collection.update_attributes(settings_collection_params)
15
+
16
+ respond_with @settings_collection, location: cms_settings_collections_path
17
+ end
18
+
19
+ private
20
+
21
+ def settings_collection_params
22
+ params.require(:settings_collection).permit(settings_attributes: [:value, :id])
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,4 +1,4 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  class PagesController < ::ApplicationController
3
3
  respond_to :html
4
4
  before_action :find_page_by_url, only: :show
@@ -6,12 +6,13 @@ module Kuhsaft
6
6
  def index
7
7
  @search = params[:search]
8
8
  return if @search.blank?
9
- @pages = Kuhsaft::Page.unscoped.published.content_page.search(@search)
9
+ @pages = Qbrick::Page.unscoped.published.content_page.search(@search)
10
10
  end
11
11
 
12
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
13
+ if redirect_page?
14
+ redirect_url = @page.redirect_url.sub(%r{\A\/+}, '') # remove all preceding slashes
15
+ session[:qbrick_referrer] = @page.id
15
16
  redirect_to "/#{redirect_url}"
16
17
  elsif @page.present?
17
18
  respond_with @page
@@ -29,10 +30,14 @@ module Kuhsaft
29
30
 
30
31
  private
31
32
 
33
+ def redirect_page?
34
+ @page.present? && @page.redirect? && @page.redirect_url.present?
35
+ end
36
+
32
37
  def find_page_by_url
33
38
  url = locale.to_s
34
39
  url += "/#{params[:url]}" if params[:url].present?
35
- @page = Kuhsaft::Page.find_by_url(url)
40
+ @page = Qbrick::Page.find_by_url(url)
36
41
  end
37
42
  end
38
43
  end
@@ -1,11 +1,11 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  class SitemapsController < ::ApplicationController
3
3
  def index
4
- last_page = Kuhsaft::Page.published.last
4
+ last_page = Qbrick::Page.published.last
5
5
  return unless stale?(etag: last_page, last_modified: last_page.updated_at.utc)
6
6
  respond_to do |format|
7
7
  format.html
8
- format.xml { @pages = Kuhsaft::Page.published }
8
+ format.xml { @pages = Qbrick::Page.published }
9
9
  end
10
10
  end
11
11
  end
@@ -5,17 +5,17 @@ module CmsHelper
5
5
 
6
6
  def available_parent_pages
7
7
  pages = []
8
- pages << { title: t('kuhsaft.cms.pages.new.pages'), link: kuhsaft.cms_pages_path(locale: :en) }
8
+ pages << { title: t('qbrick.cms.pages.new.pages'), link: qbrick.cms_pages_path(locale: :en) }
9
9
  if params[:parent_id].present?
10
- parent_page = Kuhsaft::Page.find(params[:parent_id])
10
+ parent_page = Qbrick::Page.find(params[:parent_id])
11
11
  pages += parent_page.parent_pages
12
12
  end
13
- pages << { title: t('kuhsaft.cms.pages.new.new_page'), link: '#' }
13
+ pages << { title: t('qbrick.cms.pages.new.new_page'), link: '#' }
14
14
  end
15
15
 
16
16
  def cms_brick_item(brick_list, type)
17
17
  type_name = type.class_name.constantize.model_name.human
18
- link_to type_name, kuhsaft.new_cms_brick_path(
18
+ link_to type_name, qbrick.new_cms_brick_path(
19
19
  brick: {
20
20
  type: type.class_name,
21
21
  brick_list_id: brick_list.id,
@@ -1,6 +1,6 @@
1
1
  module PagesHelper
2
2
  def asset_for(id)
3
- Kuhsaft::Asset.find(id)
3
+ Qbrick::Asset.find(id)
4
4
  end
5
5
 
6
6
  def render_markdown(text)
@@ -8,18 +8,22 @@ module PagesHelper
8
8
  end
9
9
 
10
10
  def homepage
11
- Kuhsaft::Page.roots.first
11
+ Qbrick::Page.roots.first
12
12
  end
13
13
 
14
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)
15
+ url = resolve_page_url_for_nav_level(num)
16
+ page = Qbrick::Page.find_by_url(url)
19
17
  yield page if block_given?
20
18
  page
21
19
  end
22
20
 
21
+ def resolve_page_url_for_nav_level(level)
22
+ input = controller.current_url if controller.respond_to? :current_url
23
+ input ||= params[:url].presence || ''
24
+ input.split('/').take(level + 1).join('/') unless input.blank?
25
+ end
26
+
23
27
  def active_page_class(page)
24
28
  input = controller.current_url if controller.respond_to? :current_url
25
29
  input ||= params[:url].presence || ''
@@ -32,18 +36,22 @@ module PagesHelper
32
36
 
33
37
  def read_more_link(id)
34
38
  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')
39
+ @content = content_tag(:p, t('qbrick.text_bricks.text_brick.read_more'), class: 'read-more-text')
40
+ @content << content_tag(:p, t('qbrick.text_bricks.text_brick.read_less'), class: 'read-less-text')
37
41
  end
38
42
  end
39
43
 
40
44
  def search_page_form
41
- form_tag kuhsaft.pages_path, method: :get, class: 'form-inline' do
45
+ form_tag qbrick.pages_path, method: :get, class: 'form-inline' do
42
46
  if block_given?
43
47
  yield
44
48
  else
45
- render 'kuhsaft/search/form'
49
+ render 'qbrick/search/form'
46
50
  end
47
51
  end
48
52
  end
53
+
54
+ def on_qbrick_page?
55
+ controller.is_a? Qbrick::PagesController
56
+ end
49
57
  end
@@ -1,4 +1,4 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  module AdminHelper
3
3
  #
4
4
  # When rendering the layout of our host application,
@@ -13,7 +13,7 @@ module Kuhsaft
13
13
  end
14
14
 
15
15
  def sublime_video_include_tag
16
- token = Kuhsaft::Engine.config.sublime_video_token
16
+ token = Qbrick::Engine.config.sublime_video_token
17
17
  javascript_include_tag "//cdn.sublimevideo.net/js/#{token}-beta.js"
18
18
  end
19
19
  end
@@ -0,0 +1,73 @@
1
+ # FIXME: this file is currently ignored by rubocop and could use some cleaning up
2
+ module Qbrick
3
+ module Cms
4
+ module AdminHelper
5
+ def render_language_switch?
6
+ I18n.available_locales.size > 1
7
+ end
8
+
9
+ def link_to_content_locale(locale)
10
+ action = params[:action]
11
+ if params[:action] == 'create'
12
+ action = 'new'
13
+ elsif params[:action] == 'update'
14
+ action = 'edit'
15
+ end
16
+
17
+ link_to locale.to_s.upcase, url_for(
18
+ action: action, content_locale: locale)
19
+ end
20
+
21
+ def model_attribute_field(resource, column_name, f)
22
+ if resource.class.respond_to?(:uploaders) && resource.class.uploaders.keys.include?(column_name.to_sym)
23
+ f.input column_name, as: :file
24
+ elsif association_class(resource, column_name) == Qbrick::Page
25
+ route_input f, column_name, page_routes
26
+ elsif column_name == :link_url || column_name == :link
27
+ route_input f, column_name, user_selectable_routes
28
+ elsif column_name.to_s.end_with? '_id'
29
+ f.association column_name.to_s.gsub(/_id$/, '').to_sym
30
+ elsif column_name == :body
31
+ f.input column_name, input_html: { class: 'ckeditor text required' }
32
+ else
33
+ f.input column_name
34
+ end
35
+ end
36
+
37
+ def route_input(form, column_name, selectable_routes)
38
+ list_name = "routes_#{column_name}"
39
+ haml_tag :datalist, id: list_name, name: list_name do
40
+ selectable_routes.each { |route| haml_tag :option, value: route }
41
+ end
42
+ form.input column_name, input_html: { list: list_name }, as: 'string'
43
+ end
44
+
45
+ def association_class(resource, column_name)
46
+ association = resource.class.reflect_on_all_associations.find { |r| r.name == column_name.to_sym }
47
+ association_class = association.try :class_name
48
+ association_class.present? ? association_class.constantize : nil
49
+ end
50
+
51
+ # here are some route helpers if you need them in your backend
52
+ def all_selectable_routes
53
+ (page_routes + rails_routes).uniq.sort
54
+ end
55
+
56
+ def page_routes
57
+ Qbrick::Page.all_urls
58
+ end
59
+
60
+ def rails_routes
61
+ routes = Rails.application.routes.routes
62
+ routes = routes.select do |r|
63
+ r.verb.match('GET') && !r.requirements.blank? &&
64
+ !r.requirements[:controller].to_s.start_with?('cms') &&
65
+ !r.required_parts.any? &&
66
+ !r.requirements[:controller].to_s.start_with?('rails/')
67
+ end
68
+
69
+ routes.map { |r| _routes.url_for(r.requirements.merge only_path: true).strip }.uniq.sort
70
+ end
71
+ end
72
+ end
73
+ end
@@ -1,4 +1,4 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  module Cms
3
3
  module PagesHelper
4
4
  def content_tab_active(page)
@@ -10,7 +10,7 @@ module Kuhsaft
10
10
  end
11
11
 
12
12
  def hide_content_tab?(page)
13
- page.redirect? || !page.translated? || !page.persisted? || page.errors.present?
13
+ page.page_type == Qbrick::PageType::REDIRECT || !page.translated? || !page.persisted? || page.errors.present?
14
14
  end
15
15
  end
16
16
  end
@@ -1,4 +1,4 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  class AccordionBrick < ColumnBrick
3
3
  def user_can_delete?
4
4
  true
@@ -9,7 +9,7 @@ module Kuhsaft
9
9
  end
10
10
 
11
11
  def allowed_brick_types
12
- %w(Kuhsaft::AccordionItemBrick)
12
+ %w(Qbrick::AccordionItemBrick)
13
13
  end
14
14
  end
15
15
  end
@@ -1,4 +1,4 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  class AccordionItemBrick < ColumnBrick
3
3
  validates :caption, presence: true
4
4
 
@@ -0,0 +1,8 @@
1
+ module Qbrick
2
+ class Admin < ActiveRecord::Base
3
+ # Include default devise modules. Others available are:
4
+ # :confirmable, :lockable, :timeoutable and :omniauthable
5
+ devise :database_authenticatable,
6
+ :recoverable, :rememberable, :trackable, :validatable
7
+ end
8
+ end
@@ -1,4 +1,4 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  class AnchorBrick < Brick
3
3
  validates :caption, presence: true
4
4
 
@@ -1,7 +1,7 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  class Asset < ActiveRecord::Base
3
3
  scope :by_date, -> { order('updated_at DESC') }
4
- mount_uploader :file, Kuhsaft::AssetUploader
4
+ mount_uploader :file, Qbrick::AssetUploader
5
5
 
6
6
  def file_type
7
7
  return unless file.path.present?
@@ -1,6 +1,6 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  class AssetBrick < Brick
3
- mount_uploader :asset, Kuhsaft::AssetBrickAssetUploader
3
+ mount_uploader :asset, Qbrick::AssetBrickAssetUploader
4
4
 
5
5
  validates :caption,
6
6
  :asset, presence: true