spontaneous 0.2.0.alpha2 → 0.2.0.alpha3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (404) hide show
  1. data/Gemfile +3 -40
  2. data/Rakefile +29 -41
  3. data/Readme.markdown +21 -8
  4. data/application/css/add_alias_dialogue.css.scss +79 -0
  5. data/application/css/{v2.scss → core.css.scss} +537 -550
  6. data/application/css/{definitions.scss → definitions.css.scss} +121 -33
  7. data/application/css/dialogue.css.scss +409 -0
  8. data/application/css/{editing.scss → editing.css.scss} +25 -262
  9. data/application/css/font.css.scss +8 -0
  10. data/application/css/jquery-ui-1.8.21.custom/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  11. data/application/css/jquery-ui-1.8.21.custom/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  12. data/application/css/jquery-ui-1.8.21.custom/images/ui-bg_flat_10_000000_40x100.png +0 -0
  13. data/application/css/jquery-ui-1.8.21.custom/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  14. data/application/css/jquery-ui-1.8.21.custom/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  15. data/application/css/jquery-ui-1.8.21.custom/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  16. data/application/css/jquery-ui-1.8.21.custom/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  17. data/application/css/jquery-ui-1.8.21.custom/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  18. data/application/css/jquery-ui-1.8.21.custom/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  19. data/application/css/jquery-ui-1.8.21.custom/images/ui-icons_222222_256x240.png +0 -0
  20. data/application/css/jquery-ui-1.8.21.custom/images/ui-icons_228ef1_256x240.png +0 -0
  21. data/application/css/jquery-ui-1.8.21.custom/images/ui-icons_ef8c08_256x240.png +0 -0
  22. data/application/css/jquery-ui-1.8.21.custom/images/ui-icons_ffd27a_256x240.png +0 -0
  23. data/application/css/jquery-ui-1.8.21.custom/images/ui-icons_ffffff_256x240.png +0 -0
  24. data/application/css/jquery-ui-1.8.21.custom/ui-lightness.css.scss +565 -0
  25. data/application/css/{login.scss → login.css.scss} +4 -4
  26. data/application/css/meta.css.scss +331 -0
  27. data/application/css/{popover.scss → popover.css.scss} +9 -8
  28. data/application/css/{schema_error.scss → schema_error.css.scss} +4 -4
  29. data/application/css/spontaneous.css +5 -0
  30. data/application/css/unsupported.css.scss +42 -0
  31. data/application/js/add_alias_dialogue.js +72 -10
  32. data/application/js/ajax.js +50 -16
  33. data/application/js/compatibility.js +19 -15
  34. data/application/js/content.js +39 -36
  35. data/application/js/content_area.js +53 -5
  36. data/application/js/dialogue.js +17 -0
  37. data/application/js/dom.js +1 -1
  38. data/application/js/edit_panel.js +23 -8
  39. data/application/js/extensions.js +7 -2
  40. data/application/js/field_preview.js +2 -1
  41. data/application/js/field_types/date_field.js +11 -8
  42. data/application/js/field_types/file_field.js +188 -9
  43. data/application/js/field_types/image_field.js +46 -29
  44. data/application/js/field_types/markdown_field.js +57 -14
  45. data/application/js/field_types/select_field.js +72 -0
  46. data/application/js/field_types/string_field.js +8 -0
  47. data/application/js/field_types/webvideo_field.js +8 -0
  48. data/application/js/init.js +1 -7
  49. data/application/js/location.js +41 -13
  50. data/application/js/login.js +3 -0
  51. data/application/js/meta_view/user_admin.js +543 -0
  52. data/application/js/meta_view.js +1 -0
  53. data/application/js/metadata.js +20 -0
  54. data/application/js/page.js +17 -3
  55. data/application/js/page_browser.js +40 -30
  56. data/application/js/page_entry.js +4 -0
  57. data/application/js/panel/root_menu.js +66 -0
  58. data/application/js/popover.js +2 -2
  59. data/application/js/preview.js +1 -1
  60. data/application/js/publish.js +138 -30
  61. data/application/js/services.js +43 -0
  62. data/application/js/sharded_upload.js +2 -2
  63. data/application/js/spontaneous.js +64 -5
  64. data/application/js/state.js +20 -9
  65. data/application/js/top_bar.js +273 -150
  66. data/application/js/types.js +20 -15
  67. data/application/js/upload.js +1 -2
  68. data/application/js/user.js +18 -4
  69. data/application/js/vendor/date.js +104 -0
  70. data/application/js/vendor/jquery-ui-1.8.18.custom.min.js +356 -0
  71. data/application/js/views/box_view.js +15 -8
  72. data/application/js/views/page_piece_view.js +11 -8
  73. data/application/js/views/page_view.js +21 -3
  74. data/application/js/views/piece_view.js +19 -10
  75. data/application/js/views.js +3 -0
  76. data/application/static/chromelogo-200x52-45c7cbc93be080bea342df5fcda2ef8b.png +0 -0
  77. data/application/static/dot-texture-9eea29e4ac7ad9a772285252078ec127.png +0 -0
  78. data/application/static/editing-textarea-resize-s-b5af62365eb7e19ea4beccf7242d508e.png +0 -0
  79. data/application/static/editing-texture-1-42b06a3439752490988f30f2a06d5e7c.png +0 -0
  80. data/application/static/font/fontawesome-webfont-5c5c21100a346972a82c34c5e96ffcfe.ttf +0 -0
  81. data/application/static/loop_alt1-white-7894b458528e92216196cae26b4c2c96.svg +12 -0
  82. data/application/static/spontaneous-states-e91ec89db525c62da0105b97cdd781ce.png +0 -0
  83. data/application/views/index.erb +2 -2
  84. data/application/views/login.erb +4 -8
  85. data/application/views/schema_modification_error.html.erb +1 -4
  86. data/application/views/unsupported.erb +9 -7
  87. data/bin/spot +1 -1
  88. data/db/migrations/20110209152710_users_and_groups.rb +10 -10
  89. data/db/migrations/20120305112647_site_modification_time.rb +11 -0
  90. data/db/migrations/20120418153903_add_ownership_of_content.rb +14 -0
  91. data/db/migrations/20120423175416_add_pending_modifications.rb +21 -0
  92. data/db/migrations/20120525164947_add_field_versions.rb +27 -0
  93. data/lib/sequel/plugins/scoped_table_name.rb +10 -1
  94. data/lib/spontaneous/asset/file.rb +25 -0
  95. data/lib/spontaneous/asset/source.rb +28 -0
  96. data/lib/spontaneous/asset.rb +75 -0
  97. data/lib/spontaneous/box.rb +6 -4
  98. data/lib/spontaneous/capistrano/deploy.rb +47 -0
  99. data/lib/spontaneous/capistrano/sync.rb +81 -0
  100. data/lib/spontaneous/capistrano.rb +13 -0
  101. data/lib/spontaneous/change.rb +60 -68
  102. data/lib/spontaneous/cli/assets.rb +29 -0
  103. data/lib/spontaneous/cli/base.rb +0 -48
  104. data/lib/spontaneous/cli/console.rb +1 -1
  105. data/lib/spontaneous/cli/server.rb +6 -4
  106. data/lib/spontaneous/cli/site.rb +28 -17
  107. data/lib/spontaneous/cli/user.rb +107 -0
  108. data/lib/spontaneous/cli.rb +100 -4
  109. data/lib/spontaneous/collections/entry_set.rb +2 -2
  110. data/lib/spontaneous/collections/field_set.rb +48 -22
  111. data/lib/spontaneous/collections/prototype_set.rb +20 -13
  112. data/lib/spontaneous/constants.rb +3 -0
  113. data/lib/spontaneous/content.rb +22 -5
  114. data/lib/spontaneous/errors.rb +3 -3
  115. data/lib/spontaneous/extensions/array.rb +12 -0
  116. data/lib/spontaneous/extensions/enumerable.rb +30 -0
  117. data/lib/spontaneous/extensions/nil.rb +3 -1
  118. data/lib/spontaneous/extensions/string.rb +16 -0
  119. data/lib/spontaneous/field_types/date_field.rb +45 -2
  120. data/lib/spontaneous/field_types/field.rb +42 -9
  121. data/lib/spontaneous/field_types/file_field.rb +68 -0
  122. data/lib/spontaneous/field_types/image_field.rb +63 -0
  123. data/lib/spontaneous/field_types/select_field.rb +109 -0
  124. data/lib/spontaneous/field_types/string_field.rb +6 -1
  125. data/lib/spontaneous/field_types/webvideo_field.rb +85 -27
  126. data/lib/spontaneous/field_types.rb +1 -1
  127. data/lib/spontaneous/field_version.rb +8 -0
  128. data/lib/spontaneous/generators/page.rb +1 -1
  129. data/lib/spontaneous/generators/site/Capfile.tt +1 -4
  130. data/lib/spontaneous/generators/site/Gemfile.tt +13 -6
  131. data/lib/spontaneous/generators/site/config/deploy.rb.tt +28 -0
  132. data/lib/spontaneous/generators/site/config/environments/production.rb.tt +7 -2
  133. data/lib/spontaneous/generators/site.rb +1 -0
  134. data/lib/spontaneous/json.rb +34 -11
  135. data/lib/spontaneous/layout.rb +22 -0
  136. data/lib/spontaneous/media/file.rb +4 -0
  137. data/lib/spontaneous/output/assets/compression.rb +58 -0
  138. data/lib/spontaneous/output/assets.rb +32 -0
  139. data/lib/spontaneous/output/context.rb +179 -0
  140. data/lib/spontaneous/output/format/html.rb +5 -0
  141. data/lib/spontaneous/output/format/plain.rb +5 -0
  142. data/lib/spontaneous/output/format.rb +180 -0
  143. data/lib/spontaneous/output/helpers/classes_helper.rb +18 -0
  144. data/lib/spontaneous/{render/helpers/html_helper.rb → output/helpers/conditional_comment_helper.rb} +3 -12
  145. data/lib/spontaneous/output/helpers/script_helper.rb +73 -0
  146. data/lib/spontaneous/output/helpers/stylesheet_helper.rb +61 -0
  147. data/lib/spontaneous/output/helpers.rb +28 -0
  148. data/lib/spontaneous/output/template/engine.rb +59 -0
  149. data/lib/spontaneous/output/template/renderer.rb +153 -0
  150. data/lib/spontaneous/output/template.rb +21 -0
  151. data/lib/spontaneous/output.rb +163 -0
  152. data/lib/spontaneous/page.rb +2 -1
  153. data/lib/spontaneous/paths.rb +6 -1
  154. data/lib/spontaneous/permissions/access_key.rb +5 -5
  155. data/lib/spontaneous/permissions/user.rb +81 -35
  156. data/lib/spontaneous/permissions/user_level.rb +26 -22
  157. data/lib/spontaneous/plugins/aliases.rb +76 -12
  158. data/lib/spontaneous/plugins/allowed_types.rb +60 -18
  159. data/lib/spontaneous/plugins/application/paths.rb +0 -28
  160. data/lib/spontaneous/plugins/application/system.rb +35 -0
  161. data/lib/spontaneous/plugins/boxes.rb +4 -0
  162. data/lib/spontaneous/plugins/content_groups.rb +16 -0
  163. data/lib/spontaneous/plugins/entries.rb +50 -30
  164. data/lib/spontaneous/plugins/fields.rb +15 -0
  165. data/lib/spontaneous/plugins/layouts.rb +8 -2
  166. data/lib/spontaneous/plugins/modifications.rb +228 -0
  167. data/lib/spontaneous/plugins/page/formats.rb +67 -42
  168. data/lib/spontaneous/plugins/page/request.rb +10 -0
  169. data/lib/spontaneous/plugins/page/site_timestamps.rb +28 -0
  170. data/lib/spontaneous/plugins/paths.rb +15 -3
  171. data/lib/spontaneous/plugins/publishing.rb +124 -45
  172. data/lib/spontaneous/plugins/render.rb +13 -8
  173. data/lib/spontaneous/plugins/schema_hierarchy.rb +18 -6
  174. data/lib/spontaneous/plugins/site/helpers.rb +53 -0
  175. data/lib/spontaneous/plugins/site/hooks.rb +50 -0
  176. data/lib/spontaneous/plugins/site/map.rb +1 -1
  177. data/lib/spontaneous/plugins/site/paths.rb +13 -0
  178. data/lib/spontaneous/plugins/site/publishing.rb +6 -2
  179. data/lib/spontaneous/plugins/site/{revisions.rb → state.rb} +5 -1
  180. data/lib/spontaneous/plugins/site/storage.rb +4 -0
  181. data/lib/spontaneous/plugins/site/url.rb +15 -0
  182. data/lib/spontaneous/plugins/site_map.rb +13 -3
  183. data/lib/spontaneous/plugins/styles.rb +5 -1
  184. data/lib/spontaneous/plugins/visibility.rb +39 -12
  185. data/lib/spontaneous/prototypes/box_prototype.rb +4 -0
  186. data/lib/spontaneous/prototypes/field_prototype.rb +15 -10
  187. data/lib/spontaneous/publishing/event_client.rb +46 -0
  188. data/lib/spontaneous/publishing/immediate.rb +81 -44
  189. data/lib/spontaneous/publishing/simultaneous.rb +23 -6
  190. data/lib/spontaneous/publishing.rb +4 -3
  191. data/lib/spontaneous/rack/around_back.rb +1 -5
  192. data/lib/spontaneous/rack/around_front.rb +4 -4
  193. data/lib/spontaneous/rack/around_preview.rb +4 -3
  194. data/lib/spontaneous/rack/assets.rb +81 -54
  195. data/lib/spontaneous/rack/authentication.rb +0 -1
  196. data/lib/spontaneous/rack/back.rb +160 -72
  197. data/lib/spontaneous/rack/cookie_authentication.rb +2 -2
  198. data/lib/spontaneous/rack/css.rb +18 -15
  199. data/lib/spontaneous/rack/event_source.rb +9 -21
  200. data/lib/spontaneous/rack/fiber_pool.rb +26 -0
  201. data/lib/spontaneous/rack/front.rb +12 -4
  202. data/lib/spontaneous/rack/helpers.rb +35 -13
  203. data/lib/spontaneous/rack/js.rb +41 -0
  204. data/lib/spontaneous/rack/public.rb +34 -44
  205. data/lib/spontaneous/rack/sse.rb +18 -0
  206. data/lib/spontaneous/rack/static.rb +3 -0
  207. data/lib/spontaneous/rack/user_admin.rb +100 -0
  208. data/lib/spontaneous/rack/user_helpers.rb +1 -1
  209. data/lib/spontaneous/rack.rb +6 -2
  210. data/lib/spontaneous/schema.rb +31 -4
  211. data/lib/spontaneous/search/index.rb +19 -3
  212. data/lib/spontaneous/search/results.rb +1 -1
  213. data/lib/spontaneous/sequel.rb +17 -0
  214. data/lib/spontaneous/site.rb +11 -4
  215. data/lib/spontaneous/state.rb +11 -0
  216. data/lib/spontaneous/storage/cloud.rb +4 -0
  217. data/lib/spontaneous/storage/local.rb +11 -0
  218. data/lib/spontaneous/style.rb +2 -2
  219. data/lib/spontaneous/tasks/database.rake +21 -22
  220. data/lib/spontaneous/utils/database/mysql_dumper.rb +4 -0
  221. data/lib/spontaneous/utils/database/postgres_dumper.rb +78 -0
  222. data/lib/spontaneous/utils/database.rb +6 -3
  223. data/lib/spontaneous/utils/smart_quotes.rb +499 -0
  224. data/lib/spontaneous/utils/smush_it.rb +66 -0
  225. data/lib/spontaneous/utils.rb +3 -1
  226. data/lib/spontaneous/version.rb +2 -2
  227. data/lib/spontaneous.rb +25 -29
  228. data/spontaneous.gemspec +186 -106
  229. data/test/experimental/test_features.rb +1 -1
  230. data/test/fixtures/asset_pipeline/application/css/basic.css.scss +4 -0
  231. data/test/fixtures/asset_pipeline/application/css/complex.css.scss.erb +6 -0
  232. data/test/fixtures/asset_pipeline/application/css/simple.css +3 -0
  233. data/test/fixtures/asset_pipeline/application/css/spontaneous.css +7 -0
  234. data/test/fixtures/asset_pipeline/application/css/subdir/complex.css.scss.erb +6 -0
  235. data/test/fixtures/asset_pipeline/application/css/subdir/library.css.scss +1 -0
  236. data/test/fixtures/asset_pipeline/application/css/subdir/simple.css +3 -0
  237. data/test/fixtures/asset_pipeline/application/js/basic.js.coffee +1 -0
  238. data/test/fixtures/asset_pipeline/application/js/complex.js.coffee.erb +1 -0
  239. data/test/fixtures/asset_pipeline/application/js/login.js +1 -0
  240. data/test/fixtures/asset_pipeline/application/js/require.js +1 -0
  241. data/test/fixtures/asset_pipeline/application/js/simple.js +1 -0
  242. data/test/fixtures/asset_pipeline/application/js/spontaneous.js +5 -0
  243. data/test/fixtures/asset_pipeline/application/js/subdir/complex.js.coffee.erb +1 -0
  244. data/test/fixtures/asset_pipeline/application/js/subdir/library.js.coffee +1 -0
  245. data/test/fixtures/asset_pipeline/application/js/subdir/simple.js +1 -0
  246. data/test/fixtures/asset_pipeline/application/js/vendor/jquery.js +1 -0
  247. data/test/fixtures/asset_pipeline/application/static/dot-texture.png +0 -0
  248. data/test/fixtures/asset_pipeline/application/static/subdir/px.gif +0 -0
  249. data/test/fixtures/assets/public1/css/a.scss +1 -0
  250. data/test/fixtures/assets/public1/js/a.js +1 -0
  251. data/test/fixtures/assets/public1/js/m.coffee +1 -0
  252. data/test/fixtures/assets/public2/css/b.scss +1 -0
  253. data/test/fixtures/assets/public2/css/c.css +1 -0
  254. data/test/fixtures/assets/public2/js/b.js +1 -0
  255. data/test/fixtures/assets/public2/js/c.js +1 -0
  256. data/test/fixtures/assets/public2/js/n.coffee +1 -0
  257. data/test/fixtures/back/config/user_levels.yml +3 -0
  258. data/test/fixtures/back/public/js/coffeescript.coffee +1 -0
  259. data/test/fixtures/back/templates/layouts/standard.css.cut +1 -0
  260. data/test/fixtures/back/templates/layouts/standard.js.cut +1 -0
  261. data/test/fixtures/example_application/config/database.yml +4 -4
  262. data/test/fixtures/helpers/templates/layouts/standard.html.cut +1 -0
  263. data/test/fixtures/helpers/templates/layouts/standard.mobile.cut +1 -0
  264. data/test/fixtures/images/vimlogo.pdf +0 -0
  265. data/test/fixtures/outputs/templates/layouts/standard.atom.cut +1 -0
  266. data/test/fixtures/permissions/config/user_levels.yml +6 -3
  267. data/test/fixtures/serialisation/class_hash.yaml.erb +1 -0
  268. data/test/fixtures/serialisation/root_hash.yaml.erb +2 -2
  269. data/test/fixtures/templates/extended/grandparent.html.cut +7 -7
  270. data/test/fixtures/templates/extended/main.html.cut +5 -5
  271. data/test/fixtures/templates/extended/parent.html.cut +8 -8
  272. data/test/fixtures/templates/extended/partial_with_locals.html.cut +1 -1
  273. data/test/fixtures/templates/extended/with_includes.html.cut +6 -6
  274. data/test/fixtures/templates/extended/with_includes_and_locals.html.cut +6 -7
  275. data/test/fixtures/templates/layouts/entries.html.cut +4 -4
  276. data/test/fixtures/templates/layouts/standard.html.cut +1 -0
  277. data/test/fixtures/templates/layouts/variables.html.cut +1 -1
  278. data/test/fixtures/templates/publishing/templates/layouts/static.html.cut +1 -1
  279. data/test/fixtures/templates/publishing/templates/layouts/static.rtf.cut +1 -0
  280. data/test/fixtures/templates/template_class/complex_template.html.cut +2 -2
  281. data/test/fixtures/templates/template_class/complex_template.pdf.cut +2 -2
  282. data/test/fixtures/templates/template_class/default_template_style.html.cut +1 -1
  283. data/test/fixtures/templates/template_class/images_with_template.html.cut +2 -2
  284. data/test/fixtures/templates/template_class/slots_template.html.cut +2 -2
  285. data/test/fixtures/templates/template_class/slots_template.pdf.cut +2 -2
  286. data/test/fixtures/user_manager/config/user_levels.yml +9 -0
  287. data/test/functional/test_application.rb +7 -7
  288. data/test/functional/test_back.rb +352 -97
  289. data/test/functional/test_front.rb +71 -20
  290. data/test/functional/test_user_manager.rb +284 -0
  291. data/test/javascript/env.js +13505 -0
  292. data/test/javascript/test_markdown.rb +43 -3
  293. data/test/support/custom_matchers.rb +3 -2
  294. data/test/test_helper.rb +50 -9
  295. data/test/test_javascript.rb +13 -13
  296. data/test/ui_helper.rb +1 -1
  297. data/test/unit/test_alias.rb +79 -8
  298. data/test/unit/test_asset_bundler.rb +220 -0
  299. data/test/unit/test_assets.rb +213 -0
  300. data/test/unit/test_async.rb +55 -0
  301. data/test/unit/test_authentication.rb +52 -39
  302. data/test/unit/test_boxes.rb +20 -15
  303. data/test/unit/test_changesets.rb +261 -0
  304. data/test/unit/test_content.rb +73 -33
  305. data/test/unit/test_content_inheritance.rb +18 -18
  306. data/test/unit/test_extensions.rb +26 -0
  307. data/test/unit/test_fields.rb +303 -16
  308. data/test/unit/test_formats.rb +267 -34
  309. data/test/unit/test_helpers.rb +79 -2
  310. data/test/unit/test_images.rb +10 -0
  311. data/test/unit/test_layouts.rb +21 -13
  312. data/test/unit/test_modifications.rb +648 -0
  313. data/test/unit/test_page.rb +6 -2
  314. data/test/unit/test_permissions.rb +101 -27
  315. data/test/unit/test_piece.rb +4 -4
  316. data/test/unit/test_plugins.rb +3 -2
  317. data/test/unit/test_publishing.rb +332 -0
  318. data/test/unit/test_render.rb +118 -67
  319. data/test/unit/test_revisions.rb +546 -0
  320. data/test/unit/test_schema.rb +83 -1
  321. data/test/unit/test_search.rb +59 -0
  322. data/test/unit/test_serialisation.rb +2 -47
  323. data/test/unit/test_site.rb +217 -108
  324. data/test/unit/test_storage.rb +26 -0
  325. data/test/unit/test_structure.rb +2 -2
  326. data/test/unit/test_styles.rb +90 -75
  327. data/test/unit/test_table_scoping.rb +21 -17
  328. data/test/unit/test_templates.rb +75 -69
  329. data/test/{slow → unit}/test_visibility.rb +78 -22
  330. metadata +528 -221
  331. data/application/css/add_alias_dialogue.scss +0 -27
  332. data/application/css/min/14c2a35812c443001b15d8b12a4780f88c678035.css +0 -1
  333. data/application/css/min/565d4c25e82148acb01c45c8d675b37a08676d77.css +0 -1
  334. data/application/css/min/84dbe894ea96eafd321c30823d630817bfc4b03b.css +0 -1
  335. data/application/css/spontaneous.scss +0 -111
  336. data/application/css/unsupported.scss +0 -16
  337. data/application/css/variables.scss +0 -80
  338. data/application/js/min/2a0c2962537a3181fedfff5c92596ba6d3122dc9.js +0 -3
  339. data/application/js/min/4cf1c493d3379ecba5287758c61238034c0893f9.js +0 -2
  340. data/application/js/min/78ac6b99d96750bb6b9f9aad4cb9cd91cd03f391.js +0 -3
  341. data/application/js/min/b8abf302a824c35385ff517b34111e1710ff3b37.js +0 -2
  342. data/application/js/min/c8efb9b9f7c3f6613fcebc6be60f605b6570a382.js +0 -90
  343. data/application/static/diagonal-texture.png +0 -0
  344. data/application/static/editing-0-noise.png +0 -0
  345. data/application/static/editing-1-noise.png +0 -0
  346. data/application/static/editing-texture-1.png +0 -0
  347. data/application/static/editing-texture.png +0 -0
  348. data/application/static/editing-toolbar-shadow-bottom.png +0 -0
  349. data/application/static/editing-toolbar-shadow-top.png +0 -0
  350. data/application/static/inner-glow.png +0 -0
  351. data/application/static/item-buttons-highlight.png +0 -0
  352. data/application/static/item-buttons.png +0 -0
  353. data/application/static/paper-texture-dark.png +0 -0
  354. data/application/static/plus_alt.svg +0 -8
  355. data/application/static/select-arrow-root.png +0 -0
  356. data/application/static/slot-up-arrow.png +0 -0
  357. data/application/static/spontaneous.png +0 -0
  358. data/lib/cutaneous/context_helper.rb +0 -187
  359. data/lib/cutaneous/preview_context.rb +0 -32
  360. data/lib/cutaneous/preview_renderer.rb +0 -10
  361. data/lib/cutaneous/publish_context.rb +0 -10
  362. data/lib/cutaneous/publish_renderer.rb +0 -14
  363. data/lib/cutaneous/publish_template.rb +0 -62
  364. data/lib/cutaneous/publish_token_parser.rb +0 -8
  365. data/lib/cutaneous/renderer.rb +0 -124
  366. data/lib/cutaneous/request_context.rb +0 -9
  367. data/lib/cutaneous/request_renderer.rb +0 -15
  368. data/lib/cutaneous/request_template.rb +0 -11
  369. data/lib/cutaneous/request_token_parser.rb +0 -9
  370. data/lib/cutaneous/token_parser.rb +0 -125
  371. data/lib/cutaneous.rb +0 -48
  372. data/lib/spontaneous/render/context_base.rb +0 -143
  373. data/lib/spontaneous/render/development_renderer.rb +0 -14
  374. data/lib/spontaneous/render/engine.rb +0 -19
  375. data/lib/spontaneous/render/format/html.rb +0 -5
  376. data/lib/spontaneous/render/format.rb +0 -75
  377. data/lib/spontaneous/render/helpers/script_helper.rb +0 -17
  378. data/lib/spontaneous/render/helpers/stylesheet_helper.rb +0 -16
  379. data/lib/spontaneous/render/helpers.rb +0 -14
  380. data/lib/spontaneous/render/preview_context.rb +0 -8
  381. data/lib/spontaneous/render/preview_renderer.rb +0 -24
  382. data/lib/spontaneous/render/publish_context.rb +0 -22
  383. data/lib/spontaneous/render/published_renderer.rb +0 -53
  384. data/lib/spontaneous/render/publishing_renderer.rb +0 -16
  385. data/lib/spontaneous/render/render_cache.rb +0 -26
  386. data/lib/spontaneous/render/renderer.rb +0 -50
  387. data/lib/spontaneous/render/request_context.rb +0 -8
  388. data/lib/spontaneous/render.rb +0 -214
  389. data/test/experimental/test_cutaneous.rb +0 -309
  390. data/test/fixtures/application/css/test.less +0 -5
  391. data/test/slow/test_publishing.rb +0 -1006
  392. /data/application/css/{developer.scss → developer.css.scss} +0 -0
  393. /data/application/js/vendor/{jquery-1.7.1.min.js → jquery.js} +0 -0
  394. /data/application/static/{location-arrow.png → location-arrow-c1c1d3ca472481c61a0a5f8cb289d743.png} +0 -0
  395. /data/application/static/{missing.png → missing-911ce6dbd9f4602e0f3fbcd7e78846a2.png} +0 -0
  396. /data/application/static/{orange-down-arrow.png → orange-down-arrow-395ae1929e8662b2ff0977daf12c35bb.png} +0 -0
  397. /data/application/static/{page-browser-next.png → page-browser-next-ce781a242c23b980b99b9db7abc20b05.png} +0 -0
  398. /data/application/static/{plus-box.png → plus-box-dcde74a1e496f68298c9b443caa1c5d5.png} +0 -0
  399. /data/application/static/{select-arrow.png → select-arrow-6e7dd3745b00e934b0d7a3250c46558b.png} +0 -0
  400. /data/application/static/{slot-down-arrow.png → slot-down-arrow-59ad5f5ee5b52a7ebd00bca4b3104194.png} +0 -0
  401. /data/application/static/{splash.png → splash-65b493a714df9b8b3ab170103401b53d.png} +0 -0
  402. /data/application/static/{spot.png → spot-71fab1d2f065034f5fc15e7bea2ad36c.png} +0 -0
  403. /data/application/static/{spot.svg → spot-8505041082d8d3bbe8d34c29dddb3b7d.svg} +0 -0
  404. /data/application/static/{texture.png → texture-03f7627e8264b1d607113ab32c593a58.png} +0 -0
data/lib/cutaneous.rb DELETED
@@ -1,48 +0,0 @@
1
-
2
- module Cutaneous
3
- def self.template_path(filename, format)
4
- Spontaneous.template_path(template_name(filename, format))
5
- end
6
-
7
- def self.template_name(filename, format)
8
- "#{filename}.#{format}.#{self.extension}"
9
- end
10
-
11
- # this is basicially the API that any templating engine has to provide
12
- def self.extension
13
- 'cut'
14
- end
15
-
16
- def self.preview_renderer
17
- PreviewRenderer
18
- end
19
-
20
- def self.publishing_renderer
21
- PublishRenderer
22
- end
23
-
24
- def self.request_renderer
25
- RequestRenderer
26
- end
27
-
28
- def self.is_dynamic?(render)
29
- RequestTokenParser.is_dynamic?(render)
30
- end
31
-
32
-
33
- autoload :ContextHelper, "cutaneous/context_helper"
34
- autoload :PreviewContext, "cutaneous/preview_context"
35
- autoload :PublishContext, "cutaneous/publish_context"
36
- autoload :RequestContext, "cutaneous/request_context"
37
-
38
- autoload :Renderer, "cutaneous/renderer"
39
- autoload :PublishRenderer, "cutaneous/publish_renderer"
40
- autoload :RequestRenderer, "cutaneous/request_renderer"
41
- autoload :PreviewRenderer, "cutaneous/preview_renderer"
42
-
43
- autoload :TokenParser, "cutaneous/token_parser"
44
- autoload :PublishTokenParser, "cutaneous/publish_token_parser"
45
- autoload :RequestTokenParser, "cutaneous/request_token_parser"
46
- autoload :PublishTemplate, "cutaneous/publish_template"
47
- autoload :RequestTemplate, "cutaneous/request_template"
48
- end
@@ -1,143 +0,0 @@
1
- # encoding: UTF-8
2
-
3
-
4
- module Spontaneous::Render
5
- module ContextBase
6
- include Spontaneous::Render::Helpers
7
-
8
- attr_reader :_format, :_target, :_locals
9
-
10
- def initialize(target, format, parent={})
11
- @_target, @_format = target, format
12
- _update(parent)
13
- end
14
-
15
- def show_errors?
16
- Spontaneous.development?
17
- end
18
-
19
- alias_method :format, :_format
20
-
21
- def root
22
- Spontaneous::Site.root
23
- end
24
-
25
- def navigation(depth = 1, &block)
26
- case depth
27
- when 0, :root
28
- root
29
- when 1, :section
30
- navigation_at_depth(1, &block)
31
- end
32
- end
33
-
34
- def navigation_at_depth(depth = 1)
35
- _pages_at_depth(self.page, depth).each do |p|
36
- yield(p, self.page.active?(p))
37
- end
38
- end
39
-
40
- def _pages_at_depth(origin_page, depth)
41
- origin_page.at_depth(depth)
42
- end
43
-
44
- def page
45
- _target.page
46
- end
47
-
48
- def template
49
- _target.template(_format)
50
- end
51
-
52
- def each
53
- content.each { |c| yield(c) } if block_given?
54
- end
55
-
56
- def each_with_index
57
- content.each_with_index { |c, i| yield(c, i) } if block_given?
58
- end
59
-
60
- def map
61
- content.map { |c| yield(c) } if block_given?
62
- end
63
-
64
- def content
65
- _target.iterable
66
- end
67
-
68
- def pieces
69
- content
70
- end
71
-
72
- def first
73
- content.first
74
- end
75
-
76
- def last
77
- content.last
78
- end
79
-
80
- def first?
81
- _target.owner.pieces.first == self
82
- end
83
-
84
- def last?
85
- _target.owner.pieces.last == self
86
- end
87
-
88
- def render_content
89
- _target.map do |c|
90
- c.render(_format, self)
91
- end.join("\n")
92
- end
93
-
94
- def render(format, *args)
95
- _target.render(format, self, *args)
96
- end
97
-
98
- def respond_to?(method)
99
- super || _target.respond_to?(method)
100
- end
101
-
102
- protected
103
-
104
- def method_missing(method, *args)
105
- if block_given?
106
- _target.__send__(method, *args, &Proc.new)
107
- else
108
- _target.__send__(method, *args)
109
- end
110
- rescue => e
111
- # TODO: sensible, configurable fallback for when template calls non-existant method
112
- # - need line number and file that generated error
113
- # - logging.warn when happens
114
- # - an inline comment when in dev mode?
115
- # - some placeholder text, perhaps the name of the missing method and line no.
116
- logger.error(e)
117
- # logger.error(_target)
118
- # logger.error(e.backtrace.join("\\n"))
119
- nil
120
- end
121
-
122
- # make each key of the params hash into a method call for speed
123
- def _update(parent)
124
- if parent.is_a?(Hash)
125
- _update_with_hash(parent)
126
- else
127
- parent.instance_variables.reject { |var| /^@_/ === var.to_s }.each do |variable|
128
- instance_variable_set(variable, parent.instance_variable_get(variable))
129
- end
130
- _update_with_hash(parent._locals) if parent.respond_to?(:_locals)
131
- end
132
- self
133
- end
134
-
135
- def _update_with_hash(hash)
136
- @_locals = hash
137
- hash.each do |key, val|
138
- singleton_class.__send__(:define_method, key) { val }
139
- end
140
- end
141
- end
142
- end
143
-
@@ -1,14 +0,0 @@
1
- # encoding: UTF-8
2
-
3
-
4
- module Spontaneous
5
- module Render
6
- class DevelopmentRenderer < Renderer
7
- def render_content(content, format=:html, params = {})
8
- template = publishing_renderer.render_file(content.template(format), content, format, params)
9
- result = request_renderer.render_string(template, content, format, params)
10
- end
11
- end # DevelopmentRenderer
12
- end # Render
13
- end # Spontaneous
14
-
@@ -1,19 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- module Spontaneous::Render
4
- class Engine
5
- attr_reader :template_root
6
- attr_accessor :template_class
7
- attr_accessor :context_class
8
-
9
- def initialize(template_root)
10
- @template_root = File.expand_path(template_root)
11
- end
12
-
13
- def render_content(content, format=:html)
14
- context = context_class.new(content, format)
15
- self.render(context)
16
- end
17
- end
18
- end
19
-
@@ -1,5 +0,0 @@
1
- module Spontaneous::Render::Format
2
- class Html < Spontaneous::Render::FormatBase
3
- end
4
- end
5
-
@@ -1,75 +0,0 @@
1
-
2
- module Spontaneous::Render
3
- module Format
4
- def self.for(format)
5
- format_class = nil
6
- begin
7
- format_class = self.const_get("#{format.to_s.camelize}")
8
- rescue NameError => e
9
- # Assume that the missing format is compatilble with the standard HTML
10
- # format in that each page generates a separate, self contained, file
11
- # .. probably true in most cases
12
- format_class = Class.new(Spontaneous::Render::FormatBase)
13
- self.const_set(format.to_s.camelize, format_class)
14
- end
15
- format_class
16
- end
17
-
18
- def self.formats
19
- self.constants.map { |const| const.to_s.downcase.to_sym }
20
- end
21
- end
22
-
23
- class FormatBase
24
- def self.format
25
- @format ||= self.name.demodulize.downcase.to_sym
26
- end
27
-
28
- def initialize(revision, page)
29
- @revision, @page = revision, page
30
- end
31
-
32
- def format
33
- self.class.format
34
- end
35
-
36
- def render
37
- before_render
38
- render_page(@page)
39
- after_render
40
- end
41
-
42
- def before_render; end
43
- def after_render; end
44
-
45
- def render_page(page)
46
- output = page.render(format)
47
- path = output_path(page, output)
48
- File.open(path, 'w') do |f|
49
- f.write(output)
50
- end
51
- end
52
-
53
- def output_path(page, output)
54
- ext = nil
55
- template_dynamic = Spontaneous.template_engine.is_dynamic?(output)
56
- path = Spontaneous::Render.output_path(@revision, page, format, renderer.extension, template_dynamic)
57
-
58
- dir = File.dirname(path)
59
- FileUtils.mkdir_p(dir) unless File.exist?(dir)
60
- path
61
- end
62
-
63
- def revision_root
64
- Spontaneous.revision_dir(@revision)
65
- end
66
-
67
- def renderer
68
- Spontaneous::Render.renderer
69
- end
70
- end
71
- end
72
-
73
- Dir[File.join(File.dirname(__FILE__), 'format', '*.rb')].each do |format|
74
- require format
75
- end
@@ -1,17 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- module Spontaneous::Render::Helpers
4
- module ScriptHelper
5
- extend self
6
-
7
- def script(*args)
8
- scripts = args.flatten
9
- scripts.map do |script|
10
- %(<script type="text/javascript" src="#{script}.js"></script>)
11
- end.join("\n")
12
- end
13
-
14
- alias_method :scripts, :script
15
- end
16
- end
17
-
@@ -1,16 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- module Spontaneous::Render::Helpers
4
- module StylesheetHelper
5
- extend self
6
-
7
- def stylesheet(*args)
8
- stylesheets = args
9
- stylesheets.map do |stylesheet|
10
- %(<link rel="stylesheet" href="#{stylesheet}.css" />)
11
- end.join("\n")
12
- end
13
-
14
- alias_method :stylesheets, :stylesheet
15
- end
16
- end
@@ -1,14 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- module Spontaneous::Render
4
- module Helpers
5
- autoload :StylesheetHelper, 'spontaneous/render/helpers/stylesheet_helper'
6
- autoload :ScriptHelper, 'spontaneous/render/helpers/script_helper'
7
- autoload :HTMLHelper, 'spontaneous/render/helpers/html_helper'
8
-
9
- include StylesheetHelper
10
- include ScriptHelper
11
- include HTMLHelper
12
- end
13
- end
14
-
@@ -1,8 +0,0 @@
1
- # encoding: UTF-8
2
-
3
-
4
- module Spontaneous::Render
5
- module PreviewContext
6
- include Spontaneous::Render::ContextBase
7
- end # PreviewContext
8
- end # Spontaneous::Render
@@ -1,24 +0,0 @@
1
- # encoding: UTF-8
2
-
3
-
4
- module Spontaneous
5
- module Render
6
- class PreviewRenderer < Renderer
7
- def render_content(content, format=:html, params = {})
8
- # render content using first_pass_renderer
9
- # then render this using second_pass_renderer
10
- template = preview_renderer.render_file(content.template(format), content, format, params)
11
- result = request_renderer.render_string(template, content, format, params)
12
-
13
- result
14
- end
15
-
16
- def render_string(template_string, content, format=:html, params = {})
17
- template = preview_renderer.render_string(template_string, content, format, params)
18
- result = request_renderer.render_string(template, content, format, params)
19
- result
20
- end
21
- end # PreviewRenderer
22
- end # Render
23
- end # Spontaneous
24
-
@@ -1,22 +0,0 @@
1
- # encoding: UTF-8
2
-
3
-
4
- module Spontaneous::Render
5
- module PublishContext
6
- include Spontaneous::Render::ContextBase
7
- include Spontaneous::Render::RenderCache
8
-
9
- def root
10
- _with_render_cache("site.root") do
11
- super
12
- end
13
- end
14
-
15
-
16
- def _pages_at_depth(origin_page, depth)
17
- _with_render_cache("pages_at_depth.#{origin_page.id}.#{depth}") do
18
- super
19
- end
20
- end
21
- end # PublishContext
22
- end # Spontaneous::Render
@@ -1,53 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- module Spontaneous
4
- module Render
5
- class PublishedRenderer < Renderer
6
- NGINX_DETECT_HEADER = "X-Nginx"
7
- NGINX_ACCEL_REDIRECT = "X-Accel-Redirect"
8
-
9
- def render_content(content, format=:html, params = {})
10
- request = params[:request]
11
- response = params[:response]
12
- headers = request.env
13
- revision = Content.revision
14
- render = nil
15
-
16
- if Spontaneous.development? and Spontaneous.config.rerender_pages
17
- # in dev mode we just want to render the page dynamically, skipping the cached version
18
- render = rerender(content, format, params)
19
- else
20
- # first test for dynamic template
21
- template = Spontaneous::Render.output_path(revision, content, format, extension, true)
22
-
23
- if File.exists?(template)
24
- render = request_renderer.render_file(template, content, format, params)
25
- else
26
-
27
- # if no dynamic template exists then try for a static file
28
- # this case will normally be handled by the proxy server (nginx, apache...)
29
- # in production environments
30
- template = Spontaneous::Render.output_path(revision, content, format)
31
-
32
- if File.exists?(template)
33
- render = File.open(template)
34
- else
35
- # and if all else fails, just re-render the damn thing
36
- render = rerender(content, format, params)
37
- end
38
- end
39
- end
40
- render
41
- end
42
-
43
- def rerender(content, format = :html, params = {})
44
- template = publishing_renderer.render_file(content.template(format), content, format)
45
- request_renderer.render_string(template, content, format, params)
46
- end
47
-
48
- def render_string(template_string, content, format=:html, params = {})
49
- request_renderer.render_string(template_string, content, format, params)
50
- end
51
- end # PublishedRenderer
52
- end # Render
53
- end # Spontaneous
@@ -1,16 +0,0 @@
1
- # encoding: UTF-8
2
-
3
-
4
- module Spontaneous
5
- module Render
6
- class PublishingRenderer < Renderer
7
- def render_content(content, format=:html, params = {})
8
- publishing_renderer.render_file(content.template(format), content, format, params)
9
- end
10
- def render_string(template_string, content, format=:html, params = {})
11
- publishing_renderer.render_string(template_string, content, format, params)
12
- end
13
- end # PublishingRenderer
14
- end # Render
15
- end # Spontaneous
16
-
@@ -1,26 +0,0 @@
1
- # encoding: UTF-8
2
-
3
-
4
- module Spontaneous::Render
5
- module RenderCache
6
- def _render_cache_value(key)
7
- Spontaneous::Render.render_cache_value(key)
8
- end
9
-
10
- def _render_cache_set_value(key, value)
11
- Spontaneous::Render.render_cache_set_value(key, value)
12
- end
13
-
14
- def _render_cache_key?(key)
15
- Spontaneous::Render.render_cache_key?(key)
16
- end
17
-
18
- def _with_render_cache(key, &value_block)
19
- if _render_cache_key?(key)
20
- self._render_cache_value(key)
21
- else
22
- self._render_cache_set_value(key, yield)
23
- end
24
- end
25
- end # RenderCache
26
- end # Spontaneous::Render
@@ -1,50 +0,0 @@
1
- # encoding: UTF-8
2
-
3
-
4
- module Spontaneous
5
- module Render
6
- class Renderer
7
-
8
- attr_reader :template_root
9
-
10
- def initialize(template_root)
11
- @template_root = template_root
12
- end
13
-
14
- def render_content(content, format=:html, params = {})
15
- # overwrite in subclasses
16
- end
17
-
18
- def render_string(template_string, content, format=:html, params = {})
19
- # overwrite in subclasses
20
- end
21
-
22
- def template_file(filename, format)
23
- Render.template_file(template_root, filename, format)
24
- end
25
-
26
- def extension
27
- Spontaneous.template_engine.extension
28
- end
29
-
30
- # protected
31
-
32
- def preview_renderer
33
- Spontaneous.template_engine.preview_renderer.new(template_root, cache?)
34
- end
35
-
36
- def publishing_renderer
37
- Spontaneous.template_engine.publishing_renderer.new(template_root, cache?)
38
- end
39
-
40
- def request_renderer
41
- Spontaneous.template_engine.request_renderer.new(template_root, cache?)
42
- end
43
-
44
- def cache?
45
- Spontaneous::Render.cache_templates?
46
- end
47
- end # Renderer
48
- end # Render
49
- end # Spontaneous
50
-
@@ -1,8 +0,0 @@
1
- # encoding: UTF-8
2
-
3
-
4
- module Spontaneous::Render
5
- module RequestContext
6
- include Spontaneous::Render::ContextBase
7
- end # RequestContext
8
- end # Spontaneous::Render