From 372cb6bd2259d1ad787e877b7e4e4451348f30c8 Mon Sep 17 00:00:00 2001 From: Nemanja Popovic Date: Mon, 31 Aug 2015 14:11:54 +0200 Subject: [PATCH] Initial commit --- .bowerrc | 3 + .buildpacks | 3 + .cfignore | 8 + .gitignore | 16 + .jshintrc | 30 + License.md | 168 ++ Readme.md | 292 ++++ bower.json | 48 + config.rb | 24 + config/karma.conf.js | 200 +++ config/protractor-conf.js | 63 + docu/files/About.html.md | 15 + docu/files/WireFrames-Desktop.html.md | 13 + gruntfile.js | 397 +++++ img/creditcard.png | Bin 0 -> 14305 bytes img/cvv.png | Bin 0 -> 2535 bytes img/logo.png | Bin 0 -> 2684 bytes img/paypal.png | Bin 0 -> 4141 bytes multi-tenant/multi-tenant-server.js | 35 + package.json | 79 + products.json | 805 +++++++++ public/Staticfile | 0 .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20335 bytes .../fonts/glyphicons-halflings-regular.svg | 229 +++ .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 41280 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23320 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes public/css/fonts/hyicon.eot | Bin 0 -> 7512 bytes public/css/fonts/hyicon.svg | 35 + public/css/fonts/hyicon.ttf | Bin 0 -> 7352 bytes public/css/fonts/hyicon.woff | Bin 0 -> 4488 bytes public/favicon.ico | Bin 0 -> 1150 bytes public/hero-merchandise.jpeg | Bin 0 -> 242984 bytes public/img/btn_backToTop.png | Bin 0 -> 1917 bytes public/img/creditcard.png | Bin 0 -> 14305 bytes public/img/cvv.png | Bin 0 -> 2535 bytes public/img/fb_signInLogo.png | Bin 0 -> 1288 bytes public/img/flags/de.jpg | Bin 0 -> 985 bytes public/img/flags/en.jpg | Bin 0 -> 3572 bytes public/img/g+_signInLogo.png | Bin 0 -> 1783 bytes public/img/homePg-banner3.jpg | Bin 0 -> 35786 bytes public/img/homePg-banner4.jpg | Bin 0 -> 45010 bytes public/img/homePg-hero-audio.jpg | Bin 0 -> 103646 bytes public/img/homePg-hero-office.jpg | Bin 0 -> 100004 bytes public/img/homepg_flightCollection.png | Bin 0 -> 88011 bytes public/img/homepg_freegift.png | Bin 0 -> 17363 bytes public/img/language_select_active.png | Bin 0 -> 2138 bytes public/img/language_select_inactive.png | Bin 0 -> 2339 bytes public/img/logo.png | Bin 0 -> 2397 bytes public/img/no-image.jpg | Bin 0 -> 44954 bytes public/img/paypal.png | Bin 0 -> 4141 bytes public/img/shopping_bag.png | Bin 0 -> 1433 bytes public/img/user-icon_big.png | Bin 0 -> 5581 bytes public/img/user-icon_small.png | Bin 0 -> 4305 bytes public/img/user-icon_small_active.png | Bin 0 -> 4284 bytes public/img/user_placeholder.jpg | Bin 0 -> 56312 bytes public/index.html | 167 ++ public/js/app/account/account-index.js | 17 + .../app/account/controllers/account-ctrl.js | 240 +++ .../controllers/account-order-detail-ctrl.js | 41 + .../app/account/services/account-service.js | 118 ++ public/js/app/account/templates/account.html | 141 ++ .../app/account/templates/address-form.html | 23 + .../account/templates/addresses-dialog.html | 9 + .../js/app/account/templates/addresses.html | 41 + .../app/account/templates/order-detail.html | 182 ++ public/js/app/addresses/addresses-index.js | 16 + .../directives/localized-addresses.js | 181 ++ .../app/addresses/templates/addAddressCA.html | 76 + .../app/addresses/templates/addAddressCN.html | 70 + .../app/addresses/templates/addAddressDE.html | 55 + .../app/addresses/templates/addAddressGB.html | 56 + .../app/addresses/templates/addAddressJP.html | 64 + .../app/addresses/templates/addAddressUS.html | 117 ++ .../js/app/addresses/templates/billingCA.html | 110 ++ .../js/app/addresses/templates/billingCN.html | 97 ++ .../js/app/addresses/templates/billingDE.html | 87 + .../js/app/addresses/templates/billingGB.html | 89 + .../js/app/addresses/templates/billingJP.html | 97 ++ .../js/app/addresses/templates/billingUS.html | 149 ++ .../app/addresses/templates/shippingCA.html | 97 ++ .../app/addresses/templates/shippingCN.html | 84 + .../app/addresses/templates/shippingDE.html | 74 + .../app/addresses/templates/shippingGB.html | 78 + .../app/addresses/templates/shippingJP.html | 84 + .../app/addresses/templates/shippingUS.html | 140 ++ public/js/app/app.js | 144 ++ public/js/app/auth/auth-index.js | 15 + .../controllers/auth-modal-dialog-ctrl.js | 113 ++ .../auth/controllers/password-reset-ctrl.js | 47 + .../controllers/password-reset-update-ctrl.js | 84 + .../auth/controllers/password-update-ctrl.js | 59 + .../js/app/auth/directives/confirm-input.js | 29 + .../js/app/auth/directives/create-account.js | 58 + .../js/app/auth/services/anon-auth-service.js | 51 + .../app/auth/services/auth-dialog-manager.js | 123 ++ public/js/app/auth/services/auth-rest.js | 36 + public/js/app/auth/services/auth-service.js | 255 +++ .../js/app/auth/services/session-service.js | 99 ++ public/js/app/auth/services/token-service.js | 81 + public/js/app/auth/templates/auth.html | 41 + public/js/app/auth/templates/check-email.html | 8 + .../js/app/auth/templates/create-account.html | 39 + .../templates/password-request-reset.html | 21 + .../js/app/auth/templates/password-reset.html | 60 + .../app/auth/templates/password-update.html | 57 + .../app/auth/templates/pw-change-success.html | 8 + public/js/app/auth/templates/signin.html | 21 + public/js/app/auth/templates/signup.html | 16 + public/js/app/cart/cart-index.js | 17 + public/js/app/cart/controllers/cart-ctrl.js | 106 ++ .../app/cart/directives/cart-auto-toggle.js | 85 + public/js/app/cart/services/cart-rest.js | 34 + public/js/app/cart/services/cart-service.js | 365 ++++ public/js/app/cart/templates/cart-costs.html | 68 + public/js/app/cart/templates/cart.html | 81 + public/js/app/checkout/checkout-index.js | 18 + .../controllers/checkout-base-ctrl.js | 58 + .../controllers/checkout-cart-ctrl.js | 35 + .../app/checkout/controllers/checkout-ctrl.js | 500 ++++++ .../controllers/checkout-edit-cart-ctrl.js | 52 + .../checkout/directives/address-decorator.js | 38 + .../checkout/directives/inline-error-input.js | 191 +++ .../directives/mobile-checkout-wizard.js | 108 ++ .../js/app/checkout/services/checkout-rest.js | 49 + .../app/checkout/services/checkout-service.js | 220 +++ .../app/checkout/templates/checkout-cart.html | 66 + .../templates/checkout-edit-cart.html | 99 ++ .../app/checkout/templates/checkout-form.html | 244 +++ .../checkout/templates/checkout-frame.html | 9 + .../order-processing-splash-screen.html | 7 + .../js/app/confirmation/confirmation-index.js | 19 + .../controllers/confirmation-ctrl.js | 60 + .../confirmation/directives/summary-align.js | 81 + .../services/order-details-rest.js | 24 + .../services/order-details-svc.js | 87 + .../confirmation/templates/confirmation.html | 166 ++ .../js/app/coupons/controllers/coupon-ctrl.js | 94 + public/js/app/coupons/coupon-index.js | 16 + public/js/app/coupons/services/coupon-rest.js | 26 + .../js/app/coupons/services/coupon-service.js | 30 + .../app/coupons/templates/coupon-apply.html | 25 + public/js/app/errors/backendStub.js | 302 ++++ .../js/app/errors/controllers/errors-ctrl.js | 46 + .../app/errors/templates/error-display.html | 15 + public/js/app/home/controllers/home-ctrl.js | 37 + public/js/app/home/home-index.js | 23 + public/js/app/home/templates/home.html | 21 + public/js/app/orders/orders-index.js | 17 + .../app/orders/services/order-list-service.js | 38 + public/js/app/orders/services/orders-rest.js | 33 + .../controllers/browse-products-ctrl.js | 321 ++++ .../controllers/product-detail-ctrl.js | 118 ++ public/js/app/products/products-index.js | 22 + .../app/products/services/category-service.js | 150 ++ .../products/services/price-product-rest.js | 68 + .../js/app/products/services/price-service.js | 35 + .../app/products/services/product-service.js | 47 + .../products/templates/product-detail.html | 88 + .../app/products/templates/product-list.html | 101 ++ .../search/controllers/search-list-ctrl.js | 226 +++ public/js/app/search/search-index.js | 19 + .../js/app/search/templates/search-list.html | 112 ++ .../controllers/sidebar-navigation-ctrl.js | 66 + .../shared/controllers/site-selector-ctrl.js | 49 + .../shared/controllers/top-navigation-ctrl.js | 73 + .../infinite-scrolling-visible-items.js | 163 ++ .../app/shared/directives/match-background.js | 25 + public/js/app/shared/directives/menu-aim.js | 42 + .../directives/ngRepeat-rendering-finished.js | 27 + public/js/app/shared/directives/popover.js | 77 + .../app/shared/directives/quantity-input.js | 38 + .../shared/directives/sticky-navigation.js | 59 + .../js/app/shared/directives/y-breadcrumb.js | 46 + .../js/app/shared/directives/y-inputs-dir.js | 41 + public/js/app/shared/directives/y-search.js | 184 ++ public/js/app/shared/directives/y-tracking.js | 386 +++++ public/js/app/shared/filters/filters.js | 17 + public/js/app/shared/http-proxy.js | 112 ++ public/js/app/shared/i18n/i18-constants.js | 40 + public/js/app/shared/i18n/i18-index.js | 17 + public/js/app/shared/i18n/lang/de.js | 347 ++++ public/js/app/shared/i18n/lang/en.js | 576 +++++++ .../i18n/providers/translation-provider.js | 35 + public/js/app/shared/router.js | 316 ++++ .../shared/services/configuration-service.js | 160 ++ public/js/app/shared/services/cookie-svc.js | 68 + .../js/app/shared/services/event-service.js | 65 + public/js/app/shared/services/global-data.js | 364 ++++ public/js/app/shared/services/http-queue.js | 124 ++ .../js/app/shared/services/local-storage.js | 74 + .../shared/services/site-selector-service.js | 33 + .../app/shared/services/site-settings-rest.js | 24 + public/js/app/shared/settings.js | 85 + public/js/app/shared/shared-index.js | 19 + public/js/app/shared/site-config.js | 107 ++ public/js/app/shared/templates/footer.html | 49 + .../shared/templates/sidebar-navigation.html | 88 + .../app/shared/templates/top-navigation.html | 107 ++ public/js/app/shared/templates/ysearch.html | 27 + public/js/bootstrap.js | 27 + public/js/vendor-static/bootstrap.min.js | 6 + public/js/vendor-static/img-touch-canvas.js | 265 +++ .../jquery.ba-throttle-debounce.min.js | 9 + .../js/vendor-static/jquery.fullscreen-min.js | 10 + public/js/vendor-static/jquery.menu-aim.js | 323 ++++ public/js/vendor-static/jquery.min.js | 4 + public/js/vendor-static/main.js | 159 ++ public/js/vendor-static/owl.carousel.js | 1519 +++++++++++++++++ public/js/vendor-static/owl.carousel.min.js | 1 + public/js/vendor-static/piwik.js | 205 +++ public/js/vendor-static/readme.txt | 1 + public/js/vendor-static/ui-bootstrap-tpls.js | 9 + public/less/_account.less | 234 +++ public/less/_cart.less | 251 +++ public/less/_checkout.less | 211 +++ public/less/_confirm.less | 172 ++ public/less/_global.less | 222 +++ public/less/_homepage.less | 36 + public/less/_hyicons.less | 49 + public/less/_modals.less | 149 ++ public/less/_navigation.less | 851 +++++++++ public/less/_offcanvas.less | 195 +++ public/less/_overwrites.less | 305 ++++ public/less/_pdp-carousel.less | 255 +++ public/less/_pdp.less | 207 +++ public/less/_products-list.less | 370 ++++ public/less/_search.less | 123 ++ public/less/_variables.less | 69 + public/less/main.less | 27 + public/stylesheets/style.less | 10 + repo-properties.json | 7 + scripts/.version-eye-id | 1 + scripts/all-tests.sh | 33 + scripts/bower.json | 48 + scripts/e2e-test.sh | 20 + scripts/package.json | 79 + scripts/result.json | 1 + scripts/test.sh | 11 + scripts/version-eye.sh | 47 + server.js | 16 + server/singleProdServer.js | 33 + test/css/css-test.js | 3 + test/e2e/cart-tests.js | 182 ++ test/e2e/checkout-tests.js | 444 +++++ test/e2e/coupon-tests.js | 264 +++ test/e2e/login-tests.js | 237 +++ test/e2e/product-tests.js | 204 +++ test/e2e/protractor-utils.js | 284 +++ test/unit/account/account-ctrl-spec.js | 280 +++ .../account/account-order-detail-ctrl-spec.js | 106 ++ test/unit/account/account-svc-spec.js | 231 +++ .../addresses/localized-addresses-spec.js | 40 + test/unit/app-spec.js | 73 + test/unit/auth/anon-auth-service-spec.js | 130 ++ test/unit/auth/auth-dialog-manager-spec.js | 125 ++ test/unit/auth/auth-modal-dialog-ctrl-spec.js | 257 +++ test/unit/auth/auth-service-spec.js | 228 +++ test/unit/auth/confirm-input-spec.js | 34 + test/unit/auth/cookie-service-spec.js | 63 + test/unit/auth/create-account-spec.js | 43 + test/unit/auth/password-reset-ctrl-spec.js | 100 ++ .../auth/password-reset-update-ctrl-spec.js | 151 ++ test/unit/auth/password-update-ctrl-spec.js | 155 ++ test/unit/auth/session-service-spec.js | 164 ++ test/unit/auth/token-service-spec.js | 123 ++ test/unit/bootstrap-test.js | 16 + test/unit/cart/cart-auto-toggle-spec.js | 62 + test/unit/cart/cart-ctrl-spec.js | 153 ++ test/unit/cart/cart-service-spec.js | 600 +++++++ test/unit/checkout/address-decorator-spec.js | 48 + test/unit/checkout/checkout-base-ctrl-spec.js | 73 + test/unit/checkout/checkout-ctrl-spec.js | 464 +++++ test/unit/checkout/checkout-form-spec.js | 51 + test/unit/checkout/checkout-svc-spec.js | 345 ++++ test/unit/checkout/inline-error-input-spec.js | 98 ++ .../checkout/mobile-checkout-wizard-spec.js | 124 ++ .../confirmation/confirmation-ctrl-spec.js | 88 + .../confirmation/order-detail-svc-spec.js | 119 ++ test/unit/coupons/coupon-ctrl-spec.js | 276 +++ test/unit/coupons/coupon-service-spec.js | 121 ++ test/unit/errors/errors-ctrl-spec.js | 46 + test/unit/home/home-ctrl-spec.js | 44 + test/unit/orders/order-list-service-spec.js | 107 ++ .../products/browse-products-ctrl-spec.js | 248 +++ test/unit/products/category-svc-spec.js | 198 +++ test/unit/products/price-service-spec.js | 63 + .../unit/products/product-detail-ctrl-spec.js | 232 +++ test/unit/products/product-svc-spec.js | 80 + test/unit/search/search-list-ctrl-spec.js | 311 ++++ test/unit/shared/configuration-svc-spec.js | 200 +++ test/unit/shared/event-svc-spec.js | 123 ++ test/unit/shared/filter-spec.js | 16 + test/unit/shared/global-data-spec.js | 127 ++ test/unit/shared/http-queue-spec.js | 73 + test/unit/shared/local-storage-spec.js | 71 + test/unit/shared/quantity-input-spec.js | 58 + .../shared/sidebar-navigation-ctrl-spec.js | 116 ++ test/unit/shared/top-navigation-ctrl-spec.js | 141 ++ test/unit/shared/y-tracking-spec.js | 317 ++++ test/unit/shared/ysearch-spec.js | 179 ++ 301 files changed, 31654 insertions(+) create mode 100644 .bowerrc create mode 100644 .buildpacks create mode 100644 .cfignore create mode 100644 .gitignore create mode 100644 .jshintrc create mode 100644 License.md create mode 100644 Readme.md create mode 100644 bower.json create mode 100644 config.rb create mode 100644 config/karma.conf.js create mode 100644 config/protractor-conf.js create mode 100644 docu/files/About.html.md create mode 100644 docu/files/WireFrames-Desktop.html.md create mode 100644 gruntfile.js create mode 100644 img/creditcard.png create mode 100644 img/cvv.png create mode 100644 img/logo.png create mode 100644 img/paypal.png create mode 100644 multi-tenant/multi-tenant-server.js create mode 100644 package.json create mode 100644 products.json create mode 100644 public/Staticfile create mode 100644 public/css/fonts/glyphicons-halflings-regular.eot create mode 100644 public/css/fonts/glyphicons-halflings-regular.svg create mode 100644 public/css/fonts/glyphicons-halflings-regular.ttf create mode 100644 public/css/fonts/glyphicons-halflings-regular.woff create mode 100644 public/css/fonts/glyphicons-halflings-regular.woff2 create mode 100644 public/css/fonts/hyicon.eot create mode 100644 public/css/fonts/hyicon.svg create mode 100644 public/css/fonts/hyicon.ttf create mode 100644 public/css/fonts/hyicon.woff create mode 100644 public/favicon.ico create mode 100644 public/hero-merchandise.jpeg create mode 100644 public/img/btn_backToTop.png create mode 100644 public/img/creditcard.png create mode 100644 public/img/cvv.png create mode 100644 public/img/fb_signInLogo.png create mode 100644 public/img/flags/de.jpg create mode 100644 public/img/flags/en.jpg create mode 100644 public/img/g+_signInLogo.png create mode 100644 public/img/homePg-banner3.jpg create mode 100644 public/img/homePg-banner4.jpg create mode 100644 public/img/homePg-hero-audio.jpg create mode 100644 public/img/homePg-hero-office.jpg create mode 100644 public/img/homepg_flightCollection.png create mode 100644 public/img/homepg_freegift.png create mode 100644 public/img/language_select_active.png create mode 100644 public/img/language_select_inactive.png create mode 100644 public/img/logo.png create mode 100644 public/img/no-image.jpg create mode 100644 public/img/paypal.png create mode 100644 public/img/shopping_bag.png create mode 100644 public/img/user-icon_big.png create mode 100644 public/img/user-icon_small.png create mode 100644 public/img/user-icon_small_active.png create mode 100644 public/img/user_placeholder.jpg create mode 100644 public/index.html create mode 100644 public/js/app/account/account-index.js create mode 100644 public/js/app/account/controllers/account-ctrl.js create mode 100644 public/js/app/account/controllers/account-order-detail-ctrl.js create mode 100644 public/js/app/account/services/account-service.js create mode 100644 public/js/app/account/templates/account.html create mode 100644 public/js/app/account/templates/address-form.html create mode 100644 public/js/app/account/templates/addresses-dialog.html create mode 100644 public/js/app/account/templates/addresses.html create mode 100644 public/js/app/account/templates/order-detail.html create mode 100644 public/js/app/addresses/addresses-index.js create mode 100644 public/js/app/addresses/directives/localized-addresses.js create mode 100644 public/js/app/addresses/templates/addAddressCA.html create mode 100644 public/js/app/addresses/templates/addAddressCN.html create mode 100644 public/js/app/addresses/templates/addAddressDE.html create mode 100644 public/js/app/addresses/templates/addAddressGB.html create mode 100644 public/js/app/addresses/templates/addAddressJP.html create mode 100644 public/js/app/addresses/templates/addAddressUS.html create mode 100644 public/js/app/addresses/templates/billingCA.html create mode 100644 public/js/app/addresses/templates/billingCN.html create mode 100644 public/js/app/addresses/templates/billingDE.html create mode 100644 public/js/app/addresses/templates/billingGB.html create mode 100644 public/js/app/addresses/templates/billingJP.html create mode 100644 public/js/app/addresses/templates/billingUS.html create mode 100644 public/js/app/addresses/templates/shippingCA.html create mode 100644 public/js/app/addresses/templates/shippingCN.html create mode 100644 public/js/app/addresses/templates/shippingDE.html create mode 100644 public/js/app/addresses/templates/shippingGB.html create mode 100644 public/js/app/addresses/templates/shippingJP.html create mode 100644 public/js/app/addresses/templates/shippingUS.html create mode 100644 public/js/app/app.js create mode 100644 public/js/app/auth/auth-index.js create mode 100644 public/js/app/auth/controllers/auth-modal-dialog-ctrl.js create mode 100644 public/js/app/auth/controllers/password-reset-ctrl.js create mode 100644 public/js/app/auth/controllers/password-reset-update-ctrl.js create mode 100644 public/js/app/auth/controllers/password-update-ctrl.js create mode 100644 public/js/app/auth/directives/confirm-input.js create mode 100644 public/js/app/auth/directives/create-account.js create mode 100644 public/js/app/auth/services/anon-auth-service.js create mode 100644 public/js/app/auth/services/auth-dialog-manager.js create mode 100644 public/js/app/auth/services/auth-rest.js create mode 100644 public/js/app/auth/services/auth-service.js create mode 100644 public/js/app/auth/services/session-service.js create mode 100644 public/js/app/auth/services/token-service.js create mode 100644 public/js/app/auth/templates/auth.html create mode 100644 public/js/app/auth/templates/check-email.html create mode 100644 public/js/app/auth/templates/create-account.html create mode 100644 public/js/app/auth/templates/password-request-reset.html create mode 100644 public/js/app/auth/templates/password-reset.html create mode 100644 public/js/app/auth/templates/password-update.html create mode 100644 public/js/app/auth/templates/pw-change-success.html create mode 100644 public/js/app/auth/templates/signin.html create mode 100644 public/js/app/auth/templates/signup.html create mode 100644 public/js/app/cart/cart-index.js create mode 100644 public/js/app/cart/controllers/cart-ctrl.js create mode 100644 public/js/app/cart/directives/cart-auto-toggle.js create mode 100644 public/js/app/cart/services/cart-rest.js create mode 100644 public/js/app/cart/services/cart-service.js create mode 100644 public/js/app/cart/templates/cart-costs.html create mode 100644 public/js/app/cart/templates/cart.html create mode 100644 public/js/app/checkout/checkout-index.js create mode 100644 public/js/app/checkout/controllers/checkout-base-ctrl.js create mode 100644 public/js/app/checkout/controllers/checkout-cart-ctrl.js create mode 100644 public/js/app/checkout/controllers/checkout-ctrl.js create mode 100644 public/js/app/checkout/controllers/checkout-edit-cart-ctrl.js create mode 100644 public/js/app/checkout/directives/address-decorator.js create mode 100644 public/js/app/checkout/directives/inline-error-input.js create mode 100644 public/js/app/checkout/directives/mobile-checkout-wizard.js create mode 100644 public/js/app/checkout/services/checkout-rest.js create mode 100644 public/js/app/checkout/services/checkout-service.js create mode 100644 public/js/app/checkout/templates/checkout-cart.html create mode 100644 public/js/app/checkout/templates/checkout-edit-cart.html create mode 100644 public/js/app/checkout/templates/checkout-form.html create mode 100644 public/js/app/checkout/templates/checkout-frame.html create mode 100644 public/js/app/checkout/templates/order-processing-splash-screen.html create mode 100644 public/js/app/confirmation/confirmation-index.js create mode 100644 public/js/app/confirmation/controllers/confirmation-ctrl.js create mode 100644 public/js/app/confirmation/directives/summary-align.js create mode 100644 public/js/app/confirmation/services/order-details-rest.js create mode 100644 public/js/app/confirmation/services/order-details-svc.js create mode 100644 public/js/app/confirmation/templates/confirmation.html create mode 100644 public/js/app/coupons/controllers/coupon-ctrl.js create mode 100644 public/js/app/coupons/coupon-index.js create mode 100644 public/js/app/coupons/services/coupon-rest.js create mode 100644 public/js/app/coupons/services/coupon-service.js create mode 100644 public/js/app/coupons/templates/coupon-apply.html create mode 100644 public/js/app/errors/backendStub.js create mode 100644 public/js/app/errors/controllers/errors-ctrl.js create mode 100644 public/js/app/errors/templates/error-display.html create mode 100644 public/js/app/home/controllers/home-ctrl.js create mode 100644 public/js/app/home/home-index.js create mode 100644 public/js/app/home/templates/home.html create mode 100644 public/js/app/orders/orders-index.js create mode 100644 public/js/app/orders/services/order-list-service.js create mode 100644 public/js/app/orders/services/orders-rest.js create mode 100644 public/js/app/products/controllers/browse-products-ctrl.js create mode 100644 public/js/app/products/controllers/product-detail-ctrl.js create mode 100644 public/js/app/products/products-index.js create mode 100644 public/js/app/products/services/category-service.js create mode 100644 public/js/app/products/services/price-product-rest.js create mode 100644 public/js/app/products/services/price-service.js create mode 100644 public/js/app/products/services/product-service.js create mode 100644 public/js/app/products/templates/product-detail.html create mode 100644 public/js/app/products/templates/product-list.html create mode 100644 public/js/app/search/controllers/search-list-ctrl.js create mode 100644 public/js/app/search/search-index.js create mode 100644 public/js/app/search/templates/search-list.html create mode 100644 public/js/app/shared/controllers/sidebar-navigation-ctrl.js create mode 100644 public/js/app/shared/controllers/site-selector-ctrl.js create mode 100644 public/js/app/shared/controllers/top-navigation-ctrl.js create mode 100644 public/js/app/shared/directives/infinite-scrolling-visible-items.js create mode 100644 public/js/app/shared/directives/match-background.js create mode 100644 public/js/app/shared/directives/menu-aim.js create mode 100644 public/js/app/shared/directives/ngRepeat-rendering-finished.js create mode 100644 public/js/app/shared/directives/popover.js create mode 100644 public/js/app/shared/directives/quantity-input.js create mode 100644 public/js/app/shared/directives/sticky-navigation.js create mode 100644 public/js/app/shared/directives/y-breadcrumb.js create mode 100644 public/js/app/shared/directives/y-inputs-dir.js create mode 100644 public/js/app/shared/directives/y-search.js create mode 100644 public/js/app/shared/directives/y-tracking.js create mode 100644 public/js/app/shared/filters/filters.js create mode 100644 public/js/app/shared/http-proxy.js create mode 100644 public/js/app/shared/i18n/i18-constants.js create mode 100644 public/js/app/shared/i18n/i18-index.js create mode 100644 public/js/app/shared/i18n/lang/de.js create mode 100644 public/js/app/shared/i18n/lang/en.js create mode 100644 public/js/app/shared/i18n/providers/translation-provider.js create mode 100644 public/js/app/shared/router.js create mode 100644 public/js/app/shared/services/configuration-service.js create mode 100644 public/js/app/shared/services/cookie-svc.js create mode 100644 public/js/app/shared/services/event-service.js create mode 100644 public/js/app/shared/services/global-data.js create mode 100644 public/js/app/shared/services/http-queue.js create mode 100644 public/js/app/shared/services/local-storage.js create mode 100644 public/js/app/shared/services/site-selector-service.js create mode 100644 public/js/app/shared/services/site-settings-rest.js create mode 100644 public/js/app/shared/settings.js create mode 100644 public/js/app/shared/shared-index.js create mode 100644 public/js/app/shared/site-config.js create mode 100644 public/js/app/shared/templates/footer.html create mode 100644 public/js/app/shared/templates/sidebar-navigation.html create mode 100644 public/js/app/shared/templates/top-navigation.html create mode 100644 public/js/app/shared/templates/ysearch.html create mode 100644 public/js/bootstrap.js create mode 100644 public/js/vendor-static/bootstrap.min.js create mode 100644 public/js/vendor-static/img-touch-canvas.js create mode 100644 public/js/vendor-static/jquery.ba-throttle-debounce.min.js create mode 100644 public/js/vendor-static/jquery.fullscreen-min.js create mode 100644 public/js/vendor-static/jquery.menu-aim.js create mode 100644 public/js/vendor-static/jquery.min.js create mode 100644 public/js/vendor-static/main.js create mode 100644 public/js/vendor-static/owl.carousel.js create mode 100644 public/js/vendor-static/owl.carousel.min.js create mode 100644 public/js/vendor-static/piwik.js create mode 100644 public/js/vendor-static/readme.txt create mode 100644 public/js/vendor-static/ui-bootstrap-tpls.js create mode 100644 public/less/_account.less create mode 100644 public/less/_cart.less create mode 100644 public/less/_checkout.less create mode 100644 public/less/_confirm.less create mode 100644 public/less/_global.less create mode 100644 public/less/_homepage.less create mode 100644 public/less/_hyicons.less create mode 100644 public/less/_modals.less create mode 100644 public/less/_navigation.less create mode 100644 public/less/_offcanvas.less create mode 100644 public/less/_overwrites.less create mode 100644 public/less/_pdp-carousel.less create mode 100644 public/less/_pdp.less create mode 100644 public/less/_products-list.less create mode 100644 public/less/_search.less create mode 100644 public/less/_variables.less create mode 100644 public/less/main.less create mode 100644 public/stylesheets/style.less create mode 100644 repo-properties.json create mode 100644 scripts/.version-eye-id create mode 100644 scripts/all-tests.sh create mode 100644 scripts/bower.json create mode 100644 scripts/e2e-test.sh create mode 100644 scripts/package.json create mode 100644 scripts/result.json create mode 100644 scripts/test.sh create mode 100644 scripts/version-eye.sh create mode 100644 server.js create mode 100644 server/singleProdServer.js create mode 100644 test/css/css-test.js create mode 100644 test/e2e/cart-tests.js create mode 100644 test/e2e/checkout-tests.js create mode 100644 test/e2e/coupon-tests.js create mode 100644 test/e2e/login-tests.js create mode 100644 test/e2e/product-tests.js create mode 100644 test/e2e/protractor-utils.js create mode 100644 test/unit/account/account-ctrl-spec.js create mode 100644 test/unit/account/account-order-detail-ctrl-spec.js create mode 100644 test/unit/account/account-svc-spec.js create mode 100644 test/unit/addresses/localized-addresses-spec.js create mode 100644 test/unit/app-spec.js create mode 100644 test/unit/auth/anon-auth-service-spec.js create mode 100644 test/unit/auth/auth-dialog-manager-spec.js create mode 100644 test/unit/auth/auth-modal-dialog-ctrl-spec.js create mode 100644 test/unit/auth/auth-service-spec.js create mode 100644 test/unit/auth/confirm-input-spec.js create mode 100644 test/unit/auth/cookie-service-spec.js create mode 100644 test/unit/auth/create-account-spec.js create mode 100644 test/unit/auth/password-reset-ctrl-spec.js create mode 100644 test/unit/auth/password-reset-update-ctrl-spec.js create mode 100644 test/unit/auth/password-update-ctrl-spec.js create mode 100644 test/unit/auth/session-service-spec.js create mode 100644 test/unit/auth/token-service-spec.js create mode 100644 test/unit/bootstrap-test.js create mode 100644 test/unit/cart/cart-auto-toggle-spec.js create mode 100644 test/unit/cart/cart-ctrl-spec.js create mode 100644 test/unit/cart/cart-service-spec.js create mode 100644 test/unit/checkout/address-decorator-spec.js create mode 100644 test/unit/checkout/checkout-base-ctrl-spec.js create mode 100644 test/unit/checkout/checkout-ctrl-spec.js create mode 100644 test/unit/checkout/checkout-form-spec.js create mode 100644 test/unit/checkout/checkout-svc-spec.js create mode 100644 test/unit/checkout/inline-error-input-spec.js create mode 100644 test/unit/checkout/mobile-checkout-wizard-spec.js create mode 100644 test/unit/confirmation/confirmation-ctrl-spec.js create mode 100644 test/unit/confirmation/order-detail-svc-spec.js create mode 100644 test/unit/coupons/coupon-ctrl-spec.js create mode 100644 test/unit/coupons/coupon-service-spec.js create mode 100644 test/unit/errors/errors-ctrl-spec.js create mode 100644 test/unit/home/home-ctrl-spec.js create mode 100644 test/unit/orders/order-list-service-spec.js create mode 100644 test/unit/products/browse-products-ctrl-spec.js create mode 100644 test/unit/products/category-svc-spec.js create mode 100644 test/unit/products/price-service-spec.js create mode 100644 test/unit/products/product-detail-ctrl-spec.js create mode 100644 test/unit/products/product-svc-spec.js create mode 100644 test/unit/search/search-list-ctrl-spec.js create mode 100644 test/unit/shared/configuration-svc-spec.js create mode 100644 test/unit/shared/event-svc-spec.js create mode 100644 test/unit/shared/filter-spec.js create mode 100644 test/unit/shared/global-data-spec.js create mode 100644 test/unit/shared/http-queue-spec.js create mode 100644 test/unit/shared/local-storage-spec.js create mode 100644 test/unit/shared/quantity-input-spec.js create mode 100644 test/unit/shared/sidebar-navigation-ctrl-spec.js create mode 100644 test/unit/shared/top-navigation-ctrl-spec.js create mode 100644 test/unit/shared/y-tracking-spec.js create mode 100644 test/unit/shared/ysearch-spec.js diff --git a/.bowerrc b/.bowerrc new file mode 100644 index 000000000..cb5bc5e4e --- /dev/null +++ b/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory": "public/js/vendor" +} \ No newline at end of file diff --git a/.buildpacks b/.buildpacks new file mode 100644 index 000000000..52f2a9b42 --- /dev/null +++ b/.buildpacks @@ -0,0 +1,3 @@ +https://github.com/heroku/heroku-buildpack-nodejs.git +https://github.com/ejholmes/heroku-buildpack-bower.git +https://github.com/mbuchetics/heroku-buildpack-nodejs-grunt.git \ No newline at end of file diff --git a/.cfignore b/.cfignore new file mode 100644 index 000000000..ac434c5ae --- /dev/null +++ b/.cfignore @@ -0,0 +1,8 @@ +.idea/ +.tmp/ +config/ +coverage/ +docu/ +node_modules/ +test/ +*.yml \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..e5c31fd26 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +.sass-cache +bower_components +node_modules +*sublime* +public/js/vendor +public/css/vendor +.tmp/ +*.iml +public/css/app/style.css +public/css/app/style.css.map +public/js/app/shared/app-config.js +.idea +coverage/ +config/config.js +dist +.DS_Store \ No newline at end of file diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 000000000..40da3cc76 --- /dev/null +++ b/.jshintrc @@ -0,0 +1,30 @@ +{ + "node": true, + "browser": true, + "esnext": true, + "bitwise": true, + "camelcase": true, + "curly": true, + "eqeqeq": true, + "immed": true, + + "latedef": true, + "newcap": true, + "noarg": true, + "quotmark": "single", + "regexp": true, + "undef": true, + "unused": true, + "strict": true, + "trailing": true, + "smarttabs": true, + "globals": { + "angular": false, + "Masonry": false, + "_": false, + "Spinner": false, + "$": false, + "FB": false + }, + "laxcomma": true +} diff --git a/License.md b/License.md new file mode 100644 index 000000000..fe75a3c90 --- /dev/null +++ b/License.md @@ -0,0 +1,168 @@ +# License information + +## For US based partners + +### 1. Scope + +1.1 Under this Test and Evaluation Agreement for Remote Access (“Agreement”) Company is granted a 90-day free trial license to access, test and evaluate the following software: + +hybris as a Service, Beta Release + +(hereinafter "Software") remotely on hybris systems. hybris may supply under this Agreement additional materials and documentation related to the Software (hereinafter “hybris Materials”). The purpose of this Agreement is to enable Company to test the Software and evaluate how Company may use the Software to support its business processes and for hybris to receive Company feedback about such test and evaluation of the Software. In addition, under this Agreement Company may get familiar with the functionality of the Software to determine its possible use in a productive use environment. Company acknowledges that the Software is a preliminary version and not subject to any productive use license agreement or any other agreement with hybris. hybris has no obligation to offer the Software for productive use or any other use, be it remotely accessible or by any other form of access. In addition, hybris has no obligation to include or remove any functionality from the Software in any future version or in any hybris standard product. Company and hybris mutually acknowledge and agree that it would be imprudent and unreasonable to rely upon the expectation of entering into a contract regarding the productive use of the Software. + +1.2 Use of the hybris systems is limited to access the Software for the purpose as permitted under this Agreement. + +1.3 hybris is not responsible for any data produced, used or inserted by Company under this Agreement. + +1.4 Remote access to the Software is dependent upon the availability of the hybris systems. hybris may suspend access to the hybris systems at any time, in its sole discretion. hybris shall endeavour to provide Company with advance notice of any such suspension if practicable. + +1.5 Remote access might also be subject to acceptance of separate terms. + +1.6 Remote access connectivity is the sole responsibility of the Company. hybris is not responsible for any problems or interruptions with respect to the connectivity to the hybris systems or Software under this Agreement. + +### 2. License Rights and Intellectual Property + +2.1 During the term of this Agreement hybris grants to Company a non-transferable and non-exclusive, limited license to remotely access and use the Software for the exclusive purpose of testing and evaluation in accordance with the hybris Materials. Company shall not use the Software for any productive purposes. + +2.2 Company shall not remove notices and notations in the Software and the hybris Materials that refer to copyrights, trademark rights, patent rights and other intellectual property rights. Unless expressly agreed otherwise herein, any and all patent rights, copyrights, trademark rights and other rights in the Software and the hybris Materials, as well as any improvements, inventions, design contributions or derivative works conceived or created by either party in or to the Software and the hybris Materials, shall remain the exclusive property of hybris and/or its licensors. Except for the limited license rights expressly granted herein, this Agreement does not transfer any proprietary right or interest in the Software and the hybris Materials to Company. Between Company and hybris all title to and rights in the Software and the hybris Materials, operational know-how and business secrets related thereto vest exclusively in hybris and/or its licensors, notably copyright and rights of authorship, rights to inventions, and any other industrial and intellectual property rights. All license rights not expressly granted to Company in this Agreement are reserved by hybris and its licensors. Company does not acquire any rights to the source code of the Software. + +2.3 As far as any proprietary rights described in Section 2.2 of this Agreement directly accrue to an employee or subcontractor of Company involved in the testing and evaluating, Company shall ensure the grant of rights under Section 2.2 through appropriate undertakings with such employees and subcontractors. + +2.4 Company shall not be entitled to license, sell, lease, rent, outsource or otherwise transfer, make available or otherwise give access to the Software and the hybris Materials to third parties. Company may utilize subcontractors for those activities within the scope of this Agreement provided Company ensures that such subcontractors adhere to the provisions set forth in this Agreement and Company remains liable to hybris for the acts and omissions of its subcontractors. + +2.5 Company shall not be entitled to duplicate, translate, decompile, reverse-engineer or otherwise modify any parts of the Software and the hybris Materials. No development activities are allowed or supported under this Agreement. + +### 3. Services and Support by hybris + +3.1 The use of the hybris system is an unsupported service. hybris is not obliged to provide or offer any updates to the Software. hybris may, in its sole discretion, provide Company with guidelines for testing and evaluation purposes. + +3.2 Any services by hybris, in particular assistance and consulting with respect to the use of the Software for individual business needs of Company, are not subject to this Agreement. + +### 4. Obligations of Company + +4.1 Company shall appoint a project manager who serves as a contact person for all matters of testing and evaluating. + +4.2 Company shall give comments on how the test runs, documenting related problems via the “hybris Message Wizard” unless informed otherwise by hybris. + +### 5. Limitation on Warranties and Liabilities + +THE SOFTWARE AND ANY hybris MATERIALS ARE LICENSED TO LICENSEE “AS IS”, WITHOUT ANY WARRANTY, ESCROW, TRAINING, MAINTENANCE, OR SERVICE OBLIGATIONS WHATSOEVER ON THE PART OF hybris. hybris MAKES NO EXPRESS OR IMPLIED WARRANTIES OF ANY TYPE WHATSOEVER, INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY AND OF FITNESS FOR A PARTICULAR PURPOSE. LICENSEE ASSUMES ALL RISKS ASSOCIATED WITH ITS USE OF THE SOFTWARE AND THE hybris MATERIALS, INCLUDING WITHOUT LIMITATION RISKS RELATING TO QUALITY, PERFORMANCE, DATA LOSS, AND UTILITY IN A PRODUCTION ENVIRONMENT. IN NO EVENT SHALL hybris BE LIABLE TO LICENSEE OR TO ANY THIRD PARTY FOR ANY DAMAGES (WHETHER DIRECT, INDIRECT, CONSEQUENTIAL, INCIDENTAL, PUNITIVE OR ANY OTHER TYPE OF DAMAGE) ARISING IN CONNECTION WITH (i) LICENSEE’S USE OF OR INABILITY TO USE THE SOFTWARE OR THE hybris MATERIALS, (ii) hybris’S PROVISION OF OR FAILURE TO PROVIDE SERVICES PERTAINING TO THE SOFTWARE OR THE hybris MATERIALS, OR (iii) AS A RESULT OF ANY DEFECT IN THE SOFTWARE OR THE hybris MATERIALS. THIS DISCLAIMER OF LIABILITY SHALL APPLY REGARDLESS OF THE FORM OF ACTION THAT MAY BE BROUGHT AGAINST hybris, WHETHER IN CONTRACT OR TORT, INCLUDING WITHOUT LIMITATION ANY ACTION FOR NEGLIGENCE. LICENSEE’S SOLE REMEDY IN THE EVENT OF BREACH OF THIS AGRREEMENT BY hybris OR FOR ANY OTHER CLAIM RELATED TO THE SOFTWARE OR hybris MATERIALS SHALL BE TERMINATION OF THIS AGREEMENT. + +### 6. Data Protection and Confidentiality + +6.1 Each Party shall comply with applicable data protection laws and regulations. No personal data are collected, processed, stored or transmitted under this Agreement. In case of contractual data processing or transfer of personal data outside the EU, the Parties agree to execute a written agreement containing adequate regulations to protect the individuals’ privacy and comply with EU data protection laws. Subject to Section 1.3, Company agrees to take care for any data protection on his own in case it enters data into the system. + +6.2 Company shall treat as confidential all confidential information and trade secrets of hybris and its licensors acquired in connection with the performance of this Agreement that are expressly identified as confidential or proprietary or that are reasonably identifiable as confidential or proprietary based on the circumstances of their disclosure or by their nature ("Confidential Information") and to use such Confidential Information only to perform this Agreement. hybris’s Confidential Information shall include all of, but are not limited to the Software (in object and source code), hybris Materials, programming techniques and concepts, processing methods, system designs embedded in the Software, inventions, techniques, concepts, designs, flow charts, documentation, product specifications, application programming interface specifications, techniques and processes that relate to the Software or the hybris Materials, information on hybris Companies and business partners, information about deployed third-party software and any access credentials used to access the hybris systems, including, but not limited to password or account information. The terms and conditions of this Agreement shall also be treated confidential. + +6.3 The foregoing obligation shall not apply to the extent that Company shows that the information (i) was public knowledge at the time it was disclosed by hybris and had not become public knowledge through an act or omission by Company or Company’s employee or agent in breach of contract, or (ii) was in the possession of or known to Company before Company received it from hybris, or (iii) had been lawfully disclosed to Company by another person entitled to do so, or (iv) had been independently developed by Company without reference to hybris’s information. + +6.4 Confidential Information may be provided to third parties only upon prior written consent hybris. These third parties must be subject to a written non-disclosure obligation. The term “third party“ as used this Section 6.4 does not apply to employees and subcontractors of Company whose proper performance under this Agreement reasonably requires access to such information and who have executed corresponding non-disclosure agreements. + +6.5 Company agrees to be named to other Companies and publicly referenced as a participant in this test and evaluation activity. + +6.6 Company grants to hybris a license in the Feedback that is non-exclusive, perpetual, irrevocable, worldwide, royalty-free, and sub-licensable under all relevant intellectual property rights. hybris may do whatever it wishes with the Feedback, including (1) use, (2) publish, (3) disclose, (4) display, (5) perform, (6) copy, (7) make or have made, or (8) sell it. hybris does not have to identify Company as the Feedback’s source. hybris owes Company no money or anything else in exchange for the Feedback and hybris is not obligated to do anything with the Feedback. “Feedback” means information and materials provided by Company under this Agreement which relate directly to the design and performance of the Software and/or other hybris Materials. + +### 7. Term and Termination + +7.1 This Agreement enters into force upon the availability of the Software to Company and remains effective for a period of ninety (90) days thereafter. It ceases automatically upon expiration of this period without requiring any notice of termination. + +7.2 Either party may terminate this Agreement at any time during the term upon thirty days’ advance written notice to the other party. + +7.3 Either party may terminate this Agreement in the event the other party breaches an obligation under this Agreement, including but not limited to a breach of Sections 2 and 6. + +7.4 Upon expiration or termination of this Agreement Company’s access to the hybris system, Software and hybris Materials shall be terminated. To the extent applicable, Company shall return to hybris and/or destroy any of the hybris Materials and the Software provided by hybris under this Agreement. Any further use of the hybris system, Software and hybris Materials is not allowed and all parts of the Software, if any must be removed in its entirety from Company’s systems. + +### 8. General + +8.1 This Agreement constitutes the complete and exclusive statement of the agreement between hybris and Company related to the subject matter hereof, and supersedes all prior written and oral contracts, proposals and other communications between the parties relating to the subject matter. Oral agreements do not exist. + +8.2 Any changes to this Agreement must be in writing. This also applies to any waiver of this written form requirement. + +8.3 All notices or reports which are required or may be given pursuant to this Agreement shall be in writing and shall be deemed duly given when delivered to the respective addresses specified by either party. + +8.4 Company may not assign or otherwise transfer any of its rights under this Agreement without hybris’s prior written consent. + +8.5 If any provision of this Agreement proves to be invalid, this will not affect any other provision of this Agreement. + +8.6 This Agreement does not entitle either party to use the other party’s name, trademark or trade designation for purposes of advertising and marketing without prior written consent of this party unless provided otherwise herein. + +8.7 This Agreement shall be governed by and construed under the Commonwealth of Pennsylvania law without reference to its conflicts of law principles. In the event of any conflicts between foreign law, rules, and regulations, and United States of America law, rules, and regulations, United States of America law, rules, and regulations shall prevail and govern. The United Nations Convention on Contracts for the International Sale of Goods shall not apply to this agreement. The Uniform Computer Information Transactions Act as enacted shall not apply. The parties agree that the exclusive venue for all legal and equitable actions related to or arising from this Agreement shall be the United States Federal courts sitting in Philadelphia, Pennsylvania. The waiver by either party of any of its rights hereunder shall not be construed as a waiver of any subsequent breach. + + +## For partners in other countries + +### 1. Scope + +1.1 Under this Test and Evaluation Agreement for Remote Access (“Agreement”) Company is granted on a loan basis a 90-day free trial license to access, test and evaluate the following software: + +hybris as a Service, Beta Release + +(hereinafter "Software") remotely on hybris systems. hybris may supply under this Agreement additional materials and documentation related to the Software (hereinafter “hybris Materials”). +The purpose of this Agreement is to enable Company to test the Software and evaluate how Company may use the Software to support its business processes and for hybris to receive Company feedback about such test and evaluation of the Software. In addition, under this Agreement Company may get familiar with the functionality of the Software to determine its possible use in a productive use environment. Company acknowledges that the Software is a preliminary version and not subject to any productive use license agreement or any other agreement with hybris. hybris has no obligation to offer the Software for productive use or any other use, be it remotely accessible or by any other form of access. In addition, hybris has no obligation to include or remove any functionality from the Software in any future version or in any hybris standard product. Company and hybris mutually acknowledge and agree that it would be imprudent and unreasonable to rely upon the expectation of entering into a contract regarding the productive use of the Software. + +1.2 Use of the hybris systems is limited to access the Software for the purpose as permitted under this Agreement. + +1.3 hybris is not responsible for any data produced, used or inserted by Company under this Agreement. + +1.4 Remote access to the Software is dependent upon the availability of the hybris systems. hybris may suspend access to the hybris systems at any time, in its sole discretion. hybris shall endeavour to provide Company with advance notice of any such suspension if practicable. + +1.5 Remote access might also be subject to acceptance of separate terms. + +1.6 Remote access connectivity is the sole responsibility of the Company. hybris is not responsible for any problems or interruptions with respect to the connectivity to the hybris systems or Software under this Agreement. + +### 2. License Rights and Intellectual Property + +2.1 During the term of this Agreement hybris grants to Company a non-transferable and non-exclusive, limited license to remotely access and use the Software for the exclusive purpose of testing and evaluation in accordance with the hybris Materials. Company shall not use the Software for any productive purposes. + +2.2 Company shall not remove notices and notations in the Software and the hybris Materials that refer to copyrights, trademark rights, patent rights and other intellectual property rights. Unless expressly agreed otherwise herein, any and all patent rights, copyrights, trademark rights and other rights in the Software and the hybris Materials, as well as any improvements, inventions, design contributions or derivative works conceived or created by either party in or to the Software and the hybris Materials, shall remain the exclusive property of hybris and/or its licensors. Except for the limited license rights expressly granted herein, this Agreement does not transfer any proprietary right or interest in the Software and the hybris Materials to Company. Between Company and hybris all title to and rights in the Software and the hybris Materials, operational know-how and business secrets related thereto vest exclusively in hybris and/or its licensors, notably copyright and rights of authorship, rights to inventions, and any other industrial and intellectual property rights. All license rights not expressly granted to Company in this Agreement are reserved by hybris and its licensors. Company does not acquire any rights to the source code of the Software. + +2.3 As far as any proprietary rights described in Section 2.2 of this Agreement directly accrue to an employee or subcontractor of Company involved in the testing and evaluating, Company shall ensure the grant of rights under Section 2.2 through appropriate undertakings with such employees and subcontractors. + +2.4 Company shall not be entitled to license, sell, lease, rent, outsource or otherwise transfer, make available or otherwise give access to the Software and the hybris Materials to third parties. Company may utilize subcontractors for those activities within the scope of this Agreement provided Company ensures that such subcontractors adhere to the +provisions set forth in this Agreement and Company remains liable to hybris for the acts and omissions of its subcontractors. + +2.5 Company shall not be entitled to duplicate, translate, decompile, reverse-engineer or otherwise modify any parts of the Software and the hybris Materials. No development activities are allowed or supported under this Agreement. + +### 3. Services and Support by hybris + +3.1 The use of the hybris system is an unsupported service. hybris is not obliged to provide or offer any updates to the Software. hybris may, in its sole discretion, provide Company with guidelines for testing and evaluation purposes. + +3.2 Any services by hybris, in particular assistance and consulting with respect to the use of the Software for individual business needs of Company, are not subject to this Agreement. + +### 4. Obligations of Company + +4.1 Company shall appoint a project manager who serves as a contact person for all matters of testing and evaluating. + +4.2 Company shall give comments on how the test runs, documenting related problems via the “hybris Message Wizard” unless informed otherwise by hybris. + +### 5. Limitation on Warranties and Liabilities + +5.1 As the access to and use of the Software and the hybris Materials are provided to Company free of charge, hybris does not guarantee or warrant any features or qualities of the hybris system, the Software and the hybris Materials or give any undertaking with regard to any other quality. No such warranty or undertaking shall be implied by Company from any description in the hybris Materials or any other communication or advertisement for Software except to the extent that hybris has expressly confirmed that other quality in writing. + +5.2 Irrespective of the legal reasons, hybris shall only be liable for damages occurred under this Agreement if such damage (i) can be claimed under the German Product Liability Act or (ii) is caused due to gross negligence or intentional misconduct by hybris or (iii) consists of personal injury. In all other cases, neither hybris nor its employees, agents and subcontractors shall be liable for any kind of damage or claims hereunder. + +5.3 Company shall take adequate measures for the protection of Company's data and programs. + +### 6. Data Protection and Confidentiality + +6.1 Each Party shall comply with applicable data protection laws and regulations. No personal data are collected, processed, stored or transmitted under this Agreement. In case of contractual data processing or transfer of personal data outside the EU, the Parties agree to execute a written agreement containing adequate regulations to protect the individuals’ privacy and comply with EU data protection laws. Subject to Section 1.3, Company agrees to take care for any data protection on his own in case it enters data into the system. + +6.2 Company shall treat as confidential all confidential information and trade secrets of hybris and its licensors acquired in connection with the performance of this Agreement that are expressly identified as confidential or proprietary or that are reasonably identifiable as confidential or proprietary based on the circumstances of their disclosure or by their nature ("Confidential Information") and to use such Confidential Information only to perform this Agreement. hybris’s Confidential Information shall include all of, but are not limited to the Software (in object and source code), hybris Materials, programming techniques and concepts, processing methods, system designs embedded in the Software, inventions, techniques, concepts, designs, flow charts, documentation, product specifications, application programming interface specifications, techniques and processes that relate to the Software or the hybris Materials, information on hybris Companies and business partners, information about deployed third-party software and any access credentials used to access the hybris systems, including, but not limited to password or account information. The terms and conditions of this Agreement shall also be treated confidential. + +6.3 The foregoing obligation shall not apply to the extent that Company shows that the information (i) was public knowledge at the time it was disclosed by hybris and had not become public knowledge through an act or omission by Company or Company’s employee or agent in breach of contract, or (ii) was in the possession of or known to Company before Company received it from hybris, or (iii) had been lawfully disclosed to Company by another person entitled to do so, or (iv) had been independently developed by Company without reference to hybris’s information. + +6.4 Confidential Information may be provided to third parties only upon prior written consent hybris. These third parties must be subject to a written non-disclosure obligation. The term “third party“ as used this Section 6.4 does not apply to employees and subcontractors of Company whose proper performance under this Agreement reasonably requires access to such information and who have executed corresponding non-disclosure agreements. + +6.5 Company agrees to be named to other Companies and publicly referenced as a participant in this test and evaluation activity. + +6.6 hybris is free to use any Feedback for any purpose. Any materials included in Feedback shall be owned by hybris, unless otherwise agreed between the parties. Company grants to hybris all rights free of charge to the Feedback, materials and notes that Company makes in connection with the test and the evaluation. “Feedback“ means information and materials provided by Company under this Agreement which relate directly to the design and performance of the Software and/or other hybris Materials. + +### 7. Term and Termination + +7.1 This Agreement enters into force upon the availability of the Software to Company and remains effective for a period of ninety (90) days thereafter. It ceases automatically upon expiration of this period without requiring any notice of termination. + +7.2 Either party may terminate this Agreement at any time during the term upon thirty days’ advance written notice to the other party. + +7.3 Either party may terminate this Agreement in the event the other party breaches an obligation under this Agreement, including but not limited to a breach of Sections 2 and 6. + +7.4 Upon expiration or termination of this Agreement Company’s access to the hybris system, Software and hybris Materials shall be terminated. To the extent applicable, Company shall return to hybris and/or destroy any of the hybris Materials and the Software provided by hybris under this Agreement. Any further use of the hybris system, Software and hybris Materials is not allowed and all parts of the Software, if any must be removed in its entirety from Company’s systems. diff --git a/Readme.md b/Readme.md new file mode 100644 index 000000000..d82120802 --- /dev/null +++ b/Readme.md @@ -0,0 +1,292 @@ +# hybris Store Template for the Cloud-based Commerce Services + +This project is an e-commerce front-end written in AngularJS that is meant to showcase the available commerce services and +serve as starting point for creating a customized store front. + + +## Installation + +The following steps will demonstrate how to install and run the code on localhost. At the end, you will be able to browse and "shop" in +a pre-configured store. Feel free to take items through checkout, using any Stripe test credit card number (https://stripe.com/docs/testing). + +### 1. System requirements + +Install node and npm: + + $ brew install node # on MacOS + +[Or download from the Node site] (http://nodejs.org/) + +Install grunt: + + $ npm install -g grunt-cli + +Install bower: + + $ npm install -g bower + +### 2. Project requirements + +Create a fork of the repository, clone it to your machine, and ensure you are on the 'master' branch. **Master** will be kept in sync with service dependencies deployed to prod. **Develop** will change frequently, and may contain experimental features and code changes against services that are only available in development and test environments. + +To locally install the project, execute: + + $ npm install + $ npm update + + +### 3. Project startup + +Start the project on localhost:9000 by executing: + + $ npm start + +This will launch a storefront for an existing project against the "prod" environment. Later, we will modify the application to go against your own project. + + +## Customization + +Now, let's create a new project for your specific site so that you can modify your store and product offering as you see fit. + +### 1. Sign up for your a new store and configure it +If you haven't done so already, create a new storefront project and obtain subscriptions for the services. +Follow the steps outlined in the Dev Portal https://devportal.yaas.io/gettingstarted/createastorefront/index.html + +### 2. Replace the default project id in the code base with your own (see project adminstration settings in the Builder). +In gruntfile.js, set the PROJECT_ID to your own project ID. When you build the project, the default project id in bootstrap.js will be replaced with your project-id. At this time you will need to also configure the CLIENT_ID and REDIRECT_URI gruntfile variables with the values set in the application associated with your project. + +### 3. Launch a new session +Execute command "npm start" and open your browser at http://localhost:9000. You should now see your customized store. + +### 4. Customize the style or logic of your storefront as desired +You can now modify the style or logic of your storefront. Any new JS scripts or CSS files need to be added to index.html. + +### 5. Project deployment + +Preparing project for deployment (concatenation/minification/revisioning): + + $ grunt build:prod + + or + + $ grunt build + + +The :prod parameter specifies which dynamic domain to connect with the api services. If this domain is not specified with the parameter, a warning will appear in the build output and the default setting will be applied for the api url's, which is also set to the prod api domain in the gruntfile. + +**npm start** is configured to run **grunt build:prod**. Other options are **:stage** and **:test** and can be configured in the gruntfile. + +Credential parameters also exist for automated build environments. With NPM 2.0, it is possible to pass in a Client_Id and Project_Id from npm run-script command line. For example, we can further automate the build system with these parameters (pid and cid) like this: + +$ npm run-script singleProd -- --pid=abc --cid=123 + +This allows for many different projects with many different clients to be configured. But remember that a minimum version of NPM 2.0 is required to pass the parameters, otherwise the Client_Id and Project_Id will be set by default to the build configuration variables in the gruntfile. + + +**grunt build** will also optimize js and css in public/index.html. See the optimization section for more specific information. + + +### 6. Deploy application to server + +You can deploy your web application to any server desired. If you have access to a CloudFoundry environment and you're running the app in single project mode (default), +you can easily deploy your project using a [static buildpack](https://github.com/cloudfoundry-community/staticfile-buildpack) that utilizes [ngnix](http://nginx.org). The configuration for this deployment is determined by settings in file static-manifest.yml (see http://docs.cloudfoundry.org/devguide/deploy-apps/manifest.html). You must change the name and domain of your store to match the domain given to your project. Attempting to push as is will result in error. + +cf push -f static-manifest.yml + +# About This Project + +## Limitations in the current service layer + +- Limited tax support - consult APIs for details. + +## Project Organization + +The project has been structured into domain modules under public/js/app. Within each module, files are organized into + controllers, directives, services, and templates. API REST calls are made from the domain services. + +Third party dependencies are copied to public/js/vendor via the bower-installer command as part of the npm postinstall target +(see package.json file). + +The angular bootstrapping takes places in file public/js/bootstrap.js. + +From here, angular will load the "ds.app" module which comprises file public/js/app/app.js. It is here that the application +is further configured before it is loaded. + +The app-config.js file provides dynamic configuration for the application which allows you to set application variables without persisting +them in your get repository. For example, if you are running with multiple project id's changing between these environments will cause git to indicate an update. This scenario is avoided in app-config as it is included in .gitignore. Another example of non-persisted dynamic configuration is in the URL path to the API. Should this need to change, you will not need to persist it in git. + + +## Application Events + +The following application events are used to communicate state changes that affect the entire application overall. Interested controllers can subscribe to these events. + +- **'cart:updated'** - fired when new cart information has been acquired from the service; + - event object: + - cart - current cart instance + - source - source event of the update (manual | currency | language | merge | reset) +- **'language:updated'** - fired when the store's language has changed + - event object: + - languageCode: new language code + - source: source of the event +- **'currency:updated'** - fired when the store's currency has changed + - event object: + - currencyId: new currency id + - source: source of the event +- **'categories:updated'** - fired when categories have been reloaded + - event object: + - categories: new category tree + - source: reason for category update +- **'user:signedin'** - signals that a user has been authenticated +- **'user:signedout'** - signals that a user has logged off +- **'user:socialLogIn'** - signals change via social login (both the external authentication as well as the subsequent yaas authentication) + - event object: + - loggedIn: true/false +- **'category:selected'** - signals that a given category was navigated to. Event object has property 'category' to indicate selection. + +## Running Against Different Environments + +The service endpoint domains can be configured for a specific environment by specifying the desired target in the npm/grunt commands. The endpoint URLs are configured in public/js/app/shared/site-config.js. When running grunt, the domain is injected into this configuration file via String replacement. The default environment is "prod", so you can simply invoke **grunt build** and **npm start** to build or build and run the application against the services in the **prod** environment. + +Additional api environments supported by the script are: + - test + - stage + +To build against an environment other than **prod**, append **:[env]** to the grunt task you're calling. For instance, to invoke the build for **test**, you issue the command **grunt build:test**. To build and run the app via NPM against **stage**, you'll call **grunt build:stage**. + +## Testing + +Tests are grouped by unit tests, end-to-end tests and styling tests under the "test" folder. Unit tests can be run via +the scripts/test.sh; end-to-end tests can be run via scripts/e2e-test.sh. Unit test code coverage is published to folder "coverage" +after running the unit test suite. + +## Adding Locales + +There are two distinct localization settings related to the store: there are the language preferences that are configured in Builder, and then there are translations for all static information that's displayed in a store. The Builder settings determine the language preferences for data retrieved through services, as well as the available language options that shoppers can select in the store. The static information (button labels, instructions, etc) are provided in constant files in the code base - see **public/js/app/shared/i18/lang**. Out of the box, the project currently only provides data in English and in German. If the preferred language is supported by the app localization settings, it will be selected; otherwise, the static localization will be presented in English. To support additional languages, provide your own localized constants and load the data in **public/js/app/shared/i18n/providers/translation-providers.js**. + +## Multi-Project Mode + +This project contains the capability to run the same deployed store template against multiple configured storefronts. In order to do so, start the server by calling "npm run-script multiProd". This will start up the Express.JS server configured in file multi-tenant/multi-tenant-service.js. The multi-project mode is provided for development and test purposes only. + +In the multi-project setup, instead of reading the project ID from bootstrap.js, the project-id is the first path segment in the URL. For example, to run the store against project "myproject" you would use the URL: + + http://localhost:9000/myproject. + +## Security + +### DevPortal Security Documentation + +A variety of precautions have been taken to ensure information security in the demostore. For a full list of those capabilities, please see the DevPortal Security Documentation at https://devportal.yaas.io/overview/storefrontsecurity.html Below is a brief on a few or our recomendations. + +### y-input + +One personalized security choice you have is for the custom data wrapper directive called y-input. It gives you the ability to finely tune regular expression input checking types for specific fields, like email, password, id, etc... as added ensurance against XSS. + +### Angular Version + +It is a good idea to ensure your Angular version dependencies are above 1.2 to gain the $SCE (strict contextual escaping) that is added by default in that version. For example, you should specify your angular build version in some variety(latest) greater than 1.2 like so: + "dependencies": { + "angular": "~1.3.0" + + +### Click-Jacking + +It is recommended that you configure your deployment HTTP server to send the X-FRAME-OPTIONS header to restrict others from hosting your site inside an IFrame. +See [OWASP Click-Jacking] + + (https://www.owasp.org/index.php/Clickjacking). + +### HTTPS + +We strongly recommend domains that are encrypted into a Secure Socket Layer (SSL) HTTPS session. Possibly also a forced redirect is optimal to ensure that all http users are converted into encrypted streams. For example of this see the configuration in the NodeJS server file located at: server/singleProdServer.js + + +### OWASP + +For more information on any of these topics see OWASP. For starters, here is a good checklist of guidlines and an industry resource for Information Security best practices: + + https://www.owasp.org/index.php/Web_Service_Security_Cheat_Sheet + +## Optimization + +Performance optimizations are included in the gruntfile to improve the initial load time of the site. There is an 'optimizeCode' grunt task which concatenates and minifies JavaScript and CSS to reduce HTTP requests and the overall page size of the application. It works by pulling all the code from the development files into the .tmp directory, where it then concatenates and minifies before moving it to a final destination in the /dist directory. The 'optimizeCode' build task conducts all operations required with producing an optimized run-time, including: cleaning of /dist, copying of dependencies, and the replacement of the concatenated and minified resources. The code within the /dist directory then contains everything needed to run an optimized store front. To deploy those optimized resources, first run a build command that will populate the /dist directory with the optimized files (like **grunt build** for example) then deploy /dist to your server of choice and run **grunt startServer**. The startServer build task gives you the choice to run either a multi-project site or a single-project site with the flags --single or --multiple. It will start the server with only the minimum build steps necessary (including server-side optimizations), excluding unecessary build tasks like linting. + +A short list of the performance optimizations available are: JS & CSS minification, file revisioning, http template caching, and GZip in the NodeJS server. + + +## Modularity + +At the core of what AngularJS is getting right, right now, are modules and components. The storefront architecture was design in best-practice manner to allow extensibility along any folder in the physical architecture. This is done by grouping files by Component first, then by language Type. So for example, a 'SomeFeature' folder that contains controllers, directives, services, templates. This structure allows reuse in the ability to add and differentiate any number of similar but different html, controllers, directives, etc. All the way up to the very top of the application in the bootstrap.js file. Where it is possible to partition and run in parallel separate variations of the codebase through manual variation of the base module in the angular.bootstrap parameter: + + angular.bootstrap( document, ['ds.app'] ); + +### Extensibility Plan + +The nice thing about the structure of AngularJS is that it gives you the ability to differentiate your business requirements into the architecture without ever having to touch the original codebase. This is possible if you are replicating the pieces that you need in parallel with the existing structure - like a scaffolding. For example before you make any modifications to say the gruntfile or the package.json - you should really split the That way, pulling down advancements in the demostore can be isolated to files that you are never using in production. Admittedly, this parallel replication process is low ceremony, but it becomes really helpful in extending the codbase year after year of feature implementation and sales growth. All while having a fully updated hybris demostore supporting your advancement while you develop. Those topics and more are discussed at the following DevPortal location: + + https://devportal.yaas.io/overview/extendingthestorefront.html + + +# Resources + +For in-depth API documentation, please visit: + + https://devportal.yaas.io/ + +## About this Project + +### Why AngularJS? + +With the rapid growth in JS frameworks, it is not feasible to evaluate all options, and it is still difficult to make a choice +among a small subset of options. +We were looking for a single-page framework with industry and community traction, support for unit testing, +decoupling of DOM manipulation and application logic, and terseness. AngularJS fit these requirements very nicely. +Ultimately, the hybris commerce services support all needed business logic, and new client applications can be created with ease as needed. + +### Why Node? + +We wanted to take advantage of the Node package manger, NPM, for resolving our infrastructure dependencies. In addition, +the Node based HTTP server turned out to be very quick to start up and thus ideal for development. + +The multi-project mode relies on NodeJS with Express so that dynamic routes can be created for multiple storefronts. +The single-project distribution generated by this project, however, can be deployed on any HTTP server, without NodeJS. + +### Infrastructure Tools + +- [Bower](http://bower.io/) - package manager for all dependent libraries on the browser side +- [Grunt](http://gruntjs.com/) - JS task runner +- [Karma](http://karma-runner.github.io/) - test runner for AngularJS +- [Jasmine](http://jasmine.github.io/) - JS unit test framework +- [Protractor](https://github.com/angular/protractor) End-to-End (E2E) test framework for AngularJS +- [PhantomJS](http://phantomjs.org/) headless WebKit used for our E2E tests +- [Less](http://lesscss.org/) CSS pre-processor + + +### AngularJS And Other UI Packages +For a complete and up-to-date list of UI dependencies, please examine file bower.json. +- [Angular.js](http://angularjs.org/) AngularJS framework +- [Angular UI router](https://github.com/angular-ui/ui-router) State-based routing framework that helps achieve loose coupling +between modules. +- [Bootstrap](http://getbootstrap.com/) Enables responsiveness using the Bootstrap responsive grid. +- [Angular Bootstrap](http://angular-ui.github.io/bootstrap/) AngularJS implementation for Bootstrap widgets (for instance, pagination). +- [Restangular](https://github.com/mgonto/restangular) Library simplifying access of REST services through Angular's $resource service. +- [ngInfiniteScroll](http://binarymuse.github.io/ngInfiniteScroll/) Infinite scrolling in AngularJS. Used for the "browse product" pages. + +### About Contributions + +At the moment, we are not accepting pull requests or contributions to this repository. This is likely to change in the future. In the meantime, we encourage you to create a fork of the repository and make edits there. You can also report bugs using GitHub's issue tracking system. + +### License + +See the License.md file for complete license information. + + + + + + + + + + + + diff --git a/bower.json b/bower.json new file mode 100644 index 000000000..f907ed91b --- /dev/null +++ b/bower.json @@ -0,0 +1,48 @@ +{ + "name": "blank-project", + "version": "0.0.0", + "authors": [ + "hybris" + ], + "license": "", + "private": true, + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ], + "dependencies": { + "jquery": "latest", + "angular": "~1.3.0", + "angular-resource": "latest", + "angular-ui-router": "~0.2.11", + "angular-mocks": "~1.3.0", + "angular-translate": "~2.4.0", + "angular-stripe-js": "Venturocket/angular-stripe-js#0.0.6", + "ngInfiniteScroll": "1.0.0", + "bootstrap": "3.3.2", + "restangular": "~1.4.0", + "lodash": "~2.4.1", + "spin.js": "~2.0.1", + "angular-cookie": "~4.0.2", + "angular-bootstrap": "~0.11.0", + "angular-xeditable": "~0.1.8", + "angular-directive.g-signin": "~0.1.2", + "angular-ui-select": "~0.8.2", + "angular-sanitize": "~1.3.0", + "angular-touch": "~1.3.0", + "algoliasearch": "2.9.2", + "yamm3": "1.1.0" + }, + "install": { + "path": { + "css": "public/css/vendor", + "js": "public/js/vendor" + } + }, + "resolutions": { + "angular": "~1.3.0" + } +} diff --git a/config.rb b/config.rb new file mode 100644 index 000000000..24075b2d0 --- /dev/null +++ b/config.rb @@ -0,0 +1,24 @@ +# Require any additional compass plugins here. + +# Set this to the root of your project when deployed: +http_path = "/" +css_dir = "public/css" +sass_dir = "public/scss" +images_dir = "public/img" +javascripts_dir = "public/js" + +# You can select your preferred output style here (can be overridden via the command line): +# output_style = :expanded or :nested or :compact or :compressed + +# To enable relative paths to assets via compass helper functions. Uncomment: +# relative_assets = true + +# To disable debugging comments that display the original location of your selectors. Uncomment: +# line_comments = false + + +# If you prefer the indented syntax, you might want to regenerate this +# project again passing --syntax sass, or you can uncomment this: +# preferred_syntax = :sass +# and then run: +# sass-convert -R --from scss --to sass public/scss scss && rm -rf sass && mv scss sass diff --git a/config/karma.conf.js b/config/karma.conf.js new file mode 100644 index 000000000..4aab8848d --- /dev/null +++ b/config/karma.conf.js @@ -0,0 +1,200 @@ +module.exports = function(config){ + config.set({ + basePath : '../', + + files : [ + + 'public/js/vendor-static/jquery.min.js', + 'public/js/vendor/lodash/dist/lodash.compat.min.js', + 'public/js/vendor-static/bootstrap.min.js', + 'public/js/vendor/spin.js/spin.js', + 'public/js/vendor-static/owl.carousel.min.js', + 'public/js/vendor-static/img-touch-canvas.js', + 'public/js/vendor-static/jquery.fullscreen-min.js', + 'public/js/vendor-static/main.js', + 'https://js.stripe.com/v2/', + 'public/js/vendor/angular/angular.min.js', + 'public/js/vendor/angular-touch/angular-touch.js', + 'public/js/vendor/angular-mocks/angular-mocks.js', + 'public/js/vendor/angular-cookie/angular-cookie.min.js', + 'public/js/vendor/angular-resource/angular-resource.min.js', + 'public/js/vendor/restangular/dist/restangular.min.js', + 'public/js/vendor/angular-ui-router/release/angular-ui-router.min.js', + 'public/js/vendor/angular-translate/angular-translate.min.js', + 'public/js/vendor/ngInfiniteScroll/build/ng-infinite-scroll.min.js', + 'public/js/vendor/angular-stripe-js/build/angular-stripe-js.min.js', + 'public/js/vendor/angular-xeditable/dist/js/xeditable.js', + 'public/js/vendor/angular-sanitize/angular-sanitize.js', + 'public/js/vendor/angular-ui-select/dist/select.min.js', + 'public/js/vendor/angular-directive.g-signin/google-plus-signin.js', + 'public/js/vendor/algoliasearch/dist/algoliasearch.angular.js', + + // dummy config/bootstrap for testing + 'test/unit/bootstrap-test.js', + + 'public/js/app/shared/shared-index.js', + 'public/js/app/shared/settings.js', + 'public/js/app/shared/app-config.js', + 'public/js/app/shared/site-config.js', + 'public/js/app/shared/services/cookie-svc.js', + 'public/js/app/shared/services/site-settings-rest.js', + 'public/js/app/shared/filters/filters.js', + 'public/js/app/shared/services/global-data.js', + 'public/js/app/shared/services/site-settings-rest.js', + 'public/js/app/shared/services/configuration-service.js', + 'public/js/app/shared/services/http-queue.js', + 'public/js/app/shared/services/event-service.js', + 'public/js/app/shared/services/local-storage.js', + 'public/js/app/shared/services/site-selector-service.js', + 'public/js/app/shared/controllers/sidebar-navigation-ctrl.js', + 'public/js/app/shared/controllers/top-navigation-ctrl.js', + 'public/js/app/shared/i18n/i18-index.js', + 'public/js/app/shared/i18n/i18-constants.js', + 'public/js/app/shared/i18n/lang/en.js', + 'public/js/app/shared/i18n/lang/de.js', + 'public/js/app/shared/i18n/providers/translation-provider.js', + + 'public/js/app/shared/directives/y-breadcrumb.js', + 'public/js/app/shared/directives/y-tracking.js', + 'public/js/app/shared/directives/y-search.js', + 'public/js/app/shared/directives/y-inputs-dir.js', + + 'public/js/app/home/home-index.js', + 'public/js/app/home/controllers/home-ctrl.js', + + 'public/js/app/search/search-index.js', + 'public/js/app/search/controllers/search-list-ctrl.js', + + 'public/js/app/products/products-index.js', + 'public/js/app/products/controllers/browse-products-ctrl.js', + 'public/js/app/products/controllers/product-detail-ctrl.js', + 'public/js/app/products/services/product-service.js', + 'public/js/app/products/services/price-service.js', + 'public/js/app/products/services/price-product-rest.js', + 'public/js/app/products/services/category-service.js', + + 'public/js/app/cart/cart-index.js', + 'public/js/app/cart/controllers/cart-ctrl.js', + 'public/js/app/cart/directives/cart-auto-toggle.js', + 'public/js/app/cart/services/cart-service.js', + 'public/js/app/cart/services/cart-rest.js', + + 'public/js/app/checkout/checkout-index.js', + 'public/js/app/checkout/controllers/checkout-ctrl.js', + 'public/js/app/checkout/controllers/checkout-base-ctrl.js', + 'public/js/app/checkout/controllers/checkout-edit-cart-ctrl.js', + 'public/js/app/checkout/services/checkout-service.js', + 'public/js/app/checkout/directives/address-decorator.js', + 'public/js/app/checkout/directives/inline-error-input.js', + 'public/js/app/checkout/directives/mobile-checkout-wizard.js', + 'public/js/app/checkout/services/checkout-rest.js', + 'public/js/app/checkout/services/checkout-service.js', + + 'public/js/app/confirmation/confirmation-index.js', + 'public/js/app/confirmation/controllers/confirmation-ctrl.js', + 'public/js/app/confirmation/services/order-details-svc.js', + 'public/js/app/confirmation/services/order-details-rest.js', + + 'public/js/app/coupons/coupon-index.js', + 'public/js/app/coupons/controllers/coupon-ctrl.js', + 'public/js/app/coupons/services/coupon-service.js', + 'public/js/app/coupons/services/coupon-rest.js', + + 'public/js/app/errors/controllers/errors-ctrl.js', + 'public/js/app/errors/backendStub.js', + + 'public/js/app/account/account-index.js', + 'public/js/app/account/controllers/account-ctrl.js', + 'public/js/app/account/controllers/account-order-detail-ctrl.js', + 'public/js/app/account/services/account-service.js', + + 'public/js/app/addresses/addresses-index.js', + 'public/js/app/addresses/directives/localized-addresses.js', + + 'public/js/app/auth/auth-index.js', + 'public/js/app/auth/controllers/auth-modal-dialog-ctrl.js', + 'public/js/app/auth/controllers/password-reset-ctrl.js', + 'public/js/app/auth/controllers/password-update-ctrl.js', + 'public/js/app/auth/controllers/password-reset-update-ctrl.js', + 'public/js/app/auth/directives/confirm-input.js', + 'public/js/app/auth/directives/create-account.js', + 'public/js/app/auth/services/auth-rest.js', + 'public/js/app/auth/services/token-service.js', + 'public/js/app/auth/services/auth-service.js', + 'public/js/app/auth/services/anon-auth-service.js', + 'public/js/app/auth/services/auth-dialog-manager.js', + 'public/js/app/auth/services/session-service.js', + + 'public/js/app/shared/router.js', + 'public/js/app/shared/http-proxy.js', + + 'public/js/app/shared/controllers/site-selector-ctrl.js', + 'public/js/app/shared/directives/quantity-input.js', + 'public/js/app/shared/directives/popover.js', + + 'public/js/app/orders/orders-index.js', + 'public/js/app/orders/services/order-list-service.js', + 'public/js/app/orders/services/orders-rest.js', + + 'public/js/app/app.js', + + 'public/js/vendor-static/ui-bootstrap-tpls.js', + 'public/js/vendor-static/jquery.menu-aim.js', + + 'test/unit/*.js', + 'test/unit/account/*.js', + 'test/unit/addresses/*.js', + 'test/unit/auth/*.js', + 'test/unit/account/*.js', + 'test/unit/cart/*.js', + 'test/unit/checkout/*.js', + 'test/unit/confirmation/*.js', + 'test/unit/coupons/*.js', + 'test/unit/errors/*.js', + 'test/unit/home/*.js', + 'test/unit/orders/*.js', + 'test/unit/products/*.js', + 'test/unit/search/*.js', + 'test/unit/shared/*.js' + + ], + + exclude : [ + + ], + + preprocessors : { + //'public/js/app/**/*.js': 'coverage' + 'public/js/app/**/!(backendStub).js': 'coverage' + }, + + reporters : ['coverage','progress'], + + coverageReporter : { + type : 'html', + dir : 'coverage/' + }, + + autoWatch : true, + singleRun : true, + + frameworks: ['jasmine'], + + browsers : ['PhantomJS'], + + plugins : [ + 'karma-junit-reporter', + 'karma-chrome-launcher', + 'karma-firefox-launcher', + 'karma-script-launcher', + 'karma-jasmine', + 'karma-phantomjs-launcher', + 'karma-coverage' + ], + + junitReporter : { + outputFile: 'test_out/unit.xml', + suite: 'unit' + } + +})} \ No newline at end of file diff --git a/config/protractor-conf.js b/config/protractor-conf.js new file mode 100644 index 000000000..9a3354aa1 --- /dev/null +++ b/config/protractor-conf.js @@ -0,0 +1,63 @@ +var ScreenShotReporter = require('protractor-screenshot-reporter'); + +exports.config = { + allScriptsTimeout: 45000, + sauceUser: process.env.SAUCE_USERNAME, + sauceKey: process.env.SAUCE_ACCESS_KEY, + + specs: [ + + '../test/e2e/cart-tests.js', + '../test/e2e/checkout-tests.js', + '../test/e2e/coupon-tests.js', + '../test/e2e/login-tests.js', + '../test/e2e/product-tests.js' + ], + + + capabilities: { + 'browserName': 'chrome', + 'maxInstances': 6, + 'shardTestFiles': true, + //comment out the following capabilities to run locally + 'platform': 'OS X 10.8', + 'screen-resolution': '1280x1024', + 'record-video': false, + 'max-duration': 10800, + 'time-zone': 'Berlin', + + // not currently using phantomjs + // 'browserName': 'phantomjs', + 'phantomjs.cli.args': ['--ignore-ssl-errors=true', '--web-security=false', '--ssl-protocol=any'] + + }, + + onPrepare: function () { + require('jasmine-reporters'); + jasmine.getEnv().addReporter( + new jasmine.JUnitXmlReporter(null, true, true, 'coverage/') + ); + // Add a screenshot reporter and store screenshots to `/tmp/screnshots`: + + // jasmine.getEnv().addReporter(new ScreenShotReporter({ + // baseDirectory: './tmp/screenshots', + // takeScreenShotsOnlyForFailedSpecs: true + // })); + var disableNgAnimate = function () { + angular.module('disableNgAnimate', []).run(['$animate', function ($animate) { + $animate.enabled(false); + }]); + }; + + browser.addMockModule('disableNgAnimate', disableNgAnimate); + }, + + baseUrl: 'https://storefront-demo.yaas.io/', + + + framework: 'jasmine', + + jasmineNodeOpts: { + defaultTimeoutInterval: 180000 + } +}; diff --git a/docu/files/About.html.md b/docu/files/About.html.md new file mode 100644 index 000000000..6206bf815 --- /dev/null +++ b/docu/files/About.html.md @@ -0,0 +1,15 @@ +--- +title: 'Overview - BaaS Module Store' +service: 'BaaS Module Store' +Area: Commerce +type: 'Overview' +order: 1 + +--- + # Storefront + +The Storefront template is for partners to use as a starting point for the development of their own custom storefronts. The interface is simple, clean, and direct. A new customer can easily use it with no need for instruction. Some features of the storefront template include: + * Automatically sends an email order confirmation to your customer * Easily customize its appearance by providing your own CSS file + * Very simple and intuitive user interface + * Highly extensible * Localizable content * Accepts multiple payment types + * Automatically sends credit card transactions to Stripe for authorization diff --git a/docu/files/WireFrames-Desktop.html.md b/docu/files/WireFrames-Desktop.html.md new file mode 100644 index 000000000..5770ab356 --- /dev/null +++ b/docu/files/WireFrames-Desktop.html.md @@ -0,0 +1,13 @@ +--- +title: 'Wire Frames - Download' +area: Commerce +service: 'BaaS Module Store' +type: Wire Frames - Download +order: 1 + +--- + +# Wire Frame Download + +This file is the parent for the download of all Storefront wireframe files. + diff --git a/gruntfile.js b/gruntfile.js new file mode 100644 index 000000000..5394788f4 --- /dev/null +++ b/gruntfile.js @@ -0,0 +1,397 @@ +'use strict'; + +var path = require('path'); + +module.exports = function (grunt) { + + var host = process.env.VCAP_APP_HOST || '0.0.0.0'; + var port = process.env.VCAP_APP_PORT || 9000; + + // Configuration Variables. + var JS_DIR = 'public/js/app', + LESS_DIR = 'public/less', + + //--Set Parameters for Server Configuration---------------------------------------------------- + // Read npm argument and set the dynamic server environment or use default configuration. + // Syntax example for npm 2.0 parameters: $ npm run-script singleProd -- --pid=xxx --cid=123 + PROJECT_ID = grunt.option('pid') || 'defaultproj', + CLIENT_ID = grunt.option('cid') || 'hkpWzlQnCIe4MSTi1Ud94Q7O36aRrRrO', + REDIRECT_URI = 'http://example.com', + + PROJECT_ID_PATH = './public/js/app/shared/app-config.js', + PROD_DOMAIN = 'api.yaas.io', + STAGE_DOMAIN = 'api.stage.yaas.io', + TEST_DOMAIN = 'api.yaas.ninja', + API_DOMAIN_PATH = './public/js/app/shared/app-config.js', + DOMAIN_MSG = 'Could not find environment domain in build parameter. Site is built with default API domain. Use grunt build:test [:stage or :prod] to specify.'; + + require('load-grunt-tasks')(grunt); + grunt.loadNpmTasks('grunt-text-replace'); + grunt.loadNpmTasks('grunt-angular-templates'); //combines templates into cache + + // Project Configuration + grunt.initConfig({ + pkg: grunt.file.readJSON('package.json'), + + watch: { + js: { + files: [JS_DIR + '/**'], + tasks: ['jshint:all'] + }, + less: { + files: [LESS_DIR + '/**'], + tasks: ['less:dev'] + } + }, + express: { + options: { + port: port, + hostname: host + }, + singleProdServer: { + options: { + server: path.resolve('./server/singleProdServer.js'), + livereload: 35730, // use different port to avoid collision with client 'watch' operation + serverreload: true, // this will keep the server running, but may restart at a different port!!! + bases: [path.resolve('./server/singleProdServer.js')] + } + }, + singleTenant: { + options: { + server: path.resolve('./server.js'), + livereload: 35730, // use different port to avoid collision with client 'watch' operation + serverreload: true, // this will keep the server running, but may restart at a different port!!! + bases: [path.resolve('./server.js')] + } + }, + multiTenant: { // with livereload + options: { + server: path.resolve('./multi-tenant/multi-tenant-server.js'), + livereload: 35730, // use different port to avoid collision with client 'watch' operation + serverreload: true, // this will keep the server running, but may restart at a different port!!! + bases: [path.resolve('./multi-tenant/multi-tenant-server.js')] + } + }, + production: { + options: { + server: path.resolve('./server.js'), + bases: [path.resolve('./server.js')] + } + } + }, + jshint: { + options: { + jshintrc: '.jshintrc' + }, + all: [ + 'gruntfile.js', + 'public/js/{,**/}*.js', + '!public/js/vendor/{,**/}*.js', + '!public/js/vendor-static/{,**/}*.js' + ] + }, + + less: { + dev : { + options : { + strictImports : true, + sourceMap: false, + sourceMapFilename: 'public/css/app/style.css.map', + sourceMapURL: 'http://localhost/css/style.css.map' + }, + files : { + 'public/css/app/style.css' : 'public/less/main.less' + } + }, + dist : { + options : { + compress: true, + strictImports : false, + sourceMap: false + }, + files : { + 'public/css/app/style.css' : 'public/less/main.less' + } + } + }, + + concurrent: { + singleProject: { + tasks: ['express:singleTenant', 'watch'], //server.js + options: { + logConcurrentOutput: true + } + }, + multiProject: { + tasks: ['express:multiTenant', 'watch'], //multi-tenant-server.js + options: { + logConcurrentOutput: true + } + }, + singleProdServer: { + tasks: ['express:singleProdServer', 'watch'], + options: { + logConcurrentOutput: true + } + }, + dist: [] + }, + + clean: { + dist: { + files: [ + { + dot: true, + src: ['.tmp','dist/*'] + } + ] + } + }, + + copy: { + main: { + dot: true, + expand: true, + cwd: 'public/', + src: [ + '**', 'js/**', '!scss/**', '!css/app/**', '!less/**', '!stylesheets/**', + '../.buildpacks', '../.jshintrc', '../.bowerrc', '../bower.json', + '../gruntfile.js', '../License.md', '../package.json', '../products.json', + '../multi-tenant/**', '../server/**', '../server.js'], + dest: 'dist/public/' + } + }, + + rev: { + files: { + src: ['dist/public/**/*.{js,css}'] + } + }, + + karma: { + unit: { configFile: 'config/karma.conf.js', keepalive: true } + }, + + useminPrepare: { + html: './public/index.html', //concat and minify all script tags in html build blocks. + options: { //concats in .tmp + dest: 'dist/public' //minifies result at path in html block under this directory + } + }, + + usemin: { + html: ['dist/public/index.html'] //runs replacement tasks on index. + }, + + replace: { + test: { + src: [ API_DOMAIN_PATH ], + overwrite: true, + replacements: [{ + from: /StartDynamicDomain(.*)EndDynamicDomain/g, + to: 'StartDynamicDomain*/ \''+ TEST_DOMAIN +'\' /*EndDynamicDomain' + }] + }, + stage: { + src: [ API_DOMAIN_PATH ], + overwrite: true, + replacements: [{ + from: /StartDynamicDomain(.*)EndDynamicDomain/g, + to: 'StartDynamicDomain*/ \''+ STAGE_DOMAIN +'\' /*EndDynamicDomain' + }] + }, + prod: { + src: [ API_DOMAIN_PATH ], + overwrite: true, + replacements: [{ + from: /StartDynamicDomain(.*)EndDynamicDomain/g, + to: 'StartDynamicDomain*/ \''+ PROD_DOMAIN +'\' /*EndDynamicDomain' + }] + }, + projectId: { + src: [ PROJECT_ID_PATH ], + overwrite: true, + replacements: [{ + from: /StartProjectId(.*)EndProjectId/g, + to: 'StartProjectId*/ \''+ PROJECT_ID +'\' /*EndProjectId' + }] + }, + clientId: { + src: [ PROJECT_ID_PATH ], + overwrite: true, + replacements: [{ + from: /StartClientId(.*)EndClientId/g, + to: 'StartClientId*/ \''+ CLIENT_ID +'\' /*EndClientId' + }] + }, + redirectURI: { + src: [ PROJECT_ID_PATH ], + overwrite: true, + replacements: [{ + from: /StartRedirectURI(.*)EndRedirectURI/g, + to: 'StartRedirectURI*/ \''+ REDIRECT_URI +'\' /*EndRedirectURI' + }] + } + }, + + ngtemplates: { + app: { //compile html templates into angular min.js concatenation. + cwd:'./public/', + src: [ + 'js/app/home/templates/home.html', + 'js/app/shared/templates/top-navigation.html', + 'js/app/shared/templates/sidebar-navigation.html', + 'js/app/cart/templates/cart.html', + 'js/app/auth/templates/signup.html', + 'js/app/auth/templates/signin.html' + //too many slows down time to render. + //'js/app/auth/templates/auth.html', + //'js/app/shared/templates/language-selector.html', + //'js/app/shared/templates/currency-selector.html', + ], + dest: '.tmp/concat/js/template.js', //temp concatenation location. + htmlmin: { // minify html configuration. + collapseBooleanAttributes: true, + collapseWhitespace: true, + removeAttributeQuotes: true, + removeComments: true, + removeEmptyAttributes: true, + removeRedundantAttributes: true, + removeScriptTypeAttributes: true, + removeStyleLinkTypeAttributes: true + }, + options: { + usemin: 'js/storefront.js', //concat temp with usemin output. + module: 'ds.app' //module to append templateCache code. + } + } + } + + }); + + grunt.option('force', true); + + //--Convenience-Tasks----------------------------------------------- + // Wrap dev build task with parameters and dynamic domain warnings. + grunt.registerTask('default', 'Build parameters for default', + function(){ + grunt.task.run('build'); + }); + + // Wrap build task with parameters and dynamic domain warnings. + grunt.registerTask('build', 'Build parameters for build', + function(domainParam){ + + grunt.task.run('replace:projectId'); + grunt.task.run('replace:clientId'); + grunt.task.run('replace:redirectURI'); + + runDomainReplace(domainParam); + + grunt.task.run('jshint'); + grunt.task.run('less:dev'); + grunt.task.run('optimizeCode'); + }); + + //--Tasks-With-Environment-Parameters---------------------------------------------- + // Wrap build task with parameters and dynamic domain warnings. + grunt.registerTask('singleProject', 'Build parameters for singleProject build', + function(domainParam){ + + grunt.task.run('replace:projectId'); + grunt.task.run('replace:clientId'); + grunt.task.run('replace:redirectURI'); + + runDomainReplace(domainParam); + + grunt.task.run('singleProjectTask'); + }); + + // Wrap build task with parameters and dynamic domain warnings. + grunt.registerTask('multiProject', 'Build parameters for multiProject build', + function(domainParam){ + + grunt.task.run('replace:projectId'); + grunt.task.run('replace:clientId'); + grunt.task.run('replace:redirectURI'); + + runDomainReplace(domainParam); + + grunt.task.run('multiProjectTask'); + }); + + // Wrap build task with parameters and dynamic domain warnings. + grunt.registerTask('prepareBuild', 'Build parameters for optimized build', + function(domainParam){ + + grunt.task.run('replace:projectId'); + grunt.task.run('replace:clientId'); + grunt.task.run('replace:redirectURI'); + + runDomainReplace(domainParam); + + grunt.task.run('optimizeCode'); + }); + + // Wrap build task with parameters and dynamic domain warnings. + grunt.registerTask('startServer', 'Start server within deploy environment', + function(){ + if (grunt.option('single')){ + grunt.task.run('concurrent:singleProdServer'); // start a single server in deployed environment. + + } else if (grunt.option('multiple')){ + grunt.task.run('concurrent:multiProject'); // start a multi-project server in deployed environment. + + } else { + grunt.task.run('concurrent:multiProject'); // default server if none is specified. + } + }); + + //---Specialized-Build-Behaviors-------------------------------------------------------- + grunt.registerTask('singleProjectTask', [ + 'jshint', + 'less:dev', + 'concurrent:singleProject' //server.js + ]); + + grunt.registerTask('multiProjectTask', [ + 'jshint', + 'less:dev', + 'concurrent:multiProject' //multi-tenant-server.js + ]); + + grunt.registerTask('optimizeCode', [ + 'clean:dist', //deletes contents in the dist folder and the .tmp folder + 'less:dev', //generate style.css + 'copy', //moves dev files to dist + 'useminPrepare', //starts usemin process + 'ngtemplates', //compile html templates into ng. + 'concat', + 'uglify', + 'cssmin', + //'rev', //cachebusts css and js. //be careful was introducing first load latency. + 'usemin' //completes usemin process. + ]); + + //--Dynamic-Replacement-Build-Behaviors---------------------------------------------------- + // Read build parameter and set the dynamic domain for environment or give warning message. + function runDomainReplace(domainParam){ + switch ((domainParam !== undefined) ? domainParam.toLowerCase() : domainParam ) { + case 'test': + grunt.task.run('replace:test'); + break; + case 'stage': + grunt.task.run('replace:stage'); + break; + case 'prod': + grunt.task.run('replace:prod'); + break; + default: + grunt.warn(DOMAIN_MSG); + // Default build domain if none is specified. + grunt.task.run('replace:prod'); + } + } + + +}; diff --git a/img/creditcard.png b/img/creditcard.png new file mode 100644 index 0000000000000000000000000000000000000000..ba3b7538c406d7105ebd5e43723547985d441c54 GIT binary patch literal 14305 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 literal 0 HcmV?d00001 diff --git a/img/cvv.png b/img/cvv.png new file mode 100644 index 0000000000000000000000000000000000000000..f4fd623eea19ae0600e8210dc9e04808a21faff6 GIT binary patch literal 2535 zcmaJ@c|4SB8y=*5M8p(Q#t>O%!wfT78e2vOsdyRifK5mYV!A^Njv0F1<>1_G`C)ju+{12BU? zB(xarWIox+kw9lNk<>LGq=3l*(GZB4rGP`FhX8yS4G3hg%;9r&jc^#l-yH6VbwWFF ztbrhgeH0gPi*k0SM}^Sw{%}hRn3;e85-;!9E`^G z4LK52o_Isoxuj+ z(YXu`pTTCq))=WYb{O9r4l4b61SaP@EsOUpO<=-M0xAcEL88}=wC?ES^#5I%%ZYp*RFB7JnV<|2G!%kJzYQ|fgS*gtE_?~My?zPCQW0{fi{HuiJT zUK#|l(Tik5bQg@wP$-T{p30xY$+en7=!GL&#T_^Z)l>(xar`x+uf0;M&4G#r<&S>q z!9Tl?T(BEIkRLQ+d~IOxSM779Cm53Vui5E}yY^>q3lee{62x@x#Cp{_PVSvfpAkQI zeTPR5DtD%*tAHKYXg*mu*R`ttWPTo9eEZHFsaMm}6E9u_n8hr~TU%QztE;zLC6<)v zh>MHMtEr_950jPC?9SHIEM6;ofS1PMa7mOJR!3)2PL8scmKKaa__utNKww~h%V3+# z$K~aPXSXDbakz6;RnUAKbF8?3`n{3N;Lycd6~_dMS8ysa>I1x{XTq_BLP-SBT}C zum`jA67%v@A2-DAsI9G~2^`GG6pB7?i9vIc#8Q)K-jfafxcp-$Q@vD++XqW2y2=+% z58S&4Yj16(a{c=KwgguOKhSg0|GlWlmb^)}cO&+k&S}Ely$Vohk*=W(TvPK{ym0E- zr%#`-wgF;H$*N4#C!zdG)#8Lowcnr-($dn#wgrlr+VR>s>sOM>yn`~j@XEoPqYu*` zJn@lIe|3D7F4Gpa_2bQ(edFVsvNV+9kpD^aYV;44DK5;}*IB>q!eh2A#V;A|u;CXe zV_H-Hj;KiS0|?DzGio{4WNs7H+!Fsol*i-Peptlpd%GYon%=h!9)kp6#j~c)dpQ^O*nisb#J!wv-oJ=!3)6y^ECU!$cpSosQaBrfpp*eL?>B z$;{~YuMVLt^{^&l{|b5CqHAEF6t{sWr|r=}+V!TpMfa57hR@jA51-J>hGG!EbmpGGgOV zd-bZT$YfcM)v(+c_-176VZ6kqL~^=lMbZ6~{_uRTW7?%lms&!iqwA#Zs1?iro@L$& z=IPcsmiLnsb)5I9?a*rxxvwS#Khd&vf>_m*4`w)Adli4OY@|Z-lpX4YjPF(G#4EZ zCKmOTdsW&c+Xc>6A4*oDEhDFKTl{3>+}so=I|(Psa+9*cUaA&vDlB%<4Bl-XI(4J0 z40%vkc5Bx_;#;@i3m?(j27ti8>7_qNiru~j9y$68K0a3T8h&w2&Gzjm-)!&`oRN`n z<)W}BTPQqwp4C=lgmd&2wYr9QYm1&5fns8NCPL2i+ oqO>+Cb5CkajL_}Z@*$=2DX%*rp}zi@mfuK)l5 literal 0 HcmV?d00001 diff --git a/img/logo.png b/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7f2690e487a6dc1637e90e041a9418c8408d352e GIT binary patch literal 2684 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 literal 0 HcmV?d00001 diff --git a/img/paypal.png b/img/paypal.png new file mode 100644 index 0000000000000000000000000000000000000000..2e8f955d7d4bc95f5ba0e7e0d445a56106aaaf0f GIT binary patch literal 4141 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 literal 0 HcmV?d00001 diff --git a/multi-tenant/multi-tenant-server.js b/multi-tenant/multi-tenant-server.js new file mode 100644 index 000000000..22e624faa --- /dev/null +++ b/multi-tenant/multi-tenant-server.js @@ -0,0 +1,35 @@ + +var http = require('http'); +var express = require('express'); +var compression = require('compression'); + +// ************************************************************************** + +// Build the server +var app = express(); +var helmet = require('helmet'); + +// compress all requests +app.use(compression({level:6})); + +// Don't allow anyone to put content in a frame. +app.use(helmet.frameguard('deny')); +app.use(helmet.xssFilter()); +app.disable('x-powered-by'); + +app.use("/:storename/", express.static(__dirname + '/../public/')); + +// ANGULAR UI-ROUTER WORKAROUND - append trailing '/' +// Long-term, this should be fixed in app.js. +app.get(/^\/\w+$/, function(request, response){ + var newUrl = request.url+'/'; + //console.log('redirect to '+newUrl); + response.redirect(newUrl); +}); + +module.exports = app; + + + + + diff --git a/package.json b/package.json new file mode 100644 index 000000000..2ef84482e --- /dev/null +++ b/package.json @@ -0,0 +1,79 @@ +{ + "name": "caas-demo-store", + "version": "0.0.1", + "description": "Single page javascript application to demonstrate CAAS APIs.", + "main": "public/js/shared-index.js", + "engines": { + "node": "0.10.x", + "npm": "2.8.x" + }, + "scripts": { + "start": "node node_modules/grunt-cli/bin/grunt singleProject:prod", + "singleTest": "node node_modules/grunt-cli/bin/grunt singleProject:test", + "singleStage": "node node_modules/grunt-cli/bin/grunt singleProject:stage", + "singleProd": "node node_modules/grunt-cli/bin/grunt singleProject:prod", + "multiTest": "node node_modules/grunt-cli/bin/grunt multiProject:test", + "multiStage": "node node_modules/grunt-cli/bin/grunt multiProject:stage", + "multiProd": "node node_modules/grunt-cli/bin/grunt multiProject:prod", + "prepareProd": "node node_modules/grunt-cli/bin/grunt prepareBuild:prod", + "prepareTest": "node node_modules/grunt-cli/bin/grunt prepareBuild:test", + "prepareStage": "node node_modules/grunt-cli/bin/grunt prepareBuild:stage", + "startServer": "node node_modules/grunt-cli/bin/grunt startServer --single", + "startServerMulti": "node node_modules/grunt-cli/bin/grunt startServer --multiple", + "postinstall": "bower install" + }, + "dependencies": { + "async": "~0.9.0", + "bower": "latest", + "express": "~4.4.2", + "compression": "1.4.1", + "grunt": "latest", + "grunt-cli": "latest", + "grunt-angular-templates": "0.5.7", + "grunt-concurrent": "~0.4.3", + "grunt-contrib-clean": "~0.5.0", + "grunt-contrib-compass": "~0.7.2", + "grunt-contrib-concat": "~0.3.0", + "grunt-contrib-connect": "~0.7.1", + "grunt-contrib-copy": "~0.5.0", + "grunt-contrib-cssmin": "~0.7.0", + "grunt-contrib-jshint": "~0.7.1", + "grunt-contrib-less": "^0.11.3", + "grunt-contrib-uglify": "~0.2.7", + "grunt-contrib-watch": "0.5.3", + "grunt-env": "latest", + "grunt-express": "~1.3.5", + "grunt-karma": "~0.8.3", + "grunt-ngmin": "~0.0.2", + "grunt-rev": "~0.1.0", + "grunt-text-replace": "0.4.0", + "grunt-usemin": "~2.0.2", + "helmet": "^0.5.4", + "jade": "~1.3.1", + "load-grunt-tasks": "~0.2.0", + "request": "~2.36.0", + "angular-mocks": "latest" + }, + "devDependencies": { + "grunt-contrib-watch": "^0.5.3", + "istanbul": "0.3.0", + "jasmine-reporters": "^1.0.0", + "karma": "^0.12.31", + "karma-chrome-launcher": "~0.1.3", + "karma-coffee-preprocessor": "^0.1.3", + "karma-coverage": "~0.2.1", + "karma-firefox-launcher": "~0.1.3", + "karma-html2js-preprocessor": "^0.1.0", + "karma-jasmine": "~0.1.5", + "karma-junit-reporter": "~0.2.2", + "karma-phantomjs-launcher": "^0.1.4", + "karma-script-launcher": "~0.1.0", + "phantomcss": "^0.4.5", + "phantomjs": "^1.9.15", + "protractor": "^1.8.0", + "protractor-screenshot-reporter": "0.0.5", + "resemblejs": "^1.0.1" + }, + "author": "hybris", + "license": "proprietary" +} diff --git a/products.json b/products.json new file mode 100644 index 000000000..62091b339 --- /dev/null +++ b/products.json @@ -0,0 +1,805 @@ +[ + { + "id": "540751ee394edbc101ff20f5", + "sku": "TatteredBowls1399317852972", + "name": { + "en": "Tattered Bowls", + "de": "Tattered Schüsseln" + }, + "description": { + "en": "These bowls look like they were thrown across the kitchen. Why would anyone want to buy these broken bowls?", + "de": "Diese Schalen schauen, wie sie durch die Küche geworfen wurden. Warum sollte jemand, diese gebrochenen Schalen kaufen?" + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/540751ee394edbc101ff20f5/media/540751f5be0eb3ae86828d9f/content?tenant=3xsfuichdoum", + "id": "540751f5be0eb3ae86828d9f" + } + ], + "inStock": true, + "created": "2014-09-03T17:37:50.004+0000", + "price": 10, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "54075212394edbc101ff20ff", + "sku": "WhiteCupwithHoles1396974928135", + "name": { + "en": "White Cup with Holes", + "de": "Weißen Tasse mit Bohrungen" + }, + "description": { + "en": "This cup has holes in it. Not recommended for use with coffee or oatmeal.", + "de": "Diese Schale hat Löcher. Nicht für die Verwendung mit Kaffee oder Haferflocken empfohlen." + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/54075212394edbc101ff20ff/media/54075216be0eb3ae86828da9/content?tenant=3xsfuichdoum", + "id": "54075216be0eb3ae86828da9" + } + ], + "inStock": false, + "created": "2014-09-03T17:38:26.219+0000", + "price": 3, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "54075232394edbc101ff210b", + "sku": "LittleClayBirds1399405518320", + "name": { + "en": "Little Clay Birds", + "de": "Wenig Lehm Vögel" + }, + "description": { + "en": "Little Clay Birds", + "de": "Wenig Lehm Vögel" + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/54075232394edbc101ff210b/media/54075235be0eb3ae86828db5/content?tenant=3xsfuichdoum", + "id": "54075235be0eb3ae86828db5" + } + ], + "inStock": true, + "created": "2014-09-03T17:38:58.372+0000", + "price": 2.9, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "5407524a394edbc101ff2113", + "sku": "BeadedNecklace1399405613951", + "name": { + "en": "Beaded Necklace", + "de": "Perlen Halskette" + }, + "description": { + "en": "Beaded Necklace", + "de": "Perlen Halskette" + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/5407524a394edbc101ff2113/media/5407524ebe0eb3ae86828dbd/content?tenant=3xsfuichdoum", + "id": "5407524ebe0eb3ae86828dbd" + } + ], + "inStock": true, + "created": "2014-09-03T17:39:22.562+0000", + "price": 13.98, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "5407526a394edbc101ff2119", + "sku": "WhiteBowlswithRedCirclessetof41396975021144", + "name": { + "en": "White Bowls with Red Circles (set of 4)", + "de": "Schwarz Schüssel mit Herzen" + }, + "description": { + "en": "Our best selling set of four white bowls with red circles on them.", + "de": "Unser Verkaufs Satz von vier weißen Schalen mit roten Kreisen auf sie." + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/5407526a394edbc101ff2119/media/5407526dbe0eb3ae86828dc3/content?tenant=3xsfuichdoum", + "id": "5407526dbe0eb3ae86828dc3" + } + ], + "created": "2014-09-03T17:39:54.501+0000", + "price": 15, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "54075270394edbc101ff211b", + "sku": "PotsandPans1399395920078", + "name": { + "en": "Pots and Pans", + "de": "Geschirr" + }, + "description": { + "en": "YOU NEED THIS FOR COOKIN'", + "de": "Sie benötigen diese FÜR COOKIN" + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/54075270394edbc101ff211b/media/54075278be0eb3ae86828dc5/content?tenant=3xsfuichdoum", + "id": "54075278be0eb3ae86828dc5" + } + ], + "inStock": true, + "created": "2014-09-03T17:40:00.444+0000", + "price": 7, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "5407527a394edbc101ff211d", + "sku": "VinylLPdeluxe1399400219218", + "name": { + "en": "Vinyl LP deluxe", + "de": "Vinyl LP deluxe" + }, + "description": { + "en": "These make you look like you know the best music. Impress your friends and family with your diverse collection of tunes.", + "de": "Diese machen Sie aussehen, wie Sie die beste Musik kennen. Beeindrucken Sie Ihre Freunde und Familie mit Ihren vielfältigen Sammlung von Melodien." + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/5407527a394edbc101ff211d/media/5407527ebe0eb3ae86828dc7/content?tenant=3xsfuichdoum", + "id": "5407527ebe0eb3ae86828dc7" + } + ], + "inStock": true, + "created": "2014-09-03T17:40:10.789+0000", + "price": 90.09, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "5407528a394edbc101ff2121", + "sku": "cookingutenils1399400975226", + "name": { + "en": "Cooking utensils", + "de": "Kochutensilien" + }, + "description": { + "en": "These ones are great for flipping steaks, omellettes", + "de": "Diese hier sind für Flipping Steaks, Omeletts" + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/5407528a394edbc101ff2121/media/5407528ebe0eb3ae86828dcb/content?tenant=3xsfuichdoum", + "id": "5407528ebe0eb3ae86828dcb" + } + ], + "inStock": false, + "created": "2014-09-03T17:40:26.070+0000", + "price": 19.99, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "540752a4394edbc101ff2128", + "sku": "TalktomeCoffeeMugs1399405423217", + "name": { + "en": "Talk to me Coffee Mugs", + "de": "Sprechen Sie mich Kaffeetassen" + }, + "description": { + "en": "Flirtatious set of mugs for the urban lady who watches too much sex in the city", + "de": "Kokett Set Becher für die städtische Dame, die zu viel Sex in der Stadt Uhren" + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/540752a4394edbc101ff2128/media/540752a7be0eb3ae86828dd2/content?tenant=3xsfuichdoum", + "id": "540752a7be0eb3ae86828dd2" + } + ], + "inStock": true, + "created": "2014-09-03T17:40:52.110+0000", + "price": 16.98, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "540752ff394edbc101ff2144", + "sku": "Handpaintedbowwithhearts1399405413764", + "name": { + "en": "Hand-painted bow with hearts", + "de": "Handbemalte Bogen mit Herzen" + }, + "description": { + "en": "Super cute, my wife would probably dig this. Do you think they sell it at Ross?", + "de": "Super nett, meine Frau würde wahrscheinlich graben diese. Glaubst du, sie verkaufen sie zu Ross?" + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/540752ff394edbc101ff2144/media/54075303be0eb3ae86828dee/content?tenant=3xsfuichdoum", + "id": "54075303be0eb3ae86828dee" + } + ], + "inStock": true, + "created": "2014-09-03T17:42:23.206+0000", + "price": 7.95, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "540751d0394edbc101ff20ef", + "sku": "FrenchPress1399402118414", + "name": { + "en": "French Press", + "de": "Französisch Presse" + }, + "description": { + "en": "This will make the best coffee you ever had.", + "de": "Dies wird den besten Kaffee Sie jemals machen." + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/540751d0394edbc101ff20ef/media/54089d0bbe0eb3ae8682a12b/content?tenant=3xsfuichdoum", + "id": "54089d0bbe0eb3ae8682a12b" + } + ], + "inStock": true, + "created": "2014-09-04T17:01:11.467+0000", + "price": 0, + "customAttributes": [] + }, + { + "id": "540751e0394edbc101ff20f3", + "sku": "EspressoMachine1399405141207", + "name": { + "en": "Espresso Machine", + "de": "Espressomaschine" + }, + "description": { + "en": "Most famous way to make a cuppa", + "de": "Berühmteste Weg, um eine Tasse Tee zu machen" + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/540751e0394edbc101ff20f3/media/540751eabe0eb3ae86828d9d/content?tenant=3xsfuichdoum", + "id": "540751eabe0eb3ae86828d9d" + } + ], + "inStock": false, + "created": "2014-09-03T17:37:36.709+0000", + "price": 599.95, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "540751f8394edbc101ff20f7", + "sku": "RingHeartBowl1396976297636", + "name": { + "en": "Ring Heart Bowl", + "de": "Ring Herz Bowl" + }, + "description": { + "en": "Ring not included", + "de": "Ring nicht im Lieferumfang enthalten" + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/540751f8394edbc101ff20f7/media/540751fbbe0eb3ae86828da1/content?tenant=3xsfuichdoum", + "id": "540751fbbe0eb3ae86828da1" + } + ], + "inStock": true, + "created": "2014-09-03T17:38:00.809+0000", + "price": 2, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "540751fd394edbc101ff20f9", + "sku": "LittlePlateBowl1396976734843", + "name": { + "en": "Little Plate Bowl", + "de": "Kleine Teller Schüssel" + }, + "description": { + "en": "Tiny white plate.", + "de": "Kleine weiße Platte." + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/540751fd394edbc101ff20f9/media/54075200be0eb3ae86828da3/content?tenant=3xsfuichdoum", + "id": "54075200be0eb3ae86828da3" + } + ], + "inStock": true, + "created": "2014-09-03T17:38:05.858+0000", + "price": 3, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "54075203394edbc101ff20fb", + "sku": "BlackRingHolder1396977261772", + "name": { + "en": "Black Ring Holder", + "de": "Schwarz-Ring-Halter" + }, + "description": { + "en": "Black ring holder with hearts", + "de": "Schwarz Ringhalter mit Herzen" + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/54075203394edbc101ff20fb/media/54075207be0eb3ae86828da5/content?tenant=3xsfuichdoum", + "id": "54075207be0eb3ae86828da5" + } + ], + "inStock": true, + "created": "2014-09-03T17:38:11.638+0000", + "price": 6, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "5407520b394edbc101ff20fd", + "sku": "WhiteRingHolder1396977287703", + "name": { + "en": "White Ring Holder", + "de": "Weißer Ring Halter" + }, + "description": { + "en": "White ring holder bowl with blue hearts.", + "de": "Weiß Ringhalter Schüssel mit blauen Herzen." + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/5407520b394edbc101ff20fd/media/5407520fbe0eb3ae86828da7/content?tenant=3xsfuichdoum", + "id": "5407520fbe0eb3ae86828da7" + } + ], + "inStock": true, + "created": "2014-09-03T17:38:19.273+0000", + "price": 6, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "54075218394edbc101ff2101", + "sku": "Birdhouse1399405396665", + "name": { + "en": "Birdhouse", + "de": "Vogelhaus" + }, + "description": { + "en": "Awesome if your pet bird likes harlem", + "de": "Genial, wenn Ihr Haustier Vogel mag Harlem" + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/54075218394edbc101ff2101/media/5407521bbe0eb3ae86828dab/content?tenant=3xsfuichdoum", + "id": "5407521bbe0eb3ae86828dab" + } + ], + "inStock": true, + "created": "2014-09-03T17:38:32.238+0000", + "price": 27.5, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "5407521d394edbc101ff2103", + "sku": "Raindropsoapholder1399405432328", + "name": { + "en": "Raindrop soap holder", + "de": "Regentropfen Seifenhalter" + }, + "description": { + "en": "Raindrop soap holder", + "de": "Regentropfen Seifenhalter" + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/5407521d394edbc101ff2103/media/54075220be0eb3ae86828dad/content?tenant=3xsfuichdoum", + "id": "54075220be0eb3ae86828dad" + } + ], + "inStock": true, + "created": "2014-09-03T17:38:37.362+0000", + "price": 6.98, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "54075251394edbc101ff2115", + "sku": "WoodboundChemexCoffeeMaker1398100549696", + "name": { + "en": "Wood-bound Chemex Coffee Maker", + "de": "Holz-gebundenen Chemex Kaffeemaschine" + }, + "description": { + "en": "Awesome brew. Totally bright and delicious", + "de": "Genial brauen. Ganz hell und lecker" + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/54075251394edbc101ff2115/media/5407525dbe0eb3ae86828dbf/content?tenant=3xsfuichdoum", + "id": "5407525dbe0eb3ae86828dbf" + } + ], + "inStock": false, + "created": "2014-09-03T17:39:29.692+0000", + "price": 18.95, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "54075260394edbc101ff2117", + "sku": "BlackBowlwithHearts1396974669725", + "name": { + "en": "Black Bowl with Hearts", + "de": "Schwarz Schüssel mit Herzen" + }, + "description": { + "en": "Express your love of cereal with this amazing bowl.", + "de": "Drücken Sie Ihre Liebe von Getreide mit diesem erstaunlichen Schüssel." + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/54075260394edbc101ff2117/media/54075267be0eb3ae86828dc1/content?tenant=3xsfuichdoum", + "id": "54075267be0eb3ae86828dc1" + } + ], + "inStock": true, + "created": "2014-09-03T17:39:44.879+0000", + "price": 5, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "54075281394edbc101ff211f", + "sku": "Beautifulchina1399400709439", + "name": { + "en": "Beautiful china", + "de": "Schöne China" + }, + "description": { + "en": "These make you look like you know how to set the table.", + "de": "Diese machen Sie aussehen, wie Sie wissen, wie man den Tisch." + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/54075281394edbc101ff211f/media/54075287be0eb3ae86828dc9/content?tenant=3xsfuichdoum", + "id": "54075287be0eb3ae86828dc9" + } + ], + "inStock": true, + "created": "2014-09-03T17:40:17.166+0000", + "price": 190, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "54075291394edbc101ff2123", + "sku": "Coffee1399402203294", + "name": { + "en": "Coffee", + "de": "Kaffee" + }, + "description": { + "en": "What more could you want or need.", + "de": "Was kann man mehr wollen oder brauchen." + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/54075291394edbc101ff2123/media/54075298be0eb3ae86828dce/content?tenant=3xsfuichdoum", + "id": "54075298be0eb3ae86828dce" + } + ], + "inStock": true, + "created": "2014-09-03T17:40:33.363+0000", + "price": 2.57, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "540752b1394edbc101ff212c", + "sku": "Mugandbreakfastbowl1399405379592", + "name": { + "en": "Mug and breakfast bowl", + "de": "Becher und Frühstück Schüssel" + }, + "description": { + "en": "Great swag for a single lady. grapes not included", + "de": "Große Beute für eine einzelne Dame. Trauben nicht im Lieferumfang enthalten" + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/540752b1394edbc101ff212c/media/540752b4be0eb3ae86828dd6/content?tenant=3xsfuichdoum", + "id": "540752b4be0eb3ae86828dd6" + } + ], + "inStock": true, + "created": "2014-09-03T17:41:05.445+0000", + "price": 8.95, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "540752c5394edbc101ff2132", + "sku": "LargeSetOfHeartCoffeeMugs1399405542698", + "name": { + "en": "Large Set Of Heart Coffee Mugs", + "de": "Große Reihe von Herz-Kaffeetasse" + }, + "description": { + "en": "This is the best deal", + "de": "Dies ist das beste Angebot" + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/540752c5394edbc101ff2132/media/540752c9be0eb3ae86828ddc/content?tenant=3xsfuichdoum", + "id": "540752c9be0eb3ae86828ddc" + } + ], + "inStock": true, + "created": "2014-09-03T17:41:25.832+0000", + "price": 19.99, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "540752da394edbc101ff2138", + "sku": "LargesetofEspressoCoffeeMugs1399405575815", + "name": { + "en": "Large set of Espresso & Coffee Mugs", + "de": "Großen Satz von Espresso & Kaffeetassen" + }, + "description": { + "en": "Large Variable set of espresso mugs", + "de": "Große Variable Set Espresso-Tassen" + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/540752da394edbc101ff2138/media/540752ddbe0eb3ae86828de2/content?tenant=3xsfuichdoum", + "id": "540752ddbe0eb3ae86828de2" + } + ], + "inStock": true, + "created": "2014-09-03T17:41:46.511+0000", + "price": 199.99, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "540752e6394edbc101ff213c", + "sku": "Setofraindropsoapdishes1399405600154", + "name": { + "en": "Set of raindrop soap dishes", + "de": "Set von Regentropfen Seifenschalen" + }, + "description": { + "en": "Set of raindrop soap dishes", + "de": "Set von Regentropfen Seifenschalen" + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/540752e6394edbc101ff213c/media/540752e9be0eb3ae86828de6/content?tenant=3xsfuichdoum", + "id": "540752e9be0eb3ae86828de6" + } + ], + "inStock": true, + "created": "2014-09-03T17:41:58.797+0000", + "price": 27.99, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "540752ec394edbc101ff213e", + "sku": "RedandWhiteCreamerset1399405606933", + "name": { + "en": "Red and White Creamer set", + "de": "Rot und Weiß Milchkännchen-Set" + }, + "description": { + "en": "Red and White Creamer set", + "de": "Rot und Weiß Milchkännchen-Set" + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/540752ec394edbc101ff213e/media/540752f1be0eb3ae86828de8/content?tenant=3xsfuichdoum", + "id": "540752f1be0eb3ae86828de8" + } + ], + "inStock": true, + "created": "2014-09-03T17:42:04.318+0000", + "price": 16.98, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "540752f4394edbc101ff2140", + "sku": "YellowandWhiteCreamerset1399405621623", + "name": { + "en": "Yellow and White Creamer set", + "de": "Gelbe und weiße Milchkännchen-Set" + }, + "description": { + "en": "Red and White Creamer set", + "de": "Gelbe und weiße Milchkännchen-Set" + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/540752f4394edbc101ff2140/media/540752f7be0eb3ae86828dea/content?tenant=3xsfuichdoum", + "id": "540752f7be0eb3ae86828dea" + } + ], + "inStock": true, + "created": "2014-09-03T17:42:12.551+0000", + "price": 16.98, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "540752fa394edbc101ff2142", + "sku": "Redraindropsoapdish1399405629100", + "name": { + "en": "Red raindrop soap dish", + "de": "Roter Regentropfen Seifenschale" + }, + "description": { + "en": "Red raindrop soap dish", + "de": "Roter Regentropfen Seifenschale" + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/540752fa394edbc101ff2142/media/540752fcbe0eb3ae86828dec/content?tenant=3xsfuichdoum", + "id": "540752fcbe0eb3ae86828dec" + } + ], + "inStock": true, + "created": "2014-09-03T17:42:18.010+0000", + "price": 1.98, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "540752b7394edbc101ff212e", + "sku": "Yellowraindropsoapdish1399405491841", + "name": { + "en": "Yellow raindrop soap dish", + "de": "Gelber Regentropfen Seifenschale" + }, + "description": { + "en": "Yellow raindrop soap dish", + "de": "Gelber Regentropfen Seifenschale" + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/540752b7394edbc101ff212e/media/540752bcbe0eb3ae86828dd8/content?tenant=3xsfuichdoum", + "id": "540752bcbe0eb3ae86828dd8" + } + ], + "inStock": true, + "created": "2014-09-03T17:41:11.682+0000", + "price": 3.95, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + }, + { + "id": "54075306394edbc101ff2146", + "sku": "Test1396454831925", + "name": { + "en": "Bicycle!", + "de": "Fahrrad" + }, + "description": { + "en": "A bicycle, often called a bike, is a human-powered, pedal-driven, single-track vehicle, having two wheels attached to a frame, one behind the other. A bicycle rider is called a cyclist, or bicyclist.", + "de": "Ein Fahrrad, ein Fahrrad oft genannt wird, ist ein muskelbetriebenes, pedalbetriebene, eingleisige Fahrzeug mit zwei Rädern zu einem Rahmen, einer hinter dem anderen verbunden ist. Ein Fahrradfahrer wird als Radfahrer oder Radfahrer." + }, + "published": true, + "externalImages": [], + "images": [ + { + "url": "http://product-v1-4-1.test.cf.hybris.com/products/54075306394edbc101ff2146/media/5407530ebe0eb3ae86828df0/content?tenant=3xsfuichdoum", + "id": "5407530ebe0eb3ae86828df0" + } + ], + "inStock": true, + "created": "2014-09-03T17:42:30.973+0000", + "price": 9.5, + "itemCondition": "NEW", + "adult": false, + "customAttributes": [] + } +] \ No newline at end of file diff --git a/public/Staticfile b/public/Staticfile new file mode 100644 index 000000000..e69de29bb diff --git a/public/css/fonts/glyphicons-halflings-regular.eot b/public/css/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..4a4ca865d67e86f961bc6e2ef00bffa4e34bb9ed GIT binary patch literal 20335 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

!oRptb@n+ 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 literal 0 HcmV?d00001 diff --git a/public/css/fonts/glyphicons-halflings-regular.svg b/public/css/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 000000000..e3e2dc739 --- /dev/null +++ b/public/css/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/css/fonts/glyphicons-halflings-regular.ttf b/public/css/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..67fa00bf83801d2fa568546b982c80d27f6ef74e GIT binary patch literal 41280 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

PBK;&Wcg|NX{>QR@W3{K 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 literal 0 HcmV?d00001 diff --git a/public/css/fonts/glyphicons-halflings-regular.woff b/public/css/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..8c54182aa5d4d1ab3c9171976b615c1dcb1dc187 GIT binary patch literal 23320 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 literal 0 HcmV?d00001 diff --git a/public/css/fonts/hyicon.eot b/public/css/fonts/hyicon.eot new file mode 100644 index 0000000000000000000000000000000000000000..fe8042c04bf394b6154cc0e8064fb2fa8c9ac572 GIT binary patch literal 7512 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 + + +Copyright (C) 2014 by original authors @ fontello.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/css/fonts/hyicon.ttf b/public/css/fonts/hyicon.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0d01328c2fafde15f668654e2828d4bdee50b1eb GIT binary patch literal 7352 zcmeHMYj7Lab-risE(*}5v0K}9XF9E?Rufm5I*+N-B#q=% zzqIl20` zyK4T3F&f0@!1U>?YWwHwHpVIqtZ$!Pom*aap1A|_zhTVr#9VT175oa!pT}4-bQmeoI z%x_(Xs|m;-XT-12<4j>i(u2~UfO9TC(!a0{lCXm*9NgPHW3xjuEPRDs@$&KOi|hnH z#-4Jgop-TND%>JP5HICzTNq5R8rB{TZYy8_5RgOjOacmg7O*&@GI3ta1r#-` z##8H7Dg%nk>#_U*00INMViS<;BbTJ-Z7KyQ%&QKE1;vy6^Uuk!UZT9Az+2@f&f;1{ zc)5wgRSO3#tO_3%5xcaAgy#&k$8c1f@!|SPPlfCbkiTyOd%$n2^13~}0+lxM^Q+e$ ze^#ImIE1-892Vg8aNaffUDz*C%&Qg}IHkflT$Nr%4cRWDs&)k$JE+e=Ude8jd;r+% zKd{qBZ=2sC_uHG;O~NTVs}5J%Z4wJBGF;t<#iWZW0%Y%^W(W20Ng{K{J5*(U@(xYX zhO#X&Z?Q=oWOq=rWTzi|U|u#ae;~bV?s%Kr=67H;pR=1bWe%Hm8=8q_vjR5VUCrcm zko^yd=%aVcPpIl0x{v5nq3d7&0VX%&d<6Z;b`jkIapuFcnWba&JbiVdmwtH2JVuu$ z3i8O2cEl;<6@onc6JfQRjze_b9Gak$`JKNretZ4!M}$;FpN^R^b81|A#B>~_ubIQb zKt86M^t-JPKBONVGLO<9Pf&vXW6X@3Qh>JJ%6pLvc9ds13x->Z>OLv`CTpK^1Ix$)BKR8H{M&Uh*IC8ADNF+ zwUmnyx-o%jS(fdxz0y^I!h_<1()Y}uR88*{)a7pm#(#_&%45?L?zBM%gST<8B!x?H zrpU5#m??^Ugvp9Lgcj#?6d{XbNN|@OIaKZMA%73t@9}&1&# zqeK)QBD>Ag*X!}RL!^~am8Y|}ue;fAtFEWc-tMO6cFo`1=;pt_{j+b(*FDu<+Fe~8 zE&Xyy^R}k0u0vgD6ETTEbT*Osg(@kjNpnApQ|5?!)W4%nbu@hT{YnpY-PPUQ>~uPd zo4dOYcS}PF>V_v)?kyvijxh(@7Ouuzl#|RAwoky8^tdGSe0M3i8x?nuB>Ne9$o$8w z`I`CKl6jdP;>XM<`47yq-~Kk8`yLVndr&J^Q7gqv4c93oj*>XQmu1{0M8!0iPedDH z_q#L!F>(+c%iMj!+)Zzupf{;Q5ckqwntL{UT;x|QowkcMQLjqA0MVKp#J_A#nv)as zjP;^tCd^5C=E<9<;F*&`m&mnzye?M9Lg7F;?ifxHSA|6TWYPU4x<|BIQE5&-=&r2s zR@S-e8X6T>pm8ttgs8cU?Dgcu8Bt#&rhBOm(=w7i3UW%=Xt`+upMe7iq; z@!Ta@zI5(O;{96B7Z05OrYwK+Jl<`s=D+QJSHASvxl5d1I``Nmn9E~Via6b@Gu&n) z3GktY<94jjgmnu6#$tJpSVehRX^EA#$TBy%i^>Dk)q~{mR%_K=0JN)5>)A`vuRij- z=O*dlhu?T+$Lq9HdgL2LkDN%oX$I-NH}9-(-modoYm|+Khwdar`kYO&DN+QftH6VK z)CBH8x)+w&gzyB%s3^7xX0sLB;K^X*j@><7JJs#AZWkM+QQ?V=351$@`*0s^AXE+5 zY#uMrLPmqG@_6g1oXV&DDlUp{Oy%R#g1K08~4sdKL6)7`T6Wq zuW@RqU9ao)Rw?9rANul`{TaV1U1go@aQJ{1_a3zubB2@9)Vf-9trkLyiQqtSfg|M> z8JBR5@;us&BrCJ{wL+2ZM&c_K1@kUMpUa zo6mjkK+k0Pz<;u0enphhJ8SodOBZAPb#%f-ehpm&-$g`?Sr7IUeuszr^-uUUq2;Eh zMriu~{#X_V*)OxVsEAaG&1@cji^1|2NW3iHtJ z0&N5T?gH&($5GyS{l%<_a?$ka+04S+d{*5RZBaYhJG#}WvuYZwg_Y!znmm=APiNND zusWMw$)=W;(xK_}^8DF_>GaBYYVOohGLxU=-^Wv#wT1MG+7W8cGe%M?sZ27Pnh{#p zPS15_v$N`KCcUf<7xbyCne<|6IvbkLW>@#LwQaS-qAbl;*;$rh3v78%VaL3+vW9sWpIOXSz)eA733P}}2v#=rP z6*i95IqY46hRjVXTcwUeD#O;WOYBkMO9&oql^B7n4GW#%X5o?W zDr0$}vSCZx4gXZcFV+^JXByHWSP;8b*&f!0e?Kc8WY0!zIz=Mh=BYs?Ov&reyR62cs;V25+)dkdSCbgEW%Bv}` zvkxp}!51lkYYTrdDZeEN=TLIS*d?aUA=PLXM7xl9eJrNVs_W}Xh>XP&;HZ|6pn3(> zoA4##@wm@mfp}aq*jOwTj|UA&SD{C4Ou_{vIuOyU z$ZSfyreVk^jwaOgglZJS-=I;fA3Pe%*=aD|V3ek`GeM(7KX@c|a3at2`N4Nv{8Bx~ zN}|VNxssA7%ts7oAa1azAvH#F4)Jp0WsnCT@W!!Nj(`k~BC-x#Vb;;=*RXAa_T|^b z7OBx%jU$W^I6smAem5Y?G3M3~demThFW?)z1$P;IQHGAjm{Fod)CBatR9Z^7IU|wv zM6Of`7|Q|QP6S^L!LmTmsL*pHMwgzG#8|24xES4fP8MSoP!(gfp0kP3qvz~m^y;}H zF>cdy4l&l~Mp58@X}cD-Yp}-$+hW`f+hVMPZ86rvwitK7wis2|7NZ}w#kdo;#i+ry z7#nnTz{;OS9U+${)F=Q=hyzGsG#Xm{L8D1G8UscnGOrm)HiF#PNIfmtuc_zaAo*sHGc+^hBHTB#ad z>4*UyY)B=LK*|1~5!6H8fuIq(%_>fQ8WL>)k9iu^kUAo23_?pDnRm1}MHYG(9Gn&Dp$r%){6ixa-C*r6Ch$Ued?NA#| z_WLyG8HV>5EL~8MR|N}b2$%qqfT7?_6|oolk`QUMwBwED=hOW08yazXogy9;Hk779 zJlX)l?6TNK5h_Gghc)09KoSIvZYz9vCKb?OM`Iy%0Bu_MRbWEd7Wf)5+m9tA+R(I? zM?Bxrv;wN|DQNT*EJinAO^7=IQEVXJt7~dVgg=b_G!PHvny3ny-M7gG_&3=7n`}#Z zW9v;ayLF>Iu(5KJ(mlG-5m?8Oi?dxv^50?@V26w**uTRtwjn~Aj%;{TjEBmcK#5$K3o9nkuH{w)XRj~6_-Q-r($-Chx;U*IboDR{dX*ggbS zov)Y+_-jFRl{;kUD3I{a;C~K%fU4X^5Hb=!b3V(Ea85yU|uBZxynMi7UE%x(~O2^m4$Eo1~SCS(M0 zM9AC$VqC}wVnWCW;;4`j#4#bW7sPQPBZzy1j38n{Mi6l!vj@ZpAtQ);g^VD6LC6T= zq;7O>!hD~Y7`cR7Z}2QN4!duz@{gSiHJ^hnGIKN`!~_#pBOGyJ|FrufYO&ntBO OR}A?}IYs=}&wm3RS71>9 literal 0 HcmV?d00001 diff --git a/public/css/fonts/hyicon.woff b/public/css/fonts/hyicon.woff new file mode 100644 index 0000000000000000000000000000000000000000..e9b46e5c4a19a40561860da45a8d5abf31cd6414 GIT binary patch literal 4488 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 ZD+IW*AWbX6Xa(V))I(Amh_7B#{sST1`>p^0 literal 0 HcmV?d00001 diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ac20476a5ac15967fb5349e36533a18ee16b7566 GIT binary patch literal 1150 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�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

ADrea5J5B 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 literal 0 HcmV?d00001 diff --git a/public/img/btn_backToTop.png b/public/img/btn_backToTop.png new file mode 100644 index 0000000000000000000000000000000000000000..ce1cdb79338b938c43f73a9908f22baca517008b GIT binary patch literal 1917 zcmbVNX;2eq7>4-&#Zd7YYG=;(sF=`P-5=sE^XdX4}xO9lk;zCdW05c#a2r)pIOM@UDD~JaL0z(g#w5C%g z@FFFlL$*jsKvfZhmIs0cgMn^f(s5lP2ywYwkO6}*Od~aDdXt7gj5LkjYnVZT>J>Un zOJKMLurMO=cq$>FlAeADL9La^J`!v6Ly00&1{x792+|m_i-IIea7C&b)ezwl0hRnhS7J&Y6XFEH zOjybk!Hhr-1aV+k$O#G+2SFTC4iye_dNxEgq$U>^1f2N($ms$j6Vv_O*l-iBI4n5X@pw zhw#e(lQ@uc2()y_e>!IPiflv6@nip!!p8|hHRRan$oY6wHt8KXc4grbVYKn)wMDaM zFPQJrwu~+IaU<}QeE}Ybd1OM?5!GdDw~^lptGa|)enrBp*Q3}fmsWi%;Aid!uG*!Q zNh6xQ({~i@jQV|$WsQnUDv~dzAZ}AWxwyrt(r4LJDv?v+D6=d>s;it%i)^US2He@ z`uJu{*)#6dB=0L@<$`Svk=aVO-ZpT4>n+|MSh?JEcCGITC!f+AV*)leR;I5>?^(M! zCvWOe%2`K#;g1K*hwr}|ScTiXvR`Gh?B{WRJgK@gs{S! z%xhMe z!I`4UUp#Hn^Z2{tj%v1V_cNs&OE^*!?B0;$@|Wv0|3pocq~nO0hLifOPI^NlUR4;W8;dL9bHebJn#OXO~)F~k6R~Mo!b@AA|8kcn{v$OOm}U;OI1&= ztU;NY)cN{Q!C-Tdn}{XYHF$E3;bu)m)8hhP(Z(#*)fe*I`sL<~i1M56S8dq6O%tuo z+cfqp^EuOLyL)2o@xE1kZI6n*=w9aMci=0|4p)TJ_rAF<&r9~4vdXFbw4>({6Vv$~ ze_*rks-Ub7B8{Omfv zKflGJc1+*mY2Dj$95GibjP7wdKS5^7YmS{h)wy-`{81B@A`1&A+ioa1G@v?KQc+Sl z`;^Mg8@sq+U26S;9DVMe0n;W?E_ScbY=O^7+cF+}v*pC(Lj^VE6Z*%h?8B<|@nd!r z)jjTyqepG3x-@gt{v9oXyQNE3Ud<@$xWIq96)-(pdbd($ojGTa@l*cAS+x>Tb7rKw zM@XHjyT5OAXWjm7P1e~xd$S`-z*`30Z{FM3afww9nNG{qGZ!`2`Hv6vI(qvN=bP+i zb^e~k9f#K>Qt$p=SF^6Xy|4CEXT5*$c=5YRVdrxf^Z4ARh4+`dc(ufzSz7$kt#rj| gYI`9*nDf?IP6^rRc#Kue^s)R9!=(|D3XweXA8t|i?*IS* literal 0 HcmV?d00001 diff --git a/public/img/creditcard.png b/public/img/creditcard.png new file mode 100644 index 0000000000000000000000000000000000000000..ba3b7538c406d7105ebd5e43723547985d441c54 GIT binary patch literal 14305 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 literal 0 HcmV?d00001 diff --git a/public/img/cvv.png b/public/img/cvv.png new file mode 100644 index 0000000000000000000000000000000000000000..f4fd623eea19ae0600e8210dc9e04808a21faff6 GIT binary patch literal 2535 zcmaJ@c|4SB8y=*5M8p(Q#t>O%!wfT78e2vOsdyRifK5mYV!A^Njv0F1<>1_G`C)ju+{12BU? zB(xarWIox+kw9lNk<>LGq=3l*(GZB4rGP`FhX8yS4G3hg%;9r&jc^#l-yH6VbwWFF ztbrhgeH0gPi*k0SM}^Sw{%}hRn3;e85-;!9E`^G z4LK52o_Isoxuj+ z(YXu`pTTCq))=WYb{O9r4l4b61SaP@EsOUpO<=-M0xAcEL88}=wC?ES^#5I%%ZYp*RFB7JnV<|2G!%kJzYQ|fgS*gtE_?~My?zPCQW0{fi{HuiJT zUK#|l(Tik5bQg@wP$-T{p30xY$+en7=!GL&#T_^Z)l>(xar`x+uf0;M&4G#r<&S>q z!9Tl?T(BEIkRLQ+d~IOxSM779Cm53Vui5E}yY^>q3lee{62x@x#Cp{_PVSvfpAkQI zeTPR5DtD%*tAHKYXg*mu*R`ttWPTo9eEZHFsaMm}6E9u_n8hr~TU%QztE;zLC6<)v zh>MHMtEr_950jPC?9SHIEM6;ofS1PMa7mOJR!3)2PL8scmKKaa__utNKww~h%V3+# z$K~aPXSXDbakz6;RnUAKbF8?3`n{3N;Lycd6~_dMS8ysa>I1x{XTq_BLP-SBT}C zum`jA67%v@A2-DAsI9G~2^`GG6pB7?i9vIc#8Q)K-jfafxcp-$Q@vD++XqW2y2=+% z58S&4Yj16(a{c=KwgguOKhSg0|GlWlmb^)}cO&+k&S}Ely$Vohk*=W(TvPK{ym0E- zr%#`-wgF;H$*N4#C!zdG)#8Lowcnr-($dn#wgrlr+VR>s>sOM>yn`~j@XEoPqYu*` zJn@lIe|3D7F4Gpa_2bQ(edFVsvNV+9kpD^aYV;44DK5;}*IB>q!eh2A#V;A|u;CXe zV_H-Hj;KiS0|?DzGio{4WNs7H+!Fsol*i-Peptlpd%GYon%=h!9)kp6#j~c)dpQ^O*nisb#J!wv-oJ=!3)6y^ECU!$cpSosQaBrfpp*eL?>B z$;{~YuMVLt^{^&l{|b5CqHAEF6t{sWr|r=}+V!TpMfa57hR@jA51-J>hGG!EbmpGGgOV zd-bZT$YfcM)v(+c_-176VZ6kqL~^=lMbZ6~{_uRTW7?%lms&!iqwA#Zs1?iro@L$& z=IPcsmiLnsb)5I9?a*rxxvwS#Khd&vf>_m*4`w)Adli4OY@|Z-lpX4YjPF(G#4EZ zCKmOTdsW&c+Xc>6A4*oDEhDFKTl{3>+}so=I|(Psa+9*cUaA&vDlB%<4Bl-XI(4J0 z40%vkc5Bx_;#;@i3m?(j27ti8>7_qNiru~j9y$68K0a3T8h&w2&Gzjm-)!&`oRN`n z<)W}BTPQqwp4C=lgmd&2wYr9QYm1&5fns8NCPL2i+ oqO>+Cb5CkajL_}Z@*$=2DX%*rp}zi@mfuK)l5 literal 0 HcmV?d00001 diff --git a/public/img/fb_signInLogo.png b/public/img/fb_signInLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..1215933692a05a8a9337747a1674217ddd535ecb GIT binary patch literal 1288 zcmbVMeP|nH7{5(n+A^v*7?aW7ZiCKsm;1=q-O(&G$z_QwwWiU93GFU-Z<3?EkKJ9D zG-7Kbf?7rq1UnQVjDef3cCLO5aejeqQIOdght^FPQz6!lIjz*S@lBgl|0w&zgS+>A z-uL%=zMp%(qkaG8x(DkJ1lb%81)^}>1K*Z=Hp1`F(y>!;*=F%^t5Zu_8NmQZo1`TG z8dii9hyp?CKQawk5#+8OITp9#kprBlDK?>kv1Jt)wmfP$o!*ph=u$Ij5Z?X|(!a(3&A7 zxo99*wFM;)mbNUNBZy2UW6RiWnvo(XmSqW&CTJRm2;A&fEg_4m=FXai05C;E)-736 z(TYYPq4ilF40^g6f}%$vYl>B~nkbkuA}iH{HmxZ5*Nt`2W~^TaL=>1> zpCQ6}BzM-xFn4!0Q~^S7xJL{b7Dea{XkwoNR4W|tVDQE!$r5L$7&mRFdApA$T?|Dr zG~LFygMK%~Ksne})3F|xC+#Fn1xYu}(iFuzd~TlgF?J`M3D@@U37xP9gd_EPdG>cCux#(3J$^TVi~N;m;O)U25%_)OzjA^ zVP(74|4>+)AfUprG2nb0xvjYnWP?2%Xp3dPOGu$trb+#28JRnJ@ukL4Y18F}6UC83 z-o%+yAz4m7AHsF`19FAFWfZH`mQIJUu!IWfBNCQ z2du*hY5VB=UzuMQX4RWdX}g*?rpk-Iza@Ne{BLbvd1;~i`EbLn@vi6U@4r6z+lT3^ z14Cm&BinCu4=xuvf2`Nf9-kV{Pf$B%@lQY7@aFj)zs@vt4c=ZJe!N%;-8*Ny5q!XL zaLY6Gr@tB7HJ#h@a&F}6;I?t!!rZq_-huK-Vb-hzINq$awr&n%uTRQ^q2zCAGJJDmRq5)#qC literal 0 HcmV?d00001 diff --git a/public/img/flags/de.jpg b/public/img/flags/de.jpg new file mode 100644 index 0000000000000000000000000000000000000000..595f604f4bbb13bc33fbea9766d99065674ef5ea GIT binary patch literal 985 zcmex=U zunI}gNkudQ4=SZn7D+b zl&YG#hNhN@shPQjrIoXbtDC!rr&n-DXjpheWK?oWYFc_mW>#@YX<2ziWmR)aYg>Cq zXV;|3Q>IRvK4a#rMT?g#UABD1%2k^-Z`rzS`;MKv4jn#n^w{weCr@3veC6u3>o;!R zdidz^lc&#~zj*oTM-f49#DHKz}i@urRZ*gZ#zFR1U<< zf-J0xhHOHPf$WKe!b(Ps93oB=7j8VrscandK{To8BA1wo$wSqTAg_UaMx4i*$nqK7 zV+eoUV&GwB1V$dSAcH-_pZ^Stx-{_PeJzXjW&ch3&#*kc{}1!G_dlBJzsmk+nDU?D z_rlM2MZc(u)US#E^7`X{h6eeMZ2uWvS^sCy{Lk>+`S~vG7hW3w86x(-y#Dw<1B3k| z-v10&%KrubXL#3sz9js@l)!%*>o2cA{*R&li1dGk74QEn|Icujf8LAr3pEzQY-IS) z&|&_cA@KfB|NjiTHx#{Ucg`TrL0|1|$ULy2AWBA{FQzjptd zTW9})`Jcl5zwY%zP{IAuY`UmWP9QXg~`_FKy{_h2iMO{A^e|vx@ X44A)2b!n`Bw)y83pjrlU@&B6u9$$23 literal 0 HcmV?d00001 diff --git a/public/img/flags/en.jpg b/public/img/flags/en.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca254cbdca3dcf9b14d096cb0f854527200919a5 GIT binary patch literal 3572 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 literal 0 HcmV?d00001 diff --git a/public/img/g+_signInLogo.png b/public/img/g+_signInLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..aa6ddc47105cc695fd9d44b241d9923264032083 GIT binary patch literal 1783 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 NE!W&TpP$qBzW^vMvQYp4 literal 0 HcmV?d00001 diff --git a/public/img/homePg-banner4.jpg b/public/img/homePg-banner4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2f2b04b709076c586d12100b35ded4826ed195b6 GIT binary patch literal 45010 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%0DaZ0CQr!^DmyrvhG~h3=Eq+At47Tq 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 literal 0 HcmV?d00001 diff --git a/public/img/homepg_freegift.png b/public/img/homepg_freegift.png new file mode 100644 index 0000000000000000000000000000000000000000..319373e5691adccca205badbf8332c0e55c295e6 GIT binary patch literal 17363 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 Fe*iDop{@V` literal 0 HcmV?d00001 diff --git a/public/img/language_select_active.png b/public/img/language_select_active.png new file mode 100644 index 0000000000000000000000000000000000000000..85a5ac6c5519f6f4aca3e241eefb274c7d7f50c7 GIT binary patch literal 2138 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 literal 0 HcmV?d00001 diff --git a/public/img/logo.png b/public/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..4e5f46170ff54777a45380fa2f678485ec230d8c GIT binary patch literal 2397 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 literal 0 HcmV?d00001 diff --git a/public/img/paypal.png b/public/img/paypal.png new file mode 100644 index 0000000000000000000000000000000000000000..2e8f955d7d4bc95f5ba0e7e0d445a56106aaaf0f GIT binary patch literal 4141 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 literal 0 HcmV?d00001 diff --git a/public/img/shopping_bag.png b/public/img/shopping_bag.png new file mode 100644 index 0000000000000000000000000000000000000000..55fe085f3328fb092aad0c408333c41db98c2493 GIT binary patch literal 1433 zcmaJ>eN5D57%xEuK@iO1hBKyC<8-dqkK^vz;sM8fD3fD+CEmb*z4pBi;o4iTcn8@8 zFUAdFi~GPaGY85RnGVNbghi7vwn4&Xh8dd0iNnlf#)U)%3vNv3-UE*L2eC=}_IdjJ zp6B;`wV@z?XHvqt1O!2na(7vZ;Q2JXH^;Al&(L2c93E+^)u9&4E;Yz205OTO6QH?1 z-VKTXFV?&?40a$$Y}i}kP#yL>PLO>XK4PN@`TP)#AUm=`eqN{qD(VDouVlpTUhKzE zuV}>f=+wF^vrNBa=V9AIO?_a^dSTpotkw2dEN4~#ugXe^ELTM*pui)ma=;_|QL}ljSO#DVc=3_y%}*)R zz)bv6LYyc%85bb6I3)@sPEiI1XSBS4^IC&QF)lp`TmnWwibP~^9vP&l3QlL_b#X1A zu(()2g4?9PwOM^~una+BI&&?ilF-j%&Booarj#SZ&XlHx!5hAHrgu8x<35{gPpu1s z?8)}-q|&YbrX*%07It-we!Zo+^K`hh!%~-hp?+<{&5IKv>`KJt!HBFQ-(XQ9KXN(=*UN@*Oz_Mw&E;h{2Q%%{a3?} zuXT=Iu&%t7H`{lo2LITR+7y1$f2-xai5uHnKAawMnm^BEhbIa%(4?x~8x@iAG$m#yt;d@%mO$}QBui?-IDrVY2#6Y{Bt#q}|WzA;N*oA^{!{ L&9|J-*%$r~W6K5r literal 0 HcmV?d00001 diff --git a/public/img/user-icon_big.png b/public/img/user-icon_big.png new file mode 100644 index 0000000000000000000000000000000000000000..47907b1cdf788da7c09ddd8e65c6d89dc7a2eaf1 GIT binary patch literal 5581 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 literal 0 HcmV?d00001 diff --git a/public/img/user_placeholder.jpg b/public/img/user_placeholder.jpg new file mode 100644 index 0000000000000000000000000000000000000000..35add9cece7b16fe02ef6910aeef81e8dd2f83db GIT binary patch literal 56312 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

`nV@QgLcl_BMccG0!`WGc+OfE5! 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

$5HP< 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 + + + + + + Store Template + + + + + + + + + + + + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/public/js/app/account/account-index.js b/public/js/app/account/account-index.js new file mode 100644 index 000000000..a9fa975ea --- /dev/null +++ b/public/js/app/account/account-index.js @@ -0,0 +1,17 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.account', [ + 'ds.auth' +]); \ No newline at end of file diff --git a/public/js/app/account/controllers/account-ctrl.js b/public/js/app/account/controllers/account-ctrl.js new file mode 100644 index 000000000..0a5c816a0 --- /dev/null +++ b/public/js/app/account/controllers/account-ctrl.js @@ -0,0 +1,240 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ +'use strict'; + +angular.module('ds.account') + + .controller('AccountCtrl', ['$scope', '$state', 'addresses', 'account', 'orders', 'OrderListSvc', 'AccountSvc', '$modal', '$filter', 'GlobalData', '$translate', 'AuthDialogManager', + + function ($scope, $state, addresses, account, orders, OrderListSvc, AccountSvc, $modal, $filter, GlobalData, $translate, AuthDialogManager) { + + var modalInstance; + var customerNumber = account.customerNumber; + var notSet = ''; + $translate('NOT_SET').then(function(value){ + notSet = value; + }); + var getDefaultAddress = function () { + return _.find($scope.addresses, function (addr) { + return addr.isDefault; + }); + }; + + $scope.errors = []; + $scope.account = account; + $scope.addresses = addresses; + $scope.orders = orders; + $scope.defaultAddress = getDefaultAddress(); + + // show more or less addresses. + $scope.showAddressDefault = 6; + $scope.showAddressButtons = ($scope.addresses.length >= $scope.showAddressDefault); + $scope.showAllAddressButton = true; + $scope.showAddressFilter = $scope.showAddressDefault; + + // show more or less orders. + $scope.showOrdersDefault = 10; + $scope.showAllOrdersButton = true; + $scope.showOrderButtons = ($scope.orders.length >= $scope.showOrdersDefault); + $scope.showOrdersFilter = $scope.showOrdersDefault; + + $scope.titles = []; + var titlesToTranslate = ['MR', 'MS', 'MRS', 'DR']; + + /* + need to translate titles on page load + */ + angular.forEach(titlesToTranslate, function (title) { + $translate(title).then(function (translatedValue) { + $scope.titles.push(translatedValue); + }); + }); + + + var extractServerSideErrors = function (response) { + var errors = []; + if (response.status === 400) { + if (response.data && response.data.details && response.data.details.length) { + errors = response.data.details; + } + } else if (response.status === 403 || response.status === 409 || response.status === 401 || response.status === 404 || response.status === 500) { + if (response.data && response.data.message) { + errors.push({ message: response.data.message }); + } + } + return errors; + }; + + // handle dialog dismissal if user select back button, etc + $scope.$on('$destroy', function () { + if (modalInstance) { + modalInstance.dismiss('cancel'); + } + }); + + $scope.save = function (address, formValid, form /*,formObj*/) { + // console.log('AddrForm', formObj.$error.required); // Important debug for dynamic form validation. + $scope.$broadcast('submitting:form', form); + if (formValid) { + AccountSvc.saveAddress(address).then( + function () { + modalInstance.close(); + }, + function (response) { + $scope.errors = extractServerSideErrors(response); + } + ); + } else { + $scope.showPristineErrors = true; + } + }; + + $scope.saveOnEnter = function ($event, address, formValid, form) { + if ($event.keyCode === 13) { + $event.preventDefault(); + $scope.save(address, formValid, form); + } + }; + + $scope.openAddressModal = function (address) { + var fullName = ''; + if ($scope.account.firstName) { + fullName = fullName + $scope.account.firstName + ' '; + } + if ($scope.account.middleName) { + fullName = fullName + $scope.account.middleName + ' '; + } + if ($scope.account.lastName) { + fullName = fullName + $scope.account.lastName; + } + $scope.address = angular.copy(address || { + account: customerNumber, + contactName: fullName + }); + $scope.showPristineErrors = false; + $scope.errors = []; + modalInstance = $modal.open({ + templateUrl: './js/app/account/templates/address-form.html', + scope: $scope, + backdrop: 'static' + }); + + modalInstance.opened.then(function() { + setTimeout(function() { + // once dialog is open initialize dynamic localized address. + $scope.$emit('localizedAddress:updated', address.country, 'addAddress'); + }, 10); + }); + + modalInstance.result.then(function () { + $scope.refreshAddresses(); + }); + }; + + $scope.closeAddressModal = function () { + modalInstance.close(); + }; + + $scope.removeAddress = function (address) { + address.account = customerNumber; + + $translate('CONFIRM_ADDRESS_REMOVAL').then(function( msg){ + if (window.confirm(msg)) { + AccountSvc.removeAddress(address).then( + function () { + $scope.refreshAddresses(); + }, + function (response) { + $scope.errors = extractServerSideErrors(response); + } + ); + } + }); + + }; + + $scope.refreshAddresses = function () { + AccountSvc.getAddresses().then(function (addresses) { + $scope.addresses = addresses; + $scope.defaultAddress = getDefaultAddress(); + $scope.showAddressButtons = ($scope.addresses.length > $scope.showAddressDefault); + $scope.showAllAddressButton = ($scope.addresses.length > $scope.showAddressFilter-1); + }); + }; + + $scope.setAddressAsDefault = function (address) { + address.isDefault = true; + address.account = customerNumber; + AccountSvc.saveAddress(address).then( + function () { + $scope.refreshAddresses(); + }, + function (response) { + $scope.errors = extractServerSideErrors(response); + } + ); + }; + + + $scope.showAllOrders = function () { + $scope.showAllOrdersButton = !$scope.showAllOrdersButton; + + var parms = { + pageSize: 100 + }; + OrderListSvc.query(parms).then(function (orders) { + $scope.orders = orders; + + // show filtered list or show all orders. Hide if all data is shown within filter. + $scope.showOrdersFilter = $scope.showAllOrdersButton ? $scope.showOrdersDefault : $scope.orders.length; + $scope.showOrderButtons = ($scope.orders.length > $scope.showOrdersDefault); + + }); + }; + + $scope.showAllAddresses = function () { + $scope.showAllAddressButton = !$scope.showAllAddressButton; + + var parms = { + pageSize: GlobalData.addresses.meta.total + }; + AccountSvc.getAddresses(parms).then(function (addresses) { + $scope.addresses = addresses; + + // show filtered list or show all addresses. Hide if all data is shown within filter. + $scope.showAddressFilter = $scope.showAllAddressButton ? $scope.showAddressDefault : $scope.addresses.length; + $scope.showAddressButtons = ($scope.addresses.length > $scope.showAddressDefault); + }); + }; + + $scope.updateAccount = function (field, data) { + var account = angular.copy($scope.account); + var emailRegexp = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i; + if (field === 'contactEmail' && !emailRegexp.test(data)) { + return $translate('PLEASE_ENTER_VALID_EMAIL'); + } + account[field] = data; + return AccountSvc.updateAccount(account); + }; + + $scope.updatePassword = function () { + AuthDialogManager.showUpdatePassword(); + }; + + /* + need to set the currency symbol for each order + */ + angular.forEach($scope.orders, function (order) { + order.currencySymbol = GlobalData.getCurrencySymbol(order.currency); + }); + + }]); diff --git a/public/js/app/account/controllers/account-order-detail-ctrl.js b/public/js/app/account/controllers/account-order-detail-ctrl.js new file mode 100644 index 000000000..1579477aa --- /dev/null +++ b/public/js/app/account/controllers/account-order-detail-ctrl.js @@ -0,0 +1,41 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.account') + .controller('AccountOrderDetailCtrl', ['$scope', 'order', '$stateParams', 'GlobalData', function($scope, order, $stateParams, GlobalData) { + + $scope.order = order; + $scope.order.id = $stateParams.orderId; + $scope.currencySymbol = GlobalData.getCurrencySymbol($scope.order.currency); + $scope.dateFormat = 'dd/MM/yy'; + var date = new Date(order.created); + $scope.orderDate = (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear(); + + var getPaymentInfo = function () { + return $scope.order.payments[0]; + }; + + var getItemsOrderedCount = function () { + var count = 0; + angular.forEach(order.entries, function (entry) { + count += entry.amount; + }); + return count; + }; + + $scope.itemCount = getItemsOrderedCount(); + + $scope.payment = getPaymentInfo(); + + }]); diff --git a/public/js/app/account/services/account-service.js b/public/js/app/account/services/account-service.js new file mode 100644 index 000000000..b5480805c --- /dev/null +++ b/public/js/app/account/services/account-service.js @@ -0,0 +1,118 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +/** + * Encapsulates access to the "authorization" service. + */ +angular.module('ds.account') + .factory('AccountSvc', ['AuthREST', 'settings', 'GlobalData', '$q', function(AuthREST, settings, GlobalData, $q){ + + + + var AccountSvc = { + + /** + * Retrieves the account details of logged-in customer and stores the result in the GlobalData service. + * Returns a promise of the result. + */ + account: function() { + var promise = AuthREST.Customers.all('me').customGET(); + promise.then(function(success){ + GlobalData.customerAccount = success.plain(); + }); + return promise; + }, + + updateAccount: function(account) { + return AuthREST.Customers.all('me').customPUT(account, ''); + }, + + /** + * Retrieve addresses of logged in customer. + */ + getAddresses: function(query) { + var addressesPromise = AuthREST.Customers.all('me').all('addresses').getList(query); + addressesPromise.then(function(response) { + GlobalData.addresses.meta.total = parseInt(response.headers[settings.headers.paging.total.toLowerCase()], 10) || 0; + }); + return addressesPromise; + }, + + /** + * Retrieve specified address of logged in customer. + */ + getAddress: function(id) { + return AuthREST.Customers.all('me').one('addresses', id).get(); + }, + + /** + * Retrieve default address of logged in customer. + */ + getDefaultAddress: function() { + var addresses = this.getAddresses(), + deferred = $q.defer(); + + addresses.then( + function(addresses) { + deferred.resolve(_.find(addresses, function(adr) { return adr.isDefault; })); + }, function() { + deferred.reject(); + }); + + return deferred.promise; + }, + + /** + * Save addresses within logged in customer's address book. + */ + saveAddress: function(address) { + var promise = address.id ? AuthREST.Customers.all('me').all('addresses').customPUT(address, address.id) : AuthREST.Customers.all('me').all('addresses').customPOST(address); + return promise; + }, + + /** + * Remove specified address from logged in customer's address book. + */ + removeAddress: function(address) { + return AuthREST.Customers.all('me').one('addresses', address.id).customDELETE(); + }, + + /** + * Returns a promise to the customer account in the local scope, or retrieves and sets the data if needed. + * If the current customer is anonymous and no local scope account has been created yet, it will create + * said account with a fake ID. + */ + getCurrentAccount: function() { + var defAccount = $q.defer(); + + if(GlobalData.customerAccount){ + defAccount.resolve(GlobalData.customerAccount); + } else if(GlobalData.user.isAuthenticated) { + this.account().then(function(success){ + defAccount.resolve(success); + }, function(failure){ + defAccount.reject(failure); + }); + } else { + defAccount.reject(); + } + return defAccount.promise; + + } + + }; + + return AccountSvc; + + }]); \ No newline at end of file diff --git a/public/js/app/account/templates/account.html b/public/js/app/account/templates/account.html new file mode 100644 index 000000000..42935e6df --- /dev/null +++ b/public/js/app/account/templates/account.html @@ -0,0 +1,141 @@ + +
diff --git a/public/js/app/account/templates/address-form.html b/public/js/app/account/templates/address-form.html new file mode 100644 index 000000000..702d98556 --- /dev/null +++ b/public/js/app/account/templates/address-form.html @@ -0,0 +1,23 @@ + +
+ + + + +
\ No newline at end of file diff --git a/public/js/app/account/templates/addresses-dialog.html b/public/js/app/account/templates/addresses-dialog.html new file mode 100644 index 000000000..b06f71f86 --- /dev/null +++ b/public/js/app/account/templates/addresses-dialog.html @@ -0,0 +1,9 @@ + + \ No newline at end of file diff --git a/public/js/app/account/templates/addresses.html b/public/js/app/account/templates/addresses.html new file mode 100644 index 000000000..99250359f --- /dev/null +++ b/public/js/app/account/templates/addresses.html @@ -0,0 +1,41 @@ +
+
+
+
+ + + +
+
+
+ {{address.contactName}} ({{'DEFAULT' | translate}})
+ {{address.companyName}}
+ {{address.streetNumber}} {{address.street}}, {{address.streetAppendix}}
+ {{address.city}}, {{address.state}} {{address.zipCode}}
+ {{address.country}}
+ {{address.contactPhone}}
+
+
+
+ +
+
+ +
+
+
+ {{address.contactName}} (default)
+ {{address.companyName}}
+ {{address.streetNumber}} {{address.street}}, {{address.streetAppendix}}
+ {{address.city}}, {{address.state}} {{address.zipCode}}
+ {{address.country}}
+ {{address.contactPhone}}
+
+
+ +
+
+
+
+

{{'NO_ADDRESSES' | translate}}

+
\ No newline at end of file diff --git a/public/js/app/account/templates/order-detail.html b/public/js/app/account/templates/order-detail.html new file mode 100644 index 000000000..620447780 --- /dev/null +++ b/public/js/app/account/templates/order-detail.html @@ -0,0 +1,182 @@ + + + \ No newline at end of file diff --git a/public/js/app/addresses/addresses-index.js b/public/js/app/addresses/addresses-index.js new file mode 100644 index 000000000..113c4c9bd --- /dev/null +++ b/public/js/app/addresses/addresses-index.js @@ -0,0 +1,16 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.addresses', []); + diff --git a/public/js/app/addresses/directives/localized-addresses.js b/public/js/app/addresses/directives/localized-addresses.js new file mode 100644 index 000000000..a05ec81da --- /dev/null +++ b/public/js/app/addresses/directives/localized-addresses.js @@ -0,0 +1,181 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2000-2014 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +/** + * Localized Addresses: dynamic address forms based on user selection of localization. + **/ + +angular.module('ds.addresses'). + directive('localizedAddresses', ['$compile', '$http', '$templateCache', '$rootScope', 'GlobalData', + function($compile, $http, $templateCache, $rootScope, GlobalData) { + + var selectionArray = [ + {id: 'US', name:'USA'}, + {id: 'CA', name:'CANADA'}]; + // {id: 'GB', name:'GREAT BRITAIN'}, // feature toggle extra countries. + // {id: 'DE', name:'GERMANY'}, + // {id: 'CN', name:'CHINA'}, + // {id: 'JP', name:'JAPAN'}]; + + var initialize = function(scope, elem, viewType){ + // init with default template type + loadTemplate(scope, elem, '', viewType); + selectDefaultLocale(scope, viewType); + }; + + var selectDefaultLocale = function (scope, viewType) { + + var currentSite = GlobalData.getSite(); + + angular.forEach(selectionArray, function (selection) { + if (selection.id === currentSite.code) { + scope.localeSelection = selection; + } + }); + + if (!scope.localeSelection) { + scope.localeSelection = selectionArray[0]; + } + + switch(viewType){ + case 'addAddress': + if (scope.address) { + scope.address.country = scope.localeSelection.id; + } + break; + case 'billing': + if (scope.order.billTo) { + scope.order.billTo.country = scope.localeSelection.id; + } + break; + case 'shipping': + if (scope.order.shipTo) { + scope.order.shipTo.country = scope.localeSelection.id; + } + break; + default: + break; + } + }; + + // load dynamic address template into scope + var loadTemplate = function(scope, elem, locale, viewType){ + var tempLoader = getTemplate(locale, viewType); + // handle http request response, show, compile, init validation. + tempLoader.success(function(template) { + elem.html(template).show(); + }).then( function () { + $compile(elem.contents())(scope); + }); + }; + + var getTemplate = function(locale, viewType) { + + var templateLoader, templateUrl, + baseUrl = 'js/app/addresses/templates/'; + + // when locale is not recognized set default template + if( !_.contains(_.pluck(selectionArray, 'id'), locale) ){ + locale = 'US'; + } + + // set dynamic template url and return promise + templateUrl = baseUrl + viewType + locale + '.html'; + templateLoader = $http.get(templateUrl, {cache: $templateCache}); + + return templateLoader; + }; + + var getLocaleSelection = function(id) { + var locale = {}; + angular.forEach(selectionArray, function(item){ + if (item.id === id){ + locale = item; + } + }); + return locale; + }; + + var templateLinker = function(scope, element, attrs) { + + scope.viewTarget = attrs.type; + scope.localeSelections = selectionArray; + + // localization selection handler + scope.initializeLocale = function(locale){ + loadTemplate(scope, element, locale.id, attrs.type); + }; + + // localization selection handler + scope.changeLocale = function(locale){ + + loadTemplate(scope, element, locale.id, attrs.type); + + // set dynamic datamodel + switch(scope.viewTarget){ + case 'addAddress': + scope.address.country = locale.id; + scope.address.companyName = ''; + scope.address.street = ''; + scope.address.streetAppendix = ''; + scope.address.city = ''; + scope.address.state = ''; + scope.address.zipCode = ''; + scope.address.contactPhone = ''; + break; + case 'billing': + scope.order.billTo.country = locale.id; + scope.order.billTo.companyName = ''; + scope.order.billTo.address1 = ''; + scope.order.billTo.address2 = ''; + scope.order.billTo.city = ''; + scope.order.billTo.state = ''; + scope.order.billTo.zip = ''; + scope.order.billTo.contactPhone = ''; + break; + case 'shipping': + scope.order.shipTo.country = locale.id; + scope.order.shipTo.companyName = ''; + scope.order.shipTo.address1 = ''; + scope.order.shipTo.address2 = ''; + scope.order.shipTo.city = ''; + scope.order.shipTo.state = ''; + scope.order.shipTo.zip = ''; + scope.order.shipTo.contactPhone = ''; + break; + default: + break; + } + }; + + // event for loading addressbook change request + var unbind = $rootScope.$on('localizedAddress:updated', function (e, name, target) { + var locale = getLocaleSelection(name); + if( scope.viewTarget === target){ + scope.localeSelection = locale; + scope.initializeLocale(locale); + } + }); + scope.$on('$destroy', unbind); + + + initialize(scope, element, scope.viewTarget); + }; + + return { + scope: true, + restrict: 'E', + link: templateLinker + }; + }]); diff --git a/public/js/app/addresses/templates/addAddressCA.html b/public/js/app/addresses/templates/addAddressCA.html new file mode 100644 index 000000000..fb6afef4e --- /dev/null +++ b/public/js/app/addresses/templates/addAddressCA.html @@ -0,0 +1,76 @@ +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
\ No newline at end of file diff --git a/public/js/app/addresses/templates/addAddressCN.html b/public/js/app/addresses/templates/addAddressCN.html new file mode 100644 index 000000000..b001b6524 --- /dev/null +++ b/public/js/app/addresses/templates/addAddressCN.html @@ -0,0 +1,70 @@ +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + + +
+ + +
+ +
+ + +
+ +
+ + + +
+
\ No newline at end of file diff --git a/public/js/app/addresses/templates/addAddressDE.html b/public/js/app/addresses/templates/addAddressDE.html new file mode 100644 index 000000000..720c37542 --- /dev/null +++ b/public/js/app/addresses/templates/addAddressDE.html @@ -0,0 +1,55 @@ +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + + +
+
\ No newline at end of file diff --git a/public/js/app/addresses/templates/addAddressGB.html b/public/js/app/addresses/templates/addAddressGB.html new file mode 100644 index 000000000..2d3fe358d --- /dev/null +++ b/public/js/app/addresses/templates/addAddressGB.html @@ -0,0 +1,56 @@ +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + + +
+
\ No newline at end of file diff --git a/public/js/app/addresses/templates/addAddressJP.html b/public/js/app/addresses/templates/addAddressJP.html new file mode 100644 index 000000000..f37763f7a --- /dev/null +++ b/public/js/app/addresses/templates/addAddressJP.html @@ -0,0 +1,64 @@ +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + + +
+
\ No newline at end of file diff --git a/public/js/app/addresses/templates/addAddressUS.html b/public/js/app/addresses/templates/addAddressUS.html new file mode 100644 index 000000000..4ead529b7 --- /dev/null +++ b/public/js/app/addresses/templates/addAddressUS.html @@ -0,0 +1,117 @@ +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
\ No newline at end of file diff --git a/public/js/app/addresses/templates/billingCA.html b/public/js/app/addresses/templates/billingCA.html new file mode 100644 index 000000000..6fc4a140d --- /dev/null +++ b/public/js/app/addresses/templates/billingCA.html @@ -0,0 +1,110 @@ +
+ +
+ {{'BILLING_ADDRESS' | translate}} +
+ +
+
+ +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+
\ No newline at end of file diff --git a/public/js/app/addresses/templates/billingCN.html b/public/js/app/addresses/templates/billingCN.html new file mode 100644 index 000000000..9d4a88691 --- /dev/null +++ b/public/js/app/addresses/templates/billingCN.html @@ -0,0 +1,97 @@ +
+ +
+ {{'BILLING_ADDRESS' | translate}} +
+ +
+
+ +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+
\ No newline at end of file diff --git a/public/js/app/addresses/templates/billingDE.html b/public/js/app/addresses/templates/billingDE.html new file mode 100644 index 000000000..5385f1d5c --- /dev/null +++ b/public/js/app/addresses/templates/billingDE.html @@ -0,0 +1,87 @@ +
+ +
+ {{'BILLING_ADDRESS' | translate}} +
+ +
+
+ +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+
\ No newline at end of file diff --git a/public/js/app/addresses/templates/billingGB.html b/public/js/app/addresses/templates/billingGB.html new file mode 100644 index 000000000..95d3eb72e --- /dev/null +++ b/public/js/app/addresses/templates/billingGB.html @@ -0,0 +1,89 @@ +
+ +
+ {{'BILLING_ADDRESS' | translate}} +
+ +
+
+ +
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+
\ No newline at end of file diff --git a/public/js/app/addresses/templates/billingJP.html b/public/js/app/addresses/templates/billingJP.html new file mode 100644 index 000000000..8d80427af --- /dev/null +++ b/public/js/app/addresses/templates/billingJP.html @@ -0,0 +1,97 @@ +
+ +
+ {{'BILLING_ADDRESS' | translate}} +
+ +
+
+ +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+
\ No newline at end of file diff --git a/public/js/app/addresses/templates/billingUS.html b/public/js/app/addresses/templates/billingUS.html new file mode 100644 index 000000000..0045e93cd --- /dev/null +++ b/public/js/app/addresses/templates/billingUS.html @@ -0,0 +1,149 @@ +
+ +
+ {{'BILLING_ADDRESS' | translate}} +
+ +
+
+ +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+
\ No newline at end of file diff --git a/public/js/app/addresses/templates/shippingCA.html b/public/js/app/addresses/templates/shippingCA.html new file mode 100644 index 000000000..92369e1d9 --- /dev/null +++ b/public/js/app/addresses/templates/shippingCA.html @@ -0,0 +1,97 @@ +
+ +
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
\ No newline at end of file diff --git a/public/js/app/addresses/templates/shippingCN.html b/public/js/app/addresses/templates/shippingCN.html new file mode 100644 index 000000000..a1c3342bd --- /dev/null +++ b/public/js/app/addresses/templates/shippingCN.html @@ -0,0 +1,84 @@ +
+ +
+
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
\ No newline at end of file diff --git a/public/js/app/addresses/templates/shippingDE.html b/public/js/app/addresses/templates/shippingDE.html new file mode 100644 index 000000000..575c2c20e --- /dev/null +++ b/public/js/app/addresses/templates/shippingDE.html @@ -0,0 +1,74 @@ +
+ +
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
\ No newline at end of file diff --git a/public/js/app/addresses/templates/shippingGB.html b/public/js/app/addresses/templates/shippingGB.html new file mode 100644 index 000000000..0cb30267e --- /dev/null +++ b/public/js/app/addresses/templates/shippingGB.html @@ -0,0 +1,78 @@ +
+ +
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
\ No newline at end of file diff --git a/public/js/app/addresses/templates/shippingJP.html b/public/js/app/addresses/templates/shippingJP.html new file mode 100644 index 000000000..cb570bb4c --- /dev/null +++ b/public/js/app/addresses/templates/shippingJP.html @@ -0,0 +1,84 @@ +
+ +
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
\ No newline at end of file diff --git a/public/js/app/addresses/templates/shippingUS.html b/public/js/app/addresses/templates/shippingUS.html new file mode 100644 index 000000000..d4e900fd9 --- /dev/null +++ b/public/js/app/addresses/templates/shippingUS.html @@ -0,0 +1,140 @@ +
+ +
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
\ No newline at end of file diff --git a/public/js/app/app.js b/public/js/app/app.js new file mode 100644 index 000000000..c7004ea6d --- /dev/null +++ b/public/js/app/app.js @@ -0,0 +1,144 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +/** Initializes and configures the application. */ +window.app = angular.module('ds.app', [ + 'restangular', + 'ui.router', + 'ds.shared', + 'ds.security', + 'ds.i18n', + 'ds.home', + 'ds.products', + 'ds.cart', + 'ds.checkout', + 'ds.confirmation', + 'ds.coupon', + 'ds.account', + 'ds.addresses', + 'ds.auth', + 'ds.orders', + 'ds.queue', + 'ds.router', + 'ds.httpproxy', + 'ds.errors', + 'ds.backendMock', + 'xeditable', + 'ngSanitize', + 'ui.select', + 'ds.ybreadcrumb', + 'ds.ytracking', + 'ds.localstorage', + 'ds.appconfig', + 'ds.searchlist', + 'ds.ysearch' +]) + .constant('_', window._) + + // Configure HTTP and Restangular Providers - default headers, CORS + .config(['$httpProvider', 'RestangularProvider', 'settings', 'appConfig', + function ($httpProvider, RestangularProvider, settings, appConfig) { + $httpProvider.interceptors.push('interceptor'); + + // enable CORS + $httpProvider.defaults.useXDomain = true; + RestangularProvider.addFullRequestInterceptor( function(element, operation, route, url, headers, params, httpConfig) { + + var oldHeaders = {}; + if(url.indexOf('yaas')<0) { + delete $httpProvider.defaults.headers.common[settings.headers.hybrisAuthorization]; + //work around if not going through Apigee proxy for a particular URL, such as while testing new services + oldHeaders [settings.headers.hybrisTenant] = appConfig.storeTenant(); + oldHeaders [settings.headers.hybrisRoles] = settings.roleSeller; + oldHeaders [settings.headers.hybrisUser] = settings.hybrisUser; + oldHeaders [settings.headers.hybrisApp] = settings.hybrisApp; + } + return { + element: element, + params: params, + headers: _.extend(headers, oldHeaders), + httpConfig: httpConfig + }; + }); + }]) + + .run(['$rootScope', '$injector','ConfigSvc', 'AuthDialogManager', '$location', 'settings', 'TokenSvc', + 'AuthSvc', 'GlobalData', '$state', 'httpQueue', 'editableOptions', 'editableThemes', 'CartSvc', 'EventSvc', + function ($rootScope, $injector, ConfigSvc, AuthDialogManager, $location, settings, TokenSvc, + AuthSvc, GlobalData, $state, httpQueue, editableOptions, editableThemes, CartSvc, EventSvc) { + + //closeOffcanvas func for mask + $rootScope.closeOffcanvas = function(){ + $rootScope.showMobileNav = false; + $rootScope.showCart = false; + }; + + editableOptions.theme = 'bs3'; + editableThemes.bs3.submitTpl = ''; + + $rootScope.$on('authtoken:obtained', function(event, token){ + httpQueue.retryAll(token); + }); + + $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState){ + AuthDialogManager.close(); + var needsAuthentication = toState.data && toState.data.auth && toState.data.auth === 'authenticated'; + toState.repeat = false; + + if ( needsAuthentication && !AuthSvc.isAuthenticated() ) { + // block immediate state transition + event.preventDefault(); + if(!fromState.name){ + $state.go(settings.homeState); + } + + var dlg = $injector.get('AuthDialogManager').open({windowClass:'mobileLoginModal'}, {}, {}, false); + dlg.then(function(){ + $state.go(toState, toParams); + }, + function(){ + $state.go(settings.homeState); + }); + } + }); + + $rootScope.$on('$stateChangeSuccess', function(){ + $rootScope.$emit('cart:closeNow'); + }); + + // Implemented as watch, since client-side determination of "logged" in depends on presence of token in cookie, + // which may be removed by browser/user + $rootScope.$watch(function () { + return AuthSvc.isAuthenticated(); + }, function (isAuthenticated, wasAuthenticated) { + $rootScope.$broadcast(isAuthenticated ? 'user:signedin' : 'user:signedout', {new: isAuthenticated, old: wasAuthenticated}); + GlobalData.user.isAuthenticated = isAuthenticated; + }); + + $rootScope.$on('site:updated', function () { + EventSvc.onSiteChange(); + }); + + $rootScope.$on('language:updated', function (event, eveObj) { + EventSvc.onLanguageChange(event, eveObj); + }); + + // setting root scope variables that drive class attributes in the BODY tag + $rootScope.showCart =false; + $rootScope.showMobileNav=false; + } + + ]); + + diff --git a/public/js/app/auth/auth-index.js b/public/js/app/auth/auth-index.js new file mode 100644 index 000000000..8a14042af --- /dev/null +++ b/public/js/app/auth/auth-index.js @@ -0,0 +1,15 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.auth', ['ipCookie','directive.g+signin']); \ No newline at end of file diff --git a/public/js/app/auth/controllers/auth-modal-dialog-ctrl.js b/public/js/app/auth/controllers/auth-modal-dialog-ctrl.js new file mode 100644 index 000000000..90fc4e1cc --- /dev/null +++ b/public/js/app/auth/controllers/auth-modal-dialog-ctrl.js @@ -0,0 +1,113 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ +'use strict'; + +angular.module('ds.auth') +/** + * Controller for handling authentication related modal dialogs (signUp/signIn). + */ + .controller('AuthModalDialogCtrl', ['$rootScope', '$scope', 'AuthSvc', + 'settings', 'AuthDialogManager', 'loginOpts', 'showAsGuest', '$state', + function ($rootScope, $scope, AuthSvc, settings, AuthDialogManager, loginOpts, showAsGuest, $state) { + + $scope.user = { + signup: {}, + signin: { + email: '', + password: '' + } + }; + + $scope.errors = { + signup: [], + signin: [] + }; + + $scope.fbAppId = settings.facebookAppId; + $scope.googleClientId = settings.googleClientId; + // determines "continue as guest" button: + $scope.showAsGuest = showAsGuest; + + AuthSvc.initFBAPI(); + + // react to event fired by goole+ signing directive + $scope.$on('event:google-plus-signin-success', function (event, authResult) { + if( authResult.status.method && authResult.status.method !== 'AUTO' ){ + AuthSvc.onGoogleLogIn( authResult[settings.configKeys.googleResponseToken]); + } + }); + + $scope.$on('authlogin:error', function(){ + var response = { status: 0 }; + $scope.errors.signin = AuthSvc.extractServerSideErrors(response); + }); + + /** Closes the dialog.*/ + $scope.closeDialog = function(){ + AuthDialogManager.close(); + }; + + /** Shows dialog that allows the user to create a new account.*/ + $scope.signup = function (authModel, signUpForm) { + if (signUpForm.$valid) { + AuthSvc.signup(authModel, loginOpts).then( + function () { + $scope.closeDialog(); + }, function (response) { + $scope.errors.signup = AuthSvc.extractServerSideErrors(response); + } + ); + } + }; + + /** Shows dialog that allows the user to sign in so account specific information can be accessed. */ + $scope.signin = function (authModel, signinForm) { + if (signinForm.$valid) { + AuthSvc.signin(authModel).then(function () { + $scope.closeDialog(); + }, function (response) { + $scope.errors.signin = AuthSvc.extractServerSideErrors(response); + }); + } + }; + + /** Closes the dialog. */ + $scope.continueAsGuest = function () { + $scope.closeDialog(); + $state.go('base.checkout.details'); + }; + + /** Shows the "request password reset" dialog.*/ + $scope.showResetPassword = function () { + AuthDialogManager.showResetPassword(); + }; + + $scope.clearErrors = function() { + $scope.errors.signin = []; + $scope.errors.signup = []; + }; + + $scope.fbLogin = function () { + AuthSvc.faceBookLogin(); + }; + + var unbind = $rootScope.$on('user:socialLogIn', function(eve, obj){ + if(obj.loggedIn){ + $scope.closeDialog(); + } else { + $scope.errors.signin = [({message: 'LOGIN_FAILED'})]; + } + }); + + $scope.$on('$destroy', unbind); + + }]); \ No newline at end of file diff --git a/public/js/app/auth/controllers/password-reset-ctrl.js b/public/js/app/auth/controllers/password-reset-ctrl.js new file mode 100644 index 000000000..85f3f04ec --- /dev/null +++ b/public/js/app/auth/controllers/password-reset-ctrl.js @@ -0,0 +1,47 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ +'use strict'; + +angular.module('ds.auth') + /** + * Handles interaction for "request password reset" dialog with follow-up "check your email" dialog. + */ + .controller('PasswordResetCtrl', ['$scope', 'AuthSvc', 'AuthDialogManager', '$state', 'title', 'instructions', + function($scope, AuthSvc, AuthDialogManager, $state, title, instructions ) { + + $scope.title = title || 'FORGOT_PW' ; + $scope.instructions = instructions || 'FORGOT_PW_INSTRUCT'; + + $scope.closeDialog = function(){ + AuthDialogManager.close(); + }; + + $scope.requestPasswordReset = function(email){ + AuthSvc.requestPasswordReset(email).then(function() { + AuthDialogManager.close(); + AuthDialogManager.showCheckEmail(); + + }, function(failure){ + if(failure.status === 404){ + $scope.message = 'EMAIL_NOT_FOUND'; + } else { + $scope.message = failure.message; + } + }); + }; + + $scope.clearErrors = function(){ + $scope.message = ''; + }; + + + }]); \ No newline at end of file diff --git a/public/js/app/auth/controllers/password-reset-update-ctrl.js b/public/js/app/auth/controllers/password-reset-update-ctrl.js new file mode 100644 index 000000000..65af225ca --- /dev/null +++ b/public/js/app/auth/controllers/password-reset-update-ctrl.js @@ -0,0 +1,84 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ +'use strict'; + +angular.module('ds.auth') +/** + * Displays the "indicate new password" page, to which the user will be linked after issuing a request to reset the password. + * Assumes that the stateParams provide the token that is required to make the service call. + */ + .controller('ResetPasswordUpdateCtrl', ['$scope', 'AuthDialogManager', 'AuthSvc', '$state', '$stateParams', + function ($scope, AuthDialogManager, AuthSvc, $state, $stateParams) { + $scope.token = $stateParams.token || ''; + $scope.showPristineErrors = false; + $scope.submitDisabled = false; + $scope.error = {}; + $scope.showRetryLink = false; + + $scope.showAllErrors = function () { + $scope.showPristineErrors = true; + return true; + }; + + $scope.changePassword = function (token, password) { + $scope.submitDisabled = true; + + AuthSvc.changePassword(token, password).then(function () { + var dlgPromise = AuthDialogManager.showPasswordChanged(); + dlgPromise.then(function () { + // won't be called + }, + function () { // on dismiss - only option + var loginPromise = AuthDialogManager.open(); + loginPromise.then(function () { + $state.transitionTo('base.category', $stateParams, { + reload: true, + inherit: true, + notify: true + }); + }, function () { + $state.transitionTo('base.category', $stateParams, { + reload: true, + inherit: true, + notify: true + }); + }); + + } + ); + }, function (error) { + $scope.submitDisabled = false; + if(error.status === 400 && error.data && error.data.message && error.data.message.toLowerCase().indexOf('invalid token')> -1) { + + AuthDialogManager.showResetPassword({title: 'REQUEST_PW_EXPIRED', instructions:'REQUEST_PW_EXPIRED_MSG'}); + + } else { + $scope.showRetryLink = true; + $scope.error.message= 'PW_CHANGE_FAILED'; + if (error.data && error.data.message) { + $scope.error.details = error.data.message; + } + } + }); + }; + + $scope.showRequestPasswordReset = function() { + AuthDialogManager.showResetPassword(); + }; + + $scope.clearErrors = function () { + $scope.showPristineErrors = false; + $scope.error.message = ''; + $scope.error.details = ''; + }; + + }]); \ No newline at end of file diff --git a/public/js/app/auth/controllers/password-update-ctrl.js b/public/js/app/auth/controllers/password-update-ctrl.js new file mode 100644 index 000000000..ca4c134af --- /dev/null +++ b/public/js/app/auth/controllers/password-update-ctrl.js @@ -0,0 +1,59 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ +'use strict'; + +angular.module('ds.auth') + /** + * Displays the "change password" modal dialog. This is initiated directly by the user + * (not via the 'reset password' function) and does not require a token. + */ + .controller('PasswordUpdateCtrl', ['$scope', 'AuthDialogManager', 'AuthSvc', '$state', '$stateParams', 'TokenSvc', '$modalInstance', + function($scope, AuthDialogManager, AuthSvc, $state, $stateParams, TokenSvc, $modalInstance) { + + $scope.showPristineErrors = false; + $scope.submitDisabled = false; + $scope.errors = []; + + $scope.showAllErrors = function(){ + $scope.showPristineErrors = true; + return true; + }; + + $scope.updatePassword = function (oldPassword, newPassword) { + $scope.submitDisabled = true; + $scope.errors = []; + + AuthSvc.updatePassword(oldPassword, newPassword, TokenSvc.getToken().getUsername() || '').then( + function() { + $modalInstance.close(); + }, + function(error){ + $scope.submitDisabled = false; + + if (error.status === 401) { + $scope.errors.push({ message: 'WRONG_CURRENT_PASSWORD' }); + } else if(error.data && error.data.message) { + $scope.errors.push({ message: error.data.message }); + } + } + ); + }; + + $scope.close = function() { + $modalInstance.dismiss('cancel'); + }; + + $scope.clearErrors = function(){ + $scope.errors = []; + }; + + }]); \ No newline at end of file diff --git a/public/js/app/auth/directives/confirm-input.js b/public/js/app/auth/directives/confirm-input.js new file mode 100644 index 000000000..96773cc11 --- /dev/null +++ b/public/js/app/auth/directives/confirm-input.js @@ -0,0 +1,29 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ +'use strict'; + +angular.module('ds.auth') +.directive('confirmInput', function () { + return { + require: 'ngModel', + link: function (scope, element, attrs, ctrl) { + var firstPassword = '#' + attrs.confirmInput; + // we're adding a 'on key up' listener to both the original and repeat password + element.add(firstPassword).on('keyup', function () { + scope.$apply(function () { + var v = element.val()===$(firstPassword).val(); + ctrl.$setValidity('match', v); + }); + }); + } + }; +}); diff --git a/public/js/app/auth/directives/create-account.js b/public/js/app/auth/directives/create-account.js new file mode 100644 index 000000000..c0a845321 --- /dev/null +++ b/public/js/app/auth/directives/create-account.js @@ -0,0 +1,58 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.auth') +.directive('createAccount', ['AuthSvc', 'settings', '$rootScope', function (AuthSvc, settings, $rootScope) { + return { + link: function ($scope) { + + $scope.fbAppId = settings.facebookAppId; + $scope.googleClientId = settings.googleClientId; + AuthSvc.initFBAPI(); + + $scope.errors = { + signup: [] + }; + + /** in page panel to create a new account.*/ + $scope.signup = function (signUpPw, signUpEmail, signUpForm) { + var authModel = { + email: signUpEmail, + password: signUpPw + }; + if (signUpForm.$valid) { + AuthSvc.signup(authModel).then( function () { + $scope.isAuthenticated = true; + $rootScope.$broadcast('confirmation:account'); + }, function (response) { + $scope.errors.signup = AuthSvc.extractServerSideErrors(response); + } + ); + } + }; + + $scope.fbLogin = function () { + AuthSvc.faceBookLogin(); + }; + + // react to event fired by goole+ signing directive + $scope.$on('event:google-plus-signin-success', function (event, authResult) { + if( authResult.status.method && authResult.status.method !== 'AUTO' ){ + AuthSvc.onGoogleLogIn( authResult[settings.configKeys.googleResponseToken]); + } + }); + + } + }; +}]); diff --git a/public/js/app/auth/services/anon-auth-service.js b/public/js/app/auth/services/anon-auth-service.js new file mode 100644 index 000000000..e51090fa1 --- /dev/null +++ b/public/js/app/auth/services/anon-auth-service.js @@ -0,0 +1,51 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +/** + * Encapsulates access to the account service for anonymous login/OAuth token retrieval. + */ +/* jshint ignore:start */ +angular.module('ds.auth') + .factory('AnonAuthSvc', ['TokenSvc', '$http', '$state', '$rootScope', '$translate', 'GlobalData', 'SiteConfigSvc', + function (TokenSvc, $http, $state, $rootScope, $translate, GlobalData, siteConfig) { + + var inProgress = false; + return { + + /** Handles request to obtain anonymous token and store it in the cookie. + * If request already in progress, does nothing. + */ + getToken: function(){ + + if(!inProgress) { + inProgress = true; + + $http.get(siteConfig.apis.account.baseUrl + '/auth/anonymous/login?client_id=' + GlobalData.store.clientId + '&redirect_uri=' + encodeURIComponent(GlobalData.store.redirectURI) + '&hybris-tenant=' + GlobalData.store.tenant, '').then( function(response){ + var token = response.data.access_token; + var expiresIn = response.data.expires_in; + TokenSvc.setAnonymousToken(token, expiresIn); + inProgress = false; + $rootScope.$emit('authtoken:obtained', token); + }, function(){ + inProgress = false; + console.error('Unable to perform anonymous login - ensure project id is configured correctly.'); + $state.go('errors', {errorId: 404}); + }); + } + } + }; + + + }]); +/* jshint ignore:end */ \ No newline at end of file diff --git a/public/js/app/auth/services/auth-dialog-manager.js b/public/js/app/auth/services/auth-dialog-manager.js new file mode 100644 index 000000000..2f69c845a --- /dev/null +++ b/public/js/app/auth/services/auth-dialog-manager.js @@ -0,0 +1,123 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +/** Authorization manager. */ +angular.module('ds.auth') + .factory('AuthDialogManager', ['$modal', + function($modal){ + + var authDialog; + + function closeDialog(){ + if (authDialog) { + try { + authDialog.close(); + } catch (err){ + + } + } + } + + function openDialog(options) { + // make sure only 1 instance exists in opened state + closeDialog(); + authDialog = $modal.open(options); + return authDialog.result; + } + + return { + + + /** + * Creates and opens the authorization dialog for sign in/create account. + * Returns the promise returned by $modal.result (see angular bootstrap) - the success handler will + * be invoked if the the dialog was closed and the "reject" handler will be invoked if the dialog was + * dismissed. + * @param dialogConfig + * @param dialogOptions + * @param loginOptions - options for "post login" processing, such as the target URL + */ + open: function(dialogConfig, dialogOptions, loginOptions, showContinueAsGuest) { + + var modalOpts = angular.extend({ + templateUrl: 'js/app/auth/templates/auth.html', + controller: 'AuthModalDialogCtrl', + resolve: { + loginOpts: function() { + return loginOptions || {}; + }, + showAsGuest: function(){ + return showContinueAsGuest; + } + } + }, dialogConfig || {}); + + if (dialogOptions && dialogOptions.required) { + modalOpts.keyboard = false; + modalOpts.backdrop = 'static'; + } + return openDialog(modalOpts); + }, + + close: function() { + closeDialog(); + }, + + + /** Shows the "reset password dialog. + * @param opts optional override for 'title' and 'msg'. + * */ + showResetPassword: function(opts){ + var modalOpts = { + templateUrl: './js/app/auth/templates/password-request-reset.html', + controller: 'PasswordResetCtrl', + resolve:{ + title: function(){return opts? opts.title : null;}, + instructions: function(){return opts? opts.instructions : null;} + } + }; + return openDialog(modalOpts); + }, + + /** Shows the "check your email" dialog. */ + showCheckEmail: function(){ + var modalOpts = { + templateUrl: './js/app/auth/templates/check-email.html' + }; + return openDialog(modalOpts); + }, + + /** Shows the 'password changed successfully' dialog. */ + showPasswordChanged: function(){ + var modalOpts = { + templateUrl: './js/app/auth/templates/pw-change-success.html' + }; + return openDialog(modalOpts); + }, + + /** Shows "update password" dialog for an authenticated user.*/ + showUpdatePassword: function(){ + var modalOpts = { + templateUrl: './js/app/auth/templates/password-update.html', + controller: 'PasswordUpdateCtrl', + backdrop: 'static' + }; + return openDialog(modalOpts); + } + + + }; + + } + ]); \ No newline at end of file diff --git a/public/js/app/auth/services/auth-rest.js b/public/js/app/auth/services/auth-rest.js new file mode 100644 index 000000000..062b57a91 --- /dev/null +++ b/public/js/app/auth/services/auth-rest.js @@ -0,0 +1,36 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +/** REST configuration for services related to authorization. */ +angular.module('ds.auth') + .factory('AuthREST', ['Restangular', 'SiteConfigSvc', function(Restangular, siteConfig){ + + return { + /** Configures main authorization API endpoint.*/ + Customers: Restangular.withConfig(function(RestangularConfigurer) { + RestangularConfigurer.setResponseInterceptor(function (data, operation, what, url, response) { + var headers, result = response.data; + if (result && operation === 'getList' && what ==='addresses') { + headers = response.headers(); + result.headers = headers; + } + return result; + }); + RestangularConfigurer.setBaseUrl(siteConfig.apis.customers.baseUrl); + }) + + }; + + + }]); \ No newline at end of file diff --git a/public/js/app/auth/services/auth-service.js b/public/js/app/auth/services/auth-service.js new file mode 100644 index 000000000..eacf53561 --- /dev/null +++ b/public/js/app/auth/services/auth-service.js @@ -0,0 +1,255 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +/** + * Encapsulates access to the "authentication" service. + */ +angular.module('ds.auth') + .factory('AuthSvc', ['AuthREST', '$rootScope', 'settings', 'TokenSvc', 'GlobalData', 'appConfig', '$state', '$q', 'SessionSvc', '$window', + function (AuthREST, $rootScope, settings, TokenSvc, GlobalData, appConfig, $state, $q, SessionSvc, $window) { + + function loginAndSetToken(user) { + return AuthREST.Customers.all('login').customPOST(user).then(function (response) { + return TokenSvc.setToken(response.accessToken, user ? user.email : null); + }); + } + + /** Call this function once a Facebook OAuth token has been obtained. + * This call with authenticate the user with yaas and will retrieve basic profile information from Facebook. + * */ + function onFbLogIn(fbToken) { + AuthenticationService.socialLogin('facebook', fbToken).then(function () { + $rootScope.$emit('user:socialLogIn', {loggedIn: true}); + /* jshint ignore:start */ + try { + FB.api('/me', function (response) { + SessionSvc.afterSocialLogin({ + email: response.email, + firstName: response.first_name, + lastName: response.last_name + }); + }); + } catch (error) { + console.error('Unable to load FB user profile'); + } + /* jshint ignore:end */ + }, function () { + $rootScope.$emit('user:socialLogIn', {loggedIn: false}); + }); + + } + + + var AuthenticationService = { + + getFBAndGoogleLoginKeys: function () { + return AuthREST.Customers.all('loginconfig').get(''); + }, + + /** Calls the Facebook API to validate that the user is logged into FB - if yes, + * the existing FB token will be used to log the user into the store. Note that this + * function should only be called if the user is already logged into Facebook - if we + * invoke the FB.login API through code rather than the integrated FB button, + * the login dialog will be a pop-up rather than an iframe. + */ + faceBookLogin: function () { + FB.getLoginStatus(function (response) { + if (response.status === 'connected') { + onFbLogIn(response.authResponse.accessToken); + } else { + FB.login(); + } + }, true); + + }, + + /** Loads the Facebook SDK. */ + initFBAPI: function () { + try { + if (settings.facebookAppId) { + + // load Facebook SDK + $window.fbAsyncInit = function () { + FB.init({ + appId: settings.facebookAppId, + xfbml: false, + version: 'v2.2' + }); + + // Catch "login" events as the user logs in through the FB login dialog which is shown by the FB SDK + FB.Event.subscribe('auth.statusChange', function (response) { + if (response.status === 'connected') { + onFbLogIn(response.authResponse.accessToken); + } + }); + FB.XFBML.parse(); + }; + (function (d, s, id) { + var js, fjs = d.getElementsByTagName(s)[0]; + var fbElement = d.getElementById(id); + if (fbElement) { + + return; + } + js = d.createElement(s); + js.id = id; + js.src = '//connect.facebook.net/en_US/sdk.js'; + fjs.parentNode.insertBefore(js, fjs); + + }(document, 'script', 'facebook-jssdk')); + + } + } catch (e) { + console.error('Unable to initialize Facebook API'); + console.error(e); + } + }, + + + onGoogleLogIn: function (gToken) { + + AuthenticationService.socialLogin('google', gToken).then(function () { + $rootScope.$emit('user:socialLogIn', {loggedIn: true}); + try { + window.gapi.client.load('plus', 'v1').then(function () { + window.gapi.client.plus.people.get({ + 'userId': 'me' + }).then(function (response) { + if (response.result) { + SessionSvc.afterSocialLogin({ + email: response.result.emails[0].value, + firstName: response.result.name.givenName, + lastName: response.result.name.familyName + }); + } + + }); + }); + } catch (error) { + console.error('Unable to load Google+ user profile'); + } + }, function () { + $rootScope.$emit('user:socialLogIn', {loggedIn: false}); + }); + + }, + + fbParse: function () { + if (typeof FB !== 'undefined') { + FB.XFBML.parse(); + } + }, + + extractServerSideErrors: function (response) { + var errors = []; + if (response.status === 400 && response.data.details && response.data.details[0].field && response.data.details[0].field === 'password') { + errors.push({message: 'PASSWORD_INVALID'}); + } else if (response.status === 401 || response.status === 404) { + errors.push({message: 'INVALID_CREDENTIALS'}); + } else if (response.status === 409) { + errors.push({message: 'ACCOUNT_ALREADY_EXISTS'}); + } else if (response.status === 403) { + errors.push({message: 'ACCOUNT_LOCKED'}); + } else { + errors.push({ message: 'SERVER_UNAVAILABLE'}); + } + return errors; + }, + + /** + * Performs login (customer specific or anonymous) and updates the current OAuth token in the local storage. + * Returns a promise with "success" = access token for when that action has been performed. + * + * @param user JSON object (with email, password properties), or null for anonymous user. + */ + signin: function (user) { + return loginAndSetToken(user).then(function () { + settings.hybrisUser = user.email; + SessionSvc.afterLogIn(); + }); + }, + + signup: function (user, context) { + var def = $q.defer(); + AuthREST.Customers.all('signup').customPOST(user).then(function () { + loginAndSetToken(user).then(function () { + settings.hybrisUser = user.email; + def.resolve({}); + SessionSvc.afterLoginFromSignUp(context); + }, function (error) { + def.reject(error); + }); + }, function (error) { + def.reject(error); + }); + return def.promise; + }, + + /** Logs the customer out and removes the token cookie. */ + signOut: function () { + AuthREST.Customers.all('logout').customGET('', {accessToken: TokenSvc.getToken().getAccessToken()}); + // unset token after logout - new anonymous token will be generated for next request automatically + TokenSvc.unsetToken(settings.accessCookie); + SessionSvc.afterLogOut(); + }, + + /** Returns true if there is a user specific OAuth token cookie for the current tenant.*/ + isAuthenticated: function () { + var token = TokenSvc.getToken(); + return !!token.getAccessToken() && !!token.getUsername() && token.getTenant() === appConfig.storeTenant(); + }, + + /** Issues a 'reset password' request. Returns the promise of the completed action.*/ + requestPasswordReset: function (email) { + var user = { + email: email + }; + return AuthREST.Customers.all('password').all('reset').customPOST(user); + }, + + /** Issues a 'change reset' request via email/link with token. Returns the promise of the completed action. + * @param token that was obtained for password reset + * @param new password + */ + changePassword: function (token, newPassword) { + var user = { + token: token, + password: newPassword + }; + return AuthREST.Customers.all('password').all('reset').all('update').customPOST(user); + }, + + /** Modifies the password for an authenticated user.*/ + updatePassword: function (oldPassword, newPassword, email) { + var payload = { + currentPassword: oldPassword, + newPassword: newPassword, + email: email + }; + return AuthREST.Customers.all('password').all('change').customPOST(payload); + }, + + /** Performs login logic following login through social media login.*/ + socialLogin: function (providerId, token) { + return AuthREST.Customers.one('login', providerId).customPOST({accessToken: token}).then(function (response) { + // passing static username to trigger 'is authenticated' validation of token + TokenSvc.setToken(response.accessToken, 'social'); + SessionSvc.afterLogIn(); + }); + } + + }; + return AuthenticationService; + + }]); \ No newline at end of file diff --git a/public/js/app/auth/services/session-service.js b/public/js/app/auth/services/session-service.js new file mode 100644 index 000000000..2b8df1ced --- /dev/null +++ b/public/js/app/auth/services/session-service.js @@ -0,0 +1,99 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; +angular.module('ds.auth') + /** Encapsulates the logic for what needs to happen once a user is logged in or logged out.*/ + .factory('SessionSvc', ['AccountSvc', 'CartSvc', 'GlobalData', '$state', '$stateParams', 'settings', '$rootScope', + function (AccountSvc, CartSvc, GlobalData, $state, $stateParams, settings, $rootScope) { + + function navigateAfterLogin(context){ + if(context && context.targetState){ + $state.go(context.targetState, context.targetStateParams || {}); + } + } + + function commonPostLogin(context){ + CartSvc.refreshCartAfterLogin(GlobalData.customerAccount.id); + navigateAfterLogin(context); + } + + + return { + + afterLoginFromSignUp: function (context) { + AccountSvc.account().then(function () { + //Customer login event + $rootScope.$emit('customer:login', {}); + }).then(function(){ + commonPostLogin(context); + }); + }, + + /** Performs application logic for the scenario of a successful login. + * @param context - optional configuration instance with the following optional properties: + * - fromSignUp - set to true if this login followed the creation of a new account + * - targetState - state to navigate to once additional configuration has taken place + * - targetStateParams - state params to go with the targetState + * */ + afterLogIn: function (context) { + + // there must be an account + AccountSvc.account().then(function (account) { + //Customer login event + $rootScope.$emit('customer:login', {}); + return account; + }).finally(function () { + commonPostLogin(context); + }); + }, + + afterLogOut: function(){ + GlobalData.customerAccount = null; + CartSvc.resetCart(); + + $rootScope.$broadcast('coupon:logout'); + + if ( $state.is('base.checkout.details') || ( $state.current.data && $state.current.data.auth && $state.current.data.auth === 'authenticated')) { + $state.go(settings.homeState); + } + }, + + /** + * Updates the current account profile with data from the social login profile, if properties + * have not yet been set in the profile. + * @param profile object with properties "firstName", "lastName", "email" + */ + afterSocialLogin: function(profile){ + if(profile.email || profile.firstName || profile.lastName){ + AccountSvc.getCurrentAccount().then(function (accResult) { + var updated = false; + if(!accResult.firstName && !accResult.lastName){ + accResult.firstName = profile.firstName; + accResult.lastName = profile.lastName; + updated = true; + } + if(!accResult.contactEmail && profile.email){ + accResult.contactEmail = profile.email; + updated = true; + } + if(updated) { + AccountSvc.updateAccount(accResult); + } + }); + } + + } + + + }; + }]); diff --git a/public/js/app/auth/services/token-service.js b/public/js/app/auth/services/token-service.js new file mode 100644 index 000000000..7acef609c --- /dev/null +++ b/public/js/app/auth/services/token-service.js @@ -0,0 +1,81 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +/** + * Encapsulates management of the OAuth token and user name, using cookies. + */ +angular.module('ds.auth') + .factory('TokenSvc', ['settings', 'ipCookie', 'appConfig', + function(settings, ipCookie, appConfig){ + + var defaultExpirySeconds = 3599; + + var Token = function(userName, accessToken, tenant) { + this.userName = userName; + this.accessToken = accessToken; + this.tenant = tenant; + this.getUsername = function(){ + return this.userName; + }; + this.getAccessToken = function(){ + return this.accessToken; + }; + this.getTenant = function(){ + return this.tenant; + }; + }; + + + var TokenSvc = { + + unsetToken: function() { + ipCookie.remove(settings.accessCookie); + }, + + /** Sets an anonymous access token, only if there currently is no token. */ + setAnonymousToken: function(accessToken, expiresIn) { + if(!this.getToken().getAccessToken() || this.getToken().getTenant() !== appConfig.storeTenant()) { + this.setToken(accessToken, null, expiresIn); + } + }, + + /* + * Store token as cookie. + * @param {String} accessToken [OAuth token] + * @param {String} userName [user name/email; may be null] + * @param {String} expiresIn [# of seconds the token will expire in; may be null] + */ + setToken: function(accessToken, userName, expiresIn) { + var token = new Token(userName, accessToken, appConfig.storeTenant()); + ipCookie(settings.accessCookie, JSON.stringify(token), {expirationUnit: 'seconds', expires: expiresIn ? expiresIn : defaultExpirySeconds}); + }, + + /** Returns a Token object with the functions getUsername() and getAccessToken(). */ + getToken: function() { + var tokenCookie = ipCookie(settings.accessCookie); + if(tokenCookie ){ + if(tokenCookie.tenant === appConfig.storeTenant()){ + return new Token(tokenCookie.userName, tokenCookie.accessToken, tokenCookie.tenant); + } else { // existing cookie associated with different tenant - invalidate + this.unsetToken(); + } + } + return new Token(null, null, null); + } + + }; + + return TokenSvc; + + }]); \ No newline at end of file diff --git a/public/js/app/auth/templates/auth.html b/public/js/app/auth/templates/auth.html new file mode 100644 index 000000000..e400579dc --- /dev/null +++ b/public/js/app/auth/templates/auth.html @@ -0,0 +1,41 @@ +
+
+ +
+ +
+
+
+
{{'SIGN_IN_WITH_FACEBOOK' | translate}}
+
+
+
+
+
{{'LOG_IN_WITH_GOOGLE_PLUS' | translate}}
+ +
+
+
+ + +
+ +
+
+
+
+
+
+
+
+ + +
+ + diff --git a/public/js/app/auth/templates/check-email.html b/public/js/app/auth/templates/check-email.html new file mode 100644 index 000000000..5cda41f6c --- /dev/null +++ b/public/js/app/auth/templates/check-email.html @@ -0,0 +1,8 @@ +
+ + + +
diff --git a/public/js/app/auth/templates/create-account.html b/public/js/app/auth/templates/create-account.html new file mode 100644 index 000000000..6c16b0ff0 --- /dev/null +++ b/public/js/app/auth/templates/create-account.html @@ -0,0 +1,39 @@ +
+ + {{'ONE_MORE_STEP' | translate}}
+ {{'ONE_MORE_STEP_MESSAGE' | translate}}
+ +
+
+
+
{{'SIGN_IN_WITH_FACEBOOK' | translate}}
+
+
+
+
+
{{'LOG_IN_WITH_GOOGLE_PLUS' | translate}}
+ +
+
+
+ +
+
+
+ + +
+
+ + +
+
    +
  • {{error.message | translate}}
  • +
+ +
+
+ +
\ No newline at end of file diff --git a/public/js/app/auth/templates/password-request-reset.html b/public/js/app/auth/templates/password-request-reset.html new file mode 100644 index 000000000..836c70d1a --- /dev/null +++ b/public/js/app/auth/templates/password-request-reset.html @@ -0,0 +1,21 @@ +
+ +
+
+ + +
+
+ + {{ message | translate }} + +
+ +
+
diff --git a/public/js/app/auth/templates/password-reset.html b/public/js/app/auth/templates/password-reset.html new file mode 100644 index 000000000..770a17c8c --- /dev/null +++ b/public/js/app/auth/templates/password-reset.html @@ -0,0 +1,60 @@ +
+
+
+ +
+
+ + + + + +
+
+ + {{'PASSWORD_REQUIRED' | translate}} + +
+ +
+ + + + + +
+
+ + {{'PASSWORDS_MUST_MATCH' | translate}} + +
+ + +
+ + + {{ error.message | translate}} {{error.details || ''}} + +
+ +
+ {{'RESET_PW_REPEAT' | translate }} +
+
+
+
+ + diff --git a/public/js/app/auth/templates/password-update.html b/public/js/app/auth/templates/password-update.html new file mode 100644 index 000000000..51831c933 --- /dev/null +++ b/public/js/app/auth/templates/password-update.html @@ -0,0 +1,57 @@ + +
+ + + +
\ No newline at end of file diff --git a/public/js/app/auth/templates/pw-change-success.html b/public/js/app/auth/templates/pw-change-success.html new file mode 100644 index 000000000..bfbc86baa --- /dev/null +++ b/public/js/app/auth/templates/pw-change-success.html @@ -0,0 +1,8 @@ +
+ + + +
diff --git a/public/js/app/auth/templates/signin.html b/public/js/app/auth/templates/signin.html new file mode 100644 index 000000000..3fa95290f --- /dev/null +++ b/public/js/app/auth/templates/signin.html @@ -0,0 +1,21 @@ +
+
+ + +
+
+ + +
+
    +
  • {{error.message | translate}}
  • +
+ +
+ {{'FORGOT_PASSWORD' | translate }} +
+ + + diff --git a/public/js/app/auth/templates/signup.html b/public/js/app/auth/templates/signup.html new file mode 100644 index 000000000..2b5393ec8 --- /dev/null +++ b/public/js/app/auth/templates/signup.html @@ -0,0 +1,16 @@ +
+
+ + +
+
+ + +
+
    +
  • {{error.message | translate}}
  • +
+ +
\ No newline at end of file diff --git a/public/js/app/cart/cart-index.js b/public/js/app/cart/cart-index.js new file mode 100644 index 000000000..03c6ddb88 --- /dev/null +++ b/public/js/app/cart/cart-index.js @@ -0,0 +1,17 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; +/** Module related to shopping cart view and cart navigation. */ +angular.module('ds.cart', [ + 'ds.shared' +]); \ No newline at end of file diff --git a/public/js/app/cart/controllers/cart-ctrl.js b/public/js/app/cart/controllers/cart-ctrl.js new file mode 100644 index 000000000..4016cc580 --- /dev/null +++ b/public/js/app/cart/controllers/cart-ctrl.js @@ -0,0 +1,106 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.cart') + /** This controller manages the interactions of the cart view. The controller is listening to the 'cart:udpated' event + * and will refresh the scope's cart instance when the event is received. */ + .controller('CartCtrl', ['$scope', '$state', '$rootScope', 'CartSvc', 'GlobalData', 'settings', 'AuthSvc', 'AuthDialogManager', + function($scope, $state, $rootScope, CartSvc, GlobalData, settings, AuthSvc, AuthDialogManager) { + + $scope.cart = CartSvc.getLocalCart(); + $scope.currencySymbol = GlobalData.getCurrencySymbol($scope.cart.currency); + + $scope.showTaxEstimation = false; + + $scope.taxConfiguration = GlobalData.getCurrentTaxConfiguration(); + + $scope.couponCollapsed = true; + $scope.taxType = GlobalData.getTaxType(); + + $scope.calculateTax = CartSvc.getCalculateTax(); + + var unbind = $rootScope.$on('cart:updated', function(eve, eveObj){ + $scope.cart = eveObj.cart; + $scope.currencySymbol = GlobalData.getCurrencySymbol($scope.cart.currency); + $scope.taxType = GlobalData.getTaxType(); + $scope.taxConfiguration = GlobalData.getCurrentTaxConfiguration(); + $scope.calculateTax = CartSvc.getCalculateTax(); + }); + + $scope.$on('$destroy', unbind); + + /** Remove a product from the cart. + * @param cart item id + * */ + $scope.removeProductFromCart = function (itemId) { + CartSvc.removeProductFromCart(itemId); + }; + + /** Toggles the "show cart view" property. + */ + $scope.toggleCart = function (){ + $rootScope.showCart = false; + }; + + /** + * Issues an "update cart" call to the service or removes the item if the quantity is undefined or zero. + */ + $scope.updateCartItem = function (item, itemQty, config) { + if (itemQty > 0) { + CartSvc.updateCartItem(item, itemQty, config); + } + else if (!itemQty || itemQty === 0) { + CartSvc.removeProductFromCart(item.id); + } + }; + + $scope.toCheckoutDetails = function () { + $scope.keepCartOpen(); + if (!AuthSvc.isAuthenticated()) { + var dlg = AuthDialogManager.open({windowClass:'mobileLoginModal'}, {}, {}, true); + + dlg.then(function(){ + if (AuthSvc.isAuthenticated()) { + $state.go('base.checkout.details'); + } + }, + function(){ + + } + ); + } + else { + $state.go('base.checkout.details'); + } + }; + + $scope.applyTax = function () { + $scope.taxEstimationError = false; + if ($scope.calculateTax.countryCode !== '' && $scope.calculateTax.zipCode !== '') { + //Save countryCode and zipCode in service + CartSvc.setCalculateTax($scope.calculateTax.zipCode, $scope.calculateTax.countryCode, $scope.cart.id); + + $scope.calculateTax.taxCalculationApplied = true; + + } + else { + //Show error message + $scope.calculateTax.taxCalculationApplied = false; + $scope.showTaxEstimation = false; + $scope.taxEstimationError = true; + } + + }; + + }]); diff --git a/public/js/app/cart/directives/cart-auto-toggle.js b/public/js/app/cart/directives/cart-auto-toggle.js new file mode 100644 index 000000000..9e21d5a82 --- /dev/null +++ b/public/js/app/cart/directives/cart-auto-toggle.js @@ -0,0 +1,85 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.cart') +/** + * cart-auto-toggle + * This directive manages the cart's display + * @return {Object} + */ + .directive('cartAutoToggle',['$rootScope', function($rootScope){ + return { + restrict: 'A', + link: function(scope) { + scope.cartAutoTimeoutLength = 3000; + scope.cartShouldCloseAfterTimeout = false; + scope.cartTimeOut = void 0; + + var closeCart = function(fromTimeout) + { + //update angulars data binding to showCart + $rootScope.showCart = false; + scope.cartShouldCloseAfterTimeout = false; + if (fromTimeout) { + scope.$apply(); + } + + }; + + scope.createCartTimeout = function() + { + //create a timeout object in order to close the cart if it's not hovered + scope.cartTimeOut = _.delay( + function() + { + //close the cart + closeCart(true); + }, + scope.cartAutoTimeoutLength); + }; + + var unbind2 = $rootScope.$on('cart:closeAfterTimeout', function(){ + scope.cartShouldCloseAfterTimeout = true; + //create a timeout object in order to close the cart if it's not hovered + scope.createCartTimeout(); + }); + + var unbind3 = $rootScope.$on('cart:closeNow', function(){ + scope.cartShouldCloseAfterTimeout = true; + $rootScope.showCart = false; + }); + + scope.$on('$destroy', unbind2, unbind3); + + scope.cartHover = function() + { + clearTimeout(scope.cartTimeOut); + }; + + scope.keepCartOpen = function(){ + scope.cartShouldCloseAfterTimeout = false; + }; + + scope.cartUnHover = function() + { + //if none of the inputs are focused then create the 3 second timer after mouseout + if( !$('#cart input').is(':focus') && scope.cartShouldCloseAfterTimeout ) + { + closeCart(); + } + + }; + } + }; + }]); \ No newline at end of file diff --git a/public/js/app/cart/services/cart-rest.js b/public/js/app/cart/services/cart-rest.js new file mode 100644 index 000000000..19f378a9f --- /dev/null +++ b/public/js/app/cart/services/cart-rest.js @@ -0,0 +1,34 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.cart') + .factory('CartREST', ['Restangular', 'SiteConfigSvc', 'GlobalData', function(Restangular, siteConfig, GlobalData){ + + return { + /** Endpoint for Main Cart.*/ + Cart: Restangular.withConfig(function (RestangularConfigurer) { + RestangularConfigurer.setBaseUrl(siteConfig.apis.cart.baseUrl); + RestangularConfigurer.addFullRequestInterceptor(function (element, operation, route, url, headers, params, httpConfig) { + return { + element: element, + params: params, + headers: _.extend(headers, { 'hybris-site': GlobalData.getSiteCode() }), + httpConfig: httpConfig + }; + }); + }) + }; + + + }]); \ No newline at end of file diff --git a/public/js/app/cart/services/cart-service.js b/public/js/app/cart/services/cart-service.js new file mode 100644 index 000000000..a898f6542 --- /dev/null +++ b/public/js/app/cart/services/cart-service.js @@ -0,0 +1,365 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.cart') + + .factory('CartSvc', ['$rootScope', 'CartREST', 'ProductSvc', 'AccountSvc', '$q', 'GlobalData', + function ($rootScope, CartREST, ProductSvc, AccountSvc, $q, GlobalData) { + + // Prototype for outbound "update cart item" call + var Item = function (product, price, qty) { + this.product = { + id: product.id + }; + if (product.images) { + this.product.images = product.images; + } + else if (product.media) { + this.product.images = product.media; + } + this.price = price; + this.quantity = qty; + }; + + // Prototype for cart as used in UI + var Cart = function () { + this.items = []; + this.totalUnitsCount = 0; + this.subTotalPrice = {}; + this.subTotalPrice.amount = 0; + this.totalPrice = {}; + this.totalPrice.amount = 0; + this.id = null; + }; + + // application scope cart instance + var cart = {}; + + /** Ensure there is a cart associated with the current session. + * Returns a promise for the existing or newly created cart. Cart will only contain the id. + * (Will create a new cart if the current cart hasn't been persisted yet). + */ + function getOrCreateCart() { + var deferredCart = $q.defer(); + // Use copy of cart from local scope if it exists - don't want to use same instance because we don't want + // data binding + if (cart.id) { + deferredCart.resolve({ cartId: cart.id }); + } else { + + var newCart = {}; + var accPromise = AccountSvc.getCurrentAccount(); + accPromise.then(function (successAccount) { + newCart.customerId = successAccount.id; + }); + accPromise.finally(function () { + newCart.currency = GlobalData.getCurrencyId(); + newCart.siteCode = GlobalData.getSiteCode(); + CartREST.Cart.all('carts').post(newCart).then(function (response) { + cart.id = response.cartId; + deferredCart.resolve({ cartId: cart.id }); + }, function () { + deferredCart.reject(); + }); + }); + } + return deferredCart.promise; + } + + + /** Retrieves the current cart state from the service, updates the local instance + * and fires the 'cart:updated' event.*/ + function refreshCart(cartId, updateSource, closeCartAfterTimeout) { + + var defCart = $q.defer(); + var defCartTemp = $q.defer(); + + var params = { siteCode: GlobalData.getSiteCode() }; + + CartREST.Cart.one('carts', cartId).get(params).then(function (response) { + cart = response.plain(); + if (cart.siteCode !== GlobalData.getSiteCode()) { + CartREST.Cart.one('carts', cart.id).one('changeSite').customPOST({ siteCode: GlobalData.getSiteCode() }).finally(function () { + if (!!GlobalData.customerAccount) { + + params = angular.extend(params, { customerId: GlobalData.customerAccount.customerNumber }); + + CartREST.Cart.one('carts', cartId).get(params).then(function (response) { + cart = response.plain(); + defCartTemp.resolve(cart); + }, function () { + defCartTemp.reject(); + }); + } + else { + CartREST.Cart.one('carts', cartId).get(params).then(function (response) { + cart = response.plain(); + defCartTemp.resolve(cart); + }, function () { + defCartTemp.reject(); + }); + } + }); + + } else { + defCartTemp.resolve(cart); + } + defCartTemp.promise.then(function (curCart) { + defCart.resolve(curCart); + + }, function () { + cart.error = true; + }); + + }, function (response) { + cart = {}; + if (!response || response.status !== 404) { + cart.error = true; + } + else { + console.warn('Could not find cart. A new cart will be created when the user adds an item.'); + } + defCart.resolve(cart); + }); + defCart.promise.then(function () { + $rootScope.$emit('cart:updated', { cart: cart, source: updateSource, closeAfterTimeout: closeCartAfterTimeout }); + }); + return defCart.promise; + } + + function mergeAnonymousCartIntoCurrent(anonCart) { + if (anonCart && anonCart.id) { + // merge anon cart into user cart + CartREST.Cart.one('carts', cart.id).one('merge').customPOST({ carts: [anonCart.id] }).then(function () { + // merge anonymous cart - will change currency if needed + refreshCart(cart.id, 'merge'); + }, function () { + cart.error = true; + }); + } else { + // scope is already equivalent to latest user cart + if (cart.siteCode !== GlobalData.getSiteCode()) { + if (cart.id) { + refreshCart(cart.id, 'site'); + } + } else { + $rootScope.$emit('cart:updated', { cart: cart }); + } + } + } + + /** Creates a new Cart Item. If the cart hasn't been persisted yet, the + * cart is created first. + */ + function createCartItem(product, prices, qty, config) { + + var closeCartAfterTimeout = (!_.isUndefined(config.closeCartAfterTimeout)) ? config.closeCartAfterTimeout : undefined; + var cartUpdateMode = (!config.opencartAfterEdit) ? 'auto' : 'manual'; + + var createItemDef = $q.defer(); + getOrCreateCart().then(function (cartResult) { + + var price = { 'priceId': prices[0].priceId, 'effectiveAmount': prices[0].effectiveAmount, 'originalAmount': prices[0].originalAmount, 'currency': prices[0].currency }; + + var item = new Item(product, price, qty); + + CartREST.Cart.one('carts', cartResult.cartId).all('items').post(item).then(function () { + refreshCart(cartResult.cartId, cartUpdateMode, closeCartAfterTimeout); + createItemDef.resolve(); + }, function () { + refreshCart(cart.id, cartUpdateMode, closeCartAfterTimeout); + createItemDef.reject(); + }); + + }, function () { + createItemDef.reject(); + }); + return createItemDef.promise; + } + + /* + TODO: + this function is only necessary because the cart mashup does not directly consume the coupon as + it is returned from the coupon service. That may change in the future + */ + function parseCoupon(coupon) { + if (coupon.discountType === 'ABSOLUTE') { + coupon.amount = coupon.discountAbsolute.amount; + coupon.currency = coupon.discountAbsolute.currency; + } + else if (coupon.discountType === 'PERCENT') { + coupon.discountRate = coupon.discountPercentage; + coupon.currency = GlobalData.getCurrencyId(); + } + + return coupon; + } + + return { + + /** + * Creates a new Cart instance that does not have an ID. + * This will prompt the creation of a new cart once items are added to the cart. + * Should be invoked once an existing cart has been successfully submitted to checkout. + */ + resetCart: function () { + cart = new Cart(); + $rootScope.$emit('cart:updated', { cart: cart, source: 'reset' }); + }, + + /** Returns the cart as stored in the local scope - no GET is issued.*/ + getLocalCart: function () { + return cart; + }, + + /** + * Retrieves the current cart's state from service and returns a promise over that cart. + */ + getCart: function () { + return refreshCart(cart.id ? cart.id : null); + }, + + /** + * Retrieve any existing cart that there might be for an authenticated user, and merges it with + * any content in the current cart. + */ + refreshCartAfterLogin: function (customerId) { + // store existing anonymous cart + var anonCart = cart; + + // retrieve any cart associated with the authenticated user + CartREST.Cart.one('carts', null).get({ customerId: customerId, siteCode: GlobalData.getSiteCode() }).then(function (authUserCart) { + // there is an existing cart - update scope instance + cart = authUserCart.plain(); + mergeAnonymousCartIntoCurrent(anonCart); + }, function () { + // no existing user cart + if (anonCart && anonCart.id) { + // create new cart for customer so anon cart can be merged into it + cart = { customerId: customerId, currency: GlobalData.getCurrencyId(), siteCode: GlobalData.getSiteCode() }; + + CartREST.Cart.all('carts').post(cart).then(function (newCartResponse) { + cart.id = newCartResponse.cartId; + mergeAnonymousCartIntoCurrent(anonCart); + }, function () { + cart.error = true; + console.error('new cart creation failed'); + }); + } else { // anonymous cart was never created + // just use empty cart - customer-specific cart will be created once first item is added + cart = {}; + cart.currency = GlobalData.getCurrencyId(); + cart.siteCode = GlobalData.getSiteCode(); + } + }); + }, + + /** Persists the cart instance via PUT request (if qty > 0). Then, reloads that cart + * from the API for consistency and in order to display the updated calculations (line item totals, etc). + * @return promise to signal success/failure*/ + updateCartItem: function (item, qty, config) { + var closeCartAfterTimeout = (!_.isUndefined(config.closeCartAfterTimeout)) ? config.closeCartAfterTimeout : undefined; + var cartUpdateMode = (!config.opencartAfterEdit) ? 'auto' : 'manual'; + var updateDef = $q.defer(); + if (qty > 0) { + var cartItem = new Item(item.product, item.price, qty); + CartREST.Cart.one('carts', cart.id).all('items').customPUT(cartItem, item.id).then(function () { + refreshCart(cart.id, cartUpdateMode, closeCartAfterTimeout); + updateDef.resolve(); + }, function () { + angular.forEach(cart.items, function (it) { + if (item.id === it.id) { + item.error = true; + } + }); + updateDef.reject(); + }); + } + return updateDef.promise; + }, + + /** + * Removes a product from the cart, issues a PUT, and then a GET for the updated information. + * @param productId + */ + removeProductFromCart: function (itemId) { + CartREST.Cart.one('carts', cart.id).one('items', itemId).customDELETE().then(function () { + refreshCart(cart.id, 'manual'); + }, function () { + angular.forEach(cart.items, function (item) { + if (item.id === itemId) { + item.error = true; + } + }); + }); + }, + + /* + * Adds a product to the cart, updates the cart (PUT) and then retrieves the updated + * cart information (GET). + * @param product to add + * @param productDetailQty quantity to add + * @param closeCartAfterTimeout if the + * @return promise over success/failure + */ + addProductToCart: function (product, prices, productDetailQty, config) { + if (productDetailQty > 0) { + var item = null; + for (var i = 0; cart.items && i < cart.items.length; i++) { + item = cart.items[i]; + if (product.id === item.product.id) { + var qty = item.quantity + productDetailQty; + return this.updateCartItem(item, qty, config); + } + } + return createCartItem(product, prices, productDetailQty, config); + } else { + return $q.when({}); + } + }, + + redeemCoupon: function (coupon, cartId) { + coupon = parseCoupon(coupon); + return CartREST.Cart.one('carts', cartId).customPOST(coupon, 'discounts').then(function() { + refreshCart(cartId, 'manual'); + }); + }, + + removeAllCoupons: function (cartId) { + return CartREST.Cart.one('carts', cartId).all('discounts').remove().then(function () { + refreshCart(cartId, 'manual'); + }); + }, + + getCalculateTax: function () { + if (!!cart && !!cart.countryCode && !!cart.zipCode) { + return { + countryCode: cart.countryCode, + zipCode: cart.zipCode, + taxCalculationApplied: true + }; + } + return { taxCalculationApplied: false }; + }, + + setCalculateTax: function (zipCode, countryCode, cartId) { + return CartREST.Cart.one('carts', cartId).customPUT({ zipCode: zipCode, countryCode: countryCode }, '').then(function () { + refreshCart(cartId, 'manual'); + }); + } + + + }; + + }]); diff --git a/public/js/app/cart/templates/cart-costs.html b/public/js/app/cart/templates/cart-costs.html new file mode 100644 index 000000000..fa5c3f233 --- /dev/null +++ b/public/js/app/cart/templates/cart-costs.html @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{{'EST_ORDER_TOTAL' | translate}}{{cart.totalPrice.amount | currency: currencySymbol}}
+ {{'SUBTOTAL' | translate}} ( {{cart.totalUnitsCount || 0}} {{'ITEM' | translate}}{{cart.totalUnitsCount == 1 ? '' :'s'}} ) + + {{cart.subTotalPrice.amount | currency: currencySymbol}} +
{{'DISCOUNT' | translate}} + -{{cart.totalDiscount.amount | currency: currencySymbol}} +
{{'SHIPPING' | translate}}{{ cart.shippingCost.amount | currency: currencySymbol }}
{{cart.totalTax.amount | currency: currencySymbol}}
+ +
+ + + +
+ {{'ESTIMATE_TAX_ERROR'|translate}} +
{{'TAX' | translate}} + {{cart.totalTax.amount | currency: currencySymbol}} +
\ No newline at end of file diff --git a/public/js/app/cart/templates/cart.html b/public/js/app/cart/templates/cart.html new file mode 100644 index 000000000..9168f9946 --- /dev/null +++ b/public/js/app/cart/templates/cart.html @@ -0,0 +1,81 @@ + +
+
+
+ +
+
+ + +
+
+
+ {{'CART_EMPTY' | translate}} +
+
+ {{'CART_UNAVAILABLE' | translate}} +
+
+
+ + +
+
+ +
+
+ +
+
+ {{'CART_ITEM_UPDATE_ERROR' | translate}} +
+
+
+ +
+
+
+
+
{{item.product.name}}
+
{{'ITEM_PRICE' | translate}}: {{item.price.effectiveAmount | currency: currencySymbol}}
+
+
+ +
+ +
+
+
+
{{'TOTAL_PRICE' | translate}}: {{ item.itemPrice.amount || 0 | currency: currencySymbol}}
+ +
+
+ +
+ +
+
+
+
+ +
+
+
diff --git a/public/js/app/checkout/checkout-index.js b/public/js/app/checkout/checkout-index.js new file mode 100644 index 000000000..80792a5ec --- /dev/null +++ b/public/js/app/checkout/checkout-index.js @@ -0,0 +1,18 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; +/** Module related to checkout view.*/ +angular.module('ds.checkout', [ + 'ds.cart', + 'vr.StripeJS' +]); \ No newline at end of file diff --git a/public/js/app/checkout/controllers/checkout-base-ctrl.js b/public/js/app/checkout/controllers/checkout-base-ctrl.js new file mode 100644 index 000000000..650db5e18 --- /dev/null +++ b/public/js/app/checkout/controllers/checkout-base-ctrl.js @@ -0,0 +1,58 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.checkout') +/** Purpose of this controller is to "glue" the data models of cart and shippingCost into the order details view.*/ + .controller('CheckoutBaseCtrl', ['$scope', '$rootScope', 'CartSvc', '$q', + function ($scope, $rootScope, CartSvc, $q) { + + $scope.cart = CartSvc.getLocalCart(); + $scope.updatedCartItems = []; + + //Event Proceed to Checkout + $scope.$emit('checkout:opened', $scope.cart); + + //Make background not scrollable when the user opens edit cart + $rootScope.checkoutCartEditVisible = false; + + var totalPrice = 0; + + $scope.showEditCart = function () { + $scope.cart = CartSvc.getLocalCart(); + totalPrice = $scope.cart.totalPrice.amount; + $rootScope.checkoutCartEditVisible = true; + }; + $scope.hideEditCart = function () { + $rootScope.checkoutCartEditVisible = false; + + $q.all($scope.updatedCartItems).then(function () { + //If the mobile navigation is shown that means there are steps in checkout process + //Check if the subtotal value when opened edit cart is the different when closed + // (there are changes to cart) + + CartSvc.getCart().then(function (cart){ + if(!$rootScope.showMobileNav && totalPrice !== cart.totalPrice.amount){ + //call method that will check if needed to redirect to step2 in mobile + $scope.$broadcast('goToStep2'); + } + }); + + }, function () { + //Something went wrong, show error to user + }); + + + }; + + }]); diff --git a/public/js/app/checkout/controllers/checkout-cart-ctrl.js b/public/js/app/checkout/controllers/checkout-cart-ctrl.js new file mode 100644 index 000000000..1052cb8e8 --- /dev/null +++ b/public/js/app/checkout/controllers/checkout-cart-ctrl.js @@ -0,0 +1,35 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.checkout') +/** Purpose of this controller is to "glue" the data models of cart and shippingCost into the order details view.*/ + .controller('CheckoutCartCtrl', ['$scope', '$rootScope', 'cart', 'shippingCost', 'GlobalData', + function ($scope, $rootScope, cart, shippingCost, GlobalData) { + + cart = $scope.cart; + $scope.currencySymbol = GlobalData.getCurrencySymbol(cart.currency); + $scope.shippingCost = shippingCost.price[GlobalData.getCurrencyId()]; + + $scope.taxConfiguration = GlobalData.getCurrentTaxConfiguration(); + + var unbind = $rootScope.$on('cart:updated', function (eve, eveObj) { + $scope.cart = eveObj.cart; + $scope.currencySymbol = GlobalData.getCurrencySymbol($scope.cart.currency); + $scope.shippingCost = shippingCost.price[GlobalData.getCurrencyId()]; + $scope.taxConfiguration = GlobalData.getCurrentTaxConfiguration(); + }); + + $scope.$on('$destroy', unbind); + + }]); diff --git a/public/js/app/checkout/controllers/checkout-ctrl.js b/public/js/app/checkout/controllers/checkout-ctrl.js new file mode 100644 index 000000000..2f6fd72c8 --- /dev/null +++ b/public/js/app/checkout/controllers/checkout-ctrl.js @@ -0,0 +1,500 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.checkout') +/** + * This is the controller for the checkout view, which includes the order form as well as a view of the cart. + * + * The scope provides access to the data models "order" and "cart", as well as some properties to control display + * of errors. + * + * In the checkout HTML, the "steps" are created by using nested forms which can be individually validated. + * + * The wizard directive defined in mobileCheckoutWizard does not come into play in full screen mode. Required fields + * are checked and enforced when the user indicates "submit". + * + * The controller also includes logic to copy the bill-to address to the ship-to address if that's what the user has indicated. + * + * This version assumes that payment processing and pre-validation is done through Stripe. + * + * While the order is processing (both Stripe validation and order API call), the submit button is disabled. + * On success, the order confirmation page is shown. On failure, an error message is displayed and the submit button + * is re-enabled so that the user can make changes and resubmit if needed. + * + * */ + .controller('CheckoutCtrl', ['$rootScope', '$scope', '$location', '$anchorScroll', 'CheckoutSvc','cart', 'order', '$state', '$modal', 'AuthSvc', 'AccountSvc', 'AuthDialogManager', 'shippingCost', 'GlobalData', + function ($rootScope, $scope, $location, $anchorScroll, CheckoutSvc, cart, order, $state, $modal, AuthSvc, AccountSvc, AuthDialogManager, shippingCost, GlobalData) { + + $scope.order = order; + + //Resolve in the ui.router state returns cart object, problem is when the user is loged in + //Then in the configuration service the CartSvc.refreshCartAfterLogin(account.id); is called, and + //this method changes cart. That is the reason cart was empty on refresh + //With this implementation we are getting the cart object from service after it is loaded + cart = $scope.cart; + + $scope.shippingCosts = shippingCost || 0; // temporary handling of shipping cost not being set - default to zero + $scope.currencySymbol = GlobalData.getCurrencySymbol(cart.currency); + $scope.order.shippingCost = shippingCost.price[GlobalData.getCurrencyId()]; + $scope.user = GlobalData.user; + $scope.addresses = []; + + var shouldAutoUpdateName = true; + + var Wiz = function () { + this.step1Done = false; + this.step2Done = false; + this.step3Done = false; + this.shipToSameAsBillTo = true; + // credit card expiration year drop-down - go 10 years out + this.years = []; + for (var year = new Date().getFullYear(), i = year, stop = year + 10; i < stop; i++) { + this.years.push(i); + } + this.months = ['01','02','03','04','05','06','07','08','09','10','11','12']; + + }; + + $scope.wiz = new Wiz(); + + var selectedBillingAddress, selectedShippingAddress; + var addressModalInstance; + + $scope.order.account = {}; + + $scope.shipToSameAsBillTo = true; + + window.scrollTo(0, 0); + + var unbind = $rootScope.$on('cart:updated', function (eve, eveObj) { + $scope.cart = eveObj.cart; + $scope.currencySymbol = GlobalData.getCurrencySymbol($scope.cart.currency); + }); + + $scope.$on('$destroy', unbind); + + var getDefaultAddress = function (addresses) { + return _.find(addresses, function (addr) { + return addr.isDefault; + }); + }; + + var populateBillTo = function(address){ + $scope.order.billTo.id = address.id; + $scope.order.billTo.contactName = address.contactName; + $scope.order.billTo.companyName = address.companyName; + $scope.order.billTo.address1 = address.street; + $scope.order.billTo.address2 = address.streetAppendix; + + //checkout requires 2 character country codes + if (address.country === 'USA') { + address.country = 'US'; + } + $scope.order.billTo.country = address.country; + $scope.order.billTo.city = address.city; + $scope.order.billTo.state = address.state; + $scope.order.billTo.zip = address.zipCode; + $scope.order.billTo.contactPhone = address.contactPhone; + + $scope.$emit('localizedAddress:updated', address.country, 'billing'); + }; + + var getAddresses = function() { + if(AuthSvc.isAuthenticated()) { + AccountSvc.getAddresses().then(function (response) { + if (response.length) { + shouldAutoUpdateName = false; + var defaultAddress = getDefaultAddress(response); + $scope.addresses = response; + selectedBillingAddress = defaultAddress; + selectedShippingAddress = defaultAddress; + populateBillTo(defaultAddress); + } + /* + populate name if the user has no default address but does have a name saved to the account + */ + else if ($scope.order.account) { + var fullName = ''; + if ($scope.order.account.firstName) { + shouldAutoUpdateName = false; + fullName = fullName + $scope.order.account.firstName + ' '; + } + if ($scope.order.account.middleName) { + fullName = fullName + $scope.order.account.middleName + ' '; + } + if ($scope.order.account.lastName) { + fullName = fullName + $scope.order.account.lastName; + } + $scope.order.billTo.contactName = fullName; + } + }); + } + }; + + var getAccount = function() { + AccountSvc.account().then(function(account) { + $scope.order.account.email = account.contactEmail; + $scope.order.account.title = account.title; + $scope.order.account.firstName = account.firstName; + $scope.order.account.middleName = account.middleName; + $scope.order.account.lastName = account.lastName; + }); + }; + + $scope.$on('user:signedin', function() { + getAccount(); + getAddresses(); + }); + + if (GlobalData.user.isAuthenticated) { + getAccount(); + } + getAddresses(); + + + $scope.badEmailAddress = false; + + // if this flag is enabled, missing required fields will be shown in error + $scope.showPristineErrors = false; + + // Message shown around submit button to inform the user of validation and processing status + $scope.message = null; + + $scope.submitIsDisabled = false; + + // Configure modal "spinner" to block input during checkout processing + var ssClass = 'order-processing-dialog', + modal = { + instance: null, + spinner: null, + open: function(configuration) { + var self = this; + this.spinner = this.spinner || new Spinner(configuration).spin(); + this.instance = $modal.open(configuration); + this.instance.opened.then(function() { + setTimeout(function() { + $('.' + ssClass + ' .spinner').append(self.spinner.el); + }, 10); + }); + }, + close: function() { + this.spinner.stop(); + this.instance.dismiss('cancel'); + } + }; + + /** Mark mobile wizard step 1 "done" - bill-to address information has been entered.*/ + $scope.billToDone = function (billToFormValid, form) { + $scope.$broadcast('submitting:form', form); + if (billToFormValid) { + $scope.wiz.step1Done = true; + $scope.showPristineErrors = false; + // guarantee correct scrolling for mobile + $location.hash('step2'); + $anchorScroll(); + } else { + $scope.showPristineErrors = true; + } + }; + + /** Mark mobile wizard step 2 "done" - the ship-to address has been entered.*/ + $scope.shipToDone = function (shipToFormValid, form) { + $scope.$broadcast('submitting:form', form); + // if the ship to form fields are hidden, angular considers them empty - work around that: + if (shipToFormValid || $scope.wiz.shipToSameAsBillTo) { + $scope.wiz.step2Done = true; + $scope.showPristineErrors = false; + // guarantee correct scrolling for mobile + $location.hash('step3'); + $anchorScroll(); + } else { + $scope.showPristineErrors = true; + } + }; + + /** Mark mobile wizard step 3 "done" - the payment information has been entered.*/ + $scope.paymentDone = function (paymentFormValid, form) { + $scope.$broadcast('submitting:form', form); + if (paymentFormValid) { + $scope.wiz.step3Done = true; + // guarantee correct scrolling for mobile + $location.hash('step4'); + $anchorScroll(); + } else { + $scope.showPristineErrors = true; + } + + }; + + /** Mobile wizard - edit bill-do and mark subsequent steps as undone.*/ + $scope.editBillTo = function () { + $scope.wiz.step1Done = false; + $scope.wiz.step2Done = false; + $scope.wiz.step3Done = false; + }; + + /** Mobile wizard - edit ship-to and mark subsequent steps as undone.*/ + $scope.editShipTo = function () { + $scope.wiz.step2Done = false; + $scope.wiz.step3Done = false; + }; + + /** Mobile wizard - edit payment information.*/ + $scope.editPayment = function () { + $scope.wiz.step3Done = false; + }; + + /** Copy bill-to information to the ship-to properties.*/ + var setShipToSameAsBillTo = function () { + angular.copy($scope.order.billTo, $scope.order.shipTo); + selectedShippingAddress = $scope.order.shipTo; + $scope.$emit('localizedAddress:updated', selectedShippingAddress.country, 'shipping'); + }; + + var clearShipTo = function(){ + selectedShippingAddress = {}; + $scope.order.shipTo = {}; + if ($scope.order.billTo.country) { + $scope.order.shipTo.country = $scope.order.billTo.country; + } + $scope.shipToSameAsBillTo = false; + }; + + $scope.toggleShipToSameAsBillTo = function(){ + if($scope.shipToSameAsBillTo){ + setShipToSameAsBillTo(); + } else { + clearShipTo(); + } + }; + + /** Reset any error messaging related to the credit card expiration date.*/ + $scope.resetExpDateErrors = function () { + $scope.checkoutForm.paymentForm.expDateMsg = ''; + $scope.checkoutForm.paymentForm.expMonth.$setValidity('validation', true); + $scope.checkoutForm.paymentForm.expYear.$setValidity('validation', true); + $scope.message = ''; + }; + + /** Reset any error flagging as it pertains to a particular form field. + * @param field form field name + */ + $scope.resetErrorMsg = function (field) { + field.$setValidity('validation', true); + field.msg = ''; + $scope.message = ''; + }; + + + /** Returns true if the error indicates a Stripe validation error pertaining to a credit card information input field. + * @param error */ + function isFieldAttributableStripeError(error) { + return error.code.indexOf('number') !== -1 || + error.code.indexOf('month') !== -1 || + error.code.indexOf('year') !== -1 || + error.code.indexOf('cvc') !== -1; + } + + /** Assigns an error message to a particular credit card information input field. + * @param error message + */ + function attributeStripeFieldError(error) { + if (error.code.indexOf('number') !== -1) { + $scope.checkoutForm.paymentForm.ccNumber.$setValidity('validation', false); + $scope.checkoutForm.paymentForm.ccNumber.msg = error.message; + } else if (error.code.indexOf('month') !== -1 || error.code.indexOf('year') !== -1) { + $scope.checkoutForm.paymentForm.expMonth.$setValidity('validation', false); + $scope.checkoutForm.paymentForm.expYear.$setValidity('validation', false); + $scope.checkoutForm.paymentForm.expDateMsg = 'INVALID_EXPIRATION_DATE'; + + } else if (error.code.indexOf('cvc') !== -1) { + $scope.checkoutForm.paymentForm.cvc.$setValidity('validation', false); + $scope.checkoutForm.paymentForm.cvc.msg = error.message; + } + } + + /** Handles display and state following a Stripe validation error. + * @param error message + */ + function onStripeValidationFailure(error) { + + var msg = error.message; + if (error.type === 'card_error') { + if (error.code && isFieldAttributableStripeError(error)) { + msg = 'PLEASE_CORRECT_ERRORS'; + attributeStripeFieldError(error); + } + } + else if (error.type === 'payment_token_error') { + msg = 'Server error - missing payment configuration key. Please try again later.'; + } else { + console.error('Stripe validation failed: ' + JSON.stringify(error)); + msg = 'Not able to pre-validate payment at this time.'; + } + $scope.message = msg; + $scope.submitIsDisabled = false; + if ($scope.$root.$$phase !== '$apply' && $scope.$root.$$phase !== '$digest') { + $scope.$apply(); + } + modal.close(); + } + + + /** Show error message after failed checkout, re-enable the submit button and reset any wait cursor/splash screen. + * @param error message*/ + function onCheckoutFailure (error) { + + $scope.message = error; + $scope.submitIsDisabled = false; + modal.close(); + } + + /** Advances the application state to the confirmation page. */ + var checkoutSuccessHandler = function goToConfirmationPage(order) { + + var piwikOrderDetails = { + orderId: order.orderId, + cart: $scope.cart + }; + //Send data to piwik + $rootScope.$emit('order:placed', piwikOrderDetails); + + //Reset cart + CheckoutSvc.resetCart(); + + modal.close(); + $state.go('base.confirmation', {orderId: order.orderId}); + }; + + /** Handles a failed "checkout"/order submission event. */ + var checkoutErrorHandler = function (error) { + if (error.type === CheckoutSvc.ERROR_TYPES.order) { + onCheckoutFailure(error.error); + } else if (error.type === CheckoutSvc.ERROR_TYPES.stripe) { + onStripeValidationFailure(error.error); + } + }; + + /** Validates that the form is in a valid state, and if it is, + * delegates to the CheckoutSvc to process the order. If the checkout is successful, + * the user will be routed to the confirmation page. If unsuccessful, errors will be displayed to the user. + * @param formValid flag indicating whether or not the form is in valid state. + * @param form name - used to raise event for inline-error-input directive + */ + $scope.placeOrder = function (formValid, form) { + $scope.message = null; + $scope.$broadcast('submitting:form', form); + if (formValid) { + modal.open({ + templateUrl: 'js/app/checkout/templates/order-processing-splash-screen.html', + windowClass: ssClass, + top: '60%' + }); + + $scope.submitIsDisabled = true; + if ($scope.shipToSameAsBillTo) { + setShipToSameAsBillTo(); + } + $scope.order.cart = $scope.cart; + + CheckoutSvc.checkout($scope.order).then(checkoutSuccessHandler, checkoutErrorHandler); + + } else { + $scope.showPristineErrors = true; + $scope.message = 'PLEASE_CORRECT_ERRORS'; + // Important debug for dynamic form validation. + // console.log('BILLTO:',$scope.billToForm.$error.required); + // console.log('SHIPTO:',$scope.shipToForm.$error.required); + } + }; + + $scope.selectAddress = function(address, target) { + if (target === $scope.order.billTo) { + selectedBillingAddress = address; + $scope.$emit('localizedAddress:updated', address.country, 'billing'); + } + else if (target === $scope.order.shipTo) { + selectedShippingAddress = address; + $scope.$emit('localizedAddress:updated', address.country, 'shipping'); + } + addressModalInstance.close(); + + target.id = address.id; + target.contactName = address.contactName; + target.companyName = address.companyName; + target.address1 = address.street; + target.address2 = address.streetAppendix; + target.country = address.country; + target.city = address.city; + target.state = address.state; + target.zip = address.zipCode; + target.contactPhone = address.contactPhone; + + if(target === $scope.order.billTo && ($scope.shipToSameAsBillTo === true || _.isEmpty($scope.order.shipTo))){ + setShipToSameAsBillTo(); + } + $scope.shipToSameAsBillTo = _.isEqual($scope.order.billTo, $scope.order.shipTo); + }; + + $scope.openAddressDialog = function(target) { + addressModalInstance = $modal.open({ + templateUrl: './js/app/account/templates/addresses-dialog.html', + windowClass: 'addressBookModal', + scope: $scope, + resolve: { + addresses: ['AccountSvc', function(AccountSvc) { + return AccountSvc.getAddresses().then(function() { + $scope.isDialog = true; + $scope.showAddressDefault = 6; + $scope.showAddressFilter = $scope.showAddressDefault; + $scope.target = target; + }); + }] + } + }); + }; + + $scope.closeAddressDialog = function () { + addressModalInstance.close(); + }; + + $scope.$on('goToStep2', function(){ + if( $scope.wiz.step1Done && $scope.wiz.step2Done){ + $scope.wiz.step2Done = false; + $scope.wiz.step3Done = false; + $location.hash('step2'); + $anchorScroll(); + } + }); + + $scope.updateAddressName = function () { + $scope.$broadcast('myDetails:change', $scope.billToForm); + if (shouldAutoUpdateName) { + var fullName = ''; + if ($scope.order.account.firstName) { + fullName = fullName + $scope.order.account.firstName + ' '; + } + if ($scope.order.account.middleName) { + fullName = fullName + $scope.order.account.middleName + ' '; + } + if ($scope.order.account.lastName) { + fullName = fullName + $scope.order.account.lastName; + } + + $scope.order.billTo.contactName = fullName; + } + }; + + + }]); diff --git a/public/js/app/checkout/controllers/checkout-edit-cart-ctrl.js b/public/js/app/checkout/controllers/checkout-edit-cart-ctrl.js new file mode 100644 index 000000000..fa551845f --- /dev/null +++ b/public/js/app/checkout/controllers/checkout-edit-cart-ctrl.js @@ -0,0 +1,52 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.checkout') +/** Purpose of this controller is to "glue" the data models of cart and shippingCost into the order details view.*/ + .controller('CheckoutEditCartCtrl', ['$scope', '$rootScope', 'CartSvc', 'GlobalData', + function ($scope, $rootScope, CartSvc, GlobalData) { + + $scope.taxConfiguration = GlobalData.getCurrentTaxConfiguration(); + + var unbind = $rootScope.$on('cart:updated', function (eve, eveObj) { + $scope.cart = eveObj.cart; + $scope.currencySymbol = GlobalData.getCurrencySymbol($scope.cart.currency); + $scope.taxConfiguration = GlobalData.getCurrentTaxConfiguration(); + }); + + $scope.$on('$destroy', unbind); + + /** Remove a product from the cart. + * @param cart item id + * */ + $scope.removeProductFromCart = function (itemId) { + CartSvc.removeProductFromCart(itemId); + }; + + + /** + * Issues an "update cart" call to the service or removes the item if the quantity is undefined or zero. + */ + $scope.updateCartItem = function (item, itemQty, config) { + var promise; + if (itemQty > 0) { + promise = CartSvc.updateCartItem(item, itemQty, config); + } + else if (!itemQty || itemQty === 0) { + promise = CartSvc.removeProductFromCart(item.id); + } + $scope.updatedCartItems.push(promise); + }; + + }]); diff --git a/public/js/app/checkout/directives/address-decorator.js b/public/js/app/checkout/directives/address-decorator.js new file mode 100644 index 000000000..c26363249 --- /dev/null +++ b/public/js/app/checkout/directives/address-decorator.js @@ -0,0 +1,38 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.checkout') +/** + * address-decorator + * + * adds the 'selected' attribute to the currently selected address and removes it from other addresses, thereby adding + * a check mark next to the selected address + */ + .directive('addressDecorator',[function(){ + return { + restrict: 'A', + link: function(scope) { + angular.forEach(scope.addresses, function (addr) { + if (scope.target && scope.target.id) { + if (addr.id && addr.id === scope.target.id) { + addr.selected = true; + } + else { + addr.selected = false; + } + } + }); + } + }; + }]); \ No newline at end of file diff --git a/public/js/app/checkout/directives/inline-error-input.js b/public/js/app/checkout/directives/inline-error-input.js new file mode 100644 index 000000000..33ade44a7 --- /dev/null +++ b/public/js/app/checkout/directives/inline-error-input.js @@ -0,0 +1,191 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.checkout') +/** + * inline-error-input + * "Required" errors are displayed within the input fields. Other errors are showed in the tooltip. + * When user focuses input field + * which contains the error the original input is shown. + * @return {Object} + */ + .directive('inlineErrorInput',['GlobalData', '$translate', function(GlobalData, $translate){ + return { + restrict: 'A', + require: 'ngModel', + link: function(scope, element, attrs, ngModel) { + var fieldRequired = ''; + var fieldTooShort = ''; + var fieldsNotMatching = ''; + var detailChange = null; + + $translate('FIELD_REQUIRED').then(function (translatedValue) { + fieldRequired = translatedValue; + }); + $translate('FIELD_TOO_SHORT').then(function (translatedValue) { + fieldTooShort = translatedValue; + }); + $translate('FIELDS_NOT_MATCHING').then(function (translatedValue) { + fieldsNotMatching = translatedValue; + }); + // element's (input's) clone -> error input + // set type to text to allow displaying 'required' msg in numeric input fields + var elementClone = element.clone().attr('type', 'text'), + submitted = false, + onInputFocus = function() { + elementClone.hide(); + elementClone.attr('value', ''); + element.show(); + element.focus(); + }, + onInputBlur = function() { + if (!ngModel.$pristine || submitted) { + validate(); + } + }, + onInputChanged = function(){ // for select boxes + if (!ngModel.$pristine || submitted) { + validate(); + } + }, + getErrorMessages = function() { + + var errorMsgs = { + 'inlineErrorMsgs': [] + }, + errorsJSON = []; + // "required" errors don't show in conjunction with Stripe validation, so performing + // separate check here: + if(attrs.required && !ngModel.value){ + errorMsgs.inlineErrorMsgs.push(attrs.inlineErrorInputRequiredMessage || fieldRequired); + } + angular.forEach(ngModel.$error, function (value, key) { + errorsJSON.push(key); + }); + for(var errorKey in errorsJSON) { + switch(errorsJSON[errorKey]) { + + case 'minlength': + if (ngModel.$error.minlength) { + errorMsgs.inlineErrorMsgs.push(attrs.inlineErrorInputMinLengthMessage || fieldTooShort); + } + break; + case 'equal': + if (ngModel.$error.equal) { + errorMsgs.inlineErrorMsgs.push(attrs.inlineErrorInputEqualMessage || fieldsNotMatching); + } + break; + } + } + return errorMsgs; + }, + validate = function() { + scope.message = ''; + + if (ngModel.$invalid) { + var errorMsgs = getErrorMessages(); + if (elementClone.is('select')) { + element.find('option[value=""]').text(errorMsgs.inlineErrorMsgs.join(', ')); + } else { + if(errorMsgs.inlineErrorMsgs.length > 0) { + elementClone.attr('value', errorMsgs.inlineErrorMsgs.join(', ')); + } + + if (!elementClone[0].value) { + elementClone.attr('value', element[0].value); + } + + elementClone.attr('class', element.attr('class')); + element.hide(); + elementClone.show(); + } + } + }; + + // equality check + if (attrs.inlineErrorInputEqual) { + var otherInput = element.inheritedData('$formController')[attrs.inlineErrorInputEqual]; + + ngModel.$parsers.push(function(value) { + if(value === otherInput.$viewValue) { + ngModel.$setValidity('equal', true); + return value; + } + ngModel.$setValidity('equal', false); + }); + + otherInput.$parsers.push(function(value) { + ngModel.$setValidity('equal', value === ngModel.$viewValue); + return value; + }); + } + + elementClone.addClass('error-input'); + elementClone.removeAttr('id'); + + if (element.is('select')) { + // Requires emptyOption(errors placeholder) in the markup + var emptyOption = element.find('option[value=""]'); + // firstChildCheck is a quirky work around angular select element with n-options + // which DO NOT register as option children on the select node - if this is an ng-options select, + // then there will be an empty default option + if (!emptyOption.length && emptyOption.getFirstChild) { + element.prepend(''); + } else { + emptyOption.data('original-label', emptyOption.html()); + } + element.on('change', function() { + emptyOption.html( element.val() !== '' ? emptyOption.data('original-label') || '' : getErrorMessages().join(', ') ); + }); + } + + + element.after(elementClone); + elementClone.hide(); + elementClone.on('focus', onInputFocus); + element.on('blur', onInputBlur); + element.on('change', onInputChanged); + var sfh = scope.$on('submitting:form', function(e, formName) { + submitted = true; + if (element.parents('[name="'+formName+'"]').length) { + validate(); + } + }); + + //when "my details" name changes, validate bill to contact name field + if (ngModel.$name === 'contactName') { + detailChange = scope.$on('myDetails:change', function(){ + elementClone.hide(); + elementClone.attr('value', ''); + element.show(); + }); + } + + scope.$watch(function() { return GlobalData.getLanguageCode(); }, function (currentLang, previousLang) { + if (currentLang && previousLang && currentLang !== previousLang) { + onInputChanged(); + } + }); + + scope.$on('$destroy', function() { + elementClone.off('focus', onInputFocus); + element.off('blur', onInputBlur); + sfh(); + if(detailChange){ + detailChange(); + } + }); + } + }; + }]); \ No newline at end of file diff --git a/public/js/app/checkout/directives/mobile-checkout-wizard.js b/public/js/app/checkout/directives/mobile-checkout-wizard.js new file mode 100644 index 000000000..71e0b1ed8 --- /dev/null +++ b/public/js/app/checkout/directives/mobile-checkout-wizard.js @@ -0,0 +1,108 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.checkout') +/** + * mobile-checkout-wizard + * + * This directive includes a checkout wizard for the mobile checkout process, which requires that information + * is filled out in segments ("steps"), and all subsequent steps are blocked from input until the required + * information has been provided for previous steps. If the user edits a previously completed step, all subsequent steps + * are marked "undone" again, and the user has to tab through the remaining steps to advance. Validation of + * required fields comes into play as the user attempts to advance to the next. If there are missing fields, + * the missing fields will be highlighted as errors, and the user cannot advance until the necessary information + * has been provided. + */ + .directive('mobileCheckoutWizard',['$location', '$anchorScroll', function($location, $anchorScroll){ + return { + restrict: 'A', + link: function(scope) { + var Wiz = function () { + this.step1Done = false; + this.step2Done = false; + this.step3Done = false; + // credit card expiration year drop-down - go 10 years out + this.years = []; + for (var year = new Date().getFullYear(), i = year, stop = year + 10; i < stop; i++) { + this.years.push(i); + } + this.months = ['01','02','03','04','05','06','07','08','09','10','11','12']; + + }; + + scope.wiz = new Wiz(); + + /** Mark mobile wizard step 1 "done" - bill-to address information has been entered.*/ + scope.billToDone = function (billToFormValid, form) { + scope.$broadcast('submitting:form', form); + if (billToFormValid) { + scope.wiz.step1Done = true; + scope.showPristineErrors = false; + // guarantee correct scrolling for mobile + $location.hash('step2'); + $anchorScroll(); + } else { + scope.showPristineErrors = true; + } + }; + + /** Mark mobile wizard step 2 "done" - the ship-to address has been entered.*/ + scope.shipToDone = function (shipToFormValid, form) { + scope.$broadcast('submitting:form', form); + // if the ship to form fields are hidden, angular considers them empty - work around that: + if (shipToFormValid || scope.shipToSameAsBillTo) { + scope.wiz.step2Done = true; + scope.showPristineErrors = false; + // guarantee correct scrolling for mobile + $location.hash('step3'); + $anchorScroll(); + } else { + scope.showPristineErrors = true; + } + }; + + /** Mark mobile wizard step 3 "done" - the payment information has been entered.*/ + scope.paymentDone = function (paymentFormValid, form) { + scope.$broadcast('submitting:form', form); + if (paymentFormValid) { + scope.wiz.step3Done = true; + // guarantee correct scrolling for mobile + $location.hash('step4'); + $anchorScroll(); + } else { + scope.showPristineErrors = true; + } + + }; + + /** Mobile wizard - edit bill-do and mark subsequent steps as undone.*/ + scope.editBillTo = function () { + scope.wiz.step1Done = false; + scope.wiz.step2Done = false; + scope.wiz.step3Done = false; + }; + + /** Mobile wizard - edit ship-to and mark subsequent steps as undone.*/ + scope.editShipTo = function () { + scope.wiz.step2Done = false; + scope.wiz.step3Done = false; + }; + + /** Mobile wizard - edit payment information.*/ + scope.editPayment = function () { + scope.wiz.step3Done = false; + }; + } + }; + }]); \ No newline at end of file diff --git a/public/js/app/checkout/services/checkout-rest.js b/public/js/app/checkout/services/checkout-rest.js new file mode 100644 index 000000000..841543550 --- /dev/null +++ b/public/js/app/checkout/services/checkout-rest.js @@ -0,0 +1,49 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +/** REST configuration for services related to checkout. */ +angular.module('ds.checkout') + .factory('CheckoutREST', ['Restangular', 'SiteConfigSvc', 'GlobalData', function(Restangular, siteConfig, GlobalData){ + return { + /** Configures main checkout API endpoint.*/ + Checkout: Restangular.withConfig(function(RestangularConfigurer) { + RestangularConfigurer.setBaseUrl(siteConfig.apis.checkout.baseUrl); + + RestangularConfigurer.addFullRequestInterceptor(function(element, operation, route, url, headers, params, httpConfig) { + return { + element: element, + params: params, + headers: _.extend(headers, {'accept-language': GlobalData.getAcceptLanguages()}), + httpConfig: httpConfig + }; + }); + }), + + /** Configures main shipping costs API endpoint.*/ + ShippingCosts: Restangular.withConfig(function(RestangularConfigurer) { + RestangularConfigurer.setBaseUrl(siteConfig.apis.shippingCosts.baseUrl); + RestangularConfigurer.addFullRequestInterceptor(function(element, operation, route, url, headers, params, httpConfig) { + + return { + element: element, + params: params, + headers: _.extend(headers, {'hybris-currency': GlobalData.getCurrencyId()}), + httpConfig: httpConfig + }; + }); + }) + }; + + + }]); \ No newline at end of file diff --git a/public/js/app/checkout/services/checkout-service.js b/public/js/app/checkout/services/checkout-service.js new file mode 100644 index 000000000..7e7e5db9a --- /dev/null +++ b/public/js/app/checkout/services/checkout-service.js @@ -0,0 +1,220 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.checkout') + /** The checkout service provides functions to pre-validate the credit card through Stripe, + * and to create an order. + */ + .factory('CheckoutSvc', ['CheckoutREST', 'StripeJS', 'CartSvc', 'settings', '$q', 'GlobalData', + function (CheckoutREST, StripeJS, CartSvc, settings, $q, GlobalData) { + + /** CreditCard object prototype */ + var CreditCard = function () { + this.number = null; + this.cvc = null; + this.expMonth = null; + this.expYear = null; + }; + + /** Order prototype for start of checkout.*/ + var DefaultOrder = function () { + this.shipTo = {}; + this.billTo = {}; + this.billTo.country = 'US'; + + this.payment = { + paymentId: 'stripe', + customAttributes: { + token: '' + } + }; + + this.creditCard = new CreditCard(); + }; + + /** Error types to distinguish between Stripe validation and order submission errors + * during checkout. */ + var ERROR_TYPES = { + stripe: 'STRIPE_ERROR', + order: 'ORDER_ERROR' + }; + + return { + + ERROR_TYPES: ERROR_TYPES, + + /** Returns a blank order for a clean checkout page.*/ + getDefaultOrder: function () { + return new DefaultOrder(); + }, + + /** Performs Stripe validation of the credit card, and if successful, + * creates a new order. + */ + checkout: function (order) { + + // the promise handle to the result of the transaction + var deferred = $q.defer(); + var stripeData = {}; + /* jshint ignore:start */ + var creditCard = order.creditCard; + stripeData.number = creditCard.number; + stripeData.exp_month = creditCard.expMonth; + stripeData.exp_year = creditCard.expYear; + stripeData.cvc = creditCard.cvc; + /* jshint ignore:end */ + + var self = this; + try { + + StripeJS.createToken(stripeData, function (status, response) { + + if (response.error) { + deferred.reject({ type: ERROR_TYPES.stripe, error: response.error }); + } else { + self.createOrder(order, response.id).then( + // success handler + function (order) { + + deferred.resolve(order); + }, + // error handler + function(errorResponse){ + var errMsg = ''; + + if(errorResponse.status === 500) { + errMsg = 'Cannot process this order because the system is unavailable. Try again at a later time.'; + } else { + errMsg = 'Order could not be processed.'; + if(errorResponse) { + if(errorResponse.status) { + errMsg += ' Status code: '+errorResponse.status+'.'; + } + if(errorResponse.data && errorResponse.data.details && errorResponse.data.details.length) { + angular.forEach(errorResponse.data.details, function (errorDetail) { + errMsg += ' ' + errorDetail.message; + }); + } + } + } + deferred.reject({ type: ERROR_TYPES.order, error: errMsg }); + } + ); + } + }); + } + catch (error) { + console.error('Exception occurred during checkout: '+JSON.stringify(error)); + error.type = 'payment_token_error'; + deferred.reject({ type: ERROR_TYPES.stripe, error: error }); + } + return deferred.promise; + }, + + + /** + * Issues a Orders 'save' (POST) on the order resource. + * Uses the CartSvc to retrieve the current set of line items. + * @param order + * @param validated Stripe token + * @return The result array as returned by Angular $resource.query(). + */ + createOrder: function(order, token) { + var Order = function () {}; + var newOrder = new Order(); + newOrder.cartId = order && order.cart && order.cart.id ? order.cart.id : null; + newOrder.payment = order.payment; + newOrder.payment.customAttributes.token = token; + newOrder.currency = order.cart.currency; + newOrder.shippingCost = order.shippingCost; + + newOrder.totalPrice = order.cart.totalPrice.amount; + newOrder.addresses = []; + var billTo = {}; + billTo.contactName = order.billTo.contactName; + billTo.companyName = order.billTo.companyName; + billTo.street = order.billTo.address1; + billTo.streetAppendix = order.billTo.address2; + billTo.city = order.billTo.city; + billTo.state = order.billTo.state; + billTo.zipCode = order.billTo.zip; + billTo.country = order.billTo.country; + billTo.account = order.account.email; + billTo.contactPhone = order.billTo.contactPhone; + billTo.type = 'BILLING'; + newOrder.addresses.push(billTo); + + var shipTo = {}; + shipTo.contactName = order.shipTo.contactName; + shipTo.companyName = order.shipTo.companyName; + shipTo.street = order.shipTo.address1; + shipTo.streetAppendix = order.shipTo.address2; + shipTo.city = order.shipTo.city; + shipTo.state = order.shipTo.state; + shipTo.zipCode = order.shipTo.zip; + shipTo.country = order.shipTo.country; + shipTo.account = order.account.email; + shipTo.contactPhone = order.shipTo.contactPhone; + shipTo.type = 'SHIPPING'; + newOrder.addresses.push(shipTo); + + newOrder.customer = {}; + newOrder.customer.id = order.cart.customerId; + if (order.account.title && order.account.title !== '') { + newOrder.customer.title = order.account.title; + } + if (order.account.firstName && order.account.firstName !== '') { + newOrder.customer.firstName = order.account.firstName; + } + if (order.account.middleName && order.account.middleName !== '') { + newOrder.customer.middleName = order.account.middleName; + } + if (order.account.lastName && order.account.lastName !== '') { + newOrder.customer.lastName = order.account.lastName; + } + newOrder.customer.email = order.account.email; + + // Will be submitted as "hybris-user" request header + settings.hybrisUser = order.account.email; + + return CheckoutREST.Checkout.all('checkouts').all('order').post(newOrder); + + }, + + /** Returns the shipping costs for this tenant. If no cost found, it will be set to zero. + */ + getShippingCost: function() { + var deferred = $q.defer(); + + CheckoutREST.ShippingCosts.all('shippingcosts').getList().then(function(shippingCosts){ + var defaultCost = {}; + defaultCost.price = {}; + defaultCost.price[GlobalData.getCurrencyId()] = 0; + + var costs = shippingCosts.length && shippingCosts[0].price ? shippingCosts[0].plain() : defaultCost; + deferred.resolve(costs); + }, function(failure){ + deferred.reject(failure); + }); + + return deferred.promise; + }, + + resetCart: function () { + CartSvc.resetCart(); + } + + }; + + }]); diff --git a/public/js/app/checkout/templates/checkout-cart.html b/public/js/app/checkout/templates/checkout-cart.html new file mode 100644 index 000000000..9a95140b0 --- /dev/null +++ b/public/js/app/checkout/templates/checkout-cart.html @@ -0,0 +1,66 @@ +
+ +

{{'ORDER_DETAILS' | translate}} + +

+
+
{{cart.totalUnitsCount}} {{'ITEMS' | translate}}
+
{{cart.totalUnitsCount}} {{'ITEM' | translate}}
+
{{'TOTAL' | translate}}: {{cart.totalPrice.amount | currency: currencySymbol}}
+
+
+
+
+
+ + + +
+
+
{{item.product.name}}
+
{{'ITEM_PRICE' | translate}}: {{item.price.effectiveAmount | currency: currencySymbol}}
+
+
{{'QTY' | translate}}: {{ item.quantity }}
+
+
{{'TOTAL_PRICE' | translate}}: {{ (item.itemPrice.amount) | currency: currencySymbol}} +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
{{'SUBTOTAL' | translate}}{{cart.subTotalPrice.amount | currency: currencySymbol}}
{{'DISCOUNT' | translate}} + -{{cart.totalDiscount.amount | currency: currencySymbol}} +
{{'SHIPPING' | translate}}{{ cart.shippingCost.amount | currency: currencySymbol }}
{{'TAX' | translate}} + {{cart.totalTax.amount | currency: currencySymbol}} +
{{'ORDER_TOTAL' | translate}}{{cart.totalPrice.amount | currency: currencySymbol}}
+
+
+
diff --git a/public/js/app/checkout/templates/checkout-edit-cart.html b/public/js/app/checkout/templates/checkout-edit-cart.html new file mode 100644 index 000000000..e1efca7db --- /dev/null +++ b/public/js/app/checkout/templates/checkout-edit-cart.html @@ -0,0 +1,99 @@ + + +
+ + \ No newline at end of file diff --git a/public/js/app/checkout/templates/checkout-form.html b/public/js/app/checkout/templates/checkout-form.html new file mode 100644 index 000000000..25d460cec --- /dev/null +++ b/public/js/app/checkout/templates/checkout-form.html @@ -0,0 +1,244 @@ +

+{{'SIMPLE_3_STEP_CHECKOUT' | translate}} +{{'SIMPLE_4_STEP_CHECKOUT' | translate}} +{{'SECURE_CHECKOUT' | translate}} +

+ + +
+

{{'STEP_1_MY_DETAILS' | translate}}

+ +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + {{'PLEASE_ENTER_VALID_EMAIL' | translate}} + +
+
+ + +
+
+ + + +
+ +
+
+
+
+ +
+ +

{{'STEP_2_SHIPPING_INFORMATION' | translate}}

+
+
+
+ {{'SHIPPING_ADDRESS' | translate}} +
+
+
+ +
+
+ +
+
+ +
+
+ + + +
+ {{'DELIVERY_METHOD' | translate}} +
+
+
+ + +
+
+
+ +
+
+
+
+ +
+ +

{{'STEP_3_PAYMENT' | translate}}

+
+
+ + +
+ +
+
+ +
+ {{'PAYMENT' | translate}} +
+
+
+
+ creditcard +
+
+
+
+ + {{paymentForm.ccNumber.msg ? paymentForm.ccNumber.msg : 'PLEASE_ENTER_VALID_CC' | translate}} + +
+
+ + +
+
+
+
+ + {{paymentForm.expDateMsg}} + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + {{paymentForm.cvc.msg ? paymentForm.cvc.msg : 'PLEASE_ENTER_VALID_CODE' | translate}} + +
+
+ + +
+
+
+ +
+
+
+ +
+
+
+
+
+ +

{{'STEP_4_REVIEW_ORDER' | translate}}

+
+
+ + {{message | translate}} + +
+ +
+ + + +
+ +
+
+
+
\ No newline at end of file diff --git a/public/js/app/checkout/templates/checkout-frame.html b/public/js/app/checkout/templates/checkout-frame.html new file mode 100644 index 000000000..8b28f4a56 --- /dev/null +++ b/public/js/app/checkout/templates/checkout-frame.html @@ -0,0 +1,9 @@ +
+
+
+ + + +
+
+
\ No newline at end of file diff --git a/public/js/app/checkout/templates/order-processing-splash-screen.html b/public/js/app/checkout/templates/order-processing-splash-screen.html new file mode 100644 index 000000000..3bac87cea --- /dev/null +++ b/public/js/app/checkout/templates/order-processing-splash-screen.html @@ -0,0 +1,7 @@ + diff --git a/public/js/app/confirmation/confirmation-index.js b/public/js/app/confirmation/confirmation-index.js new file mode 100644 index 000000000..98e49293d --- /dev/null +++ b/public/js/app/confirmation/confirmation-index.js @@ -0,0 +1,19 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +/** Module for the order confirmation view.*/ +angular.module('ds.confirmation', [ + 'ds.cart', + 'ds.checkout' +]); \ No newline at end of file diff --git a/public/js/app/confirmation/controllers/confirmation-ctrl.js b/public/js/app/confirmation/controllers/confirmation-ctrl.js new file mode 100644 index 000000000..78de93307 --- /dev/null +++ b/public/js/app/confirmation/controllers/confirmation-ctrl.js @@ -0,0 +1,60 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + + +angular.module('ds.confirmation') + /** Controls the order confirmation page. */ + .controller('ConfirmationCtrl', ['$scope', '$stateParams', 'OrderDetailSvc', 'ProductSvc', 'GlobalData', 'isAuthenticated', '$rootScope', function + ($scope, $stateParams, OrderDetailSvc, ProductSvc, GlobalData, isAuthenticated, $rootScope) { + + $scope.accountSuccess = false; + $scope.orderInfo = {}; + $scope.orderInfo.orderId = $stateParams.orderId; + $scope.isAuthenticated = isAuthenticated; + window.scrollTo(0, 0); + + /* + TODO: need an actual implementation + */ + $scope.questionsContactInfo = '(888) 555-1222'; + + /* OrderDetails are retrieved on controller instantiation, rather than being injected + * through UI router. This allows us to display the page immediately while filling in the details as they become + * available. It's a visual/psychological clue that the order processing success is being made. + * + * @param orderId used to retrieve order details for the confirmation + */ + OrderDetailSvc.getFormattedConfirmationDetails($scope.orderInfo.orderId).then(function(details){ + $scope.confirmationDetails = details; + + var amount = details.entries.map(function(entry){ + return entry.amount; + }); + $scope.confirmationDetails.itemCount = amount.reduce(function (total, count){ + return total+count; + }); + + $scope.currencySymbol = GlobalData.getCurrencySymbol(details.currency); + + var unbindConfirmAccount = $rootScope.$on('confirmation:account', function(){ + // show success panel + window.scrollTo(0, 0); + $scope.accountSuccess = true; + $scope.isAuthenticated = true; + }); + + $scope.$on('$destroy', unbindConfirmAccount); + }); + + }]); \ No newline at end of file diff --git a/public/js/app/confirmation/directives/summary-align.js b/public/js/app/confirmation/directives/summary-align.js new file mode 100644 index 000000000..988f07820 --- /dev/null +++ b/public/js/app/confirmation/directives/summary-align.js @@ -0,0 +1,81 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.confirmation') + .directive('summaryAlign',function() { + return { + restrict: 'A', + scope:{ + productcount: '@' + }, + link: function(scope, element, attrs){ + + /* + after calculating the proper position we apply the necessary + class to the container to finalize the visual layout + */ + var setClass = function(alignClass){ + element.attr('class', alignClass); + }; + + attrs.$observe('productcount', function(value){ + + var alignClass = 'col-xs-12 '; + //check to see if we're only dealing with a signle product. + + if( parseInt(value, 10) === 1) + { + //if only 1 product is in the cart it is an automatic centering for the display position + alignClass += 'col-lg-offset-4 col-lg-4 col-md-offset-4 col-md-4'; + }else{ + + //determines where the summary should be aligned based + //on the number of products in the cart + var calculatePositionSlot = function(){ + /* + here wer'e looking for 33% of hte display purely based on the knowledge that + based on the visual comps that unless we're in mobile the each product will always take up + 1/3 of the available horizontal space for display. + + Mobile is an autmoatic full width per product layout, so we can safely + leave the col-xs-12 as a default as that is a constant. + */ + return Math.floor(parseInt(((value*0.33) %1).toFixed(1).split('.')[1], 10)/3); + }; + + + switch(calculatePositionSlot()) + { + //places the summary in slot 3 of 3 + case 0: + alignClass += 'col-lg-4 col-lg-offset-8 col-md-4 col-md-offset-8'; + break; + //places the summary in slot 1 of 3 + case 1: + alignClass += 'col-lg-4 col-md-4'; + break; + //places the summary in slot 2 of 3 + case 2: + alignClass += 'col-lg-4 col-lg-offset-4 col-md-4 col-md-offset-4'; + break; + } + } + + setClass(alignClass); + + }); + + } + }; + }); diff --git a/public/js/app/confirmation/services/order-details-rest.js b/public/js/app/confirmation/services/order-details-rest.js new file mode 100644 index 000000000..93f2ee849 --- /dev/null +++ b/public/js/app/confirmation/services/order-details-rest.js @@ -0,0 +1,24 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.confirmation') + .factory('OrderREST', ['Restangular', 'SiteConfigSvc', function(Restangular, siteConfig){ + + return { + Orders: Restangular.withConfig(function(RestangularConfigurer) { + RestangularConfigurer.setBaseUrl(siteConfig.apis.orders.baseUrl); + }) + }; + + }]); \ No newline at end of file diff --git a/public/js/app/confirmation/services/order-details-svc.js b/public/js/app/confirmation/services/order-details-svc.js new file mode 100644 index 000000000..204ce8758 --- /dev/null +++ b/public/js/app/confirmation/services/order-details-svc.js @@ -0,0 +1,87 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +/** + * Encapsulates access to the "order" service. + */ +angular.module('ds.confirmation') + .factory('OrderDetailSvc', ['OrderREST', function(OrderREST){ + + /** Issues a GET request for the 'order' resource + * @param orderId + */ + var getOrderDetails = function (orderId) { + return OrderREST.Orders.one('orders', orderId).get(); + }; + + return { + + /** Retrieves order confirmation details and formats them the spec required by the UI. + * @param orderId + */ + getFormattedConfirmationDetails: function (orderId) { + return getOrderDetails(orderId).then(function (orderDetails) { + + var confirmationDetails = {}; + + if (orderDetails.shippingAddress.contactName) { + confirmationDetails.shippingAddressName = orderDetails.shippingAddress.contactName; + } + + if (orderDetails.shippingAddress.companyName) { + confirmationDetails.shippingAddressCompanyName = orderDetails.shippingAddress.companyName; + } + + if (orderDetails.shippingAddress.street) { + confirmationDetails.shippingAddressStreetLine1 = orderDetails.shippingAddress.street; + } + + if (orderDetails.shippingAddress.streetAppendix) { + confirmationDetails.shippingAddressStreetLine2 = orderDetails.shippingAddress.streetAppendix; + } + + if (orderDetails.shipping) { + confirmationDetails.shipping = orderDetails.shipping; + } + + if (orderDetails.tax) { + confirmationDetails.tax = orderDetails.tax; + } + + if (orderDetails.totalPrice) { + confirmationDetails.totalPrice = orderDetails.totalPrice; + } + if (orderDetails.discounts && orderDetails.discounts.length) { + confirmationDetails.discountAmount = orderDetails.discounts[0].amount; + } else { + confirmationDetails.discountAmount = 0; + } + + confirmationDetails.shippingAddressCityStateZip = orderDetails.shippingAddress.city + ', ' + orderDetails.shippingAddress.state + + ' ' + orderDetails.shippingAddress.zipCode; + + confirmationDetails.shippingAddressCountry = orderDetails.shippingAddress.country; + + confirmationDetails.emailAddress = orderDetails.customer.email; + + confirmationDetails.entries = orderDetails.entries; + + confirmationDetails.currency = orderDetails.currency; + + return confirmationDetails; + }); + + } + }; + }]); \ No newline at end of file diff --git a/public/js/app/confirmation/templates/confirmation.html b/public/js/app/confirmation/templates/confirmation.html new file mode 100644 index 000000000..0891b7eea --- /dev/null +++ b/public/js/app/confirmation/templates/confirmation.html @@ -0,0 +1,166 @@ +
+
+ {{'ACCOUNT_SUCCESS' | translate}} +
+
+
+

+ +

+
+
+
+
+
+

{{'ORDER' | translate}} # {{ orderInfo.orderId }}

+

{{'ORDER' | translate}}# {{ orderInfo.orderId }}

+ +

{{'A_COPY_OF_YOUR_ORDER_DETAILS_HAS_BEEN_SENT_TO' | translate}} {{confirmationDetails.emailAddress}}

+ +
+

{{'THE_SHIPMENT_IS_SCHEDULED_TO_ARRIVE_AT_THE_FOLLOWING_LOCATION' | translate}}:

+
+ {{confirmationDetails.shippingAddressName}}
+ {{confirmationDetails.shippingAddressCompanyName}}
+ {{confirmationDetails.shippingAddressStreetLine1}}
+ {{confirmationDetails.shippingAddressStreetLine2}}
+ {{confirmationDetails.shippingAddressCityStateZip}}
+ {{confirmationDetails.shippingAddressCountry}}
+
+
+
+
+
+ + +
+ +
+ +
+
+
+ + + +
+
+ +
{{entry.product.name}}
+
{{'SKU' | translate}}: {{entry.product.sku}}
+
{{'ITEM_PRICE' | translate}}: {{entry.unitPrice | currency: currencySymbol}}
+
+
{{'QTY' | translate}}: {{entry.amount}}
+
+
{{'TOTAL_PRICE' | translate}}: {{entry.totalPrice |currency: currencySymbol}} +
+
+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
{{'SUBTOTAL' | translate}}{{ confirmationDetails.totalPrice - confirmationDetails.shipping.total.amount + confirmationDetails.discountAmount - confirmationDetails.tax.total.amount | currency: currencySymbol}}
{{'SHIPPING' | translate}}{{ confirmationDetails.shipping.total.amount | currency: currencySymbol }}
{{'DISCOUNT' | translate}} + -{{confirmationDetails.discountAmount | currency: currencySymbol}} +
{{'TAX' | translate}}{{confirmationDetails.tax.total.amount | currency: currencySymbol}}
{{'ORDER_TOTAL' | translate}}{{ confirmationDetails.totalPrice | currency: currencySymbol}}
+
+
+ + + +
+ +
+
+
+

{{'ENJOY_YOUR_ITEMS' | translate}}

+ +
+ +
+
+
+
+
+ +
\ No newline at end of file diff --git a/public/js/app/coupons/controllers/coupon-ctrl.js b/public/js/app/coupons/controllers/coupon-ctrl.js new file mode 100644 index 000000000..e16fc304d --- /dev/null +++ b/public/js/app/coupons/controllers/coupon-ctrl.js @@ -0,0 +1,94 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.coupon') + .controller('CouponCtrl', ['$scope', '$rootScope', 'CartSvc', 'CouponSvc', 'AuthSvc', '$translate', 'GlobalData', + function($scope, $rootScope, CartSvc, CouponSvc, AuthSvc, $translate, GlobalData) { + + $scope.cart = CartSvc.getLocalCart(); + + $scope.couponCollapsed = true; + + var unbind = $rootScope.$on('cart:updated', function(eve, eveObj){ + $scope.cart = eveObj.cart; + $scope.currencySymbol = GlobalData.getCurrencySymbol($scope.cart.currency); + }); + + var unbindSignIn = $rootScope.$on('user:signedin', function () { + if ($scope.coupon && $scope.coupon.error && $scope.coupon.error.status === 403) { + delete $scope.couponErrorMessage; + } + }); + + $scope.$on('$destroy', unbind); + $scope.$on('$destroy', unbindSignIn); + + /** get coupon and apply it to the cart */ + $scope.applyCoupon = function(couponCode) { + $scope.coupon = CouponSvc.getCoupon(couponCode).then(function (couponGetResponse) { + if (couponGetResponse.discountAbsolute && couponGetResponse.discountAbsolute.currency !== $scope.cart.currency) { + getCouponError({status: 'CURR'}); + } + else { + CartSvc.redeemCoupon(couponGetResponse, $scope.cart.id).then(function () { + //success + }, function (couponRedeemError) { + //error + redeemCouponError(couponRedeemError); + }); + } + }, function (couponGetError) { + getCouponError(couponGetError); + }); + }; + + $scope.removeAllCoupons = function() { + CartSvc.removeAllCoupons($scope.cart.id).then(function () { + $scope.coupon.error = ''; + $scope.couponErrorMessage = ''; + }); + }; + + var getCouponError = function(couponError) { + $scope.coupon.error = couponError; + if (couponError.status === 404 || (couponError.status === 403 && AuthSvc.isAuthenticated())) { + $translate('COUPON_NOT_VALID').then(function (response) { + $scope.couponErrorMessage = response; + }); + } + else if (couponError.status === 403) { + $translate('COUPON_ERR_ANONYMOUS').then(function (response) { + $scope.couponErrorMessage = response; + }); + } + else if (couponError.status === 'CURR') { + $translate('COUPON_ERR_CURRENCY').then(function (response) { + $scope.couponErrorMessage = response; + }); + } + else { + $translate('COUPON_NOT_VALID').then(function (response) { + $scope.couponErrorMessage = response; + }); + } + }; + + var redeemCouponError = function (couponError) { + $scope.coupon.error = couponError; + if (couponError.status === 400) { + $scope.couponErrorMessage = couponError.data.details[0].message; + } + }; + + }]); diff --git a/public/js/app/coupons/coupon-index.js b/public/js/app/coupons/coupon-index.js new file mode 100644 index 000000000..b201678dd --- /dev/null +++ b/public/js/app/coupons/coupon-index.js @@ -0,0 +1,16 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +/** Coupon Module. */ +angular.module('ds.coupon', []); \ No newline at end of file diff --git a/public/js/app/coupons/services/coupon-rest.js b/public/js/app/coupons/services/coupon-rest.js new file mode 100644 index 000000000..fa292b29f --- /dev/null +++ b/public/js/app/coupons/services/coupon-rest.js @@ -0,0 +1,26 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.coupon') + .factory('CouponREST', ['Restangular', 'SiteConfigSvc', function(Restangular, siteConfig){ + + return { + /** Endpoint for Coupon.*/ + Coupon: Restangular.withConfig(function (RestangularConfigurer) { + RestangularConfigurer.setBaseUrl(siteConfig.apis.coupon.baseUrl); + + }) + }; + + }]); \ No newline at end of file diff --git a/public/js/app/coupons/services/coupon-service.js b/public/js/app/coupons/services/coupon-service.js new file mode 100644 index 000000000..9f2415d94 --- /dev/null +++ b/public/js/app/coupons/services/coupon-service.js @@ -0,0 +1,30 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +/** + * Provides a variety of coupon: access, validation, and redemptions services. + */ +angular.module('ds.coupon') + .factory('CouponSvc', ['CartSvc', 'CouponREST', + function(CartSvc, CouponREST){ + + return { + + getCoupon: function (couponCode) { + return CouponREST.Coupon.one('coupons', couponCode).get(); + } + + }; + + }]); \ No newline at end of file diff --git a/public/js/app/coupons/templates/coupon-apply.html b/public/js/app/coupons/templates/coupon-apply.html new file mode 100644 index 000000000..9f8f52926 --- /dev/null +++ b/public/js/app/coupons/templates/coupon-apply.html @@ -0,0 +1,25 @@ +
+ + {{'COUPON_CODE' | translate}} + +
+
+ {{'COUPON_MINIMUM_NOT_MET' | translate}} +
+
+ {{couponErrorMessage}} +
+ + +
+ +
+
+ {{discount.code}} + +
+
+ +
diff --git a/public/js/app/errors/backendStub.js b/public/js/app/errors/backendStub.js new file mode 100644 index 000000000..c906d9397 --- /dev/null +++ b/public/js/app/errors/backendStub.js @@ -0,0 +1,302 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ('Confidential Information'). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ +'use strict'; + +(function() { + /** BACKEND-MOCK-INSTRUCTIONS: + * Use the querystring parameter ?nobackend in url to load this module, otherwise it is empty in codebase. + * This module is multi-purpose. It can be used to a) mock data b) mock errors or c) passthrough desired services. + * To change state of mocking from error to data, change comments to pass back data, error integer, or passthrough at bottom. + * For error-mock: uncomment integer to mock status code. Integer return will hit error handler and mock error. Also comment out mock data. + * For data-mock: uncomment the JSON data return, and comment out the status code integer. + * Realize that some mock data might go stale based on session state, if so, then paste updated JSON from response tabs. + * Sometimes clicking back the ?nobackend parameter can be removed causing unexpected results. Good to watch for that. + * Also, be sure that the domain and tenant id settings (below) are correct for your build environment. + **/ + if( !document.URL.match(/\?nobackend$/) ){ + // if not requested only add a blank stub to app dependency. + angular.module('ds.backendMock', []); + + } else if (document.URL.match(/\?nobackend$/)) { + + // if the query string is present add a module with a run definition to replace the back end. + angular.module('ds.backendMock', ['ngMockE2E']) + + .run(function($httpBackend) { + + // MOCK-RUNNER-CONFIGURATION-. TODO - update or remove. + var BUILD_DOMAIN = 'yaas-test.apigee.net/test', + BUILD_TENANT = '8bwhetym79cq', + MOCK_PRODUCT = '5436899a3cceb8a9381288d9', + MOCK_ORDER = 'X38KIHUG'; + + // CATEGORY: category-service.js #121 getCategories MOCK - an excellent test mock because it is a simple call/response call on home page. + $httpBackend.whenGET('https://'+BUILD_DOMAIN+'/category/v2/'+BUILD_TENANT+'/categories?expand=subcategories&toplevel=true') + .respond( + //MOCK-ERROR-STATUS-CODE + //401 //500 //404 //uncomment integer to mock status code. Int will hit error handler and mock error. Also comment out mock data. + //MOCK-DATA-RESPONSE + [{ + 'id' : '256', + 'name' : 'MOCK', + 'description' : 'description', + 'image' : 'https://yaas-test.apigee.net/test/media-repository/v2/8bwhetym79cq/SJ8Gkp4vpyKjuC7FCDw2kY1KUf6iEyRc/media/5485a4c755ceb64199047c02', + 'subcategories' : [ { + 'id' : '28384512', + 'parentId' : '256', + 'name' : 'Beersteins', + 'description' : '', + 'subcategories' : [ { + 'id' : '28385024', + 'parentId' : '28384512', + 'name' : 'Traditional', + 'description' : '' + } ] + }, { + 'id' : '41452032', + 'parentId' : '256', + 'name' : 'hybris Mugs', + 'description' : '', + 'image' : 'http://media-repository-v2.test.cf.hybris.com/8bwhetym79cq/y_ondemand_backoffice/media/546f5ee1f0ee5477bf977ca4' + } ] + }, { + 'id' : '2304', + 'name' : 'Accessories', + 'image' : 'https://yaas-test.apigee.net/test/media-repository/v2/8bwhetym79cq/SJ8Gkp4vpyKjuC7FCDw2kY1KUf6iEyRc/media/5485a4d555ceb64199047c46', + 'subcategories' : [ { + 'id' : '28379136', + 'parentId' : '2304', + 'name' : 'Small Mugs', + 'description' : '', + 'image' : 'http://media-repository-v2.test.cf.hybris.com/8bwhetym79cq/y_ondemand_backoffice/media/54647b7b79ae1910e885193f' + }, { + 'id' : '46116096', + 'parentId' : '2304', + 'name' : 'Housewear' + } ] + }, { + 'id' : '3584', + 'name' : 'Sports', + 'image' : 'https://yaas-test.apigee.net/test/media-repository/v2/8bwhetym79cq/SJ8Gkp4vpyKjuC7FCDw2kY1KUf6iEyRc/media/548196fce46e11c342fd4df8' + }, { + 'id' : '4096', + 'name' : 'Safety', + 'image' : 'https://yaas-test.apigee.net/test/media-repository/v2/8bwhetym79cq/SJ8Gkp4vpyKjuC7FCDw2kY1KUf6iEyRc/media/5481f5dd55ceb64199043c72' + }, { + 'id' : '4864', + 'name' : 'Computer Accessories', + 'image' : 'https://yaas-test.apigee.net/test/media-repository/v2/8bwhetym79cq/SJ8Gkp4vpyKjuC7FCDw2kY1KUf6iEyRc/media/5485a48a55ceb64199047bc0' + }, { + 'id' : '5632', + 'name' : 'Cosmetics', + 'image' : 'https://yaas-test.apigee.net/test/media-repository/v2/8bwhetym79cq/SJ8Gkp4vpyKjuC7FCDw2kY1KUf6iEyRc/media/5485a4a255ceb64199047bc2' + }, { + 'id' : '102403072', + 'name' : 'Candy', + 'subcategories' : [ { + 'id' : '43524096', + 'parentId' : '102403072', + 'name' : 'Chewing Gum', + 'description' : '', + 'image' : 'http://media-repository-v2.test.cf.hybris.com/8bwhetym79cq/SJ8Gkp4vpyKjuC7FCDw2kY1KUf6iEyRc/media/547d9b01b80ec710ea0e8498', + 'subcategories' : [ { + 'id' : '43525632', + 'parentId' : '43524096', + 'name' : 'Hubba Bubba', + 'description' : '', + 'image' : 'http://media-repository-v2.test.cf.hybris.com/8bwhetym79cq/SJ8Gkp4vpyKjuC7FCDw2kY1KUf6iEyRc/media/548045411bae31f953e73e3f' + } ] + } ] + }, { + 'id' : '7680', + 'name' : 'T-shirts', + 'image' : 'https://yaas-test.apigee.net/test/media-repository/v2/8bwhetym79cq/SJ8Gkp4vpyKjuC7FCDw2kY1KUf6iEyRc/media/5485a4b155ceb64199047bc4' + } ] + ); //end mock. + + // ANONYMOUS-LOGIN: Account Service. Use to mock Authentication errors. + // $httpBackend.whenPOST('https://yaas-test.apigee.net/test/account/v1/auth/anonymous/login?hybris-tenant=8bwhetym79cq') + // .respond( + // //MOCK-ERROR-STATUS-CODE + // //401 //500 //404 //uncomment integer to mock status code. Int will hit error handler and mock error. Also comment out mock data. + // //MOCK-DATA-RESPONSE + // // { + // // 'status' : 403, + // // 'message' : 'Project BAD8bwhetym79cq does not exist', + // // 'type' : 'insufficient_permissions' + // // } + // ); //end mock. + + + // PRODUCT-DETAILS: white mug MOCK. + $httpBackend.whenGET('https://'+BUILD_DOMAIN+'/product-details/v3/'+BUILD_TENANT+'/productdetails/'+ MOCK_PRODUCT+'?expand=media') + .respond( + //MOCK-ERROR-STATUS-CODE + //401 //500 //404 //uncomment integer to mock status code. Int will hit error handler and mock error. Also comment out mock data. + //MOCK-DATA-RESPONSE + { + 'id' : '5436899a3cceb8a9381288d9', + 'sku' : 'P1234000', + 'name' : 'hybris Coffee Mug - MOCK', + 'description' : 'MOCK Drink your morning, afternoon, and evening coffee from the hybris mug. Get caffinated in style. ', + 'published' : true, + 'images' : [ { + 'id' : '5436899af2ee256c97bed3c0', + 'url' : 'http://media-repository-v2.test.cf.hybris.com/8bwhetym79cq/product/media/5436899af2ee256c97bed3c0' + }, { + 'id' : '5436899bf2ee256c97bed3c2', + 'url' : 'http://media-repository-v2.test.cf.hybris.com/8bwhetym79cq/product/media/5436899bf2ee256c97bed3c2' + }, { + 'id' : '5436899bf2ee256c97bed3c4', + 'url' : 'http://media-repository-v2.test.cf.hybris.com/8bwhetym79cq/product/media/5436899bf2ee256c97bed3c4' + }, { + 'id' : '5436899bf2ee256c97bed3c6', + 'url' : 'http://media-repository-v2.test.cf.hybris.com/8bwhetym79cq/product/media/5436899bf2ee256c97bed3c6' + } ], + 'inStock' : true, + 'created' : '2014-10-09T13:11:54.108+0000', + 'color' : 'White', + 'itemCondition' : 'NEW', + 'adult' : false, + 'customAttributes' : [ ], + 'defaultPrice' : { + 'currency' : 'USD', + 'priceId' : '5436899c5acee4d3c910b7cf', + 'value' : 9.99 + }, + 'categories' : [ { + 'id' : '256', + 'name' : 'Mugs', + 'description' : 'description', + 'image' : 'https://yaas-test.apigee.net/test/media-repository/v2/8bwhetym79cq/SJ8Gkp4vpyKjuC7FCDw2kY1KUf6iEyRc/media/5485a4c755ceb64199047c02' + } ] + } + ); //end mock. + + // ORDERS: order confirmation MOCK. + // This will mock data for pages at: http://dev.local:9000/8bwhetym79cq/#!/confirmation/X38KIHUG/?nobackend and + // http://dev.local:9000/8bwhetym79cq/#!/orderDetail/X38KIHUG?nobackend + $httpBackend.whenGET('https://'+BUILD_DOMAIN+'/order/v4/'+BUILD_TENANT+'/orders/'+ MOCK_ORDER) + .respond( + //MOCK-ERROR-STATUS-CODE + //401 //404 //500 //uncomment integer to mock status code. Int will hit error handler and mock error. Also comment out mock data. + //MOCK-DATA-RESPONSE + { + 'created' : '2015-02-02T19:12:55.765Z', + 'status' : 'CREATED', + 'entries' : [ { + 'amount' : 4, + 'price' : 9.99, + 'totalPrice' : 39.96, + 'id' : '5436899a3cceb8a9381288d9', + 'product' : { + 'id' : '5436899a3cceb8a9381288d9', + 'sku' : 'P1234000', + 'name' : 'hybris Coffee Mug - White', + 'description' : 'Drink your morning, afternoon, and evening coffee from the hybris mug. Get caffinated in style. ', + 'published' : true, + 'inStock' : true, + 'created' : '2014-10-09T13:11:54.108+0000', + 'externalImages' : [ ], + 'images' : [ { + 'id' : '5436899af2ee256c97bed3c0', + 'url' : 'http://media-repository-v2.test.cf.hybris.com/8bwhetym79cq/product/media/5436899af2ee256c97bed3c0' + }, { + 'id' : '5436899bf2ee256c97bed3c2', + 'url' : 'http://media-repository-v2.test.cf.hybris.com/8bwhetym79cq/product/media/5436899bf2ee256c97bed3c2' + }, { + 'id' : '5436899bf2ee256c97bed3c4', + 'url' : 'http://media-repository-v2.test.cf.hybris.com/8bwhetym79cq/product/media/5436899bf2ee256c97bed3c4' + }, { + 'id' : '5436899bf2ee256c97bed3c6', + 'url' : 'http://media-repository-v2.test.cf.hybris.com/8bwhetym79cq/product/media/5436899bf2ee256c97bed3c6' + } ], + 'color' : 'White', + 'itemCondition' : 'NEW', + 'adult' : false, + 'customAttributes' : [ ] + } + } ], + 'customer' : { + 'id' : 'C9851410463', + 'name' : 'asdfsasdf asfd', + 'title' : 'Mr.', + 'firstName' : 'asdfsasdf', + 'lastName' : 'asfd', + 'email' : 'test1@test1.com- MOCK' + }, + 'billingAddress' : { + 'contactName' : 'MOCK9999', + 'street' : '9999MOCK', + 'zipCode' : '999', + 'city' : '999', + 'country' : 'US', + 'state' : 'AK', + 'contactPhone' : '9999' + }, + 'shippingAddress' : { + 'contactName' : '99MOCK99', + 'street' : '9999MOCK', + 'zipCode' : '999MOCK', + 'city' : '999', + 'country' : 'US', + 'state' : 'AK', + 'contactPhone' : '9999' + }, + 'payments' : [ { + 'status' : 'SUCCESS - MOCK', + 'method' : 'Visa', + 'paymentResponse' : 'ChargeId - ch_15Rpcx424QP3MpDM8oUPHenk', + 'paidAmount' : 42.94, + 'currency' : 'USD' + } ], + 'shipping' : { + 'total' : { + 'amount' : 2.98, + 'currency' : 'USD' + } + }, + 'tax' : { + 'lines' : [ ], + 'total' : { + 'amount' : 0, + 'currency' : 'USD', + 'inclusive' : false + } + }, + 'totalPrice' : 42.94, + 'currency' : 'USD' + } + ); //end mock. + + + /** MOCK-PASSTHROUGHS + * - These are required for anything that is not mocked. The HTTPBackendProxy passes them through to the server. + * - When the site is fully mocked, these can be removed. + * - Removing these will give errors for every service that can still be mocked. + **/ + + // various passthroughs. these allow existing services to work, while some are mocked. + $httpBackend.whenGET('./js/app/auth/templates/signin.html').passThrough(); + $httpBackend.whenGET('./js/app/auth/templates/signup.html').passThrough(); + + + // dont mock everything else, specify pass through to avoid error. + $httpBackend.whenGET(/^\w+.*/).passThrough(); + $httpBackend.whenPOST(/^\w+.*/).passThrough(); + + }); + + + } + +})(angular); \ No newline at end of file diff --git a/public/js/app/errors/controllers/errors-ctrl.js b/public/js/app/errors/controllers/errors-ctrl.js new file mode 100644 index 000000000..d11b21fab --- /dev/null +++ b/public/js/app/errors/controllers/errors-ctrl.js @@ -0,0 +1,46 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ +'use strict'; + +angular.module('ds.errors', []) + /** + * Dynamic error display. + */ + .controller('ErrorsCtrl', ['$scope', '$state', '$stateParams', '$translate', + function( $scope, $state, $stateParams, $translate ) { + + var errorType = ''; + + // if errorId is valid, then postfix dynamic message, else always generic message. + if($stateParams.errorId === '401' || $stateParams.errorId === '404'){ + errorType = '_' + $stateParams.errorId; + } + + $translate('ERROR_TITLE' + errorType).then(function(value){ + $scope.errorTitle = value; + }); + $translate('ERROR_MESSAGE' + errorType).then(function(value){ + $scope.errorMessage = value; + }); + $translate('ERROR_REDIRECT').then(function(value){ + $scope.errorRedirect = value; + }); + $translate('ERROR_BUTTON_TEXT').then(function(value){ + $scope.errorButtonText = value; + }); + + $scope.redirect = function() { + $state.go('base.home'); + }; + }]); + + diff --git a/public/js/app/errors/templates/error-display.html b/public/js/app/errors/templates/error-display.html new file mode 100644 index 000000000..4adbd5a8f --- /dev/null +++ b/public/js/app/errors/templates/error-display.html @@ -0,0 +1,15 @@ +
+

{{errorTitle}}

+

+ {{errorMessage}} +
+ {{errorRedirect}} +

+ +
+ +
+ +
diff --git a/public/js/app/home/controllers/home-ctrl.js b/public/js/app/home/controllers/home-ctrl.js new file mode 100644 index 000000000..be1cad42f --- /dev/null +++ b/public/js/app/home/controllers/home-ctrl.js @@ -0,0 +1,37 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.home') + + .controller('HomeCtrl', ['$scope', + function ($scope) { + + $scope.carouselInterval = 5000; + + $scope.slides = [ + { + id: 'audioBanner', + image: './img/homePg-hero-audio.jpg', + state: 'base.category' + }, + { + id: 'officeBanner', + image: './img/homePg-hero-office.jpg', + state: 'base.category' + } + ]; + + + }] +); diff --git a/public/js/app/home/home-index.js b/public/js/app/home/home-index.js new file mode 100644 index 000000000..bf1e217c5 --- /dev/null +++ b/public/js/app/home/home-index.js @@ -0,0 +1,23 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; +/** Defines the dependencies for the 'products' module, which comprises the 'browse products' view as well + * as the product detail view. */ +angular.module('ds.home', [ + 'restangular', + 'ds.shared', + 'ds.cart', + 'ui.bootstrap', + 'ngTouch' +]); + diff --git a/public/js/app/home/templates/home.html b/public/js/app/home/templates/home.html new file mode 100644 index 000000000..0000db001 --- /dev/null +++ b/public/js/app/home/templates/home.html @@ -0,0 +1,21 @@ +
+
+ + + + + + + +
+
+
+ free gift +
+
+ flight collection +
+
+
+
+
\ No newline at end of file diff --git a/public/js/app/orders/orders-index.js b/public/js/app/orders/orders-index.js new file mode 100644 index 000000000..ec6966aa2 --- /dev/null +++ b/public/js/app/orders/orders-index.js @@ -0,0 +1,17 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; +/** Module related to orders */ +angular.module('ds.orders', [ + 'ds.shared' +]); \ No newline at end of file diff --git a/public/js/app/orders/services/order-list-service.js b/public/js/app/orders/services/order-list-service.js new file mode 100644 index 000000000..432856651 --- /dev/null +++ b/public/js/app/orders/services/order-list-service.js @@ -0,0 +1,38 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.orders') + .factory('OrderListSvc', ['settings', 'GlobalData', 'OrdersREST', function(settings, GlobalData, OrdersREST){ + + var getOrders = function (parms) { + var ordersPromise = OrdersREST.Orders.all('orders').getList(parms); + ordersPromise.then(function(response) { + GlobalData.orders.meta.total = parseInt(response.headers[settings.headers.paging.total], 10) || 0; + }); + return ordersPromise; + }; + + return { + /** + * Issues a query request on the order resource. + * @param {parms} query parameters - optional + * @return The result array as returned by Angular $resource.query(). + */ + query: function(parms) { + return getOrders(parms); + } + + }; + + }]); diff --git a/public/js/app/orders/services/orders-rest.js b/public/js/app/orders/services/orders-rest.js new file mode 100644 index 000000000..0a9f2b9fa --- /dev/null +++ b/public/js/app/orders/services/orders-rest.js @@ -0,0 +1,33 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +/** REST configuration for services related to checkout. */ +angular.module('ds.orders') + .factory('OrdersREST', ['Restangular', 'SiteConfigSvc', function(Restangular, siteConfig){ + + return { + /** Configures main orders API endpoint.*/ + Orders: Restangular.withConfig(function(RestangularConfigurer) { + RestangularConfigurer.setResponseInterceptor(function (data, operation, what, url, response) { + var headers = response.headers(); + var result = response.data; + result.headers = headers; + return result; + }); + RestangularConfigurer.setBaseUrl(siteConfig.apis.orders.baseUrl); + }) + }; + + + }]); \ No newline at end of file diff --git a/public/js/app/products/controllers/browse-products-ctrl.js b/public/js/app/products/controllers/browse-products-ctrl.js new file mode 100644 index 000000000..6791b32e0 --- /dev/null +++ b/public/js/app/products/controllers/browse-products-ctrl.js @@ -0,0 +1,321 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.products') +/** Controller for the 'browse products' view. */ + .controller('BrowseProductsCtrl', ['$scope', '$rootScope', 'ProductSvc', 'GlobalData', 'CategorySvc', 'settings', 'category', '$state', '$location', '$timeout', '$anchorScroll', + function ($scope, $rootScope, ProductSvc, GlobalData, CategorySvc, settings, category, $state, $location, $timeout, $anchorScroll) { + + $scope.pageSize = GlobalData.products.pageSize; + $scope.pageNumber = 0; + $scope.setSortedPageSize = void 0; + $scope.setSortedPageNumber = 1; + $scope.sort = ''; + $scope.products = []; + $scope.total = GlobalData.products.meta.total; + $scope.store = GlobalData.store; + $scope.prices = {}; + $scope.requestInProgress = false; + $scope.PLACEHOLDER_IMAGE = settings.placeholderImage; + + $scope.pagination = { + productsFrom: 1, + productsTo: 1 + }; + + $scope.category = category || {}; + + if (!!category) { + $scope.$emit('category:opened', category); + } + + $scope.lastCatId = $scope.category.id || 'allProducts'; + + + + $scope.loadedPages = 1; + $scope.loadMorePages = false; + + // ensure category path is localized + var pathSegments = $location.path().split('/'); + if ($scope.category.slug && pathSegments[pathSegments.length - 1] !== $scope.category.slug) { + pathSegments[pathSegments.length - 1] = $scope.category.slug; + $location.path(pathSegments.join('/')); + } + + $rootScope.$emit('category:selected', { category: category }); + + function getProductIdsFromElements(elements) { + + return elements.map(function (element) { + if (element.ref.type === 'product') { + return element.ref.id; + } else { + return ''; + } + }); + } + + $scope.currencySymbol = GlobalData.getCurrencySymbol(); + + function setMainImage(product) { + if (product.media && product.media.length) { + var mainImageArr = product.media.filter(function (media) { + return media.customAttributes && media.customAttributes.main; + }); + if (mainImageArr.length) { + product.mainImageURL = mainImageArr[0].url; + } else { + product.mainImageURL = product.media[0].url; + } + } + } + + function assignMainImage(products) { + angular.forEach(products, function (product) { + setMainImage(product.product); + }); + } + + function assignPrices(products) { + var pricesMap = {}; + var currentCurrency = GlobalData.getCurrencyId(); + angular.forEach(products, function (product) { + if (product.prices && product.prices.length > 0) { + product.prices.forEach(function (price) { + if (price.currency === currentCurrency) { + pricesMap[product.product.id] = price; + } + }); + } + }); + + $scope.prices = angular.extend($scope.prices, pricesMap); + + //initialize the viewing bar promixity script + /* jshint ignore:start */ + initRefineAffix(); + /* jshint ignore:end */ + + if ($scope.loadMorePages) { + $timeout(function () { + $scope.pageSize = $scope.pageSize / $scope.loadedPages; + $scope.pageNumber = $scope.loadedPages; + + //Scroll to the page + if (!!$scope.products[$scope.pageSize * ($scope.loadedPages - 1)]) { + $scope.scrollTo('p_' + $scope.products[$scope.pageSize * ($scope.loadedPages - 1)].id); + } + + //Try scrolling to the last element + $scope.scrollTo('p_' + GlobalData.products.lastViewedProductId); + + //Set page parameter + $location.search('page', $scope.pageNumber).replace(); + + $scope.loadMorePages = false; + }, 1); + } + + + + } + + // Primary Reason for categories to be updated is that the language change. + // We'll have to retrieve the current slug for the category (and thus this page) + // and reload to ensure the breadcrumbs and slug reflect the latest setting. + var unbindCat = $rootScope.$on('categories:updated', function (eve, obj) { + if (obj.source === settings.eventSource.languageUpdate) { + CategorySvc.getCategoryById($scope.category.id).then(function (cat) { + var parms = {}; + if (cat && cat.slug) { + parms.catName = cat.slug; + } + $state.transitionTo('base.category', parms, { + reload: true, + inherit: true, + notify: true + }); + + }); + } + + }); + + $scope.$on('$destroy', unbindCat); + + /* + Retrieves more products from the product service and adds them to the product list. + This function is only for infinite scrolling, which is the default state. It is disabled once a sort is applied. + */ + $scope.addMore = function () { + // category selected, but no products associated with category - leave blank for time being + if ($scope.category.elements && $scope.category.elements.length === 0) { + $scope.products = []; + $scope.pagination = { + productsFrom: 0, + productsTo: 0 + }; + $scope.total = 0; + return; + } + /* + this function is only for infinite scrolling, which is disabled when a sort is applied. + */ + + // prevent additional API calls if all products are retrieved + // infinite scroller initiates lots of API calls when scrolling to the bottom of the page + if (!GlobalData.products.meta.total || $scope.products.length < GlobalData.products.meta.total) { + if (!$scope.requestInProgress) { + $scope.pageNumber = $scope.pageNumber + 1; + + + var qSpec = 'published:true'; + if ($scope.category.elements && $scope.category.elements.length > 0) { + qSpec = qSpec + ' ' + 'id:(' + getProductIdsFromElements($scope.category.elements) + ')'; + } // If no category elements (rather than length = 0), we're showing "all" products + var query = { + pageNumber: $scope.pageNumber, + pageSize: $scope.pageSize, + expand: 'media', + // we only want to show published products on this list + q: qSpec + }; + + if ($scope.sort) { + query.sort = $scope.sort; + } + + $scope.requestInProgress = true; + + ProductSvc.queryProductDetailsList(query).then(function (products) { + $scope.requestInProgress = false; + if (products) { + GlobalData.products.meta.total = parseInt(products.headers[settings.headers.paging.total.toLowerCase()], 10) || 0; + $scope.products = $scope.products.concat(products); + if ($scope.products.length === 0) { + $scope.pagination.productsFrom = 0; + } + else if ($scope.products.length > 0 && query.pageNumber === 1) { + //Check for visible items in viewport + } + $scope.total = GlobalData.products.meta.total; + if (products.length) { + assignMainImage(products); + assignPrices(products); + } + + //Set page parameter + $location.search('page', $scope.pageNumber).replace(); + } + }, function () { + $scope.requestInProgress = false; + }); + } + } + }; + + $scope.backToTop = function () { + window.scrollTo(0, 0); + }; + + $scope.scrollTo = function (id) { + + // always scroll by 150 extra pixels (because of the navigation pane) + $anchorScroll.yOffset = 150; + + //Then try scrolling to the element + var old = $location.hash(); + $location.hash(id); + $anchorScroll(); + $location.hash(old); + }; + + //Check for query parameter that has the number of pages + if (!!$location.search().page) { + $scope.loadedPages = parseInt($location.search().page); + $scope.pageSize = $scope.pageSize * $scope.loadedPages; + $scope.sort = GlobalData.products.lastSort; + $scope.loadMorePages = true; + } + + // trigger initial load of items + $scope.addMore(); + + //Save id of the last viewed element, last viewed page and current sort + $scope.openProductDetails = function (productId) { + GlobalData.products.lastViewedProductId = productId; + GlobalData.products.lastSort = $scope.sort; + }; + + $scope.setSortedPage = function () { + + $scope.setSortedPageSize = void 0; + $scope.setSortedPageNumber = 1; + if (($scope.pageSize > $scope.total) && ($scope.total !== 0)) { + $scope.setSortedPageSize = $scope.total; + } + + //check to see if the current page number times the page size is going to be greater than the total product count + //if it is then we need to set caps on the pageSize and page number + $scope.setSortedPageSize = ($scope.pageNumber * $scope.pageSize > $scope.total) ? $scope.total : $scope.pageNumber * $scope.pageSize; + + /* + it is important to note that the $scope.pageNumber and $scope.pageSize are not being modified as they need + to be unmidified for the addMore() method to work for the inifinte scroll functionality + */ + var query = { + pageNumber: $scope.setSortedPageNumber, + pageSize: $scope.setSortedPageSize, + expand: 'media', + sort: $scope.sort + }; + + //we only want to show published products on this list + var qSpec = 'published:true'; + if ($scope.category.elements && $scope.category.elements.length > 0) { + qSpec = qSpec + ' ' + 'id:(' + getProductIdsFromElements($scope.category.elements) + ')'; + } + query.q = qSpec; + + + + ProductSvc.queryProductDetailsList(query).then(function (products) { + $scope.requestInProgress = false; + if (products) { + GlobalData.products.meta.total = parseInt(products.headers[settings.headers.paging.total.toLowerCase()], 10) || 0; + $scope.products = products; + if ($scope.products.length === 0) { + $scope.pagination.productsFrom = 0; + } + else if ($scope.products.length > 0 && query.pageNumber === 1) { + //Check for visible items in viewport + } + $scope.total = GlobalData.products.meta.total; + if (products.length) { + assignMainImage(products); + assignPrices(products); + } + } + }, function () { + $scope.requestInProgress = false; + }); + + }; + + $scope.showRefineContainer = function () { + $scope.refineContainerShowing = !$scope.refineContainerShowing; + }; + + }]); diff --git a/public/js/app/products/controllers/product-detail-ctrl.js b/public/js/app/products/controllers/product-detail-ctrl.js new file mode 100644 index 000000000..fe639e448 --- /dev/null +++ b/public/js/app/products/controllers/product-detail-ctrl.js @@ -0,0 +1,118 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.products') + /** Controls the product detail view, which allows the shopper to add an item to the cart. + * Listens to the 'cart:updated' event. Once the item has been added to the cart, and the updated + * cart information has been retrieved from the service, the 'cart' view will be shown. + */ + .controller('ProductDetailCtrl', ['$scope', '$rootScope', 'CartSvc', 'product', 'lastCatId', 'settings', 'GlobalData', 'CategorySvc','$filter', + function($scope, $rootScope, CartSvc, product, lastCatId, settings, GlobalData, CategorySvc, $filter) { + + $scope.product = product; + + // used by breadcrumb directive + $scope.category = product.categories; + $scope.breadcrumbData = angular.copy($scope.category); + + $scope.taxConfiguration = GlobalData.getCurrentTaxConfiguration(); + + if(!!lastCatId) { + if(lastCatId === 'allProducts'){ + var allProductsName = $filter('translate')('ALL_PRODUCTS'); + $scope.breadcrumbData = { + path: [{ + id: '', + name: allProductsName, + slug: '' + }] + }; + } + else + { + CategorySvc.getCategoryById(lastCatId) + .then(function (cat) { + $scope.breadcrumbData = {}; + $scope.breadcrumbData = cat; + }); + } + } + + //Event that product is loaded + $scope.$emit('product:opened', product); + + $scope.currencySymbol = GlobalData.getCurrencySymbol(); + $scope.error=null; + + if (!$scope.product.product.media || !$scope.product.product.media.length) { // set default image if no images configured + $scope.product.product.media = [{ url: settings.placeholderImage }]; + } else if (!$scope.product.product.media[0].customAttributes || !$scope.product.product.media[0].customAttributes.main) { // make sure main image is first in list + for (var i = 0; i < $scope.product.product.media.length; i++) { + if ($scope.product.product.media[i].customAttributes && $scope.product.product.media[i].customAttributes.main) { + var first = $scope.product.product.media[0]; + $scope.product.product.media[0] = $scope.product.product.media[i]; + $scope.product.product.media[i] = first; + break; + } + } + } + + //input default values must be defined in controller, not html, if tied to ng-model + $scope.productDetailQty = 1; + $scope.buyButtonEnabled = true; + + + // scroll to top on load + window.scrollTo(0, 0); + + var unbind = $rootScope.$on('cart:updated', function (eve, eveObj) { + + $scope.taxConfiguration = GlobalData.getCurrentTaxConfiguration(); + + if(eveObj.source === 'manual'){ + $rootScope.showCart = true; + //check to see if the cart should close after timeout + if(eveObj.closeAfterTimeout) + { + $rootScope.$emit('cart:closeAfterTimeout'); + + } + $scope.buyButtonEnabled = true; + } + + }); + + $scope.$on('$destroy', unbind); + + /** Add the product to the cart. 'Buy' button is disabled while cart update is in progress. */ + $scope.addToCartFromDetailPage = function () { + $scope.error = false; + $scope.buyButtonEnabled = false; + CartSvc.addProductToCart(product.product, product.prices, $scope.productDetailQty, { closeCartAfterTimeout: true, opencartAfterEdit: true }).then(function () { }, + function(){ + $scope.error = 'ERROR_ADDING_TO_CART'; + $scope.buyButtonEnabled = true; + }); + }; + + $scope.changeQty = function () { + if (!$scope.productDetailQty){ + $scope.buyButtonEnabled = false; + } else { + $scope.buyButtonEnabled = true; + } + }; + + +}]); \ No newline at end of file diff --git a/public/js/app/products/products-index.js b/public/js/app/products/products-index.js new file mode 100644 index 000000000..82157cc35 --- /dev/null +++ b/public/js/app/products/products-index.js @@ -0,0 +1,22 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; +/** Defines the dependencies for the 'products' module, which comprises the 'browse products' view as well + * as the product detail view. */ +angular.module('ds.products', [ + 'restangular', + 'ds.shared', + 'ds.cart', + 'ui.bootstrap' +]); + diff --git a/public/js/app/products/services/category-service.js b/public/js/app/products/services/category-service.js new file mode 100644 index 000000000..1719bdeb1 --- /dev/null +++ b/public/js/app/products/services/category-service.js @@ -0,0 +1,150 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +/** + * Encapsulates access to the CAAS product API. + */ +angular.module('ds.products') + + .factory('CategorySvc', ['$rootScope', '$state', 'PriceProductREST', 'GlobalData', '$q', + function($rootScope, $state, PriceProductREST, GlobalData, $q){ + + var categoryMap; + var catList; + + function sluggify(name){ + // very simplistic algorithm to handle German Umlaute - should ultimately be provided by server + if(name){ //ensure categories without name are not created + return window.encodeURIComponent(name.toLowerCase().replace(' ', '-').replace('ä', 'ae').replace('ö', 'oe').replace('ü', 'ue').replace('ß', 'ss')); + } + } + + function loadCategory(cat, parent){ + cat.path = []; + if(parent){ + angular.copy(parent.path, cat.path); + } + cat.path.push(cat); + cat.slug = sluggify(cat.name)+'~'+cat.id; + categoryMap[cat.id] = cat; + + if(cat.subcategories){ + angular.forEach(cat.subcategories, function(sub){ + loadCategory(sub, cat); + }); + } + } + + function getCategory(slug){ + var tildeIndex = slug.indexOf('~'); + if(tildeIndex < 0) { + return null; + } + var catId = slug.substring(tildeIndex+1, slug.length); + return categoryMap[catId]; + } + + return { + + /** Returns a promise over the category list as loaded from the service. Fires event "categories:updated". + * @param source - indicates source/reason for update, eg. 'languageUpdate' - see setting.eventSource. + * */ + getCategories: function (source) { + var catDef = $q.defer(); + + PriceProductREST.Categories.all('categories').getList({ expand: 'subcategories', toplevel: true }).then(function (result) { + categoryMap = {}; + catList = []; + angular.forEach(result.plain(), function (category) { + if(category.name){ + catList.push(category); + loadCategory(category); + } + }); + $rootScope.$emit('categories:updated', {categories: catList, source: source}); + catDef.resolve(catList); + }, function (error) { + catDef.reject(error); + }); + return catDef.promise; + }, + + /** Returns categories from cache.*/ + getCategoriesFromCache: function(){ + return catList; + }, + + getCategoryById: function(categoryId){ + var catDef = $q.defer(); + + if(categoryMap){ + catDef.resolve(categoryMap[categoryId]); + } else { + this.getCategories().then(function(){ + catDef.resolve(categoryMap[categoryId]); + }); + } + return catDef.promise; + }, + + /** Returns the category along with "element list". + * If category will be retrieved from cache if existing. + * @param categorySlug ("sluggified" name per logic in this service - name, ~, categoryId, e.g. 'green-bottles~3456') + * @returns {*} + */ + getCategoryWithProducts: function (categorySlug) { + var compositeDef = $q.defer(); + + if (!categorySlug) { + compositeDef.resolve(null); + } else { + var cdef = $q.defer(); + if (categoryMap) { + var category = getCategory(categorySlug); + if(category){ + cdef.resolve(category); + } else { + cdef.reject(); + $state.go('errors', { errorId : '404' }); + } + } else { + this.getCategories().then(function () { + var category = getCategory(categorySlug); + if(category){ + cdef.resolve(category); + } else { + cdef.reject(); + } + }); + } + cdef.promise.then(function (category) { + PriceProductREST.Categories.all('categories').one(category.id).all('elements').getList({recursive: true}).then( + function(elements){ + category.elements = elements.plain(); + compositeDef.resolve(category); + }, function(){ + compositeDef.resolve(category); + } + ); + }); + } + return compositeDef.promise; + }, + + /** Remove local category storage to force retrieval from server on next request.*/ + resetCategoryCache: function(){ + categoryMap = null; + } + }; +}]); diff --git a/public/js/app/products/services/price-product-rest.js b/public/js/app/products/services/price-product-rest.js new file mode 100644 index 000000000..fb20efdcd --- /dev/null +++ b/public/js/app/products/services/price-product-rest.js @@ -0,0 +1,68 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +/** + * Encapsulates configuration of the price, products, and productDetails APIs. + */ +angular.module('ds.products') + .factory('PriceProductREST', ['SiteConfigSvc', 'Restangular', 'GlobalData', function(siteConfig, Restangular, GlobalData){ + function applyLanguageHeader(RestangularConfigurer){ + RestangularConfigurer.addFullRequestInterceptor(function(element, operation, route, url, headers, params, httpConfig) { + + return { + element: element, + params: params, + headers: _.extend(headers, {'accept-language': GlobalData.getAcceptLanguages()}, {'hybris-currency': GlobalData.getCurrencyId()}), + httpConfig: httpConfig + }; + }); + } + + return { + /** Endpoint for Prices API.*/ + Prices: Restangular.withConfig(function (RestangularConfigurer) { + RestangularConfigurer.setBaseUrl(siteConfig.apis.prices.baseUrl); + }), + /** Endpoint for Products API. */ + Products: Restangular.withConfig(function(RestangularConfigurer) { + RestangularConfigurer.setBaseUrl(siteConfig.apis.products.baseUrl); + RestangularConfigurer.setResponseInterceptor(function (data, operation, what, url, response) { + var headers = response.headers(); + var result = response.data; + result.headers = headers; + return result; + }); + applyLanguageHeader(RestangularConfigurer); + + }), + /** Endpoint for ProductDetails API. */ + ProductDetails: Restangular.withConfig(function(RestangularConfigurer) { + RestangularConfigurer.setBaseUrl(siteConfig.apis.productDetails.baseUrl); + RestangularConfigurer.setResponseInterceptor(function (data, operation, what, url, response) { + var headers = response.headers(); + var result = response.data; + result.headers = headers; + return result; + }); + applyLanguageHeader(RestangularConfigurer); + }), + /** Endpoint for Category API.*/ + Categories: Restangular.withConfig(function(RestangularConfigurer) { + RestangularConfigurer.setBaseUrl(siteConfig.apis.categories.baseUrl); + applyLanguageHeader(RestangularConfigurer); + }) + }; + + + }]); \ No newline at end of file diff --git a/public/js/app/products/services/price-service.js b/public/js/app/products/services/price-service.js new file mode 100644 index 000000000..8be29f7ff --- /dev/null +++ b/public/js/app/products/services/price-service.js @@ -0,0 +1,35 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +/** + * Encapsulates access to the price API. + */ +angular.module('ds.products') + .factory('PriceSvc', ['PriceProductREST', function(PriceProductREST){ + + var getPrices = function (parms) { + return PriceProductREST.Prices.one('prices').get(parms); + }; + + return { + /** + * Retrieves prices list based on provided parameters (filter) + * @param {parms} query parameters + */ + query: function(parms) { + return getPrices(parms); + } + }; + + }]); \ No newline at end of file diff --git a/public/js/app/products/services/product-service.js b/public/js/app/products/services/product-service.js new file mode 100644 index 000000000..3da9a6ce9 --- /dev/null +++ b/public/js/app/products/services/product-service.js @@ -0,0 +1,47 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +/** + * Encapsulates access to the CAAS product API. + */ +angular.module('ds.products') + .factory('ProductSvc', ['PriceProductREST', function(PriceProductREST){ + + /** Executes a product query and extracts the "total" product count meta data and stores it in the + * GlobalData service. + * */ + var getProducts = function (parms) { + return PriceProductREST.Products.all('products').getList(parms); + }; + + var getProductDetailsList = function (parms) { + return PriceProductREST.ProductDetails.all('productdetails').getList(parms); + }; + + return { + /** + * Issues a query request on the product resource. + * @param {parms} query parameters - optional + * @return The result array as returned by Angular $resource.query(). + */ + query: function(parms) { + return getProducts(parms); + }, + + queryProductDetailsList: function(parms) { + return getProductDetailsList(parms); + } + + }; +}]); diff --git a/public/js/app/products/templates/product-detail.html b/public/js/app/products/templates/product-detail.html new file mode 100644 index 000000000..819a3741d --- /dev/null +++ b/public/js/app/products/templates/product-detail.html @@ -0,0 +1,88 @@ + +
+
+
+
+ +
+
+
+

+ {{product.product.name}} +

+
+ {{ product.prices[0].originalAmount | currency: currencySymbol }} + {{product.prices[0].effectiveAmount | currency: currencySymbol}} + {{product.prices[0].measurementUnit.quantity}} {{product.prices[0].measurementUnit.unitCode}} +
+
+ {{product.prices[0].effectiveAmount | currency: currencySymbol}} + {{product.prices[0].measurementUnit.quantity}} {{product.prices[0].measurementUnit.unitCode}} +
+ +
+ {{taxConfiguration.label}} +
+ +
+
+
+
+ + +
+
+
+ +
+
+
+ + {{'ERROR_ADDING_TO_CART' | translate}} + +
+
+
+ + +
+
+
+
+
+
+
+
+
{{'PRODUCT_DESCRIPTION' | translate}}
+
+ {{product.product.description}} +
+
+
+ + + + + + + + + diff --git a/public/js/app/products/templates/product-list.html b/public/js/app/products/templates/product-list.html new file mode 100644 index 000000000..8b0862c4d --- /dev/null +++ b/public/js/app/products/templates/product-list.html @@ -0,0 +1,101 @@ +
+
+
+

{{store.name}}

+
+
+ +
+
+ +
+
+

{{ category.name }}{{ 'ALL_PRODUCTS' | translate }}

+
+
+
+
{{'VIEWING' | translate}}:
+
+
+
+
+
+
+
+
+
+
{{'SORT_BY' | translate}}:
+
+ + +
+ + + +
+
+
+ +
+
+ +
+
+ +
+
+
{{'VIEWING' | translate}}:
+
+ +
+
+
+
+ + + +
+
+ + + + + + diff --git a/public/js/app/search/controllers/search-list-ctrl.js b/public/js/app/search/controllers/search-list-ctrl.js new file mode 100644 index 000000000..af5001227 --- /dev/null +++ b/public/js/app/search/controllers/search-list-ctrl.js @@ -0,0 +1,226 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + + + +'use strict'; + +angular.module('ds.searchlist') + .controller('SearchListCtrl', ['$scope', '$rootScope', 'ProductSvc', 'GlobalData', 'settings', '$state', '$location', '$timeout', '$anchorScroll', 'ysearchSvc', 'searchString', + function ($scope, $rootScope, ProductSvc, GlobalData, settings, $state, $location, $timeout, $anchorScroll, ysearchSvc, searchString) { + + $scope.searchString = searchString; + + $scope.pageSize = GlobalData.products.pageSize; + + $scope.pageNumber = 0; + $scope.setSortedPageSize = void 0; + $scope.setSortedPageNumber = 1; + $scope.sort = 'mostRelevant'; + $scope.products = []; + $scope.total = GlobalData.products.meta.total; + $scope.store = GlobalData.store; + $scope.prices = {}; + $scope.requestInProgress = false; + $scope.PLACEHOLDER_IMAGE = settings.placeholderImage; + + $scope.pagination = { + productsFrom: 1, + productsTo: 1 + }; + + //Initialization of algolia + ysearchSvc.init(); + + + $scope.loadedPages = 1; + $scope.loadMorePages = false; + + + function getProductIdsFromElements(elements) { + + return elements.map(function (element) { + return element.objectID; + }); + } + + $scope.currencySymbol = GlobalData.getCurrencySymbol(); + + + function assignPrices(products) { + var pricesMap = {}; + var currentCurrency = GlobalData.getCurrencyId(); + angular.forEach(products, function (product) { + if (product.prices && product.prices.length > 0) { + product.prices.forEach(function (price) { + if (price.currency === currentCurrency) { + pricesMap[product.product.id] = price; + } + }); + } + }); + + $scope.prices = angular.extend($scope.prices, pricesMap); + + //initialize the viewing bar promixity script + /* jshint ignore:start */ + initRefineAffix(); + /* jshint ignore:end */ + + if ($scope.loadMorePages) { + $timeout(function () { + $scope.pageSize = $scope.pageSize / $scope.loadedPages; + $scope.pageNumber = $scope.loadedPages; + + //Scroll to the page + if (!!$scope.products[$scope.pageSize * ($scope.loadedPages - 1)]) { + $scope.scrollTo('p_' + $scope.products[$scope.pageSize * ($scope.loadedPages - 1)].id); + } + + //Try scrolling to the last element + $scope.scrollTo('p_' + GlobalData.products.lastViewedProductId); + + //Set page parameter + $location.search('page', $scope.pageNumber).replace(); + + $scope.loadMorePages = false; + }, 1); + } + } + + function setMainImage(product) { + if (product.media && product.media.length) { + var mainImageArr = product.media.filter(function (media) { + return media.customAttributes && media.customAttributes.main; + }); + if (mainImageArr.length) { + product.mainImageURL = mainImageArr[0].url; + } else { + product.mainImageURL = product.media[0].url; + } + } + } + + function assignMainImage(products) { + _.forEach(products, function (product) { + setMainImage(product.product); + }); + } + + function getProducts(ids) { + + var query = { + expand: 'media', + sort: $scope.sort + }; + + //we only want to show published products on this list + var qSpec = 'published:true'; + qSpec = qSpec + ' ' + 'id:(' + ids + ')'; + query.q = qSpec; + + ProductSvc.queryProductDetailsList(query).then( + function (products) { + $scope.requestInProgress = false; + if (products) { + $scope.products = $scope.products.concat(products); + if ($scope.products.length === 0) { + $scope.pagination.productsFrom = 0; + } + + if (products.length) { + assignMainImage(products); + assignPrices(products); + } + + //Set page parameter + $location.search('page', $scope.pageNumber).replace(); + } + }, function () { + $scope.requestInProgress = false; + }); + } + + + $scope.addMore = function () { + + // prevent additional API calls if all products are retrieved + // infinite scroller initiates lots of API calls when scrolling to the bottom of the page + if (!GlobalData.products.meta.total || $scope.products.length < GlobalData.products.meta.total) { + if (!$scope.requestInProgress) { + $scope.pageNumber = $scope.pageNumber + 1; + + $scope.requestInProgress = true; + + var page = $scope.pageNumber; + + ysearchSvc.getResults($scope.searchString, {hitsPerPage: $scope.pageSize, page: page - 1}) + .then(function (content) { + + GlobalData.products.meta.total = content.nbHits; + $scope.total = content.nbHits; + + $scope.lastPageNumber = Math.ceil(content.nbHits / $scope.pageSize); + + if (content.hits.length > 0) { + var ids = getProductIdsFromElements(content.hits); + + getProducts(ids); + } + + }, function () { + $scope.requestInProgress = false; + }); + + } + } + }; + + $scope.backToTop = function () { + window.scrollTo(0, 0); + }; + + $scope.scrollTo = function (id) { + + // always scroll by 150 extra pixels (because of the navigation pane) + $anchorScroll.yOffset = 150; + + //Then try scrolling to the element + var old = $location.hash(); + $location.hash(id); + $anchorScroll(); + $location.hash(old); + }; + + //Check for query parameter that has the number of pages + if (!!$location.search().page) { + $scope.loadedPages = parseInt($location.search().page); + $scope.pageSize = $scope.pageSize * $scope.loadedPages; + $scope.sort = GlobalData.products.lastSort; + $scope.loadMorePages = true; + } + + // trigger initial load of items + $scope.addMore(); + + //Save id of the last viewed element, last viewed page and current sort + $scope.openProductDetails = function (productId) { + GlobalData.products.lastViewedProductId = productId; + GlobalData.products.lastSort = $scope.sort; + }; + + $scope.showRefineContainer = function () { + $scope.refineContainerShowing = !$scope.refineContainerShowing; + }; + + }]); + diff --git a/public/js/app/search/search-index.js b/public/js/app/search/search-index.js new file mode 100644 index 000000000..96e2d74ab --- /dev/null +++ b/public/js/app/search/search-index.js @@ -0,0 +1,19 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.searchlist', [ + 'ds.shared', + 'ds.products' +]); + diff --git a/public/js/app/search/templates/search-list.html b/public/js/app/search/templates/search-list.html new file mode 100644 index 000000000..78bad0480 --- /dev/null +++ b/public/js/app/search/templates/search-list.html @@ -0,0 +1,112 @@ + +
+
+
+

{{store.name}}

+
+
+ + + +
+
+
+
{{total}} {{ 'RESULTS' | translate }}
+
+
+
+
+
+
+ +
+
+ +
+ +
+ +
+ +
{{total}} {{ 'RESULTS' | translate }}
+
+
+
{{'VIEWING' | translate}}:
+
+
+
+
+
+
+
+
+
{{'SORT_BY' | translate}}:
+
+ + +
+ + + +
+
+
+
+
+
+ +
+
+ +
+
+
{{'VIEWING' | translate}}:
+
+ +
+
+
+
+ + + + + +
+ +
+ + + + + diff --git a/public/js/app/shared/controllers/sidebar-navigation-ctrl.js b/public/js/app/shared/controllers/sidebar-navigation-ctrl.js new file mode 100644 index 000000000..65575d7d3 --- /dev/null +++ b/public/js/app/shared/controllers/sidebar-navigation-ctrl.js @@ -0,0 +1,66 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.shared') +/** Handles interactions in the navigation side bar. */ + + + .controller('SidebarNavigationCtrl', ['$scope', '$state', '$stateParams', '$rootScope', 'GlobalData', + 'i18nConstants', 'AuthSvc', 'AuthDialogManager','CategorySvc', '$translate', '$q', 'settings', + + function ($scope, $state, $stateParams, $rootScope, GlobalData, i18nConstants, + AuthSvc, AuthDialogManager, CategorySvc, $translate, $q, settings) { + + $scope.tenantId = GlobalData.store.tenant; + + // determines "sign-in" link in sidebar + $scope.isAuthenticated = AuthSvc.isAuthenticated; + + $scope.user = GlobalData.user; + $scope.categories = CategorySvc.getCategoriesFromCache(); + + // binds logo in sidebar + $scope.store = GlobalData.store; + + + $scope.localeImages = settings.localeImages; + + var unbindCats = $rootScope.$on('categories:updated', function(eve, obj){ + if(!$scope.categories || obj.source === settings.eventSource.languageUpdate){ + $scope.categories = obj.categories; + } + }); + + + + $scope.$on('$destroy', unbindCats); + + $scope.logout = function () { + AuthSvc.signOut(); + }; + + $scope.login = function(dOpts, opts) { + AuthDialogManager.open(dOpts, opts); + }; + + $scope.hideMobileNav = function(){ + $rootScope.showMobileNav = false; + }; + + $scope.myAccount = function() { + $state.go('base.account'); + $scope.hideMobileNav(); + }; + + }]); diff --git a/public/js/app/shared/controllers/site-selector-ctrl.js b/public/js/app/shared/controllers/site-selector-ctrl.js new file mode 100644 index 000000000..7b729dcab --- /dev/null +++ b/public/js/app/shared/controllers/site-selector-ctrl.js @@ -0,0 +1,49 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2014 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.shared') + .controller('siteSelectorController', ['$rootScope', '$scope', 'GlobalData', 'SiteSelectorSvc', + function ($rootScope, $scope, GlobalData, SiteSelectorSvc) { + + $scope.sites = GlobalData.getSites(); + $scope.selectedSite = GlobalData.getSite(); + $scope.hoveredSite = {}; + $scope.selectedLanguage = function () { + return GlobalData.getLanguageCode(); + }; + + $scope.setHoveredSite = function (site) { + $scope.hoveredSite = site; + }; + + $scope.selectSiteAndLanguage = function (site, language) { + var previousCode = $scope.selectedSite.code; + var previousLanguage = $scope.selectedLanguage(); + + $scope.selectedSite = site; + + //Only apply changes if site or language changed + if (previousCode !== $scope.selectedSite.code) { + //Update cart and etc. and use choosen language + SiteSelectorSvc.changeSite(site, language); + } + else { + //If site is not changed, only change language + if (previousLanguage !== language) { + GlobalData.setLanguage(language); + } + } + }; + } + ]); diff --git a/public/js/app/shared/controllers/top-navigation-ctrl.js b/public/js/app/shared/controllers/top-navigation-ctrl.js new file mode 100644 index 000000000..4a50ec437 --- /dev/null +++ b/public/js/app/shared/controllers/top-navigation-ctrl.js @@ -0,0 +1,73 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.shared') +/** Handles interactions with the top menu (mobile menu, mobile search, mobile cart & full screen cart icon) */ + .controller('TopNavigationCtrl', ['$scope', '$rootScope', '$state', '$controller', 'GlobalData', 'CartSvc', 'AuthSvc', 'AuthDialogManager', 'CategorySvc', 'settings', + + function ($scope, $rootScope, $state, $controller, GlobalData, CartSvc, AuthSvc, AuthDialogManager, CategorySvc, settings) { + + $scope.GlobalData = GlobalData; + $scope.categories = CategorySvc.getCategoriesFromCache(); + + $scope.isAuthenticated = AuthSvc.isAuthenticated; + $scope.user = GlobalData.user; + + var unbindCats = $rootScope.$on('categories:updated', function(eve, obj){ + if(!$scope.categories || obj.source === settings.eventSource.languageUpdate){ + $scope.categories = obj.categories; + } + }); + + + $scope.cart = CartSvc.getLocalCart(); + var unbind = $rootScope.$on('cart:updated', function (eve, eveObj) { + $scope.cart = eveObj.cart; + }); + + $scope.$on('$destroy', unbind); + $scope.$on('$destroy', unbindCats); + + /** Toggles the "show cart view" state as the cart icon is clicked. Note that this is the + * actual cart details display, not the icon. */ + $scope.toggleCart = function () { + if (!$rootScope.showCart) { + AuthDialogManager.close(); + } + $rootScope.showCart = !$rootScope.showCart; + }; + + /** Determines if the cart icon should be displayed.*/ + $scope.isShowCartButton = function () { + return !$state.is('base.checkout.details') && !$state.is('base.confirmation'); + }; + + /** Toggles the navigation menu for the mobile view. */ + $scope.toggleOffCanvas = function () { + $rootScope.showMobileNav = !$rootScope.showMobileNav; + }; + + $scope.logout = function() { + AuthSvc.signOut(); + }; + + $scope.login = function(dOpts, opts) { + AuthDialogManager.open(dOpts, opts); + }; + + $scope.myAccount = function() { + $state.go('base.account'); + }; + + }]); \ No newline at end of file diff --git a/public/js/app/shared/directives/infinite-scrolling-visible-items.js b/public/js/app/shared/directives/infinite-scrolling-visible-items.js new file mode 100644 index 000000000..a0dd6283a --- /dev/null +++ b/public/js/app/shared/directives/infinite-scrolling-visible-items.js @@ -0,0 +1,163 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2014 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; +//Used for determing the current visible items indexes +//It is checking if the details (name and price) part of item is visible +angular.module('ds.shared') + .directive('infiniteScrollVisibleItems', ['$window', function ($window) { + return { + restrict: 'A', + link: function (scope, element) { + + $window = angular.element($window); + var lastScrollTop = 0; + var firstIndex = 0; + var elements = []; + var i = 0; + var offset = 0; + + //Function that checks if the element is visible in viewport + var isElementInViewport = function (el) { + var rect = el.getBoundingClientRect(); + + return ( + //Used 100 instead of 0 because of the top navigation + rect.top >= 100 && + rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) + ); + }; + + //Function that determines the direction of users scroll + var scrollDirectionUp = function () { + var st = $window.scrollTop(); + var directionUp = true; + if (st > lastScrollTop) { + // down scroll + directionUp = false; + } + lastScrollTop = st; + return directionUp; + }; + + //Function that handles events and calculates + var handler = function (e) { + + var firstVisibleIndex = 0; + var lastVisibleIndex = 0; + firstIndex = scope.pagination.productsFrom; + if (scrollDirectionUp()) { + //console.log('Scroll up'); + + //If it is scroll event then the checking is done only on small part of elements based + //on last visible items (if it is scroll up then the next visible items 100% have <= indexes + //than last one) + if (e.type === 'scroll') { + //Get all elements that have index smaller than scope.productsTo + elements = element.querySelectorAll('.productInfoContainer').slice(0, scope.pagination.productsTo); + } + else { + //Loop over all elements + elements = element.querySelectorAll('.productInfoContainer'); + } + if(elements.length > 0) { + + for (i = elements.length - 1; i >= 0; i--) { + //Find the first one that is visible + if (isElementInViewport(elements[i])) { + lastVisibleIndex = i + 1; + break; + } + } + firstVisibleIndex = 0; + for (i = lastVisibleIndex - 1; i >= 0; i--) { + //Find the first one that is visible + if (!isElementInViewport(elements[i])) { + firstVisibleIndex = i + 1; + break; + } + } + firstVisibleIndex += 1; + + offset = 0; + } + else{ + firstVisibleIndex = 1; + lastVisibleIndex = 1; + } + } + else { + //console.log('Scroll down'); + + if (e.type === 'scroll') { + //Get all elements from currently shown index - 3 until the end + // elements = element.querySelectorAll(':nth-child(n+' + queryIndex + ') .productInfoContainer'); + elements = element.querySelectorAll('.productInfoContainer').slice(scope.pagination.productsFrom - 1); + + offset = firstIndex; + } + else { + //Loop over all elements + elements = element.querySelectorAll('.productInfoContainer'); + + //Set offset to 1 because looping is done over all elements + offset = 1; + } + + if(elements.length > 0) { + + for (i = 0; i < elements.length; i++) { + if (isElementInViewport(elements[i])) { + firstVisibleIndex = i; + break; + } + } + + lastVisibleIndex = elements.length - 1; + for (i = firstVisibleIndex; i < elements.length; i++) { + if (!isElementInViewport(elements[i])) { + lastVisibleIndex = i - 1; + break; + } + } + } else{ + offset = 1; + firstVisibleIndex = 1; + lastVisibleIndex = 1; + } + } + + if (!scope.$$phase) { + scope.$apply(function () { + scope.pagination.productsFrom = firstVisibleIndex + offset; + scope.pagination.productsTo = lastVisibleIndex + offset; + }); + } + else { + scope.pagination.productsFrom = firstVisibleIndex + offset; + scope.pagination.productsTo = lastVisibleIndex + offset; + } + }; + + $window.on('resize scroll', handler); + + scope.$on('initialViewportCheck', function () { + //Fire this event when the list finished rendering on page and DOM is completed + + //Check if the firstVisibleIndex is 0 and only fire then, that way it is fired only on load + if(firstIndex === 0) { + handler({type: 'initialViewportCheck'}); + } + }); + } + }; + }]); \ No newline at end of file diff --git a/public/js/app/shared/directives/match-background.js b/public/js/app/shared/directives/match-background.js new file mode 100644 index 000000000..146a54805 --- /dev/null +++ b/public/js/app/shared/directives/match-background.js @@ -0,0 +1,25 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2014 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.shared') + .directive('matchBackground',[ function() { + return { + restrict: 'A', + link: function(scope, element) { + // match color of container to page background so that it will not differ for short verticle views. + var bgColor = $(element).css('background-color'); + $('html').css('background-color', bgColor); + } + }; + }]); \ No newline at end of file diff --git a/public/js/app/shared/directives/menu-aim.js b/public/js/app/shared/directives/menu-aim.js new file mode 100644 index 000000000..e131ff3b1 --- /dev/null +++ b/public/js/app/shared/directives/menu-aim.js @@ -0,0 +1,42 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + + +$(document).on('mouseover', '.js-megamenutoggle', function() { + + //close all other dropdown menus + $('.dropdown-menu').hide(); + + //show the current drop down menu if there is one + var subMenu = $(this).siblings('.dropdown-menu'); + if(subMenu.size() > 0){ + subMenu.show(); + } +}); + +$(document).on('click', '.js-megamenutoggle', function() { + $('.js-megamenutoggle').removeClass('mactive'); + $(this).addClass('mactive'); +}); + +$(document).on('mouseleave', '.js-mainNav', function(){ + $('.dropdown-menu').hide(); + +}); + +$(document).on('click', 'body', function() { + $('.dropdown-menu').hide(); +}); + + diff --git a/public/js/app/shared/directives/ngRepeat-rendering-finished.js b/public/js/app/shared/directives/ngRepeat-rendering-finished.js new file mode 100644 index 000000000..313320b2f --- /dev/null +++ b/public/js/app/shared/directives/ngRepeat-rendering-finished.js @@ -0,0 +1,27 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2014 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; +//Used for determing when the ng repeat has finished with rendering elements +angular.module('ds.shared') + .directive('onFinishRenderNgRepeat', ['$timeout','$rootScope',function ($timeout, $rootScope) { + return { + restrict: 'A', + link: function (scope, element, attrs) { + if (scope.$last === true) { + $timeout(function () { + $rootScope.$broadcast(attrs.onFinishRenderNgRepeatEvent); + }); + } + } + }; + }]); \ No newline at end of file diff --git a/public/js/app/shared/directives/popover.js b/public/js/app/shared/directives/popover.js new file mode 100644 index 000000000..f05628044 --- /dev/null +++ b/public/js/app/shared/directives/popover.js @@ -0,0 +1,77 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.auth') +.directive('popOver', ['$compile', '$controller', function ( $compile, Controller) { + + var getController = function getController(controllerInstance, scope) + { + var controller; + var controlsLocals = { + loginOpts: {}, + showAsGuest: false + }; + + controlsLocals.$scope = scope; + + controller = new Controller(controllerInstance, controlsLocals); + return controller; + }; + + return { + restrict: 'A', + scope:{ + templateUrl:'@', + popoverClass:'@', + popoverController:'@' + }, + + link: function (scope, element) { + + var template = ''; + $.ajax({url:scope.templateUrl}).done( + function(data){ + template = (''); + var options = { + trigger: 'click', + html: true, + template:template, + content: $compile(data)(scope) + }; + + $(element).popover(options).addClass(scope.popoverClass); + + + $(element).on('shown.bs.popover', function(){ + getController(scope.popoverController, scope); + scope.$digest(); + }); + + $(document).on('click', '.js-closePopover', function(){ + $(element).popover('hide'); + }); + + $('html').on('click', function (e) { + //the 'is' for buttons that trigger popups + //the 'has' for icons within a button that triggers a popup + if (!$(element).is(e.target) && $(element).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) { + $(element).popover('hide'); + } + }); + + }); + + } + }; +}]); diff --git a/public/js/app/shared/directives/quantity-input.js b/public/js/app/shared/directives/quantity-input.js new file mode 100644 index 000000000..dcd7b9152 --- /dev/null +++ b/public/js/app/shared/directives/quantity-input.js @@ -0,0 +1,38 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.shared') +/** + * quantity-input + * This directive restricts inputs to only accept numerical characters, as well as enter/tab/etc keystrokes + * @return {Object} + */ + .directive('quantityInput',[function(){ + return { + restrict: 'A', + link: function(scope, element) { + element.bind('keydown', function (event) { + if (!(event.keyCode===13 || event.ctrlKey || event.altKey || + (4734 && event.keyCode<41) || + (event.keyCode===46))) + { + event.preventDefault(); + } + }); + } + }; + }]); \ No newline at end of file diff --git a/public/js/app/shared/directives/sticky-navigation.js b/public/js/app/shared/directives/sticky-navigation.js new file mode 100644 index 000000000..e073bebdc --- /dev/null +++ b/public/js/app/shared/directives/sticky-navigation.js @@ -0,0 +1,59 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.shared') + .directive('stickyNavigation',[ '$timeout', function($timeout){ + + var container; + + $(window).resize(function(){ + + setNavigationHeight(container); + }); + + var setNavigationHeight = function setNavigationHeight(){ + var availableHeight = container.height(); + + var reservedHeight, marginOffset; + + reservedHeight = 0; + marginOffset = 0; + + $('.hy-stickyComponent').each(function(){ + reservedHeight += $(this).outerHeight(true) ; + }); + + if($('.hy-flexibleHeightNav').length > 0) + { + //get the margin for the container + marginOffset += parseInt($('.hy-flexibleHeightNav').css('marginBottom').split('px')[0], 10); + marginOffset += parseInt($('.hy-flexibleHeightNav').css('marginTop').split('px')[0], 10); + //remove the margin offset for display + reservedHeight -= marginOffset; + } + $('.hy-flexibleHeightNav .hy-scrollingNav').height( availableHeight - reservedHeight ); + + + }; + + return { + restrict: 'A', + link: function(scope, element) { + container = $(element); + angular.element(document).ready(function () { + $timeout(setNavigationHeight, 500); + }); + } + }; + }]); \ No newline at end of file diff --git a/public/js/app/shared/directives/y-breadcrumb.js b/public/js/app/shared/directives/y-breadcrumb.js new file mode 100644 index 000000000..c8e5a9a25 --- /dev/null +++ b/public/js/app/shared/directives/y-breadcrumb.js @@ -0,0 +1,46 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.ybreadcrumb', []) + .run(['$templateCache', function($templateCache) { + $templateCache.put('template/y-breadcrumb.html', + '' + ); + }]); + +angular.module('ds.ybreadcrumb') + .directive('ybreadcrumb',function() { + return { + restrict: 'E', + scope: { + items: '=yitem', + size: '=size' + }, + templateUrl: 'template/y-breadcrumb.html', + replace: true + }; + }); \ No newline at end of file diff --git a/public/js/app/shared/directives/y-inputs-dir.js b/public/js/app/shared/directives/y-inputs-dir.js new file mode 100644 index 000000000..502dfb9c6 --- /dev/null +++ b/public/js/app/shared/directives/y-inputs-dir.js @@ -0,0 +1,41 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +var regExpValidators = { + url: new RegExp(/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/), + email: new RegExp(/[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/), + id: new RegExp(/^[0-9a-zA-Z-_]+$/), + name: new RegExp(/^[0-9a-zA-Z-\s]+$/), + password: new RegExp(/[\x00-\x7F]+/), + description: new RegExp(/[\x00-\x7F]+/), + date: new RegExp(/[\w]+/), + keys: new RegExp(/^[.\-_a-zA-Z0-9:§]+$/), + apiVersion: new RegExp(/^(?:(\d+)\.)?(?:(\d+)\.)?(\*|\d+)$/), +}; + +angular.module('ds.security', []) + .directive('builderInput', function () { + return { + restrict: 'A', + require: 'ngModel', + link: function (scope, element, attr, ctrl) { + scope.$watch(attr.ngModel, function () { + if (ctrl.$viewValue) { + var isValid = regExpValidators[attr.builderInput].test(ctrl.$viewValue); + ctrl.$setValidity('regexpFilter', isValid); + } + }); + } + }; + }); diff --git a/public/js/app/shared/directives/y-search.js b/public/js/app/shared/directives/y-search.js new file mode 100644 index 000000000..544f5261a --- /dev/null +++ b/public/js/app/shared/directives/y-search.js @@ -0,0 +1,184 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2000-2014 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.ysearch', ['algoliasearch']) + .directive('ysearch', function () { + return { + controller: 'ysearchController', + restrict: 'E', + scope: { + parametersToReturn: '=?returnParameters', + page: '=?page', + searchString: '=?searchString' + }, + replace: true, + templateUrl: 'js/app/shared/templates/ysearch.html' + }; + }); + +angular.module('ds.ysearch') + .controller('ysearchController', ['$scope', '$rootScope', 'ysearchSvc', function (scope, $rootScope, ysearchSvc) { + + if (!scope.page) { + scope.page = 0; + } + if (!scope.searchString) { + scope.searchString = ''; + } + scope.search = { + text: scope.searchString, + results: [], + numberOfHits: 0, + showSearchResults: false, + searchAvailable: false, + searchError: false, + zeroResults: false + }; + + scope.yglyphiconVisible = false; + + //Init of algolia search service + ysearchSvc.init().then(function () { + scope.search.searchAvailable = ysearchSvc.getActiveStatus(); + }); + + scope.showSearchResults = function () { + + scope.search.showSearchResults = true; + if (scope.search.text !== '') { + if (scope.search.results.length === 0) { + scope.doSearch(scope.search.text, 0); + } + } + }; + + scope.hideSearchResults = function () { + $rootScope.closeOffcanvas(); + scope.search.showSearchResults = false; + }; + + //Used for checking if the user left te search field + angular.element(document) + .bind('mouseup', function (e) { + var container = angular.element('.y-search'); + if (!container.is(e.target) && container.has(e.target).length === 0) { + scope.search.showSearchResults = false; + //Used to apply changes for showSearchResults + scope.$digest(); + } + }); + + scope.doSearch = function () { + scope.search.showSearchResults = true; + if (scope.search.text === '') { + scope.search.showSearchResults = false; + scope.search.results = []; + scope.search.numberOfHits = 0; + } + else { + ysearchSvc.getResults(scope.search.text, { hitsPerPage: 5, page: 0 }) + .then(function (content) { + if (content.query !== scope.search.text) { + // do not take out-dated answers into account + return; + } + //Hide error only when search was ok + scope.search.searchError = false; + scope.search.numberOfHits = content.nbHits; + scope.search.results = content.hits; + scope.search.searchError = false; + + if (content.hits.length === 0) { + scope.search.zeroResults = true; + } + else { + scope.search.zeroResults = false; + } + + //Send event that search is done + $rootScope.$emit('search:performed', { searchTerm: scope.search.text, numberOfResults: scope.search.numberOfHits }); + }, function () { + //Show error that search didn't perform correctly. + scope.search.searchError = true; + }); + } + }; + }]); + + +angular.module('ds.ysearch') + .factory('ysearchSvc', ['algolia', 'ysearchREST', '$q', function (algolia, ysearchREST, $q) { + var client, index, algoliaConfiguration; + var active = false; + + var init = function () { + var promise = $q.when(getAlgoliaConfiguration()); + promise.then(function (config) { + if (!config.algoliaCredentials) { + config.algoliaCredentials = { + applicationId: '', + searchKey: '', + indexName: '' + }; + } + if (!!config.activation) { + active = config.activation; + } + client = algolia.Client(config.algoliaCredentials.applicationId, config.algoliaCredentials.searchKey, { method: 'https' }); + index = client.initIndex(config.algoliaCredentials.indexName); + }); + return promise; + }; + + var getActiveStatus = function () { + return active; + }; + + var getAlgoliaConfiguration = function () { + if (!!algoliaConfiguration) { + return algoliaConfiguration; + } + else { + algoliaConfiguration = ysearchREST.AlgoliaSettings.all('project').get('configuration'); + } + return algoliaConfiguration; + }; + + var getResults = function (searchString, parameters) { + if (index) { + return index.search(searchString, parameters); + } + else { + return init() + .then(function () { + return index.search(searchString, parameters); + }); + } + }; + + return { + init: init, + getActiveStatus: getActiveStatus, + getResults: getResults + }; + }]); + +angular.module('ds.ysearch') + .factory('ysearchREST', ['SiteConfigSvc', 'Restangular', function (siteConfig, Restangular) { + return { + AlgoliaSettings: Restangular.withConfig(function (RestangularConfigurer) { + RestangularConfigurer.setBaseUrl(siteConfig.apis.indexing.baseUrl); + }) + }; + }]); diff --git a/public/js/app/shared/directives/y-tracking.js b/public/js/app/shared/directives/y-tracking.js new file mode 100644 index 000000000..0b87f86c5 --- /dev/null +++ b/public/js/app/shared/directives/y-tracking.js @@ -0,0 +1,386 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.ytracking', []) + .constant('yTrackingLocalStorageKey', 'ytracking') + .directive('ytracking', ['ytrackingSvc', '$rootScope', '$document', + function (ytrackingSvc, $rootScope, $document) { + return { + restrict: 'A', + compile: function () { + + //Init tracking + ytrackingSvc.init(); + + //Handlers for events + $rootScope.$on('product:opened', function (arg, obj) { + + var name = !!obj.product && !!obj.product.name ? obj.product.name : ''; + var category = !!obj.categories && !!obj.categories[0] ? obj.categories[0].name : ''; + var price = !!obj.prices && !!obj.prices[0] ? obj.prices[0].effectiveAmount : ''; + + ytrackingSvc.setProductViewed(obj.product.id, name, category, price); + }); + $rootScope.$on('category:opened', function (arg, obj) { + var path = ''; + //For now we are only sending last category name, in future we will send array of categories + for (var i = 0; i < obj.path.length; i++) { + path = obj.path[i].name; + } + ytrackingSvc.setCategoryViewed(path); + }); + + $rootScope.$on('customer:login', function (arg, customer) { + ytrackingSvc.customerLogIn(customer); + }); + + $rootScope.$on('search:performed', function (arg, obj) { + ytrackingSvc.searchEvent(obj.searchTerm, obj.numberOfResults); + }); + + $rootScope.$on('checkout:opened', function (arg, cart) { + ytrackingSvc.proceedToCheckout(cart); + }); + + $rootScope.$on('order:placed', function (arg, obj) { + //Send ordered cart items to piwik + for (var i = 0; i < obj.cart.items.length; i++) { + //sku, name, categoryName, unitPrice, amount + var item = obj.cart.items[i]; + var price = !!item.itemPrice && !!item.itemPrice.amount ? item.itemPrice.amount : ''; + ytrackingSvc.addEcommerceItem(item.product.id, item.product.name, '', price, item.quantity); + } + //Send order details to piwik + var orderId = obj.orderId || ''; + var totalPrice = !!obj.cart && !!obj.cart.totalPrice ? obj.cart.totalPrice.amount : ''; + var subTotalPrice = !!obj.cart && !!obj.cart.subTotalPrice.amount ? obj.cart.subTotalPrice.amount : ''; + var tax = !!obj.cart && !!obj.cart.totalTax ? obj.cart.totalTax.amount : ''; + var shippingCost = !!obj.cart && !!obj.cart.shippingCost ? obj.cart.shippingCost.amount : ''; + var discountOffered = false; + + ytrackingSvc.orderPlaced(orderId, totalPrice, subTotalPrice, tax, shippingCost, discountOffered); + }); + + $rootScope.$on('cart:updated', function (arg, obj) { + ytrackingSvc.cartUpdated(obj.cart); + }); + + // This should be maybe changed, and user should put ng-click to all banners that we want to look for + // or say to user to give to all banners that they want to follow specific class + $document.on('click', '.banner', function () { + var element = angular.element(this); + var id = element.attr('id') || ''; + var url = element.attr('href') || ''; + + ytrackingSvc.bannerClick(id, url); + }); + } + }; + }]) + .factory('ytrackingSvc', ['SiteConfigSvc', 'yTrackingLocalStorageKey', '$http', 'localStorage', '$window', '$timeout', 'GlobalData', + function (siteConfig, yTrackingLocalStorageKey, $http, localStorage, $window, $timeout, GlobalData) { + + var internalCart = {}; + + /** + * Url for piwik service + */ + var url = siteConfig.apis.tracking.baseUrl; + + /** + * Create object from piwik GET request + */ + var getQueryParameters = function (hash) { + var split = hash.split('&'); + + var obj = {}; + for (var i = 0; i < split.length; i++) { + var kv = split[i].split('='); + obj[kv[0]] = decodeURIComponent(kv[1] ? kv[1].replace(/\+/g, ' ') : kv[1]); + } + + //Set date for this request to current datetime when request processed. Needed from CDM for order of events. + obj.date = new Date().getTime(); + + return obj; + }; + + /** + * Function that process piwik requests + */ + var processRequest = function (e) { + + //Get object from query parameters + var obj = getQueryParameters(e); + + //Make post request to service + makeRequest(obj); + }; + + /** + * Function that creates POST request to CDM endpoint + */ + var makeRequest = function (obj) { + + var req = { + method: 'POST', + url: url, + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json' + }, + data: JSON.stringify(obj) + }; + + $http(req).success(function () { + //Get all items that failed before and resend them to PIWIK server + var items = localStorage.getAllItems(yTrackingLocalStorageKey); + for (var i = 0; i < items.length; i++) { + makeRequest(items[i]); + } + }).error(function () { + //Store request to localstorage so it can be sent again when possible + localStorage.addItemToArray(yTrackingLocalStorageKey, obj); + }); + }; + + /** + * Initialization of piwik + */ + var init = function () { + $window._paq = $window._paq || []; + + //Make requests to service custom + $window._paq.push(['setCustomRequestProcessing', processRequest]); + + //Set document title + $window._paq.push(['setDocumentTitle', 'PageViewEvent']); + + //Set user id to equal the user token + //$window._paq.push(['setUserId', TokenSvc.getToken().getAccessToken().toString()]); + + $window._paq.push(['setTrackerUrl', url]); + + //Add site code. It should be . + $window._paq.push(['setSiteId', GlobalData.store.tenant + '.' + GlobalData.getSiteCode()]); + + $window._paq.push(['trackPageView']); + $window._paq.push(['enableLinkTracking']); + + }; + + /** + * Method that is setting current url + */ + var setCustomUrl = function () { + if (!!$window._paq) { + $window._paq.push(['setCustomUrl', $window.document.URL]); + } + }; + + /** + * User viewed product + */ + var setProductViewed = function (sku, name, category, price) { + if (!!$window._paq) { + //Wait current digest loop to finish, and then when the page is changed update values to PIWIK + $timeout(function () { + setCustomUrl(); + + $window._paq.push(['setEcommerceView', + sku, //(required) SKU: Product unique identifier + name, //(optional) Product name + category, //(optional) Product category, or array of up to 5 categories + price //(optional) Product Price as displayed on the page + ]); + + $window._paq.push(['trackPageView', 'ProductDetailPageViewEvent']); + }); + } + }; + + /** + * User viewed category + */ + var setCategoryViewed = function (categoryPage) { + if (!!$window._paq) { + //Wait current digest loop to finish, and then when the page is changed update values to PIWIK + $timeout(function () { + setCustomUrl(); + + $window._paq.push(['setEcommerceView', + false, //No product on Category page + false, //No product on Category page + categoryPage // Category Page, or array of up to 5 categories + ]); + + $window._paq.push(['trackPageView', 'CategoryPageViewEvent']); + }); + } + }; + + /** + * User searched event + */ + //Category missing? There is no way to set SearchEvent and SearchNoResultsEvent as action_view + var searchEvent = function (searchTerm, numberOfResults) { + if (!!$window._paq) { + if (numberOfResults > 0) { + $window._paq.push(['trackSiteSearch', + searchTerm, + false, //This is search category selected in our search. At the moment we dont have this + numberOfResults + ]); + } + else { + $window._paq.push(['trackSiteSearch', + searchTerm, + false, //This is search category selected in our search. At the moment we dont have this + 0 + ]); + } + } + }; + + /** + * User clicked on element with class banner + */ + var bannerClick = function (bannerId, url) { + if (!!$window._paq) { + $timeout(function () { + setCustomUrl(); + $window._paq.push(['setCustomVariable', 1, bannerId, url, 'page']); + $window._paq.push(['trackLink', 'BannerClickEvent', 'action_name']); + }); + } + }; + + /** + * User updated cart + */ + var cartUpdated = function (cart) { + var i = 0; + + //Check if there is some item that is removed in new cart?? + if (!!internalCart.items) { + if (!!cart.items) { + + var productFound = false; + for (i = 0; i < internalCart.items.length; i++) { + //Check if this item exists in new cart + for (var j = 0; j < cart.items.length; j++) { + if (internalCart.items[i].product.id === cart.items[j].product.id) { + productFound = true; + break; + } + } + if (!productFound) { + //If it didn't break before that means that the item is not found and deleted + addEcommerceItem(internalCart.items[i].product.id, internalCart.items[i].product.name, '', internalCart.items[i].itemPrice.amount, 0); + } + productFound = false; + } + } + else { + //All items are removed + for (i = 0; i < internalCart.items.length; i++) { + addEcommerceItem(internalCart.items[i].product.id, internalCart.items[i].product.name, '', internalCart.items[i].itemPrice.amount, 0); + } + } + } + + if (!!cart.items) { + for (i = 0; i < cart.items.length; i++) { + //sku, name, categoryName, unitPrice, amount + var item = cart.items[i]; + addEcommerceItem(item.product.id, item.product.name, '', item.itemPrice.amount, item.quantity); + } + } + + //Records the cart for this visit + $window._paq.push(['trackEcommerceCartUpdate', !!cart.totalPrice ? cart.totalPrice.amount : 0]); // (required) Cart amount + + //Save previous state for later comparasion (checking if objects are removed from cart) + internalCart = cart; + }; + + /** + * Function for adding item to cart + */ + var addEcommerceItem = function (id, name, categoryName, unitPrice, amount) { + if (!!$window._paq) { + $window._paq.push(['addEcommerceItem', + id, // (required) SKU: Product unique identifier + name, // (optional) Product name + categoryName, // (optional) Product category. You can also specify an array of up to 5 categories eg. ["Books", "New releases", "Biography"] + unitPrice, // (recommended) Product price + amount // (optional, default to 1) Product quantity + ]); + } + }; + + /** + * User opened checkout page + */ + var proceedToCheckout = function (cart) { + if (!!$window._paq) { + $timeout(function () { + setCustomUrl(); + + var cartId = !!cart.id ? cart.id : ''; + $window._paq.push(['setCustomVariable', 1, 'cart_id', cartId, 'page']); + $window._paq.push(['trackLink', 'ProceedToCheckoutEvent', 'action_name']); + }); + } + }; + + /** + * User created order + */ + var orderPlaced = function (orderId, orderGrandTotal, orderSubTotal, taxAmount, shippingAmount, isDiscountOffered) { + if (!!$window._paq) { + $window._paq.push(['trackEcommerceOrder', + orderId, // (required) Unique Order ID + orderGrandTotal, // (required) Order Revenue grand total (includes tax, shipping, and subtracted discount) + orderSubTotal, // (optional) Order sub total (excludes shipping) + taxAmount, // (optional) Tax amount + shippingAmount, // (optional) Shipping amount + isDiscountOffered // (optional) Discount offered (set to false for unspecified parameter) + ]); + } + }; + + /** + * User created order + */ + var customerLogIn = function () { + if (!!$window._paq) { + $window._paq.push(['trackPageView', 'CustomerLogin']); + } + }; + + return { + cartUpdated: cartUpdated, + init: init, + addEcommerceItem: addEcommerceItem, + orderPlaced: orderPlaced, + setProductViewed: setProductViewed, + setCategoryViewed: setCategoryViewed, + setCustomUrl: setCustomUrl, + searchEvent: searchEvent, + bannerClick: bannerClick, + proceedToCheckout: proceedToCheckout, + customerLogIn: customerLogIn + }; + }]); diff --git a/public/js/app/shared/filters/filters.js b/public/js/app/shared/filters/filters.js new file mode 100644 index 000000000..ba4b2792e --- /dev/null +++ b/public/js/app/shared/filters/filters.js @@ -0,0 +1,17 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.shared').filter('encodeURIComponent', function() { + return window.encodeURIComponent; +}); diff --git a/public/js/app/shared/http-proxy.js b/public/js/app/shared/http-proxy.js new file mode 100644 index 000000000..a7b703189 --- /dev/null +++ b/public/js/app/shared/http-proxy.js @@ -0,0 +1,112 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.httpproxy', []) + + /** Defines the HTTP interceptors. */ + .factory('interceptor', ['$q', '$injector', 'settings', 'TokenSvc', 'httpQueue', 'GlobalData', 'SiteConfigSvc', + function ($q, $injector, settings, TokenSvc, httpQueue, GlobalData, siteConfig) { + + return { + request: function (config) { + document.body.style.cursor = 'wait'; + // skip html requests as well as anonymous login URL + if (config.url.indexOf('templates') < 0 && config.url.indexOf(siteConfig.apis.account.baseUrl) < 0) { + + var token = TokenSvc.getToken().getAccessToken(); + if (token) { + config.headers[settings.headers.hybrisAuthorization] = 'Bearer ' + token; + } else { + // no local token - issue request to get token (async) and "save" http request for re-try + $injector.get('AnonAuthSvc').getToken(); + var deferred = $q.defer(); + httpQueue.appendBlocked(config, deferred); + return deferred.promise; + } + } + return config || $q.when(config); + }, + requestError: function (request) { + document.body.style.cursor = 'auto'; + return $q.reject(request); + }, + response: function (response) { + document.body.style.cursor = 'auto'; + return response || $q.when(response); + }, + responseError: function (response) { + document.body.style.cursor = 'auto'; + + if (response.config.url.indexOf('/hybris/piwik') > -1 || + response.config.url.indexOf('loginconfig') > -1 || + response.config.url.indexOf('algolia') > -1) { + //Ignore if request to one of this endpoints fails. + } + else { + //Normal process of other responses + if (response.status === 401) { + // 401 on login means wrong password - requires user action + if (response.config.url.indexOf('login') < 0 && response.config.url.indexOf('password/change') < 0) { + // remove any existing token, as it appears to be invalid + TokenSvc.unsetToken(); + var $state = $injector.get('$state'); + // if current state requires authentication, prompt user to sign in and reload state + if ($state.current.data && $state.current.data.auth && $state.current.data.auth === 'authenticated') { + $injector.get('AuthDialogManager').open({}, {}, {}); + } else { + // else, retry http request - new anonymous token will be triggered automatically + // issue request to get token (async) and "save" http request + $injector.get('AnonAuthSvc').getToken(); + var deferred = $q.defer(); + httpQueue.appendRejected(response.config, deferred); + return deferred.promise; + } + } else if (response.config.url.indexOf('login') < 0 && response.config.url.indexOf('password/change') < 0) { + // show error view + $injector.get('$state').go('errors', { errorId: '401' }); + } + + } else if (response.status === 403) { + // if 403 during login, should already be handled by auth dialog controller + if (response.config.url.indexOf('login') < 0 && response.config.url.indexOf('coupon') < 0) { + // using injector lookup to prevent circular dependency + var AuthSvc = $injector.get('AuthSvc'); + if (AuthSvc.isAuthenticated()) { + // User is authenticated but is not allowed to access resource + // this scenario shouldn't happen, but if it does, don't fail silently + window.alert('You are not authorized to access this resource!'); + } else { + // User is not authenticated - make them log in and reload the current state + $injector.get('AuthDialogManager').open({}, {}, {}).then( + // success scenario handled as part of "logged in" workflow + function () { }, + function () { // on dismiss, re-route to home page + $injector.get('$state').go(settings.homeState); + }); + } + } + } else if (response.status === 404 && response.config.url.indexOf('cart') < 0 && response.config.url.indexOf('login') < 0 && response.config.url.indexOf('password/reset') < 0 && response.config.url.indexOf('coupon') < 0) { + $injector.get('$state').go('errors', { errorId: '404' }); + } else if (response.status === 500) { + //show error view with default message. + $injector.get('$state').go('errors'); + } + + } + return $q.reject(response); + } + }; + }]); + + diff --git a/public/js/app/shared/i18n/i18-constants.js b/public/js/app/shared/i18n/i18-constants.js new file mode 100644 index 000000000..d31550602 --- /dev/null +++ b/public/js/app/shared/i18n/i18-constants.js @@ -0,0 +1,40 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.i18n') + // default and supported languages for static information only - service language preferences are set in "GlobalData" via config service + .constant('translateSettings', { + defaultLanguageCode: 'en', + supportedLanguages: ['en', 'de'] + }) +/** Provides access to the dictionaries.*/ + .provider('i18nConstants', ['TranslationsEN', 'TranslationsDE', + function i18nConstantsProvider(TranslationsEN, TranslationsDE) { + + this.$get = [function () { + return this; + }]; + + this.languages = { + en: { + code: 'en', + translations: TranslationsEN + }, + de: { + code: 'de', + translations: TranslationsDE + } + }; + } + ]); \ No newline at end of file diff --git a/public/js/app/shared/i18n/i18-index.js b/public/js/app/shared/i18n/i18-index.js new file mode 100644 index 000000000..db00eb447 --- /dev/null +++ b/public/js/app/shared/i18n/i18-index.js @@ -0,0 +1,17 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.i18n', [ + 'pascalprecht.translate' + ]); \ No newline at end of file diff --git a/public/js/app/shared/i18n/lang/de.js b/public/js/app/shared/i18n/lang/de.js new file mode 100644 index 000000000..f1fbec6d1 --- /dev/null +++ b/public/js/app/shared/i18n/lang/de.js @@ -0,0 +1,347 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.i18n') + .constant('TranslationsDE', { + + + /* + + languages + */ + en: 'Englisch', + de: 'Deutsch', + fr: 'Französisch', + es: 'Spanisch', + + + /* + countries + */ + CANADA: 'Canada', + USA: 'USA', + + + /* + cart + */ + BACK_TO_CHECKOUT: 'zurück zur Kasse', + CHECKOUT: 'Kasse', + CONTINUE_SHOPPING: 'Weiter Einkaufen', + SHOP: 'Geschäft', + EST_ORDER_TOTAL: 'Zwischensumme', + FREE_SHIPPING: 'Kostenloser Versand', + ITEM: 'Artikel', + ITEM_PRICE: 'Artikel Preis', + TOTAL_PRICE: 'Gesamtpreis', + CART_UNAVAILABLE: 'Warenkorb momentan nicht zugänglich. Bitte noch einmal anfordern.', + CART_EMPTY: 'Keine Artikel im Korb', + CART_ITEM_UPDATE_ERROR: 'Aktualizierung nicht erfolgreich. Bitte noch einmal anfordern.', + ESTIMATE_TAX: 'Schätzung Steuerberatung', + APPLY: 'Anwenden', + ESTIMATE_TAX_ERROR: 'PLZ/Postleitzahl und Land Code Felder sind Pflichtfelder', + + + /* + checkout + */ + ADDRESS: 'Adresse', + ADDRESS_LINE_1: 'Adresszeile 1', + ADDRESS_LINE_2: 'Adresszeile 2', + BILLING_ADDRESS: 'Rechnungsadresse', + CITY: 'Stadt', + PROVINCE: 'Provinz', + CONTINUE: 'Weiter', + COUNTRY: 'Land', + CREDIT_CARD_NUMBER: 'Kreditkartennummer', + CVC_NUMBER: 'CVC Nummer', + DELIVERY_METHOD: 'Versandart', + EMAIL: 'Email', + EDIT: 'Bearbeiten', + FIRST_NAME: 'Vorname', + FREE_STANDARD_SHIPPING: 'Kostenloser Standardversand', + FLAT_RATE_SHPPING: 'Pauschale', + INVALID_EXPIRATION_DATE: 'Ungültiges Ablaufdatum', + ITEMS: 'Artikel', + LAST_NAME: 'Nachname', + LAST_NAME_REQUIRED: 'Nachname Pflicht', + METHOD: 'Verfahren', + MIDDLE_NAME: 'Zweiter Vorname', + MONTH: 'Monat', + NAME: 'Name', + NO_ITEMS_IN_CART: 'Es sind keine Artikel im Warenkorb.', + OPTIONAL: 'optional', + ORDER_DETAILS: 'Bestelldetails', + ORDER_DATE: 'Bestelldatum', + ORDER_PENDING: 'Einen Moment... Sie Ihre Bestellung', + ORDER_TOTAL: 'Gesamtsumme', + PAYMENT: 'Zahlung', + PHONE_REQUIRED: 'Telefon Pflicht', + PLACE_ORDER: 'Bestellung aufgeben', + PLEASE_CORRECT_ERRORS: 'Bitte korrigieren sie alle Fehler.', + PLEASE_ENTER_VALID_CC: 'Bitte geben Sie eine gültige Kreditkartennummer an.', + PLEASE_ENTER_VALID_CODE: 'Bitte geben Sie einen gültigen Code an.', + PLEASE_ENTER_VALID_EMAIL: 'Geben Sie eine gültige E-Mail an.', + REQUIRED: 'Erforderlich', + SAME_AS_BILLING_ADDRESS: 'entspricht Rechnungsadresse', + SECURE_CHECKOUT: 'Sicher bestellen', + SELECT_FROM_ADDRESS_BOOK: 'Vom Adressbuch Wählen', + SHIPPING: 'Versand', + SHIPPING_ADDRESS: 'Versandadresse', + SIMPLE_3_STEP_CHECKOUT: 'Einfach bestellen in drei Schritten', + SIMPLE_4_STEP_CHECKOUT: 'Einfach bestellen in vier Schritten', + STATE: 'Bundesland', + STEP_1_MY_DETAILS: '1. Meine Daten', + STEP_2_SHIPPING_INFORMATION: '2. Versandinformationen', + STEP_3_PAYMENT: '3. Zahlung', + STEP_4_REVIEW_ORDER: '4. Bestätigung', + SUBTOTAL: 'Zwischensumme', + DISCOUNT: 'Rabatt', + TAX: 'MwSt', + TOTAL: 'gesamt', + YEAR: 'Jahr', + + /* addresses */ + DEFAULT: 'Default', + DISTRICT: 'Kreis', + STREET_NAME: 'Straßenname mit Hausnummer', + BUILDING_NAME: 'Gebäudename', + ROOM_NUMBER: 'Zimmernummer', + PREFECTURE: 'Präfektur', + POSTAL_CODE: 'Postleitzahl', + ZIP: 'PLZ', + CITY_VILLAGE: 'Stadt / Dorf / Stadt Ward', + SUBAREA: 'Untergebiet', + FURTHER_SUBAREA: 'Weitere Untergebiet , Block # / Haus #', + + /* coupons */ + COUPON_APPLY: 'Anwenden', + COUPON_APPLIED: 'Angewandt', + COUPON_CODE: 'Gutscheincode hinzufügen', + COUPON_ERROR: 'Coupon nicht gültig', + COUPON_ERR_CURRENCY: 'Währungs ungültige Gutschein', + COUPON_ERR_ANONYMOUS: 'Melden Sie sich an , um Gutscheincode zu nutzen', + COUPON_ERR_UNAVAILABLE: 'Coupon nicht mehr verfügbar', + COUPON_MINIMUM_NOT_MET: 'Aktuelle Bestellsumme nicht die erforderliche Mindest für diesen Gutschein treffen', + COUPON_NOT_VALID: 'Coupon ungültig', + + /* + confirmation + */ + A_COPY_OF_YOUR_ORDER_DETAILS_HAS_BEEN_SENT_TO: 'Eine Bestellbestätigung wurde Ihnen zugesendet', + ENJOY_YOUR_ITEMS: 'Viel Spass mit ihrer Bestellung!', + FOR_YOUR_ORDER: 'für Ihre Bestellung!', + ITEM_IN_YOUR_ORDER: 'Element in der Reihenfolge', + ITEMS_IN_YOUR_ORDER: 'Artikel in Ihrer Bestellung', + QUESTIONS: 'Wenn Sie irgendwelche Fragen haben, kontaktieren Sie uns unter', + ORDER: 'Bestellung', + RETURN_TO_SHOPPING: 'Weiter einkaufen', + SUCCESS: 'Erfolg!', + ACCOUNT_SUCCESS: 'Dein Konto wurde erfolgreich erstellt!', + THANK_YOU: 'Vielen Dank', + THANK_YOU_FOR_YOUR_ORDER: 'Vielen Dank Für Ihre Bestellung', + THE_SHIPMENT_IS_SCHEDULED_TO_ARRIVE_AT_THE_FOLLOWING_LOCATION: 'Die Artikel werden an die folgenden Adresse gesendet', + YOUR_ORDER_IS: 'Ihre Bestellung ist # ', + ONE_MORE_STEP: 'Ein weiterer Schritt , um ein Konto zu erstellen', + ONE_MORE_STEP_MESSAGE: 'für eine Schnellauswahl und einfachen Zugang zu Vorherige Bestellungen', + SKU: 'SKU', + + /* + navigation + */ + PRODUCTS: 'Produkte', + BACK_TO: 'Zurück zu', + REGION: 'Region', + + /* + product detail page + */ + BUY: 'In den Warenkorb', + ADD_TO_CART:'In den Warenkorb', + PRODUCT_DESCRIPTION: 'Produkte Beschreibung', + OUT_OF_STOCK: 'Ausverkauft', + QTY: 'Menge', + ERROR_ADDING_TO_CART: 'Artikel konnte nicht hinzugefügt werden. Bitte noch einmal probieren.', + + + /* + product list page + */ + NEWEST: 'neueste', + OF: 'Von', + PRICE_HIGH_LOW: 'Preis absteigend', + PRICE_LOW_HIGH: 'Preis aufsteigend', + SORT_BY: 'Sortieren', + VIEWING: 'Anzeige', + PRODUCTS_FROM_TO: '
{{productsFrom}}-{{productsTo}} of {{total}}
', + ALL_PRODUCTS: 'Alle Produkte', + + EMPTY_MSG: 'Demo Shop - Coming soon', + LANGUAGES: 'Sprachen', + SELECT_LANGUAGE: 'Wählen Sie eine Sprache', + SIGN_OUT: 'Austragen', + SIGN_IN: 'Anmelden', + SIGN_IN_WITH_FACEBOOK: 'Mit Facebook Anmelden', + LOG_IN_WITH_GOOGLE_PLUS: 'Mit Google+ Anmelden', + MY_ACCOUNT: 'Mein Profil', + CREATE_ACCOUNT: 'Konto erstellen', + CONTINUE_AS_GUEST: 'Weiter als Gast', + + /* + account page + */ + ACCOUNT_DETAILS: 'Kontodaten', + ADD: 'Hinzufügen', + ADDRESSBOOK: 'Adressbuch', + NO_ADDRESSES: 'Sie haben keine Adressen gespeichert!', + ADD_ADDRESS: 'Adresse hinzufügen', + CLOSE: 'Schließen', + COMPANY_NAME: 'Name Der Firma', + CONFIRM_ADDRESS_REMOVAL: 'Adresse löschen?', + FULL_NAME: 'Vollständiger Name', + CONTACT_PHONE: 'Telefon', + CURRENCY: 'Währung', + SELECT_CURRENCY: 'Wählen Sie eine Währung', + DATE: 'Datum', + LOCALE: 'Ort', + NAME_REQUIRED: 'Name Erforderlich', + STREET: 'Straße', + SAVE: 'Speichern', + WELCOME: 'Willkommen,
{{firstName}} {{middleName}} {{lastName}}', + ITEM_IN_ORDER: 'translation needed', + ITEMS_IN_ORDER: 'Postenzähler', + NOT_SET: 'Unbekannt', + ORDER_HISTORY: 'Bestellverlauf', + ORDER_NUMBER: 'Bestellnummer', + ORDER_STATUS: 'Auftragsstatus', + SHIPPING_DETAILS: 'SHIPPING DETAILS', + STREET_NUMBER: 'Nummer', + UPDATE_PASSWORD: 'Passwort aktualisieren', + CURRENT_PASSWORD: 'Aktuelles Passwort', + NEW_PASSWORD: 'Neues Passwort', + CONFIRM_NEW_PASSWORD: 'Neues Passwort bestätigen', + PASSWORDS_NO_MATCH: 'Passwörter stimmen nicht überein', + WRONG_CURRENT_PASSWORD: 'Aktuelles Passwort nicht korrekt.', + PASSWORD_TOO_SHORT: 'Passwort zu kurz', + SHOW_ALL: 'Alle anzeigen', + SHOW_LESS: 'Weniger', + + /* + login, password, signup + */ + PASSWORD: 'Passwort', + PASSWORD_MINCHAR: 'Min. 6 Zeichen', + CONFIRM_PASSWORD: 'Passwort bestätigen', + FORGOT_PW: 'Passwort vergessen?', + RESET_PASSWORD: 'Neues Passwort', + RESET_PW_TITLE: 'Passwort Zurücksetzen', + RESET_PW_INSTRUCT: 'Bitte ein neues Passwort angeben.', + TOKEN: 'Token', + FORGOT_PW_INSTRUCT: 'Bitte Emailadresse angeben. Ein Link zum Zurücksetzen des Passworts wird Ihnen dann zugesendet.', + REQUEST_PW_EXPIRED: 'Passwort Zurücksetzung Abgelaufen', + REQUEST_PW_EXPIRED_MSG: 'Die Anfrage zum Zurücksetzen des Passworts ist abgelaufen. Bitte Emailadresse angeben und noch einmal anfordern.', + CHECK_EMAIL:'Überprüfen Sie Ihre Email', + CHECK_EMAIL_INSTRUCT: '... und klicken auf den Link zum Zurücksetzen des Passworts. Gültig für 24 Stunden.', + PASSWORD_REQUIRED: 'Passwort mit mindestens 6 Zeichen erforderlich.', + PASSWORDS_MUST_MATCH: 'Passwörter müssen übereinstimmen.', + PW_SUCCESS: 'Erfolg', + PW_CHANGED_MSG: 'Ihr Passwort wurde geändert. Sie können sich nun in Ihrem Konto anmelden.', + INVALID_TOKEN: 'Dieser Link is nicht gültig. Bitte neu anfordern.', + PW_CHANGE_FAILED: 'Passwort konnte nicht geändert werden.', + RESET_PW_REPEAT: 'Link nochmal anfordern.', + FIELD_REQUIRED: 'Angabe erforderlich', + FIELD_TOO_SHORT: 'Feld zu kurz!', + FIELDS_NOT_MATCHING: 'Angaben stimmen nicht überein!', + + SERVER_UNAVAILABLE: 'Server ist nicht verfügbar, bitte versuchen Sie es später erneut.', + INVALID_CREDENTIALS: 'Anmeldeinformation ungültig.', + PASSWORD_INVALID: 'Passwort ungültig - mindestens 6 Zeichen erforderlich.', + ACCOUNT_LOCKED: 'Konto wegen hoher Anzahl von ungültigen Anmeldeversuchen gesperrt. Bitte warten Sie 5 Minuten.', + ACCOUNT_ALREADY_EXISTS: 'Konto für diese Emailadresse wurde bereits erstellt.', + FORGOT_PASSWORD: 'Passwort vergessen?', + EMAIL_NOT_FOUND: 'Emailadresse nicht mit einem Konto verbunden.', + ENTER_EMAIL: 'Emailadresse angeben', + ENTER_EXISTING_EMAIL: 'Geben Sie die E-Mail-Adresse eines vorhandenen Kontos', + LOGIN_FAILED: 'Anmeldung fehlgeschlagen', + + ACCOUNT_EMAIL: 'Konto Email', + + /* + error display + */ + ERROR_TITLE: 'Interner Fehler', + ERROR_MESSAGE: 'Ups! Da ist ein Problem', + ERROR_TITLE_401: 'Unbefugt', + ERROR_MESSAGE_401: 'Ups! Da ist ein Problem. Ihre Anmeldedaten gewähren keinen Zugang zu dieser Seite', + ERROR_TITLE_404: 'Seite nicht gefunden', + ERROR_MESSAGE_404: 'Ups! Da ist ein Problem. Diese Seite ist nicht vorhanden', + ERROR_REDIRECT: 'Hier ist eine Seite , damit Sie wieder auf die Strecke', + ERROR_BUTTON_TEXT: 'HOMEPAGE', + + + /* + titles + */ + DR: 'Dr.', + MR: 'Herr', + MRS: 'Frau', + MS: 'Fräulein', + TITLE: 'Anrede', + + + /* + order statuses + */ + COMPLETED: 'Fertiggestellt', + CONFIRMED: 'Bestätigt', + CREATED: 'Erstellt', + DECLINED: 'Zurückgegangen', + SHIPPED: 'Ausgeliefert', + + /* + Order Details + */ + CREDIT_CARD: 'Kreditkarte', + ON: 'an', + QUANTITY: 'Menge', + SHIPPED_BY_ON: 'Versendet durch: {{carrier}} on {{shippedDate}}', + TRACKING_NUMBER: 'Verfolgungsnummer', + + + /* + Search + */ + FOUND_FOR: 'gefunden', + SEARCH: 'Suche', + SEARCH_RESULTS: 'Suchergebnisse', + MOST_RELEVANT: 'Wichtigsten', + SEARCH_AGAIN: 'Neue Suche', + RESULTS: 'Ergebnisse', + SEE_ALL: 'Zeige Alle', + SEARCH_UNAVAILABLE: 'Suche ist derzeit nicht verfügbar', + NO_RESULTS_FOUND: 'Keine Ergebnisse gefunden', + + //------------------------------------------------- + // FOOTER + //------------------------------------------------- + + //XFLD + TERMS_AND_CONDITIONS: 'Geschäftsbedingungen', + //XFLD + CONTACT_US: 'Kontaktieren Sie Uns', + //XFLD + SITE_MAP: 'Site Map', + + + }); diff --git a/public/js/app/shared/i18n/lang/en.js b/public/js/app/shared/i18n/lang/en.js new file mode 100644 index 000000000..c35aa859c --- /dev/null +++ b/public/js/app/shared/i18n/lang/en.js @@ -0,0 +1,576 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.i18n') + .constant('TranslationsEN', { + + en: 'English', + de: 'German', + fr: 'French', + es: 'Spanish', + + //XBUT + //------------------------------------------------- + // Cart + //------------------------------------------------- + + BACK_TO_CHECKOUT: 'Back to checkout', + //XBUT + CHECKOUT: 'Checkout', + //XBUT + CONTINUE_SHOPPING: 'Continue shopping', + //XBUT + SHOP: 'Shop', + //XFLD + EST_ORDER_TOTAL: 'Est. order total', + //XFLD + FREE_SHIPPING: 'Free Shipping and Returns in the US', + //XFLD + ITEM: 'Item', + //XFLD + ITEM_PRICE: 'Item Price', + //XFLD + TOTAL_PRICE: 'Total Price', + //XMSG + CART_UNAVAILABLE: 'The cart is currently unavailable. Please try again.', + //XMSG + CART_EMPTY: 'Your cart is empty', + //XMSG + CART_ITEM_UPDATE_ERROR: 'The update was not successful. Please try again.', + ESTIMATE_TAX: 'Estimate Tax', + APPLY: 'Apply', + ESTIMATE_TAX_ERROR: 'Zip/Postal Code and Country Code fields are required', + + //XFLD + //------------------------------------------------- + // Checkout + //------------------------------------------------- + + + ADDRESS: 'Address', + //XFLD + ADDRESS_LINE_1: 'Address Line 1', + //XFLD + ADDRESS_LINE_2: 'Address Line 2', + //XGRP + BILLING_ADDRESS: 'Billing Address', + //XFLD + CITY: 'City', + //XFLD + PROVINCE: 'Province', + //XBUT + CONTINUE: 'Continue', + //XFLD + COUNTRY: 'Country', + //XFLD + CREDIT_CARD_NUMBER: 'Credit Card Number', + //XFLD + CVC_NUMBER: 'CVC Number', + //XFLD + DELIVERY_METHOD: 'Delivery Method', + //XFLD + EMAIL: 'Email', + //XBUT + EDIT: 'Edit', + //XFLD + FIRST_NAME: 'First Name', + //XLST + FREE_STANDARD_SHIPPING: 'Free Standard Shipping', + //XLST + FLAT_RATE_SHPPING: 'Flat Rate', + //XMSG + INVALID_EXPIRATION_DATE: 'Invalid Expiration Date', + //XFLD + ITEMS: 'Items', + //XFLD + LAST_NAME: 'Last Name', + //XFLD + LAST_NAME_REQUIRED: 'Last Name Required', + //XFLD + METHOD: 'Method', + //XFLD + MIDDLE_NAME: 'Middle Name', + //XFLD + MONTH: 'Month', + //XFLD + NAME: 'Name', + //XMSG + NO_ITEMS_IN_CART: 'There are no items in your cart.', + //XACT + OPTIONAL: 'Optional', + //XGRP + ORDER_DETAILS: 'Order Details', + //XFLD + ORDER_DATE: 'Order Date', + //XMSG + ORDER_PENDING: 'One moment... Placing your order', + //XFLD + ORDER_TOTAL: 'Order Total', + //XFLD + PAYMENT: 'Payment', + //XMSG + PHONE_REQUIRED: 'Phone Required', + //XBUT + PLACE_ORDER: 'Place Order', + //XFLD + PLACED_AT: 'Placed At', + //XMSG + PLEASE_CORRECT_ERRORS: 'Please correct the errors above before placing your order.', + //XMSG + PLEASE_ENTER_VALID_CC: 'Please enter a valid credit card number', + //XMSG + PLEASE_ENTER_VALID_CODE: 'Please enter a valid code', + //XMSG + PLEASE_ENTER_VALID_EMAIL: 'Please enter a valid email in the format name@example.com', + //XACT + REQUIRED: 'Required', + //XCKL + SAME_AS_BILLING_ADDRESS: 'Same As Billing Address', + //XTIT + SECURE_CHECKOUT: 'Secure Checkout', + //XBUT + SELECT_FROM_ADDRESS_BOOK: 'Select from address book', + //XFLD + SHIPPING: 'Shipping', + //XGRP + SHIPPING_ADDRESS: 'Shipping Address', + //XGRP + SIMPLE_3_STEP_CHECKOUT: 'Simple 3 Step Checkout', + //XGRP + SIMPLE_4_STEP_CHECKOUT: 'Simple 4 Step Checkout', + //XFLD + STATE: 'State', + //XGRP + STEP_1_MY_DETAILS: 'Step 1. My Details', + //XGRP + STEP_2_SHIPPING_INFORMATION: 'Step 2. Shipping Information', + //XGRP + STEP_3_PAYMENT: 'Step 3. Payment', + //XGRP + STEP_4_REVIEW_ORDER: 'Step 4. Review Order', + //XFLD + SUBTOTAL: 'Subtotal', + //XFLD + DISCOUNT: 'Discount', + //XFLD + TAX: 'Tax', + //XFLD + TOTAL: 'Total', + //XFLD + YEAR: 'Year', + + //XFLD + //------------------------------------------------- + // Addresses + //------------------------------------------------- + + + DEFAULT: 'Default', + //XFLD + DISTRICT: 'District', + //XFLD + STREET_NAME: 'Street Name/ Number', + //XFLD + BUILDING_NAME: 'Building Name/ Number', + //XFLD + ROOM_NUMBER: 'Room Number', + //XFLD + PREFECTURE: 'Prefecture', + //XFLD + POSTAL_CODE: 'Postal Code', + //XFLD + ZIP: 'Zip/ Postal Code', + //XFLD + CITY_VILLAGE: 'City/ Village/ City Ward', + //XFLD + SUBAREA: 'Subarea', + //XFLD + FURTHER_SUBAREA: 'Further Subarea, Block #/ House #', + + //XBUT + //------------------------------------------------- + // Coupons + //------------------------------------------------- + + + COUPON_APPLY: 'Apply', + //XFLD + COUPON_APPLIED: 'Applied', + //XLNK + COUPON_CODE: 'Add Coupon Code', + //XMSG + COUPON_ERROR: 'Coupon not valid.', + //XMSG + COUPON_ERR_CURRENCY: 'Currency invalid with coupon', + //XMSG + COUPON_ERR_ANONYMOUS: 'Sign in to use coupon code', + //XMSG + COUPON_ERR_UNAVAILABLE: 'Coupon no longer available', + //XMSG + COUPON_MINIMUM_NOT_MET: 'Current order total does not meet the required minimum for this coupon', + //XMSG + COUPON_NOT_VALID: 'Coupon Not Valid', + + //XMSG + //------------------------------------------------- + // Confirmation + //------------------------------------------------- + + + A_COPY_OF_YOUR_ORDER_DETAILS_HAS_BEEN_SENT_TO: 'A copy of your order details has been sent to', + //XMSG + ENJOY_YOUR_ITEMS: 'Enjoy your items!', + //XMSG + ITEM_IN_YOUR_ORDER: 'Item in your order', + //XMSG + ITEMS_IN_YOUR_ORDER: 'Items in your order', + //XMSG + QUESTIONS: '

If you have any questions, contact us at {{questionsContactInfo}}.

', + //XFLD + ORDER: 'Order', + //XBUT + RETURN_TO_SHOPPING: 'Return to shopping', + //XMSG + SUCCESS: 'Success!', + //XMSG + ACCOUNT_SUCCESS: 'Your account was successfully created!', + //XMSG + THANK_YOU: 'Thank you', + //XMSG + THANK_YOU_FOR_YOUR_ORDER: 'Thank you
for your order!', + //XMSG + THE_SHIPMENT_IS_SCHEDULED_TO_ARRIVE_AT_THE_FOLLOWING_LOCATION: 'The order will be shipped to', + //XMSG + ONE_MORE_STEP: 'One More Step to Create an Account', + //XMSG + ONE_MORE_STEP_MESSAGE: 'for a Fast Checkout and Easy Access to Previous Orders', + //XFLD + SKU: 'SKU', + + //XFLD + //------------------------------------------------- + // Navigation + //------------------------------------------------- + + + PRODUCTS: 'Products', + //XFLD + REGION: 'Region', + + //XBUT + //------------------------------------------------- + // Product Detail Page + //------------------------------------------------- + + + BUY: 'Buy', + //XBUT + ADD_TO_CART: 'Add to Cart', + //XTIT + PRODUCT_DESCRIPTION: 'Product Description', + //XBUT + OUT_OF_STOCK: 'out of stock', + //XFLD + QTY: 'Qty', + //XMSG + ERROR_ADDING_TO_CART: 'Add to Cart was not successful. Please try again.', + + //XLST + //------------------------------------------------- + // Product List Page + //------------------------------------------------- + + + NEWEST: 'newest', + //XLST + PRICE_HIGH_LOW: 'price high - low', + //XLST + PRICE_LOW_HIGH: 'price low - high', + //XFLD + SORT_BY: 'Sort by', + //XFLD + VIEWING: 'Viewing', + //XFLD + PRODUCTS_FROM_TO: '
{{productsFrom}}-{{productsTo}} of {{total}}
', + //XFLD + ALL_PRODUCTS: 'All Products', + //XTIT + EMPTY_MSG: 'Demo Store - Coming Soon', + //XFLD + LANGUAGES: 'Languages', + //XFLD + SELECT_LANGUAGE: 'Select a language', + //XBUT + SIGN_OUT: 'Sign Out', + //XBUT + SIGN_IN: 'Sign In', + //XBUT + SIGN_IN_WITH_FACEBOOK: 'Sign in with Facebook', + //XBUT + LOG_IN_WITH_GOOGLE_PLUS: 'Sign in with Google +', + //XBUT + MY_ACCOUNT: 'My Account', + //XBUT + CREATE_ACCOUNT: 'Create Account', + //XBUT + CONTINUE_AS_GUEST: 'Continue as our guest', + + //XFLD + //------------------------------------------------- + // Account Page + //------------------------------------------------- + + + ACCOUNT_DETAILS: 'Account details', + //XBUT + ADD: 'Add', + //XGRP + ADDRESSBOOK: 'Addressbook', + //XMSG + NO_ADDRESSES: 'You have no addresses stored!', + //XBUT + ADD_ADDRESS: 'Add Address', + //XBUT + CLOSE: 'Close', + //XFLD + COMPANY_NAME: 'Company', + //XMSG + CONFIRM_ADDRESS_REMOVAL: 'Are you sure you want to remove the address?', + //XFLD + FULL_NAME: 'Full Name', + //XFLD + CONTACT_PHONE: 'Phone', + //XFLD + DATE: 'Date', + //XMSG + NAME_REQUIRED: 'Name Required', + //XFLD + STREET: 'Street', + //XFLD + STREET_NUMBER: 'Street Number', + //XTIT + WELCOME: 'Welcome,
{{firstName}} {{middleName}} {{lastName}}', + //XFLD + ITEMS_IN_ORDER: 'Items In Order', + //XFLD + NOT_SET: 'Not Set', + //XGRP + ORDER_HISTORY: 'Order History', + //XFLD + ORDER_NUMBER: 'Order Number', + //XFLD + ORDER_STATUS: 'Order Status', + //XFLD + SHIPPING_DETAILS: 'SHIPPING DETAILS', + //XBUT + SAVE: 'Save', + //XBUT + UPDATE_PASSWORD: 'Update password', + //XBUT + CURRENT_PASSWORD: 'Current password', + //XBUT + NEW_PASSWORD: 'New password', + //XMSG + CONFIRM_NEW_PASSWORD: 'Confirm new password', + //XMSG + PASSWORDS_NO_MATCH: 'Passwords do not match', + //XMSG + WRONG_CURRENT_PASSWORD: 'Please provide correct current password!', + //XMSG + PASSWORD_TOO_SHORT: 'Password too short', + //XFLD + SHOW_ALL: 'Show all', + //XFLD + SHOW_LESS: 'Show less', + + //XBUT + //------------------------------------------------- + // Login, password, signup + //------------------------------------------------- + + + FORGOT_PW: 'Forgot your password?', + //XFLD + PASSWORD: 'Password', + //XACT + PASSWORD_MINCHAR: 'Min. 6 characters', + //XBUT + CONFIRM_PASSWORD: 'Confirm Password', + //XFLD + TOKEN: 'Token', + //XBUT + RESET_PASSWORD: 'Reset Password', + //XGRP + RESET_PW_TITLE: 'Reset Your Password', + //XMSG + RESET_PW_INSTRUCT: 'Please create a new password.', + //XMSG + FORGOT_PW_INSTRUCT: 'Please enter your account email address below. An email will be sent to you with a link to reset your password.', + //XMSG + REQUEST_PW_EXPIRED: 'Reset Password Request Expired', + //XMSG + REQUEST_PW_EXPIRED_MSG: 'The request to reset your password has expired. Please enter your email to make a new request.', + //XMSG + CHECK_EMAIL: 'Check Your Email', + //XMSG + CHECK_EMAIL_INSTRUCT: '...and follow the link to reset your password. The link will be valid for 24 hours.', + //XMSG + PASSWORD_REQUIRED: 'Password with 6 character minimum required.', + //XMSG + PASSWORDS_MUST_MATCH: 'Passwords must match.', + //XMSG + PW_SUCCESS: 'Success', + //XMSG + PW_CHANGED_MSG: 'Your password has been reset. You can now sign into your account.', + //XMSG + INVALID_TOKEN: 'This reset-password link is no longer valid. Please request a new one.', + //XMSG + PW_CHANGE_FAILED: 'Update of password failed.', + //XMSG + RESET_PW_REPEAT: 'Request another reset-password link.', + //XACT + FIELD_REQUIRED: 'Field is required!', + //XACT + FIELD_TOO_SHORT: 'Field too short!', + //XACT + FIELDS_NOT_MATCHING: 'Fields not matching!', + + //XMSG + SERVER_UNAVAILABLE: 'Server is unavailable, please try again later.', + //XMSG + INVALID_CREDENTIALS: 'You entered an invalid email or password.', + //XMSG + PASSWORD_INVALID: 'Password invalid - minimum of 6 characters required.', + //XMSG + ACCOUNT_LOCKED: 'Account has been locked due to excessive number of invalid login attempts. Please wait 5 minutes and try again.', + //XMSG + ACCOUNT_ALREADY_EXISTS: 'Email address already in use for existing account.', + //XFLD + FORGOT_PASSWORD: 'Forgot password?', + //XMSG + EMAIL_NOT_FOUND: 'There is no account associated with that email address.', + //XACT + ENTER_EMAIL: 'Enter Email', + //XMSG + ENTER_EXISTING_EMAIL: 'Enter the email address of an existing account', + //XMSG + LOGIN_FAILED: 'Login failed', + + //XFLD + ACCOUNT_EMAIL: 'Account Email', + + //XMSG + //------------------------------------------------- + // Dynamic Error Displays + //------------------------------------------------- + + + ERROR_TITLE: 'Internal Error', + //XMSG + ERROR_MESSAGE: 'Oops! There\'s a problem.', + //XMSG + ERROR_TITLE_401: 'Unauthorized', + //XMSG + ERROR_MESSAGE_401: 'Oops! There\'s a problem. Your login credentials don\'t allow access to this page.', + //XMSG + ERROR_TITLE_404: 'Page not found', + //XMSG + ERROR_MESSAGE_404: 'Oops! There\'s a problem. This page doesn\'t exist.', + //XMSG + ERROR_REDIRECT: 'Here is a page to help you get back on track.', + //XBUT + ERROR_BUTTON_TEXT: 'HOMEPAGE', + + //XACT + //------------------------------------------------- + // Titles + //------------------------------------------------- + + + DR: 'Dr.', + //XACT + MR: 'Mr.', + //XACT + MRS: 'Mrs.', + //XACT + MS: 'Ms.', + //XACT + TITLE: 'Title', + + //XSEL + //------------------------------------------------- + // Order Statuses + //------------------------------------------------- + + + COMPLETED: 'Completed', + //XSEL + CONFIRMED: 'Confirmed', + //XSEL + CREATED: 'Created', + //XSEL + DECLINED: 'Declined', + //XSEL + SHIPPED: 'Shipped', + + //XFLD + //------------------------------------------------- + // Order Details + //------------------------------------------------- + + + CREDIT_CARD: 'Credit Card', + //XFLD + ON: 'on', + //XFLD + QUANTITY: 'Quantity', + //XFLD + SHIPPED_BY_ON: 'Shipped by: {{carrier}} on {{shippedDate}}', + //XFLD + TRACKING_NUMBER: 'Tracking Number: {{trackingNumber}}', + + //XFLD + //------------------------------------------------- + // Search + //------------------------------------------------- + + FOUND_FOR: '0 found for {{searchString}}', + //XACT + SEARCH: 'Search', + //XFLD + SEARCH_RESULTS: 'Search results', + //XFLD + MOST_RELEVANT: 'Most Relevant', + //XGRP + RESULTS: 'Results', + //XLNK + SEE_ALL: 'See All', + //XMSG + SEARCH_UNAVAILABLE: 'Search is currently unavailable.', + //XMSG + NO_RESULTS_FOUND: 'No results found.', + + //XFLD + //------------------------------------------------- + // FOOTER + //------------------------------------------------- + + + TERMS_AND_CONDITIONS: 'Terms & Conditions', + //XFLD + CONTACT_US: 'Contact Us', + //XFLD + SITE_MAP: 'Site Map', + + }); \ No newline at end of file diff --git a/public/js/app/shared/i18n/providers/translation-provider.js b/public/js/app/shared/i18n/providers/translation-provider.js new file mode 100644 index 000000000..e7e690c6a --- /dev/null +++ b/public/js/app/shared/i18n/providers/translation-provider.js @@ -0,0 +1,35 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.i18n') + /** Acts as dictionary provider for localization. */ + .provider('Translation', ['$translateProvider', 'i18nConstantsProvider', 'translateSettings', + function TranslationProvider($translateProvider, i18nConstantsProvider, translateSettings) { + + $translateProvider.translations('en', i18nConstantsProvider.languages.en.translations); + $translateProvider.translations('de', i18nConstantsProvider.languages.de.translations); + $translateProvider.preferredLanguage(translateSettings.defaultLanguageCode); + + this.setPreferredLanguage = function(langCode) { + $translateProvider.preferredLanguage(langCode || translateSettings.defaultLanguageCode); + }; + + this.$get = ['$translateProvider', 'i18nConstantsProvider', + function($translateProvider, i18nConstantsProvider) { + return new TranslationProvider($translateProvider, i18nConstantsProvider); + } + ]; + + } + ]); \ No newline at end of file diff --git a/public/js/app/shared/router.js b/public/js/app/shared/router.js new file mode 100644 index 000000000..25e115468 --- /dev/null +++ b/public/js/app/shared/router.js @@ -0,0 +1,316 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.router', []) + + /** Sets up the routes for UI Router. */ + .config(['$stateProvider', '$urlRouterProvider', '$locationProvider', 'TranslationProvider', 'SiteConfigSvcProvider', + function($stateProvider, $urlRouterProvider, $locationProvider, TranslationProvider, siteConfig) { + + + // States definition + $stateProvider + .state('base', { + abstract: true, + views: { + + 'sidebarNavigation@': { + templateUrl: 'js/app/shared/templates/sidebar-navigation.html', + controller: 'SidebarNavigationCtrl' + }, + 'topNavigation@': { + templateUrl: 'js/app/shared/templates/top-navigation.html', + controller: 'TopNavigationCtrl' + }, + 'cart@': { + templateUrl: 'js/app/cart/templates/cart.html', + controller: 'CartCtrl' + }, + 'footer@':{ + templateUrl: 'js/app/shared/templates/footer.html' + } + }, + resolve:{ + // this will block controller loading until the application has been initialized with + // all required configuration (language, currency) + /* jshint ignore:start */ + initialized: ['ConfigSvc',function(ConfigSvc) { + return ConfigSvc.initializeApp(); + }] + /* jshint ignore:end */ + + } + }) + .state('base.home', { + url: '/home', + views: { + 'main@':{ + templateUrl: 'js/app/home/templates/home.html', + controller: 'HomeCtrl' + } + }, + resolve:{ + // this will block controller loading until the application has been initialized with + // all required configuration (language, currency) + dummy: ['initialized', function(initialized){// force initialization delay + if(initialized) { + return {}; + } + }] + } + }) + .state('base.search', { + url: '/search/:searchString', + views: { + 'main@': { + templateUrl: 'js/app/search/templates/search-list.html', + controller: 'SearchListCtrl' + }, + 'footer@': { + template: '' + } + }, + resolve:{ + searchString: function ($stateParams) { + return $stateParams.searchString; + } + } + + }) + .state('base.product', { + url: '/products/', + abstract: true + }) + .state('base.category', { + url: '/ct/:catName', + views: { + 'main@': { + templateUrl: 'js/app/products/templates/product-list.html', + controller: 'BrowseProductsCtrl' + }, + 'footer@': { + template:'' + } + }, + resolve: { + + category: ['$stateParams', 'CategorySvc', 'initialized', function ($stateParams, CategorySvc, initialized) { + if(initialized){ + return CategorySvc.getCategoryWithProducts($stateParams.catName); + } + + }] + } + }) + .state('base.product.detail', { + url: ':productId/', + params: { + lastCatId: 'lastCatId' + }, + views: { + 'main@': { + templateUrl: 'js/app/products/templates/product-detail.html', + controller: 'ProductDetailCtrl' + } + }, + resolve: { + product: ['$stateParams', 'PriceProductREST', 'CategorySvc', 'initialized', function ($stateParams, PriceProductREST, CategorySvc, initialized) { + if(initialized){ + return PriceProductREST.ProductDetails.one('productdetails', $stateParams.productId).customGET('', {expand: 'media'}) + .then(function (prod) { + if(prod.categories && prod.categories.length){ + return CategorySvc.getCategoryById(prod.categories[0].id).then(function(category){ + prod.richCategory = category; + return prod; + }); + + } else { + return prod; + } + }); + } + + }], + + lastCatId: function ($stateParams) { + if($stateParams.lastCatId !== 'lastCatId') { + return $stateParams.lastCatId; + } + else{ + return null; + } + } + + } + }) + .state('base.checkout', { + abstract: true, + views: { + 'main@': { + templateUrl: 'js/app/checkout/templates/checkout-frame.html', + controller: 'CheckoutBaseCtrl' + } + }, + resolve: { + cart: ['CartSvc', function (CartSvc) { + return CartSvc.getLocalCart(); + }], + order: ['CheckoutSvc', function (CheckoutSvc) { + return CheckoutSvc.getDefaultOrder(); + }], + shippingCost: ['CheckoutSvc', 'initialized', function (CheckoutSvc, initialized) { + if (initialized) { // parent resolve - if-check to make usage explicit + return CheckoutSvc.getShippingCost(); + } + }] + } + }) + + .state('base.checkout.details', { + url: '/checkout/', + views: { + 'checkoutcart': { + templateUrl: 'js/app/checkout/templates/checkout-cart.html', + controller: 'CheckoutCartCtrl' + }, + 'checkoutcartmobile@base.checkout.details':{ + templateUrl: 'js/app/checkout/templates/checkout-cart.html', + controller: 'CheckoutCartCtrl' + }, + 'checkoutform': { + templateUrl: 'js/app/checkout/templates/checkout-form.html', + controller: 'CheckoutCtrl' + }, + 'checkoutcartedit': { + templateUrl: 'js/app/checkout/templates/checkout-edit-cart.html', + controller: 'CheckoutEditCartCtrl' + } + } + }) + .state('base.confirmation', { + url: '/confirmation/:orderId/', + views: { + 'main@': { + templateUrl: 'js/app/confirmation/templates/confirmation.html', + controller: 'ConfirmationCtrl' + } + }, + resolve: { + isAuthenticated: ['AuthSvc', function(AuthSvc){ + return AuthSvc.isAuthenticated(); + }] + } + }) + .state('base.account', { + url: '/account/', + views: { + 'main@': { + templateUrl: 'js/app/account/templates/account.html', + controller: 'AccountCtrl' + } + }, + resolve: { + account: ['AccountSvc', function(AccountSvc) { + return AccountSvc.account(); + }], + addresses: ['AccountSvc', function(AccountSvc) { + var query = { + pageNumber: 1, + pageSize: siteConfig.apis.account.addresses.initialPageSize + }; + return AccountSvc.getAddresses(query); + }], + orders: ['OrderListSvc', function(OrderListSvc) { + var parms = { + pageSize: 10 + }; + return OrderListSvc.query(parms); + }] + }, + data: { + auth: 'authenticated' + } + }) + .state('base.changePassword', { + url: '/changePassword?token', + views: { + 'main@': { + templateUrl: 'js/app/auth/templates/password-reset.html', + controller: 'ResetPasswordUpdateCtrl' + } + } + }) + .state('base.orderDetail', { + url: '/orderDetail/:orderId', + views: { + 'main@': { + templateUrl: 'js/app/account/templates/order-detail.html', + controller: 'AccountOrderDetailCtrl' + } + }, + resolve: { + order: ['$stateParams', 'OrdersREST', function ($stateParams, OrdersREST) { + return OrdersREST.Orders.one('orders', $stateParams.orderId).get() + .then(function (result) { + window.scrollTo(0, 0); + result.id = $stateParams.id; + return result; + }); + }] + }, + data: { + auth: 'authenticated' + } + }) + .state('errors', { + url: '/errors/:errorId', + views: { + 'main@': { + templateUrl: 'js/app/errors/templates/error-display.html', + controller: 'ErrorsCtrl' + } + } + }); + + $urlRouterProvider.otherwise('/home'); + + /* Code from angular ui-router to make trailing slash conditional */ + $urlRouterProvider.rule(function($injector, $location) { + var path = $location.path(); + // Note: misnomer. This returns a query object, not a search string + var search = $location.search(); + var params; + + // check to see if the path already ends in '/' + if (path[path.length - 1] === '/') { + return; + } + + // If there was no search string / query params, return with a `/` + if (Object.keys(search).length === 0) { + return path + '/'; + } + + // Otherwise build the search string and return a `/?` prefix + params = []; + angular.forEach(search, function(v, k){ + params.push(k + '=' + v); + }); + return path + '/?' + params.join('&'); + }); + $locationProvider.hashPrefix('!'); + } + ]); + + diff --git a/public/js/app/shared/services/configuration-service.js b/public/js/app/shared/services/configuration-service.js new file mode 100644 index 000000000..c6fac60e0 --- /dev/null +++ b/public/js/app/shared/services/configuration-service.js @@ -0,0 +1,160 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +/** + * Encapsulates access to the configuration service. + */ +angular.module('ds.shared') + .factory('ConfigSvc', ['$rootScope', '$q', 'settings', 'GlobalData', 'AuthSvc', 'AccountSvc', 'CartSvc', 'CategorySvc', 'SiteSettingsREST', + function ($rootScope, $q, settings, GlobalData, AuthSvc, AccountSvc, CartSvc, CategorySvc, SiteSettingsREST) { + var initialized = false; + var selectedSiteCode = ''; + + /** + * Returns default or first site from sites array. + */ + function getDefaultSite(sites) { + for (var i = 0; i < sites.length; i++) { + if (sites[i].default) { + return sites[i]; + } + } + return sites[0]; + } + + /** + * Check if there is site in sites with specified code. + */ + function siteExists(sites, code) { + for (var i = 0; i < sites.length; i++) { + if (sites[i].code === code) { + return true; + } + } + return false; + } + + /** + * Loads the store configuration settings - store name and logo. + * These settings are then stored in the GlobalData service. + * Returns promise once done. + */ + function loadConfiguration() { + + /** + * Get default site for the moment + */ + var configPromise = SiteSettingsREST.SiteSettings.all('sites').getList({}); + configPromise.then(function (sites) { + + //Check if there is already default site in memory or cookies and if that one is valid one (exists in returned array) + var result; + var site = GlobalData.getSite(); + if (!!site && siteExists(sites, site.code)) { + result = site; + } + else { + //If not, then use default one from returned array of sites + result = getDefaultSite(sites); + + //Save selected site as cookie + GlobalData.setSiteCookie(result); + } + + selectedSiteCode = result.code; + GlobalData.setSites(sites); + + //TODO: Missing implementation for Algolia key + //GlobalData.search.algoliaKey = value; + + }, function (error) { + console.error('Store settings retrieval failed: ' + JSON.stringify(error)); + // no point trying to localize, since we couldn't load language preferences + window.alert('Unable to load store configuration. Please refresh!'); + }); + + + /** + * Get login config (Facebook and Google) + */ + var loginConfigPromise = AuthSvc.getFBAndGoogleLoginKeys(); + loginConfigPromise.then(function (result) { + + if (!!result.facebookAppId) { + settings.facebookAppId = result.facebookAppId; + } + if (!!result.googleClientId) { + settings.googleClientId = result.googleClientId; + } + }, function (error) { + console.error('Facebook and Google key retrieval failed: ' + JSON.stringify(error)); + }); + + return $q.all([configPromise]); + } + + + return { + + /** + * Returns an empty promise that is resolved once the app has been initialized with all essential data. + */ + initializeApp: function () { + var def = $q.defer(); + if (initialized) { + def.resolve({}); + } else { + loadConfiguration(GlobalData.store.tenant).then(function () { + + var siteSettingPromise = SiteSettingsREST.SiteSettings.one('sites', selectedSiteCode).get({ expand: 'payment:active,tax:active,mixin:*' }); + siteSettingPromise.then(function (site) { + + //Set site and load initial language + GlobalData.setSite(site); + GlobalData.loadInitialLanguage(); + + if (AuthSvc.isAuthenticated()) { + // if session still in tact, load user preferences + AccountSvc.account().then(function (account) { + CategorySvc.getCategories().then(function () { + def.resolve({}); + }); + + return account; + }).then(function (account) { + CartSvc.refreshCartAfterLogin(account.id); + }); + } else { + CategorySvc.getCategories().then(function () { + def.resolve({}); + }); + + //We are getting cart with siteChange that happens on load + //CartSvc.getCart(); // no need to wait for cart promise to resolve + + } + initialized = true; + }); + }, function (error) { + console.error('Store settings retrieval failed: ' + JSON.stringify(error)); + // no point trying to localize, since we couldn't load language preferences + window.alert('Unable to load store configuration. Please refresh!'); + }); + } + return def.promise; + } + + + }; + }]); diff --git a/public/js/app/shared/services/cookie-svc.js b/public/js/app/shared/services/cookie-svc.js new file mode 100644 index 000000000..e0511aae7 --- /dev/null +++ b/public/js/app/shared/services/cookie-svc.js @@ -0,0 +1,68 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +/** + * Encapsulates management of the OAuth token and user name, using cookies. + */ +angular.module('ds.shared') + .factory('CookieSvc', ['settings', 'ipCookie', function(settings, ipCookie){ + + var defaultExpirySeconds = 100000; + + var LanguageCookie = function(languageCode) { + this.languageCode = languageCode; + this.getLanguageCode = function () { + return this.languageCode; + }; + }; + + var SiteCookie = function (site) { + this.site = site; + this.getSite = function () { + return this.site; + }; + }; + + var CookieSvc = { + + setLanguageCookie: function (languageCode, expiresIn) { + ipCookie.remove(settings.languageCookie); + var languageCookie = new LanguageCookie(languageCode); + ipCookie(settings.languageCookie, JSON.stringify(languageCookie), {expirationUnit: 'seconds', expires: expiresIn ? expiresIn : defaultExpirySeconds}); + }, + + getLanguageCookie: function () { + var languageCookie = ipCookie(settings.languageCookie); + return languageCookie ? new LanguageCookie(languageCookie.languageCode) : false; + }, + + setSiteCookie: function (site, expiresIn) { + ipCookie.remove(settings.siteCookie); + var siteCookie = new SiteCookie(site); + ipCookie(settings.siteCookie, JSON.stringify(siteCookie), { expirationUnit: 'seconds', expires: expiresIn ? expiresIn : defaultExpirySeconds }); + }, + + getSiteCookie: function () { + var siteCookie = ipCookie(settings.siteCookie); + if (siteCookie) { + return siteCookie.site; + } + return siteCookie; + } + + }; + + return CookieSvc; + + }]); \ No newline at end of file diff --git a/public/js/app/shared/services/event-service.js b/public/js/app/shared/services/event-service.js new file mode 100644 index 000000000..897921fbb --- /dev/null +++ b/public/js/app/shared/services/event-service.js @@ -0,0 +1,65 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +/** + * Encapsulates complex event logic, such as reloading states or reloading objects that are not specific to a particular page. + */ +angular.module('ds.shared') + .factory('EventSvc', ['$state', '$stateParams', 'settings', 'CartSvc', 'CategorySvc', + function ($state, $stateParams, settings, CartSvc, CategorySvc) { + + return { + + /** + * Handle "site changed". + */ + onSiteChange: function () { + + CartSvc.getCart(); + + if ($state.is('base.checkout.details') || $state.is('base.category') || $state.is('base.product.detail')) { + $state.transitionTo($state.current, $stateParams, { + reload: true, + inherit: true, + notify: true + }); + } + }, + + /** + * Handle "language changed". + * @param eve language changed event + * @param eveObj - property: languageCode + */ + onLanguageChange: function (eve, eveObj) { + + // cart is already loaded on login, initialization and siteChange - no need for separate refresh + if (eveObj.source !== settings.eventSource.login && eveObj.source !== settings.eventSource.initialization && eveObj.source !== settings.eventSource.siteUpdate) { + CartSvc.getCart(); + } + // Any state that requires an updated localized data load should be refreshed (with exception of checkout, + // as cart update is handled separately due to its global nature) + CategorySvc.getCategories(settings.eventSource.languageUpdate).then(function () { + if ($state.is('base.category') || $state.is('base.product.detail')) { + $state.transitionTo($state.current, $stateParams, { + reload: true, + inherit: true, + notify: true + }); + } + }); + } + + }; + }]); diff --git a/public/js/app/shared/services/global-data.js b/public/js/app/shared/services/global-data.js new file mode 100644 index 000000000..55422c4a0 --- /dev/null +++ b/public/js/app/shared/services/global-data.js @@ -0,0 +1,364 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.shared') +/** Acts as global data store for application settings. In contrast to the "settings" constant provider, + * these settings may change over the life of the application. + * + * Also provides some logic around updating these settings. + * */ + .factory('GlobalData', ['appConfig', '$translate', 'CookieSvc', '$rootScope', 'i18nConstants', 'translateSettings', 'settings', + function (appConfig, $translate, CookieSvc, $rootScope, i18nConstants, translateSettings, settings) { + + + var sites, currentSite; + + var languageCode; + var defaultLang = 'en'; + var languageMap = {}; + var availableLanguages = {}; + // HTTP accept-languages header setting for service calls + var acceptLanguages; + + var storeDefaultCurrency; + var activeCurrencyId; + var availableCurrency = {}; + + + // for label translation, we're limited to what we're providing in localization settings in i18 + function setTranslateLanguage(langCode) { + if (settings.translateLanguages.indexOf(langCode) > -1) { + $translate.use(langCode); + } else if (translateSettings.supportedLanguages.indexOf(defaultLang) > -1) { + $translate.use(defaultLang); + } else { + $translate.use(translateSettings.defaultLanguageCode); + } + } + + /** + * Used for getting the language object from language id. + */ + function getLanguageById(id) { + switch (id) { + case 'en': + return { id: id, label: 'English' }; + case 'de': + return { id: id, label: 'German' }; + default: + return { id: id, label: id }; + } + } + + function setLanguageWithOptionalCookie(newLangCode, setCookie, updateSource) { + if (!_.isEmpty(languageMap)) { + if (newLangCode && newLangCode in languageMap) { + + if (setCookie) { + CookieSvc.setLanguageCookie(newLangCode); + } + + if (languageCode !== newLangCode) { + languageCode = newLangCode; + acceptLanguages = (languageCode === defaultLang ? languageCode : languageCode + ';q=1,' + defaultLang + ';q=0.5'); + if (updateSource !== settings.eventSource.initialization) { // don't event on initialization + $rootScope.$emit('language:updated', { + languageCode: languageCode, + source: updateSource + }); + } + } + setTranslateLanguage(languageCode); + } else { + console.warn('Language not valid: ' + newLangCode); + if (defaultLang && defaultLang in languageMap) { + console.log('Using default language instead: ' + defaultLang); + setLanguageWithOptionalCookie(defaultLang, setCookie, updateSource); + } else { + console.error('No default language defined.'); + } + } + } + } + + return { + orders: { + meta: { + total: 0 + } + }, + products: { + meta: { + total: 0 + }, + pageSize: 8, + lastSort: '', + lastViewedProductId: '' + }, + addresses: { + meta: { + total: 0 + } + }, + + store: { + tenant: appConfig.storeTenant(), + clientId: appConfig.clientId(), + redirectURI: appConfig.redirectURI(), + name: '', + logo: null + }, + + user: { + isAuthenticated: false, + username: null + }, + + search: { + algoliaKey: '', + algoliaProject: 'MSSYUK0R36' + }, + + /** Returns the currency symbol of the active currency.*/ + getCurrencySymbol: function (optionalId) { + var id = optionalId || activeCurrencyId; + var symbol = '?'; + if (id === 'USD' || id === 'CAD') { + symbol = '$'; + } + else if (id === 'EUR') { + symbol = '\u20AC'; + } + else if (id === 'GBP') { + symbol = '\u20A4'; + } + else if (id === 'JPY' || id === 'CNY') { + symbol = '\u00A5'; + } + else if (id === 'PLN') { + symbol = '\u007A' + '\u0142'; + } + else if (id === 'CHF') { + symbol = 'CHF'; + } + + return symbol; + }, + + /** Sets the code of the language that's supposed to be active for the store.*/ + setLanguage: function (newLangCode, updateSource) { + setLanguageWithOptionalCookie(newLangCode, true, updateSource ? updateSource : settings.eventSource.unknown); + }, + + /** Returns the language code that's currently active for the store.*/ + getLanguageCode: function () { + return languageCode; + }, + + /** Returns the active language instance.*/ + getLanguage: function () { + return languageMap[languageCode]; + }, + + /** Returns the 'accept-languages' header for the application.*/ + getAcceptLanguages: function () { + return acceptLanguages; + }, + + /** Determines the initial active language for the store, based on store configuration and + * any existing cookie settings. */ + loadInitialLanguage: function () { + var languageCookie = CookieSvc.getLanguageCookie(); + if (languageCookie && languageCookie.languageCode) { + setLanguageWithOptionalCookie(languageCookie.languageCode, false, settings.eventSource.initialization); + } else { + setLanguageWithOptionalCookie(languageCode, true, settings.eventSource.initialization); + } + }, + + /** Sets the currency id that's supposed to be active for this store and stores it to a + * cookie. + * If the id is not part of the "available" currencies, the update will be silently rejected. + * @param object with property id === currency id; if property setCookie === true, setting will + * be written to cookie (if valid)*/ + setCurrency: function (currency) { + if (currency !== activeCurrencyId) { + activeCurrencyId = currency; + } + }, + + /** Determines the initial active site for the store, based on store configuration and + * any existing cookie settings. */ + loadInitialSite: function () { + var siteCookie = CookieSvc.getSiteCookie(); + return siteCookie; + }, + + /** Returns the id of the currency that's currently active for the store.*/ + getCurrencyId: function () { + return activeCurrencyId; + }, + + /** Returns the active currency instance.*/ + getCurrency: function () { + return activeCurrencyId; + }, + + /** Sets an array of currency instances from which a shopper should be able to choose.*/ + setAvailableCurrency: function (currency) { + + if (currency) { + availableCurrency = currency; + storeDefaultCurrency = currency; + } + if (!storeDefaultCurrency) { + console.error('No default currency defined!'); + } + }, + + /** Returns an array of currency instances supported by this project.*/ + getAvailableCurrency: function () { + return availableCurrency; + }, + + /** Sets an array of language instances from which a shopper should be able to choose.*/ + setAvailableLanguages: function (languages) { + if (languages) { + availableLanguages = []; + + angular.forEach(languages, function (language) { + languageMap[language.id] = language; + + availableLanguages.push(language); + }); + } + if (!defaultLang) { + console.error('No default language has been defined!'); + } + }, + + setDefaultLanguage: function (lang) { + defaultLang = lang.id; + }, + + /** Returns an array of language instances supported by this project.*/ + getAvailableLanguages: function () { + return availableLanguages; + }, + + setSiteCookie: function (site) { + var cookieSite = { code: site.code }; + CookieSvc.setSiteCookie(cookieSite); + }, + + setSite: function (site, selectedLanguageCode) { + if (!currentSite || currentSite.code !== site.code) { + + //Set current site + currentSite = site; + + //Set name of store + this.store.name = site.name; + $rootScope.titleConfig = site.name; + + //Set stripe key if defined + if (!!site.payment && site.payment.length > 0 && !!site.payment[0].configuration && !!site.payment[0].configuration.public && !!site.payment[0].configuration.public.publicKey) { + /* jshint ignore:start */ + Stripe.setPublishableKey(site.payment[0].configuration.public.publicKey); + /* jshint ignore:end */ + } + + //Set main image + if (!!site.mixins && !!site.mixins.storeLogoImageKey && !!site.mixins.storeLogoImageKey.value) { + this.store.logo = site.mixins.storeLogoImageKey.value; + } + else { + //Delete this property and make store fallback to default + delete this.store.logo; + } + + //Create array + if (site.currency) { + if (site.currency !== this.getCurrencyId()) { + this.setAvailableCurrency(site.currency); + this.setCurrency(site.currency); + } + } + + //Set languages + var languages = []; + if (!!site.languages) { + for (var i = 0; i < site.languages.length; i++) { + languages.push(getLanguageById(site.languages[i])); + } + } + this.setAvailableLanguages(languages); + + //Set default language + if (selectedLanguageCode) { + setLanguageWithOptionalCookie(selectedLanguageCode, true, settings.eventSource.siteUpdate); + } + + //Emit site change for cart + $rootScope.$emit('site:updated'); + } + }, + + setSites: function (Sites) { + var storefrontSites = []; + for (var i = 0; i < Sites.length; i++) { + storefrontSites.push(Sites[i]); + } + sites = storefrontSites; + }, + + getSite: function () { + if (!!currentSite) { + return currentSite; + } + else { + return CookieSvc.getSiteCookie(); + } + }, + + getSiteCode: function () { + if (!!currentSite) { + return currentSite.code; + } + return 'default'; + }, + + getSites: function () { + return sites; + }, + + getTaxType: function () { + if (!!currentSite && !!currentSite.tax && !!currentSite.tax[0]) { + return currentSite.tax[0].id; + } + return null; + }, + + getCurrentTaxConfiguration: function () { + if (!!currentSite && !!currentSite.tax && !!currentSite.tax[0] && currentSite.tax[0].id === 'FLATRATE' && !!currentSite.tax[0].configuration) { + return currentSite.tax[0].configuration.public; + } + else { + return null; + } + }, + + }; + + }]); diff --git a/public/js/app/shared/services/http-queue.js b/public/js/app/shared/services/http-queue.js new file mode 100644 index 000000000..b70646015 --- /dev/null +++ b/public/js/app/shared/services/http-queue.js @@ -0,0 +1,124 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.queue', []) + .factory('httpQueue', ['$injector', function($injector) { + + + /** Holds all the "blocked" requests, so they can be re-requested in future. */ + var blockedBuffer = []; + var rejectedBuffer = []; + var authHeader = 'Authorization'; + /** Service initialized later because of circular dependency problem. */ + var $http, $translate; + // keeps track of the last reject per URL + var lastRejectTime = {}; + + /** Submit requests that were never sent because of missing token.*/ + function retryBlockedHttpRequest(config, deferred) { + deferred.resolve(config); + } + + /** Resubmit requests that resulted in 401 due to rejected token. */ + function retryRejectedHttpRequest(config, deferred) { + + function successCallback(response) { + deferred.resolve(response); + } + + function errorCallback(response) { + deferred.reject(response); + } + + var lastTime = lastRejectTime[config.url]; + // If same URL was rejected less than 10 seconds ago, don't try again (this is meant to prevent a + // retry loop where the root cause is not being fixed and otherwise, we would attempt to submit the + // same failing request over and over. + if(lastTime && new Date().getTime() - lastTime < 10000) { + var $state = $injector.get('$state'); + $translate = $translate || $injector.get('$translate'); + $translate('SERVER_UNAVAILABLE').then(function(value){ + console.error(value); + }); + deferred.reject('Too soon to retry'); + $state.go('errors', { errorId : '401' }); + } else { + lastRejectTime[config.url] = null; + $http = $http || $injector.get('$http'); + $http(config).then(successCallback, errorCallback); + } + } + + function setToken(config, token){ + config.headers[authHeader] = 'Bearer ' + token; + } + + return { + /** + * Appends HTTP request configuration object with deferred response - + * use for requests that were never sent due to missing token. + */ + appendBlocked: function (config, deferred) { + blockedBuffer.push({ + config: config, + deferred: deferred + }); + }, + + /** + * Appends HTTP request configuration object with deferred response - + * use for requests that were rejected by the service due to an invalid token. + */ + appendRejected: function (config, deferred) { + rejectedBuffer.push({ + config: config, + deferred: deferred + }); + lastRejectTime[config.url]= new Date().getTime(); + }, + + /** + * Abandon or reject (if reason provided) all the buffered requests. + + rejectAllRejected: function (reason) { + if (reason) { + for (var i = 0; i < rejectedBuffer.length; ++i) { + rejectedBuffer[i].deferred.reject(reason); + } + } + rejectedBuffer = []; + },*/ + + /** + * Retries all the buffered requests clears the buffer. + * @param new token + */ + retryAll: function (token) { + var buff = blockedBuffer; + + for (var i = 0; i < buff.length; ++i) { + setToken(buff[i].config, token); + retryBlockedHttpRequest(buff[i].config, buff[i].deferred); + } + blockedBuffer = []; + + buff = rejectedBuffer; + for (i = 0; i < buff.length; ++i) { + setToken(buff[i].config, token); + retryRejectedHttpRequest(buff[i].config, buff[i].deferred); + } + rejectedBuffer = []; + } + }; + }]); \ No newline at end of file diff --git a/public/js/app/shared/services/local-storage.js b/public/js/app/shared/services/local-storage.js new file mode 100644 index 000000000..b3a02cecf --- /dev/null +++ b/public/js/app/shared/services/local-storage.js @@ -0,0 +1,74 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + + +angular.module('ds.localstorage', []) + .factory('localStorage', ['$window', function ($window) { + + var addItem = function (key, value) { + if(localStorageSupported()){ + $window.localStorage[key] = JSON.stringify(value); + } + }; + var addItemToArray = function (key, value) { + if(localStorageSupported()){ + if($window.localStorage[key] === undefined || $window.localStorage[key] === ''){ + $window.localStorage[key] = JSON.stringify([value]); + } + else { + var obj = JSON.parse($window.localStorage[key]); + obj.push(value); + $window.localStorage[key] = JSON.stringify(obj); + } + } + }; + + var getItem = function (key) { + if(localStorageSupported()){ + if($window.localStorage[key] !== undefined) { + return $window.localStorage[key]; + } + else{ + return null; + } + } + }; + + var getAllItems = function (key) { + + if(localStorageSupported()){ + if($window.localStorage[key] !== undefined){ + var data = JSON.parse($window.localStorage[key]); + delete $window.localStorage[key]; + return data; + } + } + return []; + }; + + var localStorageSupported = function () { + try { + return 'localStorage' in $window && $window.localStorage !== null; + } catch(e) { + return false; + } + }; + + return { + addItem: addItem, + addItemToArray:addItemToArray, + getItem: getItem, + getAllItems: getAllItems + }; + }]); \ No newline at end of file diff --git a/public/js/app/shared/services/site-selector-service.js b/public/js/app/shared/services/site-selector-service.js new file mode 100644 index 000000000..0242adc83 --- /dev/null +++ b/public/js/app/shared/services/site-selector-service.js @@ -0,0 +1,33 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.shared') + .factory('SiteSelectorSvc', ['$rootScope', 'GlobalData', 'CartSvc', 'SiteSettingsREST', + function ($rootScope, GlobalData, CartSvc, SiteSettingsREST) { + + return { + + /** + * Method that is used to change current site on storefront + */ + changeSite: function (site, languageCode) { + SiteSettingsREST.SiteSettings.one('sites', site.code).get({ expand: 'payment:active,tax:active,mixin:*' }).then(function (result) { + GlobalData.setSite(result, languageCode); + GlobalData.setSiteCookie(result); + }); + + } + + }; + }]); diff --git a/public/js/app/shared/services/site-settings-rest.js b/public/js/app/shared/services/site-settings-rest.js new file mode 100644 index 000000000..76dad7718 --- /dev/null +++ b/public/js/app/shared/services/site-settings-rest.js @@ -0,0 +1,24 @@ +/* + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.shared') + .factory('SiteSettingsREST', ['Restangular', 'SiteConfigSvc', function (Restangular, siteConfig) { + + return { + SiteSettings: Restangular.withConfig(function (RestangularConfigurer) { + RestangularConfigurer.setBaseUrl(siteConfig.apis.siteSettings.baseUrl); + }) + }; + + }]); \ No newline at end of file diff --git a/public/js/app/shared/settings.js b/public/js/app/shared/settings.js new file mode 100644 index 000000000..be24fa874 --- /dev/null +++ b/public/js/app/shared/settings.js @@ -0,0 +1,85 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.shared') + + +/** + * Provides default settings (constants) for the application. + * + * @type {Object} + */ + .constant('settings', { + + hybrisUser: 'Anonymous', + hybrisApp: 'y_ondemand_storefront', + roleSeller: 'seller', + // cookie name + accessCookie: 'auth.user', + languageCookie: 'languageCookie', + siteCookie: 'siteCookie', + + // header keys + headers: { + + // "final" headers for CaaS auth. + // will be replaced by full oauth flow. + hybrisTenant: 'hybris-tenant', + hybrisUser: 'hybris-user', + hybrisRoles: 'hybris-roles', //TODO deprecated, can refactor out. + hybrisApp: 'hybris-app', //TODO deprecated, can refactor out. + language: 'accept-language', + hybrisAuthorization: 'Authorization', + paging: { + total: 'hybris-Count' + }, + hybrisCurrency: 'hybris-currency' + }, + + // relevant keys from configuration service: + configKeys: { + + stripeKey: 'payment.stripe.key.public', + storeCurrencies: 'project_curr', + storeLanguages: 'project_lang', + storeName: 'store.settings.name', + storeLogo: 'store.settings.image.logo.url', + fbAppIdKey: 'facebook.app.id', + googleClientId: 'google.client.id', + googleResponseToken: 'access_token' + }, + + localeImages: { + en: './img/flags/en.jpg', + de: './img/flags/de.jpg' + }, + + // identifies the languages for which labels have been localized - see public/js/app/shared/i18n + translateLanguages:['en','de'], + // fallback language for label localization + translateDefault: 'en', + + placeholderImage: 'img/no-image.jpg', + + homeState: 'base.home', + checkoutState: 'base.checkout.details', + + eventSource: { + login: 'login', + initialization: 'init', + unknown: 'unknown', + languageUpdate: 'languageUpdate', + siteUpdate: 'siteUpdate' + } + }); \ No newline at end of file diff --git a/public/js/app/shared/shared-index.js b/public/js/app/shared/shared-index.js new file mode 100644 index 000000000..bf44418ec --- /dev/null +++ b/public/js/app/shared/shared-index.js @@ -0,0 +1,19 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +/** Module for application infrastructure and utilities.*/ +angular.module('ds.shared', [ + 'ds.i18n', + 'infinite-scroll' +]); diff --git a/public/js/app/shared/site-config.js b/public/js/app/shared/site-config.js new file mode 100644 index 000000000..d2d00c5ee --- /dev/null +++ b/public/js/app/shared/site-config.js @@ -0,0 +1,107 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +angular.module('ds.shared') + +/** + * Provides default settings for the application, tenant configured dynamically in service provider. + * + * @type {Object} + */ +/** Acts as URL provider for service API's. */ + .provider('SiteConfigSvc', [ + + function SiteConfigSvcProvider(appConfig) { + + var apiPath, tenantId = ''; + + // handle dynamic tenant data. + if (!_.isEmpty(appConfig) && !_.isEmpty(appConfig.storeTenant())) { + tenantId = appConfig.storeTenant(); + } + // handle dynamic domain data. + if (!_.isEmpty(appConfig) && !_.isEmpty(appConfig.dynamicDomain())) { + apiPath = appConfig.dynamicDomain(); + } + + this.apis = { + account: { + baseUrl: 'https://' + apiPath + '/hybris/account/b1', + addresses: { + initialPageSize: 6 + } + }, + + cart: { + baseUrl: 'https://' + apiPath + '/hybris/cart/b1/' + tenantId + }, + + categories: { + baseUrl: 'https://' + apiPath + '/hybris/category/b1/' + tenantId + }, + + checkout: { + baseUrl: 'https://' + apiPath + '/hybris/checkout/b1/' + tenantId + }, + + coupon: { + baseUrl: 'https://' + apiPath + '/hybris/coupon/b1/' + tenantId + }, + + customers: { + baseUrl: 'https://' + apiPath + '/hybris/customer/b1/' + tenantId + }, + + orders: { + baseUrl: 'https://' + apiPath + '/hybris/order/b1/' + tenantId + }, + + prices: { + baseUrl: 'https://' + apiPath + '/hybris/price/b1/' + tenantId + }, + + products: { + baseUrl: 'https://' + apiPath + '/hybris/product/b1/' + tenantId, + pageSize: 10 + }, + + productDetails: { + baseUrl: 'https://' + apiPath + '/hybris/productdetails/b1/' + tenantId + }, + + shippingCosts: { + baseUrl: 'https://' + apiPath + '/hybris/shippingcost/b1/' + tenantId + }, + + siteSettings: { + baseUrl: 'https://' + apiPath + '/hybris/site/b1/' + tenantId + }, + + tracking: { + baseUrl: ' https://' + apiPath + '/hybris/piwik/b1/' + tenantId + '/events' + }, + + indexing: { + baseUrl: 'https://' + apiPath + '/hybris/search-algolia/b1/' + tenantId + } + }; + + this.$get = ['appConfig', + function (appConfig) { + return new SiteConfigSvcProvider(appConfig); + } + ]; + + } + ]); diff --git a/public/js/app/shared/templates/footer.html b/public/js/app/shared/templates/footer.html new file mode 100644 index 000000000..5a8607353 --- /dev/null +++ b/public/js/app/shared/templates/footer.html @@ -0,0 +1,49 @@ + \ No newline at end of file diff --git a/public/js/app/shared/templates/sidebar-navigation.html b/public/js/app/shared/templates/sidebar-navigation.html new file mode 100644 index 000000000..9afd194da --- /dev/null +++ b/public/js/app/shared/templates/sidebar-navigation.html @@ -0,0 +1,88 @@ + + + + + + diff --git a/public/js/app/shared/templates/top-navigation.html b/public/js/app/shared/templates/top-navigation.html new file mode 100644 index 000000000..12dee96b2 --- /dev/null +++ b/public/js/app/shared/templates/top-navigation.html @@ -0,0 +1,107 @@ + + + + + \ No newline at end of file diff --git a/public/js/app/shared/templates/ysearch.html b/public/js/app/shared/templates/ysearch.html new file mode 100644 index 000000000..106d39059 --- /dev/null +++ b/public/js/app/shared/templates/ysearch.html @@ -0,0 +1,27 @@ + \ No newline at end of file diff --git a/public/js/bootstrap.js b/public/js/bootstrap.js new file mode 100644 index 000000000..e811b3d92 --- /dev/null +++ b/public/js/bootstrap.js @@ -0,0 +1,27 @@ +/** + * [y] hybris Platform + * + * Copyright (c) 2000-2015 hybris AG + * All rights reserved. + * + * This software is the confidential and proprietary information of hybris + * ("Confidential Information"). You shall not disclose such Confidential + * Information and shall use it only in accordance with the terms of the + * license agreement you entered into with hybris. + */ + +'use strict'; + +(function () { + + try { + angular.element( document ).ready( function () { + angular.bootstrap( document, ['ds.app'] ); + }); + + } catch (exception) { + console.error('Unable to invoke angular.bootstrap:'); + console.error(exception); + } + +})(); diff --git a/public/js/vendor-static/bootstrap.min.js b/public/js/vendor-static/bootstrap.min.js new file mode 100644 index 000000000..b04a0e82f --- /dev/null +++ b/public/js/vendor-static/bootstrap.min.js @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.1.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.isLoading=!1};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",f.resetText||d.data("resetText",d[e]()),d[e](f[b]||this.options[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},b.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});return this.$element.trigger(j),j.isDefaultPrevented()?void 0:(this.sliding=!0,f&&this.pause(),this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")),f&&this.cycle(),this)};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("collapse in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);!e&&f.toggle&&"show"==c&&(c=!c),e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery),+function(a){"use strict";function b(b){a(d).remove(),a(e).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(''}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;(e||"destroy"!=c)&&(e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]())})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(a(c).is("body")?window:c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);{var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})}},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(b.RESET).addClass("affix");var a=this.$window.scrollTop(),c=this.$element.offset();return this.pinnedOffset=c.top-a},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"top"==this.affixed&&(e.top+=d),"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(b.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:c-h-this.$element.height()}))}}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery); \ No newline at end of file diff --git a/public/js/vendor-static/img-touch-canvas.js b/public/js/vendor-static/img-touch-canvas.js new file mode 100644 index 000000000..4519f65d9 --- /dev/null +++ b/public/js/vendor-static/img-touch-canvas.js @@ -0,0 +1,265 @@ +/* +================================= +img-touch-canvas - v0.1 +http://github.com/rombdn/img-touch-canvas + +(c) 2013 Romain BEAUDON +This code may be freely distributed under the MIT License +================================= +*/ + + +(function() { + var root = this; //global object + + var ImgTouchCanvas = function(options) { + if( !options || !options.canvas || !options.path) { + throw 'ImgZoom constructor: missing arguments canvas or path'; + } + + this.canvas = options.canvas; + this.canvas.width = this.canvas.clientWidth; + this.canvas.height = this.canvas.clientHeight; + this.context = this.canvas.getContext('2d'); + + this.desktop = options.desktop || false; //non touch events + + this.position = { + x: 0, + y: 0 + }; + this.scale = { + x: 0.5, + y: 0.5 + }; + this.imgTexture = new Image(); + this.imgTexture.src = options.path; + + this.lastZoomScale = null; + this.lastX = null; + this.lastY = null; + + this.mdown = false; //desktop drag + + this.init = false; + this.checkRequestAnimationFrame(); + requestAnimationFrame(this.animate.bind(this)); + + this.setEventListeners(); + }; + + + ImgTouchCanvas.prototype = { + animate: function() { + //set scale such as image cover all the canvas + if(!this.init) { + if(this.imgTexture.width) { + var scaleRatio = null; + if(this.canvas.clientWidth > this.canvas.clientHeight) { + scaleRatio = this.canvas.clientWidth / this.imgTexture.width; + } + else { + scaleRatio = this.canvas.clientHeight / this.imgTexture.height; + } + + this.scale.x = scaleRatio; + this.scale.y = scaleRatio; + this.init = true; + } + } + + this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); + + this.context.drawImage( + this.imgTexture, + this.position.x, this.position.y, + this.scale.x * this.imgTexture.width, + this.scale.y * this.imgTexture.height); + + requestAnimationFrame(this.animate.bind(this)); + }, + + + gesturePinchZoom: function(event) { + var zoom = false; + + if( event.targetTouches.length >= 2 ) { + var p1 = event.targetTouches[0]; + var p2 = event.targetTouches[1]; + var zoomScale = Math.sqrt(Math.pow(p2.pageX - p1.pageX, 2) + Math.pow(p2.pageY - p1.pageY, 2)); //euclidian distance + + if( this.lastZoomScale ) { + zoom = zoomScale - this.lastZoomScale; + } + + this.lastZoomScale = zoomScale; + } + + return zoom; + }, + + doZoom: function(zoom) { + if(!zoom) return; + + //new scale + var currentScale = this.scale.x; + var newScale = this.scale.x + zoom/100; + + + //some helpers + var deltaScale = newScale - currentScale; + var currentWidth = (this.imgTexture.width * this.scale.x); + var currentHeight = (this.imgTexture.height * this.scale.y); + var deltaWidth = this.imgTexture.width*deltaScale; + var deltaHeight = this.imgTexture.height*deltaScale; + + + //by default scale doesnt change position and only add/remove pixel to right and bottom + //so we must move the image to the left to keep the image centered + //ex: coefX and coefY = 0.5 when image is centered <=> move image to the left 0.5x pixels added to the right + var canvasmiddleX = this.canvas.clientWidth / 2; + var canvasmiddleY = this.canvas.clientHeight / 2; + var xonmap = (-this.position.x) + canvasmiddleX; + var yonmap = (-this.position.y) + canvasmiddleY; + var coefX = -xonmap / (currentWidth); + var coefY = -yonmap / (currentHeight); + var newPosX = this.position.x + deltaWidth*coefX; + var newPosY = this.position.y + deltaHeight*coefY; + + //edges cases + var newWidth = currentWidth + deltaWidth; + var newHeight = currentHeight + deltaHeight; + + if( newWidth < this.canvas.clientWidth ) return; + if( newPosX > 0 ) { newPosX = 0; } + if( newPosX + newWidth < this.canvas.clientWidth ) { newPosX = this.canvas.clientWidth - newWidth;} + + if( newHeight < this.canvas.clientHeight ) return; + if( newPosY > 0 ) { newPosY = 0; } + if( newPosY + newHeight < this.canvas.clientHeight ) { newPosY = this.canvas.clientHeight - newHeight; } + + + //finally affectations + this.scale.x = newScale; + this.scale.y = newScale; + this.position.x = newPosX; + this.position.y = newPosY; + }, + + doMove: function(relativeX, relativeY) { + if(this.lastX && this.lastY) { + var deltaX = relativeX - this.lastX; + var deltaY = relativeY - this.lastY; + var currentWidth = (this.imgTexture.width * this.scale.x); + var currentHeight = (this.imgTexture.height * this.scale.y); + + this.position.x += deltaX; + this.position.y += deltaY; + + + //edge cases + if( this.position.x > 0 ) { + this.position.x = 0; + } + else if( this.position.x + currentWidth < this.canvas.clientWidth ) { + this.position.x = this.canvas.clientWidth - currentWidth; + } + if( this.position.y > 0 ) { + this.position.y = 0; + } + else if( this.position.y + currentHeight < this.canvas.clientHeight ) { + this.position.y = this.canvas.clientHeight - currentHeight; + } + } + + this.lastX = relativeX; + this.lastY = relativeY; + }, + + setEventListeners: function() { + // touch + this.canvas.addEventListener('touchstart', function(e) { + this.lastX = null; + this.lastY = null; + this.lastZoomScale = null; + }.bind(this)); + + this.canvas.addEventListener('touchmove', function(e) { + e.preventDefault(); + + if(e.targetTouches.length == 2) { //pinch + this.doZoom(this.gesturePinchZoom(e)); + } + else if(e.targetTouches.length == 1) { + var relativeX = e.targetTouches[0].pageX - this.canvas.getBoundingClientRect().left; + var relativeY = e.targetTouches[0].pageY - this.canvas.getBoundingClientRect().top; + this.doMove(relativeX, relativeY); + } + }.bind(this)); + + if(this.desktop) { + // keyboard+mouse + window.addEventListener('keyup', function(e) { + if(e.keyCode == 187 || e.keyCode == 61) { //+ + this.doZoom(5); + } + else if(e.keyCode == 54) {//- + this.doZoom(-5); + } + }.bind(this)); + + window.addEventListener('mousedown', function(e) { + this.mdown = true; + this.lastX = null; + this.lastY = null; + }.bind(this)); + + window.addEventListener('mouseup', function(e) { + this.mdown = false; + }.bind(this)); + + window.addEventListener('mousemove', function(e) { + var relativeX = e.pageX - this.canvas.getBoundingClientRect().left; + var relativeY = e.pageY - this.canvas.getBoundingClientRect().top; + + if(e.target == this.canvas && this.mdown) { + this.doMove(relativeX, relativeY); + } + + if(relativeX <= 0 || relativeX >= this.canvas.clientWidth || relativeY <= 0 || relativeY >= this.canvas.clientHeight) { + this.mdown = false; + } + }.bind(this)); + } + }, + + checkRequestAnimationFrame: function() { + var lastTime = 0; + var vendors = ['ms', 'moz', 'webkit', 'o']; + for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { + window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; + window.cancelAnimationFrame = + window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame']; + } + + if (!window.requestAnimationFrame) { + window.requestAnimationFrame = function(callback, element) { + var currTime = new Date().getTime(); + var timeToCall = Math.max(0, 16 - (currTime - lastTime)); + var id = window.setTimeout(function() { callback(currTime + timeToCall); }, + timeToCall); + lastTime = currTime + timeToCall; + return id; + }; + } + + if (!window.cancelAnimationFrame) { + window.cancelAnimationFrame = function(id) { + clearTimeout(id); + }; + } + } + }; + + root.ImgTouchCanvas = ImgTouchCanvas; +}).call(this); \ No newline at end of file diff --git a/public/js/vendor-static/jquery.ba-throttle-debounce.min.js b/public/js/vendor-static/jquery.ba-throttle-debounce.min.js new file mode 100644 index 000000000..07205508e --- /dev/null +++ b/public/js/vendor-static/jquery.ba-throttle-debounce.min.js @@ -0,0 +1,9 @@ +/* + * jQuery throttle / debounce - v1.1 - 3/7/2010 + * http://benalman.com/projects/jquery-throttle-debounce-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this); \ No newline at end of file diff --git a/public/js/vendor-static/jquery.fullscreen-min.js b/public/js/vendor-static/jquery.fullscreen-min.js new file mode 100644 index 000000000..236bc6c88 --- /dev/null +++ b/public/js/vendor-static/jquery.fullscreen-min.js @@ -0,0 +1,10 @@ +/* + jquery.fullscreen 1.1.5 + https://github.com/kayahr/jquery-fullscreen-plugin + Copyright (C) 2012-2013 Klaus Reimer + Licensed under the MIT license + (See http://www.opensource.org/licenses/mit-license) +*/ +function d(c){var b,a;if(!this.length)return this;b=this[0];b.ownerDocument?a=b.ownerDocument:(a=b,b=a.documentElement);if(null==c){if(!a.exitFullscreen&&!a.webkitExitFullscreen&&!a.webkitCancelFullScreen&&!a.msExitFullscreen&&!a.mozCancelFullScreen)return null;c=!!a.fullscreenElement||!!a.msFullscreenElement||!!a.webkitIsFullScreen||!!a.mozFullScreen;return!c?c:a.fullscreenElement||a.webkitFullscreenElement||a.webkitCurrentFullScreenElement||a.msFullscreenElement||a.mozFullScreenElement||c}c?(c= +b.requestFullscreen||b.webkitRequestFullscreen||b.webkitRequestFullScreen||b.msRequestFullscreen||b.mozRequestFullScreen)&&c.call(b):(c=a.exitFullscreen||a.webkitExitFullscreen||a.webkitCancelFullScreen||a.msExitFullscreen||a.mozCancelFullScreen)&&c.call(a);return this}jQuery.fn.fullScreen=d;jQuery.fn.toggleFullScreen=function(){return d.call(this,!d.call(this))};var e,f,g;e=document; +e.webkitCancelFullScreen?(f="webkitfullscreenchange",g="webkitfullscreenerror"):e.msExitFullscreen?(f="MSFullscreenChange",g="MSFullscreenError"):e.mozCancelFullScreen?(f="mozfullscreenchange",g="mozfullscreenerror"):(f="fullscreenchange",g="fullscreenerror");jQuery(document).bind(f,function(){jQuery(document).trigger(new jQuery.Event("fullscreenchange"))});jQuery(document).bind(g,function(){jQuery(document).trigger(new jQuery.Event("fullscreenerror"))}); \ No newline at end of file diff --git a/public/js/vendor-static/jquery.menu-aim.js b/public/js/vendor-static/jquery.menu-aim.js new file mode 100644 index 000000000..ba3fc9472 --- /dev/null +++ b/public/js/vendor-static/jquery.menu-aim.js @@ -0,0 +1,323 @@ +/** + * menu-aim is a jQuery plugin for dropdown menus that can differentiate + * between a user trying hover over a dropdown item vs trying to navigate into + * a submenu's contents. + * + * menu-aim assumes that you have are using a menu with submenus that expand + * to the menu's right. It will fire events when the user's mouse enters a new + * dropdown item *and* when that item is being intentionally hovered over. + * + * __________________________ + * | Monkeys >| Gorilla | + * | Gorillas >| Content | + * | Chimps >| Here | + * |___________|____________| + * + * In the above example, "Gorillas" is selected and its submenu content is + * being shown on the right. Imagine that the user's cursor is hovering over + * "Gorillas." When they move their mouse into the "Gorilla Content" area, they + * may briefly hover over "Chimps." This shouldn't close the "Gorilla Content" + * area. + * + * This problem is normally solved using timeouts and delays. menu-aim tries to + * solve this by detecting the direction of the user's mouse movement. This can + * make for quicker transitions when navigating up and down the menu. The + * experience is hopefully similar to amazon.com/'s "Shop by Department" + * dropdown. + * + * Use like so: + * + * $("#menu").menuAim({ + * activate: $.noop, // fired on row activation + * deactivate: $.noop // fired on row deactivation + * }); + * + * ...to receive events when a menu's row has been purposefully (de)activated. + * + * The following options can be passed to menuAim. All functions execute with + * the relevant row's HTML element as the execution context ('this'): + * + * .menuAim({ + * // Function to call when a row is purposefully activated. Use this + * // to show a submenu's content for the activated row. + * activate: function() {}, + * + * // Function to call when a row is deactivated. + * deactivate: function() {}, + * + * // Function to call when mouse enters a menu row. Entering a row + * // does not mean the row has been activated, as the user may be + * // mousing over to a submenu. + * enter: function() {}, + * + * // Function to call when mouse exits a menu row. + * exit: function() {}, + * + * // Selector for identifying which elements in the menu are rows + * // that can trigger the above events. Defaults to "> li". + * rowSelector: "> li", + * + * // You may have some menu rows that aren't submenus and therefore + * // shouldn't ever need to "activate." If so, filter submenu rows w/ + * // this selector. Defaults to "*" (all elements). + * submenuSelector: "*", + * + * // Direction the submenu opens relative to the main menu. Can be + * // left, right, above, or below. Defaults to "right". + * submenuDirection: "right" + * }); + * + * https://github.com/kamens/jQuery-menu-aim +*/ +(function($) { + + $.fn.menuAim = function(opts) { + // Initialize menu-aim for all elements in jQuery collection + this.each(function() { + init.call(this, opts); + }); + + return this; + }; + + function init(opts) { + var $menu = $(this), + activeRow = null, + mouseLocs = [], + lastDelayLoc = null, + timeoutId = null, + options = $.extend({ + rowSelector: "> li", + submenuSelector: "*", + submenuDirection: "right", + tolerance: 75, // bigger = more forgivey when entering submenu + enter: $.noop, + exit: $.noop, + activate: $.noop, + deactivate: $.noop, + exitMenu: $.noop + }, opts); + + var MOUSE_LOCS_TRACKED = 3, // number of past mouse locations to track + DELAY = 300; // ms delay when user appears to be entering submenu + + /** + * Keep track of the last few locations of the mouse. + */ + var mousemoveDocument = function(e) { + mouseLocs.push({x: e.pageX, y: e.pageY}); + + if (mouseLocs.length > MOUSE_LOCS_TRACKED) { + mouseLocs.shift(); + } + }; + + /** + * Cancel possible row activations when leaving the menu entirely + */ + var mouseleaveMenu = function() { + if (timeoutId) { + clearTimeout(timeoutId); + } + + // If exitMenu is supplied and returns true, deactivate the + // currently active row on menu exit. + if (options.exitMenu(this)) { + if (activeRow) { + options.deactivate(activeRow); + } + + activeRow = null; + } + }; + + /** + * Trigger a possible row activation whenever entering a new row. + */ + var mouseenterRow = function() { + if (timeoutId) { + // Cancel any previous activation delays + clearTimeout(timeoutId); + } + + options.enter(this); + possiblyActivate(this); + }, + mouseleaveRow = function() { + options.exit(this); + }; + + /* + * Immediately activate a row if the user clicks on it. + */ + var clickRow = function() { + activate(this); + }; + + /** + * Activate a menu row. + */ + var activate = function(row) { +// if (row == activeRow) { +// return; +// } + + if (activeRow) { + options.deactivate(activeRow); + } + + options.activate(row); + activeRow = row; + }; + + /** + * Possibly activate a menu row. If mouse movement indicates that we + * shouldn't activate yet because user may be trying to enter + * a submenu's content, then delay and check again later. + */ + var possiblyActivate = function(row) { + var delay = activationDelay(); + + if (delay) { + timeoutId = setTimeout(function() { + possiblyActivate(row); + }, delay); + } else { + activate(row); + } + }; + + /** + * Return the amount of time that should be used as a delay before the + * currently hovered row is activated. + * + * Returns 0 if the activation should happen immediately. Otherwise, + * returns the number of milliseconds that should be delayed before + * checking again to see if the row should be activated. + */ + var activationDelay = function() { + if (!activeRow || !$(activeRow).is(options.submenuSelector)) { + // If there is no other submenu row already active, then + // go ahead and activate immediately. + return 0; + } + + var offset = $menu.offset(), + upperLeft = { + x: offset.left, + y: offset.top - options.tolerance + }, + upperRight = { + x: offset.left + $menu.outerWidth(), + y: upperLeft.y + }, + lowerLeft = { + x: offset.left, + y: offset.top + $menu.outerHeight() + options.tolerance + }, + lowerRight = { + x: offset.left + $menu.outerWidth(), + y: lowerLeft.y + }, + loc = mouseLocs[mouseLocs.length - 1], + prevLoc = mouseLocs[0]; + + if (!loc) { + return 0; + } + + if (!prevLoc) { + prevLoc = loc; + } + + if (prevLoc.x < offset.left || prevLoc.x > lowerRight.x || + prevLoc.y < offset.top || prevLoc.y > lowerRight.y) { + // If the previous mouse location was outside of the entire + // menu's bounds, immediately activate. + return 0; + } + + if (lastDelayLoc && + loc.x == lastDelayLoc.x && loc.y == lastDelayLoc.y) { + // If the mouse hasn't moved since the last time we checked + // for activation status, immediately activate. + return 0; + } + + // Detect if the user is moving towards the currently activated + // submenu. + // + // If the mouse is heading relatively clearly towards + // the submenu's content, we should wait and give the user more + // time before activating a new row. If the mouse is heading + // elsewhere, we can immediately activate a new row. + // + // We detect this by calculating the slope formed between the + // current mouse location and the upper/lower right points of + // the menu. We do the same for the previous mouse location. + // If the current mouse location's slopes are + // increasing/decreasing appropriately compared to the + // previous's, we know the user is moving toward the submenu. + // + // Note that since the y-axis increases as the cursor moves + // down the screen, we are looking for the slope between the + // cursor and the upper right corner to decrease over time, not + // increase (somewhat counterintuitively). + function slope(a, b) { + return (b.y - a.y) / (b.x - a.x); + }; + + var decreasingCorner = upperRight, + increasingCorner = lowerRight; + + // Our expectations for decreasing or increasing slope values + // depends on which direction the submenu opens relative to the + // main menu. By default, if the menu opens on the right, we + // expect the slope between the cursor and the upper right + // corner to decrease over time, as explained above. If the + // submenu opens in a different direction, we change our slope + // expectations. + if (options.submenuDirection == "left") { + decreasingCorner = lowerLeft; + increasingCorner = upperLeft; + } else if (options.submenuDirection == "below") { + decreasingCorner = lowerRight; + increasingCorner = lowerLeft; + } else if (options.submenuDirection == "above") { + decreasingCorner = upperLeft; + increasingCorner = upperRight; + } + + var decreasingSlope = slope(loc, decreasingCorner), + increasingSlope = slope(loc, increasingCorner), + prevDecreasingSlope = slope(prevLoc, decreasingCorner), + prevIncreasingSlope = slope(prevLoc, increasingCorner); + + if (decreasingSlope < prevDecreasingSlope && + increasingSlope > prevIncreasingSlope) { + // Mouse is moving from previous location towards the + // currently activated submenu. Delay before activating a + // new menu row, because user may be moving into submenu. + lastDelayLoc = loc; + return DELAY; + } + + lastDelayLoc = null; + return 0; + }; + + /** + * Hook up initial menu events + */ + $menu + .mouseleave(mouseleaveMenu) + .find(options.rowSelector) + .mouseenter(mouseenterRow) + .mouseleave(mouseleaveRow) + .click(clickRow); + + $(document).mousemove(mousemoveDocument); + + }; +})(jQuery); + diff --git a/public/js/vendor-static/jquery.min.js b/public/js/vendor-static/jquery.min.js new file mode 100644 index 000000000..cbe6abe59 --- /dev/null +++ b/public/js/vendor-static/jquery.min.js @@ -0,0 +1,4 @@ +/*! jQuery v2.1.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m=a.document,n="2.1.0",o=function(a,b){return new o.fn.init(a,b)},p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};o.fn=o.prototype={jquery:n,constructor:o,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=o.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return o.each(this,a,b)},map:function(a){return this.pushStack(o.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},o.extend=o.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||o.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(o.isPlainObject(d)||(e=o.isArray(d)))?(e?(e=!1,f=c&&o.isArray(c)?c:[]):f=c&&o.isPlainObject(c)?c:{},g[b]=o.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},o.extend({expando:"jQuery"+(n+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===o.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isPlainObject:function(a){if("object"!==o.type(a)||a.nodeType||o.isWindow(a))return!1;try{if(a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(b){return!1}return!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=o.trim(a),a&&(1===a.indexOf("use strict")?(b=m.createElement("script"),b.text=a,m.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":k.call(a)},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?o.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),o.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||o.guid++,f):void 0},now:Date.now,support:l}),o.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=o.type(a);return"function"===c||o.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);o.find=t,o.expr=t.selectors,o.expr[":"]=o.expr.pseudos,o.unique=t.uniqueSort,o.text=t.getText,o.isXMLDoc=t.isXML,o.contains=t.contains;var u=o.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(o.isFunction(b))return o.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return o.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return o.filter(b,a,c);b=o.filter(b,a)}return o.grep(a,function(a){return g.call(b,a)>=0!==c})}o.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?o.find.matchesSelector(d,a)?[d]:[]:o.find.matches(a,o.grep(b,function(a){return 1===a.nodeType}))},o.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(o(a).filter(function(){for(b=0;c>b;b++)if(o.contains(e[b],this))return!0}));for(b=0;c>b;b++)o.find(a,e[b],d);return d=this.pushStack(c>1?o.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?o(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=o.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof o?b[0]:b,o.merge(this,o.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:m,!0)),v.test(c[1])&&o.isPlainObject(b))for(c in b)o.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=m.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=m,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):o.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(o):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),o.makeArray(a,this))};A.prototype=o.fn,y=o(m);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};o.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&o(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),o.fn.extend({has:function(a){var b=o(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(o.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?o(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&o.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?o.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(o(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(o.unique(o.merge(this.get(),o(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}o.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return o.dir(a,"parentNode")},parentsUntil:function(a,b,c){return o.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return o.dir(a,"nextSibling")},prevAll:function(a){return o.dir(a,"previousSibling")},nextUntil:function(a,b,c){return o.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return o.dir(a,"previousSibling",c)},siblings:function(a){return o.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return o.sibling(a.firstChild)},contents:function(a){return a.contentDocument||o.merge([],a.childNodes)}},function(a,b){o.fn[a]=function(c,d){var e=o.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=o.filter(d,e)),this.length>1&&(C[a]||o.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return o.each(a.match(E)||[],function(a,c){b[c]=!0}),b}o.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):o.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){o.each(b,function(b,c){var d=o.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&o.each(arguments,function(a,b){var c;while((c=o.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?o.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},o.extend({Deferred:function(a){var b=[["resolve","done",o.Callbacks("once memory"),"resolved"],["reject","fail",o.Callbacks("once memory"),"rejected"],["notify","progress",o.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return o.Deferred(function(c){o.each(b,function(b,f){var g=o.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&o.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?o.extend(a,d):d}},e={};return d.pipe=d.then,o.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&o.isFunction(a.promise)?e:0,g=1===f?a:o.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&o.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;o.fn.ready=function(a){return o.ready.promise().done(a),this},o.extend({isReady:!1,readyWait:1,holdReady:function(a){a?o.readyWait++:o.ready(!0)},ready:function(a){(a===!0?--o.readyWait:o.isReady)||(o.isReady=!0,a!==!0&&--o.readyWait>0||(H.resolveWith(m,[o]),o.fn.trigger&&o(m).trigger("ready").off("ready")))}});function I(){m.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),o.ready()}o.ready.promise=function(b){return H||(H=o.Deferred(),"complete"===m.readyState?setTimeout(o.ready):(m.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},o.ready.promise();var J=o.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===o.type(c)){e=!0;for(h in c)o.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,o.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(o(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};o.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=o.expando+Math.random()}K.uid=1,K.accepts=o.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,o.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(o.isEmptyObject(f))o.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,o.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{o.isArray(b)?d=b.concat(b.map(o.camelCase)):(e=o.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!o.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?o.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}o.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),o.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length; +while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=o.camelCase(d.slice(5)),P(f,d,e[d]));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=o.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),o.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||o.isArray(c)?d=L.access(a,b,o.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=o.queue(a,b),d=c.length,e=c.shift(),f=o._queueHooks(a,b),g=function(){o.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:o.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),o.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";l.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return m.activeElement}catch(a){}}o.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=o.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof o!==U&&o.event.triggered!==b.type?o.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],n=q=h[1],p=(h[2]||"").split(".").sort(),n&&(l=o.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=o.event.special[n]||{},k=o.extend({type:n,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&o.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(n,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),o.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],n=q=h[1],p=(h[2]||"").split(".").sort(),n){l=o.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||o.removeEvent(a,n,r.handle),delete i[n])}else for(n in i)o.event.remove(a,n+b[j],c,d,!0);o.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,p=[d||m],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||m,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+o.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[o.expando]?b:new o.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:o.makeArray(c,[b]),n=o.event.special[q]||{},e||!n.trigger||n.trigger.apply(d,c)!==!1)){if(!e&&!n.noBubble&&!o.isWindow(d)){for(i=n.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||m)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:n.bindType||q,l=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),l&&l.apply(g,c),l=k&&g[k],l&&l.apply&&o.acceptData(g)&&(b.result=l.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||n._default&&n._default.apply(p.pop(),c)!==!1||!o.acceptData(d)||k&&o.isFunction(d[q])&&!o.isWindow(d)&&(h=d[k],h&&(d[k]=null),o.event.triggered=q,d[q](),o.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=o.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=o.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=o.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((o.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?o(e,this).index(i)>=0:o.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*\s*$/g,ib={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return o.nodeName(a,"table")&&o.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)o.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=o.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&o.nodeName(a,b)?o.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}o.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=o.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||o.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,n=a.length;n>m;m++)if(e=a[m],e||0===e)if("object"===o.type(e))o.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;o.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===o.inArray(e,d))&&(i=o.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f,g,h=o.event.special,i=0;void 0!==(c=a[i]);i++){if(o.acceptData(c)&&(f=c[L.expando],f&&(b=L.cache[f]))){if(d=Object.keys(b.events||{}),d.length)for(g=0;void 0!==(e=d[g]);g++)h[e]?o.event.remove(c,e):o.removeEvent(c,e,b.handle);L.cache[f]&&delete L.cache[f]}delete M.cache[c[M.expando]]}}}),o.fn.extend({text:function(a){return J(this,function(a){return void 0===a?o.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?o.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||o.cleanData(ob(c)),c.parentNode&&(b&&o.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(o.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return o.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(o.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,o.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,n=k-1,p=a[0],q=o.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(c=o.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=o.map(ob(c,"script"),kb),g=f.length;k>j;j++)h=c,j!==n&&(h=o.clone(h,!0,!0),g&&o.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,o.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&o.contains(i,h)&&(h.src?o._evalUrl&&o._evalUrl(h.src):o.globalEval(h.textContent.replace(hb,"")))}return this}}),o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){o.fn[a]=function(a){for(var c,d=[],e=o(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),o(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d=o(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:o.css(d[0],"display");return d.detach(),e}function tb(a){var b=m,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||o("