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
@@ -9,12 +9,11 @@ class RenderTest < MiniTest::Spec
9
9
 
10
10
  def setup
11
11
  @site = setup_site
12
- @saved_engine_class = Spontaneous::Render.renderer_class
13
12
  end
14
13
 
15
14
  def teardown
16
15
  teardown_site
17
- Spontaneous::Render.renderer_class = @saved_engine_class
16
+ Spontaneous::Output.cache_templates = false
18
17
  end
19
18
 
20
19
  def template_root
@@ -24,15 +23,14 @@ class RenderTest < MiniTest::Spec
24
23
  context "Publish rendering step" do
25
24
  setup do
26
25
  Content.delete
27
- self.template_root = template_root
28
- Spontaneous::Render.renderer_class = Spontaneous::Render::PublishingRenderer
26
+ @site.paths.add(:templates, template_root)
29
27
 
30
28
  class ::Page < Spontaneous::Page
31
29
  field :title
32
30
  box :sections1
33
31
  box :sections2
34
32
  end
35
- class ::TemplateClass < Content
33
+ class ::TemplateClass < Spontaneous::Piece
36
34
  field :title do
37
35
  def to_epub
38
36
  to_html
@@ -50,11 +48,17 @@ class RenderTest < MiniTest::Spec
50
48
  style :this_template
51
49
  style :another_template
52
50
  end
51
+
52
+ @root = ::Page.create(:title => "Home")
53
+ @page = ::Page.create(:title => "Page Title")
54
+
53
55
  @content = TemplateClass.new
54
56
  @content.style.should == TemplateClass.default_style
55
57
  @content.title = "The Title"
56
58
  @content.description = "The Description"
57
- @root = ::Page.create(:title => "Home")
59
+
60
+ @page.sections1 << @content
61
+
58
62
  @section1 = ::Page.new(:title => "Section 1")
59
63
  @section2 = ::Page.new(:title => "Section 2")
60
64
  @section3 = ::Page.new(:title => "Section 3")
@@ -66,6 +70,8 @@ class RenderTest < MiniTest::Spec
66
70
 
67
71
  @root.sections2.entries.last.set_position(0)
68
72
  @root.save.reload
73
+ @renderer = Spontaneous::Output::Template::PublishRenderer.new
74
+ Spontaneous::Output.renderer = @renderer
69
75
  end
70
76
 
71
77
  teardown do
@@ -74,44 +80,42 @@ class RenderTest < MiniTest::Spec
74
80
  end
75
81
 
76
82
  should "render strings correctly" do
77
- S::Render.render_string('#{title} {{ Time.now }}', @content, :html, {}).should == "The Title {{ Time.now }}"
83
+ @renderer.render_string('${title} {{ Time.now }}', @page.output(:html), {}).should == "Page Title {{ Time.now }}"
78
84
  end
79
85
 
80
86
  should "use a cache for the site root" do
81
- S::Render.with_publishing_renderer do
82
- a = S::Render.render_string('#{root.object_id} #{root.object_id}', @content, :html, {})
87
+ a = @renderer.render_string('#{root.object_id} #{root.object_id}', @page.output(:html), {})
83
88
  a.should_not == "#{nil.object_id} #{nil.object_id}"
84
89
  a.split.uniq.length.should == 1
85
- end
86
90
  end
87
91
 
88
92
  should "iterate through the sections" do
89
- template = '%%{ navigation(%s) do |section, active| }#{section.title}/#{active} %%{ end }'
90
- a = S::Render.render_string(template % "", @section1, :html, {})
93
+ template = '%%{ navigation(%s) do |section, active| }${section.title}/${active} %%{ end }'
94
+ a = @renderer.render_string(template % "", @section1.output(:html), {})
91
95
  a.should == "Section 1/true Section 2/false Section 4/false Section 3/false "
92
- a = S::Render.render_string(template % "1", @section2, :html, {})
96
+ a = @renderer.render_string(template % "1", @section2.output(:html), {})
93
97
  a.should == "Section 1/false Section 2/true Section 4/false Section 3/false "
94
- a = S::Render.render_string(template % ":section", @section1, :html, {})
98
+ a = @renderer.render_string(template % ":section", @section1.output(:html), {})
95
99
  a.should == "Section 1/true Section 2/false Section 4/false Section 3/false "
96
100
  end
97
101
 
98
102
  should "use a cache for navigation pages" do
99
103
  a = b = c = nil
100
- template = '%{ navigation do |section, active| }#{section.object_id} %{ end }'
101
- a = S::Render.render_string(template, S::Content[@section1.id], :html, {}).strip
102
- b = S::Render.render_string(template, S::Content[@section1.id], :html, {}).strip
104
+ template = '%{ navigation do |section, active| }${section.object_id} %{ end }'
105
+ renderer = Spontaneous::Output::Template::PreviewRenderer.new
106
+ a = renderer.render_string(template, S::Content[@section1.id].output(:html), {}).strip
107
+ b = renderer.render_string(template, S::Content[@section1.id].output(:html), {}).strip
103
108
  a.should_not == b
104
109
 
105
- S::Render.with_publishing_renderer do
106
- template = '%{ navigation do |section, active| }#{section.object_id} %{ end }'
107
- a = S::Render.render_string(template, S::Content[@section1.id], :html, {}).strip
108
- b = S::Render.render_string(template, S::Content[@section1.id], :html, {}).strip
109
- a.should == b
110
- end
111
- S::Render.with_publishing_renderer do
112
- template = '%{ navigation do |section, active| }#{section.object_id} %{ end }'
113
- c = S::Render.render_string(template, S::Content[@section1.id], :html, {}).strip
114
- end
110
+ renderer = Spontaneous::Output::Template::PublishRenderer.new
111
+ template = '%{ navigation do |section, active| }${section.object_id} %{ end }'
112
+ a = renderer.render_string(template, S::Content[@section1.id].output(:html), {}).strip
113
+ b = renderer.render_string(template, S::Content[@section1.id].output(:html), {}).strip
114
+ a.should == b
115
+
116
+ renderer = Spontaneous::Output::Template::PublishRenderer.new
117
+ template = '%{ navigation do |section, active| }${section.object_id} %{ end }'
118
+ c = renderer.render_string(template, S::Content[@section1.id].output(:html), {}).strip
115
119
  a.should_not == c
116
120
  end
117
121
 
@@ -120,35 +124,42 @@ class RenderTest < MiniTest::Spec
120
124
  end
121
125
 
122
126
  should "be able to render themselves to PDF" do
127
+ Page.add_output :pdf
123
128
  @content.render(:pdf).should == "<PDF><title>The Title</title><body>{The Description}</body></PDF>\n"
124
129
  end
125
130
 
126
131
  should "be able to render themselves to EPUB" do
132
+ Page.add_output :epub
127
133
  @content.render(:epub).should == "<EPUB><title>The Title</title><body>The Description</body></EPUB>\n"
128
134
  end
129
135
 
130
136
  context "piece trees" do
131
137
  setup do
138
+ @page = ::Page.create
132
139
  TemplateClass.style :complex_template, :default => true
133
140
  TemplateClass.box :bits
134
141
  @content = TemplateClass.new
142
+ @page.sections1 << @content
135
143
  @content.title = "The Title"
136
144
  @content.description = "The Description"
137
145
  @child = TemplateClass.new
138
146
  @child.title = "Child Title"
139
147
  @child.description = "Child Description"
140
148
  @content.bits << @child
141
- @content.pieces.first.style = TemplateClass.get_style(:this_template)
149
+ @content.contents.first.style = TemplateClass.get_style(:this_template)
142
150
  end
151
+
143
152
  teardown do
144
153
  Content.delete
145
154
  end
146
155
 
147
156
  should "be accessible through #content method" do
148
- @content.render.should == "<complex>\nThe Title\n<piece><html><title>Child Title</title><body>Child Description</body></html>\n</piece>\n</complex>\n"
157
+ expected = "<complex>\nThe Title\n<piece><html><title>Child Title</title><body>Child Description</body></html>\n</piece>\n</complex>\n"
158
+ @content.render.should == expected
149
159
  end
150
160
 
151
161
  should "cascade the chosen format to all subsequent #render calls" do
162
+ ::Page.add_output :pdf
152
163
  @content.render(:pdf).should == "<pdf>\nThe Title\n<piece><PDF><title>Child Title</title><body>{Child Description}</body></PDF>\n</piece>\n</pdf>\n"
153
164
  end
154
165
 
@@ -167,9 +178,11 @@ class RenderTest < MiniTest::Spec
167
178
  setup do
168
179
  TemplateClass.style :slots_template, :default => true
169
180
  TemplateClass.box :images
181
+ @page = ::Page.new
170
182
  @content = TemplateClass.new
171
183
  @content.title = "The Title"
172
184
  @content.description = "The Description"
185
+ @page.sections1 << @content
173
186
  @child = TemplateClass.new
174
187
  @child.title = "Child Title"
175
188
  @child.description = "Child Description"
@@ -181,6 +194,7 @@ class RenderTest < MiniTest::Spec
181
194
  @content.render.should == "<boxes>\n <img><html><title>Child Title</title><body>Child Description</body></html>\n</img>\n</boxes>\n"
182
195
  end
183
196
  should "render boxes to alternate formats" do
197
+ ::Page.add_output :pdf
184
198
  @content.render(:pdf).should == "<boxes-pdf>\n <img><PDF><title>Child Title</title><body>{Child Description}</body></PDF>\n</img>\n</boxes-pdf>\n"
185
199
  end
186
200
  end
@@ -196,7 +210,9 @@ class RenderTest < MiniTest::Spec
196
210
  AnImage.field :title
197
211
  AnImage.template '<img>#{title}</img>'
198
212
 
213
+ @page = ::Page.new
199
214
  @root = TemplateClass.new
215
+ @page.sections1 << @root
200
216
  @root.images.introduction = "Images below:"
201
217
  @image1 = AnImage.new
202
218
  @image1.title = "Image 1"
@@ -204,6 +220,7 @@ class RenderTest < MiniTest::Spec
204
220
  @image2.title = "Image 2"
205
221
  @root.images << @image1
206
222
  @root.images << @image2
223
+
207
224
  end
208
225
 
209
226
  teardown do
@@ -226,7 +243,9 @@ class RenderTest < MiniTest::Spec
226
243
  AnImage.field :title
227
244
  AnImage.template '<img>#{title}</img>'
228
245
 
246
+ @page = ::Page.create
229
247
  @root = TemplateClass.new
248
+ @page.sections1 << @root
230
249
  @root.images_with_template.introduction = "Images below:"
231
250
  @image1 = AnImage.new
232
251
  @image1.title = "Image 1"
@@ -241,7 +260,7 @@ class RenderTest < MiniTest::Spec
241
260
  end
242
261
 
243
262
  should "render using default style if present" do
244
- @root.render.should == "<root>\nImages below:\n<images>\n <img>Image 1</img>\n <img>Image 2</img>\n</images>\n\n</root>\n"
263
+ @root.render.should == "<root>\nImages below:\n<images>\n <img>Image 1</img>\n <img>Image 2</img>\n</images>\n</root>\n"
245
264
  end
246
265
  end
247
266
 
@@ -250,8 +269,6 @@ class RenderTest < MiniTest::Spec
250
269
  class ::PageClass < Page
251
270
  field :title, :string
252
271
  end
253
- # PageClass.box :things
254
- # PageClass.style :inline_style
255
272
  PageClass.layout :subdir_style
256
273
  PageClass.layout :standard_page
257
274
  @parent = PageClass.new
@@ -279,7 +296,6 @@ class RenderTest < MiniTest::Spec
279
296
  class ::PageClass < Page
280
297
  field :title, :string
281
298
  end
282
- # class ::PieceClass < Piece; end
283
299
  PageClass.box :things
284
300
  PageClass.layout :page_style
285
301
  PageClass.style :inline_style
@@ -297,25 +313,25 @@ class RenderTest < MiniTest::Spec
297
313
  end
298
314
 
299
315
  should "use style assigned by entry" do
300
- @parent.pieces.first.style.should == PageClass.default_style
316
+ @parent.contents.first.style.should == PageClass.default_style
301
317
  @parent.things.first.style.should == PageClass.default_style
302
318
  end
303
319
 
304
320
  should "use their default page style when accessed directly" do
305
321
  @page = PageClass[@page.id]
306
322
  @page.layout.should == PageClass.default_layout
307
- assert_correct_template(@parent, 'layouts/page_style')
323
+ assert_correct_template(@parent, template_root / 'layouts/page_style')
308
324
  @page.render.should == "<html></html>\n"
309
325
  end
310
326
 
311
327
  should "persist sub-page style settings" do
312
328
  @parent = Page[@parent.id]
313
- @parent.pieces.first.style.should == PageClass.default_style
329
+ @parent.contents.first.style.should == PageClass.default_style
314
330
  end
315
331
 
316
332
  should "render using the inline style" do
317
- assert_correct_template(@parent.pieces.first, 'page_class/inline_style')
318
- @parent.pieces.first.render.should == "Child\n"
333
+ assert_correct_template(@parent.contents.first, template_root / 'page_class/inline_style')
334
+ @parent.contents.first.render.should == "Child\n"
319
335
  @parent.things.render.should == "Child\n"
320
336
  @parent.render.should == "<html>Child\n</html>\n"
321
337
  end
@@ -341,7 +357,7 @@ class RenderTest < MiniTest::Spec
341
357
 
342
358
  context "Request rendering" do
343
359
  setup do
344
- self.template_root = template_root
360
+ @site.paths.add(:templates, template_root)
345
361
 
346
362
  class ::PreviewRender < Page
347
363
  field :title, :string
@@ -350,7 +366,6 @@ class RenderTest < MiniTest::Spec
350
366
  PreviewRender.box :images
351
367
  PreviewRender.field :description, :markdown
352
368
  @page = PreviewRender.new(:title => "PAGE", :description => "DESCRIPTION")
353
- # @page.stubs(:id).returns(24)
354
369
  @page.save
355
370
  @session = ::Rack::MockSession.new(::Sinatra::Application)
356
371
  end
@@ -361,29 +376,31 @@ class RenderTest < MiniTest::Spec
361
376
 
362
377
  context "Preview render" do
363
378
  setup do
364
- Spontaneous::Render.renderer_class = Spontaneous::Render::PreviewRenderer
379
+ @renderer = Spontaneous::Output::Template::PreviewRenderer.new
380
+ Spontaneous::Output.renderer = @renderer
365
381
  PreviewRender.layout :preview_render
366
382
  end
367
383
 
368
- should "something" do
384
+ should "output both publish & request tags" do
369
385
  @now = Time.now
370
386
  ::Time.stubs(:now).returns(@now)
371
- S::Render.render_string('#{title} {{ Time.now }}', @page, :html, {}).should == "PAGE #{@now.to_s}"
372
- end
373
-
374
- should "render all tags & include preview edit markers" do
375
- @page.render.should == <<-HTML
376
- PAGE <p>DESCRIPTION</p>
377
-
378
- <!-- spontaneous:previewedit:start:box id:#{@page.images.schema_id} -->
379
- <!-- spontaneous:previewedit:end:box id:#{@page.images.schema_id} -->
380
-
381
- HTML
382
- end
387
+ @renderer.render_string('${title} {{ Time.now }}', @page.output(:html), {}).should == "PAGE #{@now.to_s}"
388
+ end
389
+
390
+ # should "render all tags & include preview edit markers" do
391
+ # @page.render.should == <<-HTML
392
+ # PAGE <p>DESCRIPTION</p>
393
+ #
394
+ # <!-- spontaneous:previewedit:start:box id:#{@page.images.schema_id} -->
395
+ # <!-- spontaneous:previewedit:end:box id:#{@page.images.schema_id} -->
396
+ #
397
+ # HTML
398
+ # end
383
399
  end
384
400
  context "Request rendering" do
385
401
  setup do
386
- Spontaneous::Render.renderer_class = Spontaneous::Render::PreviewRenderer
402
+ @renderer = Spontaneous::Output::Template::PreviewRenderer.new
403
+ Spontaneous::Output.renderer = @renderer
387
404
  PreviewRender.layout :params
388
405
  end
389
406
 
@@ -398,7 +415,8 @@ PAGE <p>DESCRIPTION</p>
398
415
 
399
416
  context "entry parameters" do
400
417
  setup do
401
- Spontaneous::Render.renderer_class = Spontaneous::Render::PublishingRenderer
418
+ @renderer = Spontaneous::Output::Template::PreviewRenderer.new
419
+ Spontaneous::Output.renderer = @renderer
402
420
  PreviewRender.layout :entries
403
421
  @first = PreviewRender.new(:title => "first")
404
422
  @second = PreviewRender.new(:title => "second")
@@ -413,21 +431,56 @@ PAGE <p>DESCRIPTION</p>
413
431
  end
414
432
  end
415
433
 
416
- context "Published rendering" do
434
+ context "Publishing renderer" do
417
435
  setup do
418
- @file = ::File.expand_path("../../fixtures/templates/direct.html.cut", __FILE__)
419
- @root = ::File.expand_path("../../fixtures/templates/", __FILE__)
420
- File.exists?(@file).should be_true
436
+ Spontaneous::Output.write_compiled_scripts = true
437
+ @temp_template_root = @site.root / "templates"
438
+ FileUtils.mkdir_p(@temp_template_root)
439
+ FileUtils.mkdir_p(@temp_template_root / "layouts")
440
+ @site.paths.add(:templates, @temp_template_root)
441
+
442
+ @renderer = Spontaneous::Output::Template::PublishRenderer.new(true)
443
+ Spontaneous::Output.renderer = @renderer
444
+
445
+ @template_path = @temp_template_root / "layouts/standard.html.cut"
446
+ @compiled_path = @temp_template_root / "layouts/standard.html.rb"
447
+ File.open(@template_path, "w") do |t|
448
+ t.write("template")
449
+ end
450
+ File.open(@compiled_path, "w") do |t|
451
+ t.write("@__buf << 'compiled'")
452
+ end
453
+ later = Time.now + 10
454
+ File.utime(later, later, @compiled_path)
455
+ template_mtime = File.mtime(@template_path)
456
+ compiled_mtime = File.mtime(@compiled_path)
457
+ assert compiled_mtime > template_mtime, "Compiled file should register as newer"
458
+ @first = PreviewRender.new(:title => "first")
459
+ @first.save
421
460
  end
422
- should "Use file directly if it exists" do
423
- result = Spontaneous.template_engine.request_renderer.new(@root).render_file(@file, nil)
424
- result.should == "correct\n"
461
+
462
+ should "ignore compiled template file if it is older than the template" do
463
+ @first.render.should == "compiled"
464
+ File.open(@temp_template_root / "layouts/standard.html.cut", "w") do |t|
465
+ t.write("updated template")
466
+ end
467
+ later = Time.now + 1000
468
+ File.utime(later, later, @template_path)
469
+ template_mtime = File.mtime(@template_path)
470
+ compiled_mtime = File.mtime(@compiled_path)
471
+ assert template_mtime > compiled_mtime, "Template file should register as newer"
472
+ # Need to use a new renderer because the existing one will have cached the compiled template
473
+ @renderer = Spontaneous::Output::Template::PublishRenderer.new
474
+ Spontaneous::Output.renderer = @renderer
475
+ @first.render.should == "updated template"
425
476
  end
426
477
  end
427
478
 
428
- context "variables in templates" do
479
+ context "variables in render command" do
429
480
  setup do
430
- Spontaneous::Render.renderer_class = Spontaneous::Render::PublishingRenderer
481
+ @renderer = Spontaneous::Output::Template::PublishRenderer.new
482
+ Spontaneous::Output.renderer = @renderer
483
+
431
484
  PreviewRender.layout :variables
432
485
  PreviewRender.style :variables
433
486
 
@@ -442,6 +495,4 @@ PAGE <p>DESCRIPTION</p>
442
495
  end
443
496
  end
444
497
  end
445
-
446
498
  end
447
-