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
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;