qbrick 2.5.0.pre → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
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