cloudrider 0.3.0 → 0.3.20

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 (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"