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,89 @@
1
+ require_dependency "compartment/admin/application_controller"
2
+
3
+ module Compartment
4
+ module Admin
5
+ class UsersController < ApplicationController
6
+ # GET /users
7
+ # GET /users.json
8
+ def index
9
+ @users = User.all
10
+
11
+ respond_to do |format|
12
+ format.html # index.html.erb
13
+ format.json { render json: @users }
14
+ end
15
+ end
16
+
17
+ # GET /users/1
18
+ # GET /users/1.json
19
+ def show
20
+ @user = User.find(params[:id])
21
+
22
+ respond_to do |format|
23
+ format.html # show.html.erb
24
+ format.json { render json: @user }
25
+ end
26
+ end
27
+
28
+ # GET /users/new
29
+ # GET /users/new.json
30
+ def new
31
+ @user = User.new
32
+
33
+ respond_to do |format|
34
+ format.html # new.html.erb
35
+ format.json { render json: @user }
36
+ end
37
+ end
38
+
39
+ # GET /users/1/edit
40
+ def edit
41
+ @user = User.find(params[:id])
42
+ end
43
+
44
+ # POST /users
45
+ # POST /users.json
46
+ def create
47
+ @user = User.new(params[:user])
48
+
49
+ respond_to do |format|
50
+ if @user.save
51
+ format.html { redirect_to @user, notice: 'User was successfully created.' }
52
+ format.json { render json: @user, status: :created, location: @user }
53
+ else
54
+ format.html { render action: "new" }
55
+ format.json { render json: @user.errors, status: :unprocessable_entity }
56
+ end
57
+ end
58
+ end
59
+
60
+ # PUT /users/1
61
+ # PUT /users/1.json
62
+ def update
63
+ @user = User.find(params[:id])
64
+
65
+ respond_to do |format|
66
+ if @user.update_attributes(params[:user])
67
+ format.html { redirect_to @user, notice: 'User was successfully updated.' }
68
+ format.json { head :no_content }
69
+ else
70
+ format.html { render action: "edit" }
71
+ format.json { render json: @user.errors, status: :unprocessable_entity }
72
+ end
73
+ end
74
+ end
75
+
76
+ # DELETE /users/1
77
+ # DELETE /users/1.json
78
+ def destroy
79
+ @user = User.find(params[:id])
80
+ @user.destroy
81
+
82
+ respond_to do |format|
83
+ format.html { redirect_to users_url }
84
+ format.json { head :no_content }
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,16 @@
1
+ module Compartment
2
+ class ApplicationController < ActionController::Base
3
+
4
+ attr_accessor :current_site
5
+
6
+ before_filter :find_site_by_domain
7
+
8
+ def find_site_by_domain
9
+ @current_site ||= Site.find_by_domain(env['SERVER_NAME'])
10
+ unless @current_site
11
+ render 'compartment/errors/unknown_site', status: 404, layout: false
12
+ end
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ require_dependency "compartment/application_controller"
2
+
3
+ module Compartment
4
+ class PagesController < ApplicationController
5
+
6
+ def show
7
+ @page = current_site.pages.find_by_url_path(request.path_info)
8
+ if @page
9
+ render :file => @page.template_path, layout: false
10
+ else
11
+ # render 'compartment/errors/page_not_found', :status => 404
12
+ render file: current_site.theme.path_to_template(:page_not_found), status: 404, layout: false
13
+ end
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,12 @@
1
+ require_dependency "compartment/application_controller"
2
+
3
+ module Compartment
4
+ class ThemeAssetsController < ApplicationController
5
+
6
+ def send_asset
7
+ file = File.join(Compartment.config.themes_path, params[:theme_name], params[:file] + '.' + params[:ext])
8
+ send_file file
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module Compartment
2
+ module ApplicationHelper
3
+
4
+ def admin_logged_in?
5
+ session[:user_id].present?
6
+ end
7
+
8
+ # def current_page
9
+ # @page
10
+ # end
11
+ end
12
+ end
@@ -0,0 +1,93 @@
1
+ module Compartment
2
+ module PagesHelper
3
+
4
+ def theme_stylesheet_url(file)
5
+ @page.site.theme.url_to_file("stylesheets/#{file}")
6
+ end
7
+
8
+ # renders the stylesheet link tags appropriate for the current page
9
+ def styles
10
+ stylesheet_link_tag 'compartment/frontend-styles' if admin_logged_in?
11
+ # render the theme styles
12
+ end
13
+
14
+ # TODO: refactor this. Don't generate strings of json.
15
+ def scripts
16
+ scripts = []
17
+ if admin_logged_in?
18
+ # scripts << "<script>window.current_page_id = '#{@page.id}';</script>" unless @page.nil?
19
+ scripts << javascript_include_tag('compartment/application')
20
+ unless @page.nil?
21
+ html = '<script type="text/javascript">'
22
+ html += "Compartment.Data.current_page = #{@page.to_json(include: :content_blocks)};\n"
23
+ html += "Compartment.Data.content_block_types = [];\n"
24
+ Compartment.config.content_block_types.each_with_index do |block, i|
25
+ html += "Compartment.Data.content_block_types[#{i}] = #{block.to_json};\n"
26
+ end
27
+ html += "</script>"
28
+ scripts << html
29
+ end
30
+ end
31
+ raw scripts.join("\n")
32
+ end
33
+
34
+ # returns the title of the current page
35
+ def page_title
36
+ @page.title
37
+ end
38
+
39
+ # renders the content for the specified content area
40
+ def content_area(name, options = {}, &placeholder)
41
+ options = { wrapper_tag: :div }.merge(options)
42
+ options.merge!(placeholder: capture(&placeholder)) if block_given?
43
+ html = ''
44
+ content_blocks = @page.content_blocks.where(content_area: name).limit(options[:limit])
45
+ content_blocks.each do |block|
46
+ block_html = block.render.html_safe
47
+ if admin_logged_in?
48
+ # Don't need to render anything. The javascript will take care of this.
49
+ else
50
+ html += block_html
51
+ end
52
+ end
53
+ if html == '' and options[:placeholder]
54
+ if admin_logged_in?
55
+ html = content_tag options[:wrapper_tag], options[:placeholder], class: 'compartment_content_block_placeholder'
56
+ else
57
+ html = options[:placeholder]
58
+ end
59
+ end
60
+ data_attributes = {name: name}
61
+ data_attributes[:limit] = options[:limit] if options[:limit]
62
+ html = content_tag options[:wrapper_tag], html.html_safe, :class => 'compartment_content_area', data: data_attributes if admin_logged_in?
63
+ html.html_safe
64
+ end
65
+
66
+ # old functionality
67
+ # def content_block(name, options = nil)
68
+ # options = { limit: 1 }.merge(options)
69
+ # content_area name, options
70
+ # end
71
+
72
+ def editable_text(name, options = {}, &placeholder)
73
+ options = { type: :text }.merge(options)
74
+ options.merge!(limit: 1, wrapper_tag: :span) # enforce only 1
75
+ content_area(name, options, &placeholder)
76
+
77
+ # block = @page.content_blocks.where(content_area: name).first
78
+
79
+ # html = block.render if block
80
+ # html ||= options[:placeholder] ||= ''
81
+
82
+ # html = content_tag :span, html.html_safe, :class => 'compartment_content_area', data: { name: name } if admin_logged_in?
83
+ # html.html_safe
84
+ end
85
+
86
+ # In a theme, using content_block is the same as a content area that only allows one content block.
87
+ def content_block(name, options = {}, &placeholder)
88
+ options.merge!(limit: 1) # enforce only 1
89
+ content_area(name, options, &placeholder)
90
+ end
91
+
92
+ end
93
+ end
@@ -0,0 +1,14 @@
1
+ module Compartment
2
+ class ContentBlock < ActiveRecord::Base
3
+ belongs_to :page
4
+
5
+ attr_accessible :content_area, :data
6
+
7
+ validates_presence_of :content_area
8
+
9
+ def render
10
+ data
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Compartment
2
+ class Page < ActiveRecord::Base
3
+ belongs_to :site
4
+ has_many :content_blocks
5
+
6
+ attr_accessible :template, :title, :url_path
7
+
8
+ validates_uniqueness_of :url_path
9
+
10
+ def template_path
11
+ site.theme.path_to_template(template)
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Compartment
2
+ class Site < ActiveRecord::Base
3
+ has_many :pages
4
+ has_many :users
5
+ has_one :theme
6
+ attr_accessible :domain
7
+ validates_uniqueness_of :domain
8
+
9
+ def theme
10
+ @theme || Theme.default
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,41 @@
1
+ module Compartment
2
+ class Theme < ActiveRecord::Base
3
+
4
+ # used for registering a theme
5
+ def self.info
6
+ info = Struct.new(:name, :author).new
7
+ yield(info)
8
+ Compartment.config.registered_themes << info
9
+ end
10
+
11
+ belongs_to :site
12
+ attr_accessible :name
13
+
14
+ validates_presence_of :name
15
+
16
+ def self.default
17
+ Theme.new(:name => 'default')
18
+ end
19
+
20
+ def filepath
21
+ File.join(Compartment.config.themes_path, name)
22
+ end
23
+
24
+ def path_to_template(template)
25
+ case template
26
+ when :page_not_found, 404
27
+ template = 'error_404'
28
+ end
29
+ File.join(filepath, 'templates', template)
30
+ end
31
+
32
+ def url
33
+ "/assets/themes/#{name}/"
34
+ end
35
+
36
+ def url_to_file(name)
37
+ url + name
38
+ end
39
+
40
+ end
41
+ end
@@ -0,0 +1,8 @@
1
+ module Compartment
2
+ class User < ActiveRecord::Base
3
+ belongs_to :site
4
+ attr_accessible :email, :password, :password_confirmation
5
+ has_secure_password
6
+ validates_presence_of :password, :on => :create
7
+ end
8
+ end
@@ -0,0 +1,4 @@
1
+ Compartment::Theme.info do |theme|
2
+ theme.name = 'Compartment Default'
3
+ theme.author = 'Andrew Havens'
4
+ end
@@ -0,0 +1,209 @@
1
+ /*
2
+ Author : Christopher Robinson
3
+ Email : christopher@edg3.co.uk
4
+ Website : http://www.edg3.co.uk/
5
+ */
6
+ * {
7
+ border:0;
8
+ margin:0;
9
+ padding:0;
10
+ }
11
+
12
+ /* general */
13
+ a {
14
+ color:#b484da;
15
+ text-decoration:none;
16
+ }
17
+ a:hover {
18
+ color:#666;
19
+ text-decoration:underline;
20
+ }
21
+ blockquote {
22
+ background:#f1f1f1;
23
+ border-left:2px solid #7534aa;
24
+ color:#444;
25
+ display:block;
26
+ font-style:oblique;
27
+ line-height:20px;
28
+ margin:0 0 0 10px;
29
+ padding:0 0 0 10px;
30
+ }
31
+ .left {
32
+ float:left;
33
+ margin:0 10px 0 0;
34
+ }
35
+ .right {
36
+ float:right;
37
+ margin:0 0 0 10px;
38
+ }
39
+
40
+ /* body */
41
+ body {
42
+ background:#fff url('../images/background_body.jpg') repeat-x top;
43
+ color:#666;
44
+ font:0.7em Verdana, "Trebuchet MS", Georgia, "Times New Roman", Times, serif;
45
+ }
46
+
47
+ /* header */
48
+ #header {
49
+ background:url('../images/background_header.jpg');
50
+ height:320px;
51
+ margin:0 auto;
52
+ position:relative;
53
+ width:760px;
54
+ }
55
+ #header:after {
56
+ clear:both;
57
+ content:'.';
58
+ display:block;
59
+ height:0;
60
+ visibility:hidden;
61
+ }
62
+ #header h1 {
63
+ color:#666;
64
+ font-size:40px;
65
+ font-weight:400;
66
+ left:0;
67
+ letter-spacing:-2px;
68
+ position:absolute;
69
+ top:40px;
70
+ }
71
+ #header p {
72
+ bottom:70px;
73
+ color:#fff;
74
+ font-size:2em;
75
+ position:absolute;
76
+ right:20px;
77
+ }
78
+ #header ul {
79
+ list-style:none;
80
+ position:absolute;
81
+ top:100px;
82
+ }
83
+ #header ul li {
84
+ list-style:none;
85
+ }
86
+ #header ul li a {
87
+ color:#fff;
88
+ display:block;
89
+ font-size:1.2em;
90
+ font-weight:700;
91
+ height:20px;
92
+ padding:10px;
93
+ width:190px;
94
+ }
95
+ #header ul li a:hover {
96
+ background:#b484da;
97
+ color:#eee;
98
+ text-decoration:none;
99
+ }
100
+
101
+ /* content */
102
+ #content {
103
+ height:auto;
104
+ margin:0 auto;
105
+ width:760px;
106
+ }
107
+ #content:after {
108
+ clear:both;
109
+ content:'.';
110
+ display:block;
111
+ height:0;
112
+ visibility:hidden;
113
+ }
114
+
115
+ /* sidebar */
116
+ #sidebar {
117
+ float:left;
118
+ width:210px;
119
+ }
120
+ #sidebar h1 {
121
+ border-bottom:2px solid #7534aa;
122
+ color:#444;
123
+ font-size:165%;
124
+ font-weight:400;
125
+ line-height:30px;
126
+ padding:0 10px;
127
+ }
128
+ #sidebar input {
129
+ background:#f1f1f1;
130
+ color:#555;
131
+ margin:10px;
132
+ padding:5px;
133
+ width:180px;
134
+ }
135
+ #sidebar p {
136
+ background:#f1f1f1;
137
+ color:#555;
138
+ display:block;
139
+ font-size:90%;
140
+ line-height:20px;
141
+ margin:10px 0;
142
+ padding:10px;
143
+ }
144
+ #sidebar p a.more {
145
+ display:block;
146
+ text-align:right;
147
+ }
148
+ #sidebar ul {
149
+ margin:10px;
150
+ }
151
+ #sidebar ul li {
152
+ border-bottom:1px solid #b484da;
153
+ list-style:none;
154
+ padding:5px 2px;
155
+ }
156
+ #sidebar ul li a {
157
+ color:#333;
158
+ display:block;
159
+ font-family:Geneva;
160
+ padding:5px;
161
+ text-decoration:none;
162
+ }
163
+ #sidebar ul li a:hover {
164
+ color:#000;
165
+ }
166
+
167
+ /* Main */
168
+ #main {
169
+ float:right;
170
+ width:520px;
171
+ }
172
+ .one_column #main {
173
+ float:none;
174
+ width:100%;
175
+ }
176
+ #main p {
177
+ color:#555;
178
+ line-height:20px;
179
+ padding:10px;
180
+ }
181
+ #main h1 {
182
+ border-bottom:2px solid #7534aa;
183
+ color:#444;
184
+ font-size:165%;
185
+ font-weight:400;
186
+ line-height:30px;
187
+ padding:0 10px;
188
+ }
189
+
190
+ /* footer */
191
+ #footer {
192
+ margin:10px auto;
193
+ width:760px;
194
+ }
195
+ #footer:after {
196
+ clear:both;
197
+ content:'.';
198
+ display:block;
199
+ height:0;
200
+ visibility:hidden;
201
+ }
202
+ #footer p {
203
+ border-top:2px solid #7534aa;
204
+ color:#555;
205
+ font-size:90%;
206
+ line-height:20px;
207
+ padding:10px;
208
+ text-align:center;
209
+ }