cloudrider 0.3.0 → 0.3.20

Sign up to get free protection for your applications and to get access to all the features.
Files changed (227) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +11 -1
  3. data/cloudrider.gemspec +1 -0
  4. data/generica/.gitignore +18 -0
  5. data/generica/Gemfile +8 -1
  6. data/generica/Gemfile.lock +3 -0
  7. data/generica/app/assets/javascripts/apiv1.js.ls +6 -1
  8. data/generica/app/assets/javascripts/components/offers-summary.js.em +2 -0
  9. data/generica/app/assets/javascripts/components/picture-chunk.js.em +17 -0
  10. data/generica/app/assets/javascripts/components/pictures-group.js.em +21 -0
  11. data/generica/app/assets/javascripts/components/search-and-filter.js.em +4 -0
  12. data/generica/app/assets/javascripts/components/site-nav.js.em +5 -1
  13. data/generica/app/assets/javascripts/components/taggable-field.js.em +28 -0
  14. data/generica/app/assets/javascripts/components/tree/taxon-li.js.em +6 -2
  15. data/generica/app/assets/javascripts/controllers/index_controller.js.em +19 -2
  16. data/generica/app/assets/javascripts/controllers/modals/login_controller.js.em +23 -9
  17. data/generica/app/assets/javascripts/controllers/modals/register_controller.js.em +24 -0
  18. data/generica/app/assets/javascripts/controllers/products/index_controller.js.em +23 -13
  19. data/generica/app/assets/javascripts/controllers/products/product/offers/new_controller.js.em +17 -0
  20. data/generica/app/assets/javascripts/controllers/users/offers/index_controller.js.em +10 -0
  21. data/generica/app/assets/javascripts/controllers/users/product/edit_controller.js.em +31 -0
  22. data/generica/app/assets/javascripts/controllers/users/products/index_controller.js.em +8 -0
  23. data/generica/app/assets/javascripts/controllers/users/products/new_controller.js.em +22 -0
  24. data/generica/app/assets/javascripts/controllers/users/products/slice_controller.js.em +4 -0
  25. data/generica/app/assets/javascripts/helpers/filte_previewer.js.ls +21 -0
  26. data/generica/app/assets/javascripts/helpers/listing_picture.js.em +17 -0
  27. data/generica/app/assets/javascripts/models/offer.js.em +9 -8
  28. data/generica/app/assets/javascripts/models/user.js.em +12 -0
  29. data/generica/app/assets/javascripts/models/users/product.js.em +12 -0
  30. data/generica/app/assets/javascripts/routes/application_route.js.em +10 -2
  31. data/generica/app/assets/javascripts/routes/products/index_route.js.em +23 -2
  32. data/generica/app/assets/javascripts/routes/products/product/offers/new_route.js.em +18 -0
  33. data/generica/app/assets/javascripts/routes/users/offers/index_route.js.em +1 -0
  34. data/generica/app/assets/javascripts/routes/users/product_route.js.em +3 -0
  35. data/generica/app/assets/javascripts/routes/users/products/index_route.js.em +3 -0
  36. data/generica/app/assets/javascripts/routes/users/products/new_route.js.em +3 -0
  37. data/generica/app/assets/javascripts/templates/admin/product/edit.emblem +2 -0
  38. data/generica/app/assets/javascripts/templates/admin/products/_form-core.emblem +44 -0
  39. data/generica/app/assets/javascripts/templates/admin/products/new.emblem +4 -42
  40. data/generica/app/assets/javascripts/templates/components/offers-summary.emblem +9 -0
  41. data/generica/app/assets/javascripts/templates/components/picture-chunk.emblem +9 -0
  42. data/generica/app/assets/javascripts/templates/components/pictures-group.emblem +6 -0
  43. data/generica/app/assets/javascripts/templates/components/search-and-filter.emblem +5 -1
  44. data/generica/app/assets/javascripts/templates/components/taggable-field.emblem +1 -0
  45. data/generica/app/assets/javascripts/templates/modals/register.emblem +57 -0
  46. data/generica/app/assets/javascripts/templates/products/product/offers/_anonymous-form.emblem +11 -0
  47. data/generica/app/assets/javascripts/templates/products/product/offers/_offer-form.emblem +55 -0
  48. data/generica/app/assets/javascripts/templates/products/product/offers/new.emblem +37 -0
  49. data/generica/app/assets/javascripts/templates/products/product/show.emblem +26 -1
  50. data/generica/app/assets/javascripts/templates/users.emblem +24 -0
  51. data/generica/app/assets/javascripts/templates/users/index.emblem +3 -0
  52. data/generica/app/assets/javascripts/templates/users/offers/index.emblem +25 -0
  53. data/generica/app/assets/javascripts/templates/users/offers/slice.emblem +31 -0
  54. data/generica/app/assets/javascripts/templates/users/product/edit.emblem +82 -0
  55. data/generica/app/assets/javascripts/templates/users/products/index.emblem +22 -0
  56. data/generica/app/assets/javascripts/templates/users/products/new.emblem +28 -0
  57. data/generica/app/assets/javascripts/templates/users/products/slice.emblem +27 -0
  58. data/generica/app/assets/stylesheets/apiv1/_application.css.scss +4 -0
  59. data/generica/app/assets/stylesheets/apiv1/components/_offers-summary.css.scss +20 -0
  60. data/generica/app/assets/stylesheets/apiv1/components/_pictures-group.css.scss +32 -0
  61. data/generica/app/assets/stylesheets/apiv1/components/_taggable-field.css.scss +32 -0
  62. data/generica/app/assets/stylesheets/apiv1/products/product/offers/_new.css.scss +8 -0
  63. data/generica/app/controllers/admin/base_controller.rb +1 -1
  64. data/generica/app/controllers/admin/sessions/destroy_controller.rb +16 -0
  65. data/generica/app/controllers/apiv1/offers/create_controller.rb +30 -0
  66. data/generica/app/controllers/apiv1/offers/index_controller.rb +22 -0
  67. data/generica/app/controllers/apiv1/offers/show_controller.rb +12 -0
  68. data/generica/app/controllers/apiv1/products/destroy_controller.rb +6 -0
  69. data/generica/app/controllers/apiv1/products/index_controller.rb +8 -2
  70. data/generica/app/controllers/apiv1/products/show_controller.rb +7 -3
  71. data/generica/app/controllers/apiv1/taxons/index_controller.rb +5 -1
  72. data/generica/app/controllers/apiv1/users/create_controller.rb +17 -0
  73. data/generica/app/controllers/apiv1/users/show_controller.rb +12 -0
  74. data/generica/app/controllers/apiv1/users_controller.rb +9 -0
  75. data/generica/app/controllers/application_controller.rb +3 -0
  76. data/generica/app/controllers/users/offers/create_controller.rb +26 -0
  77. data/generica/app/controllers/users/products/create_controller.rb +26 -0
  78. data/generica/app/controllers/users/products/update_controller.rb +35 -0
  79. data/generica/app/mailers/apiv1/aggregate_mailer.rb +13 -0
  80. data/generica/app/mailers/apiv1/aggregate_mailer/summary_context.rb +121 -0
  81. data/generica/app/mailers/apiv1/notifications_mailer.rb +19 -0
  82. data/generica/app/mailers/apiv1/notifications_mailer/new_offer_context.rb +53 -0
  83. data/generica/app/models/admin/user.rb +43 -2
  84. data/generica/app/models/apiv1/attachment.rb +2 -0
  85. data/generica/app/models/apiv1/email_object.rb +35 -0
  86. data/generica/app/models/apiv1/email_request.rb +107 -0
  87. data/generica/app/models/apiv1/offer_message.rb +53 -0
  88. data/generica/app/models/apiv1/offer_postboy.rb +33 -0
  89. data/generica/app/models/apiv1/picture.rb +2 -0
  90. data/generica/app/models/apiv1/product.rb +28 -6
  91. data/generica/app/models/apiv1/products/offer_message_factory.rb +13 -0
  92. data/generica/app/models/apiv1/products_machine.rb +8 -2
  93. data/generica/app/models/apiv1/taxon.rb +1 -1
  94. data/generica/app/models/apiv1/users/product_factory.rb +22 -0
  95. data/generica/app/models/apiv1/users/product_relationship.rb +19 -0
  96. data/generica/app/models/users/products/offer_factory.rb +40 -0
  97. data/generica/app/varissets/javascripts/templates/application.emblem.erb +2 -2
  98. data/generica/app/varissets/javascripts/templates/components/offers-overview.emblem.erb +1 -0
  99. data/generica/app/varissets/javascripts/templates/components/search-and-filter.emblem.erb +33 -0
  100. data/generica/app/varissets/javascripts/templates/components/site-nav.emblem.erb +8 -0
  101. data/generica/app/varissets/javascripts/templates/components/taggable-field.emblem.erb +11 -0
  102. data/generica/app/varissets/javascripts/templates/modals/login.emblem.erb +36 -0
  103. data/generica/app/varissets/javascripts/templates/products.emblem.erb +4 -0
  104. data/generica/app/varissets/javascripts/templates/products/index.emblem.erb +17 -0
  105. data/generica/app/varissets/javascripts/templates/products/product/offers/_anonymous-form.emblem.erb +11 -0
  106. data/generica/app/varissets/javascripts/templates/products/product/offers/_offer-form.emblem.erb +55 -0
  107. data/generica/app/varissets/javascripts/templates/products/product/offers/new.emblem.erb +37 -0
  108. data/generica/app/varissets/javascripts/templates/products/product/show.emblem.erb +108 -0
  109. data/generica/app/varissets/stylesheets/apiv1/components/_offers-overview.css.scss.erb +3 -0
  110. data/generica/app/varissets/stylesheets/apiv1/components/_offers_overview.css.scss.erb +3 -0
  111. data/generica/app/varissets/stylesheets/apiv1/components/_search-and-filter.css.scss.erb +15 -0
  112. data/generica/app/varissets/stylesheets/apiv1/components/_site-footer.css.scss.erb +23 -0
  113. data/generica/app/varissets/stylesheets/apiv1/components/_taggable-field.css.scss.erb +32 -0
  114. data/generica/app/views/apiv1/home/index.html.haml +3 -1
  115. data/generica/app/views/apiv1/layouts/application.html.haml +37 -2
  116. data/generica/config/{database.yml.erb → database.yml.str} +3 -3
  117. data/generica/config/email.yml +11 -0
  118. data/generica/config/email_slave.god +9 -0
  119. data/generica/config/initializers/premailer.rb +1 -0
  120. data/generica/config/initializers/squash.rb.erb +3 -0
  121. data/generica/config/nginx.conf.erb +4 -4
  122. data/generica/config/routes.rb +14 -0
  123. data/generica/db/migrate/20141114213427_add_user_rank_to_admin_users.rb +9 -0
  124. data/generica/db/migrate/20141114225019_create_apiv1_users_products.rb +9 -0
  125. data/generica/db/migrate/20141116053522_create_apiv1_offer_messages.rb +16 -0
  126. data/generica/db/migrate/20141116235011_add_deleted_at_to_apiv1_products.rb +5 -0
  127. data/generica/db/migrate/20141116235209_add_deleted_at_to_apiv1_offer_messages.rb +5 -0
  128. data/generica/db/migrate/20141116235651_add_deleted_at_to_apiv1_pictures.rb +5 -0
  129. data/generica/db/migrate/20141116235808_add_deleted_at_to_apiv1_attachments.rb +5 -0
  130. data/generica/db/migrate/20141127230304_create_apiv1_email_requests.rb +16 -0
  131. data/generica/db/migrate/20141127230455_create_apiv1_email_objects.rb +11 -0
  132. data/generica/lib/generica/assets_unretardifier.rb +32 -0
  133. data/generica/lib/generica/email_slave.rb +92 -0
  134. data/generica/lib/tasks/email_slave.rake +11 -0
  135. data/generica/lib/tasks/production.rake +1 -1
  136. data/generica/public/tests/bermese.jpg +0 -0
  137. data/generica/public/tests/chow.jpg +0 -0
  138. data/generica/public/tests/malamute.jpg +0 -0
  139. data/generica/public/tests/malamute2.JPG +0 -0
  140. data/generica/spec/controllers/apiv1/users/create_controller_spec.rb +17 -0
  141. data/generica/spec/controllers/users/products/create_controller_spec.rb +31 -0
  142. data/generica/spec/mailers/apiv1/aggregate_mailer_spec.rb +29 -0
  143. data/generica/spec/models/apiv1/email_request_spec.rb +4 -0
  144. data/generica/spec/models/apiv1/offer_postboy_spec.rb +22 -0
  145. data/generica/spec/models/apiv1/product_spec.rb +1 -0
  146. data/generica/spec/models/apiv1/products/offer_message_factory_spec.rb +37 -0
  147. data/generica/spec/models/apiv1/products_machine_spec.rb +77 -0
  148. data/generica/spec/models/apiv1/users/product_factory_spec.rb +47 -0
  149. data/generica/spec/models/users/products/offer_factory_spec.rb +38 -0
  150. data/generica/test/mailers/.keep +0 -0
  151. data/generica/test/mailers/previews/apiv1/aggregate_preview.rb +6 -0
  152. data/generica/test/mailers/previews/apiv1/notifications_preview.rb +5 -0
  153. data/lib/cloudrider.rb +1 -1
  154. data/lib/cloudrider/apiv1/base.rb +2 -2
  155. data/lib/cloudrider/apiv1/login_modal_emblem.rb +25 -0
  156. data/lib/cloudrider/apiv1/offers_anonymous_form_partial_emblem.rb +12 -0
  157. data/lib/cloudrider/apiv1/offers_new_emblem.rb +15 -0
  158. data/lib/cloudrider/apiv1/offers_overview_component.rb +8 -0
  159. data/lib/cloudrider/apiv1/offers_overview_sass.rb +8 -0
  160. data/lib/cloudrider/apiv1/product_show_emblem.rb +31 -0
  161. data/lib/cloudrider/apiv1/products_emblem.rb +11 -0
  162. data/lib/cloudrider/apiv1/products_index_emblem.rb +14 -0
  163. data/lib/cloudrider/apiv1/search_and_filter_component.rb +11 -0
  164. data/lib/cloudrider/apiv1/search_and_filter_sass.rb +11 -0
  165. data/lib/cloudrider/apiv1/site_footer_component.rb +7 -7
  166. data/lib/cloudrider/apiv1/site_footer_sass.rb +9 -0
  167. data/lib/cloudrider/application_commander.rb +46 -34
  168. data/lib/cloudrider/backend_commander.rb +15 -9
  169. data/lib/cloudrider/protofile.rb +18 -2
  170. data/lib/cloudrider/protosite.example.json +26 -0
  171. data/lib/cloudrider/protosite.rb +66 -0
  172. data/lib/cloudrider/serverside/base.rb +2 -2
  173. data/lib/cloudrider/serverside/database_yaml.rb +9 -4
  174. data/lib/cloudrider/serverside/nginx_conf.rb +7 -2
  175. data/lib/cloudrider/serverside/squash_ruby.rb +14 -0
  176. data/lib/cloudrider/serverside/unicorn_conf_ruby.rb +2 -1
  177. data/lib/cloudrider/version.rb +1 -1
  178. data/lib/cloudrider/web_firm.rb +16 -0
  179. data/lib/cloudrider/web_firm/component_architect.rb +23 -0
  180. data/lib/cloudrider/web_firm/page_designer.rb +13 -0
  181. data/lib/cloudrider/web_firm/project_lead.rb +30 -0
  182. data/lib/cloudrider/web_firm/scumbag_engineer.rb +40 -0
  183. data/lib/cloudrider/web_firm/support_intern.rb +113 -0
  184. data/lib/generators/cloudrider/server/server_generator.rb +4 -8
  185. data/lib/generators/cloudrider/website/website_generator.rb +25 -0
  186. data/spec/cloudrider/protosite_spec.rb +63 -0
  187. data/vanilla/.bowerrc +4 -0
  188. data/vanilla/.editorconfig +33 -0
  189. data/vanilla/.ember-cli +9 -0
  190. data/vanilla/.gitignore +17 -0
  191. data/vanilla/.jshintrc +32 -0
  192. data/vanilla/.travis.yml +16 -0
  193. data/vanilla/Brocfile.js +20 -0
  194. data/vanilla/README.md +51 -0
  195. data/vanilla/app/app.js +16 -0
  196. data/vanilla/app/components/.gitkeep +0 -0
  197. data/vanilla/app/controllers/.gitkeep +0 -0
  198. data/vanilla/app/controllers/admin.coffee +5 -0
  199. data/vanilla/app/helpers/.gitkeep +0 -0
  200. data/vanilla/app/index.html +21 -0
  201. data/vanilla/app/models/.gitkeep +0 -0
  202. data/vanilla/app/router.js +11 -0
  203. data/vanilla/app/routes/.gitkeep +0 -0
  204. data/vanilla/app/styles/.gitkeep +0 -0
  205. data/vanilla/app/styles/app.css +3 -0
  206. data/vanilla/app/templates/.gitkeep +0 -0
  207. data/vanilla/app/templates/application.hbs +3 -0
  208. data/vanilla/app/templates/components/.gitkeep +0 -0
  209. data/vanilla/app/views/.gitkeep +0 -0
  210. data/vanilla/bower.json +17 -0
  211. data/vanilla/config/environment.js +47 -0
  212. data/vanilla/package.json +39 -0
  213. data/vanilla/public/.gitkeep +0 -0
  214. data/vanilla/public/crossdomain.xml +15 -0
  215. data/vanilla/public/robots.txt +3 -0
  216. data/vanilla/testem.json +11 -0
  217. data/vanilla/tests/.jshintrc +74 -0
  218. data/vanilla/tests/helpers/resolver.js +11 -0
  219. data/vanilla/tests/helpers/start-app.js +25 -0
  220. data/vanilla/tests/index.html +45 -0
  221. data/vanilla/tests/test-helper.js +12 -0
  222. data/vanilla/tests/unit/.gitkeep +0 -0
  223. data/vanilla/tests/unit/controllers/admin-test.coffee +12 -0
  224. data/vanilla/vendor/.gitkeep +0 -0
  225. metadata +189 -5
  226. data/generica/app/views/layouts/application.html.erb +0 -14
  227. data/lib/cloudrider/master_context.rb +0 -105
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9d4b94ed61a707034b8ccd0c682b2f68462344f4
4
- data.tar.gz: 131dcbeb5d47dae64d81868ead5f1e6ee50c27d8
3
+ metadata.gz: 5334f23f91a9c3a7cd5b5efef53c2963ca386364
4
+ data.tar.gz: 08302967d39ffd580befd2f26a1f83ae29f7e64f
5
5
  SHA512:
6
- metadata.gz: 46ed9888ae4259ad837a82707cc9916058dbe1f4592be93daba3e78d7b7d2aeb4a0b7905c74bf1113b87c4572b186b65f58135e1f650a2b6956a2de2120028a0
7
- data.tar.gz: c66088abfe37ef2e1bdc459a8c940ea642ae69862222ada8de414e8c492493f3af6fb7674ae7047238039c8d1068990055a98ca69805a3f1f53b87bd6600f92a
6
+ metadata.gz: 6f698234c8a31c9dbd6e77240733d0d985babcefa394a841fd894b4f1055197d9776f49c3e793dce883d12cdb7f41672bb40b50b383e2e8b92b4fead732ae078
7
+ data.tar.gz: e7ddb9a4cd9e2b6b2558bb9c13e2ba8641801426fd6282331a86bf89da2f1d94a177463928c555d4e27684830358c7913d896dc3ff0248186c5e8c840eed7b18
data/README.md CHANGED
@@ -1,8 +1,18 @@
1
1
  # Cloudrider
2
2
 
3
+ TODO:
4
+ 1. rework session / user registration to store static session data outside the controller
5
+ 2. extract the image preloader out of the ember app
6
+ 3. roll in google analytics
7
+ 4. products new form needs testing and the edge case when people don't upload pictures
8
+ 5. switch over to using ember cli on top of asshole pipelines
9
+ 6. finish up the protosite / protopage input data objects and their scaffolding
10
+ 7. work in email dispatching and such services
11
+ 8. fix search-and-filter so that clicking on categories automatically fills the search bar, the search into a form so you can enter submit
12
+
3
13
  Deployment use for restarting the server
4
14
  ```bash
5
- $ rake production:on_restart RAILS_ENV=production && kill -QUIT $(cat tmp/pids/unicorn.pid) && unicorn_rails -c config/unicorn.conf.rb -E production -D
15
+ rake production:on_restart RAILS_ENV=production && kill -QUIT $(cat tmp/pids/unicorn.pid) && unicorn_rails -c config/unicorn.conf.rb -E production -D
6
16
  ```
7
17
  FUTURE TODO:
8
18
  switch I18n translations to a key-value storage basis with a redis cluster
data/cloudrider.gemspec CHANGED
@@ -24,4 +24,5 @@ Gem::Specification.new do |spec|
24
24
  spec.add_dependency "functional_support", '>=0.0.12'
25
25
  spec.add_dependency "tilt", ">=1.4"
26
26
  spec.add_dependency "activesupport", '>=3'
27
+ spec.add_dependency "arrows", ">=0.0.2"
27
28
  end
@@ -0,0 +1,18 @@
1
+ # See https://help.github.com/articles/ignoring-files for more about ignoring files.
2
+ #
3
+ # If you find yourself ignoring temporary files generated by your text editor
4
+ # or operating system, you probably want to add a global ignore instead:
5
+ # git config --global core.excludesfile '~/.gitignore_global'
6
+
7
+ # Ignore bundler config.
8
+ /.bundle
9
+
10
+ # Ignore the default SQLite database.
11
+ /db/*.sqlite3
12
+ /db/*.sqlite3-journal
13
+
14
+ # Ignore all logfiles and tempfiles.
15
+ /log/*.log
16
+ /tmp
17
+
18
+ /public/system
data/generica/Gemfile CHANGED
@@ -2,7 +2,7 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Cloudrider requires the following gems
4
4
  # Core Backend
5
- gem 'rails', '4.1.6'
5
+ gem 'rails', '~> 4.1.8'
6
6
  gem 'gctools', '~>0.2.3'
7
7
  gem 'functional_support', '>=0.0.12'
8
8
  gem 'mysql2'
@@ -14,6 +14,11 @@ gem 'probability', "1"
14
14
  gem 'elasticsearch-rails', '~> 0.1.4'
15
15
  gem 'elasticsearch-model', '~> 0.1.4'
16
16
  gem 'elasticsearch', '~> 1.0.4'
17
+ gem 'paranoia', '~> 2.0.2'
18
+ gem 'premailer-rails', '~> 1.8.0'
19
+ gem 'gmail', '~> 0.4.2'
20
+ gem 'god', '~> 0.13.4'
21
+ gem 'arrows', '>= 0.0.2'
17
22
 
18
23
  # Support
19
24
  gem "haml", "~> 4.0.0"
@@ -22,6 +27,8 @@ gem "stringex", "~> 2.1.2"
22
27
  gem 'ffaker', ">=1.20.0"
23
28
  gem 'numbers_and_words', "~> 0.10.0"
24
29
  gem 'decent_exposure', '~> 2.3.1'
30
+ gem 'squash_ruby', '~> 2.0.0', :require => 'squash/ruby'
31
+ gem 'squash_rails', '~>1.3.3', :require => 'squash/rails'
25
32
 
26
33
  # Assets Frameworks
27
34
  gem "font-awesome-sass", "~> 4.1.0.0"
@@ -208,6 +208,8 @@ GEM
208
208
  activesupport (>= 3.0.0)
209
209
  cocaine (~> 0.5.3)
210
210
  mime-types
211
+ paranoia (2.0.2)
212
+ activerecord (~> 4.0)
211
213
  probability (1.0.0)
212
214
  rack (1.5.2)
213
215
  rack-test (0.6.2)
@@ -342,6 +344,7 @@ DEPENDENCIES
342
344
  numbers_and_words (~> 0.10.0)
343
345
  painful_translate (>= 0.0.4)
344
346
  paperclip (~> 4.2.0)
347
+ paranoia (~> 2.0.2)
345
348
  probability (= 1)
346
349
  rails (= 4.1.6)
347
350
  rails_12factor
@@ -2,6 +2,7 @@
2
2
  #= require generica/image-preload
3
3
  #= require ./packages/flash
4
4
  #= require ./packages/image_preloader
5
+ #= require ./packages/tag_parser
5
6
  #= require_tree ./mixins
6
7
  #= require_tree ./helpers
7
8
  #= require_tree ./controllers
@@ -23,4 +24,8 @@ Apiv1.ApplicationStore = DS.Store.extend do
23
24
  # is built to work nicely with the ActiveModel::Serializers gem.
24
25
  adapter: DS.ActiveModelAdapter
25
26
 
26
- $ _.once -> $('#now-loading').hide!
27
+ $ _.once ->
28
+ if window.RawCurrentUserSession
29
+ store = Apiv1.__container__.lookup("store:main")
30
+ set$ Apiv1, "CurrentUserSession", store.push "adminSession", window.RawCurrentUserSession
31
+ $('#now-loading').hide "puff", 600
@@ -0,0 +1,2 @@
1
+ class Apiv1.OffersSummaryComponent extends Ember.Component
2
+ classNames: ['offers-summary']
@@ -0,0 +1,17 @@
1
+ class Apiv1.PictureChunkComponent extends Ember.Component
2
+ classNames: ["picture-chunk"]
3
+
4
+ +computed picture.src
5
+ src: -> @get("picture.src")
6
+
7
+ +computed picture.fileName
8
+ fileName: -> @get("picture.fileName")
9
+
10
+ +computed model
11
+ picture: ->
12
+ return if Ember.isBlank @model
13
+ Apiv1.ListingsPicture.fromFile @model
14
+
15
+ actions:
16
+ killPicture: ->
17
+ @controller.sendAction "action", @model
@@ -0,0 +1,21 @@
1
+ class Apiv1.PicturesGroupComponent extends Ember.Component
2
+ classNames: ["pictures-group"]
3
+ pictures: []
4
+ totalAllowedSize: "10 mb"
5
+
6
+ +computed images.@each.fileSize
7
+ totalFileSize: ->
8
+ Apiv1.StringEx.byteUnits @images.reduce @pictureSummer, 0
9
+
10
+
11
+ +computed pictures.@each
12
+ images: ->
13
+ return [] if Ember.isBlank @pictures
14
+ @pictures.map (pic) => Apiv1.ListingsPicture.fromFile pic
15
+
16
+ pictureSummer: (sumSizes, image) ->
17
+ sumSizes + image.get("fileSize")
18
+
19
+ actions:
20
+ killPicture: (picture) ->
21
+ @pictures.removeObject picture
@@ -2,11 +2,15 @@ class Apiv1.SearchAndFilterComponent extends Ember.Component
2
2
  classNames: ['search-and-filter']
3
3
  activeTaxons: []
4
4
  searchQuery: ""
5
+ attributeBindings: ['class']
5
6
 
6
7
  +computed activeTaxons.@each, searchQuery
7
8
  searchParams: ->
8
9
  activeTaxons: @activeTaxons
9
10
  searchQuery: @searchQuery
11
+
12
+ didInsertElement: ->
13
+ @searchQuery = @query
10
14
 
11
15
  actions:
12
16
  search: ->
@@ -22,4 +22,8 @@ class Apiv1.SiteNavComponent extends Ember.Component
22
22
 
23
23
  willDestroyElement: ->
24
24
  $("#page-wrapper").unbind "touchmove"
25
- $("#page-wrapper").unbind "scroll"
25
+ $("#page-wrapper").unbind "scroll"
26
+
27
+ actions:
28
+ displayModal: (modal) ->
29
+ @sendAction 'action', modal
@@ -0,0 +1,28 @@
1
+ class Apiv1.TaggableFieldComponent extends Ember.Component
2
+ tags: []
3
+ classNames: ['taggable-field']
4
+ attributeBindings: ["class"]
5
+ text: ""
6
+
7
+ +observer tags.@each.id, tags.@each.taxonName
8
+ fixTextOnTagChange: ->
9
+ tokenFromTags = @batchTokenify @tags
10
+ @appendMissingText tokenFromTags
11
+ @dropUnwantedText tokenFromTags
12
+
13
+ +computed text
14
+ existingTextTokens: ->
15
+ Apiv1.TagParser.parse(@text).tagTokens()
16
+
17
+ appendMissingText: (texts) ->
18
+ missing = _.difference texts, @existingTextTokens
19
+ @text = [@text.trim(), missing.join(" ").trim()].join " "
20
+
21
+ dropUnwantedText: (texts)->
22
+ stuffToRemove = _.difference @existingTextTokens, texts
23
+ for str in stuffToRemove
24
+ @text = @text.split(str).join("")
25
+
26
+ batchTokenify: (tags) ->
27
+ return [] if Ember.isBlank tags
28
+ tags.map Apiv1.TagParser.tokenifyTaxon
@@ -9,7 +9,7 @@ class Apiv1.TreeTaxonLiComponent extends Ember.Component
9
9
  return false unless @isExpandable
10
10
  if arguments.length > 1
11
11
  @expansionCoefficient = expand
12
- unless @expansionCoefficient?
12
+ if Ember.isBlank @expansionCoefficient
13
13
  @expansionCoefficient = @isExpandable and @activeTaxons.contains @taxon
14
14
  @expansionCoefficient
15
15
 
@@ -24,7 +24,7 @@ class Apiv1.TreeTaxonLiComponent extends Ember.Component
24
24
  return false unless @isSelectable
25
25
  if arguments.length > 1
26
26
  @selectionCoefficient = select
27
- unless @selectionCoefficient?
27
+ if Ember.isBlank @selectionCoefficient
28
28
  @selectionCoefficient = @isSelectable and @activeTaxons.contains @taxon
29
29
  @selectionCoefficient
30
30
 
@@ -45,9 +45,13 @@ class Apiv1.TreeTaxonLiComponent extends Ember.Component
45
45
  @selectMe()
46
46
 
47
47
  unexpandMe: ->
48
+ @activeTaxons ||= []
49
+ @activeTaxons.removeObject @taxon
48
50
  @isExpanded = false
49
51
 
50
52
  expandMe: ->
53
+ @activeTaxons ||= []
54
+ @activeTaxons.addObject @taxon
51
55
  @isExpanded = true
52
56
 
53
57
  unselectMe: ->
@@ -1,6 +1,8 @@
1
1
  class Apiv1.IndexController extends Ember.ObjectController
2
2
  queryParams: ['anchor']
3
- anchor: null
3
+ anchor: ""
4
+ query: ""
5
+ activeTaxons: []
4
6
 
5
7
  +observer anchor
6
8
  scroll2Anchor: ->
@@ -16,4 +18,19 @@ class Apiv1.IndexController extends Ember.ObjectController
16
18
  p1 = $(".site-content").position()
17
19
  p2 = el$.position()
18
20
  return unless p1? and p2?
19
- p2.top - p1.top
21
+ p2.top - p1.top
22
+
23
+ +observer activeTaxons.@each.id
24
+ manageATI: ->
25
+ return if Ember.isBlank @activeTaxons
26
+ qp = { page: 1, per: 15, query: @query, ati: @activeTaxons.mapBy("id") }
27
+ @transitionToRoute "products.index", queryParams: qp
28
+
29
+ actions:
30
+ search: (params) ->
31
+ @transitionToRoute "products.index",
32
+ queryParams:
33
+ page: 1
34
+ per: 15
35
+ query: params.searchQuery
36
+ ati: params.activeTaxons.mapBy "id"
@@ -1,24 +1,38 @@
1
1
  class Apiv1.ModalsLoginController extends Ember.ObjectController
2
+ +computed
3
+ model: -> @store.createRecord("adminSession")
4
+
2
5
  +computed model
3
- session: ->
4
- @login @model
5
- @model
6
+ session: -> @model
6
7
 
7
- +computed session.id
8
- isAuthenticated: -> @get("session.id")
8
+ +computed model.id
9
+ isAuthenticated: -> @get("model.id")
9
10
 
10
11
  login: (session) ->
11
12
  session.save().then(_.bind @successfulLogin, @).catch(_.bind @failedLogin, @)
12
13
 
13
14
  successfulLogin: (session) ->
14
- Apiv1.Flash.register "success", "Admin logged in", 5000
15
- @transitionToRoute "admin.index"
15
+ if session.isAdmin
16
+ Apiv1.Flash.register "success", "Admin logged in", 5000
17
+ else
18
+ Apiv1.Flash.register "success", "User logged in", 5000
19
+ Apiv1.CurrentUserSession = session
20
+ @redirectOut()
16
21
 
17
- failedLogin: _.after 1, (reason) ->
22
+ redirectOut: ->
23
+ if @get("model.isAdmin")
24
+ @transitionToRoute "admin.index"
25
+ else
26
+ @transitionToRoute "users.index"
27
+
28
+ failedLogin: (reason) ->
18
29
  Apiv1.Flash.register "warning", "login failed", 5000
19
30
  @failureReason = reason.responseJSON.admin_session if reason.responseJSON?
20
31
 
21
32
 
22
33
  actions:
23
34
  formSubmitted: ->
24
- @login @session
35
+ if @isAuthenticated
36
+ @redirectOut()
37
+ else
38
+ @login @model
@@ -0,0 +1,24 @@
1
+ class Apiv1.ModalsRegisterController extends Ember.ObjectController
2
+
3
+ +computed
4
+ model: -> @store.createRecord("user")
5
+
6
+ +computed model
7
+ user: -> @model
8
+
9
+ redirectToIndex: ->
10
+ @transitionToRoute 'users.index'
11
+ notifySuccess: ->
12
+ Apiv1.Flash.register "success", "account created!", 4000
13
+ successfulSave: (user) ->
14
+ @notifySuccess()
15
+ @redirectToIndex()
16
+ Apiv1.CurrentUserSession = user
17
+ failedSave: (reason) ->
18
+ Apiv1.Flash.register "warning", "the server died for some reason", 5000 if reason.status is 500
19
+ @failureReason = reason.responseJSON if reason.responseJSON
20
+
21
+ actions:
22
+ formSubmitted: ->
23
+ @failureReason = null
24
+ @model.save().then(_.bind @successfulSave, @).catch(_.bind @failedSave, @)
@@ -2,24 +2,34 @@ class Apiv1.ProductsIndexController extends Ember.ObjectController
2
2
  queryParams: ["per", "page", "query", "ati"]
3
3
  per: 15
4
4
  page: 1
5
- query: null
6
- ati: []
5
+ query: ""
6
+ ati: ""
7
+
8
+ +computed model.activeTaxons.@each
9
+ activeTaxons: -> @model.activeTaxons
7
10
 
8
- +computed model.taxons.@each.parentId
9
- taxons: -> @get("model.taxons")
11
+ +observer activeTaxons.@each.id
12
+ manageATI: ->
13
+ return if Ember.isBlank @activeTaxons
14
+ qp = _.extend { query: @query }, @searchParams
15
+ @transitionToRoute "products.index", queryParams: qp
16
+
17
+ +computed Apiv1.PreloadedTaxons.@each.parentId
18
+ taxons: -> Apiv1.PreloadedTaxons.rejectBy "parentId"
10
19
 
11
20
  +computed products.content.meta
12
21
  metadatum: -> @get("products.content.meta")
13
22
 
14
- +computed ati.@each, query, per, page
15
- products: ->
16
- @store.find("product", taxons: @ati, query: @query, per: @per, page: @page)
23
+ +computed model.products
24
+ products: -> @model.products
17
25
 
18
- +computed searchParams.searchQuery
19
- searchQuery: -> @get "searchParams.searchQuery"
26
+ +computed page, per, activeTaxons.@each.id
27
+ searchParams: ->
28
+ page: @page
29
+ per: @per
30
+ ati: @activeTaxons.mapBy("id")
20
31
 
21
32
  actions:
22
- search: (opts) ->
23
- @page = 1
24
- @query = opts.searchQuery
25
- @ati = opts.activeTaxons.mapBy "id"
33
+ search: (opts)->
34
+ qp = _.extend { query: opts.searchQuery }, @searchParams
35
+ @transitionToRoute "products.index", queryParams: qp
@@ -0,0 +1,17 @@
1
+ class Apiv1.ProductsProductOffersNewController extends Ember.ObjectController
2
+
3
+ notifySuccess: ->
4
+ Apiv1.Flash.register "success", "offer message sent!", 5000
5
+ successfulSave: (offer) ->
6
+ @swapOutForm()
7
+ @notifySuccess()
8
+ swapOutForm: ->
9
+ $(".form-for").hide "highlight", {}, 450, => @alreadySubmitted = true
10
+ failedSave: (reason) ->
11
+ Apiv1.Flash.register "warning", "uh-oh, the server is down", 5000 if reason.status is 500
12
+ @failureReason = Apiv1.HashEx.camelize reason.responseJSON if reason.responseJSON
13
+
14
+ actions:
15
+ formSubmitted: ->
16
+ @failureReason = null
17
+ @model.save().then(_.bind @successfulSave, @).catch(_.bind @failedSave, @)
@@ -0,0 +1,10 @@
1
+ class Apiv1.UsersOffersIndexController extends Ember.ObjectController
2
+ queryParams: ["page", "per"]
3
+ page: 1
4
+ per: 15
5
+ +computed page, per
6
+ offers: ->
7
+ @store.find "offer", page: @page, per: @per
8
+
9
+ +computed offers.content.meta
10
+ metadatum: -> @get("offers.content.meta")