spontaneous 0.2.0.beta1 → 0.2.0.beta2

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 (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
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c30bcb8452abe1751ba10d109eae7ac5e35cc041
4
+ data.tar.gz: ac6cd7ce1fc89dcdd02b7a61e7ddb5a45ed8f7a2
5
+ SHA512:
6
+ metadata.gz: 6d220983cefbb9510f76ae41b23a777d63e9e0c6edd9206a68fc12428a4870575ea0ff2521ad1a30b700cdbc7fa2537659ed26446cd97e296661bbb834d81f84
7
+ data.tar.gz: 760fbab63d0a18311a8fe71df6402a70c6edec1e4600a04b7c08092b8b63da6c7e1a633ac6a832ced6ace6c88ee2e260ac89185b9c79a588ca14dd9c57b53513
data/.gitignore ADDED
@@ -0,0 +1,24 @@
1
+ .bundle
2
+ .irb_history
3
+ *.rbc
4
+ .rake_tasks
5
+ test/fixtures/example_application/public/media/*
6
+ test/fixtures/media/*
7
+ test/fixtures/permissions/media/*
8
+ test/fixtures/revisions/*
9
+ test/fixtures/example_application/log/*
10
+ # cached templates
11
+ *.html.rb
12
+ *.pdf.rb
13
+ *.epub.rb
14
+ tmp
15
+ todo.taskpaper
16
+ .rvmrc
17
+
18
+ Gemfile.lock
19
+ pkg
20
+ .rbx
21
+ .travis/gemfiles/*.lock
22
+ .ruby-gemset
23
+ .ruby-version
24
+ .tags
data/.locat ADDED
@@ -0,0 +1,42 @@
1
+ match 'lib/**.rb' do |file, line|
2
+ case line
3
+ when /^\s*#/
4
+ 'Comment'
5
+ when /^\s*$/
6
+ 'Blank'
7
+ else
8
+ 'Ruby'
9
+ end
10
+ end
11
+
12
+ match 'test/**.rb' do |file, line|
13
+ case file
14
+ when /fixtures/i
15
+ nil
16
+ else
17
+ case line
18
+ when /^\s*#/
19
+ 'Comment'
20
+ when /^\s*$/
21
+ 'Blank'
22
+ else
23
+ 'Test'
24
+ end
25
+ end
26
+ end
27
+
28
+ match 'application/js/*.js' do |file, line|
29
+ case file
30
+ when /vendor/i
31
+ nil
32
+ else
33
+ case line
34
+ when /^\s*\/\//
35
+ 'Comment'
36
+ when /^\s*$/
37
+ 'Blank'
38
+ else
39
+ 'JavaScript'
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,7 @@
1
+ source :rubygems
2
+
3
+ # An empty Gemfile to stop Travis from installing anything
4
+ # this way I can test the installation process itself
5
+
6
+ gem "rake"
7
+ gem "minitest"
data/.travis.yml ADDED
@@ -0,0 +1,18 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.9.3"
4
+ - "2.0.0"
5
+ # - jruby-19mode # JRuby in 1.9 mode
6
+ # - rbx-19mode
7
+ # uncomment this line if your project needs to run something other than `rake`:
8
+ env:
9
+ global:
10
+ - DB_HOST=127.0.0.1
11
+ matrix:
12
+ # - GEM_SOURCE=rubygems DB=postgres DB_USER=postgres
13
+ # - GEM_SOURCE=rubygems DB=mysql DB_USER=root
14
+ - GEM_SOURCE=git DB=postgres DB_USER=postgres
15
+ - GEM_SOURCE=git DB=mysql DB_USER=root
16
+ before_install: gem install rake
17
+ gemfile: .travis/gemfiles/Gemfile.empty
18
+ script: rake test:integration
data/Gemfile CHANGED
@@ -1,12 +1,15 @@
1
- source :rubygems
1
+ source "https://rubygems.org"
2
2
 
3
3
  gemspec
4
4
 
5
- group :development do
6
- gem 'shoulda', '~> 2.11.3', :git => 'https://github.com/dasch/shoulda.git', :branch => 'minitest'
7
- gem 'selenium-client', '~> 1.2.18', :platforms => [:mri_18]
8
- # gem 'Selenium', '~> 1.1.14'
9
- end
5
+ gem 'selenium-client', '~> 1.2.18', :platforms => [:mri_18]
6
+ gem 'mocha', :require => false
7
+
8
+ gem 'therubyracer', '~> 0.11.1'
9
+
10
+ # group :development do
11
+ # # gem 'Selenium', '~> 1.1.14'
12
+ # end
10
13
 
11
14
  platforms :jruby do
12
15
  gem 'jruby-openssl'
@@ -15,6 +18,7 @@ platforms :jruby do
15
18
  end
16
19
 
17
20
  platforms :mri do
18
- gem 'xapian-ruby', "~> 1.2.12"
19
- gem 'xapian-fu', "~> 1.3"
21
+ gem 'mysql2', '~> 0.3.11'
22
+ gem 'pg', '~> 0.14.1'
23
+ gem 'xapian-ruby', '~> 1.2.12'
20
24
  end
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2011 Garry Hill <garry@magnetised.net>
1
+ Copyright (c) 2011-2013 Garry Hill <garry@magnetised.net>
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/Rakefile CHANGED
@@ -1,62 +1,18 @@
1
1
  Encoding.default_internal = Encoding.default_external = Encoding::UTF_8 if defined?(Encoding)
2
2
 
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'spontaneous/version'
6
+
3
7
  require 'rubygems'
4
8
  require 'rake'
5
- require 'date'
6
-
7
- #############################################################################
8
- #
9
- # Helper functions
10
- #
11
- #############################################################################
12
9
 
13
10
  def name
14
11
  "spontaneous"
15
12
  end
16
13
 
17
14
  def version
18
- line = File.read("lib/#{name}/version.rb")[/^\s*VERSION\s*=\s*.*/]
19
- line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
20
- end
21
-
22
- def date
23
- Date.today.to_s
24
- end
25
-
26
- def rubyforge_project
27
- name
28
- end
29
-
30
- def gemspec_file
31
- "#{name}.gemspec"
32
- end
33
-
34
- def gem_gemspec_file
35
- "#{name}.tmp.gemspec"
36
- end
37
-
38
- def gem_file
39
- "#{name}-#{version}.gem"
40
- end
41
-
42
- def replace_header(head, header_name)
43
- head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
44
- end
45
-
46
- def generate_gemspec(spec, files)
47
- head, manifest, tail = spec.split(" # = MANIFEST =\n")
48
- # replace name version and date
49
- replace_header(head, :name)
50
- replace_header(head, :version)
51
- replace_header(head, :date)
52
- #comment this out if your rubyforge_project has a different name
53
- filelist = files.sort.
54
- map { |file| " #{file}" }.
55
- join("\n")
56
- replace_header(head, :rubyforge_project)
57
- manifest = " s.files = %w[\n#{filelist}\n ]\n"
58
- spec = [head, manifest, tail].join(" # = MANIFEST =\n")
59
- spec
15
+ Spontaneous::VERSION
60
16
  end
61
17
 
62
18
  #############################################################################
@@ -138,41 +94,23 @@ task :coverage do
138
94
  sh "open coverage/index.html"
139
95
  end
140
96
 
141
- require 'rdoc/task'
142
-
143
- RDoc::Task.new do |rdoc|
144
- rdoc.rdoc_dir = 'rdoc'
145
- rdoc.title = "#{name} #{version}"
146
- rdoc.rdoc_files.include('README*')
147
- rdoc.rdoc_files.include('lib/**/*.rb')
148
- end
149
-
150
- desc "Open an irb session preloaded with this library"
151
- task :console do
152
- sh "irb -rubygems -r ./lib/#{name}.rb"
153
- end
154
-
155
- #############################################################################
156
- #
157
- # Custom tasks (add your own tasks here)
158
- #
159
- #############################################################################
160
-
161
-
162
-
163
97
  #############################################################################
164
98
  #
165
99
  # Packaging tasks
166
100
  #
167
101
  #############################################################################
168
102
 
169
- require 'tmpdir'
170
- @project_dir = Dir.pwd
103
+ def gemspec_file
104
+ "#{name}.gemspec"
105
+ end
106
+
107
+ def gem_file
108
+ "#{name}-#{version}.gem"
109
+ end
171
110
 
172
111
  namespace :gem do
173
112
  desc "Create tag v#{version} and build and push #{gem_file} to Rubygems"
174
113
  task :release => :build do
175
- Dir.chdir(@project_dir)
176
114
  unless `git branch` =~ /^\* master$/
177
115
  puts "You must be on the master branch to release!"
178
116
  exit!
@@ -181,95 +119,15 @@ namespace :gem do
181
119
  sh "git tag v#{version}"
182
120
  sh "git push origin master"
183
121
  sh "git push origin v#{version}"
184
- sh "gem push #{@build_dir}/pkg/#{name}-#{version}.gem"
122
+ sh "gem push pkg/#{gem_file}"
185
123
  end
186
124
 
187
125
  desc "Build #{gem_file} into the pkg directory"
188
- task :build => :gemspec do
126
+ task :build do
127
+ sh "gem build #{gemspec_file}"
189
128
  sh "mkdir -p pkg"
190
- sh "gem build #{gem_gemspec_file}"
191
- sh "mkdir -p #{@project_dir}/pkg"
192
- sh "cp #{gem_file} #{@project_dir}/pkg"
193
129
  sh "mv #{gem_file} pkg"
194
130
  end
195
-
196
-
197
- desc "Generate #{gemspec_file}"
198
- task :gemspec => :working_copy do
199
- # read spec file and split out manifest section
200
- spec = File.read(gemspec_file)
201
- # head, manifest, tail = spec.split(" # = MANIFEST =\\n")
202
- # # replace name version and date
203
- # replace_header(head, :name)
204
- # replace_header(head, :version)
205
- # replace_header(head, :date)
206
- # #comment this out if your rubyforge_project has a different name
207
- # replace_header(head, :rubyforge_project)
208
-
209
- # determine file list from git ls-files
210
- files = `git ls-files`.
211
- split("\n").
212
- reject { |file| file =~ /^\./ }.
213
- reject { |file| file =~ /^(rdoc|pkg)/ }
214
-
215
- File.open(gemspec_file, 'w') { |io| io.write(generate_gemspec(spec, files)) }
216
-
217
- compressed_assets = Dir["application/{css,js}/min/*.*"]
218
-
219
- File.open(gem_gemspec_file, 'w') { |io| io.write(generate_gemspec(spec, files.concat(compressed_assets))) }
220
-
221
- # piece file back together and write
222
- # manifest = " s.files = %w[\\n#{files}\\n ]\\n"
223
- # spec = [head, manifest, tail].join(" # = MANIFEST =\\n")
224
- # File.open(gemspec_file, 'w') { |io| io.write(spec) }
225
- puts "Updated #{gemspec_file}"
226
- FileUtils.cp(gemspec_file, @project_dir)
227
- end
228
-
229
- task :working_copy => :validate do
230
- # @working_dir = Dir.mktmpdir
231
- end
232
-
233
- desc "Validate #{gemspec_file}"
234
- task :validate => :generate do
235
- libfiles = Dir['lib/*'] - ["lib/#{name}.rb", "lib/#{name}"]
236
- unless libfiles.empty?
237
- puts "Directory `lib` should only contain a `#{name}.rb` file and `#{name}` dir."
238
- # exit!
239
- end
240
- unless Dir['VERSION*'].empty?
241
- puts "A `VERSION` file at root level violates Gem best practices."
242
- # exit!
243
- end
244
- end
245
-
246
- desc "Generate the gemspec file from a template"
247
- task :generate => :setup do
248
- # template = File.read('spontaneous.gemspec.tmpl')
249
- # require 'bundler'
250
-
251
- # File.open('spontaneous.gemspec', 'w') do |gemspec|
252
- # bundler = Bundler.load
253
- # dependencies = bundler.dependencies_for(:default, :runtime).map do |dependency|
254
- # %{s.add_dependency('#{dependency.name}', [#{dependency.requirement.as_list.map { |d| d.inspect }.join(', ')}])}
255
- # end
256
- # development_dependencies = bundler.dependencies_for(:development).map do |dependency|
257
- # %{s.add_development_dependency('#{dependency.name}', [#{dependency.requirement.as_list.map { |d| d.inspect }.join(', ')}])}
258
- # end
259
- # gemspec.write(template)
260
- # end
261
- end
262
-
263
-
264
- task :setup do
265
- @build_dir = Dir.tmpdir + "/spontaneous"
266
- FileUtils.rm_r(@build_dir) if File.directory?(@build_dir)
267
- FileUtils.mkdir_p(@build_dir)
268
- FileUtils.cp_r(@project_dir+"/.", @build_dir)
269
- Dir.chdir(@build_dir)
270
- $:.unshift(@build_dir + "/lib")
271
- # require File.expand_path(@build_dir + '/lib/spontaneous')
272
- end
273
131
  end
274
132
 
275
133
  namespace :asset do
data/Readme.markdown CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Spontaneous is a revolutionary new content management system that brings the best of Ruby and the best of HTML5 together in one elegant package.
4
4
 
5
- This is version 2 of an existing (closed source) CMS that has been in active production use for over 6 years. For more information about that, and to see the sites that it powers, please go to [magnetised's homepage](http://magnetised.info/spontaneous).
5
+ This is version 2 of an existing (closed source) CMS that has been in active production use for over 6 years. For more information about that, and to see the sites that it powers, please go to http://spontaneous.io
6
6
 
7
7
  ## INTRODUCTION
8
8
 
@@ -48,148 +48,6 @@ img.missing {
48
48
  }
49
49
 
50
50
 
51
- #top {
52
- @extend .container-padding;
53
- @extend .controls-gradient;
54
- @extend .clearfix;
55
- @include display-box;
56
- @include box-align(center);
57
- position: fixed;
58
- height: 31px;
59
- top: 0;
60
- right: 0;
61
- left: 0;
62
- #navigation {
63
- @include box-flex;
64
- font-size: 11px;
65
- font-weight: bold;
66
- color: #999999;
67
- width: 100%;
68
- li {
69
- @include no-select;
70
- padding-left: 10px;
71
- padding-right: 15px;
72
- background: url("/@spontaneous/static/location-arrow-c1c1d3ca472481c61a0a5f8cb289d743.png") right 0 no-repeat;
73
- float: left;
74
- display: block;
75
- font-weight: bold;
76
- select {
77
- @include box-sizing;
78
- @include interface;
79
- text-transform: none;
80
- font-size: 11px;
81
- line-height: 13px;
82
- -webkit-appearance: none;
83
- cursor: pointer;
84
- display: block;
85
- background: url("/@spontaneous/static/select-arrow-6e7dd3745b00e934b0d7a3250c46558b.png") 95% 50% no-repeat;
86
- border: none;
87
- outline: none;
88
- position: relative;
89
- padding-top: 0px;
90
- padding-right: 25px;
91
- height: 31px;
92
- color: #ccc;
93
- font-weight: bold;
94
- width: 100%;
95
- }
96
- select.unselected {
97
- color: #888;
98
- font-weight: normal;
99
- font-style: italic;
100
- max-width: 80px;
101
- }
102
- a {
103
- @include box-sizing;
104
- cursor: pointer;
105
- // color: #888888;
106
- color: #ddd;
107
- height: 31px;
108
- padding-top: 9px;
109
- display: block;
110
- background: url("/@spontaneous/static/select-arrow-6e7dd3745b00e934b0d7a3250c46558b.png") right 50% no-repeat;
111
- padding-right: 20px;
112
- }
113
- a:hover, select:hover {
114
- color: white;
115
- }
116
- }
117
- li.root a {
118
- background-image: none;
119
- padding-right: 5px;
120
- }
121
- }
122
- #spontaneous-root {
123
- background-image: url("/@spontaneous/static/spontaneous-states-e91ec89db525c62da0105b97cdd781ce.png"), url("/@spontaneous/static/location-arrow-c1c1d3ca472481c61a0a5f8cb289d743.png");
124
- background-position: 0 5px, right 0;
125
- background-repeat: no-repeat;
126
- padding-right: 12px;
127
- cursor: pointer;
128
- height: 31px;
129
-
130
- span {
131
- padding-right: 28px;
132
- }
133
- &:hover {
134
- background-position: 0 -83px, right 0;
135
-
136
- }
137
-
138
- &.active {
139
- background-position: 0 -39px, right 0;
140
- }
141
- }
142
- #service-outer {
143
- @include box-flex;
144
- }
145
- #cms-navigation-view {
146
- @include display-box;
147
- @include box-align(center);
148
- }
149
- #service-navigation {
150
- @include display-box;
151
- @include box-align(center);
152
- h2 {
153
- @include box-flex;
154
- @include interface;
155
- text-transform: none;
156
- font-size: 11px;
157
- padding-left: $unit;
158
- color: #fff;
159
- font-weight: bold;
160
- }
161
- a {
162
- display: block;
163
- width: 64px;
164
- }
165
- }
166
- #switch-mode, #open-publish {
167
- @include button;
168
- @include display-box;
169
- @include box-orient(vertical);
170
- @include box-align(center);
171
- margin: 0;
172
- width: 70px;
173
- }
174
- #open-publish {
175
- position: relative;
176
- margin-right: $unit;
177
- #publish-progress {
178
- position: absolute;
179
- left: 4px;
180
- top: 1px;
181
- }
182
- &.disabled {
183
- }
184
- }
185
- #open-publish.progress {
186
- padding-left: 20px;
187
- padding-right: 20px;
188
- width: 124px;
189
- @include button-color(#666666);
190
- color: #999999;
191
- }
192
- }
193
51
 
194
52
  #content-outer {
195
53
  background: url(/@spontaneous/static/texture-03f7627e8264b1d607113ab32c593a58.png) repeat;
@@ -228,18 +86,23 @@ img.missing {
228
86
  #page-info {
229
87
  @extend .container-padding;
230
88
  @include vertical-gradient(#3a3a3a, #222222);
231
- height: 64px - 10px;
89
+ min-height: 64px - 10;
90
+ height: auto;
232
91
  padding-top: 10px;
92
+ padding-bottom: 0px;
233
93
  position: relative;
234
94
  h1, h3 {
235
95
  position: relative;
236
96
  }
237
97
  h1 {
98
+ // position: absolute;
99
+ // top: 0;
238
100
  font-family: $headline-font-family;
239
101
  font-weight: 100;
240
102
  color: white;
241
103
  font-size: 24px;
242
- line-height: 21px;
104
+ line-height: 100%;
105
+ padding-bottom: 30px;
243
106
  span {
244
107
  color: #888888;
245
108
  }
@@ -265,7 +128,7 @@ img.missing {
265
128
  & > .path {
266
129
  @include display-box;
267
130
  position: absolute;
268
- bottom: 12px;
131
+ bottom: 10px;
269
132
  }
270
133
  .path .titlesync {
271
134
  margin-left: $unit;
@@ -713,15 +576,22 @@ img.missing {
713
576
  display: none;
714
577
  }
715
578
  }
579
+ // highlight filename when hovering over filedrop area
580
+ // too confusing to have the filenames active though as it
581
+ // would interfere with the 'click to edit' thing
582
+ // .file-drop:hover + .filename {
583
+ // color: $action;
584
+ // }
716
585
  }
717
586
 
718
- .editing-panel .field-group .fieldtypes-filefield {
587
+ .editing-panel .field-group .field.field-file {
719
588
  .value {
720
589
  // padding: 0;
721
590
  }
722
591
  .file-field {
723
592
  // height: 36px;
724
593
  cursor: pointer;
594
+ line-height: 1.3em;
725
595
 
726
596
  .file-drop:hover {
727
597
  // border-color: $action;
@@ -741,6 +611,10 @@ img.missing {
741
611
  padding-left: 6px;
742
612
  padding-right: 6px;
743
613
  }
614
+ .choose + .filename,
615
+ .choose + .filename + .filesize {
616
+ position:relative;
617
+ }
744
618
  &:hover .choose {
745
619
  @include button;
746
620
  }
@@ -1677,6 +1551,8 @@ img.missing {
1677
1551
  color: rgba(0, 0, 0, 0.5);
1678
1552
  }
1679
1553
  }
1554
+
1555
+ @import "top.css.scss";
1680
1556
  @import "dialogue.css.scss";
1681
1557
  @import "popover.css.scss";
1682
1558
  @import "editing.css.scss";
@@ -90,9 +90,13 @@ $target-name-size: 14px;
90
90
  -moz-border-radius: $radius 0 0 $radius;
91
91
  border-radius: $radius 0 0 $radius; }
92
92
 
93
+ @mixin shadow {
94
+ -webkit-box-shadow: 0px 3px 30px #cccccc;
95
+ -moz-box-shadow: 0px 3px 30px #cccccc;
96
+ }
93
97
  .shadow {
94
- -webkit-box-shadow: 0px 3px 30px #cccccc;
95
- -moz-box-shadow: 0px 3px 30px #cccccc; }
98
+ @include shadow;
99
+ }
96
100
 
97
101
  .clearfix:after {
98
102
  content: ".";
@@ -144,6 +148,7 @@ $target-name-size: 14px;
144
148
  }
145
149
 
146
150
  @mixin interface {
151
+ @include no-select;
147
152
  font-family: $interface-font-family;
148
153
  -webkit-font-smoothing: antialiased;
149
154
  text-transform: uppercase;
@@ -151,7 +156,6 @@ $target-name-size: 14px;
151
156
  line-height: 13px;
152
157
  //font-weight: bold;
153
158
  font-weight: 600;
154
- @extend .no-select;
155
159
  }
156
160
 
157
161
  @mixin button($background-color: $action) {
@@ -146,6 +146,31 @@ $dialogue-title-height: 32px;
146
146
  @include display-box;
147
147
  @include box-orient(horizontal);
148
148
 
149
+ .spinner {
150
+ position: absolute;
151
+ width: 48px;
152
+ height: 48px;
153
+ left: 50%;
154
+ top: 40%;
155
+ canvas {
156
+ position: relative;
157
+ left: -50%;
158
+ }
159
+ div {
160
+ left: -50%;
161
+ width: 100%;
162
+ p {
163
+ @include interface;
164
+ width: 200px;
165
+ position: relative;
166
+ left: -100px;
167
+ top: 10px;
168
+ text-align: center;
169
+ color: #ccc;
170
+ margin: 0;
171
+ }
172
+ }
173
+ }
149
174
  .change-list {
150
175
  @include box-flex;
151
176
  position: absolute;
@@ -209,7 +234,7 @@ $dialogue-title-height: 32px;
209
234
  // padding-bottom: $container-padding / 2;
210
235
  .publish-up-to-date {
211
236
  @include rounded;
212
- @extend shadow;
237
+ @extend .shadow;
213
238
  position: absolute;
214
239
  left: 0;
215
240
  right: 0;