compartment 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (330) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +24 -0
  4. data/Rakefile +34 -0
  5. data/app/assets/javascripts/compartment/application.js +24 -0
  6. data/app/assets/javascripts/compartment/collections/content_block_types.js.coffee +5 -0
  7. data/app/assets/javascripts/compartment/collections/content_blocks.js.coffee +12 -0
  8. data/app/assets/javascripts/compartment/compartment.js.coffee +12 -0
  9. data/app/assets/javascripts/compartment/modals.js.coffee +49 -0
  10. data/app/assets/javascripts/compartment/models/content_area.js.coffee +12 -0
  11. data/app/assets/javascripts/compartment/models/content_block.js.coffee +1 -0
  12. data/app/assets/javascripts/compartment/models/content_block_type.js.coffee +1 -0
  13. data/app/assets/javascripts/compartment/models/page.js.coffee +36 -0
  14. data/app/assets/javascripts/compartment/routers/default.js.coffee +13 -0
  15. data/app/assets/javascripts/compartment/views/content_area.js.coffee +63 -0
  16. data/app/assets/javascripts/compartment/views/content_block.js.coffee +61 -0
  17. data/app/assets/javascripts/compartment/views/content_span.js.coffee +61 -0
  18. data/app/assets/javascripts/compartment/views/modal.js.coffee +42 -0
  19. data/app/assets/javascripts/compartment/views/modals/new_content_block.js.coffee +20 -0
  20. data/app/assets/javascripts/compartment/views/modals/new_page.js.coffee +3 -0
  21. data/app/assets/javascripts/compartment/views/modals/old_modal.js.coffee +72 -0
  22. data/app/assets/javascripts/compartment/views/page.js.coffee +14 -0
  23. data/app/assets/javascripts/compartment/views/page_toolbar.js.coffee +19 -0
  24. data/app/assets/stylesheets/compartment/admin-styles.sass +6 -0
  25. data/app/assets/stylesheets/compartment/forms.sass +118 -0
  26. data/app/assets/stylesheets/compartment/frontend-styles.sass +64 -0
  27. data/app/assets/stylesheets/compartment/modals.sass +21 -0
  28. data/app/assets/stylesheets/compartment/page_toolbar.sass +51 -0
  29. data/app/assets/templates/compartment/add_content_button.jst.eco +3 -0
  30. data/app/assets/templates/compartment/content_blocks/actions.jst.eco +6 -0
  31. data/app/assets/templates/compartment/content_blocks/edit.jst.ejs +8 -0
  32. data/app/assets/templates/compartment/content_blocks/new.jst.eco +6 -0
  33. data/app/assets/templates/compartment/content_blocks/show.jst.ejs +8 -0
  34. data/app/assets/templates/compartment/modals/new_content_block.jst.eco +12 -0
  35. data/app/assets/templates/compartment/modals/new_page.jst.eco +11 -0
  36. data/app/assets/templates/compartment/modals/sign_up_form.jst.eco +27 -0
  37. data/app/assets/templates/compartment/page_toolbar.jst.eco +6 -0
  38. data/app/controllers/compartment/admin/account_controller.rb +12 -0
  39. data/app/controllers/compartment/admin/application_controller.rb +27 -0
  40. data/app/controllers/compartment/admin/content_block_types_controller.rb +14 -0
  41. data/app/controllers/compartment/admin/content_blocks_controller.rb +68 -0
  42. data/app/controllers/compartment/admin/dashboard_controller.rb +12 -0
  43. data/app/controllers/compartment/admin/pages_controller.rb +98 -0
  44. data/app/controllers/compartment/admin/sessions_controller.rb +34 -0
  45. data/app/controllers/compartment/admin/settings_controller.rb +13 -0
  46. data/app/controllers/compartment/admin/sites_controller.rb +89 -0
  47. data/app/controllers/compartment/admin/users_controller.rb +89 -0
  48. data/app/controllers/compartment/application_controller.rb +16 -0
  49. data/app/controllers/compartment/pages_controller.rb +17 -0
  50. data/app/controllers/compartment/theme_assets_controller.rb +12 -0
  51. data/app/helpers/compartment/application_helper.rb +12 -0
  52. data/app/helpers/compartment/pages_helper.rb +93 -0
  53. data/app/models/compartment/content_block.rb +14 -0
  54. data/app/models/compartment/page.rb +14 -0
  55. data/app/models/compartment/site.rb +14 -0
  56. data/app/models/compartment/theme.rb +41 -0
  57. data/app/models/compartment/user.rb +8 -0
  58. data/app/themes/default/images/background_body.jpg +0 -0
  59. data/app/themes/default/images/background_header.jpg +0 -0
  60. data/app/themes/default/images/favicon.ico +0 -0
  61. data/app/themes/default/images/image.jpg +0 -0
  62. data/app/themes/default/info.rb +4 -0
  63. data/app/themes/default/stylesheets/styles.css +209 -0
  64. data/app/themes/default/templates/error_404.html +1 -0
  65. data/app/themes/default/templates/error_500.html +1 -0
  66. data/app/themes/default/templates/one_column.erb +63 -0
  67. data/app/themes/default/templates/two_column.erb +70 -0
  68. data/app/views/compartment/admin/account/show.html.erb +1 -0
  69. data/app/views/compartment/admin/content_blocks/_form.html.erb +22 -0
  70. data/app/views/compartment/admin/content_blocks/edit.html.erb +6 -0
  71. data/app/views/compartment/admin/content_blocks/index.html.erb +25 -0
  72. data/app/views/compartment/admin/content_blocks/new.html.erb +5 -0
  73. data/app/views/compartment/admin/content_blocks/show.html.erb +15 -0
  74. data/app/views/compartment/admin/dashboard/index.html.erb +1 -0
  75. data/app/views/compartment/admin/pages/_form.html.erb +29 -0
  76. data/app/views/compartment/admin/pages/edit.html.erb +6 -0
  77. data/app/views/compartment/admin/pages/index.html.erb +7 -0
  78. data/app/views/compartment/admin/pages/new.html.erb +4 -0
  79. data/app/views/compartment/admin/pages/show.html.erb +25 -0
  80. data/app/views/compartment/admin/pages/toolbar.html.erb +56 -0
  81. data/app/views/compartment/admin/sessions/new.html.erb +19 -0
  82. data/app/views/compartment/admin/settings/index.html.erb +3 -0
  83. data/app/views/compartment/admin/sites/_form.html.erb +21 -0
  84. data/app/views/compartment/admin/sites/edit.html.erb +6 -0
  85. data/app/views/compartment/admin/sites/index.html.erb +23 -0
  86. data/app/views/compartment/admin/sites/new.html.erb +5 -0
  87. data/app/views/compartment/admin/sites/show.html.erb +10 -0
  88. data/app/views/compartment/admin/users/_form.html.erb +29 -0
  89. data/app/views/compartment/admin/users/edit.html.erb +6 -0
  90. data/app/views/compartment/admin/users/index.html.erb +24 -0
  91. data/app/views/compartment/admin/users/new.html.erb +5 -0
  92. data/app/views/compartment/admin/users/show.html.erb +15 -0
  93. data/app/views/compartment/errors/page_not_found.html.erb +1 -0
  94. data/app/views/compartment/errors/unknown_site.html.erb +1 -0
  95. data/app/views/layouts/compartment/application.html.erb +41 -0
  96. data/app/views/layouts/compartment/authentication.html.erb +45 -0
  97. data/config/cucumber.yml +8 -0
  98. data/config/routes.rb +25 -0
  99. data/db/migrate/20121208061936_create_compartment_sites.rb +9 -0
  100. data/db/migrate/20121208063802_create_compartment_pages.rb +13 -0
  101. data/db/migrate/20121209214222_create_compartment_content_blocks.rb +12 -0
  102. data/db/migrate/20121209223603_create_compartment_themes.rb +11 -0
  103. data/db/migrate/20121214060141_create_compartment_users.rb +10 -0
  104. data/lib/compartment.rb +13 -0
  105. data/lib/compartment/config.rb +20 -0
  106. data/lib/compartment/content_block_dsl.rb +25 -0
  107. data/lib/compartment/engine.rb +21 -0
  108. data/lib/compartment/version.rb +3 -0
  109. data/lib/tasks/compartment_tasks.rake +21 -0
  110. data/spec/controllers/compartment/admin/content_blocks_controller_spec_autogenerated.rb +164 -0
  111. data/spec/dummy/README.rdoc +261 -0
  112. data/spec/dummy/Rakefile +7 -0
  113. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  114. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  115. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  116. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  117. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  118. data/spec/dummy/config.ru +4 -0
  119. data/spec/dummy/config/application.rb +59 -0
  120. data/spec/dummy/config/boot.rb +10 -0
  121. data/spec/dummy/config/database.yml +25 -0
  122. data/spec/dummy/config/environment.rb +5 -0
  123. data/spec/dummy/config/environments/development.rb +37 -0
  124. data/spec/dummy/config/environments/production.rb +67 -0
  125. data/spec/dummy/config/environments/test.rb +37 -0
  126. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  127. data/spec/dummy/config/initializers/inflections.rb +15 -0
  128. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  129. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  130. data/spec/dummy/config/initializers/session_store.rb +8 -0
  131. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  132. data/spec/dummy/config/locales/en.yml +5 -0
  133. data/spec/dummy/config/routes.rb +4 -0
  134. data/spec/dummy/db/development.sqlite3 +0 -0
  135. data/spec/dummy/db/schema.rb +60 -0
  136. data/spec/dummy/db/test.sqlite3 +0 -0
  137. data/spec/dummy/lib/tasks/cucumber.rake +65 -0
  138. data/spec/dummy/log/development.log +4127 -0
  139. data/spec/dummy/log/test.log +93426 -0
  140. data/spec/dummy/public/404.html +26 -0
  141. data/spec/dummy/public/422.html +26 -0
  142. data/spec/dummy/public/500.html +25 -0
  143. data/spec/dummy/public/favicon.ico +0 -0
  144. data/spec/dummy/script/rails +6 -0
  145. data/spec/dummy/tmp/cache/assets/C3E/240/sprockets%2F055c2b9605c134d2066c606674f01d05 +0 -0
  146. data/spec/dummy/tmp/cache/assets/C47/120/sprockets%2F185f0b2e6c231347125613b2407ff686 +0 -0
  147. data/spec/dummy/tmp/cache/assets/C50/DA0/sprockets%2F456eeb2d37782046ba6c030836643476 +0 -0
  148. data/spec/dummy/tmp/cache/assets/C52/1C0/sprockets%2Fa78612d84335327b0983c4dc225d1668 +0 -0
  149. data/spec/dummy/tmp/cache/assets/C76/0F0/sprockets%2F75046a33c909e2b406a3a5929a633a09 +0 -0
  150. data/spec/dummy/tmp/cache/assets/C77/980/sprockets%2F360cfd80942c2190cb67268b1630a484 +0 -0
  151. data/spec/dummy/tmp/cache/assets/C8E/6D0/sprockets%2F9e0fc4406af59e36f7d9670453801932 +0 -0
  152. data/spec/dummy/tmp/cache/assets/C8F/840/sprockets%2F5e5130c2ae14217f1530b406b32a832f +0 -0
  153. data/spec/dummy/tmp/cache/assets/C9D/370/sprockets%2F6191b8cb150830acc70b897012d4008e +0 -0
  154. data/spec/dummy/tmp/cache/assets/CA0/C60/sprockets%2Fa16082a8613c43441e0d26b0945aec95 +0 -0
  155. data/spec/dummy/tmp/cache/assets/CA1/3D0/sprockets%2Fb60224c86974950f832ac26115bbec00 +0 -0
  156. data/spec/dummy/tmp/cache/assets/CA1/A40/sprockets%2F446b1711d42cc93f65a4a7d22564b035 +0 -0
  157. data/spec/dummy/tmp/cache/assets/CA7/750/sprockets%2F412bb188276e8969c51469a0ab010a8a +0 -0
  158. data/spec/dummy/tmp/cache/assets/CA8/250/sprockets%2F5721e7a044aa7244f3f42139ed26385b +0 -0
  159. data/spec/dummy/tmp/cache/assets/CA9/750/sprockets%2F81a628a4623319f364f30e31e9e3eb22 +0 -0
  160. data/spec/dummy/tmp/cache/assets/CAC/7A0/sprockets%2Fd1db034053f1908095360ef27668c7da +0 -0
  161. data/spec/dummy/tmp/cache/assets/CAF/5C0/sprockets%2F72933125931d191df741f01fc5ff2f26 +0 -0
  162. data/spec/dummy/tmp/cache/assets/CB0/930/sprockets%2F8272ad6d0b079362b2491ce3396a2c97 +0 -0
  163. data/spec/dummy/tmp/cache/assets/CB1/230/sprockets%2Fbb1808e1d9891094168331ff2fa29c23 +0 -0
  164. data/spec/dummy/tmp/cache/assets/CB4/FB0/sprockets%2F1f909bc406bf958072ad795d5303f235 +0 -0
  165. data/spec/dummy/tmp/cache/assets/CB6/730/sprockets%2F19ef44fa001bbda37824909746238f68 +0 -0
  166. data/spec/dummy/tmp/cache/assets/CBC/170/sprockets%2F895158f320da274e839a4978bb3a25f4 +0 -0
  167. data/spec/dummy/tmp/cache/assets/CBD/160/sprockets%2Fe56dd38d8c51e8095620f5d67103909d +0 -0
  168. data/spec/dummy/tmp/cache/assets/CC2/AD0/sprockets%2F94439c33d1a5c557b89cb739e08e1991 +0 -0
  169. data/spec/dummy/tmp/cache/assets/CCB/850/sprockets%2F02e05b258d7c735f26e633b010c920cb +0 -0
  170. data/spec/dummy/tmp/cache/assets/CD0/500/sprockets%2Fd27696561a9ec3799b76d4af927338e5 +0 -0
  171. data/spec/dummy/tmp/cache/assets/CD0/F70/sprockets%2Fb770d8010fa12ecf83d2a171480763d4 +0 -0
  172. data/spec/dummy/tmp/cache/assets/CD6/980/sprockets%2F78671dda395c821a632ca0871043abf5 +0 -0
  173. data/spec/dummy/tmp/cache/assets/CD7/7C0/sprockets%2F04f40780f76ba40666c06bf4d1273ef1 +0 -0
  174. data/spec/dummy/tmp/cache/assets/CD7/8B0/sprockets%2F4a7030aa11b628c26653f58da193f84f +0 -0
  175. data/spec/dummy/tmp/cache/assets/CD7/E40/sprockets%2F244cc083a125c752f459d8ddfc510218 +0 -0
  176. data/spec/dummy/tmp/cache/assets/CD9/A90/sprockets%2Fdb4d98730929f78269f493773b5be8e8 +0 -0
  177. data/spec/dummy/tmp/cache/assets/CDE/0E0/sprockets%2F4b5a7685116047b5ece80c613a4eb866 +0 -0
  178. data/spec/dummy/tmp/cache/assets/CE2/F80/sprockets%2F3f4be29b1866cb0b0e2dc56536934189 +0 -0
  179. data/spec/dummy/tmp/cache/assets/CE3/B50/sprockets%2F10e4d9543759ae40f8249c45d34a31ff +0 -0
  180. data/spec/dummy/tmp/cache/assets/CE5/2A0/sprockets%2F38ab60b12edd0388b87513096a7b789e +0 -0
  181. data/spec/dummy/tmp/cache/assets/CE8/330/sprockets%2F6f9128544f46a17c60027c35fce4ef75 +0 -0
  182. data/spec/dummy/tmp/cache/assets/CEB/200/sprockets%2F3007de86523e820696bcaa986ef2a785 +0 -0
  183. data/spec/dummy/tmp/cache/assets/CEB/4E0/sprockets%2Fffb7c224a9178c6154dea70d94089627 +0 -0
  184. data/spec/dummy/tmp/cache/assets/CEF/A00/sprockets%2F42449d8a1940eba9130a32d02ab2cf20 +0 -0
  185. data/spec/dummy/tmp/cache/assets/CF0/C20/sprockets%2F83a42387a965774facbd717770f6f2a7 +0 -0
  186. data/spec/dummy/tmp/cache/assets/CF5/060/sprockets%2F2986d6ece9249d6f3f9ac694540a2372 +0 -0
  187. data/spec/dummy/tmp/cache/assets/CF9/F20/sprockets%2F986fdff75a775c678471053713d8c1ed +0 -0
  188. data/spec/dummy/tmp/cache/assets/CFC/FF0/sprockets%2F47850d338885758cbc4bd4e7b9328fe8 +0 -0
  189. data/spec/dummy/tmp/cache/assets/D05/D70/sprockets%2F7007cf768de19464db05ae106ca2604d +0 -0
  190. data/spec/dummy/tmp/cache/assets/D06/590/sprockets%2Fc045182e2f0f3816f76aeb421a167ee3 +0 -0
  191. data/spec/dummy/tmp/cache/assets/D09/D40/sprockets%2F1bcb641850b964f38417f5cc91e00c7a +0 -0
  192. data/spec/dummy/tmp/cache/assets/D0B/7D0/sprockets%2Ffa7e2864007ff1f93ab619b61be12705 +0 -0
  193. data/spec/dummy/tmp/cache/assets/D0C/2B0/sprockets%2Fc01d05da2c09811f6ebb6457a579f393 +0 -0
  194. data/spec/dummy/tmp/cache/assets/D0F/0A0/sprockets%2F7530089ddbee51165c91d42983ea5cc1 +0 -0
  195. data/spec/dummy/tmp/cache/assets/D10/190/sprockets%2F17a938bb93cdc2e9a4a71383f824811c +0 -0
  196. data/spec/dummy/tmp/cache/assets/D13/490/sprockets%2Ffaa1ae5ba596394a7e6f21293362884c +0 -0
  197. data/spec/dummy/tmp/cache/assets/D18/4F0/sprockets%2F0dd2285c0874040e463e76b49fc9ee6d +0 -0
  198. data/spec/dummy/tmp/cache/assets/D1B/080/sprockets%2F8289214205c22b86fd90e7dde88e70dc +0 -0
  199. data/spec/dummy/tmp/cache/assets/D20/960/sprockets%2F9d81c99fa4b33c3e2f6425593bf6e590 +0 -0
  200. data/spec/dummy/tmp/cache/assets/D2B/DE0/sprockets%2F80480edba05dbf2a035b05454d57e34c +0 -0
  201. data/spec/dummy/tmp/cache/assets/D2C/210/sprockets%2F8f316259703dacdd21f83ad05f0ca132 +0 -0
  202. data/spec/dummy/tmp/cache/assets/D2C/780/sprockets%2Ffe4d215714b72c23b8dd8a5f0020ad09 +0 -0
  203. data/spec/dummy/tmp/cache/assets/D2F/180/sprockets%2Fbf3b7ed377172b501728a446a107bbcc +0 -0
  204. data/spec/dummy/tmp/cache/assets/D37/EC0/sprockets%2Fea6cc6410ad20a1c67445f8e860fe444 +0 -0
  205. data/spec/dummy/tmp/cache/assets/D38/6D0/sprockets%2F7cc91ca26644e7b06438b0bf8e405d0d +0 -0
  206. data/spec/dummy/tmp/cache/assets/D3B/780/sprockets%2F1e0cf992502bd912aa9a191ec778cc44 +0 -0
  207. data/spec/dummy/tmp/cache/assets/D3B/930/sprockets%2F0e770ba1bd268256242eaea8c9718e5c +0 -0
  208. data/spec/dummy/tmp/cache/assets/D3D/D10/sprockets%2F953c3b472be2ede368471137bdc90ae4 +0 -0
  209. data/spec/dummy/tmp/cache/assets/D3E/500/sprockets%2Fe60a09899ac6c983ddea50151d2ea273 +0 -0
  210. data/spec/dummy/tmp/cache/assets/D3F/340/sprockets%2Fef74a174d01b6808e4bc5a2ef87721e4 +0 -0
  211. data/spec/dummy/tmp/cache/assets/D41/930/sprockets%2Fb3d4b6333baf5e867f2b361c5b2c7498 +0 -0
  212. data/spec/dummy/tmp/cache/assets/D45/A40/sprockets%2Fc60487581ef1accbcc895418c71f2e72 +0 -0
  213. data/spec/dummy/tmp/cache/assets/D46/090/sprockets%2F0ea2b9f32f6719be92596d7f6033b2ec +0 -0
  214. data/spec/dummy/tmp/cache/assets/D48/750/sprockets%2F76db9aaecd1148827ed661f924d6f251 +0 -0
  215. data/spec/dummy/tmp/cache/assets/D4B/990/sprockets%2Fc8702905706ece4f927eb4ae267bf7d4 +0 -0
  216. data/spec/dummy/tmp/cache/assets/D51/720/sprockets%2F1a0601ba3458aa96131495dc4aca0fbe +0 -0
  217. data/spec/dummy/tmp/cache/assets/D52/EF0/sprockets%2Ffd5f726a8a0df8287448fa948db1b817 +0 -0
  218. data/spec/dummy/tmp/cache/assets/D57/4A0/sprockets%2F2f425bc85c002e370adbd8c51c8220eb +0 -0
  219. data/spec/dummy/tmp/cache/assets/D58/940/sprockets%2F1c3b2ff81dc2a0482d34112f9fb12d2e +0 -0
  220. data/spec/dummy/tmp/cache/assets/D5B/7F0/sprockets%2F523ea79ecf40a31bd0b6ddb56e334123 +0 -0
  221. data/spec/dummy/tmp/cache/assets/D5F/210/sprockets%2F41a7b5fa423ac505c66add2b98942c0b +0 -0
  222. data/spec/dummy/tmp/cache/assets/D62/8F0/sprockets%2F5b6411bf7a3d055f2f07a8bf457a2bd3 +0 -0
  223. data/spec/dummy/tmp/cache/assets/D63/D20/sprockets%2F008f511a7971c5311f1b8d4fddaad18f +0 -0
  224. data/spec/dummy/tmp/cache/assets/D65/050/sprockets%2Faaee3ad426e876a0f2219b790191b2ed +0 -0
  225. data/spec/dummy/tmp/cache/assets/D65/3A0/sprockets%2Fc1ec78a1c30ff75157afa34014f3ef63 +0 -0
  226. data/spec/dummy/tmp/cache/assets/D69/6A0/sprockets%2F1bf617ff04da082c0eb39b9445d8d3a5 +0 -0
  227. data/spec/dummy/tmp/cache/assets/D6B/0D0/sprockets%2Fea8a529c947d286a13e5eefe16b12b12 +0 -0
  228. data/spec/dummy/tmp/cache/assets/D6D/1F0/sprockets%2F11595043cc2f4c29d2fb5cea595e1b9e +0 -0
  229. data/spec/dummy/tmp/cache/assets/D70/970/sprockets%2Fb21f42ff3dec1446ff32e8f260b18c78 +0 -0
  230. data/spec/dummy/tmp/cache/assets/D71/FB0/sprockets%2F68433b17ff4eaf61f5048ee06e8cb20e +0 -0
  231. data/spec/dummy/tmp/cache/assets/D73/060/sprockets%2Fd1df80c17350a4ca8daf86c7599f41f1 +0 -0
  232. data/spec/dummy/tmp/cache/assets/D74/050/sprockets%2F29efd25b4cdd2d7607b0d477705b8ec6 +0 -0
  233. data/spec/dummy/tmp/cache/assets/D78/DC0/sprockets%2F3f1950b87fc75fb6f1dbb672e3ed5327 +0 -0
  234. data/spec/dummy/tmp/cache/assets/D79/710/sprockets%2F0b98cf262e57ae187a6192f29ccad49d +0 -0
  235. data/spec/dummy/tmp/cache/assets/D7A/5F0/sprockets%2F69fbbb1724da70dc767193677df3c4de +0 -0
  236. data/spec/dummy/tmp/cache/assets/D7B/7B0/sprockets%2F9df3019edd7238ea05c0d86ae899f3b3 +0 -0
  237. data/spec/dummy/tmp/cache/assets/D7E/380/sprockets%2F256295ea2de1a85d8aefa6a797c69c90 +0 -0
  238. data/spec/dummy/tmp/cache/assets/D81/D40/sprockets%2Ff6ffb740a883607444fcc8e9e51c8dc4 +0 -0
  239. data/spec/dummy/tmp/cache/assets/D82/120/sprockets%2Fcfa458d7fd9975793198ae714e02ecaa +0 -0
  240. data/spec/dummy/tmp/cache/assets/D86/A60/sprockets%2Fc38e7ef3fd858357b7fc3c2fb8a91564 +0 -0
  241. data/spec/dummy/tmp/cache/assets/D89/DA0/sprockets%2F8d18248a443fea94a88079efa99bfaf7 +0 -0
  242. data/spec/dummy/tmp/cache/assets/D8C/770/sprockets%2F7b0fa3005aecf24c6e23af9c5ad02827 +0 -0
  243. data/spec/dummy/tmp/cache/assets/D93/3D0/sprockets%2Fa5bb4b51d7b5cf47a9d85ccd00904f12 +0 -0
  244. data/spec/dummy/tmp/cache/assets/D94/420/sprockets%2F2e54f2c67f40ae3b28fdb90c215d3d3c +0 -0
  245. data/spec/dummy/tmp/cache/assets/D97/890/sprockets%2Fea52bb8869ad0d04f5a91ecabd722239 +0 -0
  246. data/spec/dummy/tmp/cache/assets/D98/770/sprockets%2Fab39cb17cb0c7ddc46a7e083741d7c28 +0 -0
  247. data/spec/dummy/tmp/cache/assets/D9A/910/sprockets%2F52be75ddde7b2ffa06af4fd068008091 +0 -0
  248. data/spec/dummy/tmp/cache/assets/D9E/8D0/sprockets%2F6183b396dba27e5bb64eaa8dce09740e +0 -0
  249. data/spec/dummy/tmp/cache/assets/DA6/EC0/sprockets%2F2cd5612affe9038f43fb59fa525ae39e +0 -0
  250. data/spec/dummy/tmp/cache/assets/DA9/610/sprockets%2F070519c5b7c9e2a05ffb7a82e9c69cdf +0 -0
  251. data/spec/dummy/tmp/cache/assets/DAF/0A0/sprockets%2F81a6c69e615b9f6c0a7870fde9e4ae7a +0 -0
  252. data/spec/dummy/tmp/cache/assets/DB4/9A0/sprockets%2F152cabc332eafced3e25d12e33a4435e +0 -0
  253. data/spec/dummy/tmp/cache/assets/DC6/2D0/sprockets%2F7f232a3b35c509bdb0cdd0eee98e3c36 +0 -0
  254. data/spec/dummy/tmp/cache/assets/DC9/830/sprockets%2Fff60d20f4db56b13e6bad309b96c08fd +0 -0
  255. data/spec/dummy/tmp/cache/assets/DCF/A70/sprockets%2F5cfadbd4a6878da4c19eb5451225e3ef +0 -0
  256. data/spec/dummy/tmp/cache/assets/DD3/1E0/sprockets%2Fb2dbcbff454c034f8ecb7528b908c8a8 +0 -0
  257. data/spec/dummy/tmp/cache/assets/DD3/9E0/sprockets%2F99fee80ec4d119a6cc5a3d90d1bb7d92 +0 -0
  258. data/spec/dummy/tmp/cache/assets/DD5/F20/sprockets%2F9bcb865783d19929b0eace77ab1ac4ec +0 -0
  259. data/spec/dummy/tmp/cache/assets/DD9/D20/sprockets%2F774bf932abf9fed1f8d1de4a68b931e0 +0 -0
  260. data/spec/dummy/tmp/cache/assets/DDA/830/sprockets%2Ff565a73a906a56c2e19ce6dfbf5e61ff +0 -0
  261. data/spec/dummy/tmp/cache/assets/DDA/F10/sprockets%2Fd8b845f49355b153aedcb6d9a8fc7ca5 +0 -0
  262. data/spec/dummy/tmp/cache/assets/DDC/5D0/sprockets%2F364253d7cbaf3ad0350ad0cb6a5cbdc0 +0 -0
  263. data/spec/dummy/tmp/cache/assets/DE4/E20/sprockets%2F2fdc2c653d97cb4f40fed7f45d879da9 +0 -0
  264. data/spec/dummy/tmp/cache/assets/DF2/880/sprockets%2Fc906bbb19c4a06daf594ab3e286bc3bd +0 -0
  265. data/spec/dummy/tmp/cache/assets/DF4/0F0/sprockets%2F3421cdee43ff1e0d6cfa27eafa7e2516 +0 -0
  266. data/spec/dummy/tmp/cache/assets/DF6/410/sprockets%2Fbcdfb6d07d79490cbfb6801aa63cc5c2 +0 -0
  267. data/spec/dummy/tmp/cache/assets/DFA/2D0/sprockets%2F240cd9ec435b5fa1c59ff1b1a79dae8a +0 -0
  268. data/spec/dummy/tmp/cache/assets/E02/4E0/sprockets%2Fbfb8eaedf0b359e72db268fe2c4175c4 +0 -0
  269. data/spec/dummy/tmp/cache/assets/E07/F90/sprockets%2F6fbb6d5990372ef85acc84beceac4b73 +0 -0
  270. data/spec/dummy/tmp/cache/assets/E0D/470/sprockets%2Faef35e2e6837a1ffa4d5898acc5a8fe4 +0 -0
  271. data/spec/dummy/tmp/cache/assets/E0F/790/sprockets%2F2f4eb4bda5c5ca56d3340caa5aa82c0b +0 -0
  272. data/spec/dummy/tmp/cache/assets/E40/950/sprockets%2F7ff1e1ede4ad5d7ef5094b0efd8896cc +0 -0
  273. data/spec/dummy/tmp/cache/assets/E7B/720/sprockets%2Fbbeda91214d7ec5bd4c2fdb5b5eead02 +0 -0
  274. data/spec/dummy/tmp/cache/assets/E98/680/sprockets%2F42fd3fbf3bc7ecafb09f7cff81088ded +0 -0
  275. data/spec/dummy/tmp/cache/assets/EC6/860/sprockets%2F83df86ffb45cdaaea9ba6efbca34d7c9 +0 -0
  276. data/spec/dummy/tmp/cache/assets/EEC/1E0/sprockets%2Fbfa1aff0059cf17ccf5f27afb6ffbfeb +0 -0
  277. data/spec/dummy/tmp/cache/sass/301ce5a14d4f5bb39e22a56c42ad3d69df129f35/bootstrap.scssc +0 -0
  278. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_accordion.scssc +0 -0
  279. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_alerts.scssc +0 -0
  280. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_breadcrumbs.scssc +0 -0
  281. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_button-groups.scssc +0 -0
  282. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_buttons.scssc +0 -0
  283. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_carousel.scssc +0 -0
  284. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_close.scssc +0 -0
  285. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_code.scssc +0 -0
  286. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_component-animations.scssc +0 -0
  287. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_dropdowns.scssc +0 -0
  288. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_forms.scssc +0 -0
  289. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_grid.scssc +0 -0
  290. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_hero-unit.scssc +0 -0
  291. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_labels-badges.scssc +0 -0
  292. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_layouts.scssc +0 -0
  293. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_media.scssc +0 -0
  294. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_mixins.scssc +0 -0
  295. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_modals.scssc +0 -0
  296. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_navbar.scssc +0 -0
  297. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_navs.scssc +0 -0
  298. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_pager.scssc +0 -0
  299. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_pagination.scssc +0 -0
  300. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_popovers.scssc +0 -0
  301. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_progress-bars.scssc +0 -0
  302. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_reset.scssc +0 -0
  303. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_scaffolding.scssc +0 -0
  304. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_sprites.scssc +0 -0
  305. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_tables.scssc +0 -0
  306. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_thumbnails.scssc +0 -0
  307. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_tooltip.scssc +0 -0
  308. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_type.scssc +0 -0
  309. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_utilities.scssc +0 -0
  310. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_variables.scssc +0 -0
  311. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/_wells.scssc +0 -0
  312. data/spec/dummy/tmp/cache/sass/adcfc93268f0014d6a7edb19347218e29709360e/bootstrap.scssc +0 -0
  313. data/spec/dummy/tmp/cache/sass/e09d521ae3b813be62b26216d68685f8f049a496/admin-styles.sassc +0 -0
  314. data/spec/dummy/tmp/cache/sass/e09d521ae3b813be62b26216d68685f8f049a496/frontend-styles.sassc +0 -0
  315. data/spec/factories/compartment_admin_content_blocks.rb +8 -0
  316. data/spec/factories/content_block.rb +8 -0
  317. data/spec/factories/page.rb +16 -0
  318. data/spec/factories/site.rb +13 -0
  319. data/spec/factories/theme.rb +5 -0
  320. data/spec/factories/user.rb +6 -0
  321. data/spec/helpers/pages_helper_spec.rb +126 -0
  322. data/spec/lib/compartment/config_spec.rb +11 -0
  323. data/spec/lib/compartment_spec.rb +10 -0
  324. data/spec/models/compartment/content_block_spec.rb +12 -0
  325. data/spec/models/compartment/page_spec.rb +39 -0
  326. data/spec/models/compartment/site_spec.rb +8 -0
  327. data/spec/models/compartment/theme_spec.rb +53 -0
  328. data/spec/models/compartment/user_spec.rb +6 -0
  329. data/spec/spec_helper.rb +50 -0
  330. metadata +703 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 69eb0f373d06457fc5509e72219fdac6a3b9cd7c
4
+ data.tar.gz: 90dc3a0144d68200c5ab8386c4b9379679f32062
5
+ SHA512:
6
+ metadata.gz: 254a5384e24befd88a25597ae34fd35aa67ad4d8bf9563348da1cd917d2274963b812a42f8de6a1df3257b00b63fa1af6232bd16ac3fd9bdc1c6087abd80cbb5
7
+ data.tar.gz: a2189dff310497fe3970de205d390825cfe1e4feeb1c5eeeedaf4f3a46f7752e5e0ad68b2fe8f9c28d539bef7909ffe6557e05a806f5552eb96a4fd825eab9ee
@@ -0,0 +1,20 @@
1
+ Copyright 2012 Andrew Havens
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,24 @@
1
+ <!--
2
+ # Compartment CMS
3
+
4
+ ## Installation
5
+
6
+ ### Option 1: As a standalone application (recommended)
7
+
8
+ 1. Install the Compartment CMS gem: `gem install compartment`
9
+ 2. Create a new application: `compartment new my_site`
10
+ 3. Change into the new directory and start the application:
11
+ cd my_site
12
+ bundle exec rackup
13
+ 4. Open your browser to `localhost:3000`
14
+ 5. Complete the setup wizard to create your first site.
15
+
16
+ ### Option 2: As a Rails Engine (for existing applications)
17
+
18
+ 1. Add `gem "compartment"` to your Gemfile and `bundle`
19
+ 2. Mount the engine in your routes.rb: `mount Compartment::Engine => "/"`
20
+ 3. Install the migrations: `bundle exec rake compartment:install:migrations`
21
+ 4. Run the migrations: `bundle exec rake db:migrate`
22
+ 4. Start the `rails server` and open the application in your browser.
23
+ 5. Complete the setup wizard to create your first site.
24
+ -->
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ # begin
8
+ # require 'rdoc/task'
9
+ # rescue LoadError
10
+ # require 'rdoc/rdoc'
11
+ # require 'rake/rdoctask'
12
+ # RDoc::Task = Rake::RDocTask
13
+ # end
14
+
15
+ # RDoc::Task.new(:rdoc) do |rdoc|
16
+ # rdoc.rdoc_dir = 'rdoc'
17
+ # rdoc.title = 'Compartment'
18
+ # rdoc.options << '--line-numbers'
19
+ # rdoc.rdoc_files.include('README.rdoc')
20
+ # rdoc.rdoc_files.include('lib/**/*.rb')
21
+ # end
22
+
23
+ Bundler::GemHelper.install_tasks
24
+
25
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
26
+ load 'rails/tasks/engine.rake'
27
+
28
+ # Dir[File.join(File.dirname(__FILE__), 'tasks/**/*.rake')].each {|f| load f }
29
+
30
+ require 'rspec/core/rake_task'
31
+ RSpec::Core::RakeTask.new(:spec => 'app:db:test:prepare')
32
+
33
+ task :features => 'app:cucumber'
34
+ task :default => [:spec, :features]
@@ -0,0 +1,24 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // the compiled file.
9
+ //
10
+ // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11
+ // GO AFTER THE REQUIRES BELOW.
12
+ //
13
+ //= require jquery
14
+ //= require jquery_ujs
15
+ //= require underscore
16
+ //= require backbone
17
+ //= require bootstrap
18
+ //= require ./compartment
19
+ //= require_tree ../../templates/compartment
20
+ //= require_tree ./models
21
+ //= require_tree ./collections
22
+ //= require_tree ./views
23
+ //= require_tree ./routers
24
+ //= require_tree .
@@ -0,0 +1,5 @@
1
+ class Compartment.Collections.ContentBlockTypes extends Backbone.Collection
2
+
3
+ url: '/admin/content_block_types'
4
+
5
+ model: Compartment.Models.ContentBlockType
@@ -0,0 +1,12 @@
1
+ class Compartment.Collections.ContentBlocks extends Backbone.Collection
2
+
3
+ model: Compartment.Models.ContentBlock
4
+
5
+ # constructor: (data, options)->
6
+ # @page = options.page
7
+ # super(data, options)
8
+
9
+ url: ->
10
+ console.log @page
11
+ # @page.url() + '/content_blocks'
12
+ 'hello'
@@ -0,0 +1,12 @@
1
+ window.Compartment =
2
+ Models: {}
3
+ Collections: {}
4
+ Views: {}
5
+ Routers: {}
6
+ Data: {}
7
+ initialize: ->
8
+ new Compartment.Routers.Default
9
+ Backbone.history.start(pushState: true)
10
+
11
+ $(document).ready ->
12
+ Compartment.initialize()
@@ -0,0 +1,49 @@
1
+ # Based on Lean Modal by FinelySliced: http://leanmodal.finelysliced.com.au/
2
+
3
+ # $ = jQuery
4
+
5
+ # $.fn.extend
6
+
7
+ # compartmentModal: (options)->
8
+
9
+ # defaults =
10
+ # top: 100
11
+ # overlay: 0.5
12
+ # closeButton: null
13
+
14
+ # options = $.extend defaults, options
15
+
16
+ # overlay = $('<div id="compartment_modal_overlay"></div>')
17
+ # $('body').append(overlay)
18
+
19
+ # close_modal = (modal_id)->
20
+ # $("#compartment_modal_overlay").fadeOut(200)
21
+ # $(modal_id).css(display: 'none')
22
+
23
+ # return @each ->
24
+
25
+ # o = options
26
+ # $(@).click (e)->
27
+
28
+ # modal_id = $(@).attr('href')
29
+
30
+ # $('#compartment_modal_overlay').click -> close_modal(modal_id)
31
+ # $(o.closeButton).click -> close_modal(modal_id)
32
+
33
+ # modal_height = $(modal_id).outerHeight()
34
+ # modal_width = $(modal_id).outerWidth()
35
+
36
+ # $('#compartment_modal_overlay').css(display: 'block', opacity: 0)
37
+ # $('#compartment_modal_overlay').fadeTo 200, o.overlay
38
+
39
+ # $(modal_id).css
40
+ # display: 'block'
41
+ # position: 'fixed'
42
+ # opacity: 0
43
+ # zIndex: 11000
44
+ # left: 50 + '%'
45
+ # marginLeft: -(modal_width/2) + "px"
46
+ # top: o.top + "px"
47
+
48
+ # $(modal_id).fadeTo 200, 1
49
+ # e.preventDefault()
@@ -0,0 +1,12 @@
1
+ # ContentAreas are not persisted on the server, so this model is only used on the client side.
2
+ class Compartment.Models.ContentArea extends Backbone.Model
3
+ # urlRoot: '/admin/content_area'
4
+
5
+ constructor: (data, options)->
6
+ @content_blocks = new Compartment.Collections.ContentBlocks
7
+ super(data, options)
8
+
9
+ parse: (data, options)->
10
+ @content_blocks.reset(data.content_blocks)
11
+ delete data.content_blocks
12
+ data
@@ -0,0 +1 @@
1
+ class Compartment.Models.ContentBlock extends Backbone.Model
@@ -0,0 +1 @@
1
+ class Compartment.Models.ContentBlockType extends Backbone.Model
@@ -0,0 +1,36 @@
1
+ class Compartment.Models.Page extends Backbone.Model
2
+
3
+ urlRoot: '/admin/pages'
4
+
5
+ # defaults:
6
+ # content_blocks: []
7
+
8
+ constructor: (data, options)->
9
+ @content_blocks = new Compartment.Collections.ContentBlocks#([], page: @)
10
+ super(data, options)
11
+
12
+ parse: (data, options)->
13
+ @content_blocks.reset(data.content_blocks)
14
+ delete data.content_blocks
15
+ data
16
+
17
+ newContentArea: (data)->
18
+ data.page_id = @get('id')
19
+ data.content_blocks = @content_blocks.where(content_area: data.name)
20
+ new Compartment.Models.ContentArea(data, parse: true)
21
+
22
+ initialize: ->
23
+ @content_blocks.page = @
24
+ # console.log 'initialize page', @
25
+ # @content_blocks = new Compartment.Collections.ContentBlocks
26
+ # @content_blocks = new Compartment.Collections.ContentBlocks(@get('content_blocks'))
27
+
28
+ # Content Areas are created dynamically based on the names given in the theme template
29
+ # content_area_by_name: (name)->
30
+ # @content_blocks.page = @
31
+ # content_area = new Compartment.Models.ContentArea
32
+ # name: name
33
+ # # page_id: @get('id')
34
+ # page: @
35
+ # content_blocks: @content_blocks
36
+ # content_area
@@ -0,0 +1,13 @@
1
+ class Compartment.Routers.Default extends Backbone.Router
2
+ routes:
3
+ 'admin/*path': 'admin'
4
+ '*path': 'page'
5
+
6
+ admin: (path) ->
7
+ # nothing yet
8
+
9
+ page: (path) ->
10
+ data = Compartment.Data.current_page
11
+ page = new Compartment.Models.Page(data, parse: true)
12
+ view = new Compartment.Views.Page(model: page)
13
+ view.render()
@@ -0,0 +1,63 @@
1
+ class Compartment.Views.ContentArea extends Backbone.View
2
+
3
+ events:
4
+ 'click .compartment_content_area_add_content_button': 'displayNewContentBlockModal'
5
+ 'mouseenter .compartment_content_block_placeholder': 'showPlaceholderActions'
6
+ 'mouseleave .compartment_content_block_placeholder': 'hidePlaceholderActions'
7
+
8
+ initialize: (options)->
9
+ @content_blocks = @model.content_blocks
10
+ @listenTo @content_blocks, 'add', @addOne
11
+ @prepareNewContentBlockModal()
12
+ @$placeholder = @$el.find('.compartment_content_block_placeholder')
13
+
14
+ render: ->
15
+ @content_blocks.each(@addAll, @)
16
+ if @$placeholder.length
17
+ @$placeholder.append JST['compartment/content_blocks/actions']()
18
+ if @model.get('limit') != 1 or (@content_blocks.length == 0 and @$placeholder.length == 0)
19
+ @$el.append JST['compartment/add_content_button']()
20
+ @
21
+
22
+ addAll: (content_block) ->
23
+ view = new Compartment.Views.ContentBlock(model: content_block)
24
+ @$el.append view.render().el
25
+
26
+ addOne: (content_block) ->
27
+ view = new Compartment.Views.ContentBlock(model: content_block)
28
+ @$el.find('.compartment_content_area_add_content_button').before view.render().el
29
+ view.edit()
30
+
31
+ prepareNewContentBlockModal: ->
32
+ content_block_types = new Compartment.Collections.ContentBlockTypes(Compartment.Data.content_block_types)
33
+ @modal = new Compartment.Views.NewContentBlockModal(content_block_types: content_block_types)
34
+ @listenTo @modal, 'selected', @createNewContentBlock
35
+ @modal.render()
36
+
37
+ # correctPlaceholderStyles: ->
38
+ # $first_child = @$placeholder.find('> *')
39
+ # @$placeholder.css
40
+ # width: $first_child.width()
41
+ # height: $first_child.height()
42
+
43
+ # for content areas that only allow one content block
44
+ hidePlaceholderActions: -> @$placeholder.find('.actions').hide()
45
+ showPlaceholderActions: ->
46
+ $first_child = @$placeholder.find('> *')
47
+ @$placeholder.find('.actions').css(
48
+ width: $first_child.outerWidth()
49
+ height: $first_child.outerHeight()
50
+ # top: $first_child.css('top')
51
+ top: $first_child[0].offsetTop
52
+ # right: $first_child.css('right')
53
+ # bottom: $first_child.css('bottom')
54
+ # left: $first_child.css('left')
55
+ left: $first_child[0].offsetLeft
56
+ ).show()
57
+
58
+ displayNewContentBlockModal: (event)->
59
+ event.preventDefault()
60
+ @modal.display()
61
+
62
+ createNewContentBlock: (type)->
63
+ @content_blocks.add(type: type, content_area: @model.get('name'))
@@ -0,0 +1,61 @@
1
+ class Compartment.Views.ContentBlock extends Backbone.View
2
+
3
+ className: 'compartment_content_block'
4
+
5
+ showTemplate: JST['compartment/content_blocks/show']
6
+ editTemplate: JST['compartment/content_blocks/edit']
7
+
8
+ render: ->
9
+ @render_show()
10
+ @
11
+
12
+ events:
13
+ 'mouseenter': 'display_actions'
14
+ 'mouseleave': 'hide_actions'
15
+ 'click .edit': 'render_edit'
16
+ 'click .save': 'save'
17
+ 'click .cancel': 'cancel'
18
+ 'click .delete': 'confirm_delete'
19
+
20
+ display_actions: -> @$el.find('.actions').show()
21
+ hide_actions: -> @$el.find('.actions').hide() unless @editing
22
+
23
+ render_show: ->
24
+ @editing = false
25
+ @$el.removeClass 'editing'
26
+ @$el.html @showTemplate(content_block: @model)
27
+
28
+ render_edit: ->
29
+ @editing = true
30
+ @$el.addClass 'editing'
31
+ @$el.html @editTemplate(content_block: @model)
32
+
33
+ edit: ->
34
+ @render_edit()
35
+
36
+ save: ->
37
+ @model.set 'data', @$el.find('textarea').val()
38
+ @model.save null,
39
+ success: =>
40
+ @render_show()
41
+ error: (arg1, arg2)->
42
+ console.log 'error:', arg1, arg2
43
+
44
+ cancel: ->
45
+ if @model.isNew()
46
+ @remove()
47
+ else
48
+ @render_show()
49
+
50
+ confirm_delete: ->
51
+ if confirm 'Are you sure you want to delete this content?'
52
+ @model.destroy
53
+ success: (model, response) =>
54
+ @$el.animate opacity: 0, 500, =>
55
+ @$el.slideUp =>
56
+ @$el.remove()
57
+ @remove()
58
+ error: (arg1, arg2)->
59
+ console.log 'error:', arg1, arg2
60
+
61
+
@@ -0,0 +1,61 @@
1
+ class Compartment.Views.ContentBlock extends Backbone.View
2
+
3
+ className: 'compartment_content_block'
4
+
5
+ showTemplate: JST['compartment/content_blocks/show']
6
+ editTemplate: JST['compartment/content_blocks/edit']
7
+
8
+ render: ->
9
+ @render_show()
10
+ @
11
+
12
+ events:
13
+ 'mouseenter': 'display_actions'
14
+ 'mouseleave': 'hide_actions'
15
+ 'click .edit': 'render_edit'
16
+ 'click .save': 'save'
17
+ 'click .cancel': 'cancel'
18
+ 'click .delete': 'confirm_delete'
19
+
20
+ display_actions: -> @$el.find('.actions').show()
21
+ hide_actions: -> @$el.find('.actions').hide() unless @editing
22
+
23
+ render_show: ->
24
+ @editing = false
25
+ @$el.removeClass 'editing'
26
+ @$el.html @showTemplate(content_block: @model)
27
+
28
+ render_edit: ->
29
+ @editing = true
30
+ @$el.addClass 'editing'
31
+ @$el.html @editTemplate(content_block: @model)
32
+
33
+ edit: ->
34
+ @render_edit()
35
+
36
+ save: ->
37
+ @model.set 'data', @$el.find('textarea').val()
38
+ @model.save null,
39
+ success: =>
40
+ @render_show()
41
+ error: (arg1, arg2)->
42
+ console.log 'error:', arg1, arg2
43
+
44
+ cancel: ->
45
+ if @model.isNew()
46
+ @remove()
47
+ else
48
+ @render_show()
49
+
50
+ confirm_delete: ->
51
+ if confirm 'Are you sure you want to delete this content?'
52
+ @model.destroy
53
+ success: (model, response) =>
54
+ @$el.animate opacity: 0, 500, =>
55
+ @$el.slideUp =>
56
+ @$el.remove()
57
+ @remove()
58
+ error: (arg1, arg2)->
59
+ console.log 'error:', arg1, arg2
60
+
61
+