From e960b5b5206f5998f95c27520c55076a4aaa0a00 Mon Sep 17 00:00:00 2001 From: Leonardo Campos <87499309+leonardocampososf@users.noreply.github.com> Date: Fri, 9 Sep 2022 16:25:14 -0300 Subject: [PATCH] [SFCC-24]: Adding SCA logic to Signifyd (#30) * SSIG-46 - Updated create case and send transaction APIs from v2 to v3 * SSIG-46: Adding fullName to destination * SFCC-18: Changing fulfillment logic to V3 * SFCC-20: Task development * SFCC-23: Ticket development * SFCC-23: Adding custom preferences and attributes * SFCC-23: Updating service credentials * SFCC-23: Changing verification to signifyd policy * SFCC-23: Removing decision center logic and guarantee disposition * Updated documentation * SFCC-24: SCA Payment verification * SFCC-24: Adding SCA attributes xml * draft: Adding adyen cartridge * draft: Adding testing parameters * Draft: adding .project file * draft: Adding SFRA new version * draft: Adding Signifyd functions to Adyen checkout * SFCC-26: Adding testing logic * Adding missing Transaction API fields * [SFCC-22]: BD signifyd custom preferences updated (#29) * SFCC-22 updated signifyd custom preferences * [SFCC-22]: BD signifyd custom preferences fix * SFCC-22-V1 updated metadata. * Removing testing code * Removing git ignore * Removing adyen * Removing testing comments and transactions * Update .gitignore Co-authored-by: Renato Diniz <57443225+Renato-DinizOSF@users.noreply.github.com> Co-authored-by: christianMwanichetaOSF <86720212+christianMwanichetaOSF@users.noreply.github.com> --- .gitignore | 56 ++ link/.gitignore | 71 ++ .../cartridge/scripts/service/signifyd.js | 37 +- .../meta/system-objecttype-extensions.xml | 18 + link/metadata/services.xml | 17 - .../cartridge/app_storefront_base.properties | 1 + .../client/default/js/campaignBanner.js | 17 + .../cartridge/client/default/js/carousel.js | 174 ++++ .../cartridge/client/default/js/cart/cart.js | 197 +++-- .../client/default/js/checkout/address.js | 3 +- .../client/default/js/checkout/billing.js | 75 +- .../client/default/js/checkout/checkout.js | 193 ++++- .../client/default/js/checkout/customer.js | 143 ++++ .../client/default/js/checkout/formErrors.js | 10 +- .../client/default/js/checkout/shipping.js | 128 ++- .../client/default/js/checkout/summary.js | 16 +- .../client/default/js/components/cleave.js | 2 +- .../default/js/components/collapsibleItem.js | 8 +- .../default/js/components/consentTracking.js | 70 +- .../client/default/js/components/cookie.js | 1 - .../client/default/js/components/focus.js | 35 + .../client/default/js/components/footer.js | 57 +- .../default/js/components/formValidation.js | 2 +- .../client/default/js/components/menu.js | 79 +- .../client/default/js/components/miniCart.js | 20 +- .../default/js/components/scrollAnimate.js | 11 + .../client/default/js/components/search.js | 103 ++- .../client/default/js/components/toolTip.js | 11 + .../cartridge/client/default/js/contactUs.js | 7 + .../client/default/js/contactUs/contactUs.js | 58 ++ .../client/default/js/einsteinCarousel.js | 170 ++++ .../client/default/js/login/login.js | 2 + .../cartridge/client/default/js/main.js | 1 + .../client/default/js/mobileGridLookBook.js | 13 + .../paymentInstruments/paymentInstruments.js | 6 +- .../client/default/js/product/base.js | 212 +++-- .../client/default/js/product/detail.js | 42 +- .../client/default/js/product/quickView.js | 36 +- .../client/default/js/search/search.js | 35 +- .../default/js/storeLocator/storeLocator.js | 2 +- .../default/scss/_bootstrapOverrides.scss | 22 +- .../client/default/scss/_miniCart.scss | 5 +- .../client/default/scss/_productCard.scss | 9 +- .../client/default/scss/_variables.scss | 1 + .../client/default/scss/account/account.scss | 12 +- .../client/default/scss/account/payment.scss | 4 + .../client/default/scss/account/profile.scss | 10 +- .../cartridge/client/default/scss/cart.scss | 3 +- .../scss/checkout/_checkoutComponents.scss | 16 +- .../default/scss/checkout/checkout.scss | 75 +- .../scss/components/_categoryTiles.scss | 4 +- .../scss/components/_collapsibleItem.scss | 10 +- .../default/scss/components/_common.scss | 35 +- .../default/scss/components/_footer.scss | 24 +- .../default/scss/components/_header.scss | 16 +- .../scss/components/_headerSearch.scss | 54 +- .../client/default/scss/components/_hero.scss | 6 +- .../client/default/scss/components/_menu.scss | 13 + .../scss/components/_productCommon.scss | 8 - .../scss/components/_productTiles.scss | 10 - .../default/scss/components/_quickView.scss | 13 +- .../client/default/scss/components/_tabs.scss | 1 - .../default/scss/components/_tooltip.scss | 10 +- .../client/default/scss/contactUs.scss | 18 + .../experience/carousel/_carouselMixins.scss | 30 + .../carousel/_extraSmallCarousel.scss | 186 +++++ .../experience/carousel/_mediumCarousel.scss | 354 +++++++++ .../experience/carousel/_smallCarousel.scss | 348 ++++++++ .../commerceAssets/campaignBanner.scss | 57 ++ .../components/commerceAssets/category.scss | 59 ++ .../commerceAssets/imageAndTextCommon.scss | 57 ++ .../components/commerceAssets/photoTile.scss | 3 + .../commerceAssets/popularCategory.scss | 46 ++ .../commerceAssets/productTile.scss | 168 ++++ .../commerceAssets/shopTheLook.scss | 69 ++ .../components/commerceLayouts/carousel.scss | 122 +++ .../components/commerceLayouts/layout.scss | 38 + .../commerceLayouts/mobileGridLookBook.scss | 46 ++ .../commerceLayouts/productList.scss | 14 + .../components/einstein/einsteinCarousel.scss | 32 + .../scss/experience/experienceGlobal.scss | 54 ++ .../default/scss/experience/storePage.scss | 6 + .../default/scss/experience/variables.scss | 91 +++ .../cartridge/client/default/scss/global.scss | 1 + .../client/default/scss/homePage.scss | 2 +- .../cartridge/client/default/scss/login.scss | 12 + .../client/default/scss/product/detail.scss | 81 +- .../cartridge/client/default/scss/search.scss | 89 ++- .../default/scss/skin/_skinVariables.scss | 69 ++ .../client/default/scss/skin/skin.scss | 140 ++++ .../client/default/scss/storeLocator.scss | 2 +- .../scss/storeLocator/_storeLocator.scss | 6 +- .../cartridge/config/httpHeadersConf.json | 10 + .../cartridge/config/preferences.js | 14 + .../cartridge/controllers/Account.js | 338 +++++--- .../cartridge/controllers/Address.js | 131 ++- .../cartridge/controllers/CSRF.js | 43 +- .../cartridge/controllers/Cart.js | 282 ++++++- .../cartridge/controllers/Checkout.js | 116 ++- .../controllers/CheckoutAddressServices.js | 60 +- .../cartridge/controllers/CheckoutServices.js | 750 +++++++++++------- .../controllers/CheckoutShippingServices.js | 102 ++- .../cartridge/controllers/ConsentTracking.js | 60 ++ .../cartridge/controllers/ContactUs.js | 69 ++ .../cartridge/controllers/Default.js | 37 +- .../cartridge/controllers/EinsteinCarousel.js | 69 ++ .../cartridge/controllers/EmailSubscribe.js | 61 ++ .../cartridge/controllers/Error.js | 48 +- .../cartridge/controllers/Home.js | 28 +- .../cartridge/controllers/Link.js | 70 ++ .../cartridge/controllers/Login.js | 52 ++ .../cartridge/controllers/Order.js | 173 +++- .../cartridge/controllers/Page.js | 100 ++- .../cartridge/controllers/PageDesigner.js | 66 ++ .../controllers/PaymentInstruments.js | 115 ++- .../cartridge/controllers/Product.js | 161 +++- .../cartridge/controllers/RedirectURL.js | 21 + .../cartridge/controllers/ReportingEvent.js | 37 + .../cartridge/controllers/Search.js | 226 ++++-- .../cartridge/controllers/SearchServices.js | 30 +- .../controllers/SourceCodeRedirect.js | 30 + .../cartridge/controllers/Stores.js | 47 +- .../cartridge/controllers/Tile.js | 22 +- .../cartridge/experience/aspects/pdp.json | 16 + .../cartridge/experience/aspects/plp.json | 16 + .../cartridge/experience/breakpoints.json | 5 + .../commerce_assets/campaignBanner.js | 26 + .../commerce_assets/campaignBanner.json | 22 + .../components/commerce_assets/category.js | 55 ++ .../components/commerce_assets/category.json | 224 ++++++ .../commerce_assets/editorialRichText.js | 28 + .../commerce_assets/editorialRichText.json | 22 + .../commerce_assets/imageAndText.js | 32 + .../commerce_assets/imageAndText.json | 44 + .../components/commerce_assets/mainBanner.js | 30 + .../commerce_assets/mainBanner.json | 47 ++ .../components/commerce_assets/photoTile.js | 27 + .../components/commerce_assets/photoTile.json | 22 + .../commerce_assets/popularCategory.js | 69 ++ .../commerce_assets/popularCategory.json | 47 ++ .../commerce_assets/productListTile.js | 32 + .../commerce_assets/productListTile.json | 44 + .../components/commerce_assets/productTile.js | 45 ++ .../commerce_assets/productTile.json | 30 + .../components/commerce_assets/shopTheLook.js | 47 ++ .../commerce_assets/shopTheLook.json | 29 + .../components/commerce_layouts/carousel.js | 26 + .../components/commerce_layouts/carousel.json | 109 +++ .../commerce_layouts/mobileGrid1r1c.js | 27 + .../commerce_layouts/mobileGrid1r1c.json | 13 + .../commerce_layouts/mobileGrid2r1c.js | 27 + .../commerce_layouts/mobileGrid2r1c.json | 18 + .../commerce_layouts/mobileGrid2r2c.js | 27 + .../commerce_layouts/mobileGrid2r2c.json | 28 + .../commerce_layouts/mobileGrid2r3c.js | 28 + .../commerce_layouts/mobileGrid2r3c.json | 68 ++ .../commerce_layouts/mobileGrid3r1c.js | 27 + .../commerce_layouts/mobileGrid3r1c.json | 23 + .../commerce_layouts/mobileGrid3r2c.js | 28 + .../commerce_layouts/mobileGrid3r2c.json | 69 ++ .../commerce_layouts/mobileGridLookBook.js | 28 + .../commerce_layouts/mobileGridLookBook.json | 104 +++ .../commerce_layouts/popularCategories.js | 28 + .../commerce_layouts/popularCategories.json | 40 + .../dynamic/dynamicCategoryBanner.js | 50 ++ .../dynamic/dynamicCategoryBanner.json | 52 ++ .../components/dynamic/productDetail.js | 52 ++ .../components/dynamic/productDetail.json | 30 + .../components/dynamic/productList.js | 62 ++ .../components/dynamic/productList.json | 89 +++ .../components/einstein/einsteinCarousel.js | 48 ++ .../components/einstein/einsteinCarousel.json | 162 ++++ .../einstein/einsteinCarouselCategory.js | 54 ++ .../einstein/einsteinCarouselCategory.json | 165 ++++ .../einstein/einsteinCarouselProduct.js | 70 ++ .../einstein/einsteinCarouselProduct.json | 165 ++++ .../cartridge/experience/hooks.js | 8 + .../experience/pages/productDetail.js | 56 ++ .../experience/pages/productDetail.json | 43 + .../cartridge/experience/pages/productList.js | 58 ++ .../experience/pages/productList.json | 46 ++ .../cartridge/experience/pages/storePage.js | 38 + .../cartridge/experience/pages/storePage.json | 41 + .../utilities/ImageTransformation.js | 108 +++ .../experience/utilities/PageRenderHelper.js | 77 ++ .../experience/utilities/RegionModel.js | 154 ++++ .../utilities/RegionModelRegistry.js | 33 + .../cartridge/forms/default/address.xml | 20 +- .../cartridge/forms/default/billing.xml | 2 + .../cartridge/forms/default/coCustomer.xml | 16 + .../forms/default/coRegisteredCustomer.xml | 27 + .../cartridge/forms/default/contactInfo.xml | 8 + .../cartridge/forms/default/creditCard.xml | 16 +- .../cartridge/forms/default/profile.xml | 8 +- .../cartridge/forms/default/states.xml | 2 +- .../cartridge/forms/en_GB/address.xml | 10 +- .../cartridge/forms/en_GB/profile.xml | 8 +- .../cartridge/forms/fr_FR/address.xml | 10 +- .../cartridge/forms/fr_FR/profile.xml | 8 +- .../cartridge/forms/it_IT/address.xml | 10 +- .../cartridge/forms/it_IT/profile.xml | 8 +- .../cartridge/forms/ja_JP/address.xml | 10 +- .../cartridge/forms/ja_JP/profile.xml | 8 +- .../cartridge/forms/ja_JP/states.xml | 2 +- .../cartridge/forms/zh_CN/address.xml | 10 +- .../cartridge/models/account.js | 30 +- .../cartridge/models/cart.js | 1 + .../cartridge/models/categories.js | 4 +- .../cartridge/models/locale.js | 7 +- .../cartridge/models/order.js | 4 +- .../cartridge/models/price/tiered.js | 2 +- .../product/decorators/bundledProducts.js | 2 +- .../models/product/decorators/index.js | 1 + .../models/product/decorators/price.js | 16 + .../models/product/decorators/quantity.js | 3 +- .../models/product/decorators/searchPrice.js | 71 +- .../decorators/searchVariationAttributes.js | 2 +- .../decorators/setProductsCollection.js | 19 + .../cartridge/models/product/fullProduct.js | 5 +- .../models/product/productAttributes.js | 4 +- .../cartridge/models/product/productBundle.js | 17 +- .../cartridge/models/product/productImages.js | 10 +- .../cartridge/models/product/productSet.js | 2 + .../cartridge/models/product/productTile.js | 34 +- .../productLineItem/decorators/priceTotal.js | 2 +- .../decorators/quantityOptions.js | 11 +- .../models/productLineItem/orderLineItem.js | 1 - .../cartridge/models/productLineItems.js | 26 +- .../search/attributeRefinementValue/base.js | 2 +- .../attributeRefinementValue/category.js | 18 +- .../attributeRefinementValue/promotion.js | 102 +++ .../cartridge/models/search/contentSearch.js | 3 +- .../cartridge/models/search/productSearch.js | 34 +- .../models/search/productSortOptions.js | 4 +- .../models/search/suggestions/product.js | 7 +- .../cartridge/models/shipping.js | 2 +- .../cartridge/models/stores.js | 3 +- .../cartridge/models/totals.js | 4 +- .../scripts/account/accountHelpers.js | 33 + .../cartridge/scripts/assets.js | 42 +- .../cartridge/scripts/cart/cartHelpers.js | 19 +- .../scripts/checkout/checkoutHelpers.js | 73 +- .../scripts/checkout/shippingHelpers.js | 4 +- .../experience/utilities/carouselBuilder.js | 83 ++ .../cartridge/scripts/factories/product.js | 5 +- .../scripts/factories/searchRefinements.js | 2 + .../scripts/helpers/accountHelpers.js | 56 +- .../scripts/helpers/addressHelpers.js | 136 ++++ .../cartridge/scripts/helpers/emailHelpers.js | 13 +- .../cartridge/scripts/helpers/pricing.js | 86 +- .../scripts/helpers/productHelpers.js | 140 +++- .../scripts/helpers/searchHelpers.js | 288 ++++++- .../scripts/helpers/structuredDataHelper.js | 86 ++ .../cartridge/scripts/hooks/cart/calculate.js | 22 +- .../hooks/payment/processor/basic_credit.js | 28 +- .../processor/basic_credit_form_processor.js | 135 ++++ .../processor/default_form_processor.js | 23 + .../hooks/postAuthorizationHandling.js | 13 + .../cartridge/scripts/hooks/taxes.js | 14 +- .../scripts/middleware/consentTracking.js | 35 +- .../cartridge/scripts/middleware/csrf.js | 16 +- .../cartridge/scripts/order/orderHelpers.js | 62 +- .../cartridge/scripts/reportingUrls.js | 4 +- .../cartridge/scripts/search/search.js | 22 +- .../cartridge/scripts/theming/skin.js | 34 + .../cartridge/scripts/util/collections.js | 2 +- .../cartridge/scripts/util/promotionCache.js | 16 +- .../static/default/css/account/account.css | 2 +- .../default/css/account/addressBook.css | 2 +- .../static/default/css/account/dashboard.css | 2 +- .../static/default/css/account/orderTrack.css | 2 +- .../static/default/css/account/payment.css | 2 +- .../static/default/css/account/profile.css | 2 +- .../cartridge/static/default/css/cart.css | 2 +- .../static/default/css/checkout/checkout.css | 2 +- .../static/default/css/contactUs.css | 1 + .../commerceAssets/campaignBanner.css | 1 + .../components/commerceAssets/category.css | 1 + .../commerceAssets/imageAndTextCommon.css | 1 + .../components/commerceAssets/photoTile.css | 1 + .../commerceAssets/popularCategory.css | 1 + .../components/commerceAssets/productTile.css | 1 + .../components/commerceAssets/shopTheLook.css | 1 + .../components/commerceLayouts/carousel.css | 1 + .../components/commerceLayouts/layout.css | 1 + .../commerceLayouts/mobileGridLookBook.css | 1 + .../commerceLayouts/productList.css | 1 + .../components/einstein/einsteinCarousel.css | 1 + .../css/experience/experienceGlobal.css | 1 + .../default/css/experience/storePage.css | 1 + .../default/css/experience/variables.css | 0 .../cartridge/static/default/css/global.css | 4 +- .../cartridge/static/default/css/homePage.css | 2 +- .../cartridge/static/default/css/login.css | 2 +- .../static/default/css/product/detail.css | 2 +- .../cartridge/static/default/css/search.css | 2 +- .../static/default/css/skin/skin.css | 1 + .../static/default/css/storeLocator.css | 2 +- .../static/default/images/close-icon.svg | 1 + .../static/default/images/contact-us.jpg | Bin 0 -> 2149353 bytes .../static/default/js/addressBook.js | 2 +- .../static/default/js/campaignBanner.js | 1 + .../cartridge/static/default/js/carousel.js | 1 + .../cartridge/static/default/js/cart.js | 2 +- .../cartridge/static/default/js/checkout.js | 2 +- .../static/default/js/checkoutRegistration.js | 2 +- .../cartridge/static/default/js/contactUs.js | 1 + .../static/default/js/einsteinCarousel.js | 1 + .../cartridge/static/default/js/login.js | 2 +- .../cartridge/static/default/js/main.js | 32 +- .../static/default/js/mobileGridLookBook.js | 1 + .../static/default/js/orderHistory.js | 2 +- .../static/default/js/paymentInstruments.js | 2 +- .../static/default/js/productDetail.js | 2 +- .../static/default/js/productTile.js | 2 +- .../cartridge/static/default/js/profile.js | 2 +- .../cartridge/static/default/js/search.js | 2 +- .../static/default/js/storeLocator.js | 2 +- .../cartridge/static/default/js/util.js | 2 +- .../static/fr_FR/css/account/addressBook.css | 2 +- .../static/it_IT/css/account/addressBook.css | 2 +- .../default/account/addressBook.isml | 13 +- .../default/account/addressBookCard.isml | 6 +- .../default/account/components/loginForm.isml | 8 +- .../default/account/components/navTabs.isml | 10 +- .../default/account/components/oauth.isml | 4 +- .../account/components/registerForm.isml | 40 +- .../account/components/trackOrderForm.isml | 10 +- .../trackOrderFormBillingZipCode.isml | 5 +- .../default/account/deleteAddressModal.isml | 6 +- .../default/account/editAddAddress.isml | 2 +- .../default/account/editProfileForm.isml | 11 +- .../templates/default/account/header.isml | 16 +- .../templates/default/account/login.isml | 4 +- .../default/account/mobileHeader.isml | 3 + .../default/account/order/history.isml | 6 +- .../account/order/orderHistoryCard.isml | 8 +- .../default/account/order/orderList.isml | 2 +- .../default/account/orderDetails.isml | 2 +- .../templates/default/account/password.isml | 2 +- .../account/password/newPasswordForm.isml | 12 +- .../account/password/newPasswordRedirect.isml | 8 + .../password/passwordChangedEmail.isml | 12 +- .../account/password/passwordResetEmail.isml | 18 +- .../account/password/passwordResetForm.isml | 2 +- .../password/requestPasswordResetModal.isml | 2 +- .../default/account/passwordCard.isml | 4 +- .../default/account/payment/addPayment.isml | 30 + .../account/payment/deletePaymentModal.isml | 6 +- .../default/account/payment/payment.isml | 52 +- .../default/account/payment/paymentForm.isml | 41 +- .../default/account/payment/savedPayment.isml | 3 + .../account/payment/savedPayments.isml | 31 + .../default/account/paymentCard.isml | 21 +- .../templates/default/account/profile.isml | 2 +- .../default/account/profileCard.isml | 4 +- .../templates/default/cart/cart.isml | 12 +- .../default/cart/cartApproachingDiscount.isml | 14 +- .../default/cart/cartCouponDisplay.isml | 9 +- .../templates/default/cart/cartPromoCode.isml | 6 +- .../default/cart/cartRemoveCouponModal.isml | 2 +- .../default/cart/cartRemoveProductModal.isml | 2 +- .../cart/cartShippingMethodSelection.isml | 4 +- .../default/cart/checkoutButtons.isml | 9 +- .../cart/productCard/cartBundleCard.isml | 6 + .../cartEmbeddedBonusProducts.isml | 2 +- .../cartNestedBonusProductCard.isml | 2 +- .../cart/productCard/cartProductCard.isml | 6 + .../cart/productCard/cartProductCardEdit.isml | 7 +- .../productCard/cartProductCardHeader.isml | 21 +- .../cartProductCardProductPrice.isml | 4 +- .../productCard/cartProductCardServer.isml | 15 + .../uncategorizedCartProductCard.isml | 33 + .../default/checkout/addressSummary.isml | 46 +- .../checkout/billing/addressSelector.isml | 3 +- .../default/checkout/billing/billing.isml | 76 +- .../checkout/billing/billingSummary.isml | 14 +- .../checkout/billing/creditCardForm.isml | 69 +- .../paymentOptions/creditCardContent.isml | 48 +- .../billing/storedPaymentInstruments.isml | 17 +- .../default/checkout/cart/miniCart.isml | 11 +- .../templates/default/checkout/checkout.isml | 34 +- .../default/checkout/checkoutLogin.isml | 6 +- .../confirmation/accountRegisteredEmail.isml | 10 +- .../checkout/confirmation/confirmation.isml | 14 +- .../confirmationCreateAccount.isml | 26 +- .../confirmationCreateAccountExtension.isml | 3 + .../confirmation/confirmationDetails.isml | 2 +- .../confirmation/confirmationEmail.isml | 19 +- .../confirmation/confirmationPaymentInfo.isml | 17 + .../default/checkout/customer/customer.isml | 14 + .../checkout/customer/customerCard.isml | 69 ++ .../checkout/customer/customerOAuthCard.isml | 18 + .../checkout/customer/customerSummary.isml | 8 + .../productCard/embeddedBonusProduct.isml | 2 +- .../checkout/productCard/productCard.isml | 8 +- .../productCardProductNameAndRemove.isml | 3 +- .../productCardProductPromotions.isml | 4 +- .../productCardQuantitySelector.isml | 7 +- .../productCard/productShippingCard.isml | 9 +- .../productCard/uncategorizedProductCard.isml | 34 + .../default/checkout/shipping/isGift.isml | 4 +- .../shipping/selectedShippingMethod.isml | 11 +- .../checkout/shipping/shipmentCard.isml | 2 +- .../checkout/shipping/shipmentSelector.isml | 10 +- .../default/checkout/shipping/shipping.isml | 12 +- .../checkout/shipping/shippingAddress.isml | 66 +- .../shipping/shippingAddressTemplate.isml | 6 +- .../checkout/shipping/shippingCard.isml | 6 +- .../checkout/shipping/shippingMethod.isml | 8 +- .../checkout/shipping/shippingSummary.isml | 2 +- .../templates/default/common/consent.isml | 10 +- .../templates/default/common/htmlHead.isml | 24 +- .../default/common/layout/checkout.isml | 17 +- .../templates/default/common/layout/page.isml | 14 +- .../default/common/layout/pdStorePage.isml | 56 ++ .../templates/default/common/scripts.isml | 5 +- .../breadcrumbs/pageBreadcrumbs.isml | 16 +- .../components/content/contentAssetInc.isml | 10 +- .../default/components/deleteButton.isml | 8 + .../default/components/footer/pageFooter.isml | 6 +- .../components/header/countrySelector.isml | 4 +- .../default/components/header/menu.isml | 18 +- .../default/components/header/menuItem.isml | 10 +- .../default/components/header/miniCart.isml | 2 +- .../header/mobileCountrySelector.isml | 4 +- .../default/components/header/pageHeader.isml | 26 +- .../components/header/pageHeaderNomenu.isml | 23 +- .../components/header/pdStorePageHeader.isml | 50 ++ .../default/components/header/search.isml | 25 +- .../default/components/header/skipNav.isml | 2 + .../templates/default/components/modules.isml | 4 +- .../default/components/products.isml | 2 +- .../templates/default/components/schema.isml | 5 + .../templates/default/components/skin.isml | 5 + .../default/contactUs/contactUs.isml | 108 +++ .../default/content/contentAsset.isml | 15 +- .../commerce_assets/campaignBanner.isml | 15 + .../components/commerce_assets/category.isml | 36 + .../commerce_assets/categoryBanner.isml | 5 + .../commerce_assets/editorialRichText.isml | 11 + .../commerce_assets/imageAndText.isml | 43 + .../commerce_assets/mainBanner.isml | 39 + .../components/commerce_assets/photoTile.isml | 23 + .../commerce_assets/popularCategory.isml | 54 ++ .../product/pricing/default.isml | 37 + .../commerce_assets/product/pricing/main.isml | 10 + .../product/pricing/range.isml | 11 + .../commerce_assets/product/productTile.isml | 50 ++ .../product/productTileRatings.isml | 20 + .../product/productTileSwatch.isml | 35 + .../product/productTileWrapper.isml | 9 + .../product/remoteProductTile.isml | 6 + .../commerce_assets/productListTile.isml | 43 + .../commerce_assets/shopTheLook.isml | 34 + .../shopTheLook/imageFile.isml | 6 + .../shopTheLook/remoteShopTheLook.isml | 8 + .../shopTheLook/titleAndPrice.isml | 29 + .../components/commerce_layouts/carousel.isml | 46 ++ .../commerce_layouts/mobileGrid1r1c.isml | 10 + .../commerce_layouts/mobileGrid2r1c.isml | 11 + .../commerce_layouts/mobileGrid2r2c.isml | 13 + .../commerce_layouts/mobileGrid2r3c.isml | 15 + .../commerce_layouts/mobileGrid3r1c.isml | 12 + .../commerce_layouts/mobileGrid3r2c.isml | 15 + .../commerce_layouts/mobileGridLookBook.isml | 35 + .../commerce_layouts/popularCategories.isml | 17 + .../dynamic/product/bundleDetails.isml | 93 +++ .../dynamic/product/productDetails.isml | 144 ++++ .../dynamic/product/setDetails.isml | 51 ++ .../dynamic/productList/productGrid.isml | 25 + .../dynamic/productList/productList.isml | 62 ++ .../dynamic/productList/productTiles.isml | 13 + .../components/einstein/einsteinCarousel.isml | 67 ++ .../default/experience/pages/storePage.isml | 16 + .../experience/pages/threeRowStorePage.isml | 15 + .../templates/default/home/homePage.isml | 6 +- .../default/product/bundleDetails.isml | 43 +- .../components/addToCartButtonExtension.isml | 3 + .../product/components/addToCartGlobal.isml | 2 +- .../product/components/addToCartProduct.isml | 11 +- .../product/components/attributes.isml | 15 +- .../product/components/attributesPre.isml | 1 + .../product/components/availability.isml | 37 +- .../availabilityBundleContainer.isml | 4 +- .../product/components/bundleItem.isml | 59 +- .../product/components/bundleItems.isml | 2 +- .../choiceOfBonusProducts/bonusProducts.isml | 132 +-- .../bonusProductsQuantity.isml | 6 +- .../chooseBonusProduct.isml | 6 +- .../variationAttributeBonusProducts.isml | 29 +- .../product/components/description.isml | 2 +- .../components/descriptionAndDetails.isml | 26 +- .../default/product/components/details.isml | 2 +- .../product/components/imageCarousel.isml | 40 +- .../product/components/mainAttributes.isml | 30 +- .../default/product/components/options.isml | 26 +- .../default/product/components/pidRating.isml | 3 +- .../product/components/pricing/default.isml | 24 +- .../product/components/pricing/main.isml | 4 +- .../components/productAvailability.isml | 2 +- .../product/components/productNumber.isml | 2 +- .../product/components/productTileImage.isml | 9 +- .../product/components/productTileName.isml | 4 +- .../product/components/productTileSwatch.isml | 4 +- .../product/components/promotions.isml | 17 +- .../default/product/components/quantity.isml | 4 +- .../product/components/quantityStatic.isml | 4 +- .../default/product/components/ratings.isml | 2 +- .../default/product/components/setItems.isml | 149 ++-- .../product/components/socialIcons.isml | 37 +- .../product/components/updateCartProduct.isml | 4 +- .../components/variationAttribute.isml | 31 +- .../default/product/productDetails.isml | 120 +-- .../default/product/productTile.isml | 2 +- .../default/product/productTileFooter.isml | 1 + .../templates/default/product/quickView.isml | 45 +- .../templates/default/search/contentGrid.isml | 20 +- .../templates/default/search/filterBar.isml | 19 +- .../default/search/noResultsContent.isml | 2 +- .../default/search/noResultsProduct.isml | 2 +- .../templates/default/search/productGrid.isml | 2 +- .../refinements/attributes/boolean.isml | 22 +- .../search/refinements/attributes/color.isml | 16 +- .../search/refinements/attributes/size.isml | 18 +- .../search/refinements/categories.isml | 10 +- .../default/search/refinements/prices.isml | 14 +- .../default/search/resultsCount.isml | 72 +- .../default/search/searchRefineBar.isml | 18 +- .../search/searchResultsNoDecorator.isml | 60 +- .../default/search/sortOrderMenu.isml | 2 +- .../templates/default/search/suggestions.isml | 168 ++-- .../default/slots/category/categoryTile.isml | 12 +- .../slots/content/contentAssetBody.isml | 6 +- .../default/slots/htmlSlotContainer.isml | 10 +- .../slots/recommendation/completeTheSet.isml | 13 + .../storeLocator/storeLocatorFields.isml | 4 +- .../storeLocator/storeLocatorNoDecorator.isml | 2 +- .../templates/en_GB/account/addressBook.isml | 11 +- .../en_GB/account/addressBookCard.isml | 4 +- .../trackOrderFormBillingZipCode.isml | 5 +- .../checkout/billing/addressSelector.isml | 5 +- .../checkout/shipping/shippingAddress.isml | 72 +- .../shipping/shippingAddressTemplate.isml | 6 +- .../templates/fr_FR/account/addressBook.isml | 11 +- .../fr_FR/account/addressBookCard.isml | 4 +- .../trackOrderFormBillingZipCode.isml | 5 +- .../checkout/billing/addressSelector.isml | 5 +- .../checkout/shipping/shippingAddress.isml | 60 +- .../templates/it_IT/account/addressBook.isml | 11 +- .../it_IT/account/addressBookCard.isml | 4 +- .../trackOrderFormBillingZipCode.isml | 5 +- .../checkout/billing/addressSelector.isml | 5 +- .../checkout/shipping/shippingAddress.isml | 66 +- .../templates/ja_JP/account/addressBook.isml | 11 +- .../ja_JP/account/addressBookCard.isml | 4 +- .../trackOrderFormBillingZipCode.isml | 5 +- .../templates/ja_JP/account/profileCard.isml | 2 +- .../checkout/billing/addressSelector.isml | 5 +- .../checkout/shipping/shippingAddress.isml | 66 +- .../templates/resources/account.properties | 14 + .../templates/resources/address.properties | 2 + .../resources/campaignBanner.properties | 1 + .../templates/resources/cart.properties | 6 + .../templates/resources/cart_ja_JP.properties | 2 +- .../templates/resources/checkout.properties | 11 + .../templates/resources/common.properties | 18 +- .../resources/confirmation.properties | 2 + .../resources/confirmation_ja_JP.properties | 2 +- .../templates/resources/contactUs.properties | 15 + .../templates/resources/creditCard.properties | 1 - .../templates/resources/error.properties | 2 + .../templates/resources/forms.properties | 24 +- .../resources/forms_ja_JP.properties | 2 +- .../templates/resources/homePage.properties | 2 + .../resources/mobileGridLookBook.properties | 1 + .../resources/pageDesigner.properties | 11 + .../templates/resources/payment.properties | 7 +- .../templates/resources/pricing.properties | 2 + .../templates/resources/product.properties | 16 +- .../resources/productTile.properties | 2 + .../templates/resources/search.properties | 10 +- .../resources/search_zh_CN.properties | 4 +- .../templates/resources/version.properties | 2 +- .../templates/zh_CN/account/addressBook.isml | 11 +- .../zh_CN/account/addressBookCard.isml | 4 +- .../trackOrderFormBillingZipCode.isml | 4 +- .../checkout/billing/addressSelector.isml | 5 +- .../checkout/shipping/shippingAddress.isml | 63 +- .../cartridges/app_storefront_base/hooks.json | 12 + .../bm_app_storefront_base/.project | 17 + .../bm_app_storefront_base/.tern-project | 14 + .../bm_app_storefront_base.properties | 4 + .../editors/custom/tileDisplayFormat.js | 8 + .../editors/custom/tileDisplayFormat.json | 12 + .../einstein/categoryrecommenderselector.js | 16 + .../einstein/categoryrecommenderselector.json | 12 + .../einstein/globalrecommenderselector.js | 16 + .../einstein/globalrecommenderselector.json | 12 + .../einstein/productrecommenderselector.js | 16 + .../einstein/productrecommenderselector.json | 12 + .../experience/editors/themer/colorpicker.js | 6 + .../editors/themer/colorpicker.json | 12 + .../commerce_assets/campaignBanner.svg | 43 + .../components/commerce_assets/category.svg | 43 + .../commerce_assets/editorialRichText.svg | 43 + .../commerce_assets/imageAndText.svg | 43 + .../components/commerce_assets/mainBanner.svg | 43 + .../components/commerce_assets/photoTile.svg | 43 + .../commerce_assets/popularCategory.svg | 23 + .../commerce_assets/productListTile.svg | 23 + .../commerce_assets/productTile.svg | 23 + .../commerce_assets/shopTheLook.svg | 23 + .../components/commerce_layouts/carousel.svg | 10 + .../commerce_layouts/mobileGrid1r1c.svg | 10 + .../commerce_layouts/mobileGrid2r1c.svg | 10 + .../commerce_layouts/mobileGrid2r2c.svg | 10 + .../commerce_layouts/mobileGrid2r3c.svg | 10 + .../commerce_layouts/mobileGrid3r1c.svg | 10 + .../commerce_layouts/mobileGrid3r2c.svg | 10 + .../commerce_layouts/mobileGridLookBook.svg | 10 + .../commerce_layouts/popularCategories.svg | 10 + .../dynamic/dynamicCategoryBanner.svg | 43 + .../components/dynamic/productDetail.svg | 10 + .../components/dynamic/productList.svg | 10 + .../components/einstein/einsteinCarousel.svg | 24 + .../einstein/einsteinCarouselCategory.svg | 24 + .../einstein/einsteinCarouselProduct.svg | 24 + .../experience/editors/displayFormats.js | 60 ++ .../editors/einstein/recommenderselector.js | 128 +++ .../experience/editors/themer/colorpicker.js | 333 ++++++++ .../commerce_assets.properties | 1 + .../commerce_layouts.properties | 1 + .../componentgroups/dynamic.properties | 1 + .../componentgroups/einstein.properties | 1 + .../commerce_assets/campaignBanner.properties | 6 + .../commerce_assets/category.properties | 66 ++ .../editorialRichText.properties | 6 + .../commerce_assets/imageAndText.properties | 6 + .../commerce_assets/mainBanner.properties | 11 + .../commerce_assets/photoTile.properties | 6 + .../popularCategory.properties | 13 + .../productListTile.properties | 2 + .../commerce_assets/productTile.properties | 8 + .../commerce_assets/shopTheLook.properties | 8 + .../commerce_layouts/carousel.properties | 20 + .../mobileGrid1r1c.properties | 2 + .../mobileGrid2r1c.properties | 2 + .../mobileGrid2r2c.properties | 2 + .../mobileGrid2r3c.properties | 2 + .../mobileGrid3r1c.properties | 2 + .../mobileGrid3r2c.properties | 2 + .../mobileGridLookBook.properties | 2 + .../popularCategories.properties | 5 + .../dynamic/dynamicCategoryBanner.properties | 2 + .../dynamic/productDetail.properties | 2 + .../components/dynamic/productList.properties | 2 + .../einstein/einsteinCarousel.properties | 31 + .../einsteinCarouselCategory.properties | 33 + .../einsteinCarouselProduct.properties | 33 + .../experience/pages/productDetail.properties | 2 + .../experience/pages/productList.properties | 2 + .../experience/pages/storePage.properties | 3 + sfra/cartridges/modules/server/README.md | 64 +- .../modules/server/forms/formField.js | 9 +- sfra/cartridges/modules/server/forms/forms.js | 20 +- sfra/cartridges/modules/server/queryString.js | 47 +- sfra/cartridges/modules/server/render.js | 22 +- sfra/cartridges/modules/server/request.js | 24 +- sfra/cartridges/modules/server/response.js | 17 +- sfra/cartridges/modules/server/route.js | 8 +- sfra/cartridges/modules/server/server.js | 6 + 672 files changed, 17366 insertions(+), 3040 deletions(-) create mode 100644 .gitignore create mode 100644 link/.gitignore create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/js/campaignBanner.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/js/carousel.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/js/checkout/customer.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/js/components/focus.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/js/components/scrollAnimate.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/js/components/toolTip.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/js/contactUs.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/js/contactUs/contactUs.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/js/einsteinCarousel.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/js/mobileGridLookBook.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/scss/contactUs.scss create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/scss/experience/carousel/_carouselMixins.scss create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/scss/experience/carousel/_extraSmallCarousel.scss create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/scss/experience/carousel/_mediumCarousel.scss create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/scss/experience/carousel/_smallCarousel.scss create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/scss/experience/components/commerceAssets/campaignBanner.scss create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/scss/experience/components/commerceAssets/category.scss create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/scss/experience/components/commerceAssets/imageAndTextCommon.scss create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/scss/experience/components/commerceAssets/photoTile.scss create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/scss/experience/components/commerceAssets/popularCategory.scss create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/scss/experience/components/commerceAssets/productTile.scss create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/scss/experience/components/commerceAssets/shopTheLook.scss create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/scss/experience/components/commerceLayouts/carousel.scss create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/scss/experience/components/commerceLayouts/layout.scss create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/scss/experience/components/commerceLayouts/mobileGridLookBook.scss create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/scss/experience/components/commerceLayouts/productList.scss create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/scss/experience/components/einstein/einsteinCarousel.scss create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/scss/experience/experienceGlobal.scss create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/scss/experience/storePage.scss create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/scss/experience/variables.scss create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/scss/skin/_skinVariables.scss create mode 100644 sfra/cartridges/app_storefront_base/cartridge/client/default/scss/skin/skin.scss create mode 100644 sfra/cartridges/app_storefront_base/cartridge/config/httpHeadersConf.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/config/preferences.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/controllers/ContactUs.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/controllers/EinsteinCarousel.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/controllers/EmailSubscribe.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/controllers/Link.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/controllers/PageDesigner.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/controllers/SourceCodeRedirect.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/aspects/pdp.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/aspects/plp.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/breakpoints.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_assets/campaignBanner.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_assets/campaignBanner.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_assets/category.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_assets/category.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_assets/editorialRichText.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_assets/editorialRichText.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_assets/imageAndText.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_assets/imageAndText.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_assets/mainBanner.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_assets/mainBanner.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_assets/photoTile.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_assets/photoTile.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_assets/popularCategory.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_assets/popularCategory.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_assets/productListTile.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_assets/productListTile.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_assets/productTile.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_assets/productTile.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_assets/shopTheLook.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_assets/shopTheLook.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_layouts/carousel.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_layouts/carousel.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_layouts/mobileGrid1r1c.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_layouts/mobileGrid1r1c.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_layouts/mobileGrid2r1c.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_layouts/mobileGrid2r1c.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_layouts/mobileGrid2r2c.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_layouts/mobileGrid2r2c.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_layouts/mobileGrid2r3c.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_layouts/mobileGrid2r3c.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_layouts/mobileGrid3r1c.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_layouts/mobileGrid3r1c.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_layouts/mobileGrid3r2c.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_layouts/mobileGrid3r2c.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_layouts/mobileGridLookBook.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_layouts/mobileGridLookBook.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_layouts/popularCategories.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/commerce_layouts/popularCategories.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/dynamic/dynamicCategoryBanner.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/dynamic/dynamicCategoryBanner.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/dynamic/productDetail.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/dynamic/productDetail.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/dynamic/productList.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/dynamic/productList.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/einstein/einsteinCarousel.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/einstein/einsteinCarousel.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/einstein/einsteinCarouselCategory.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/einstein/einsteinCarouselCategory.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/einstein/einsteinCarouselProduct.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/components/einstein/einsteinCarouselProduct.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/hooks.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/pages/productDetail.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/pages/productDetail.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/pages/productList.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/pages/productList.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/pages/storePage.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/pages/storePage.json create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/utilities/ImageTransformation.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/utilities/PageRenderHelper.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/utilities/RegionModel.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/experience/utilities/RegionModelRegistry.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/forms/default/coCustomer.xml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/forms/default/coRegisteredCustomer.xml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/forms/default/contactInfo.xml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/models/product/decorators/setProductsCollection.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/models/search/attributeRefinementValue/promotion.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/scripts/account/accountHelpers.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/scripts/experience/utilities/carouselBuilder.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/scripts/helpers/addressHelpers.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/scripts/helpers/structuredDataHelper.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/scripts/hooks/payment/processor/basic_credit_form_processor.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/scripts/hooks/payment/processor/default_form_processor.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/scripts/hooks/postAuthorizationHandling.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/scripts/theming/skin.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/css/contactUs.css create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/css/experience/components/commerceAssets/campaignBanner.css create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/css/experience/components/commerceAssets/category.css create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/css/experience/components/commerceAssets/imageAndTextCommon.css create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/css/experience/components/commerceAssets/photoTile.css create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/css/experience/components/commerceAssets/popularCategory.css create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/css/experience/components/commerceAssets/productTile.css create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/css/experience/components/commerceAssets/shopTheLook.css create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/css/experience/components/commerceLayouts/carousel.css create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/css/experience/components/commerceLayouts/layout.css create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/css/experience/components/commerceLayouts/mobileGridLookBook.css create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/css/experience/components/commerceLayouts/productList.css create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/css/experience/components/einstein/einsteinCarousel.css create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/css/experience/experienceGlobal.css create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/css/experience/storePage.css create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/css/experience/variables.css create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/css/skin/skin.css create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/images/close-icon.svg create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/images/contact-us.jpg create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/js/campaignBanner.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/js/carousel.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/js/contactUs.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/js/einsteinCarousel.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/static/default/js/mobileGridLookBook.js create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/account/password/newPasswordRedirect.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/account/payment/addPayment.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/account/payment/savedPayment.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/account/payment/savedPayments.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/cart/productCard/cartProductCardServer.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/cart/productCard/uncategorizedCartProductCard.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/checkout/confirmation/confirmationCreateAccountExtension.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/checkout/confirmation/confirmationPaymentInfo.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/checkout/customer/customer.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/checkout/customer/customerCard.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/checkout/customer/customerOAuthCard.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/checkout/customer/customerSummary.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/checkout/productCard/uncategorizedProductCard.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/common/layout/pdStorePage.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/components/deleteButton.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/components/header/pdStorePageHeader.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/components/header/skipNav.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/components/schema.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/components/skin.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/contactUs/contactUs.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_assets/campaignBanner.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_assets/category.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_assets/categoryBanner.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_assets/editorialRichText.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_assets/imageAndText.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_assets/mainBanner.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_assets/photoTile.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_assets/popularCategory.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_assets/product/pricing/default.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_assets/product/pricing/main.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_assets/product/pricing/range.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_assets/product/productTile.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_assets/product/productTileRatings.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_assets/product/productTileSwatch.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_assets/product/productTileWrapper.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_assets/product/remoteProductTile.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_assets/productListTile.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_assets/shopTheLook.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_assets/shopTheLook/imageFile.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_assets/shopTheLook/remoteShopTheLook.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_assets/shopTheLook/titleAndPrice.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_layouts/carousel.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_layouts/mobileGrid1r1c.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_layouts/mobileGrid2r1c.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_layouts/mobileGrid2r2c.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_layouts/mobileGrid2r3c.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_layouts/mobileGrid3r1c.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_layouts/mobileGrid3r2c.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_layouts/mobileGridLookBook.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/commerce_layouts/popularCategories.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/dynamic/product/bundleDetails.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/dynamic/product/productDetails.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/dynamic/product/setDetails.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/dynamic/productList/productGrid.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/dynamic/productList/productList.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/dynamic/productList/productTiles.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/components/einstein/einsteinCarousel.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/pages/storePage.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/experience/pages/threeRowStorePage.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/product/components/addToCartButtonExtension.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/default/slots/recommendation/completeTheSet.isml create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/resources/campaignBanner.properties create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/resources/contactUs.properties create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/resources/mobileGridLookBook.properties create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/resources/pageDesigner.properties create mode 100644 sfra/cartridges/app_storefront_base/cartridge/templates/resources/productTile.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/.project create mode 100644 sfra/cartridges/bm_app_storefront_base/.tern-project create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/bm_app_storefront_base.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/experience/editors/custom/tileDisplayFormat.js create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/experience/editors/custom/tileDisplayFormat.json create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/experience/editors/einstein/categoryrecommenderselector.js create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/experience/editors/einstein/categoryrecommenderselector.json create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/experience/editors/einstein/globalrecommenderselector.js create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/experience/editors/einstein/globalrecommenderselector.json create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/experience/editors/einstein/productrecommenderselector.js create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/experience/editors/einstein/productrecommenderselector.json create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/experience/editors/themer/colorpicker.js create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/experience/editors/themer/colorpicker.json create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/commerce_assets/campaignBanner.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/commerce_assets/category.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/commerce_assets/editorialRichText.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/commerce_assets/imageAndText.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/commerce_assets/mainBanner.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/commerce_assets/photoTile.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/commerce_assets/popularCategory.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/commerce_assets/productListTile.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/commerce_assets/productTile.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/commerce_assets/shopTheLook.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/commerce_layouts/carousel.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/commerce_layouts/mobileGrid1r1c.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/commerce_layouts/mobileGrid2r1c.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/commerce_layouts/mobileGrid2r2c.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/commerce_layouts/mobileGrid2r3c.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/commerce_layouts/mobileGrid3r1c.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/commerce_layouts/mobileGrid3r2c.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/commerce_layouts/mobileGridLookBook.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/commerce_layouts/popularCategories.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/dynamic/dynamicCategoryBanner.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/dynamic/productDetail.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/dynamic/productList.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/einstein/einsteinCarousel.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/einstein/einsteinCarouselCategory.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/components/einstein/einsteinCarouselProduct.svg create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/editors/displayFormats.js create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/editors/einstein/recommenderselector.js create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/static/default/experience/editors/themer/colorpicker.js create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/componentgroups/commerce_assets.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/componentgroups/commerce_layouts.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/componentgroups/dynamic.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/componentgroups/einstein.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/commerce_assets/campaignBanner.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/commerce_assets/category.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/commerce_assets/editorialRichText.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/commerce_assets/imageAndText.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/commerce_assets/mainBanner.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/commerce_assets/photoTile.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/commerce_assets/popularCategory.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/commerce_assets/productListTile.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/commerce_assets/productTile.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/commerce_assets/shopTheLook.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/commerce_layouts/carousel.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/commerce_layouts/mobileGrid1r1c.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/commerce_layouts/mobileGrid2r1c.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/commerce_layouts/mobileGrid2r2c.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/commerce_layouts/mobileGrid2r3c.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/commerce_layouts/mobileGrid3r1c.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/commerce_layouts/mobileGrid3r2c.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/commerce_layouts/mobileGridLookBook.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/commerce_layouts/popularCategories.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/dynamic/dynamicCategoryBanner.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/dynamic/productDetail.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/dynamic/productList.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/einstein/einsteinCarousel.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/einstein/einsteinCarouselCategory.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/components/einstein/einsteinCarouselProduct.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/pages/productDetail.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/pages/productList.properties create mode 100644 sfra/cartridges/bm_app_storefront_base/cartridge/templates/resources/experience/pages/storePage.properties diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..10bc6b3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,56 @@ +# These are some examples of commonly ignored file patterns. +# You should customize this list as applicable to your project. +# Learn more about .gitignore: +# https://www.atlassian.com/git/tutorials/saving-changes/gitignore + +# Node artifact files +node_modules/ +dist/ + +# Compiled Java class files +*.class + +# Compiled Python bytecode +*.py[cod] + +# Log files +*.log + +# Package files +*.jar + +# Maven +target/ +dist/ + +# JetBrains IDE +.idea/ + +# Unit test reports +TEST*.xml + +# Generated by MacOS +.DS_Store + +# Generated by Windows +Thumbs.db + +# Applications +*.app +*.exe +*.war + +# Large media files +*.mp4 +*.tiff +*.avi +*.flv +*.mov +*.wmv + +# DW CLI +/**/dw*.json + +#VS Code +*.code-workspace +.vscode diff --git a/link/.gitignore b/link/.gitignore new file mode 100644 index 0000000..22e6eaf --- /dev/null +++ b/link/.gitignore @@ -0,0 +1,71 @@ +# These are some examples of commonly ignored file patterns. +# You should customize this list as applicable to your project. +# Learn more about .gitignore: +# https://www.atlassian.com/git/tutorials/saving-changes/gitignore + +# Node artifact files +node_modules/ +dist/ + +# Compiled Java class files +*.class + +# Compiled Python bytecode +*.py[cod] + +# Log files +*.log + +# Package files +*.jar + +# Maven +target/ +dist/ + +# JetBrains IDE +.idea/ + +# Unit test reports +TEST*.xml + +# Generated by MacOS +.DS_Store + +# Generated by Windows +Thumbs.db + +# Applications +*.app +*.exe +*.war + +# Large media files +*.mp4 +*.tiff +*.avi +*.flv +*.mov +*.wmv + +# Metadata +/metadata/metadata/ +/metadata/*.zip + +# DW CLI +/**/dw*.json + +# SFRA + +/cartridges/int_cybersource_sfra/cartridge/static/*/css/ +/cartridges/int_cybersource_sfra/cartridge/static/*/js/ + +/cartridges/intermix_core/cartridge/static/*/js/ +/cartridges/intermix_core/cartridge/static/*/css/ +# Yeoman +/.yo-repository/ + +#VS Code +*.code-workspace +.vscode + diff --git a/link/cartridges/int_signifyd/cartridge/scripts/service/signifyd.js b/link/cartridges/int_signifyd/cartridge/scripts/service/signifyd.js index 8906131..699a6a7 100644 --- a/link/cartridges/int_signifyd/cartridge/scripts/service/signifyd.js +++ b/link/cartridges/int_signifyd/cartridge/scripts/service/signifyd.js @@ -359,6 +359,7 @@ function process(body) { if (body.checkpointAction) { if (body.checkpointAction.toUpperCase() === 'ACCEPT') { order.custom.SignifydPolicy = 'accept'; + order.setStatus(order.EXPORT_STATUS_READY); } else if (body.checkpointAction.toUpperCase() === 'REJECT') { order.custom.SignifydPolicy = 'reject'; } else { @@ -460,6 +461,7 @@ function setOrderSessionId(order, orderSessionId) { var SignifydCreateCasePolicy = dw.system.Site.getCurrent().getCustomPreferenceValue('SignifydCreateCasePolicy').value; var SignifydDecisionRequest = dw.system.Site.getCurrent().getCustomPreferenceValue('SignifydDecisionRequest').value; var SignifydPassiveMode = dw.system.Site.getCurrent().getCustomPreferenceValue('SignifydPassiveMode'); + var SignifydSCAEnableSCAEvaluation = dw.system.Site.getCurrent().getCustomPreferenceValue('SignifydSCAEnableSCAEvaluation'); var orderCreationCal = new Calendar(order.creationDate); var paramsObj = { device: { @@ -489,6 +491,9 @@ function setOrderSessionId(order, orderSessionId) { if (SignifydCreateCasePolicy === "PRE_AUTH") { paramsObj.checkoutId = order.getUUID(); + if (SignifydSCAEnableSCAEvaluation && checkSCAPaymentMethod(order)) { + paramsObj.additionalEvalRequests = ["SCA_EVALUATION"]; + } } if (SignifydPassiveMode) { @@ -567,7 +572,11 @@ function getSendTransactionParams(order) { verifications: { avsResponseCode: '', // to be updated by the merchant cvvResponseCode: '', // to be updated by the merchant - } + }, + acquirerDetails: '', // to be updated by the merchant if using SCA + threeDsResult: '', // to be updated by the merchant if using SCA + // uncomment line below if using SCA + // scaExemptionRequested: order.custom.SignifydExemption }], }; @@ -625,6 +634,21 @@ function checkPaymentMethodExclusion(order) { return !result; } +function checkSCAPaymentMethod(order) { + var signifydSCAPaymentMethods = Site.getCurrent().getCustomPreferenceValue('SignifydSCAPaymentMethods'); + var signifydSCAPaymentMethodsArray = signifydSCAPaymentMethods ? signifydSCAPaymentMethods : ""; + var paymentInstruments = order.getPaymentInstruments(); + var result; + + var iterator = paymentInstruments.iterator(); + while(iterator.hasNext()) { + var paymentInstrument = iterator.next(); + result = signifydSCAPaymentMethodsArray.indexOf(paymentInstrument.paymentMethod) > -1; + } + + return result; +} + // eslint-disable-next-line valid-jsdoc /** * Send Signifyd order info and @@ -709,6 +733,17 @@ exports.Call = function (order) { order.custom.SignifydPolicy = answer.decision.checkpointAction; order.custom.SignifydPolicyName = answer.decision.checkpointActionReason; + if (!empty(answer.scaEvaluation)) { + if (!empty(answer.scaEvaluation.outcome)) { + order.custom.SignifydSCAOutcome = answer.scaEvaluation.outcome; + } + if (!empty(answer.scaEvaluation.exemptionDetails)) { + order.custom.SignifydExemption = answer.scaEvaluation.exemptionDetails.exemption; + } + if (!empty(answer.scaEvaluation.exemptionDetails)) { + order.custom.SignifydPlacement = answer.scaEvaluation.exemptionDetails.placement; + } + } } }); diff --git a/link/metadata/meta/system-objecttype-extensions.xml b/link/metadata/meta/system-objecttype-extensions.xml index b280f83..df9bd81 100644 --- a/link/metadata/meta/system-objecttype-extensions.xml +++ b/link/metadata/meta/system-objecttype-extensions.xml @@ -181,6 +181,22 @@ false false + + Signifyd Enable SCA + Enable or disable SCA payment methods + boolean + false + false + false + + + Signifyd SCA Payment Methods + Payment methods IDs, found in: Merchant Tools > Ordering > Payment Methods. + Informing a payment method ID is required if SignifydSCAEnableSCAEvaluation is set to "Yes" + set-of-string + false + false + @@ -190,6 +206,8 @@ + + diff --git a/link/metadata/services.xml b/link/metadata/services.xml index b37e37f..3b4cb85 100644 --- a/link/metadata/services.xml +++ b/link/metadata/services.xml @@ -24,12 +24,6 @@ mWwXvPZDOsusirJxaBwr6dmbUhxzBd8QbVMoCydX5hk= - - https://api.signifyd.com/v2/fulfillments/orderId - signifyd - HjKFxSvEfXB4f/Capj3AHW77ilzFpkWJPV0QbGYrQig= - - 1000 false @@ -84,15 +78,4 @@ SignifydTransaction - - HTTPForm - true - - false - true - false - Signifyd Profile - signifyd.rest.send.fulfillment.development.cred - - diff --git a/sfra/cartridges/app_storefront_base/cartridge/app_storefront_base.properties b/sfra/cartridges/app_storefront_base/cartridge/app_storefront_base.properties index fb3d9ba..0d451b5 100644 --- a/sfra/cartridges/app_storefront_base/cartridge/app_storefront_base.properties +++ b/sfra/cartridges/app_storefront_base/cartridge/app_storefront_base.properties @@ -2,3 +2,4 @@ #Thu Jun 09 11:30:40 EDT 2016 demandware.cartridges.app_storefront_base.multipleLanguageStorefront=true demandware.cartridges.app_storefront_base.id=app_storefront_base +demandware.cartridges.app_storefront_base.version=6.1.0 diff --git a/sfra/cartridges/app_storefront_base/cartridge/client/default/js/campaignBanner.js b/sfra/cartridges/app_storefront_base/cartridge/client/default/js/campaignBanner.js new file mode 100644 index 0000000..733389b --- /dev/null +++ b/sfra/cartridges/app_storefront_base/cartridge/client/default/js/campaignBanner.js @@ -0,0 +1,17 @@ +'use strict'; + +$(document).ready(function () { + if (window.resetCampaignBannerSessionToken) { + window.sessionStorage.removeItem('hide_campaign_banner'); + } + + var campaignBannerStatus = window.sessionStorage.getItem('hide_campaign_banner'); + $('.campaign-banner .close').on('click', function () { + $('.campaign-banner').addClass('d-none'); + window.sessionStorage.setItem('hide_campaign_banner', '1'); + }); + + if (!campaignBannerStatus || campaignBannerStatus < 0) { + $('.campaign-banner').removeClass('d-none'); + } +}); diff --git a/sfra/cartridges/app_storefront_base/cartridge/client/default/js/carousel.js b/sfra/cartridges/app_storefront_base/cartridge/client/default/js/carousel.js new file mode 100644 index 0000000..c20b566 --- /dev/null +++ b/sfra/cartridges/app_storefront_base/cartridge/client/default/js/carousel.js @@ -0,0 +1,174 @@ +'use strict'; +var debounce = require('lodash/debounce'); + +/** + * Get display information related to screen size + * @param {jQuery} element - the current carousel that is being used + * @returns {Object} an object with display information + */ +function screenSize(element) { + var result = { + itemsToDisplay: null, + sufficientSlides: true + }; + var viewSize = $(window).width(); + var extraSmallDisplay = element.data('xs'); + var smallDisplay = element.data('sm'); + var mediumDisplay = element.data('md'); + var numberOfSlides = element.data('number-of-slides'); + + if (viewSize <= 575.98) { + result.itemsToDisplay = extraSmallDisplay; + } else if ((viewSize >= 576) && (viewSize <= 768.98)) { + result.itemsToDisplay = smallDisplay; + } else if (viewSize >= 769) { + result.itemsToDisplay = mediumDisplay; + } + + if (result.itemsToDisplay && numberOfSlides <= result.itemsToDisplay) { + result.sufficientSlides = false; + } + + return result; +} + +/** + * Makes the next element to be displayed next unreachable for screen readers and keyboard nav + * @param {jQuery} element - the current carousel that is being used + */ +function hiddenSlides(element) { + var carousel; + + if (element) { + carousel = element; + } else { + carousel = $('.experience-commerce_layouts-carousel .carousel, .experience-einstein-einsteinCarousel .carousel, .experience-einstein-einsteinCarouselCategory .carousel, .experience-einstein-einsteinCarouselProduct .carousel'); + } + + var screenSizeInfo = screenSize(carousel); + + var lastDisplayedElement; + var elementToBeDisplayed; + + switch (screenSizeInfo.itemsToDisplay) { + case 2: + lastDisplayedElement = carousel.find('.active.carousel-item + .carousel-item'); + elementToBeDisplayed = carousel.find('.active.carousel-item + .carousel-item + .carousel-item'); + break; + case 3: + lastDisplayedElement = carousel.find('.active.carousel-item + .carousel-item + .carousel-item'); + elementToBeDisplayed = carousel.find('.active.carousel-item + .carousel-item + .carousel-item + .carousel-item'); + break; + case 4: + lastDisplayedElement = carousel.find('.active.carousel-item + .carousel-item + .carousel-item + .carousel-item'); + elementToBeDisplayed = carousel.find('.active.carousel-item + .carousel-item + .carousel-item + .carousel-item + .carousel-item'); + break; + case 6: + lastDisplayedElement = carousel.find('.active.carousel-item + .carousel-item + .carousel-item + .carousel-item + .carousel-item + .carousel-item'); + elementToBeDisplayed = carousel.find('.active.carousel-item + .carousel-item + .carousel-item + .carousel-item + .carousel-item + .carousel-item + .carousel-item'); + break; + default: + break; + } + + carousel.find('.active.carousel-item').removeAttr('tabindex').removeAttr('aria-hidden'); + carousel.find('.active.carousel-item').find('a, button, details, input, textarea, select') + .removeAttr('tabindex') + .removeAttr('aria-hidden'); + + if (lastDisplayedElement) { + lastDisplayedElement.removeAttr('tabindex').removeAttr('aria-hidden'); + lastDisplayedElement.find('a, button, details, input, textarea, select') + .removeAttr('tabindex') + .removeAttr('aria-hidden'); + } + + if (elementToBeDisplayed) { + elementToBeDisplayed.attr('tabindex', -1).attr('aria-hidden', true); + elementToBeDisplayed.find('a, button, details, input, textarea, select') + .attr('tabindex', -1) + .attr('aria-hidden', true); + } +} + +$(document).ready(function () { + hiddenSlides(); + + $(window).on('resize', debounce(function () { + hiddenSlides(); + }, 500)); + + $('body').on('carousel:setup', function () { + hiddenSlides(); + }); + + $('.experience-commerce_layouts-carousel .carousel, .experience-einstein-einsteinCarousel .carousel, .experience-einstein-einsteinCarouselCategory .carousel, .experience-einstein-einsteinCarouselProduct .carousel').on('touchstart', function (touchStartEvent) { + var screenSizeInfo = screenSize($(this)); + + if (screenSizeInfo.sufficientSlides) { + var xClick = touchStartEvent.originalEvent.touches[0].pageX; + $(this).one('touchmove', function (touchMoveEvent) { + var xMove = touchMoveEvent.originalEvent.touches[0].pageX; + if (Math.floor(xClick - xMove) > 5) { + $(this).carousel('next'); + } else if (Math.floor(xClick - xMove) < -5) { + $(this).carousel('prev'); + } + }); + $('.experience-commerce_layouts-carousel .carousel, .experience-einstein-einsteinCarousel .carousel, .experience-einstein-einsteinCarouselCategory .carousel, .experience-einstein-einsteinCarouselProduct .carousel').on('touchend', function () { + $(this).off('touchmove'); + }); + } + }); + + $('.experience-commerce_layouts-carousel .carousel, .experience-einstein-einsteinCarousel .carousel, .experience-einstein-einsteinCarouselCategory .carousel, .experience-einstein-einsteinCarouselProduct .carousel').on('slide.bs.carousel', function (e) { + var activeCarouselPosition = $(e.relatedTarget).data('position'); + $(this).find('.pd-carousel-indicators .active').removeClass('active'); + $(this).find(".pd-carousel-indicators [data-position='" + activeCarouselPosition + "']").addClass('active'); + + var extraSmallDisplay = $(this).data('xs'); + var smallDisplay = $(this).data('sm'); + var mediumDisplay = $(this).data('md'); + + var arrayOfSlidesToDisplay = []; + + if (!$(this).hasClass('insufficient-xs-slides')) { + arrayOfSlidesToDisplay.push(extraSmallDisplay); + } + + if (!$(this).hasClass('insufficient-sm-slides')) { + arrayOfSlidesToDisplay.push(smallDisplay); + } + + if (!$(this).hasClass('insufficient-md-slides')) { + arrayOfSlidesToDisplay.push(mediumDisplay); + } + + var itemsToDisplay = Math.max.apply(Math, arrayOfSlidesToDisplay); + + var elementIndex = $(e.relatedTarget).index(); + var numberOfSlides = $('.carousel-item', this).length; + var carouselInner = $(this).find('.carousel-inner'); + var carouselItem; + + if (elementIndex >= numberOfSlides - (itemsToDisplay - 1)) { + var it = itemsToDisplay - (numberOfSlides - elementIndex); + for (var i = 0; i < it; i++) { + // append slides to end + if (e.direction === 'left') { + carouselItem = $('.carousel-item', this).eq(i); + + $(carouselItem).appendTo($(carouselInner)); + } else { + carouselItem = $('.carousel-item', this).eq(0); + + $(carouselItem).appendTo($(carouselInner)); + } + } + } + }); + + $('.experience-commerce_layouts-carousel .carousel, .experience-einstein-einsteinCarousel .carousel, .experience-einstein-einsteinCarouselCategory .carousel, .experience-einstein-einsteinCarouselProduct .carousel').on('slid.bs.carousel', function () { + hiddenSlides($(this)); + }); +}); diff --git a/sfra/cartridges/app_storefront_base/cartridge/client/default/js/cart/cart.js b/sfra/cartridges/app_storefront_base/cartridge/client/default/js/cart/cart.js index e9a33a5..7e1391f 100644 --- a/sfra/cartridges/app_storefront_base/cartridge/client/default/js/cart/cart.js +++ b/sfra/cartridges/app_storefront_base/cartridge/client/default/js/cart/cart.js @@ -1,6 +1,7 @@ 'use strict'; var base = require('../product/base'); +var focusHelper = require('../components/focus'); /** * appends params to a url @@ -41,6 +42,10 @@ function validateBasket(data) { ); $('.number-of-items').empty().append(data.resources.numberOfItems); $('.minicart-quantity').empty().append(data.numItems); + $('.minicart-link').attr({ + 'aria-label': data.resources.minicartCountOfItems, + title: data.resources.minicartCountOfItems + }); $('.minicart .popover').empty(); $('.minicart .popover').removeClass('show'); } @@ -62,7 +67,10 @@ function updateCartTotals(data) { $('.grand-total').empty().append(data.totals.grandTotal); $('.sub-total').empty().append(data.totals.subTotal); $('.minicart-quantity').empty().append(data.numItems); - + $('.minicart-link').attr({ + 'aria-label': data.resources.minicartCountOfItems, + title: data.resources.minicartCountOfItems + }); if (data.totals.orderLevelDiscountTotal.value > 0) { $('.order-discount').removeClass('hide-order-discount'); $('.order-discount-total').empty() @@ -80,7 +88,16 @@ function updateCartTotals(data) { } data.items.forEach(function (item) { - $('.item-' + item.UUID).empty().append(item.renderedPromotions); + if (data.totals.orderLevelDiscountTotal.value > 0) { + $('.coupons-and-promos').empty().append(data.totals.discountsHtml); + } + if (item.renderedPromotions) { + $('.item-' + item.UUID).empty().append(item.renderedPromotions); + } else { + $('.item-' + item.UUID).empty(); + } + $('.uuid-' + item.UUID + ' .unit-price').empty().append(item.renderedPrice); + $('.line-item-price-' + item.UUID + ' .unit-price').empty().append(item.renderedPrice); $('.item-total-' + item.UUID).empty().append(item.priceTotal.renderedPrice); }); } @@ -131,23 +148,25 @@ function updateAvailability(data, uuid) { } } - $('.availability-' + lineItem.UUID).empty(); + if (lineItem != null) { + $('.availability-' + lineItem.UUID).empty(); - if (lineItem.availability) { - if (lineItem.availability.messages) { - lineItem.availability.messages.forEach(function (message) { - messages += '

' + message + '

'; - }); - } + if (lineItem.availability) { + if (lineItem.availability.messages) { + lineItem.availability.messages.forEach(function (message) { + messages += '

' + message + '

'; + }); + } - if (lineItem.availability.inStockDate) { - messages += '

' - + lineItem.availability.inStockDate - + '

'; + if (lineItem.availability.inStockDate) { + messages += '

' + + lineItem.availability.inStockDate + + '

'; + } } - } - $('.availability-' + lineItem.UUID).html(messages); + $('.availability-' + lineItem.UUID).html(messages); + } } /** @@ -156,7 +175,7 @@ function updateAvailability(data, uuid) { * @param {function} match - function that takes an element and returns a boolean indicating if the match is made * @returns {Object|null} - returns an element of the array that matched the query. */ -function findItem(array, match) { +function findItem(array, match) { // eslint-disable-line no-unused-vars for (var i = 0, l = array.length; i < l; i++) { if (match.call(this, array[i])) { return array[i]; @@ -171,52 +190,7 @@ function findItem(array, match) { * @param {string} uuid - The uuid of the product line item to update */ function updateProductDetails(data, uuid) { - var lineItem = findItem(data.cartModel.items, function (item) { - return item.UUID === uuid; - }); - - if (lineItem.variationAttributes) { - var colorAttr = findItem(lineItem.variationAttributes, function (attr) { - return attr.attributeId === 'color'; - }); - - if (colorAttr) { - var colorSelector = '.Color-' + uuid; - var newColor = 'Color: ' + colorAttr.displayValue; - $(colorSelector).text(newColor); - } - - var sizeAttr = findItem(lineItem.variationAttributes, function (attr) { - return attr.attributeId === 'size'; - }); - - if (sizeAttr) { - var sizeSelector = '.Size-' + uuid; - var newSize = 'Size: ' + sizeAttr.displayValue; - $(sizeSelector).text(newSize); - } - - var imageSelector = '.card.product-info.uuid-' + uuid + ' .item-image > img'; - $(imageSelector).attr('src', lineItem.images.small[0].url); - $(imageSelector).attr('alt', lineItem.images.small[0].alt); - $(imageSelector).attr('title', lineItem.images.small[0].title); - } - - var qtySelector = '.quantity[data-uuid="' + uuid + '"]'; - $(qtySelector).val(lineItem.quantity); - $(qtySelector).data('pid', data.newProductId); - - $('.remove-product[data-uuid="' + uuid + '"]').data('pid', data.newProductId); - - var priceSelector = '.line-item-price-' + uuid + ' .sales .value'; - $(priceSelector).text(lineItem.price.sales.formatted); - $(priceSelector).attr('content', lineItem.price.sales.decimalPrice); - - if (lineItem.price.list) { - var listPriceSelector = '.line-item-price-' + uuid + ' .list .value'; - $(listPriceSelector).text(lineItem.price.list.formatted); - $(listPriceSelector).attr('content', lineItem.price.list.decimalPrice); - } + $('.card.product-info.uuid-' + uuid).replaceWith(data.renderedTemplate); } /** @@ -228,13 +202,15 @@ function getModalHtmlElement() { $('#editProductModal').remove(); } var htmlString = '' - + '