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
data/Rakefile CHANGED
@@ -44,7 +44,7 @@ RSpec::Core::RakeTask.new(spec: :setup)
44
44
 
45
45
  RDoc::Task.new(:rdoc) do |rdoc|
46
46
  rdoc.rdoc_dir = 'rdoc'
47
- rdoc.title = 'Kuhsaft'
47
+ rdoc.title = 'Qbrick'
48
48
  rdoc.options << '--line-numbers'
49
49
  rdoc.rdoc_files.include('README.rdoc')
50
50
  rdoc.rdoc_files.include('lib/**/*.rb')
@@ -54,12 +54,12 @@ desc 'set up the dummy app for testing'
54
54
  task :setup do
55
55
  Postgres.create_user 'screenconcept'
56
56
  within_dummy_app do
57
- `bundle exec rake kuhsaft:install:migrations`
58
- `bundle exec rails generate kuhsaft:install:assets`
57
+ `bundle exec rake qbrick:install:migrations`
58
+ `bundle exec rails generate qbrick:install:assets`
59
+ `bundle exec rake db:drop`
59
60
  `bundle exec rake db:create`
60
61
  `bundle exec rake db:migrate`
61
62
  `bundle exec rake db:test:prepare`
62
- `bundle exec rake db:seed`
63
63
  end
64
64
  end
65
65
 
Binary file
@@ -3,5 +3,5 @@
3
3
  #= require_tree ./views
4
4
 
5
5
  $ ->
6
- $('.kuhsaft-text-brick').each ->
6
+ $('.qbrick-text-brick').each ->
7
7
  new ReadMoreView($(this))
@@ -1,4 +1,4 @@
1
- #= depend_on_asset kuhsaft/cms/ck-config
1
+ #= depend_on_asset qbrick/cms/ck-config
2
2
  #
3
3
  #= require jquery
4
4
  #= require jquery_ujs
@@ -15,32 +15,45 @@
15
15
  root = exports ? this
16
16
  root.CKEDITOR.timestamp = null
17
17
 
18
- # As @ryabrody & @k-graefenhain found out there is obviously a bug which causes the asset_path_helper to return paths always without digest:
19
- # https://github.com/rails/sprockets-rails/issues/66
20
- # That's why we need the environment switch here:
21
- CKEDITOR.config.customConfig = "<%= asset_path('kuhsaft/cms/ck-config.js') %>"
18
+ CKEDITOR.config.customConfig = "<%= asset_path('qbrick/cms/ck-config.js') %>"
22
19
 
23
20
  loadTextEditor = ->
24
21
  CKEDITOR.replaceAll('ckeditor')
25
22
 
26
- updateInputsForRedirectPage = (redirect_url, keywords, description) ->
27
- redirect_url.removeAttr('disabled')
28
- keywords.attr('disabled', 'disabled')
29
- description.attr('disabled', 'disabled')
23
+ reloadTextEditor = (ui) ->
24
+ editor_ids = ui.item.find('.ckeditor').map ->
25
+ @id
30
26
 
31
- clearInputsFromRedirectPage = (redirect_url, keywords, description) ->
32
- redirect_url.attr('disabled', 'disabled')
33
- keywords.removeAttr('disabled')
34
- description.removeAttr('disabled')
27
+ for editor in editor_ids
28
+ CKEDITOR.replace editor
29
+
30
+ destroyTextEditor = (ui)->
31
+ editor_ids = ui.item.find('.ckeditor').map ->
32
+ @id
33
+
34
+ for editor in editor_ids
35
+ CKEDITOR.instances[editor].destroy(true)
36
+
37
+ pageType = ->
38
+ $('#page_page_type option:selected').val()
35
39
 
36
40
  checkPageType = ->
37
41
  redirect_url = $('#page_redirect_url')
38
42
  keywords = $('#page_keywords')
39
43
  description = $('#page_description')
40
- if ($('#page_page_type option:selected').val() == 'redirect')
41
- updateInputsForRedirectPage(redirect_url, keywords, description)
44
+ if (pageType() == 'redirect')
45
+ redirect_url.removeAttr('disabled')
46
+ keywords.attr('disabled', 'disabled')
47
+ description.attr('disabled', 'disabled')
48
+ else if (pageType() == 'custom')
49
+ redirect_url.removeAttr('disabled')
50
+ keywords.removeAttr('disabled')
51
+ description.removeAttr('disabled')
42
52
  else
43
- clearInputsFromRedirectPage(redirect_url, keywords, description)
53
+ redirect_url.attr('disabled', 'disabled')
54
+ keywords.removeAttr('disabled')
55
+ description.removeAttr('disabled')
56
+
44
57
 
45
58
  sortableBrick = ->
46
59
  $(".brick-list").each (idx, elem) ->
@@ -57,7 +70,11 @@ sortableBrick = ->
57
70
  sortForm = $('#bricks-sort-form form')
58
71
  sortForm.find('input[name="bricks[ids]"]').val(idList.toArray().join(','))
59
72
  sortForm.trigger('submit')
60
- )
73
+ stop: (event, ui) ->
74
+ reloadTextEditor(ui)
75
+ start: (event, ui) ->
76
+ destroyTextEditor(ui)
77
+ ).disableSelection()
61
78
 
62
79
  window.initSubmitLinks = (selector = null)->
63
80
  selector ||= $('body')
@@ -101,6 +118,9 @@ window.stopPropagationOfDisplayStyles = (selector) ->
101
118
  $(document).ajaxSuccess ->
102
119
  sortableBrick()
103
120
 
121
+ $('a.has-spinner').click ->
122
+ $(this).toggleClass('active')
123
+
104
124
  $(document).ready ->
105
125
  loadTextEditor()
106
126
  checkPageType()
@@ -134,3 +154,6 @@ $(document).ready ->
134
154
  $(elem).collapse('hide')
135
155
  $('.resize-toggler').each (index, elem) ->
136
156
  $(elem).addClass('collapsed')
157
+
158
+ $("[data-toggle=tooltip]").tooltip(placement: 'top')
159
+ $("[data-toggle=popover]").popover(placement: 'left', html: true, container: 'body')
@@ -9,6 +9,7 @@ $baseBorderRadius: 0px
9
9
  $borderRadiusLarge: 0px
10
10
  $borderRadiusSmall: 0px
11
11
 
12
+ @import bourbon
12
13
  @import bootstrap
13
14
  // base styles
14
15
 
@@ -79,10 +80,13 @@ form
79
80
  .brick-list
80
81
  padding-left: 2em
81
82
 
83
+ .popover
84
+ max-width: none
85
+
82
86
  // The single column brick and the page-content (the "root") needs no level indentation
83
87
  // It usually acts as a helper container and is therefore not relevant
84
88
  // for the visual hierarchy
85
- .kuhsaft-column-brick
89
+ .qbrick-column-brick
86
90
  border: 0px solid #fff
87
91
  > .brick-item-childs
88
92
  > .brick-list
@@ -93,6 +97,14 @@ form
93
97
  > .brick-list
94
98
  padding-left: 0
95
99
 
100
+ .nav-tabs
101
+ a.not-translated:after
102
+ content: '*'
103
+ color: #d33
104
+ a
105
+ color: black
106
+
107
+
96
108
  .tab-content
97
109
  display: table
98
110
  width: 100%
@@ -163,6 +175,7 @@ form
163
175
  font-weight: bold
164
176
 
165
177
  .modal
178
+ text-align: left
166
179
  width: 900px
167
180
  margin-left: -450px
168
181
 
@@ -174,6 +187,24 @@ form
174
187
  top: -10px
175
188
  padding-left: 10px
176
189
 
190
+
191
+ .spinner
192
+ display: inline-block
193
+ opacity: 0
194
+ max-width: 0
195
+ @include animation-name(spinIt)
196
+ @include animation-duration(2s)
197
+ @include animation-timing-function(linear)
198
+ @include animation-iteration-count(infinite)
199
+
200
+ @include transition(opacity, 0.25s)
201
+ @include transition(max-width, 0.45s)
202
+
203
+ .has-spinner.active
204
+ .spinner
205
+ opacity: 1
206
+ max-width: 50px
207
+
177
208
  .control-group.text
178
209
  min-height: 310px
179
210
 
@@ -202,3 +233,9 @@ form
202
233
  @import nestable
203
234
  @import bootstrap-responsive
204
235
  @import bootstrap_modal
236
+
237
+ @include keyframes(spinIt)
238
+ from
239
+ @include transform(rotate(0deg))
240
+ to
241
+ @include transform(rotate(360deg))
@@ -1,7 +1,7 @@
1
1
  .button-read-more
2
2
  outline: 0 !important
3
3
 
4
- .kuhsaft-text-brick
4
+ .qbrick-text-brick
5
5
  .read-more-text
6
6
  display: block
7
7
 
@@ -1,4 +1,4 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  module Api
3
3
  class PagesController < ActionController::Base
4
4
  layout :false
@@ -6,7 +6,7 @@ module Kuhsaft
6
6
 
7
7
  def index
8
8
  I18n.locale = params[:locale]
9
- @pages = Kuhsaft::Page.unscoped.published.content_page.translated.order(position: :asc)
9
+ @pages = Qbrick::Page.unscoped.published.content_page.translated.order(position: :asc)
10
10
  render json: @pages.as_json
11
11
  end
12
12
  end
@@ -0,0 +1,28 @@
1
+ module Qbrick
2
+ module Cms
3
+ class AccountsController < BackendController
4
+ before_action :authenticate_admin!
5
+
6
+ def edit
7
+ @admin = current_admin
8
+ end
9
+
10
+ def update_password
11
+ @admin = Admin.find(current_admin.id)
12
+ if @admin.update_with_password(admin_params)
13
+ # Sign in the admin by passing validation in case their password changed
14
+ sign_in @admin, bypass: true
15
+ redirect_to cms_pages_path
16
+ else
17
+ render 'edit'
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ def admin_params
24
+ params.required(:admin).permit(:password, :password_confirmation, :current_password)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,79 @@
1
+ module Qbrick
2
+ module Cms
3
+ class AdminsController < BackendController
4
+ before_action :set_admin, only: [:show, :edit, :update, :destroy]
5
+
6
+ # GET /admins
7
+ # GET /admins.json
8
+ def index
9
+ @admins = Admin.all
10
+ end
11
+
12
+ # GET /admins/1
13
+ # GET /admins/1.json
14
+ def show
15
+ end
16
+
17
+ # GET /admins/new
18
+ def new
19
+ @admin = Admin.new
20
+ end
21
+
22
+ # GET /admins/1/edit
23
+ def edit
24
+ end
25
+
26
+ # POST /admins
27
+ # POST /admins.json
28
+ def create
29
+ @admin = Admin.new(admin_params)
30
+
31
+ respond_to do |format|
32
+ if @admin.save
33
+ format.html { redirect_to cms_admins_path, notice: 'Admin was successfully created.' }
34
+ format.json { render :show, status: :created, location: @admin }
35
+ else
36
+ format.html { render :new }
37
+ format.json { render json: @admin.errors, status: :unprocessable_entity }
38
+ end
39
+ end
40
+ end
41
+
42
+ # PATCH/PUT /admins/1
43
+ # PATCH/PUT /admins/1.json
44
+ def update
45
+ respond_to do |format|
46
+ if @admin.update(admin_params)
47
+ format.html { redirect_to cms_admins_path, notice: 'Admin was successfully updated.' }
48
+ format.json { render :show, status: :ok, location: @admin }
49
+ else
50
+ format.html { render :edit }
51
+ format.json { render json: @admin.errors, status: :unprocessable_entity }
52
+ end
53
+ end
54
+ end
55
+
56
+ # DELETE /admins/1
57
+ # DELETE /admins/1.json
58
+ def destroy
59
+ @admin.destroy
60
+ respond_to do |format|
61
+ format.html { redirect_to cms_admins_url, notice: 'Admin was successfully destroyed.' }
62
+ format.json { head :no_content }
63
+ end
64
+ end
65
+
66
+ private
67
+
68
+ # Use callbacks to share common setup or constraints between actions.
69
+ def set_admin
70
+ @admin = Admin.find(params[:id])
71
+ end
72
+
73
+ # Never trust parameters from the scary internet, only allow the white list through.
74
+ def admin_params
75
+ params.require(:admin).permit(:email, :password, :password_confirmation)
76
+ end
77
+ end
78
+ end
79
+ end
@@ -1,35 +1,35 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  module Cms
3
- class AssetsController < AdminController
3
+ class AssetsController < BackendController
4
4
  def index
5
- @assets = Kuhsaft::Asset.by_date
5
+ @assets = Qbrick::Asset.by_date
6
6
  respond_with @assets
7
7
  end
8
8
 
9
9
  def new
10
- @asset = Kuhsaft::Asset.new
10
+ @asset = Qbrick::Asset.new
11
11
  respond_with @asset
12
12
  end
13
13
 
14
14
  def create
15
- @asset = Kuhsaft::Asset.create params[:kuhsaft_asset]
15
+ @asset = Qbrick::Asset.create params[:qbrick_asset]
16
16
  @asset.save
17
17
  respond_with @asset, location: cms_assets_path
18
18
  end
19
19
 
20
20
  def edit
21
- @asset = Kuhsaft::Asset.find(params[:id])
21
+ @asset = Qbrick::Asset.find(params[:id])
22
22
  respond_with @asset
23
23
  end
24
24
 
25
25
  def update
26
- @asset = Kuhsaft::Asset.find(params[:id])
27
- @asset.update_attributes(params[:kuhsaft_asset])
26
+ @asset = Qbrick::Asset.find(params[:id])
27
+ @asset.update_attributes(params[:qbrick_asset])
28
28
  respond_with @asset, location: cms_assets_path
29
29
  end
30
30
 
31
31
  def destroy
32
- @asset = Kuhsaft::Asset.find(params[:id])
32
+ @asset = Qbrick::Asset.find(params[:id])
33
33
  @asset.destroy
34
34
  redirect_to cms_assets_path
35
35
  end
@@ -0,0 +1,25 @@
1
+ module Qbrick
2
+ module Cms
3
+ class BackendController < ActionController::Base
4
+ respond_to :html
5
+ layout 'qbrick/cms/application'
6
+ before_action :set_content_locale, :authenticate_admin!
7
+
8
+ def set_content_locale
9
+ # this was taken from: https://github.com/screenconcept/hieronymus_shop/pull/218/files
10
+ # and needs further work:
11
+ # TODO: document how to implement in frontend
12
+ # TODO: implement frontend part in our rails_template
13
+ # TODO: add specs
14
+ new_locale = params[:content_locale] || session['backend_locale'] || I18n.locale
15
+ session['backend_locale'] = new_locale.to_s
16
+ return if I18n.locale == new_locale || !I18n.locale_available?(new_locale)
17
+ I18n.locale = new_locale
18
+ end
19
+
20
+ def default_url_options
21
+ { content_locale: I18n.locale }.merge(super)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,11 +1,11 @@
1
- module Kuhsaft
1
+ module Qbrick
2
2
  module Cms
3
- class BricksController < AdminController
3
+ class BricksController < BackendController
4
4
  respond_to :html, :js
5
+ before_action :delete_iamge_cache_params_if_params_has_image, only: :update
5
6
 
6
7
  def create
7
- @brick = params[:brick][:type].constantize.create(brick_params)
8
- @brick.image_size ||= ImageSize.all.first.name.to_s
8
+ create_brick_from_type_param
9
9
 
10
10
  if @brick.valid?
11
11
  respond_with @brick do |format|
@@ -18,18 +18,13 @@ module Kuhsaft
18
18
  end
19
19
 
20
20
  def new
21
- @brick = Kuhsaft::Brick.new(brick_params)
21
+ @brick = Qbrick::Brick.new(brick_params)
22
22
  end
23
23
 
24
24
  def update
25
- @brick = Kuhsaft::Brick.find(params[:id])
25
+ @brick = Qbrick::Brick.find(params[:id])
26
26
  @brick.update_attributes(brick_params)
27
27
 
28
- #
29
- # rails will fall back to html if ajax can't be used
30
- # this is the case with the image brick, because ajax does not
31
- # support image uploads
32
- #
33
28
  respond_with @brick do |format|
34
29
  format.js
35
30
  format.html { redirect_to edit_cms_page_path(@brick.parents.first) }
@@ -37,7 +32,7 @@ module Kuhsaft
37
32
  end
38
33
 
39
34
  def destroy
40
- @brick = Kuhsaft::Brick.find(params[:id])
35
+ @brick = Qbrick::Brick.find(params[:id])
41
36
  @parent_brick = @brick.brick_list
42
37
  @brick.destroy
43
38
  end
@@ -45,7 +40,7 @@ module Kuhsaft
45
40
  def sort
46
41
  if params[:bricks].present?
47
42
  params[:bricks][:ids].split(',').each_with_index do |id, idx|
48
- Kuhsaft::Brick.find(id).update_attribute(:position, idx.to_i + 1)
43
+ Qbrick::Brick.find(id).update_attribute(:position, idx.to_i + 1)
49
44
  end
50
45
  end
51
46
  render nothing: true
@@ -53,6 +48,14 @@ module Kuhsaft
53
48
 
54
49
  private
55
50
 
51
+ def delete_iamge_cache_params_if_params_has_image
52
+ params['brick'].delete('image_cache') if params['brick']['image']
53
+ end
54
+
55
+ def create_brick_from_type_param
56
+ @brick = params[:brick][:type].constantize.create(brick_params)
57
+ end
58
+
56
59
  def brick_params
57
60
  params.require(:brick).permit!
58
61
  end