droom 0.0.1 → 0.2.1

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 (459) hide show
  1. data/README.md +2 -2
  2. data/app/assets/images/droom/Untitled-1.png +0 -0
  3. data/app/assets/images/droom/acceptance.png +0 -0
  4. data/app/assets/images/droom/add.png +0 -0
  5. data/app/assets/images/droom/asterisk.png +0 -0
  6. data/app/assets/images/droom/asterisk_up.png +0 -0
  7. data/app/assets/images/droom/checkboxes.png +0 -0
  8. data/app/assets/images/droom/clear.png +0 -0
  9. data/app/assets/images/droom/cog.png +0 -0
  10. data/app/assets/images/droom/copy.png +0 -0
  11. data/app/assets/images/droom/copy_to_dropbox.png +0 -0
  12. data/app/assets/images/droom/crosses.png +0 -0
  13. data/app/assets/images/droom/dark_scrap_icons.png +0 -0
  14. data/app/assets/images/droom/defilter.png +0 -0
  15. data/app/assets/images/droom/delete.png +0 -0
  16. data/app/assets/images/droom/dropbox.png +0 -0
  17. data/app/assets/images/droom/dropbox_button.png +0 -0
  18. data/app/assets/images/droom/dropbox_button_small.png +0 -0
  19. data/app/assets/images/droom/edit.png +0 -0
  20. data/app/assets/images/droom/expand.png +0 -0
  21. data/app/assets/images/droom/expander.png +0 -0
  22. data/app/assets/images/droom/folder.png +0 -0
  23. data/app/assets/images/droom/image_box.png +0 -0
  24. data/app/assets/images/droom/in_dropbox.png +0 -0
  25. data/app/assets/images/droom/integration_buttons.png +0 -0
  26. data/app/assets/images/droom/leftright.png +0 -0
  27. data/app/assets/images/droom/manage.png +0 -0
  28. data/app/assets/images/droom/medium_object_icons.png +0 -0
  29. data/app/assets/images/droom/object_icons.png +0 -0
  30. data/app/assets/images/droom/playable.png +0 -0
  31. data/app/assets/images/droom/revoke.png +0 -0
  32. data/app/assets/images/droom/scrap_icons.png +0 -0
  33. data/app/assets/images/droom/search.png +0 -0
  34. data/app/assets/images/droom/small_asterisk.png +0 -0
  35. data/app/assets/images/droom/small_cog.png +0 -0
  36. data/app/assets/images/droom/small_download.png +0 -0
  37. data/app/assets/images/droom/small_image_box.png +0 -0
  38. data/app/assets/images/droom/smalladd.png +0 -0
  39. data/app/assets/images/droom/smallarrows.png +0 -0
  40. data/app/assets/images/droom/smallcopy.png +0 -0
  41. data/app/assets/images/droom/smalldelete.png +0 -0
  42. data/app/assets/images/droom/smalldownload.png +0 -0
  43. data/app/assets/images/droom/smalledit.png +0 -0
  44. data/app/assets/images/droom/smallmanage.png +0 -0
  45. data/app/assets/images/droom/star.png +0 -0
  46. data/app/assets/images/droom/symbols.png +0 -0
  47. data/app/assets/images/droom/tinyarrows.png +0 -0
  48. data/app/assets/images/droom/to_dropbox.png +0 -0
  49. data/app/assets/images/droom/twisty.png +0 -0
  50. data/app/assets/images/droom/youtube_icon.png +0 -0
  51. data/app/assets/javascripts/droom.js.coffee +62 -65
  52. data/app/assets/javascripts/droom/actions.js.coffee +492 -0
  53. data/app/assets/javascripts/droom/ajax.js.coffee +84 -0
  54. data/app/assets/javascripts/droom/{lib/extensions.js.coffee → extensions.js.coffee} +22 -15
  55. data/app/assets/javascripts/droom/lib/ZeroClipboard.js +334 -0
  56. data/app/assets/javascripts/droom/lib/ZeroClipboard.swf +0 -0
  57. data/app/assets/javascripts/droom/lib/ZeroClipboard10.swf +0 -0
  58. data/app/assets/javascripts/droom/map.js.coffee +124 -86
  59. data/app/assets/javascripts/droom/popups.js.coffee +252 -0
  60. data/app/assets/javascripts/droom/stream.js.coffee +92 -0
  61. data/app/assets/javascripts/droom/utilities.js.coffee +120 -0
  62. data/app/assets/javascripts/droom/widgets.js.coffee +1209 -0
  63. data/app/assets/stylesheets/_definitions.css.sass +189 -0
  64. data/app/assets/stylesheets/droom.css.sass +1429 -376
  65. data/app/assets/stylesheets/lib/_kalendae.css.sass +2 -5
  66. data/app/assets/stylesheets/lib/_popups.css.sass +86 -0
  67. data/app/assets/stylesheets/lib/_toolbar.css.sass +17 -11
  68. data/app/controllers/droom/agenda_categories_controller.rb +24 -0
  69. data/app/controllers/droom/calendars_controller.rb +29 -0
  70. data/app/controllers/droom/confirmations_controller.rb +38 -0
  71. data/app/controllers/droom/dashboard_controller.rb +2 -0
  72. data/app/controllers/droom/documents_controller.rb +42 -51
  73. data/app/controllers/droom/dropbox_tokens_controller.rb +61 -0
  74. data/app/controllers/droom/engine_controller.rb +8 -23
  75. data/app/controllers/droom/events_controller.rb +39 -27
  76. data/app/controllers/droom/folders_controller.rb +106 -0
  77. data/app/controllers/droom/group_invitations_controller.rb +15 -7
  78. data/app/controllers/droom/groups_controller.rb +4 -4
  79. data/app/controllers/droom/invitations_controller.rb +37 -9
  80. data/app/controllers/droom/memberships_controller.rb +5 -3
  81. data/app/controllers/droom/organisations_controller.rb +53 -0
  82. data/app/controllers/droom/people_controller.rb +46 -27
  83. data/app/controllers/droom/preferences_controller.rb +34 -0
  84. data/app/controllers/droom/scraps_controller.rb +77 -0
  85. data/app/controllers/droom/search_controller.rb +66 -0
  86. data/app/controllers/droom/suggestions_controller.rb +22 -35
  87. data/app/controllers/droom/users_controller.rb +69 -0
  88. data/app/controllers/droom/venues_controller.rb +1 -2
  89. data/app/controllers/droom/youtube_controller.rb +22 -0
  90. data/app/helpers/droom/droom_helper.rb +93 -5
  91. data/app/models/droom/agenda_category.rb +8 -1
  92. data/app/models/droom/calendar.rb +19 -0
  93. data/app/models/droom/category.rb +4 -6
  94. data/app/models/droom/document.rb +103 -64
  95. data/app/models/droom/document_attachment.rb +13 -47
  96. data/app/models/droom/dropbox_document.rb +41 -0
  97. data/app/models/droom/dropbox_token.rb +29 -0
  98. data/app/models/droom/event.rb +125 -90
  99. data/app/models/droom/folder.rb +134 -0
  100. data/app/models/droom/group.rb +68 -27
  101. data/app/models/droom/group_invitation.rb +12 -3
  102. data/app/models/droom/invitation.rb +50 -8
  103. data/app/models/droom/mailing_list_membership.rb +128 -0
  104. data/app/models/droom/membership.rb +71 -9
  105. data/app/models/droom/organisation.rb +22 -0
  106. data/app/models/droom/page.rb +3 -3
  107. data/app/models/droom/person.rb +180 -166
  108. data/app/models/droom/personal_folder.rb +31 -0
  109. data/app/models/droom/preference.rb +35 -0
  110. data/app/models/droom/recurrence_rule.rb +1 -1
  111. data/app/models/droom/scrap.rb +110 -0
  112. data/app/models/droom/tag.rb +120 -0
  113. data/app/models/droom/tagging.rb +13 -0
  114. data/app/models/droom/user.rb +211 -0
  115. data/app/models/droom/user_action_observer.rb +12 -0
  116. data/app/models/droom/venue.rb +56 -39
  117. data/app/views/cropper/uploads/_crop.html.haml +46 -0
  118. data/app/views/devise/mailer/confirmation_instructions.en.html.haml +24 -0
  119. data/app/views/devise/mailer/reset_password_instructions.en.html.haml +21 -0
  120. data/app/views/devise/passwords/edit.html.haml +31 -0
  121. data/app/views/devise/passwords/new.html.haml +21 -0
  122. data/app/views/devise/sessions/new.html.haml +33 -0
  123. data/app/views/droom/agenda_categories/_form.html.haml +22 -0
  124. data/app/views/droom/agenda_categories/new.html.haml +6 -0
  125. data/app/views/droom/calendars/_action_menu.html.haml +6 -0
  126. data/app/views/droom/calendars/index.html.haml +12 -0
  127. data/app/views/droom/calendars/show.rss.builder +0 -0
  128. data/app/views/droom/confirmations/show.html.haml +40 -0
  129. data/app/views/droom/dashboard/_calendar.html.haml +1 -0
  130. data/app/views/droom/dashboard/_folders.html.haml +5 -0
  131. data/app/views/droom/dashboard/_future_events.html.haml +18 -0
  132. data/app/views/droom/dashboard/_invitations.html.haml +1 -0
  133. data/app/views/droom/dashboard/_past_events.haml +14 -0
  134. data/app/views/droom/dashboard/_quicksearch.html.haml +6 -0
  135. data/app/views/droom/dashboard/_stream.html.haml +9 -0
  136. data/app/views/droom/dashboard/index.html.haml +5 -3
  137. data/app/views/droom/documents/_action_menu.html.haml +7 -0
  138. data/app/views/droom/documents/_documents.html.haml +5 -0
  139. data/app/views/droom/documents/_documents_list.html.haml +6 -6
  140. data/app/views/droom/documents/_documents_table.html.haml +29 -10
  141. data/app/views/droom/documents/_form.html.haml +3 -7
  142. data/app/views/droom/documents/_listing.html.haml +5 -6
  143. data/app/views/droom/documents/_pagination.html.haml +8 -0
  144. data/app/views/droom/documents/_search_result.html.haml +14 -0
  145. data/app/views/droom/documents/_suggested.html.haml +0 -5
  146. data/app/views/droom/documents/_table_document.html.haml +2 -8
  147. data/app/views/droom/documents/edit.html.haml +7 -1
  148. data/app/views/droom/documents/index.html.haml +10 -27
  149. data/app/views/droom/documents/new.html.haml +10 -1
  150. data/app/views/droom/dropbox_tokens/new.html.haml +6 -0
  151. data/app/views/droom/events/_action_menu.html.haml +15 -0
  152. data/app/views/droom/events/_event.html.haml +67 -57
  153. data/app/views/droom/events/_form.html.haml +15 -4
  154. data/app/views/droom/events/_invitations.html.haml +4 -19
  155. data/app/views/droom/events/_search_result.html.haml +19 -0
  156. data/app/views/droom/events/_views.html.haml +2 -2
  157. data/app/views/droom/events/edit.html.haml +7 -1
  158. data/app/views/droom/events/index.html.haml +27 -10
  159. data/app/views/droom/events/index.rss.builder +1 -1
  160. data/app/views/droom/events/new.html.haml +6 -1
  161. data/app/views/droom/events/show.html.haml +5 -1
  162. data/app/views/droom/folders/_action_menu.html.haml +14 -0
  163. data/app/views/droom/folders/_attachments.html.haml +3 -0
  164. data/app/views/droom/folders/_contents.html.haml +6 -0
  165. data/app/views/droom/folders/_folder.html.haml +20 -0
  166. data/app/views/droom/folders/_folders.html.haml +2 -0
  167. data/app/views/droom/folders/_form.html.haml +18 -0
  168. data/app/views/droom/folders/edit.html.haml +6 -0
  169. data/app/views/droom/folders/index.html.haml +32 -0
  170. data/app/views/droom/folders/new.html.haml +6 -0
  171. data/app/views/droom/folders/show.html.haml +1 -0
  172. data/app/views/droom/group_invitations/_form.html.haml +15 -4
  173. data/app/views/droom/group_invitations/new.html.haml +6 -1
  174. data/app/views/droom/groups/_action_menu.haml +11 -0
  175. data/app/views/droom/groups/_form.html.haml +10 -11
  176. data/app/views/droom/groups/_group.html.haml +9 -10
  177. data/app/views/droom/groups/_groups.html.haml +2 -3
  178. data/app/views/droom/groups/_search_result.html.haml +16 -0
  179. data/app/views/droom/groups/_suggested.html.haml +7 -0
  180. data/app/views/droom/groups/edit.html.haml +7 -1
  181. data/app/views/droom/groups/index.html.haml +6 -3
  182. data/app/views/droom/groups/new.html.haml +7 -0
  183. data/app/views/droom/groups/show.html.haml +1 -1
  184. data/app/views/droom/invitations/_created.html.haml +1 -1
  185. data/app/views/droom/invitations/_form.html.haml +9 -5
  186. data/app/views/droom/invitations/_invitation.html.haml +9 -0
  187. data/app/views/droom/invitations/_invitations.html.haml +8 -0
  188. data/app/views/droom/invitations/new.html.haml +6 -1
  189. data/app/views/droom/memberships/_member.html.haml +1 -1
  190. data/app/views/droom/memberships/_membership_toggle.html.haml +10 -0
  191. data/app/views/droom/memberships/new.html.haml +10 -0
  192. data/app/views/droom/organisations/_action_menu.html.haml +7 -0
  193. data/app/views/droom/organisations/_form.html.haml +25 -0
  194. data/app/views/droom/organisations/_organisation.html.haml +23 -0
  195. data/app/views/droom/organisations/_organisations.html.haml +2 -0
  196. data/app/views/droom/organisations/_suggested.html.haml +7 -0
  197. data/app/views/droom/organisations/edit.html.haml +6 -0
  198. data/app/views/droom/organisations/index.html.haml +20 -0
  199. data/app/views/droom/organisations/new.html.haml +6 -0
  200. data/app/views/droom/organisations/show.html.haml +1 -0
  201. data/app/views/droom/pages/_full_page.html.haml +1 -1
  202. data/app/views/droom/pages/index.html.haml +1 -1
  203. data/app/views/droom/panels/_account.html.haml +16 -0
  204. data/app/views/droom/panels/_admin.html.haml +23 -0
  205. data/app/views/droom/panels/_devices.html.haml +19 -0
  206. data/app/views/droom/panels/_dropbox.html.haml +17 -0
  207. data/app/views/droom/panels/_email.html.haml +16 -0
  208. data/app/views/droom/panels/_keywords.html.haml +3 -0
  209. data/app/views/droom/panels/_networks.html.haml +3 -0
  210. data/app/views/droom/panels/_readers.html.haml +18 -0
  211. data/app/views/droom/panels/_rss.html.haml +10 -0
  212. data/app/views/droom/panels/_search.html.haml +16 -0
  213. data/app/views/droom/panels/_vcal.html.haml +3 -0
  214. data/app/views/droom/people/_action_menu.html.haml +22 -0
  215. data/app/views/droom/people/_form.html.haml +69 -39
  216. data/app/views/droom/people/_listing.html.haml +19 -0
  217. data/app/views/droom/people/_memberships.html.haml +24 -0
  218. data/app/views/droom/people/_people.html.haml +5 -29
  219. data/app/views/droom/people/_person.html.haml +30 -32
  220. data/app/views/droom/people/_search_result.html.haml +14 -0
  221. data/app/views/droom/people/_suggested.html.haml +10 -5
  222. data/app/views/droom/people/edit.html.haml +9 -1
  223. data/app/views/droom/people/index.html.haml +6 -9
  224. data/app/views/droom/people/new.html.haml +6 -1
  225. data/app/views/droom/people/show.html.haml +1 -1
  226. data/app/views/droom/preferences/_checkbox.html.haml +7 -0
  227. data/app/views/droom/preferences/_radio_set.html.haml +9 -0
  228. data/app/views/droom/scraps/_action_menu.html.haml +9 -0
  229. data/app/views/droom/scraps/_caption.html.haml +9 -0
  230. data/app/views/droom/scraps/_credit.html.haml +10 -0
  231. data/app/views/droom/scraps/_form.html.haml +77 -0
  232. data/app/views/droom/scraps/_heading.html.haml +16 -0
  233. data/app/views/droom/scraps/_scrap.html.haml +17 -0
  234. data/app/views/droom/scraps/_search_result.html.haml +5 -0
  235. data/app/views/droom/scraps/_stream.html.haml +4 -0
  236. data/app/views/droom/scraps/_suggested.html.haml +5 -0
  237. data/app/views/droom/scraps/_thumb.html.haml +5 -0
  238. data/app/views/droom/scraps/edit.html.haml +2 -0
  239. data/app/views/droom/scraps/full/_document.html.haml +6 -0
  240. data/app/views/droom/scraps/full/_event.html.haml +20 -0
  241. data/app/views/droom/scraps/full/_image.html.haml +4 -0
  242. data/app/views/droom/scraps/full/_link.html.haml +5 -0
  243. data/app/views/droom/scraps/full/_quote.html.haml +8 -0
  244. data/app/views/droom/scraps/full/_text.html.haml +4 -0
  245. data/app/views/droom/scraps/full/_video.html.haml +4 -0
  246. data/app/views/droom/scraps/index.atom.builder +26 -0
  247. data/app/views/droom/scraps/index.html.haml +15 -0
  248. data/app/views/droom/scraps/new.html.haml +2 -0
  249. data/app/views/droom/scraps/show.html.haml +4 -0
  250. data/app/views/droom/scraps/thumbs/_document.html.haml +9 -0
  251. data/app/views/droom/scraps/thumbs/_event.html.haml +17 -0
  252. data/app/views/droom/scraps/thumbs/_image.html.haml +6 -0
  253. data/app/views/droom/scraps/thumbs/_link.html.haml +10 -0
  254. data/app/views/droom/scraps/thumbs/_quote.html.haml +8 -0
  255. data/app/views/droom/scraps/thumbs/_text.html.haml +8 -0
  256. data/app/views/droom/scraps/thumbs/_video.html.haml +6 -0
  257. data/app/views/droom/shared/_controls.html.haml +5 -3
  258. data/app/views/droom/shared/_excerpt.html.haml +2 -0
  259. data/app/views/droom/shared/_navigation.html.haml +4 -4
  260. data/app/views/droom/shared/_panels.html.haml +4 -0
  261. data/app/views/droom/shared/_quicklinks.html.haml +5 -0
  262. data/app/views/droom/shared/_search_form.html.haml +2 -1
  263. data/app/views/droom/shared/_search_results.html.haml +9 -0
  264. data/app/views/droom/shared/_suggestions.html.haml +13 -9
  265. data/app/views/droom/shared/_title_excerpt.haml +2 -0
  266. data/app/views/droom/shared/search.html.haml +18 -0
  267. data/app/views/droom/users/_confirmation.html.haml +2 -0
  268. data/app/views/droom/users/_dropbox_status.html.haml +2 -0
  269. data/app/views/droom/users/_form.html.haml +34 -0
  270. data/app/views/droom/users/_user.html.haml +2 -0
  271. data/app/views/droom/users/_user_or_person.html.haml +63 -0
  272. data/app/views/droom/users/_users_table.html.haml +17 -0
  273. data/app/views/droom/users/edit.html.haml +10 -0
  274. data/app/views/droom/users/index.html.haml +42 -0
  275. data/app/views/droom/users/unwelcome.en.html.haml +17 -0
  276. data/app/views/droom/venues/_search_result.html.haml +17 -0
  277. data/app/views/droom/youtube/show.html.haml +12 -0
  278. data/app/views/kaminari/_paginator.html.haml +16 -0
  279. data/app/views/layouts/droom/application.html.haml +17 -17
  280. data/app/views/layouts/droom/email.html.haml +59 -0
  281. data/config/cucumber.yml +8 -0
  282. data/config/initializers/devise.rb +240 -0
  283. data/config/locales/devise.en.yml +58 -0
  284. data/config/locales/en.yml +203 -32
  285. data/config/routes.rb +55 -16
  286. data/config/sunspot.yml +17 -0
  287. data/db/migrate/20121120115447_tags.rb +18 -0
  288. data/db/migrate/20130116155331_dropbox_tokens.rb +9 -0
  289. data/db/migrate/20130118103540_folders.rb +47 -0
  290. data/db/migrate/20130124113715_preferences.rb +10 -0
  291. data/db/migrate/20130125132427_users_in_droom.rb +58 -0
  292. data/db/migrate/20130129142307_mobile_phones.rb +7 -0
  293. data/db/migrate/20130130120124_folder_ancestry_to_parents.rb +7 -0
  294. data/db/migrate/20130131161430_mailing_lists.rb +37 -0
  295. data/db/migrate/20130207091903_preference_uuids.rb +5 -0
  296. data/db/migrate/20130207123614_stream.rb +13 -0
  297. data/db/migrate/20130208035113_access_token_secret.rb +5 -0
  298. data/db/migrate/20130214145014_person_image.rb +9 -0
  299. data/db/migrate/20130217152644_devise_confirmable.rb +13 -0
  300. data/db/migrate/20130225095328_create_droom_calendars.rb +20 -0
  301. data/db/migrate/20130226092944_give_scraps_document.rb +5 -0
  302. data/db/migrate/20130228083509_privateness.rb +9 -0
  303. data/db/migrate/20130228134143_store_metadata.rb +5 -0
  304. data/db/migrate/20130305150648_folders_nicely.rb +6 -0
  305. data/db/migrate/20130305151936_niceties.rb +7 -0
  306. data/db/migrate/20130308103807_create_droom_dropbox_documents.rb +11 -0
  307. data/db/migrate/20130308154552_dropbox_documents_changed.rb +5 -0
  308. data/db/migrate/20130326135738_user_titles.rb +5 -0
  309. data/lib/droom.rb +189 -22
  310. data/lib/droom/engine.rb +6 -1
  311. data/lib/droom/folders.rb +106 -0
  312. data/lib/droom/lazy_hash.rb +73 -0
  313. data/lib/droom/{helpers.rb → model_helpers.rb} +1 -1
  314. data/lib/droom/monkeys.rb +21 -2
  315. data/lib/droom/routing.rb +13 -0
  316. data/lib/droom/searchability.rb +25 -0
  317. data/lib/droom/taggability.rb +60 -0
  318. data/lib/droom/title_case.rb +101 -0
  319. data/lib/droom/user_config.rb +67 -0
  320. data/lib/droom/validators.rb +6 -0
  321. data/lib/droom/version.rb +1 -1
  322. data/lib/generators/droom/install/templates/droom_initializer.rb +0 -1
  323. data/lib/tasks/cucumber.rake +65 -0
  324. data/spec/datasets/calendar_events_dataset.rb +44 -0
  325. data/spec/datasets/calendar_pages_dataset.rb +8 -0
  326. data/spec/datasets/calendar_sites_dataset.rb +6 -0
  327. data/spec/datasets/calendars_dataset.rb +34 -0
  328. data/spec/datasets/documents_dataset.rb +28 -0
  329. data/spec/datasets/recurrence_dataset.rb +7 -0
  330. data/spec/dummy/README.rdoc +261 -0
  331. data/spec/dummy/Rakefile +7 -0
  332. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  333. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  334. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  335. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  336. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  337. data/spec/dummy/config.ru +4 -0
  338. data/spec/dummy/config/application.rb +65 -0
  339. data/spec/dummy/config/boot.rb +10 -0
  340. data/spec/dummy/config/database.yml +21 -0
  341. data/spec/dummy/config/environment.rb +5 -0
  342. data/spec/dummy/config/environments/development.rb +38 -0
  343. data/spec/dummy/config/environments/production.rb +67 -0
  344. data/spec/dummy/config/environments/test.rb +38 -0
  345. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  346. data/spec/dummy/config/initializers/inflections.rb +15 -0
  347. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  348. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  349. data/spec/dummy/config/initializers/session_store.rb +8 -0
  350. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  351. data/spec/dummy/config/locales/en.yml +7 -0
  352. data/spec/dummy/config/routes.rb +3 -0
  353. data/spec/dummy/config/sunspot.yml +17 -0
  354. data/spec/dummy/db/migrate/20120911070124_create_droom_data.droom.rb +135 -0
  355. data/spec/dummy/db/migrate/20120921094604_agenda_sections.droom.rb +14 -0
  356. data/spec/dummy/db/migrate/20120921094605_add_postal_address_to_people.droom.rb +11 -0
  357. data/spec/dummy/db/migrate/20121102064845_give_groups_descriptions.droom.rb +6 -0
  358. data/spec/dummy/db/migrate/20121102064846_more_names.droom.rb +6 -0
  359. data/spec/dummy/db/migrate/20121102064847_event_agenda_sections.droom.rb +14 -0
  360. data/spec/dummy/db/migrate/20121102064848_create_group_invitations.droom.rb +11 -0
  361. data/spec/dummy/db/migrate/20121102064849_give_people_positions.droom.rb +6 -0
  362. data/spec/dummy/db/migrate/20121102064850_help_pages.droom.rb +14 -0
  363. data/spec/dummy/db/migrate/20121102064851_category_slugs.droom.rb +6 -0
  364. data/spec/dummy/db/migrate/20121102064852_document_links.droom.rb +15 -0
  365. data/spec/dummy/db/migrate/20121102064853_people_visibility.droom.rb +8 -0
  366. data/spec/dummy/db/migrate/20121102094820_shy_people.droom.rb +6 -0
  367. data/spec/dummy/db/migrate/20121102095927_visibility_defaults.droom.rb +10 -0
  368. data/spec/dummy/db/migrate/20130121122352_tags.droom.rb +19 -0
  369. data/spec/dummy/db/migrate/20130121122353_dropbox.droom.rb +10 -0
  370. data/spec/dummy/db/migrate/20130121122354_folders.droom.rb +48 -0
  371. data/spec/dummy/db/migrate/20130128142902_memberships_expire.droom.rb +6 -0
  372. data/spec/dummy/db/migrate/20130128142903_give_documents_extracted_text.droom.rb +6 -0
  373. data/spec/dummy/db/migrate/20130128142904_preferences.droom.rb +11 -0
  374. data/spec/dummy/db/migrate/20130128142905_users_in_droom.droom.rb +59 -0
  375. data/spec/dummy/db/migrate/20130130120631_folder_ancestry_to_parents.droom.rb +8 -0
  376. data/spec/dummy/db/migrate/20130201103737_mobile_phones.droom.rb +8 -0
  377. data/spec/dummy/db/migrate/20130201103738_mailing_lists.droom.rb +38 -0
  378. data/spec/dummy/db/schema.rb +327 -0
  379. data/spec/dummy/log/sunspot-solr-test.log.1 +222 -0
  380. data/spec/dummy/public/404.html +26 -0
  381. data/spec/dummy/public/422.html +26 -0
  382. data/spec/dummy/public/500.html +25 -0
  383. data/spec/dummy/public/favicon.ico +0 -0
  384. data/spec/dummy/public/system/droom/documents/files/000/000/001/original/frog.png +0 -0
  385. data/spec/dummy/public/system/droom/documents/files/000/000/001/original/rat.png +0 -0
  386. data/spec/dummy/script/rails +6 -0
  387. data/spec/dummy/solr/conf/admin-extra.html +31 -0
  388. data/spec/dummy/solr/conf/elevate.xml +36 -0
  389. data/spec/dummy/solr/conf/mapping-ISOLatin1Accent.txt +246 -0
  390. data/spec/dummy/solr/conf/protwords.txt +21 -0
  391. data/spec/dummy/solr/conf/schema.xml +238 -0
  392. data/spec/dummy/solr/conf/scripts.conf +24 -0
  393. data/spec/dummy/solr/conf/solrconfig.xml +934 -0
  394. data/spec/dummy/solr/conf/spellings.txt +2 -0
  395. data/spec/dummy/solr/conf/stopwords.txt +58 -0
  396. data/spec/dummy/solr/conf/synonyms.txt +31 -0
  397. data/spec/dummy/solr/data/development/index/segments.gen +0 -0
  398. data/spec/dummy/solr/data/development/index/segments_1 +0 -0
  399. data/spec/dummy/solr/data/development/spellchecker/segments.gen +0 -0
  400. data/spec/dummy/solr/data/development/spellchecker/segments_1 +0 -0
  401. data/spec/dummy/solr/data/test/index/segments.gen +0 -0
  402. data/spec/dummy/solr/data/test/index/segments_3nu +0 -0
  403. data/spec/dummy/solr/data/test/spellchecker/segments.gen +0 -0
  404. data/spec/dummy/solr/data/test/spellchecker/segments_1 +0 -0
  405. data/spec/dummy/webdav/1/group/rat.png +0 -0
  406. data/spec/dummy/webdav/1/unattached/rat.png +0 -0
  407. data/spec/dummy/webdav/group/rat.png +0 -0
  408. data/spec/dummy/webdav/unattached/rat.png +0 -0
  409. data/spec/dummy/webdav/unattached/rat_v1.png +0 -0
  410. data/spec/factories/agenda_categories.rb +5 -0
  411. data/spec/factories/categories.rb +5 -0
  412. data/spec/factories/documents.rb +16 -0
  413. data/spec/factories/events.rb +41 -0
  414. data/spec/factories/folders.rb +5 -0
  415. data/spec/factories/groups.rb +6 -0
  416. data/spec/factories/memberships.rb +5 -0
  417. data/spec/factories/people.rb +16 -0
  418. data/spec/factories/recurrence_rules.rb +25 -0
  419. data/spec/factories/user.rb +6 -0
  420. data/spec/fixtures/dummy.ics +59 -0
  421. data/spec/fixtures/images/frog.png +0 -0
  422. data/spec/fixtures/images/rat.png +0 -0
  423. data/spec/fixtures/ny.ics +36 -0
  424. data/spec/lib/droom/folders_spec.rb +46 -0
  425. data/spec/lib/droom/lazy_hash_spec.rb +33 -0
  426. data/spec/models/droom/agenda_category_spec.rb +15 -0
  427. data/spec/models/droom/document_spec.rb +76 -0
  428. data/spec/models/droom/event_spec.rb +154 -0
  429. data/spec/models/droom/folder_spec.rb +5 -0
  430. data/spec/models/droom/ical_spec.rb +62 -0
  431. data/spec/models/droom/mailing_list_membership_spec.rb +81 -0
  432. data/spec/models/droom/membership_spec.rb +22 -0
  433. data/spec/models/droom/person_spec.rb +72 -0
  434. data/spec/models/droom/recurrence_rule_spec.rb +81 -0
  435. data/spec/models/droom/user_spec.rb +27 -0
  436. data/spec/models/droom/visibility_spec.rb +6 -0
  437. data/spec/spec_helper.rb +119 -0
  438. data/spec/support/matchers/content_type_matcher.rb +17 -0
  439. metadata +591 -36
  440. data/app/assets/javascripts/droom/calendar.js.coffee +0 -121
  441. data/app/assets/javascripts/droom/drag_sort.js.coffee +0 -22
  442. data/app/assets/javascripts/droom/forms.js.coffee +0 -746
  443. data/app/assets/javascripts/droom/sort.js.coffee +0 -126
  444. data/app/assets/javascripts/droom/suggester.js.coffee +0 -230
  445. data/app/controllers/droom/document_attachments_controller.rb +0 -19
  446. data/app/models/droom/document_link.rb +0 -31
  447. data/app/models/droom/personal_document.rb +0 -98
  448. data/app/views/droom/dashboard/_marginalia.html.haml +0 -3
  449. data/app/views/droom/dashboard/_my_future_events.html.haml +0 -9
  450. data/app/views/droom/dashboard/_my_group_documents.html.haml +0 -6
  451. data/app/views/droom/dashboard/_my_past_events.haml +0 -6
  452. data/app/views/droom/documents/_event_document_form.html.haml +0 -15
  453. data/app/views/droom/errors/bang.html.haml +0 -12
  454. data/app/views/droom/errors/not_allowed.html.haml +0 -12
  455. data/app/views/droom/errors/not_found.html.haml +0 -12
  456. data/app/views/droom/events/_attachment.html.haml +0 -1
  457. data/app/views/droom/events/_attachment_list.html.haml +0 -4
  458. data/app/views/droom/invitations/_attending_people.html.haml +0 -8
  459. data/config/initializers/dav.rb +0 -2
@@ -4,7 +4,6 @@
4
4
  background: white
5
5
  padding: 0
6
6
  width: 210px
7
- +light
8
7
  cursor: default
9
8
  &.k-floating
10
9
  position: absolute
@@ -23,7 +22,6 @@
23
22
  white-space: nowrap
24
23
  position: relative
25
24
  height: 32px
26
- +heading
27
25
  font-size: 18px
28
26
  line-height: 32px
29
27
  .k-btn-previous-month, .k-btn-next-month
@@ -79,7 +77,6 @@
79
77
  width: 22px
80
78
  padding: 5px 5px 5px 3px
81
79
  .k-header span
82
- +heading
83
80
  text-align: center
84
81
  color: $pale
85
82
  .k-days span
@@ -88,7 +85,7 @@
88
85
  line-height: 1em
89
86
  color: #999
90
87
  .k-today
91
- +bold
88
+ font-weight: bold
92
89
  .k-days span
93
90
  &.k-active
94
91
  background-color: #fff
@@ -98,7 +95,7 @@
98
95
  background: $verypale
99
96
  &.k-selected
100
97
  background-color: $rubine
101
- +bold
98
+ font-weight: bold
102
99
  color: white
103
100
  &.k-range
104
101
  background: none
@@ -0,0 +1,86 @@
1
+ div.popup
2
+ position: fixed
3
+ overflow: auto
4
+ top: 100px
5
+ left: 100px
6
+ width: 580px
7
+ padding: 0
8
+ z-index: 250
9
+ min-height: 200px
10
+ background-color: $palest
11
+ +box_shadow(1px 3px 8px #52555f)
12
+ .header
13
+ position: relative
14
+ height: 28px
15
+ width: 100%
16
+ overflow: hidden
17
+ background-color: $text
18
+ padding: 8px 10px 4px 20px
19
+ h2
20
+ position: relative
21
+ height: 24px
22
+ line-height: 27px
23
+ margin: 0
24
+ margin-right: 40px
25
+ font-weight: normal
26
+ font-size: 0.9em
27
+ color: white
28
+ white-space: nowrap
29
+ a.closer
30
+ display: block
31
+ float: right
32
+ width: 16px
33
+ height: 18px
34
+ margin-left: 10px
35
+ margin-right: 0
36
+ margin-top: 2px
37
+ +text-hidden
38
+ background:
39
+ image: image-url('droom/crosses.png')
40
+ color: transparent
41
+ position: 0 0
42
+ repeat: no-repeat
43
+ &:hover
44
+ background-position: 0 -32px
45
+ .scrolled
46
+ overflow: hidden
47
+ .scroller
48
+ overflow: hidden
49
+ margin: 0
50
+ width: 1200px
51
+ .scrap
52
+ float: left
53
+ width: 580px
54
+ form
55
+ margin: 20px
56
+
57
+ .header
58
+ position: relative
59
+ top: 0
60
+ left: 0
61
+ width: 550px
62
+ a.next, a.prev, span.next, span.prev
63
+ position: relative
64
+ display: inline-block
65
+ width: 18px
66
+ height: 18px
67
+ text-indent: 20px
68
+ margin: 0 4px
69
+ overflow: hidden
70
+ background:
71
+ repeat: no-repeat
72
+ image: image-url('droom/leftright.png')
73
+ a.next
74
+ background-position: 0 0
75
+ &:hover
76
+ background-position: 0 -32px
77
+ a.prev
78
+ background-position: 0 -96px
79
+ margin-left: 0
80
+ &:hover
81
+ background-position: 0 -128px
82
+ span.next
83
+ background-position: 0 -64px
84
+ span.prev
85
+ background-position: 0 -160px
86
+ margin-left: 0
@@ -2,7 +2,7 @@
2
2
 
3
3
  .wysihtml
4
4
  position: relative
5
- width: 600px
5
+ width: 100%
6
6
  textarea
7
7
  position: relative
8
8
 
@@ -30,6 +30,7 @@
30
30
 
31
31
  .commands
32
32
  border-left: 1px solid #ddd
33
+ border-top: 1px solid $pale
33
34
  display: inline-block
34
35
  -webkit-padding-start: 0
35
36
  padding: 0
@@ -154,31 +155,36 @@
154
155
  background-image: none !important
155
156
 
156
157
  [data-wysihtml5-dialog]
158
+ position: relative
159
+ display: block
160
+ overflow: hidden
161
+ width: 482px
162
+ background-color: $palest
163
+ clear: left
157
164
  color: #333
158
165
  font-size: 14px
166
+ line-height: 14px
159
167
  text-align: left
160
168
  -ms-box-sizing: border-box
161
169
  -webkit-box-sizing: border-box
162
170
  -moz-box-sizing: border-box
163
171
  box-sizing: border-box
164
- padding: 5px 10px
165
- background: white
166
- position: relative
167
- label
168
- +bold
172
+ margin: 0
173
+ padding: 10px 6px 6px 6px
174
+ border: 1px solid $pale
175
+ border-bottom: none
169
176
  input[type="text"]
170
177
  color: $blue
171
178
  border: 1px solid $pale
172
- padding: 3px
173
- width: 50%
179
+ font-size: 14px
180
+ padding: 9px 6px 6px 6px
181
+ width: 310px
174
182
  min-width: 100px
175
183
  &:focus
176
184
  outline: 0
177
- border: 1px solid #666
178
185
 
179
186
  [data-wysihtml5-dialog-action]
180
- +book
181
- padding: 4px
187
+ padding: 8px
182
188
  cursor: pointer
183
189
  +border-radius(3px)
184
190
 
@@ -0,0 +1,24 @@
1
+ module Droom
2
+ class AgendaCategoriesController < Droom::EngineController
3
+ respond_to :html, :js
4
+ layout :no_layout_if_pjax
5
+ before_filter :get_event
6
+ before_filter :get_agenda_category, :only => [:destroy, :edit, :update]
7
+ before_filter :build_agenda_category, :only => [:new, :create]
8
+
9
+ protected
10
+
11
+ def get_event
12
+ @event = Droom::Event.find(params[:event_id])
13
+ end
14
+
15
+ def get_agenda_category
16
+ @agenda_category = @event.agenda_categories.find(params[:id])
17
+ end
18
+
19
+ def build_agenda_category
20
+ @agenda_category = @event.agenda_categories.build(params[:agenda_category])
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,29 @@
1
+ module Droom
2
+ class CalendarsController < Droom::EngineController
3
+ respond_to :html, :json, :rss, :ics
4
+ layout :no_layout_if_pjax
5
+
6
+ before_filter :authenticate_user!
7
+ before_filter :get_calendar, :only => :show
8
+ before_filter :get_calendars, :only => :index
9
+ before_filter :require_admin!, :except => :show
10
+
11
+ def show
12
+ respond_with @calendar
13
+ end
14
+
15
+ def index
16
+ respond_with @calendars
17
+ end
18
+
19
+ protected
20
+
21
+ def get_calendars
22
+ @calendars = Droom::Calendar.all
23
+ end
24
+
25
+ def get_calendar
26
+ @calendar = Droom::Calendar.find(params[:id])
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,38 @@
1
+ module Droom
2
+ class ConfirmationsController < Devise::ConfirmationsController
3
+
4
+ # If user not yet confirmed, show password form (rather than just confirming, as it normal)
5
+ # If already confirmed, allow devise to do whatever devise does.
6
+ #
7
+ def show
8
+ self.resource = resource_class.find_by_confirmation_token(params[:confirmation_token])
9
+ super if resource.confirmed?
10
+ end
11
+
12
+ # the purpose of this is to add another step between user creation and user confirmation, such that
13
+ # we perform the confirmation only if a password is supplied and validates.
14
+ #
15
+ # NB. in the tortured RESTfulness of devise, that means turning confirmation#show into a password form
16
+ # and using confirmations#update to update the user object accordingly.
17
+ #
18
+ def update
19
+ self.resource = resource_class.find_by_confirmation_token(params[resource_name][:confirmation_token])
20
+
21
+ result = resource.update_attributes(params[resource_name].except(:confirmation_token))
22
+
23
+ Rails.logger.warn ">>> update_attributes gave us #{result.inspect} and password #{resource.password} / #{resource.password_confirmation}"
24
+ Rails.logger.warn ">>> errors: #{resource.errors.full_messages}"
25
+
26
+ if result && resource.password_match?
27
+ self.resource = resource_class.confirm_by_token(params[resource_name][:confirmation_token])
28
+ set_flash_message :notice, :confirmed
29
+ sign_in_and_redirect(resource_name, resource)
30
+ else
31
+ # back to the password form
32
+ set_flash_message :error, :password_error
33
+ render :action => "show"
34
+ end
35
+ end
36
+
37
+ end
38
+ end
@@ -6,6 +6,8 @@ module Droom
6
6
  before_filter :authenticate_user!
7
7
 
8
8
  def index
9
+ @panel = session[:panel] || "search"
10
+ session[:panel] = nil
9
11
  render
10
12
  end
11
13
 
@@ -4,56 +4,54 @@ module Droom
4
4
  layout :no_layout_if_pjax
5
5
 
6
6
  before_filter :authenticate_user!
7
- before_filter :require_admin!, :except => [:index, :show]
8
- before_filter :get_current_person
7
+ # before_filter :require_admin!, :except => [:index, :show]
8
+ before_filter :get_folder
9
9
  before_filter :find_documents, :only => [:index]
10
10
  before_filter :get_document, :only => [:show, :edit, :update, :destroy]
11
11
  before_filter :build_document, :only => [:new, :create]
12
12
 
13
13
  def index
14
14
  respond_with @documents do |format|
15
- format.js {
16
- if @event
17
- render :partial => 'documents_list'
18
- else
19
- render :partial => 'documents_table'
20
- end
21
- }
15
+ format.js { render :partial => 'droom/documents/documents' }
22
16
  end
23
17
  end
24
18
 
25
19
  def show
26
- if current_user.person && @document.file
27
- if personal_document = current_user.person.personal_version_of(@document)
28
- # personal documents are stored outside the web root so this is an internal-only redirect in nginx.
29
- redirect_to personal_document.url
30
- else
31
- # master documents are stored in private S3 buckets accessible only through signed urls with a lifespan of only two minutes.
32
- redirect_to @document.file.expiring_url(Time.now + 120)
33
- end
20
+ if @document.file
21
+ # master documents are stored in private S3 buckets
22
+ # To keep the documents secure, we:
23
+ # * publish them only through this controller (so no S3 links appear on the page)
24
+ # * deliver them only to authenticated users
25
+ # * delivery by redirecting to a URL that expires in ten minutes
26
+ #
27
+ # We could channel all file delivery through this controller and may do so in future but it
28
+ # creates a nasty performance bottleneck. For now the redirect approach seems more robust
29
+ # and the expiring URLs sufficiently obscure.
30
+ #
31
+ redirect_to @document.file.expiring_url(Time.now + 600)
32
+ else
33
+ raise ActiveRecord::RecordNotFound
34
34
  end
35
35
  end
36
36
 
37
37
  def new
38
- render :partial => "form"
38
+ render
39
39
  end
40
40
 
41
41
  def create
42
- if @event
43
- @event.save!
44
- end
42
+ @document.update_attributes(params[:document])
45
43
  @document.save!
46
44
  render :partial => 'created'
47
45
  end
48
46
 
49
47
  def edit
50
- render :partial => "form"
48
+ render
51
49
  end
52
50
 
53
51
  def update
54
52
  @document.update_attributes(params[:document])
55
53
  @document.save!
56
- render :partial => 'table_document', :object => @document.with_event
54
+ render :partial => 'listing', :object => @document.with_event
57
55
  end
58
56
 
59
57
  def destroy
@@ -63,54 +61,47 @@ module Droom
63
61
 
64
62
 
65
63
  protected
64
+ def get_folder
65
+ @folder = Droom::Folder.find_by_id(params[:folder_id])
66
+ end
66
67
 
67
68
  def build_document
68
- params[:document] ||= {}
69
- if params[:event_id] || params[:document][:event_id]
70
- @event = Droom::Event.find(params[:event_id] || params[:document][:event_id])
71
- @document = @event.documents.new(params[:document])
72
- @category = @event.categories.find(params[:category_name]) if params[:category_name]
73
- else
74
- @document = Droom::Document.new(params[:document])
75
- end
69
+ @document = @folder.documents.build(params[:document])
76
70
  end
77
71
 
78
72
  def get_document
79
- @document = Droom::Document.find(params[:id])
73
+ @document = @folder.documents.find(params[:id])
80
74
  end
81
75
 
82
76
  def find_documents
83
- @event = Droom::Event.find(params[:event_id]) if params[:event_id]
84
77
  sort_orders = {
85
- 'ASC' => "ASC",
86
- 'DESC' => "DESC"
78
+ 'asc' => "ASC",
79
+ 'desc' => "DESC"
87
80
  }
88
- params[:order] = 'DESC' unless sort_orders[params[:order]]
81
+ @order = sort_orders[params[:order]] || "DESC"
89
82
 
90
83
  sort_parameters = {
91
- 'name' => 'droom_documents.name',
92
- 'filename' => 'droom_documents.file_file_name',
93
- 'filesize' => 'droom_documents.file_file_size',
94
- 'created' => 'droom_documents.created_at',
95
- 'event' => 'event_name',
96
- 'category' => 'case when category_name is null then 1 else 0 end, category_name'
84
+ 'name' => "droom_documents.name #{@order}",
85
+ 'filename' => "droom_documents.file_file_name #{@order}",
86
+ 'filesize' => "droom_documents.file_file_size #{@order}",
87
+ 'created' => "droom_documents.created_at #{@order}",
88
+ 'event' => "event_name #{@order}",
89
+ 'category' => "case when category_name is null then 1 else 0 end #{@order}, category_name #{@order}"
97
90
  }
98
91
  params[:sort] = 'created' unless sort_parameters[params[:sort]]
99
-
100
- @by = sort_parameters[params[:sort]]
101
- @order = sort_orders[params[:order]]
102
- @show = params[:show] || 20
92
+ @sort = params[:sort]
93
+ @show = params[:show] || 10
103
94
  @page = params[:page] || 1
104
95
 
105
96
  if current_user.admin?
106
- @documents = Droom::Document.with_latest_event
97
+ @documents = Droom::Document.scoped({})
107
98
  else
108
- @documents = Droom::Document.visible_to(@current_person).with_latest_event
99
+ @documents = Droom::Document.visible_to(@current_person)
109
100
  end
110
101
 
111
- @documents = @documents.name_matching(params[:q]) unless params[:q].blank?
112
- @documents = @documents.order("#{@by} #{@order}").page(@page).per(@show)
102
+ @documents = @documents.matching(params[:q]) unless params[:q].blank?
103
+ @documents = @documents.order(sort_parameters[@sort]).page(@page).per(@show)
113
104
  end
114
-
105
+
115
106
  end
116
107
  end