cloudrider 0.3.0 → 0.3.20
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +11 -1
- data/cloudrider.gemspec +1 -0
- data/generica/.gitignore +18 -0
- data/generica/Gemfile +8 -1
- data/generica/Gemfile.lock +3 -0
- data/generica/app/assets/javascripts/apiv1.js.ls +6 -1
- data/generica/app/assets/javascripts/components/offers-summary.js.em +2 -0
- data/generica/app/assets/javascripts/components/picture-chunk.js.em +17 -0
- data/generica/app/assets/javascripts/components/pictures-group.js.em +21 -0
- data/generica/app/assets/javascripts/components/search-and-filter.js.em +4 -0
- data/generica/app/assets/javascripts/components/site-nav.js.em +5 -1
- data/generica/app/assets/javascripts/components/taggable-field.js.em +28 -0
- data/generica/app/assets/javascripts/components/tree/taxon-li.js.em +6 -2
- data/generica/app/assets/javascripts/controllers/index_controller.js.em +19 -2
- data/generica/app/assets/javascripts/controllers/modals/login_controller.js.em +23 -9
- data/generica/app/assets/javascripts/controllers/modals/register_controller.js.em +24 -0
- data/generica/app/assets/javascripts/controllers/products/index_controller.js.em +23 -13
- data/generica/app/assets/javascripts/controllers/products/product/offers/new_controller.js.em +17 -0
- data/generica/app/assets/javascripts/controllers/users/offers/index_controller.js.em +10 -0
- data/generica/app/assets/javascripts/controllers/users/product/edit_controller.js.em +31 -0
- data/generica/app/assets/javascripts/controllers/users/products/index_controller.js.em +8 -0
- data/generica/app/assets/javascripts/controllers/users/products/new_controller.js.em +22 -0
- data/generica/app/assets/javascripts/controllers/users/products/slice_controller.js.em +4 -0
- data/generica/app/assets/javascripts/helpers/filte_previewer.js.ls +21 -0
- data/generica/app/assets/javascripts/helpers/listing_picture.js.em +17 -0
- data/generica/app/assets/javascripts/models/offer.js.em +9 -8
- data/generica/app/assets/javascripts/models/user.js.em +12 -0
- data/generica/app/assets/javascripts/models/users/product.js.em +12 -0
- data/generica/app/assets/javascripts/routes/application_route.js.em +10 -2
- data/generica/app/assets/javascripts/routes/products/index_route.js.em +23 -2
- data/generica/app/assets/javascripts/routes/products/product/offers/new_route.js.em +18 -0
- data/generica/app/assets/javascripts/routes/users/offers/index_route.js.em +1 -0
- data/generica/app/assets/javascripts/routes/users/product_route.js.em +3 -0
- data/generica/app/assets/javascripts/routes/users/products/index_route.js.em +3 -0
- data/generica/app/assets/javascripts/routes/users/products/new_route.js.em +3 -0
- data/generica/app/assets/javascripts/templates/admin/product/edit.emblem +2 -0
- data/generica/app/assets/javascripts/templates/admin/products/_form-core.emblem +44 -0
- data/generica/app/assets/javascripts/templates/admin/products/new.emblem +4 -42
- data/generica/app/assets/javascripts/templates/components/offers-summary.emblem +9 -0
- data/generica/app/assets/javascripts/templates/components/picture-chunk.emblem +9 -0
- data/generica/app/assets/javascripts/templates/components/pictures-group.emblem +6 -0
- data/generica/app/assets/javascripts/templates/components/search-and-filter.emblem +5 -1
- data/generica/app/assets/javascripts/templates/components/taggable-field.emblem +1 -0
- data/generica/app/assets/javascripts/templates/modals/register.emblem +57 -0
- data/generica/app/assets/javascripts/templates/products/product/offers/_anonymous-form.emblem +11 -0
- data/generica/app/assets/javascripts/templates/products/product/offers/_offer-form.emblem +55 -0
- data/generica/app/assets/javascripts/templates/products/product/offers/new.emblem +37 -0
- data/generica/app/assets/javascripts/templates/products/product/show.emblem +26 -1
- data/generica/app/assets/javascripts/templates/users.emblem +24 -0
- data/generica/app/assets/javascripts/templates/users/index.emblem +3 -0
- data/generica/app/assets/javascripts/templates/users/offers/index.emblem +25 -0
- data/generica/app/assets/javascripts/templates/users/offers/slice.emblem +31 -0
- data/generica/app/assets/javascripts/templates/users/product/edit.emblem +82 -0
- data/generica/app/assets/javascripts/templates/users/products/index.emblem +22 -0
- data/generica/app/assets/javascripts/templates/users/products/new.emblem +28 -0
- data/generica/app/assets/javascripts/templates/users/products/slice.emblem +27 -0
- data/generica/app/assets/stylesheets/apiv1/_application.css.scss +4 -0
- data/generica/app/assets/stylesheets/apiv1/components/_offers-summary.css.scss +20 -0
- data/generica/app/assets/stylesheets/apiv1/components/_pictures-group.css.scss +32 -0
- data/generica/app/assets/stylesheets/apiv1/components/_taggable-field.css.scss +32 -0
- data/generica/app/assets/stylesheets/apiv1/products/product/offers/_new.css.scss +8 -0
- data/generica/app/controllers/admin/base_controller.rb +1 -1
- data/generica/app/controllers/admin/sessions/destroy_controller.rb +16 -0
- data/generica/app/controllers/apiv1/offers/create_controller.rb +30 -0
- data/generica/app/controllers/apiv1/offers/index_controller.rb +22 -0
- data/generica/app/controllers/apiv1/offers/show_controller.rb +12 -0
- data/generica/app/controllers/apiv1/products/destroy_controller.rb +6 -0
- data/generica/app/controllers/apiv1/products/index_controller.rb +8 -2
- data/generica/app/controllers/apiv1/products/show_controller.rb +7 -3
- data/generica/app/controllers/apiv1/taxons/index_controller.rb +5 -1
- data/generica/app/controllers/apiv1/users/create_controller.rb +17 -0
- data/generica/app/controllers/apiv1/users/show_controller.rb +12 -0
- data/generica/app/controllers/apiv1/users_controller.rb +9 -0
- data/generica/app/controllers/application_controller.rb +3 -0
- data/generica/app/controllers/users/offers/create_controller.rb +26 -0
- data/generica/app/controllers/users/products/create_controller.rb +26 -0
- data/generica/app/controllers/users/products/update_controller.rb +35 -0
- data/generica/app/mailers/apiv1/aggregate_mailer.rb +13 -0
- data/generica/app/mailers/apiv1/aggregate_mailer/summary_context.rb +121 -0
- data/generica/app/mailers/apiv1/notifications_mailer.rb +19 -0
- data/generica/app/mailers/apiv1/notifications_mailer/new_offer_context.rb +53 -0
- data/generica/app/models/admin/user.rb +43 -2
- data/generica/app/models/apiv1/attachment.rb +2 -0
- data/generica/app/models/apiv1/email_object.rb +35 -0
- data/generica/app/models/apiv1/email_request.rb +107 -0
- data/generica/app/models/apiv1/offer_message.rb +53 -0
- data/generica/app/models/apiv1/offer_postboy.rb +33 -0
- data/generica/app/models/apiv1/picture.rb +2 -0
- data/generica/app/models/apiv1/product.rb +28 -6
- data/generica/app/models/apiv1/products/offer_message_factory.rb +13 -0
- data/generica/app/models/apiv1/products_machine.rb +8 -2
- data/generica/app/models/apiv1/taxon.rb +1 -1
- data/generica/app/models/apiv1/users/product_factory.rb +22 -0
- data/generica/app/models/apiv1/users/product_relationship.rb +19 -0
- data/generica/app/models/users/products/offer_factory.rb +40 -0
- data/generica/app/varissets/javascripts/templates/application.emblem.erb +2 -2
- data/generica/app/varissets/javascripts/templates/components/offers-overview.emblem.erb +1 -0
- data/generica/app/varissets/javascripts/templates/components/search-and-filter.emblem.erb +33 -0
- data/generica/app/varissets/javascripts/templates/components/site-nav.emblem.erb +8 -0
- data/generica/app/varissets/javascripts/templates/components/taggable-field.emblem.erb +11 -0
- data/generica/app/varissets/javascripts/templates/modals/login.emblem.erb +36 -0
- data/generica/app/varissets/javascripts/templates/products.emblem.erb +4 -0
- data/generica/app/varissets/javascripts/templates/products/index.emblem.erb +17 -0
- data/generica/app/varissets/javascripts/templates/products/product/offers/_anonymous-form.emblem.erb +11 -0
- data/generica/app/varissets/javascripts/templates/products/product/offers/_offer-form.emblem.erb +55 -0
- data/generica/app/varissets/javascripts/templates/products/product/offers/new.emblem.erb +37 -0
- data/generica/app/varissets/javascripts/templates/products/product/show.emblem.erb +108 -0
- data/generica/app/varissets/stylesheets/apiv1/components/_offers-overview.css.scss.erb +3 -0
- data/generica/app/varissets/stylesheets/apiv1/components/_offers_overview.css.scss.erb +3 -0
- data/generica/app/varissets/stylesheets/apiv1/components/_search-and-filter.css.scss.erb +15 -0
- data/generica/app/varissets/stylesheets/apiv1/components/_site-footer.css.scss.erb +23 -0
- data/generica/app/varissets/stylesheets/apiv1/components/_taggable-field.css.scss.erb +32 -0
- data/generica/app/views/apiv1/home/index.html.haml +3 -1
- data/generica/app/views/apiv1/layouts/application.html.haml +37 -2
- data/generica/config/{database.yml.erb → database.yml.str} +3 -3
- data/generica/config/email.yml +11 -0
- data/generica/config/email_slave.god +9 -0
- data/generica/config/initializers/premailer.rb +1 -0
- data/generica/config/initializers/squash.rb.erb +3 -0
- data/generica/config/nginx.conf.erb +4 -4
- data/generica/config/routes.rb +14 -0
- data/generica/db/migrate/20141114213427_add_user_rank_to_admin_users.rb +9 -0
- data/generica/db/migrate/20141114225019_create_apiv1_users_products.rb +9 -0
- data/generica/db/migrate/20141116053522_create_apiv1_offer_messages.rb +16 -0
- data/generica/db/migrate/20141116235011_add_deleted_at_to_apiv1_products.rb +5 -0
- data/generica/db/migrate/20141116235209_add_deleted_at_to_apiv1_offer_messages.rb +5 -0
- data/generica/db/migrate/20141116235651_add_deleted_at_to_apiv1_pictures.rb +5 -0
- data/generica/db/migrate/20141116235808_add_deleted_at_to_apiv1_attachments.rb +5 -0
- data/generica/db/migrate/20141127230304_create_apiv1_email_requests.rb +16 -0
- data/generica/db/migrate/20141127230455_create_apiv1_email_objects.rb +11 -0
- data/generica/lib/generica/assets_unretardifier.rb +32 -0
- data/generica/lib/generica/email_slave.rb +92 -0
- data/generica/lib/tasks/email_slave.rake +11 -0
- data/generica/lib/tasks/production.rake +1 -1
- data/generica/public/tests/bermese.jpg +0 -0
- data/generica/public/tests/chow.jpg +0 -0
- data/generica/public/tests/malamute.jpg +0 -0
- data/generica/public/tests/malamute2.JPG +0 -0
- data/generica/spec/controllers/apiv1/users/create_controller_spec.rb +17 -0
- data/generica/spec/controllers/users/products/create_controller_spec.rb +31 -0
- data/generica/spec/mailers/apiv1/aggregate_mailer_spec.rb +29 -0
- data/generica/spec/models/apiv1/email_request_spec.rb +4 -0
- data/generica/spec/models/apiv1/offer_postboy_spec.rb +22 -0
- data/generica/spec/models/apiv1/product_spec.rb +1 -0
- data/generica/spec/models/apiv1/products/offer_message_factory_spec.rb +37 -0
- data/generica/spec/models/apiv1/products_machine_spec.rb +77 -0
- data/generica/spec/models/apiv1/users/product_factory_spec.rb +47 -0
- data/generica/spec/models/users/products/offer_factory_spec.rb +38 -0
- data/generica/test/mailers/.keep +0 -0
- data/generica/test/mailers/previews/apiv1/aggregate_preview.rb +6 -0
- data/generica/test/mailers/previews/apiv1/notifications_preview.rb +5 -0
- data/lib/cloudrider.rb +1 -1
- data/lib/cloudrider/apiv1/base.rb +2 -2
- data/lib/cloudrider/apiv1/login_modal_emblem.rb +25 -0
- data/lib/cloudrider/apiv1/offers_anonymous_form_partial_emblem.rb +12 -0
- data/lib/cloudrider/apiv1/offers_new_emblem.rb +15 -0
- data/lib/cloudrider/apiv1/offers_overview_component.rb +8 -0
- data/lib/cloudrider/apiv1/offers_overview_sass.rb +8 -0
- data/lib/cloudrider/apiv1/product_show_emblem.rb +31 -0
- data/lib/cloudrider/apiv1/products_emblem.rb +11 -0
- data/lib/cloudrider/apiv1/products_index_emblem.rb +14 -0
- data/lib/cloudrider/apiv1/search_and_filter_component.rb +11 -0
- data/lib/cloudrider/apiv1/search_and_filter_sass.rb +11 -0
- data/lib/cloudrider/apiv1/site_footer_component.rb +7 -7
- data/lib/cloudrider/apiv1/site_footer_sass.rb +9 -0
- data/lib/cloudrider/application_commander.rb +46 -34
- data/lib/cloudrider/backend_commander.rb +15 -9
- data/lib/cloudrider/protofile.rb +18 -2
- data/lib/cloudrider/protosite.example.json +26 -0
- data/lib/cloudrider/protosite.rb +66 -0
- data/lib/cloudrider/serverside/base.rb +2 -2
- data/lib/cloudrider/serverside/database_yaml.rb +9 -4
- data/lib/cloudrider/serverside/nginx_conf.rb +7 -2
- data/lib/cloudrider/serverside/squash_ruby.rb +14 -0
- data/lib/cloudrider/serverside/unicorn_conf_ruby.rb +2 -1
- data/lib/cloudrider/version.rb +1 -1
- data/lib/cloudrider/web_firm.rb +16 -0
- data/lib/cloudrider/web_firm/component_architect.rb +23 -0
- data/lib/cloudrider/web_firm/page_designer.rb +13 -0
- data/lib/cloudrider/web_firm/project_lead.rb +30 -0
- data/lib/cloudrider/web_firm/scumbag_engineer.rb +40 -0
- data/lib/cloudrider/web_firm/support_intern.rb +113 -0
- data/lib/generators/cloudrider/server/server_generator.rb +4 -8
- data/lib/generators/cloudrider/website/website_generator.rb +25 -0
- data/spec/cloudrider/protosite_spec.rb +63 -0
- data/vanilla/.bowerrc +4 -0
- data/vanilla/.editorconfig +33 -0
- data/vanilla/.ember-cli +9 -0
- data/vanilla/.gitignore +17 -0
- data/vanilla/.jshintrc +32 -0
- data/vanilla/.travis.yml +16 -0
- data/vanilla/Brocfile.js +20 -0
- data/vanilla/README.md +51 -0
- data/vanilla/app/app.js +16 -0
- data/vanilla/app/components/.gitkeep +0 -0
- data/vanilla/app/controllers/.gitkeep +0 -0
- data/vanilla/app/controllers/admin.coffee +5 -0
- data/vanilla/app/helpers/.gitkeep +0 -0
- data/vanilla/app/index.html +21 -0
- data/vanilla/app/models/.gitkeep +0 -0
- data/vanilla/app/router.js +11 -0
- data/vanilla/app/routes/.gitkeep +0 -0
- data/vanilla/app/styles/.gitkeep +0 -0
- data/vanilla/app/styles/app.css +3 -0
- data/vanilla/app/templates/.gitkeep +0 -0
- data/vanilla/app/templates/application.hbs +3 -0
- data/vanilla/app/templates/components/.gitkeep +0 -0
- data/vanilla/app/views/.gitkeep +0 -0
- data/vanilla/bower.json +17 -0
- data/vanilla/config/environment.js +47 -0
- data/vanilla/package.json +39 -0
- data/vanilla/public/.gitkeep +0 -0
- data/vanilla/public/crossdomain.xml +15 -0
- data/vanilla/public/robots.txt +3 -0
- data/vanilla/testem.json +11 -0
- data/vanilla/tests/.jshintrc +74 -0
- data/vanilla/tests/helpers/resolver.js +11 -0
- data/vanilla/tests/helpers/start-app.js +25 -0
- data/vanilla/tests/index.html +45 -0
- data/vanilla/tests/test-helper.js +12 -0
- data/vanilla/tests/unit/.gitkeep +0 -0
- data/vanilla/tests/unit/controllers/admin-test.coffee +12 -0
- data/vanilla/vendor/.gitkeep +0 -0
- metadata +189 -5
- data/generica/app/views/layouts/application.html.erb +0 -14
- data/lib/cloudrider/master_context.rb +0 -105
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5334f23f91a9c3a7cd5b5efef53c2963ca386364
|
4
|
+
data.tar.gz: 08302967d39ffd580befd2f26a1f83ae29f7e64f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
data/generica/.gitignore
ADDED
@@ -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.
|
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"
|
data/generica/Gemfile.lock
CHANGED
@@ -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 ->
|
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,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
|
-
|
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
|
-
|
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:
|
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
|
8
|
-
isAuthenticated: -> @get("
|
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
|
-
|
15
|
-
|
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
|
-
|
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
|
-
|
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:
|
6
|
-
ati:
|
5
|
+
query: ""
|
6
|
+
ati: ""
|
7
|
+
|
8
|
+
+computed model.activeTaxons.@each
|
9
|
+
activeTaxons: -> @model.activeTaxons
|
7
10
|
|
8
|
-
+
|
9
|
-
|
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
|
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
|
19
|
-
|
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
|
-
|
24
|
-
@
|
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")
|