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
@@ -0,0 +1,31 @@
1
+ class Apiv1.UsersProductEditController extends Ember.ObjectController
2
+ +computed model.taxons.@each
3
+ activeTaxons: ->
4
+ @get("model.taxons") or []
5
+
6
+ +computed model
7
+ rootTaxons: ->
8
+ @store.find "taxon", parent_id: null
9
+
10
+ +computed model.coreAttributes
11
+ usersProduct: ->
12
+ return if Ember.isBlank @model.id
13
+ @store.push "users_product", @model.get("coreAttributes")
14
+
15
+ redirectToIndex: ->
16
+ @transitionToRoute 'users.products.index'
17
+ notifySuccess: ->
18
+ Apiv1.Flash.register "success", "listing updated! Refresh your browser to see changes", 5000
19
+ successUpdate: (product) ->
20
+ @notifySuccess()
21
+ @redirectToIndex()
22
+ failedUpdate: (reason) ->
23
+ Apiv1.Flash.register "warning", "welp, you killed the server", 5000 if reason.status is 500
24
+ @failureReason = reason.responseJSON if reason.responseJSON
25
+ Apiv1.Flash.register "warning", "you're not authorized because #{@failureReason.message}", 5000 if reason.status is 401
26
+
27
+ actions:
28
+ formSubmitted: ->
29
+ @failureReason = null
30
+ @usersProduct.taxons = @activeTaxons.map (t) -> t.get("id")
31
+ @usersProduct.save().then(_.bind @successUpdate, @).catch(_.bind @failedUpdate, @)
@@ -0,0 +1,8 @@
1
+ class Apiv1.UsersProductsIndexController extends Ember.ObjectController
2
+ needs: ['modalsLogin']
3
+ session: Ember.computed.alias('controllers.modalsLogin.session')
4
+
5
+ +computed model, session.id
6
+ products: ->
7
+ return if Ember.isBlank @session
8
+ @model @session
@@ -0,0 +1,22 @@
1
+ class Apiv1.UsersProductsNewController extends Ember.ObjectController
2
+ activeTaxons: []
3
+ +computed model
4
+ rootTaxons: ->
5
+ @store.find "taxon", parent_id: null
6
+
7
+ redirectToIndex: ->
8
+ @transitionToRoute 'users.products.index'
9
+ notifySuccess: ->
10
+ Apiv1.Flash.register "success", "listing created!"
11
+ successfulSave: (product) ->
12
+ @notifySuccess()
13
+ @redirectToIndex()
14
+ failedSave: (reason) ->
15
+ Apiv1.Flash.register "warning", "please fill out the form before clicking submit", 5000 if reason.status is 500
16
+ @failureReason = reason.responseJSON if reason.responseJSON
17
+
18
+ actions:
19
+ formSubmitted: ->
20
+ @failureReason = null
21
+ @model.taxons = @activeTaxons.map (t) -> t.get("id")
22
+ @model.save().then(_.bind @successfulSave, @).catch(_.bind @failedSave, @)
@@ -0,0 +1,4 @@
1
+ class Apiv1.UsersProductsSliceController extends Ember.ObjectController
2
+ actions:
3
+ requestDelete: ->
4
+ @model.destroyRecord()
@@ -0,0 +1,21 @@
1
+ class Apiv1.FilePreviewer
2
+ @generate-data-urls = (files) ->
3
+ _.map files, _.bind(@generateDataUrl, @)
4
+ @generate-data-url = (file) ->
5
+ fp = new Apiv1.FilePreviewer(file)
6
+ fp.data-url!
7
+ (@file) ->
8
+ data-url: ->
9
+ @read-promise!.then (reader) -> reader.result
10
+ read-promise: ->
11
+ @promise-maker (resolve) ~>
12
+ @resolution-file-reader(resolve).readAsDataURL @file
13
+
14
+ promise-maker: (handlers) ->
15
+ DS.PromiseObject.create promise: new Ember.RSVP.Promise(handlers)
16
+
17
+ resolution-file-reader: (resolve) ->
18
+ r = new FileReader()
19
+ r.onloadend = (e) ->
20
+ resolve e.target
21
+ r
@@ -0,0 +1,17 @@
1
+ class Apiv1.ListingsPicture extends Ember.Object
2
+ +observer file
3
+ manageSource: ->
4
+ Apiv1.FilePreviewer.generateDataUrl(@file).then (source) => @src = source
5
+
6
+ +computed file.name
7
+ fileName: -> @get "file.name"
8
+
9
+ +computed file.size
10
+ fileSize: -> @get "file.size"
11
+
12
+ Apiv1.ListingsPicture.fromFile = (file) ->
13
+ p = new Apiv1.ListingsPicture()
14
+ p.set "file", file
15
+ p.set "permalink", Math.random().toString()
16
+ p
17
+
@@ -1,12 +1,13 @@
1
1
  class Apiv1.Offer extends DS.Model
2
- price: DS.attr "number"
3
- priceUnit: DS.attr "string"
4
- incoterm: DS.attr "string"
5
- locationName: DS.attr "string"
6
- buyerCompany: DS.attr "string"
7
- buyerEmail: DS.attr "string"
2
+ priceTerms: DS.attr "string"
3
+ fromCompany: DS.attr "string"
4
+ phoneNumber: DS.attr "string"
5
+ contactPerson: DS.attr "string"
6
+ companyAddress: DS.attr "string"
7
+ senderEmail: DS.attr "string"
8
8
  message: DS.attr "string"
9
+ status: DS.attr "string"
9
10
  createdAt: DS.attr "date"
10
11
  updatedAt: DS.attr "date"
11
-
12
- listing: DS.belongsTo "listing"
12
+ deletedAt: DS.attr "date"
13
+ product: DS.belongsTo "product", async: true
@@ -0,0 +1,12 @@
1
+ class Apiv1.User extends DS.Model
2
+ email: DS.attr "string"
3
+ userRank: DS.attr "string"
4
+ companyName: DS.attr "string"
5
+ phoneNumber: DS.attr "string"
6
+ address: DS.attr "string"
7
+ aboutMe: DS.attr "string"
8
+ password: DS.attr "string"
9
+ passwordConfirmation: DS.attr "string"
10
+
11
+ +computed userRank
12
+ isAdmin: -> @userRank is "admin"
@@ -0,0 +1,12 @@
1
+ class Apiv1.UsersProduct extends DS.Model
2
+ sku: DS.attr "string"
3
+ material: DS.attr "string"
4
+ price: DS.attr "string"
5
+ amount: DS.attr "string"
6
+ quality: DS.attr "string"
7
+ place: DS.attr "string"
8
+ others: DS.attr "string"
9
+
10
+ taxons: DS.attr "strings"
11
+ attachments: DS.attr "files"
12
+ pictures: DS.attr "files"
@@ -4,8 +4,9 @@ class Apiv1.ApplicationRoute extends Ember.Route
4
4
  @disconnectOutlet
5
5
  outlet: 'modal'
6
6
  parentView: 'application'
7
- modalModelFor: (modalName) ->
8
- @store.createRecord("adminSession") if modalName is "login"
7
+ sessionify: (someObject) ->
8
+ return someObject if someObject.destroyRecord
9
+ @store.push "adminSession", id: someObject.get("id")
9
10
  actions:
10
11
  displayModal: (modalName) ->
11
12
  $(".modal-background").show()
@@ -13,6 +14,13 @@ class Apiv1.ApplicationRoute extends Ember.Route
13
14
  into: 'application'
14
15
  outlet: 'modal'
15
16
  model: @modalModelFor modalName
17
+ logoutUser: ->
18
+ return Apiv1.Flash.register "warning", "you're not even logged in", 4000 if Ember.isBlank Apiv1.CurrentUserSession
19
+ @sessionify(Apiv1.CurrentUserSession).destroyRecord().then =>
20
+ Apiv1.Flash.register "success", "you've been signed out, refreshing page", 4000
21
+ @transitionTo "index"
22
+ $(".application-container").hide "fade"
23
+ $("#now-loading").show "fade", 400, -> window.location.reload()
16
24
  closeModal: ->
17
25
  @disconnectModal()
18
26
  willTransition: ->
@@ -1,3 +1,24 @@
1
1
  class Apiv1.ProductsIndexRoute extends Ember.Route
2
- model: ->
3
- taxons: @store.find "taxon", parent_id: null
2
+ queryParams:
3
+ per:
4
+ refreshModel: true
5
+ page:
6
+ refreshModel: true
7
+ query:
8
+ refreshModel: true
9
+ ati:
10
+ refreshModel: true
11
+ model: (params) ->
12
+ products: @findProducts(params)
13
+ activeTaxons: @findTaxons(params.ati || [])
14
+
15
+ findProducts: (params)->
16
+ ati = params.ati || []
17
+ query = params.query
18
+ per = params.per || 10
19
+ page = params.page || 1
20
+ @store.find("product", taxons: ati, query: query, per: per, page: page)
21
+
22
+ findTaxons: (ids) ->
23
+ DS.PromiseArray.create
24
+ promise: Apiv1.PreloadedTaxons.then (taxons) -> taxons.filter (taxon) -> _.contains ids, taxon.get("id")
@@ -0,0 +1,18 @@
1
+ class Apiv1.ProductsProductOffersNewRoute extends Ember.Route
2
+ model: -> @attachUserData @store.createRecord "offer", product: @product
3
+
4
+ beforeModel: -> @set "product", @modelFor("products.product")
5
+
6
+ attachUserData: (offer) ->
7
+ return offer if Ember.isBlank Apiv1.CurrentUserSession
8
+ offer.fromCompany = @currentUser 'companyName'
9
+ offer.phoneNumber = @currentUser 'phoneNumber'
10
+ offer.companyAddress = @currentUser 'address'
11
+ offer.senderEmail = @currentUser 'email'
12
+ offer
13
+
14
+ currentUser: (stat) ->
15
+ s1 = stat
16
+ s2 = Ember.String.camelize(stat)
17
+ s3 = Ember.String.underscore(stat)
18
+ get$(Apiv1.CurrentUserSession, s1) || get$(Apiv1.CurrentUserSession, s2) || get$(Apiv1.CurrentUserSession, s3)
@@ -0,0 +1 @@
1
+ class Apiv1.UsersOffersIndexRoute extends Ember.Route
@@ -0,0 +1,3 @@
1
+ class Apiv1.UsersProductRoute extends Ember.Route
2
+ model: (params) ->
3
+ @store.find("product", params.product_id)
@@ -0,0 +1,3 @@
1
+ class Apiv1.UsersProductsIndexRoute extends Ember.Route
2
+ model: ->
3
+ (user) => @store.find "product", user_id: user.get("id")
@@ -0,0 +1,3 @@
1
+ class Apiv1.UsersProductsNewRoute extends Ember.Route
2
+ model: ->
3
+ @store.createRecord "users_product"
@@ -64,6 +64,8 @@
64
64
  span.parantheses
65
65
  tr-span en="the first picture will be displayed in the showcase"
66
66
  files-field name="pictures" files=adminProduct.pictures class="form-control upload-control"
67
+ .attached-pictures
68
+ pictures-group pictures=adminProduct.pictures
67
69
 
68
70
  .small-12.columns
69
71
  fieldset
@@ -0,0 +1,44 @@
1
+ .input-section attr-name="material"
2
+ label.form-label
3
+ span.asterisk
4
+ tr-span en="listing name"
5
+ Ember.TextField name="material" value=model.material placeholder="hot dog"
6
+ .input-section attr-name="sku"
7
+ label.form-label
8
+ tr-span en="external reference number"
9
+ Ember.TextField name="sku" value=model.sku placeholder="XYZ-00123"
10
+ .input-section attr-name="price"
11
+ label.form-label
12
+ tr-span en="how much to sell for?"
13
+ Ember.TextField name="price" value=model.price placeholder="0.33 USD / pound FAS Long Beach Port"
14
+ .input-section attr-name="amount"
15
+ label.form-label
16
+ tr-span en="how much of it do you have?"
17
+ Ember.TextField name="amount" value=model.amount placeholder="200 tons every week"
18
+ .input-section attr-name="quality"
19
+ label.form-label
20
+ tr-span en="what sort of goods are these?"
21
+ Ember.TextField name="quality" value=model.quality placeholder="A grade, baled"
22
+ .input-section attr-name="place"
23
+ label.form-label
24
+ tr-span en="where is this?"
25
+ Ember.TextField name="place" value=model.place placeholder="Los Angeles"
26
+ .input-section attr-name="others"
27
+ label.form-label
28
+ tr-span en="anything else?"
29
+ Ember.TextArea name="others" value=model.others
30
+ .input-section attr-name="files"
31
+ label.form-label
32
+ tr-span en="related files"
33
+ span.parantheses
34
+ tr-span en="these will be pubicly available"
35
+ files-field name="attachments" files=model.attachments class="form-control upload-control"
36
+ .input-section attr-name="pictures"
37
+ label.form-label
38
+ span.asterisk
39
+ tr-span en="listing pictures"
40
+ span.parantheses
41
+ tr-span en="the first picture will be displayed in the showcase"
42
+ files-field name="pictures" files=model.pictures class="form-control upload-control"
43
+ .attached-pictures
44
+ pictures-group pictures=model.pictures
@@ -10,54 +10,16 @@
10
10
  fieldset
11
11
  legend.capitalize.bold
12
12
  tr-span en="new listing"
13
- .input-section attr-name="material"
14
- label.form-label
15
- span.asterisk
16
- tr-span en="listing name"
17
- Ember.TextField name="material" value=model.material placeholder="hot dog"
18
- .input-section attr-name="sku"
19
- label.form-label
20
- tr-span en="external reference number"
21
- Ember.TextField name="sku" value=model.sku placeholder="XYZ-00123"
22
- .input-section attr-name="price"
23
- label.form-label
24
- tr-span en="how much to sell for?"
25
- Ember.TextField name="price" value=model.price placeholder="0.33 USD / pound FAS Long Beach Port"
26
- .input-section attr-name="amount"
27
- label.form-label
28
- tr-span en="how much of it do you have?"
29
- Ember.TextField name="amount" value=model.amount placeholder="200 tons every week"
30
- .input-section attr-name="quality"
31
- label.form-label
32
- tr-span en="what sort of goods are these?"
33
- Ember.TextField name="quality" value=model.quality placeholder="A grade, baled"
34
- .input-section attr-name="place"
35
- label.form-label
36
- tr-span en="where is this?"
37
- Ember.TextField name="place" value=model.place placeholder="Los Angeles"
38
- .input-section attr-name="others"
39
- label.form-label
40
- tr-span en="anything else?"
41
- Ember.TextArea name="others" value=model.others
13
+
14
+ == partial "admin/products/form-core"
15
+
42
16
  .input-section attr-name="showcaseOrder"
43
17
  label.form-label
44
18
  tr-span en="showcase display number"
45
19
  span.parantheses
46
20
  tr-span en="the smaller the number, the higher up it appears in the showcase on the front page"
47
21
  Ember.TextField type="number" name="showcaseOrder" value=model.showcaseOrder
48
- .input-section attr-name="files"
49
- label.form-label
50
- tr-span en="related files"
51
- span.parantheses
52
- tr-span en="these will be pubicly available"
53
- files-field name="attachments" files=model.attachments class="form-control upload-control"
54
- .input-section attr-name="pictures"
55
- label.form-label
56
- span.asterisk
57
- tr-span en="listing pictures"
58
- span.parantheses
59
- tr-span en="the first picture will be displayed in the showcase"
60
- files-field name="pictures" files=model.pictures class="form-control upload-control"
22
+
61
23
  .input-section attr-name="taxons"
62
24
  label.form-label
63
25
  tr-span en="select appropriate category tags for this product"
@@ -0,0 +1,9 @@
1
+ h4.section-title
2
+ tr-span en="existing offers"
3
+ ul.offers.small-block-grid-2.medium-block-4.large-block-grid-6
4
+ each offer in offers
5
+ li
6
+ .offer
7
+ .price= offer.priceTerms
8
+ .created-at= offer.createdAt
9
+
@@ -0,0 +1,9 @@
1
+ .picture-chunk.thumbnail
2
+ .avatar
3
+ img.img-thumbnail src=src
4
+
5
+ .dialogue
6
+ span.bold= fileName
7
+
8
+ .cancel-button.pointer click="killPicture"
9
+ i.fa-times.fa-3x.fa
@@ -0,0 +1,6 @@
1
+ .requirements
2
+ span.spacebar= totalFileSize
3
+ span /
4
+ span.prespace= totalAllowedSize
5
+ each picture in pictures
6
+ picture-chunk action="killPicture" model=picture
@@ -8,4 +8,8 @@
8
8
  Ember.TextField value=searchQuery class="full-width" name="search"
9
9
  .small-2.columns
10
10
  button.button.postfix click="search"
11
- i.fa.fa-search
11
+ i.fa.fa-search
12
+
13
+ .row
14
+ .small-12.columns
15
+ == yield
@@ -0,0 +1 @@
1
+ Ember.TextField class="taggable-textfield" value=text
@@ -0,0 +1,57 @@
1
+ .row.apiv1-login-modal
2
+ .action-cancel.pointer click="closeModal"
3
+ i.fa.fa-times
4
+ form-for errors=failureReason submit="formSubmitted"
5
+ .small-12.columns
6
+ fieldset
7
+ legend.capitalize.bold
8
+ tr-span en="new account"
9
+ h3.alt-actions
10
+ a.pointer click="displayModal 'login'"
11
+ span.capitalize.spacebar
12
+ tr-span en="have account?"
13
+ span.capitalize
14
+ tr-span en="login here"
15
+ .input-section attr-name="companyName"
16
+ label.form-label
17
+ span.asterisk
18
+ tr-span en="company name"
19
+ Ember.TextField name="companyName" value=model.companyName placeholder="Acme Trade Co"
20
+ .input-section attr-name="email"
21
+ label.form-label
22
+ span.asterisk
23
+ tr-span en="email"
24
+ Ember.TextField name="email" value=model.email placeholder="dog@example.co"
25
+ .input-section attr-name="password"
26
+ label.form-label
27
+ span.asterisk
28
+ tr-span en="password"
29
+ Ember.TextField name="password" value=model.password type="password"
30
+ .input-section attr-name="passwordConfirmation"
31
+ label.form-label
32
+ span.asterisk
33
+ tr-span en="password confirmation"
34
+ Ember.TextField name="passwordConfirmation" value=model.passwordConfirmation type="password"
35
+
36
+ .input-section attr-name="phoneNumber"
37
+ label.form-label
38
+ tr-span en="phone number"
39
+ Ember.TextField name="phoneNumber" value=model.phoneNumber placeholder="(555) 123 - 1234"
40
+
41
+ .input-section attr-name="address"
42
+ label.form-label
43
+ tr-span en="company address"
44
+ Ember.TextField name="address" value=model.address placeholder="1234 Main Street, Beverly Hills, CA 90210"
45
+
46
+
47
+ .small-6.columns
48
+ .input-section
49
+ promise-button model=model class="button expand"
50
+ i.fa.fa-check
51
+ tr-span en="submit"
52
+
53
+ .small-6.columns
54
+ .input-section
55
+ button.button.expand.alert click="closeModal"
56
+ i.fa.fa-times
57
+ tr-span en="cancel"