spontaneous 0.2.0.beta1 → 0.2.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (335) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +24 -0
  3. data/.locat +42 -0
  4. data/.travis/gemfiles/Gemfile.empty +7 -0
  5. data/.travis.yml +18 -0
  6. data/Gemfile +12 -8
  7. data/LICENSE +1 -1
  8. data/Rakefile +15 -157
  9. data/Readme.markdown +1 -1
  10. data/application/css/core.css.scss +22 -146
  11. data/application/css/definitions.css.scss +7 -3
  12. data/application/css/dialogue.css.scss +26 -1
  13. data/application/css/editing.css.scss +70 -28
  14. data/application/css/font.css.scss +1 -1
  15. data/application/css/popover.css.scss +2 -0
  16. data/application/css/top.css.scss +231 -0
  17. data/application/js/add_alias_dialogue.js +1 -1
  18. data/application/js/add_home_dialogue.js +1 -1
  19. data/application/js/ajax.js +61 -31
  20. data/application/js/box.js +4 -4
  21. data/application/js/conflicted_field_dialogue.js +1 -1
  22. data/application/js/content.js +5 -5
  23. data/application/js/dom.js +5 -0
  24. data/application/js/edit_panel.js +1 -0
  25. data/application/js/editing.js +1 -1
  26. data/application/js/extensions.js +8 -0
  27. data/application/js/field/boolean.js +31 -0
  28. data/application/js/field/file.js +32 -4
  29. data/application/js/field/image.js +24 -9
  30. data/application/js/field/markdown.js +87 -59
  31. data/application/js/field/select.js +1 -1
  32. data/application/js/field/webvideo.js +6 -1
  33. data/application/js/init.js +2 -2
  34. data/application/js/jquery-selection-position.js +130 -0
  35. data/application/js/location.js +4 -25
  36. data/application/js/meta_view/user_admin.js +2 -2
  37. data/application/js/metadata.js +2 -2
  38. data/application/js/page_browser.js +1 -1
  39. data/application/js/panel/root_menu.js +0 -1
  40. data/application/js/popover.js +27 -12
  41. data/application/js/popover_view.js +20 -4
  42. data/application/js/preview.js +31 -16
  43. data/application/js/progress.js +22 -21
  44. data/application/js/publish.js +18 -7
  45. data/application/js/sharded_upload.js +9 -6
  46. data/application/js/spontaneous.js +3 -1
  47. data/application/js/top_bar.js +264 -173
  48. data/application/js/upload.js +12 -5
  49. data/application/js/upload_manager.js +4 -3
  50. data/application/js/user.js +1 -2
  51. data/application/js/views/box_view.js +1 -1
  52. data/application/js/views/page_view.js +16 -5
  53. data/application/js/views/piece_view.js +5 -4
  54. data/application/static/font/fontawesome-webfont-1c66a4738b40ef0f6b1abca0ba9a796d.ttf +0 -0
  55. data/application/views/index.erb +6 -14
  56. data/application/views/login.erb +6 -25
  57. data/application/views/schema_modification_error.html.erb +3 -7
  58. data/db/migrations/20130114120000_create_revision_tables.rb +2 -2
  59. data/db/migrations/20130813111009_increase_path_length.rb +14 -0
  60. data/gem-public_cert.pem +20 -0
  61. data/lib/spontaneous/asset/app_compiler.rb +44 -0
  62. data/lib/spontaneous/asset/environment.rb +225 -0
  63. data/lib/spontaneous/asset.rb +2 -67
  64. data/lib/spontaneous/box.rb +0 -1
  65. data/lib/spontaneous/capistrano/deploy.rb +2 -2
  66. data/lib/spontaneous/capistrano/sync.rb +1 -1
  67. data/lib/spontaneous/cli/init.rb +36 -13
  68. data/lib/spontaneous/cli/server.rb +0 -1
  69. data/lib/spontaneous/cli/site.rb +2 -1
  70. data/lib/spontaneous/cli.rb +3 -1
  71. data/lib/spontaneous/collections/entry_set.rb +4 -12
  72. data/lib/spontaneous/collections/hash_with_fallback.rb +20 -0
  73. data/lib/spontaneous/collections/prototype_set.rb +6 -5
  74. data/lib/spontaneous/crypt.rb +2 -2
  75. data/lib/spontaneous/data_mapper/content_model/associations.rb +115 -63
  76. data/lib/spontaneous/data_mapper.rb +1 -1
  77. data/lib/spontaneous/errors.rb +6 -0
  78. data/lib/spontaneous/extensions/object_space.rb +6 -0
  79. data/lib/spontaneous/facet.rb +1 -0
  80. data/lib/spontaneous/field/base.rb +86 -13
  81. data/lib/spontaneous/field/boolean.rb +65 -0
  82. data/lib/spontaneous/field/file.rb +17 -6
  83. data/lib/spontaneous/field/html.rb +13 -0
  84. data/lib/spontaneous/field/image/size.rb +76 -0
  85. data/lib/spontaneous/field/image.rb +99 -414
  86. data/lib/spontaneous/field/tags.rb +36 -0
  87. data/lib/spontaneous/field/update.rb +1 -1
  88. data/lib/spontaneous/field/webvideo/fallback.rb +41 -0
  89. data/lib/spontaneous/field/webvideo/vimeo.rb +113 -0
  90. data/lib/spontaneous/field/webvideo/vine.rb +94 -0
  91. data/lib/spontaneous/field/webvideo/youtube.rb +133 -0
  92. data/lib/spontaneous/field/webvideo.rb +100 -250
  93. data/lib/spontaneous/field.rb +1 -1
  94. data/lib/spontaneous/generators/site/Gemfile.tt +5 -14
  95. data/lib/spontaneous/generators/site/assets/README.md +20 -0
  96. data/lib/spontaneous/generators/site/assets/css/site.scss +8 -0
  97. data/lib/spontaneous/generators/site/assets/js/site.js +6 -0
  98. data/lib/spontaneous/generators/site/config/deploy.rb.tt +9 -0
  99. data/lib/spontaneous/generators/site/config/user_levels.yml +14 -3
  100. data/lib/spontaneous/generators/site/public/README.md +12 -0
  101. data/lib/spontaneous/generators/site/templates/layouts/standard.html.cut.tt +2 -2
  102. data/lib/spontaneous/generators/site.rb +77 -35
  103. data/lib/spontaneous/layout.rb +6 -7
  104. data/lib/spontaneous/loader.rb +21 -13
  105. data/lib/spontaneous/media/file.rb +22 -9
  106. data/lib/spontaneous/media/image/attributes.rb +33 -0
  107. data/lib/spontaneous/media/image/format/gif.rb +4 -0
  108. data/lib/spontaneous/media/image/format/jpg.rb +17 -0
  109. data/lib/spontaneous/media/image/format/png.rb +4 -0
  110. data/lib/spontaneous/media/image/format/webp.rb +26 -0
  111. data/lib/spontaneous/media/image/format.rb +79 -0
  112. data/lib/spontaneous/media/image/optimizer.rb +69 -0
  113. data/lib/spontaneous/media/image/processor.rb +17 -0
  114. data/lib/spontaneous/media/image/renderable.rb +52 -0
  115. data/lib/spontaneous/media/image/skeptick.rb +70 -0
  116. data/lib/spontaneous/media/image.rb +50 -0
  117. data/lib/spontaneous/media/temp_file.rb +4 -0
  118. data/lib/spontaneous/media.rb +1 -0
  119. data/lib/spontaneous/model/core/aliases.rb +14 -8
  120. data/lib/spontaneous/model/core/boxes.rb +5 -2
  121. data/lib/spontaneous/model/core/entries.rb +4 -0
  122. data/lib/spontaneous/model/core/entry.rb +1 -0
  123. data/lib/spontaneous/model/core/fields.rb +5 -2
  124. data/lib/spontaneous/model/core/locks.rb +16 -0
  125. data/lib/spontaneous/model/core/media.rb +1 -15
  126. data/lib/spontaneous/model/core.rb +31 -1
  127. data/lib/spontaneous/model/page/controllers.rb +2 -2
  128. data/lib/spontaneous/model/page/formats.rb +1 -4
  129. data/lib/spontaneous/model/page/layouts.rb +6 -2
  130. data/lib/spontaneous/model/page/locks.rb +8 -2
  131. data/lib/spontaneous/model/page/page_tree.rb +2 -2
  132. data/lib/spontaneous/model/page/paths.rb +74 -9
  133. data/lib/spontaneous/model/page.rb +11 -3
  134. data/lib/spontaneous/model.rb +6 -6
  135. data/lib/spontaneous/output/context/render_cache.rb +23 -0
  136. data/lib/spontaneous/output/context.rb +56 -30
  137. data/lib/spontaneous/output/helpers/script_helper.rb +9 -53
  138. data/lib/spontaneous/output/helpers/stylesheet_helper.rb +8 -40
  139. data/lib/spontaneous/output/template/renderer.rb +17 -5
  140. data/lib/spontaneous/output.rb +0 -1
  141. data/lib/spontaneous/paths.rb +6 -2
  142. data/lib/spontaneous/permissions/access_key.rb +18 -0
  143. data/lib/spontaneous/permissions/user.rb +1 -1
  144. data/lib/spontaneous/permissions.rb +4 -1
  145. data/lib/spontaneous/plugins/application/state.rb +19 -12
  146. data/lib/spontaneous/prototypes/field_prototype.rb +14 -8
  147. data/lib/spontaneous/published_revision.rb +7 -0
  148. data/lib/spontaneous/publishing/immediate.rb +43 -34
  149. data/lib/spontaneous/publishing/revision.rb +9 -6
  150. data/lib/spontaneous/rack/asset_server.rb +20 -0
  151. data/lib/spontaneous/rack/back/alias.rb +46 -0
  152. data/lib/spontaneous/rack/back/application_assets.rb +28 -0
  153. data/lib/spontaneous/rack/back/base.rb +34 -0
  154. data/lib/spontaneous/rack/back/changes.rb +19 -0
  155. data/lib/spontaneous/rack/back/content.rb +54 -0
  156. data/lib/spontaneous/rack/back/events.rb +38 -0
  157. data/lib/spontaneous/rack/back/field.rb +37 -0
  158. data/lib/spontaneous/rack/back/file.rb +118 -0
  159. data/lib/spontaneous/rack/back/helpers.rb +71 -0
  160. data/lib/spontaneous/rack/back/index.rb +16 -0
  161. data/lib/spontaneous/rack/back/login.rb +47 -0
  162. data/lib/spontaneous/rack/back/map.rb +24 -0
  163. data/lib/spontaneous/rack/back/page.rb +46 -0
  164. data/lib/spontaneous/rack/back/preview.rb +43 -0
  165. data/lib/spontaneous/rack/back/schema.rb +30 -0
  166. data/lib/spontaneous/rack/back/site.rb +25 -0
  167. data/lib/spontaneous/rack/back/site_assets.rb +13 -0
  168. data/lib/spontaneous/rack/back/unsupported_browser.rb +7 -0
  169. data/lib/spontaneous/rack/{user_admin.rb → back/user_admin.rb} +2 -5
  170. data/lib/spontaneous/rack/back.rb +85 -764
  171. data/lib/spontaneous/rack/cacheable_file.rb +3 -3
  172. data/lib/spontaneous/rack/front.rb +16 -9
  173. data/lib/spontaneous/rack/middleware/authenticate.rb +65 -0
  174. data/lib/spontaneous/rack/middleware/csrf.rb +66 -0
  175. data/lib/spontaneous/rack/middleware/reloader.rb +52 -0
  176. data/lib/spontaneous/rack/middleware/scope.rb +60 -0
  177. data/lib/spontaneous/rack/middleware.rb +6 -0
  178. data/lib/spontaneous/rack/page_controller.rb +18 -5
  179. data/lib/spontaneous/rack/public.rb +17 -11
  180. data/lib/spontaneous/rack.rb +34 -24
  181. data/lib/spontaneous/revision.rb +29 -2
  182. data/lib/spontaneous/schema/uid.rb +4 -3
  183. data/lib/spontaneous/schema/uid_map.rb +5 -24
  184. data/lib/spontaneous/schema.rb +1 -0
  185. data/lib/spontaneous/search/database.rb +8 -0
  186. data/lib/spontaneous/search/field.rb +1 -1
  187. data/lib/spontaneous/search/index.rb +3 -5
  188. data/lib/spontaneous/server.rb +1 -1
  189. data/lib/spontaneous/simultaneous.rb +1 -1
  190. data/lib/spontaneous/site/features.rb +4 -5
  191. data/lib/spontaneous/site/helpers.rb +22 -5
  192. data/lib/spontaneous/site/instance.rb +2 -2
  193. data/lib/spontaneous/site/selectors.rb +22 -3
  194. data/lib/spontaneous/storage/cloud.rb +13 -9
  195. data/lib/spontaneous/storage/local.rb +11 -6
  196. data/lib/spontaneous/style.rb +40 -23
  197. data/lib/spontaneous/utils/database/mysql_dumper.rb +1 -1
  198. data/lib/spontaneous/utils/smush_it.rb +1 -1
  199. data/lib/spontaneous/version.rb +1 -1
  200. data/lib/spontaneous.rb +35 -33
  201. data/spontaneous.gemspec +53 -787
  202. data/test/experimental/test_crypt.rb +56 -56
  203. data/test/experimental/test_features.rb +16 -27
  204. data/test/fixtures/assets/public1/css/data.css.scss +3 -0
  205. data/test/fixtures/assets/public1/css/image1.css.scss +4 -0
  206. data/test/fixtures/assets/public1/css/import.css.scss +1 -0
  207. data/test/fixtures/assets/public1/css/urlhash.css.scss +3 -0
  208. data/test/fixtures/assets/public1/js/a.js +1 -1
  209. data/test/fixtures/assets/public1/js/all.js +4 -0
  210. data/test/fixtures/assets/public1/js/{m.coffee → m.js.coffee} +1 -0
  211. data/test/fixtures/assets/public1/x.js +1 -0
  212. data/test/fixtures/assets/public2/css/all.css +4 -0
  213. data/test/fixtures/assets/public2/css/missing.css.scss +3 -0
  214. data/test/fixtures/assets/public2/i/y.png +0 -0
  215. data/test/fixtures/assets/public2/js/b.js +1 -1
  216. data/test/fixtures/assets/public2/js/c.js +1 -1
  217. data/test/fixtures/images/size.extended.webp +0 -0
  218. data/test/fixtures/images/size.lossless.webp +0 -0
  219. data/test/fixtures/images/size.lossy.webp +0 -0
  220. data/test/fixtures/schema/before.yml +4 -4
  221. data/test/fixtures/schema/schema.yml +1 -1
  222. data/test/fixtures/templates/aliases/aaa.html.cut +0 -0
  223. data/test/fixtures/templates/extended/partial_with_renderer.html.cut +1 -0
  224. data/test/fixtures/templates/extended/with_includes_and_renderer.html.cut +2 -0
  225. data/test/functional/test_application.rb +108 -106
  226. data/test/functional/test_back.rb +924 -930
  227. data/test/functional/test_front.rb +285 -238
  228. data/test/functional/test_user_manager.rb +75 -100
  229. data/test/integration/test_installation.rb +1 -1
  230. data/test/support/matchers.rb +12 -0
  231. data/test/support/minitest.rb +121 -0
  232. data/test/support/rack.rb +45 -0
  233. data/test/support/test_start_finish.rb +103 -0
  234. data/test/test_helper.rb +21 -68
  235. data/test/test_integration_helper.rb +1 -3
  236. data/test/unit/test_alias.rb +432 -408
  237. data/test/unit/test_asset_bundler.rb +58 -58
  238. data/test/unit/test_assets.rb +485 -155
  239. data/test/unit/test_async.rb +16 -37
  240. data/test/unit/test_authentication.rb +425 -457
  241. data/test/unit/test_boxes.rb +191 -191
  242. data/test/unit/test_changesets.rb +244 -254
  243. data/test/unit/test_config.rb +128 -142
  244. data/test/unit/test_content.rb +313 -359
  245. data/test/unit/test_content_inheritance.rb +29 -30
  246. data/test/unit/test_datamapper.rb +1205 -1080
  247. data/test/unit/test_datamapper_content.rb +49 -51
  248. data/test/unit/test_extensions.rb +23 -23
  249. data/test/unit/test_fields.rb +1488 -1180
  250. data/test/unit/test_formats.rb +158 -158
  251. data/test/unit/test_generators.rb +98 -40
  252. data/test/unit/test_helpers.rb +73 -76
  253. data/test/unit/test_image_size.rb +53 -22
  254. data/test/unit/test_images.rb +164 -165
  255. data/test/unit/test_layouts.rb +133 -122
  256. data/test/unit/test_logger.rb +14 -17
  257. data/test/unit/test_media.rb +69 -84
  258. data/test/unit/test_modifications.rb +513 -525
  259. data/test/unit/test_page.rb +462 -361
  260. data/test/unit/test_permissions.rb +379 -364
  261. data/test/unit/test_piece.rb +67 -75
  262. data/test/unit/test_plugins.rb +82 -89
  263. data/test/unit/test_prototype_set.rb +215 -216
  264. data/test/unit/test_prototypes.rb +114 -124
  265. data/test/unit/test_publishing.rb +252 -289
  266. data/test/unit/test_render.rb +167 -115
  267. data/test/unit/test_revisions.rb +436 -444
  268. data/test/unit/test_schema.rb +339 -309
  269. data/test/unit/test_search.rb +577 -574
  270. data/test/unit/test_serialisation.rb +136 -147
  271. data/test/unit/test_site.rb +252 -227
  272. data/test/unit/test_skeptick.rb +130 -0
  273. data/test/unit/test_storage.rb +46 -40
  274. data/test/unit/test_structure.rb +57 -66
  275. data/test/unit/test_styles.rb +104 -104
  276. data/test/unit/test_templates.rb +72 -57
  277. data/test/unit/test_type_hierarchy.rb +15 -16
  278. data/test/unit/test_visibility.rb +239 -257
  279. metadata +455 -326
  280. data/application/js/vendor/JS.Class-2.1.5/CHANGELOG +0 -283
  281. data/application/js/vendor/JS.Class-2.1.5/MIT-LICENSE +0 -30
  282. data/application/js/vendor/JS.Class-2.1.5/README +0 -30
  283. data/application/js/vendor/JS.Class-2.1.5/min/command.js +0 -1
  284. data/application/js/vendor/JS.Class-2.1.5/min/comparable.js +0 -1
  285. data/application/js/vendor/JS.Class-2.1.5/min/constant_scope.js +0 -1
  286. data/application/js/vendor/JS.Class-2.1.5/min/decorator.js +0 -1
  287. data/application/js/vendor/JS.Class-2.1.5/min/enumerable.js +0 -1
  288. data/application/js/vendor/JS.Class-2.1.5/min/forwardable.js +0 -1
  289. data/application/js/vendor/JS.Class-2.1.5/min/hash.js +0 -1
  290. data/application/js/vendor/JS.Class-2.1.5/min/linked_list.js +0 -1
  291. data/application/js/vendor/JS.Class-2.1.5/min/loader.js +0 -1
  292. data/application/js/vendor/JS.Class-2.1.5/min/method_chain.js +0 -1
  293. data/application/js/vendor/JS.Class-2.1.5/min/observable.js +0 -1
  294. data/application/js/vendor/JS.Class-2.1.5/min/package.js +0 -1
  295. data/application/js/vendor/JS.Class-2.1.5/min/proxy.js +0 -1
  296. data/application/js/vendor/JS.Class-2.1.5/min/ruby.js +0 -1
  297. data/application/js/vendor/JS.Class-2.1.5/min/set.js +0 -1
  298. data/application/js/vendor/JS.Class-2.1.5/min/stack_trace.js +0 -1
  299. data/application/js/vendor/JS.Class-2.1.5/min/state.js +0 -1
  300. data/application/js/vendor/JS.Class-2.1.5/min/stdlib.js +0 -16
  301. data/application/js/vendor/jquery-1.6.2.min.js +0 -18
  302. data/application/js/vendor/jquery-ui-1.8.16.custom.min.js +0 -791
  303. data/application/js/vendor/jquery-ui-1.8.9.custom.min.js +0 -415
  304. data/application/static/font/fontawesome-webfont-5c5c21100a346972a82c34c5e96ffcfe.ttf +0 -0
  305. data/application/static/select-arrow-6e7dd3745b00e934b0d7a3250c46558b.png +0 -0
  306. data/bin/limit-upload +0 -5
  307. data/bin/unlimit-upload +0 -3
  308. data/lib/spontaneous/asset/file.rb +0 -25
  309. data/lib/spontaneous/asset/source.rb +0 -28
  310. data/lib/spontaneous/image_size.rb +0 -123
  311. data/lib/spontaneous/output/assets/compression.rb +0 -58
  312. data/lib/spontaneous/output/assets.rb +0 -32
  313. data/lib/spontaneous/rack/around_back.rb +0 -20
  314. data/lib/spontaneous/rack/around_front.rb +0 -27
  315. data/lib/spontaneous/rack/around_preview.rb +0 -22
  316. data/lib/spontaneous/rack/assets.rb +0 -126
  317. data/lib/spontaneous/rack/authentication.rb +0 -20
  318. data/lib/spontaneous/rack/cookie_authentication.rb +0 -38
  319. data/lib/spontaneous/rack/helpers.rb +0 -52
  320. data/lib/spontaneous/rack/http.rb +0 -18
  321. data/lib/spontaneous/rack/media.rb +0 -30
  322. data/lib/spontaneous/rack/query_authentication.rb +0 -35
  323. data/lib/spontaneous/rack/reloader.rb +0 -45
  324. data/lib/spontaneous/rack/user_helpers.rb +0 -28
  325. /data/{README → application/js/field/markdown/text_command.js} +0 -0
  326. /data/application/js/vendor/{JS.Class-2.1.5/min/core.js → js.class-2.1.5.min.js} +0 -0
  327. /data/test/fixtures/assets/public1/css/{a.scss → a.css.scss} +0 -0
  328. /data/{lib/spontaneous/generators/site/public/css/site.scss → test/fixtures/assets/public1/x.css} +0 -0
  329. /data/{lib/spontaneous/generators/site/public/js/.empty_directory → test/fixtures/assets/public1/x.png} +0 -0
  330. /data/test/fixtures/assets/public2/css/{b.scss → b.css.scss} +0 -0
  331. /data/test/fixtures/assets/public2/js/{n.coffee → n.js.coffee} +0 -0
  332. /data/test/fixtures/back/{public → assets}/css/sass_include.scss +0 -0
  333. /data/test/fixtures/back/{public → assets}/css/sass_template.scss +0 -0
  334. /data/test/fixtures/back/{public → assets}/js/coffeescript.coffee +0 -0
  335. /data/{lib/spontaneous/generators/site/public/js/site.js → test/fixtures/templates/aliases/aa_alias.html.cut} +0 -0
@@ -8,13 +8,14 @@ Spontaneous.UploadManager = (function($, S) {
8
8
  start: function() {
9
9
  var form = new FormData();
10
10
  form.append('file', this.file);
11
- this.post(["/file/wrap", this.target_id].join('/'), form);
11
+ this.post(["/file", this.target_id].join('/'), form);
12
12
  }
13
13
  });
14
14
  var ShardedWrapUpload = new JS.Class(S.ShardedUpload, {
15
15
  path: function() {
16
- return ["/shard/wrap", this.target_id].join('/');
16
+ return ["/shard", this.target_id].join('/');
17
17
  },
18
+ method: "POST"
18
19
  });
19
20
  var FormUpload = new JS.Class(Upload, {
20
21
  initialize: function(manager, target, form_data, size) {
@@ -24,7 +25,7 @@ Spontaneous.UploadManager = (function($, S) {
24
25
  this.name = "Saving...";
25
26
  },
26
27
  start: function() {
27
- this.post(this.target.save_path(), this.form_data);
28
+ this.put(this.target.save_path(), this.form_data);
28
29
  }
29
30
  });
30
31
  var UploadManager = {
@@ -35,10 +35,9 @@ Spontaneous.User = (function($, S) {
35
35
  this.set('user', this.user);
36
36
  },
37
37
  logout: function() {
38
- ajax.post("/logout", {}, function() {
38
+ ajax.del("/logout", {}, function() {
39
39
  // S.Ajax.unauthorized();
40
40
  });
41
- S.Auth.Key.remove(S.site_id);
42
41
  },
43
42
  name: function() { return this.user.name(); },
44
43
  email: function() { return this.user.email(); },
@@ -233,7 +233,7 @@ Spontaneous.Views.BoxView = (function($, S) {
233
233
  },
234
234
 
235
235
  save_path: function() {
236
- return ['/savebox', this.id()].join('/');
236
+ return ['/content', this.id()].join('/');
237
237
  },
238
238
 
239
239
  add_content: function(content_type, position) {
@@ -29,7 +29,7 @@ Spontaneous.Views.PageView = (function($, S) {
29
29
 
30
30
  if (!self.page.is_root()) {
31
31
  var resync = dom.a({ "title":"Sync the path to the page title"}).click(function() {
32
- Spontaneous.Ajax.post(['/slug', self.page.id(), "titlesync"].join("/"), {}, self.save_complete.bind(self));
32
+ Spontaneous.Ajax.put(['/page', self.page.id(), "slug/sync"].join("/"), {}, self.save_complete.bind(self));
33
33
  });
34
34
  path_wrap.append( dom.h3('.titlesync').append(resync));
35
35
  }
@@ -54,11 +54,22 @@ Spontaneous.Views.PageView = (function($, S) {
54
54
  return this.panel;
55
55
  },
56
56
  set_title: function(title) {
57
+ var self = this;
57
58
  title = title || this.page.title();
58
59
  this.title.html(title);
59
60
  if (this.page.content.hidden) {
60
- this.title.append(dom.span().text(' (hidden)'));
61
+ self.title.append(dom.span().text(' (hidden)'));
61
62
  }
63
+ var maxHeight = 36;
64
+ window.setTimeout(function() {
65
+ var t = self.title
66
+ , height = function() { return t.height(); }
67
+ , fs = window.parseInt(t.css('font-size'), 10);
68
+ ;
69
+ while (height() > maxHeight && fs > 10) {
70
+ t.css('font-size', --fs);
71
+ }
72
+ }, 0);
62
73
  },
63
74
  unavailable_loaded: function(response) {
64
75
  var u = {};
@@ -107,7 +118,7 @@ Spontaneous.Views.PageView = (function($, S) {
107
118
  }.bind(this));
108
119
  },
109
120
  save_uid: function(uid) {
110
- Spontaneous.Ajax.post('/uid/'+this.page.id(), {'uid':uid}, this.uid_save_complete.bind(this));
121
+ Spontaneous.Ajax.put(['/page',this.page.id(), "uid"].join("/"), {'uid':uid}, this.uid_save_complete.bind(this));
111
122
  },
112
123
  uid_save_complete: function(response, status, xhr) {
113
124
  if (status === 'success') {
@@ -121,7 +132,7 @@ Spontaneous.Views.PageView = (function($, S) {
121
132
  open_url_editor: function() {
122
133
  this.unavailable = false;
123
134
  this.url_editor_open = true;
124
- Spontaneous.Ajax.get(['/slug', this.page.id(), 'unavailable'].join('/'), this.unavailable_loaded.bind(this));
135
+ Spontaneous.Ajax.get(['/page', this.page.id(), 'slug/unavailable'].join('/'), this.unavailable_loaded.bind(this));
125
136
  this.panel.animate({'height': '+=14'}, 200, function() {
126
137
  var view = $('h3', this.panel), edit = $('.edit', this.panel);
127
138
  view.hide();
@@ -211,7 +222,7 @@ Spontaneous.Views.PageView = (function($, S) {
211
222
  if (this.input && this.input.hasClass('error')) { this.input.removeClass('error'); }
212
223
  },
213
224
  save: function(slug) {
214
- Spontaneous.Ajax.post('/slug/'+this.page.id(), {'slug':slug}, this.save_complete.bind(this));
225
+ Spontaneous.Ajax.put(['/page',this.page.id(), "slug"].join("/"), {'slug':slug}, this.save_complete.bind(this));
215
226
  },
216
227
 
217
228
  save_complete: function(response, status, xhr) {
@@ -19,9 +19,9 @@ Spontaneous.Views.PieceView = (function($, S) {
19
19
  title: function() {
20
20
  return "Delete this " + (this.parent_view.content.is_page() ? "Page?" : "Piece?");
21
21
  },
22
- position_from_event: function(event) {
23
- return this.position_from_element(event);
24
- },
22
+ // position_from_event: function(event) {
23
+ // return this.position_from_element(event);
24
+ // },
25
25
  view: function() {
26
26
  var __entry = this.parent_view;
27
27
  var w = dom.div('#popover-delete').click(function() {
@@ -36,7 +36,8 @@ Spontaneous.Views.PieceView = (function($, S) {
36
36
  var cancel = dom.a('.cancel').text("Cancel");
37
37
  w.append(cancel, ok)
38
38
  return w;
39
- }
39
+ },
40
+ scroll: true
40
41
  });
41
42
 
42
43
  var PieceView = new JS.Class(S.Views.View, {
@@ -7,15 +7,8 @@
7
7
  <title>Spontaneous: Loading...</title>
8
8
  <link REL="SHORTCUT ICON" HREF="/@spontaneous/static/favicon.ico" />
9
9
 
10
- <% Spontaneous::Rack::Assets::CSS::EDITING_CSS.each do |css_file| %>
11
- <link rel="stylesheet" href="<%= style_url(css_file) %>" type="text/css" media="screen" charset="utf-8" />
12
- <% end %>
13
- <% Spontaneous::Rack::Assets::JavaScript::JQUERY.each do |js_file| %>
14
- <script type="text/javascript" charset="utf-8" src="<%= script_url(js_file) %>"></script>
15
- <% end %>
16
- <% Spontaneous::Rack::Assets::JavaScript::COMPATIBILITY.each do |js_file| %>
17
- <script type="text/javascript" charset="utf-8" src="<%= script_url(js_file) %>"></script>
18
- <% end %>
10
+ <link rel="stylesheet" href="<%= style_url("spontaneous") %>" type="text/css" media="screen" charset="utf-8" />
11
+ <script type="text/javascript" charset="utf-8" src="<%= script_url("vendor/jquery") %>"></script>
19
12
  <script type="text/javascript" charset="utf-8">
20
13
  Spontaneous = {
21
14
  site_domain: '<%= Spontaneous::Site.config.site_domain %>',
@@ -24,24 +17,23 @@
24
17
  development: <%= Spontaneous.development? %>,
25
18
  asynchronous: <%= Spontaneous.production? %>,
26
19
  editor_protocol: 'mvim',
20
+ csrf_header: '<%= Spontaneous::Rack::CSRF_HEADER %>',
21
+ csrf_token: '<%= env[Spontaneous::Rack::CSRF_TOKEN] %>',
27
22
  <% if Spontaneous.config.auto_login; %>
28
23
  auto_login: '<%= Spontaneous.config.auto_login %>',
29
- user_key: '<%= env[Spontaneous::Rack::ACTIVE_KEY].key_id %>',
30
24
  <% end %>
31
25
  onload: function() {
32
26
  jQuery.noConflict();
33
27
  }
34
28
  };
35
29
  </script>
36
- <% Spontaneous::Rack::Assets::JavaScript::REQUIRE.each do |js_file| %>
37
- <script type="text/javascript" charset="utf-8" src="<%= script_url(js_file) %>"></script>
38
- <% end %>
30
+ <script type="text/javascript" charset="utf-8" src="<%= script_url("require") %>"></script>
39
31
  </head>
40
32
  <body id="spontaneous">
41
33
  <script type="text/javascript" charset="utf-8">
42
34
  Spontaneous.Require.init(Spontaneous.asynchronous);
43
35
  <%# list of scripts to append, in order %>
44
- var sources = <%= script_list(Spontaneous::Rack::Assets::JavaScript::EDITING_JS) %>;
36
+ var sources = <%= script_list(["spontaneous"]) %>;
45
37
  for (var i = 0, ii = sources.length; i < ii; i++) {
46
38
  Spontaneous.require(sources[i]);
47
39
  }
@@ -5,36 +5,21 @@
5
5
  <title><%= Spontaneous::Site.config.site_domain %>: Please Login</title>
6
6
  <link REL="SHORTCUT ICON" HREF="/@spontaneous/static/favicon.ico" />
7
7
  <link rel="apple-touch-icon" href="/@spontaneous/static/spot-71fab1d2f065034f5fc15e7bea2ad36c.png" />
8
- <% Spontaneous::Rack::Assets::CSS::LOGIN_CSS.each do |css_file| %>
9
- <link rel="stylesheet" href="<%= style_url(css_file) %>" type="text/css" media="screen" charset="utf-8" />
10
- <% end %>
11
- <% Spontaneous::Rack::Assets::JavaScript::JQUERY.each do |js_file| %>
12
- <script type="text/javascript" charset="utf-8" src="<%= script_url(js_file) %>"></script>
13
- <% end %>
8
+ <link rel="stylesheet" href="<%= style_url("spontaneous") %>" type="text/css" media="screen" charset="utf-8" />
9
+ <script type="text/javascript" charset="utf-8" src="<%= script_url("vendor/jquery") %>"></script>
14
10
  <script type="text/javascript">
15
11
  var Spontaneous = {
16
12
  site_domain: '<%= Spontaneous::Site.config.site_domain %>',
17
13
  site_id: '<%= Spontaneous::Site.config.site_id %>',
18
14
  };
19
15
  </script>
20
- <% Spontaneous::Rack::Assets::JavaScript::LOGIN_JS.each do |js_file| %>
21
- <script type="text/javascript" charset="utf-8" src="<%= script_url(js_file) %>"></script>
22
- <% end %>
16
+ <script type="text/javascript" charset="utf-8" src="<%= script_url("login") %>"></script>
23
17
  <script type="text/javascript">
24
18
  (function($) {
25
19
  $(function() {
26
- <% if locals[:invalid_key] %>
27
- var key = Spontaneous.Auth.Key.remove(Spontaneous.site_id);
28
- <% else %>
29
- var key = Spontaneous.Auth.Key.load(Spontaneous.site_id);
30
- <% end %>
31
- if (key) {
32
- $('#reauthenticate-key').val(key).parent('form')[0].submit();
33
- } else {
34
- $('#outer').fadeIn(function() {
35
- $('#login-form input#user-login').focus();
36
- });
37
- }
20
+ $('#outer').fadeIn(function() {
21
+ $('#login-form input#user-login').focus();
22
+ });
38
23
  });
39
24
  }(jQuery));
40
25
  </script>
@@ -61,9 +46,5 @@
61
46
  </form>
62
47
  </div>
63
48
  </div>
64
- <form action="/@spontaneous/reauthenticate" method="post" accept-charset="UTF-8">
65
- <input type="hidden" id="reauthenticate-key" name="api_key" value="" />
66
- <input type="hidden" id="reauthenticate-origin" name="origin" value="<%= locals[:origin] || request.path_info %>" />
67
- </form>
68
49
  </body>
69
50
  </html>
@@ -7,12 +7,8 @@
7
7
  <title>Spontaneous: Loading...</title>
8
8
  <link REL="SHORTCUT ICON" HREF="/@spontaneous/static/favicon.ico" />
9
9
 
10
- <% Spontaneous::Rack::Assets::CSS::SCHEMA_MODIFICATION_CSS.each do |css_file| %>
11
- <link rel="stylesheet" href="<%= style_url(css_file) %>" type="text/css" media="screen" charset="utf-8" />
12
- <% end %>
13
- <% Spontaneous::Rack::Assets::JavaScript::JQUERY.each do |js_file| %>
14
- <script type="text/javascript" charset="utf-8" src="<%= script_url(js_file) %>"></script>
15
- <% end %>
10
+ <link rel="stylesheet" href="<%= style_url("spontaneous") %>" type="text/css" media="screen" charset="utf-8" />
11
+ <script type="text/javascript" charset="utf-8" src="<%= script_url("vendor/jquery") %>"></script>
16
12
  <script type="text/javascript">
17
13
  var Spontaneous = {};
18
14
  </script>
@@ -50,7 +46,7 @@
50
46
  <li>
51
47
  <form action="/@spontaneous/schema/<%= action.action %>" method="post">
52
48
  <input type="hidden" name="origin" value="<%= env['SCRIPT_NAME'] %>" />
53
- <input type="hidden" name="__key" value="<%= env[S::Rack::ACTIVE_KEY].key_id %>" />
49
+ <input type="hidden" name="__token" value="<%= env[S::Rack::CSRF_TOKEN] %>" />
54
50
  <input type="hidden" name="uid" value="<%= action.source.to_s %>" />
55
51
  <% if action.dest %>
56
52
  <input type="hidden" name="ref" value="<%= action.dest.schema_name %>" />
@@ -4,7 +4,7 @@ require 'spontaneous'
4
4
  require 'benchmark'
5
5
 
6
6
  Sequel.migration do
7
- ContentTable = S::DataMapper::ContentTable
7
+ ::ContentTable = S::DataMapper::ContentTable unless defined?(::ContentTable)
8
8
  revision_table = :spontaneous_content_revisions
9
9
  archive_table = :spontaneous_content_archive
10
10
  content_table = :content
@@ -30,7 +30,7 @@ Sequel.migration do
30
30
  tables = self.tables
31
31
  revisions = tables.select { |t| ContentTable.revision_table?(content_table, t)}.sort
32
32
 
33
- revisions = revisions.map { |name| [name, ContentTable.revision_number(content_table, name)] }
33
+ revisions = revisions.map { |name| [name, ContentTable.revision_from_table(content_table, name)] }
34
34
 
35
35
  unless revisions.empty?
36
36
 
@@ -0,0 +1,14 @@
1
+ Sequel.migration do
2
+ up do
3
+ [:content, :spontaneous_content_archive, :spontaneous_content_history].each do |table|
4
+ set_column_type table, :path, 'varchar(2048)'
5
+ end
6
+ end
7
+
8
+ down do
9
+ [:content, :spontaneous_content_archive, :spontaneous_content_history].each do |table|
10
+ set_column_type table, :path, 'varchar(255)'
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,20 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDNjCCAh6gAwIBAgIBADANBgkqhkiG9w0BAQUFADBBMQ4wDAYDVQQDDAVnYXJy
3
+ eTEaMBgGCgmSJomT8ixkARkWCm1hZ25ldGlzZWQxEzARBgoJkiaJk/IsZAEZFgNu
4
+ ZXQwHhcNMTMwMzE5MTUyNjU5WhcNMTQwMzE5MTUyNjU5WjBBMQ4wDAYDVQQDDAVn
5
+ YXJyeTEaMBgGCgmSJomT8ixkARkWCm1hZ25ldGlzZWQxEzARBgoJkiaJk/IsZAEZ
6
+ FgNuZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKM3kWbO2fxZQd
7
+ ni+mHL+pw82T7WhKvTHM6paEzYwmMiS988ezEeC8KapthzYeOti1GT6utprQQE6K
8
+ 3an/hmeMkxIpOOkHQCp9ztrROr2DSJGWp1pNvdtMZqeim9yyR4+A/znW9lBJDLYm
9
+ HUrYNrtv3cfffScmJfSvRa/7if2+uIq8MA+qhhBHgiU46ZQuRkr5Y0MogOZ2M41L
10
+ oRSc1SiejC+fp9ShRRDrNSYPLM81BQm418pw0nbwlOgQDJXbiDkmbD3EPXmYupEb
11
+ UKyqzP1m84mtibnkWIm+NYEgaOFrWU4jHuRXRDlBIejB+DpGtrl3NgHCDpx+S5PE
12
+ 6QzAm7JjAgMBAAGjOTA3MAkGA1UdEwQCMAAwHQYDVR0OBBYEFElanH76RAW4xjiB
13
+ zbhSb78664DmMAsGA1UdDwQEAwIEsDANBgkqhkiG9w0BAQUFAAOCAQEAcXnU920f
14
+ J2BpKQJULph0A/r5mkR4GRfQY+vbEJVyfV9te6tROzZAe87zqImmns16AYVC/TZ+
15
+ PUrat/zSJp8L7fmOuqD6rKrysa22eQveRivKtGnpKpJPbS93nGhYikM1lDROC0Qd
16
+ 2pokOnvTGdhZNOxrEuwKnqXE+fdGgK4K03UkazVPF3Emsg2oOcP7Ihe4QxzP2FKt
17
+ kqVsrH6nBplzJhol1DaOS7oQpKF+8IEynjPDSHfqoRqjhyyfWuwSdX76FEJWSE3m
18
+ /8q3/tl0XjLJMzaI8e48vclQ4aF1o6oyPrRMGgOeRgP0+E7coMAl4j5mihrJYwl2
19
+ hjebdHUMaT4ndQ==
20
+ -----END CERTIFICATE-----
@@ -0,0 +1,44 @@
1
+ require 'sprockets'
2
+ require 'uglifier'
3
+ require 'sass'
4
+
5
+ module Spontaneous::Asset
6
+ # Takes assets from a source directory & compiles them to some destination directory.
7
+ # This is deliberatly dumb about the path to the gem and destination
8
+ class AppCompiler
9
+ attr_reader :environment, :manifest
10
+
11
+ def initialize(gem_path, dest_path, options = {})
12
+ @options = {:compress => true}.merge(options)
13
+ @gem_path = gem_path
14
+ @dest_path = dest_path
15
+ @environment = Sprockets::Environment.new(gem_path / "application" )
16
+ @manifest = Sprockets::Manifest.new(@environment, @dest_path / "public/@spontaneous/assets")
17
+
18
+ @environment.append_path(gem_path / "application/js")
19
+ @environment.append_path(gem_path / "application/css")
20
+
21
+ if @options[:compress]
22
+ @environment.register_bundle_processor "application/javascript", :uglifier do |context, data|
23
+ Uglifier.compile(data)
24
+ end
25
+
26
+ @environment.register_bundle_processor "text/css", :sass_compressor do |context, css|
27
+ # By this point the SCSS has already been compiled, so SASS is merely a CSS compressor
28
+ # and I can ignore crap around loadpaths or filenames.
29
+ engine = ::Sass::Engine.new(css, :style => :compressed, :syntax => :scss, :quiet => true, :custom => { :resolver => self })
30
+ engine.render
31
+ end
32
+ end
33
+ end
34
+
35
+
36
+ def compile
37
+ @manifest.compile("spontaneous.js", "login.js", "require.js", "vendor/jquery.js", "spontaneous.css")
38
+ end
39
+
40
+ def image_path(path)
41
+ path
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,225 @@
1
+ require 'sprockets'
2
+ require 'uri'
3
+
4
+ module Spontaneous::Asset
5
+ module Environment
6
+ def self.new(context)
7
+ if context.publishing?
8
+ Publish.new(context.site, context.revision)
9
+ else
10
+ Preview.new(context.site)
11
+ end
12
+ end
13
+
14
+ def self.preview(site = Spontaneous::Site.instance)
15
+ Preview.new(site)
16
+ end
17
+
18
+ # takes a path that has optional hash & query parts and splits
19
+ # out the real asset path.
20
+ def self.split_asset_path(path)
21
+ uri = URI(path)
22
+ [uri.path, uri.query, uri.fragment]
23
+ end
24
+
25
+
26
+ # takes a path that has optional hash & query parts and splits
27
+ # out the real asset path.
28
+ def self.join_asset_path(path, query, hash)
29
+ joined = path.dup
30
+ joined << "?#{query}" if query
31
+ joined << "##{hash}" if hash
32
+ joined
33
+ end
34
+
35
+ module SassFunctions
36
+ def asset_data_uri(path)
37
+ Sass::Script::String.new(sprockets_context.asset_data_uri(path.value))
38
+ end
39
+ end
40
+
41
+ ::Sass::Script::Functions.send :include, SassFunctions
42
+
43
+
44
+ class Preview
45
+ attr_reader :environment
46
+
47
+ def initialize(site)
48
+ @site = site
49
+ asset_paths.each do |path|
50
+ environment.append_path(path)
51
+ end
52
+ end
53
+
54
+ def asset_paths
55
+ @site.paths.expanded(:assets)
56
+ end
57
+
58
+ def environment
59
+ @environment ||= build_environment(@site)
60
+ end
61
+
62
+ def build_environment(site)
63
+ environment = ::Sprockets::Environment.new(site.root)
64
+ environment.context_class.class_eval(&context_extension)
65
+ environment.context_class.asset_mount_point = asset_mount_point
66
+ environment
67
+ end
68
+
69
+ def context_extension
70
+ proc {
71
+ class << self
72
+ attr_accessor :asset_mount_point
73
+ end
74
+
75
+ def asset_path(path, options = {})
76
+ asset_path, query, fragment = Spontaneous::Asset::Environment.split_asset_path(path)
77
+ asset = environment[asset_path]
78
+ return path if asset.nil?
79
+ Spontaneous::Asset::Environment.join_asset_path(make_absolute(asset.logical_path), query, fragment)
80
+ end
81
+
82
+ def make_absolute(logical)
83
+ "/" << self.class.asset_mount_point << "/" << logical
84
+ end
85
+ }
86
+ end
87
+
88
+ # The preview environment converts logical paths to a list of URLs
89
+ #
90
+ # Because I want to support using absolute paths in my asset lists
91
+ # I have to convert from URL paths to relative paths first to avoid
92
+ # confusing sprockets (which treats a path starting with / as an
93
+ # absolute file path and will fail to locate assets that have one.)
94
+ #
95
+ # - sources: a list of `logical paths`
96
+ # - options:
97
+ # - :type => either :js or :css
98
+ #
99
+ # Returns a list of URLs
100
+ def find(sources, options)
101
+ paths = normalise_sources(sources, options)
102
+ if options[:development]
103
+ assets = paths.flat_map { |path| a = environment[path, bundle: true].to_a ; a.empty? ? [path] : a }
104
+ else
105
+ assets = paths.map { |path| environment[path] || path }
106
+ end
107
+ assets.map { |asset| to_url(asset, options[:development]) }
108
+ end
109
+
110
+ def normalise_sources(sources, options)
111
+ Array(sources).map { |path| to_logical(path, options[:type]) }
112
+ end
113
+
114
+ def js(sources, options = {})
115
+ find(sources, options.merge(type: :js))
116
+ end
117
+
118
+ def css(sources, options = {})
119
+ find(sources, options.merge(type: :css))
120
+ end
121
+
122
+ def call(env)
123
+ environment.call(env)
124
+ end
125
+
126
+ def to_url(asset, body = false)
127
+ return asset if asset.is_a?(String)
128
+ path = asset.logical_path
129
+ path = "#{path}?body=1" if body
130
+ "/" << asset_mount_point << "/" << path
131
+ end
132
+
133
+ def asset_mount_point
134
+ "assets"
135
+ end
136
+
137
+ ABSOLUTE_URL = /^(https?:)?\/\//
138
+
139
+ def is_absolute_url?(path)
140
+ ABSOLUTE_URL === path
141
+ end
142
+
143
+ def to_logical(path, type)
144
+ return path if is_absolute_url?(path)
145
+ filename_with_extension(path, type)
146
+ end
147
+
148
+ EXTENSIONS = {
149
+ js: ".js",
150
+ javascript: ".js",
151
+ css: ".css",
152
+ stylesheet: ".css"
153
+ }
154
+
155
+ def filename_with_extension(base, type)
156
+ ext = EXTENSIONS[type]
157
+ return base if File.extname(base) == ext
158
+ "#{base}#{ext}"
159
+ end
160
+ end
161
+
162
+ class Publish < Preview
163
+ def initialize(site, revision)
164
+ super(site)
165
+ @revision = Spontaneous.revision(revision)
166
+ environment.css_compressor = :scss
167
+ environment.js_compressor = :uglifier
168
+ environment.context_class.manifest = manifest
169
+ environment.context_class.asset_mount_point = asset_mount_point
170
+ end
171
+
172
+ def manifest
173
+ @manifest ||= Sprockets::Manifest.new(environment, manifest_file)
174
+ end
175
+
176
+ def manifest_file
177
+ File.join(bundle_dir, "manifest.json")
178
+ end
179
+
180
+ def find(sources, options)
181
+ paths = normalise_sources(sources, options)
182
+ paths = paths.each_with_index.map { |p, i| [p, i] }
183
+ remote, local = paths.partition { |p, i| is_absolute_url?(p) }
184
+ manifest.compile(*local.map(&:first))
185
+ assets = local.map { |p, i| [manifest.assets[p], i]}
186
+ assets = assets.map { |asset, i| [to_url(asset), i] }
187
+ # Pass through any sources that don't exist
188
+ assets = assets.map { |p, i| p.nil? ? [sources[i], i] : [p, i] }
189
+ assets.concat(remote).sort { |a, b| a[1] <=> b[1] }.map(&:first)
190
+ end
191
+
192
+ def bundle_dir
193
+ @revision.path(asset_mount_point)
194
+ end
195
+
196
+ def to_url(asset)
197
+ return nil if asset.nil?
198
+ "/" << asset_mount_point << "/" << asset
199
+ end
200
+
201
+ def context_extension
202
+ Proc.new {
203
+
204
+ class << self
205
+ attr_accessor :manifest, :asset_mount_point
206
+ end
207
+
208
+ # Too easy to be right
209
+ def asset_path(path, options = {})
210
+ asset_path, query, fragment = Spontaneous::Asset::Environment.split_asset_path(path)
211
+ manifest = self.class.manifest
212
+ manifest.compile(asset_path)
213
+ asset = manifest.assets[asset_path]
214
+ return path if asset.nil?
215
+ Spontaneous::Asset::Environment.join_asset_path(make_absolute(asset), query, fragment)
216
+ end
217
+
218
+ def make_absolute(logical)
219
+ "/" << self.class.asset_mount_point << "/" << logical
220
+ end
221
+ }
222
+ end
223
+ end
224
+ end
225
+ end
@@ -4,72 +4,7 @@ require 'sass'
4
4
 
5
5
  module Spontaneous
6
6
  module Asset
7
- autoload :Source, "spontaneous/asset/source"
8
- autoload :File, "spontaneous/asset/file"
9
-
10
- # Takes assets from a source directory & compiles them to some destination directory.
11
- # This is deliberatly dumb about the path to the
12
- class AppCompiler
13
- attr_reader :environment, :manifest
14
-
15
- def initialize(gem_path, dest_path, options = {})
16
- @options = {:compress => true}.merge(options)
17
- @gem_path = gem_path
18
- @dest_path = dest_path
19
- @environment = Sprockets::Environment.new(gem_path / "application" )
20
- @manifest = Sprockets::Manifest.new(@environment, @dest_path / "public/@spontaneous/assets")
21
-
22
- @environment.append_path(gem_path / "application/js")
23
- @environment.append_path(gem_path / "application/css")
24
-
25
- if @options[:compress]
26
- @environment.register_bundle_processor "application/javascript", :uglifier do |context, data|
27
- Uglifier.compile(data)
28
- end
29
-
30
- @environment.register_bundle_processor "text/css", :sass_compressor do |context, css|
31
- # By this point the SCSS has already been compiled, so SASS is merely a CSS compressor
32
- # and I can ignore crap around loadpaths or filenames.
33
- engine = ::Sass::Engine.new(css, :style => :compressed, :syntax => :scss, :quiet => true, :custom => { :resolver => self })
34
- engine.render
35
- end
36
- end
37
- end
38
-
39
-
40
- def compile
41
- # @environment.each_logical_path.select { |path| path =~ /^static/ }.each do |path|
42
- # puts path
43
- # # @manifest.compile(path)
44
- # end
45
-
46
- @manifest.compile("spontaneous.js", "login.js", "require.js", "vendor/jquery.js", "spontaneous.css")
47
- end
48
-
49
- def image_path(path)
50
- path
51
- end
52
- end
7
+ autoload :AppCompiler, "spontaneous/asset/app_compiler"
8
+ autoload :Environment, "spontaneous/asset/environment"
53
9
  end
54
10
  end
55
- # module Spontaneous
56
- # module Sass
57
- # module Helpers
58
- # def image_url(asset)
59
- # ::Sass::Script::String.new "url(" + resolver.image_path(asset.value) + ")"
60
- # end
61
- #
62
- # def resolver
63
- # p options#[:quiet]
64
- # options[:custom][:resolver]
65
- # end
66
- # end
67
- # end
68
- # end
69
- # module Sass
70
- # module Script
71
- # module Functions
72
- # include Spontaneous::Sass::Helpers
73
- # end
74
- # end
75
- # end
@@ -345,5 +345,4 @@ module Spontaneous
345
345
  super or (obj.is_a?(Box) && (self._prototype == obj._prototype) && (self.owner == obj.owner))
346
346
  end
347
347
  end
348
-
349
348
  end