workarea 3.4.16 → 3.4.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +81 -0
- metadata +10 -579
- data/docs/Gemfile +0 -8
- data/docs/Gemfile.lock +0 -130
- data/docs/bin/middleman +0 -29
- data/docs/config.rb +0 -87
- data/docs/config.ru +0 -7
- data/docs/data/articles.yml +0 -157
- data/docs/package.json +0 -15
- data/docs/source/404.html.erb +0 -13
- data/docs/source/articles/access-routes-in-javascript.html.md +0 -33
- data/docs/source/articles/add-a-content-area.html.md +0 -169
- data/docs/source/articles/add-a-content-block-type.html.md +0 -334
- data/docs/source/articles/add-a-report.html.md +0 -202
- data/docs/source/articles/add-css-through-the-admin-ui.html.md +0 -30
- data/docs/source/articles/add-javascript-through-a-manifest.html.md +0 -367
- data/docs/source/articles/add-javascript-through-a-view.html.md +0 -80
- data/docs/source/articles/add-javascript-through-the-admin-ui.html.md +0 -30
- data/docs/source/articles/add-metrics.html.md +0 -58
- data/docs/source/articles/add-or-replace-a-pricing-calculator.html.md +0 -150
- data/docs/source/articles/add-remove-or-change-a-mongoid-validation.html.md +0 -147
- data/docs/source/articles/add-remove-or-change-a-product-template.html.md +0 -142
- data/docs/source/articles/add-remove-sort-and-group-storefront-search-filters.html.md +0 -483
- data/docs/source/articles/add-stylesheets-through-a-manifest.html.md +0 -276
- data/docs/source/articles/add-system-content.html.md +0 -138
- data/docs/source/articles/analytics-overview.html.md +0 -51
- data/docs/source/articles/analyze-storefront-search-results.html.md +0 -261
- data/docs/source/articles/api-overview.html.md +0 -35
- data/docs/source/articles/appending.html.md +0 -506
- data/docs/source/articles/application-document.html.md +0 -88
- data/docs/source/articles/automated-javascript-testing.html.md +0 -162
- data/docs/source/articles/b2b-overview.html.md +0 -64
- data/docs/source/articles/browser-and-device-support.html.md +0 -47
- data/docs/source/articles/change-product-placeholder-image.html.md +0 -39
- data/docs/source/articles/change-storefront-search-results.html.md +0 -283
- data/docs/source/articles/change-the-storefront-product-pricing-ui.html.md +0 -348
- data/docs/source/articles/change-the-storefront-search-filters-ui.html.md +0 -103
- data/docs/source/articles/checkout.html.md +0 -479
- data/docs/source/articles/commerce-model.html.md +0 -164
- data/docs/source/articles/configuration-for-hosting.html.md +0 -106
- data/docs/source/articles/configuration.html.md +0 -406
- data/docs/source/articles/configure-a-payment-gateway.html.md +0 -58
- data/docs/source/articles/configure-asset-storage.html.md +0 -29
- data/docs/source/articles/configure-asset-types.html.md +0 -18
- data/docs/source/articles/configure-contact-form-subjects-list.html.md +0 -24
- data/docs/source/articles/configure-imageoptim.html.md +0 -23
- data/docs/source/articles/configure-locales.html.md +0 -45
- data/docs/source/articles/configure-logins-and-authentication.html.md +0 -42
- data/docs/source/articles/configure-low-inventory-threshold.html.md +0 -26
- data/docs/source/articles/configure-product-image-sizes-and-processing.html.md +0 -28
- data/docs/source/articles/content.html.md +0 -554
- data/docs/source/articles/contentable.html.md +0 -41
- data/docs/source/articles/contribute-code.html.md +0 -69
- data/docs/source/articles/contribute-documentation.html.md +0 -60
- data/docs/source/articles/create-a-custom-discount.html.md +0 -234
- data/docs/source/articles/create-a-new-app.html.md +0 -131
- data/docs/source/articles/create-a-plugin.html.md +0 -19
- data/docs/source/articles/create-a-style-guide.html.md +0 -71
- data/docs/source/articles/create-a-theme.html.md +0 -134
- data/docs/source/articles/css-architectural-overview.html.md +0 -89
- data/docs/source/articles/customize-a-helper.html.md +0 -91
- data/docs/source/articles/decoration.html.md +0 -415
- data/docs/source/articles/define-and-configure-inventory-policies.html.md +0 -107
- data/docs/source/articles/documentation-style-guide.html.md +0 -48
- data/docs/source/articles/documentation.html.md +0 -54
- data/docs/source/articles/domain-modeling.html.md +0 -82
- data/docs/source/articles/error-pages.html.md.erb +0 -95
- data/docs/source/articles/extension-overview.html.md +0 -152
- data/docs/source/articles/favicon-support.html.md +0 -112
- data/docs/source/articles/feature-spec-helper-stylesheet.html.md +0 -25
- data/docs/source/articles/featurejs-and-feature-spec-helper.html.md +0 -20
- data/docs/source/articles/help-and-support.html.md +0 -34
- data/docs/source/articles/html-fragment-caching.html.md +0 -46
- data/docs/source/articles/http-caching.html.md +0 -43
- data/docs/source/articles/i18n.html.md +0 -35
- data/docs/source/articles/images-flow.html.md +0 -10
- data/docs/source/articles/index-storefront-search-documents.html.md +0 -104
- data/docs/source/articles/infrastructure.html.md +0 -46
- data/docs/source/articles/installing.html.md +0 -61
- data/docs/source/articles/integrate-a-payment-gateway.html.md +0 -124
- data/docs/source/articles/integrate-a-web-analytics-provider.html.md +0 -35
- data/docs/source/articles/integrate-an-inventory-management-system.html.md +0 -88
- data/docs/source/articles/integrating-with-other-software.html.md +0 -59
- data/docs/source/articles/inventory.html.md +0 -352
- data/docs/source/articles/javascript-coding-standards.html.md +0 -30
- data/docs/source/articles/javascript-modules.html.md +0 -174
- data/docs/source/articles/javascript-overview.html.md +0 -62
- data/docs/source/articles/javascript-reference-documentation.html.md +0 -51
- data/docs/source/articles/javascript-templates.html.md +0 -52
- data/docs/source/articles/low-level-caching.html.md +0 -25
- data/docs/source/articles/maintain-a-plugin.html.md +0 -12
- data/docs/source/articles/maintenance-policy.html.md +0 -79
- data/docs/source/articles/navigable.html.md +0 -51
- data/docs/source/articles/navigating-the-code.html.md +0 -149
- data/docs/source/articles/navigation.html.md +0 -386
- data/docs/source/articles/order-life-cycle.html.md +0 -546
- data/docs/source/articles/order-pricing.html.md +0 -389
- data/docs/source/articles/orders-and-items.html.md +0 -210
- data/docs/source/articles/orders.html.md +0 -66
- data/docs/source/articles/overriding.html.md +0 -155
- data/docs/source/articles/overview.html.md +0 -43
- data/docs/source/articles/plugins-overview.html.md +0 -12
- data/docs/source/articles/prerequisites-and-dependencies.html.md +0 -202
- data/docs/source/articles/products.html.md.erb +0 -1270
- data/docs/source/articles/progressive-web-application-support.html.md +0 -148
- data/docs/source/articles/rails-asset-manifests.html.md +0 -33
- data/docs/source/articles/rails-asset-view-helpers.html.md +0 -25
- data/docs/source/articles/reading-data.html.md +0 -10
- data/docs/source/articles/releasable.html.md +0 -37
- data/docs/source/articles/report-a-bug.html.md +0 -75
- data/docs/source/articles/ruby-coding-standards.html.md +0 -10
- data/docs/source/articles/run-sidekiq-in-a-local-environment.html.md +0 -40
- data/docs/source/articles/searching.html.md +0 -1005
- data/docs/source/articles/security-policy.html.md +0 -42
- data/docs/source/articles/seeds.html.md +0 -345
- data/docs/source/articles/shipping.html.md +0 -756
- data/docs/source/articles/sort-and-exclude-product-options.html.md +0 -47
- data/docs/source/articles/storefront-search-features.html.md +0 -568
- data/docs/source/articles/storefront-searches.html.md +0 -126
- data/docs/source/articles/style-guides.html.md +0 -21
- data/docs/source/articles/stylesheet-coding-standards.html.md +0 -24
- data/docs/source/articles/stylesheets-overview.html.md +0 -67
- data/docs/source/articles/swappable-list-data-structure.html.md +0 -81
- data/docs/source/articles/system-emails.html.md +0 -102
- data/docs/source/articles/taggable.html.md +0 -8
- data/docs/source/articles/test-a-credit-card-transaction.html.md +0 -16
- data/docs/source/articles/test-if-a-plugin-is-installed.html.md +0 -34
- data/docs/source/articles/testing.html.md +0 -914
- data/docs/source/articles/themes-overview.html.md +0 -155
- data/docs/source/articles/translate-administrable-content.html.md +0 -14
- data/docs/source/articles/translate-javascript-content.html.md +0 -16
- data/docs/source/articles/translate-or-customize-message-content.html.md +0 -29
- data/docs/source/articles/translate-or-customize-static-content.html.md +0 -30
- data/docs/source/articles/use-an-existing-workarea-app.html.md +0 -108
- data/docs/source/articles/view-models.html.md +0 -509
- data/docs/source/articles/views.html.md +0 -14
- data/docs/source/articles/workers.html.md +0 -613
- data/docs/source/articles/writing-data.html.md +0 -10
- data/docs/source/cli.html.md +0 -163
- data/docs/source/favicon.ico +0 -0
- data/docs/source/images/3-variants-1-option.png +0 -0
- data/docs/source/images/3-variants-3-options.png +0 -0
- data/docs/source/images/3-years-primary-image.png +0 -0
- data/docs/source/images/404-storefront-error-page.png +0 -0
- data/docs/source/images/404-system-content-admin.png +0 -0
- data/docs/source/images/404.jpg +0 -0
- data/docs/source/images/5-years-primary-image.png +0 -0
- data/docs/source/images/activity-dashboard.png +0 -0
- data/docs/source/images/activity-for-object.png +0 -0
- data/docs/source/images/activity-ui.png +0 -0
- data/docs/source/images/adding-captioned-image-block-custom-icon.png +0 -0
- data/docs/source/images/adding-captioned-image-block-default-icon.png +0 -0
- data/docs/source/images/admin-alerts-ui.png +0 -0
- data/docs/source/images/admin-category-range-filters.png +0 -0
- data/docs/source/images/admin-for-3-column-hero.png +0 -0
- data/docs/source/images/admin-help-index.png +0 -0
- data/docs/source/images/admin-help-ui.png +0 -0
- data/docs/source/images/admin-javascript.png +0 -0
- data/docs/source/images/admin-notification-for-deactivated-discount.png +0 -0
- data/docs/source/images/admin-notifications-ui.png +0 -0
- data/docs/source/images/admin-product-show-page.png +0 -0
- data/docs/source/images/admin-products-index-page.png +0 -0
- data/docs/source/images/admin-range-filters.png +0 -0
- data/docs/source/images/admin-style-guides-navigation.png +0 -0
- data/docs/source/images/after-re-seeding.png +0 -0
- data/docs/source/images/after-seeding-localhost-3000.png +0 -0
- data/docs/source/images/after-seeding.png +0 -0
- data/docs/source/images/arrow.svg +0 -1
- data/docs/source/images/arrow_white.svg +0 -1
- data/docs/source/images/aws-resource-map.png +0 -0
- data/docs/source/images/backordered-until-output-on-inventory-sku-card.png +0 -0
- data/docs/source/images/before-seeding-localhost-3000.png +0 -0
- data/docs/source/images/before-seeding.png +0 -0
- data/docs/source/images/browsing-workarea-versions-on-the-web.png +0 -0
- data/docs/source/images/bulk-asset-upload-on-assets-index-page.png +0 -0
- data/docs/source/images/bulk-asset-upload-while-editing-content.png +0 -0
- data/docs/source/images/bundle-show-workarea-core.png +0 -0
- data/docs/source/images/bundle-show-workarea.png +0 -0
- data/docs/source/images/calendar-for-backordered-until-field.png +0 -0
- data/docs/source/images/captioned-image-block-in-storefront.png +0 -0
- data/docs/source/images/captioned-image-content-block-storefront-component-style-guide.png +0 -0
- data/docs/source/images/cart-system-content-in-admin.png +0 -0
- data/docs/source/images/cart-system-content-in-storefront.png +0 -0
- data/docs/source/images/checkout-addresses-guest.png +0 -0
- data/docs/source/images/checkout-addresses-user.png +0 -0
- data/docs/source/images/checkout-confirmation.png +0 -0
- data/docs/source/images/checkout-flow-0.png +0 -0
- data/docs/source/images/checkout-flow-1.png +0 -0
- data/docs/source/images/checkout-flow-2.png +0 -0
- data/docs/source/images/checkout-flow-3.png +0 -0
- data/docs/source/images/checkout-flow-4.png +0 -0
- data/docs/source/images/checkout-payment-guest.png +0 -0
- data/docs/source/images/checkout-payment-user.png +0 -0
- data/docs/source/images/checkout-shipping.png +0 -0
- data/docs/source/images/color-picker-component-admin-style-guide.png +0 -0
- data/docs/source/images/color-picker-component-on-content-editing-screen.png +0 -0
- data/docs/source/images/commerce-model-carts-orders.png +0 -0
- data/docs/source/images/commerce-model-order-pricing.png +0 -0
- data/docs/source/images/commerce-model.png +0 -0
- data/docs/source/images/configuring-an-index-pattern-in-kibana.png +0 -0
- data/docs/source/images/content-block-presets.png +0 -0
- data/docs/source/images/content-search-customization.png +0 -0
- data/docs/source/images/country-with-region-data-in-address-form.png +0 -0
- data/docs/source/images/country-without-region-data-in-address-form.png +0 -0
- data/docs/source/images/create-content-block-preset-ui.png +0 -0
- data/docs/source/images/credit-card-icons.png +0 -0
- data/docs/source/images/css-added-through-admin.png +0 -0
- data/docs/source/images/css-admin-ui.png +0 -0
- data/docs/source/images/current-configuration-shown-in-admin-settings.png +0 -0
- data/docs/source/images/customer-impersonation-in-admin.png +0 -0
- data/docs/source/images/customer-impersonation-in-store-front.png +0 -0
- data/docs/source/images/date-filter-same-day.png +0 -0
- data/docs/source/images/developer-toolbar-in-store-front.png +0 -0
- data/docs/source/images/discounts-sorted-by-most-redeemed.png +0 -0
- data/docs/source/images/edit-help-article.png +0 -0
- data/docs/source/images/editing-content-for-search-customization.png +0 -0
- data/docs/source/images/editing-dynamic-captioned-image-block.png +0 -0
- data/docs/source/images/editing-product-fields-in-the-admin.png +0 -0
- data/docs/source/images/editing-search-system-content.png +0 -0
- data/docs/source/images/editing-static-captioned-image-block-custom-icon.png +0 -0
- data/docs/source/images/editing-static-captioned-image-block-default-icon.png +0 -0
- data/docs/source/images/external.svg +0 -1
- data/docs/source/images/favicon_16.png +0 -0
- data/docs/source/images/favicon_180.png +0 -0
- data/docs/source/images/favicon_32.png +0 -0
- data/docs/source/images/filters-all.png +0 -0
- data/docs/source/images/filters-control.png +0 -0
- data/docs/source/images/filters-custom.png +0 -0
- data/docs/source/images/filters-groups.png +0 -0
- data/docs/source/images/filters-material.png +0 -0
- data/docs/source/images/filters-omitted.png +0 -0
- data/docs/source/images/filters-pinned.png +0 -0
- data/docs/source/images/filters-range.png +0 -0
- data/docs/source/images/filters-sorted.png +0 -0
- data/docs/source/images/filters-wrapping-to-second-line-in-admin.png +0 -0
- data/docs/source/images/generic-product-template-images-no-options-selected.png +0 -0
- data/docs/source/images/generic-product-template-images-options-selected.png +0 -0
- data/docs/source/images/generic-template.png +0 -0
- data/docs/source/images/hosting.svg +0 -1
- data/docs/source/images/image-group-content-block-in-storefront.png +0 -0
- data/docs/source/images/images.svg +0 -1
- data/docs/source/images/import-export-screenshot.png +0 -0
- data/docs/source/images/invalid-display.png +0 -0
- data/docs/source/images/itcss.png +0 -0
- data/docs/source/images/kibana-dev-tools-console.png +0 -0
- data/docs/source/images/layout-content-admin-with-2-areas.png +0 -0
- data/docs/source/images/layout-content-admin-with-3-areas.png +0 -0
- data/docs/source/images/link-to-search-system-content.png +0 -0
- data/docs/source/images/logo.svg +0 -1
- data/docs/source/images/menu.svg +0 -2
- data/docs/source/images/mongo-replica-set.svg +0 -1
- data/docs/source/images/multi-column-hero-blocks.png +0 -0
- data/docs/source/images/option-selects-product-template-images-options-selected.png +0 -0
- data/docs/source/images/option-selects-template.png +0 -0
- data/docs/source/images/option-thumbnails-template.png +0 -0
- data/docs/source/images/order-item-total-price-diagram.png +0 -0
- data/docs/source/images/order-pricing-cart-example.png +0 -0
- data/docs/source/images/order-pricing-example-adjustments.png +0 -0
- data/docs/source/images/order-pricing-example-totals.png +0 -0
- data/docs/source/images/order-pricing-placed-order-example.png +0 -0
- data/docs/source/images/order-shipping-total-diagram.png +0 -0
- data/docs/source/images/order-show-with-multiple-tenders.png +0 -0
- data/docs/source/images/order-subtotal-price-diagram.png +0 -0
- data/docs/source/images/order-tax-total-diagram.png +0 -0
- data/docs/source/images/order-total-price-diagram.png +0 -0
- data/docs/source/images/order-total-value-diagram.png +0 -0
- data/docs/source/images/orders-dashboard-links.png +0 -0
- data/docs/source/images/oval.svg +0 -1
- data/docs/source/images/payment-icon-storefront-style-guide.png +0 -0
- data/docs/source/images/people-dashboard-links.png +0 -0
- data/docs/source/images/price-adjustments-diagram.png +0 -0
- data/docs/source/images/price-display-no-options.png +0 -0
- data/docs/source/images/price-display-options-selected.png +0 -0
- data/docs/source/images/pricing-calculators-diagram.png +0 -0
- data/docs/source/images/product-list-content-block-admin.png +0 -0
- data/docs/source/images/product-list-content-block-in-store-front.png +0 -0
- data/docs/source/images/promo-products-excluded-autocomplete-results-after.png +0 -0
- data/docs/source/images/promo-products-excluded-featured-category-results-after.png +0 -0
- data/docs/source/images/promo-products-excluded-recommendations-results-after.png +0 -0
- data/docs/source/images/promo-products-excluded-search-category-results-after.png +0 -0
- data/docs/source/images/promo-products-excluded-search-results-after.png +0 -0
- data/docs/source/images/promo-products-included-autocomplete-results-before.png +0 -0
- data/docs/source/images/promo-products-included-featured-category-results-before.png +0 -0
- data/docs/source/images/promo-products-included-recommendations-results-before.png +0 -0
- data/docs/source/images/promo-products-included-search-category-results-before.png +0 -0
- data/docs/source/images/promo-products-included-search-results-before.png +0 -0
- data/docs/source/images/rails-version-constraint.png +0 -0
- data/docs/source/images/re-enable-discount.png +0 -0
- data/docs/source/images/reading-data.svg +0 -1
- data/docs/source/images/readme-hero.png +0 -0
- data/docs/source/images/redesigned-customized-sort-for-search-results.png +0 -0
- data/docs/source/images/reviews-summary-above-share-buttons.png +0 -0
- data/docs/source/images/reviews-summary-below-product-name.png +0 -0
- data/docs/source/images/reviews-summary-below-share-buttons.png +0 -0
- data/docs/source/images/reviews-summary-removed.png +0 -0
- data/docs/source/images/rsa-fingerprint-for-stash.png +0 -0
- data/docs/source/images/ruby-version-constraint.png +0 -0
- data/docs/source/images/script-tag-added-through-admin.png +0 -0
- data/docs/source/images/search-analysis-admin-alternate-rendering.png +0 -0
- data/docs/source/images/search-analysis-admin.png +0 -0
- data/docs/source/images/search-quality-report.png +0 -0
- data/docs/source/images/search.svg +0 -1
- data/docs/source/images/searching-for-cart-system-content-in-admin.png +0 -0
- data/docs/source/images/searching-for-layout-system-content-in-admin.png +0 -0
- data/docs/source/images/seeded-admin.png +0 -0
- data/docs/source/images/seeds-from-plugins.png +0 -0
- data/docs/source/images/seo-metadata-automation-ui.png +0 -0
- data/docs/source/images/show-password-button.png +0 -0
- data/docs/source/images/storefront-autocomplete.png +0 -0
- data/docs/source/images/storefront-category-summary-content-block.png +0 -0
- data/docs/source/images/storefront-category.png +0 -0
- data/docs/source/images/storefront-product-after-overriding.png +0 -0
- data/docs/source/images/storefront-product-before-overriding.png +0 -0
- data/docs/source/images/storefront-product-browse-page.png +0 -0
- data/docs/source/images/storefront-product-recommendations.png +0 -0
- data/docs/source/images/storefront-product-show-page.png +0 -0
- data/docs/source/images/storefront-requests-and-search-requests.png +0 -0
- data/docs/source/images/storefront-search-request-handling.png +0 -0
- data/docs/source/images/storefront-search-response-creation.png +0 -0
- data/docs/source/images/storefront-search.png +0 -0
- data/docs/source/images/storefront-style-guides-navigation.png +0 -0
- data/docs/source/images/styles.css +0 -3
- data/docs/source/images/tax-categories-ui.png +0 -0
- data/docs/source/images/tax-rates-ui.png +0 -0
- data/docs/source/images/unpurchasable-product.png +0 -0
- data/docs/source/images/url-redirects-filtering.png +0 -0
- data/docs/source/images/utility-nav-area-in-admin.png +0 -0
- data/docs/source/images/utility-nav-area-in-storefront.png +0 -0
- data/docs/source/images/validation-message-in-storefront.png +0 -0
- data/docs/source/images/view-model-interface.png +0 -0
- data/docs/source/images/viewing-workarea-version-in-source.png +0 -0
- data/docs/source/images/workarea.svg +0 -1
- data/docs/source/images/worst-performing-searches-on-results-customization-page.png +0 -0
- data/docs/source/images/writing-data.svg +0 -1
- data/docs/source/index.html.erb +0 -166
- data/docs/source/javascripts/jquery.js +0 -2
- data/docs/source/javascripts/lunr.js +0 -7
- data/docs/source/javascripts/site.js +0 -299
- data/docs/source/javascripts/vendor/highlight.pack.js +0 -2
- data/docs/source/layouts/article.erb +0 -106
- data/docs/source/layouts/bare.erb +0 -46
- data/docs/source/layouts/layout.erb +0 -43
- data/docs/source/release-notes/workarea-3-0-0.html.md +0 -146
- data/docs/source/release-notes/workarea-3-0-1.html.md +0 -161
- data/docs/source/release-notes/workarea-3-0-10.html.md +0 -39
- data/docs/source/release-notes/workarea-3-0-11.html.md +0 -277
- data/docs/source/release-notes/workarea-3-0-12.html.md +0 -14
- data/docs/source/release-notes/workarea-3-0-13.html.md +0 -153
- data/docs/source/release-notes/workarea-3-0-14.html.md +0 -93
- data/docs/source/release-notes/workarea-3-0-15.html.md +0 -107
- data/docs/source/release-notes/workarea-3-0-16.html.md +0 -36
- data/docs/source/release-notes/workarea-3-0-17.html.md +0 -141
- data/docs/source/release-notes/workarea-3-0-18.html.md +0 -123
- data/docs/source/release-notes/workarea-3-0-19.html.md +0 -160
- data/docs/source/release-notes/workarea-3-0-2.html.md +0 -222
- data/docs/source/release-notes/workarea-3-0-20.html.md +0 -95
- data/docs/source/release-notes/workarea-3-0-21.html.md +0 -168
- data/docs/source/release-notes/workarea-3-0-22.html.md +0 -268
- data/docs/source/release-notes/workarea-3-0-23.html.md +0 -173
- data/docs/source/release-notes/workarea-3-0-24.html.md +0 -19
- data/docs/source/release-notes/workarea-3-0-25.html.md +0 -26
- data/docs/source/release-notes/workarea-3-0-26.html.md +0 -199
- data/docs/source/release-notes/workarea-3-0-27.html.md +0 -113
- data/docs/source/release-notes/workarea-3-0-28.html.md +0 -39
- data/docs/source/release-notes/workarea-3-0-29.html.md +0 -73
- data/docs/source/release-notes/workarea-3-0-3.html.md +0 -35
- data/docs/source/release-notes/workarea-3-0-30.html.md +0 -186
- data/docs/source/release-notes/workarea-3-0-31.html.md +0 -125
- data/docs/source/release-notes/workarea-3-0-32.html.md +0 -73
- data/docs/source/release-notes/workarea-3-0-33.html.md +0 -137
- data/docs/source/release-notes/workarea-3-0-34.html.md +0 -203
- data/docs/source/release-notes/workarea-3-0-35.html.md +0 -205
- data/docs/source/release-notes/workarea-3-0-36.html.md +0 -105
- data/docs/source/release-notes/workarea-3-0-37.html.md +0 -144
- data/docs/source/release-notes/workarea-3-0-38.html.md +0 -73
- data/docs/source/release-notes/workarea-3-0-39.html.md +0 -77
- data/docs/source/release-notes/workarea-3-0-4.html.md +0 -14
- data/docs/source/release-notes/workarea-3-0-40.html.md +0 -130
- data/docs/source/release-notes/workarea-3-0-41.html.md +0 -70
- data/docs/source/release-notes/workarea-3-0-42.html.md +0 -52
- data/docs/source/release-notes/workarea-3-0-43.html.md +0 -72
- data/docs/source/release-notes/workarea-3-0-44.html.md +0 -93
- data/docs/source/release-notes/workarea-3-0-45.html.md +0 -61
- data/docs/source/release-notes/workarea-3-0-46.html.md +0 -171
- data/docs/source/release-notes/workarea-3-0-47.html.md +0 -130
- data/docs/source/release-notes/workarea-3-0-48.html.md +0 -160
- data/docs/source/release-notes/workarea-3-0-49.html.md +0 -28
- data/docs/source/release-notes/workarea-3-0-5.html.md +0 -225
- data/docs/source/release-notes/workarea-3-0-50.html.md +0 -74
- data/docs/source/release-notes/workarea-3-0-51.html.md +0 -61
- data/docs/source/release-notes/workarea-3-0-52.html.md +0 -76
- data/docs/source/release-notes/workarea-3-0-53.html.md +0 -126
- data/docs/source/release-notes/workarea-3-0-54.html.md +0 -112
- data/docs/source/release-notes/workarea-3-0-55.html.md +0 -105
- data/docs/source/release-notes/workarea-3-0-56.html.md +0 -56
- data/docs/source/release-notes/workarea-3-0-57.html.md +0 -82
- data/docs/source/release-notes/workarea-3-0-58.html.md +0 -153
- data/docs/source/release-notes/workarea-3-0-59.html.md +0 -78
- data/docs/source/release-notes/workarea-3-0-6.html.md +0 -165
- data/docs/source/release-notes/workarea-3-0-60.html.md +0 -43
- data/docs/source/release-notes/workarea-3-0-61.html.md +0 -46
- data/docs/source/release-notes/workarea-3-0-62.html.md +0 -23
- data/docs/source/release-notes/workarea-3-0-63.html.md +0 -25
- data/docs/source/release-notes/workarea-3-0-64.html.md +0 -25
- data/docs/source/release-notes/workarea-3-0-65.html.md +0 -37
- data/docs/source/release-notes/workarea-3-0-7.html.md +0 -207
- data/docs/source/release-notes/workarea-3-0-8.html.md +0 -337
- data/docs/source/release-notes/workarea-3-0-9.html.md +0 -196
- data/docs/source/release-notes/workarea-3-1-0.html.md +0 -414
- data/docs/source/release-notes/workarea-3-1-1.html.md +0 -139
- data/docs/source/release-notes/workarea-3-1-10.html.md +0 -19
- data/docs/source/release-notes/workarea-3-1-11.html.md +0 -27
- data/docs/source/release-notes/workarea-3-1-12.html.md +0 -216
- data/docs/source/release-notes/workarea-3-1-13.html.md +0 -113
- data/docs/source/release-notes/workarea-3-1-14.html.md +0 -39
- data/docs/source/release-notes/workarea-3-1-15.html.md +0 -107
- data/docs/source/release-notes/workarea-3-1-16.html.md +0 -188
- data/docs/source/release-notes/workarea-3-1-17.html.md +0 -141
- data/docs/source/release-notes/workarea-3-1-18.html.md +0 -73
- data/docs/source/release-notes/workarea-3-1-19.html.md +0 -137
- data/docs/source/release-notes/workarea-3-1-2.html.md +0 -55
- data/docs/source/release-notes/workarea-3-1-20.html.md +0 -203
- data/docs/source/release-notes/workarea-3-1-21.html.md +0 -205
- data/docs/source/release-notes/workarea-3-1-22.html.md +0 -121
- data/docs/source/release-notes/workarea-3-1-23.html.md +0 -144
- data/docs/source/release-notes/workarea-3-1-24.html.md +0 -94
- data/docs/source/release-notes/workarea-3-1-25.html.md +0 -77
- data/docs/source/release-notes/workarea-3-1-26.html.md +0 -130
- data/docs/source/release-notes/workarea-3-1-27.html.md +0 -70
- data/docs/source/release-notes/workarea-3-1-28.html.md +0 -52
- data/docs/source/release-notes/workarea-3-1-29.html.md +0 -44
- data/docs/source/release-notes/workarea-3-1-3.html.md +0 -185
- data/docs/source/release-notes/workarea-3-1-30.html.md +0 -72
- data/docs/source/release-notes/workarea-3-1-31.html.md +0 -93
- data/docs/source/release-notes/workarea-3-1-32.html.md +0 -61
- data/docs/source/release-notes/workarea-3-1-33.html.md +0 -171
- data/docs/source/release-notes/workarea-3-1-34.html.md +0 -130
- data/docs/source/release-notes/workarea-3-1-35.html.md +0 -179
- data/docs/source/release-notes/workarea-3-1-36.html.md +0 -28
- data/docs/source/release-notes/workarea-3-1-37.html.md +0 -74
- data/docs/source/release-notes/workarea-3-1-38.html.md +0 -61
- data/docs/source/release-notes/workarea-3-1-39.html.md +0 -96
- data/docs/source/release-notes/workarea-3-1-4.html.md +0 -148
- data/docs/source/release-notes/workarea-3-1-40.html.md +0 -126
- data/docs/source/release-notes/workarea-3-1-41.html.md +0 -128
- data/docs/source/release-notes/workarea-3-1-42.html.md +0 -105
- data/docs/source/release-notes/workarea-3-1-43.html.md +0 -37
- data/docs/source/release-notes/workarea-3-1-44.html.md +0 -82
- data/docs/source/release-notes/workarea-3-1-45.html.md +0 -153
- data/docs/source/release-notes/workarea-3-1-46.html.md +0 -91
- data/docs/source/release-notes/workarea-3-1-47.html.md +0 -65
- data/docs/source/release-notes/workarea-3-1-48.html.md +0 -46
- data/docs/source/release-notes/workarea-3-1-49.html.md +0 -23
- data/docs/source/release-notes/workarea-3-1-5.html.md +0 -169
- data/docs/source/release-notes/workarea-3-1-50.html.md +0 -42
- data/docs/source/release-notes/workarea-3-1-51.html.md +0 -25
- data/docs/source/release-notes/workarea-3-1-52.html.md +0 -57
- data/docs/source/release-notes/workarea-3-1-6.html.md +0 -117
- data/docs/source/release-notes/workarea-3-1-7.html.md +0 -176
- data/docs/source/release-notes/workarea-3-1-8.html.md +0 -283
- data/docs/source/release-notes/workarea-3-1-9.html.md +0 -212
- data/docs/source/release-notes/workarea-3-2-0.html.md +0 -1705
- data/docs/source/release-notes/workarea-3-2-1.html.md +0 -216
- data/docs/source/release-notes/workarea-3-2-10.html.md +0 -237
- data/docs/source/release-notes/workarea-3-2-11.html.md +0 -121
- data/docs/source/release-notes/workarea-3-2-12.html.md +0 -145
- data/docs/source/release-notes/workarea-3-2-13.html.md +0 -138
- data/docs/source/release-notes/workarea-3-2-14.html.md +0 -77
- data/docs/source/release-notes/workarea-3-2-15.html.md +0 -130
- data/docs/source/release-notes/workarea-3-2-16.html.md +0 -111
- data/docs/source/release-notes/workarea-3-2-17.html.md +0 -52
- data/docs/source/release-notes/workarea-3-2-18.html.md +0 -44
- data/docs/source/release-notes/workarea-3-2-19.html.md +0 -72
- data/docs/source/release-notes/workarea-3-2-2.html.md +0 -145
- data/docs/source/release-notes/workarea-3-2-20.html.md +0 -93
- data/docs/source/release-notes/workarea-3-2-21.html.md +0 -61
- data/docs/source/release-notes/workarea-3-2-22.html.md +0 -154
- data/docs/source/release-notes/workarea-3-2-23.html.md +0 -130
- data/docs/source/release-notes/workarea-3-2-24.html.md +0 -200
- data/docs/source/release-notes/workarea-3-2-25.html.md +0 -28
- data/docs/source/release-notes/workarea-3-2-26.html.md +0 -94
- data/docs/source/release-notes/workarea-3-2-27.html.md +0 -61
- data/docs/source/release-notes/workarea-3-2-28.html.md +0 -96
- data/docs/source/release-notes/workarea-3-2-29.html.md +0 -126
- data/docs/source/release-notes/workarea-3-2-30.html.md +0 -112
- data/docs/source/release-notes/workarea-3-2-31.html.md +0 -105
- data/docs/source/release-notes/workarea-3-2-32.html.md +0 -56
- data/docs/source/release-notes/workarea-3-2-33.html.md +0 -82
- data/docs/source/release-notes/workarea-3-2-34.html.md +0 -153
- data/docs/source/release-notes/workarea-3-2-35.html.md +0 -91
- data/docs/source/release-notes/workarea-3-2-36.html.md +0 -118
- data/docs/source/release-notes/workarea-3-2-37.html.md +0 -46
- data/docs/source/release-notes/workarea-3-2-38.html.md +0 -23
- data/docs/source/release-notes/workarea-3-2-39.html.md +0 -42
- data/docs/source/release-notes/workarea-3-2-4.html.md +0 -109
- data/docs/source/release-notes/workarea-3-2-40.html.md +0 -25
- data/docs/source/release-notes/workarea-3-2-41.html.md +0 -90
- data/docs/source/release-notes/workarea-3-2-5.html.md +0 -186
- data/docs/source/release-notes/workarea-3-2-6.html.md +0 -173
- data/docs/source/release-notes/workarea-3-2-7.html.md +0 -89
- data/docs/source/release-notes/workarea-3-2-8.html.md +0 -137
- data/docs/source/release-notes/workarea-3-2-9.html.md +0 -219
- data/docs/source/release-notes/workarea-3-3-0.html.md +0 -1272
- data/docs/source/release-notes/workarea-3-3-1.html.md +0 -324
- data/docs/source/release-notes/workarea-3-3-10.html.md +0 -69
- data/docs/source/release-notes/workarea-3-3-11.html.md +0 -72
- data/docs/source/release-notes/workarea-3-3-12.html.md +0 -136
- data/docs/source/release-notes/workarea-3-3-13.html.md +0 -61
- data/docs/source/release-notes/workarea-3-3-14.html.md +0 -196
- data/docs/source/release-notes/workarea-3-3-15.html.md +0 -167
- data/docs/source/release-notes/workarea-3-3-16.html.md +0 -234
- data/docs/source/release-notes/workarea-3-3-17.html.md +0 -82
- data/docs/source/release-notes/workarea-3-3-18.html.md +0 -165
- data/docs/source/release-notes/workarea-3-3-19.html.md +0 -106
- data/docs/source/release-notes/workarea-3-3-2.html.md +0 -72
- data/docs/source/release-notes/workarea-3-3-20.html.md +0 -116
- data/docs/source/release-notes/workarea-3-3-21.html.md +0 -228
- data/docs/source/release-notes/workarea-3-3-22.html.md +0 -125
- data/docs/source/release-notes/workarea-3-3-23.html.md +0 -154
- data/docs/source/release-notes/workarea-3-3-24.html.md +0 -70
- data/docs/source/release-notes/workarea-3-3-25.html.md +0 -114
- data/docs/source/release-notes/workarea-3-3-26.html.md +0 -260
- data/docs/source/release-notes/workarea-3-3-27.html.md +0 -138
- data/docs/source/release-notes/workarea-3-3-28.html.md +0 -147
- data/docs/source/release-notes/workarea-3-3-29.html.md +0 -63
- data/docs/source/release-notes/workarea-3-3-3.html.md +0 -153
- data/docs/source/release-notes/workarea-3-3-30.html.md +0 -102
- data/docs/source/release-notes/workarea-3-3-31.html.md +0 -57
- data/docs/source/release-notes/workarea-3-3-32.html.md +0 -44
- data/docs/source/release-notes/workarea-3-3-33.html.md +0 -114
- data/docs/source/release-notes/workarea-3-3-34.html.md +0 -29
- data/docs/source/release-notes/workarea-3-3-4.html.md +0 -332
- data/docs/source/release-notes/workarea-3-3-5.html.md +0 -242
- data/docs/source/release-notes/workarea-3-3-6.html.md +0 -100
- data/docs/source/release-notes/workarea-3-3-7.html.md +0 -148
- data/docs/source/release-notes/workarea-3-3-8.html.md +0 -163
- data/docs/source/release-notes/workarea-3-3-9.html.md +0 -93
- data/docs/source/release-notes/workarea-3-4-0.html.md +0 -580
- data/docs/source/release-notes/workarea-3-4-1.html.md +0 -150
- data/docs/source/release-notes/workarea-3-4-10.html.md +0 -72
- data/docs/source/release-notes/workarea-3-4-11.html.md +0 -60
- data/docs/source/release-notes/workarea-3-4-12.html.md +0 -155
- data/docs/source/release-notes/workarea-3-4-15.html.md +0 -100
- data/docs/source/release-notes/workarea-3-4-16.html.md +0 -88
- data/docs/source/release-notes/workarea-3-4-2.html.md +0 -188
- data/docs/source/release-notes/workarea-3-4-3.html.md +0 -136
- data/docs/source/release-notes/workarea-3-4-4.html.md +0 -114
- data/docs/source/release-notes/workarea-3-4-5.html.md +0 -275
- data/docs/source/release-notes/workarea-3-4-6.html.md +0 -169
- data/docs/source/release-notes/workarea-3-4-7.html.md +0 -162
- data/docs/source/release-notes/workarea-3-4-8.html.md +0 -95
- data/docs/source/release-notes/workarea-3-4-9.html.md +0 -135
- data/docs/source/release-notes.html.md +0 -261
- data/docs/source/search.html.erb +0 -34
- data/docs/source/shared/_header.erb +0 -61
- data/docs/source/shared/_svgs.erb +0 -17
- data/docs/source/style_guide/index.html.erb +0 -382
- data/docs/source/stylesheets/_base.scss +0 -125
- data/docs/source/stylesheets/_components.scss +0 -669
- data/docs/source/stylesheets/_helpers.scss +0 -10
- data/docs/source/stylesheets/_opinions.scss +0 -42
- data/docs/source/stylesheets/_settings.scss +0 -56
- data/docs/source/stylesheets/_typography.scss +0 -119
- data/docs/source/stylesheets/site.css.scss +0 -14
- data/docs/source/stylesheets/vendor/_avalanche.scss +0 -328
- data/docs/source/stylesheets/vendor/_normalize.scss +0 -341
- data/docs/source/stylesheets/vendor/highlight/_tomorrow_night_blue.scss +0 -75
- data/docs/source/upgrade-guides/workarea-3-4-0.html.md +0 -152
- data/docs/source/upgrade-guides.html.md +0 -18
- data/docs/workarea_renderer.rb +0 -8
- data/docs/yarn.lock +0 -2522
@@ -1,126 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: Storefront Searches
|
3
|
-
excerpt: This document explains the code path of Storefront searches to enable developers to analyze, debug, and extend this feature as required for their applications and plugins.
|
4
|
-
---
|
5
|
-
|
6
|
-
Storefront Searches
|
7
|
-
================================================================================
|
8
|
-
|
9
|
-
Each Storefront search feature uses a search query object to send a search request and receive a response from Elasticsearch.
|
10
|
-
However, the code path to initialize the search query is different for each feature.
|
11
|
-
(See [Storefront Search Features](storefront-search-features.html), specifically [Initialization & Parameters](storefront-search-features.html#initialization-amp-parameters_9).)
|
12
|
-
|
13
|
-
Storefront searches (i.e. search results pages) have the most complicated path to search query initialization.
|
14
|
-
A Storefront search request may be redirected to another URL, or the search query may be rewritten, possibly several times, in an attempt to provide better search results.
|
15
|
-
|
16
|
-
This document explains the code path of Storefront searches to enable developers to analyze, debug, and extend this feature as required for their applications and plugins.
|
17
|
-
|
18
|
-
|
19
|
-
Handling the Request
|
20
|
-
--------------------------------------------------------------------------------
|
21
|
-
|
22
|
-
At a high level, a Storefront search request is handled as follows.
|
23
|
-
|
24
|
-
The controller action `Storefront::SearchesController#show` uses the request params (which include data submitted by the user, such as the query string, sort, and filters) to create a `Search::StorefrontSearch`.
|
25
|
-
The `StorefrontSearch` is responsible for creating a _search response_ (`Search::StorefrontSearch::Response`).
|
26
|
-
The process to do so is covered in the next section.
|
27
|
-
|
28
|
-
The controller inspects the response to determine if the request should be redirected, and if so, redirects to the value specified by `Response#redirect`.
|
29
|
-
Otherwise, the controller wraps the response in a `Storefront::SearchViewModel` and renders the template specified by `Response#template`.
|
30
|
-
|
31
|
-
The following figure illustrates this process:
|
32
|
-
|
33
|
-
![Storefront search request handling](../images/storefront-search-request-handling.png)
|
34
|
-
|
35
|
-
The `Response#query` is the search query object, an instance of `Search::ProductSearch`.
|
36
|
-
The view model wrapping the response adds the method `#products`, which wraps each result from the search query object in a `Storefront::ProductViewModel`, preparing the results for display in the Storefront.
|
37
|
-
|
38
|
-
|
39
|
-
Creating the Response
|
40
|
-
--------------------------------------------------------------------------------
|
41
|
-
|
42
|
-
The search response, introduced above, encapsulates the search query object and other data relevant to handling the shopper's search request and displaying the results.
|
43
|
-
This section explains in more detail how the response is created.
|
44
|
-
|
45
|
-
Recall from above that a `StorefrontSearch` is created from the controller's params.
|
46
|
-
This object uses the `:q` param, which represents the user's query, to look up any administration for this particular query, which is stored as a `Search::Customization`.
|
47
|
-
Then, the `StorefrontSearch` creates the `StorefrontSearch::Response` from the params and the search customization.
|
48
|
-
|
49
|
-
The Storefront search object creates a _search middleware chain_ and passes the search response through the chain.
|
50
|
-
Each search middleware has the opportunity to mutate the response, and each has the opportunity to "break" the chain, preventing the remaining middleware in the chain from running.
|
51
|
-
The following figure represents this flow:
|
52
|
-
|
53
|
-
![Storefront search response creation](../images/storefront-search-response-creation.png)
|
54
|
-
|
55
|
-
All but the first of these middleware send the search query to Elasticsearch and examine the results.
|
56
|
-
Each middleware may decide to:
|
57
|
-
|
58
|
-
* Replace/rewrite the search query object (mutate `Response#params` and `Response#query`)
|
59
|
-
* Add a `Response#message`, which communicates the query changes to the end user
|
60
|
-
* Add a `Response#redirect`, indicating the user's query should be redirected instead of rendering results
|
61
|
-
* Change the `Response#template`, which determines which view is used to render the results (or lack of results)
|
62
|
-
|
63
|
-
|
64
|
-
## Search Middleware Chain
|
65
|
-
|
66
|
-
The value of `Workarea.config.storefront_search_middleware` is a [SwappableList](swappable-list-data-structure.html) which declares which search middleware are to run and in what order.
|
67
|
-
The following example lists the default middleware chain.
|
68
|
-
|
69
|
-
```ruby
|
70
|
-
puts Workarea.config.storefront_search_middleware
|
71
|
-
# Workarea::Search::StorefrontSearch::Redirect
|
72
|
-
# Workarea::Search::StorefrontSearch::ExactMatches
|
73
|
-
# Workarea::Search::StorefrontSearch::ProductMultipass
|
74
|
-
# Workarea::Search::StorefrontSearch::SpellingCorrection
|
75
|
-
# Workarea::Search::StorefrontSearch::Template
|
76
|
-
```
|
77
|
-
|
78
|
-
Developers can manipulate this config to add, swap, remove, or sort search middleware.
|
79
|
-
Developers can also [decorate](decoration.html) middleware to modify their behavior.
|
80
|
-
|
81
|
-
The following sections provide a brief explanation of each of the default search middleware.
|
82
|
-
|
83
|
-
|
84
|
-
### Redirect
|
85
|
-
|
86
|
-
`Workarea::Search::StorefrontSearch::Redirect` sets a redirect on the search response if the query has an administered redirect (i.e. the `Search::Customization` for the query has a `#redirect`).
|
87
|
-
|
88
|
-
|
89
|
-
### ExactMatches
|
90
|
-
|
91
|
-
`Workarea::Search::StorefrontSearch::ExactMatches` sets a redirect on the search response if there is an "exact match" product hit (and no filters).
|
92
|
-
It breaks the middleware chain when this redirect is set.
|
93
|
-
|
94
|
-
"Exact match" in this case is defined as a hit with a `_score` greater than or equal to `Workarea.config.search_exact_match_score` (defaults to `9999`).
|
95
|
-
This logic depends on scoring logic in the `Search::ProductSearch` query, which dramatically boosts the score of a document if the exact query string is contained within the document's `keywords.name`, `keywords.catalog_id`, or `keywords.sku` fields.
|
96
|
-
|
97
|
-
|
98
|
-
### ProductMultipass
|
99
|
-
|
100
|
-
`Workarea::Search::StorefrontSearch::ProductMultipass` initializes a new, replacement query object if the existing query does not have "sufficient" results.
|
101
|
-
The replacement query has a different `:pass` param, which changes the logic of the `Search::ProductSearch` query.
|
102
|
-
After replacing the query, this middleware runs again.
|
103
|
-
This process repeats, potentially creating a loop within the middleware chain, until the results of the query are "sufficient" or the "last" pass is reached.
|
104
|
-
|
105
|
-
The `:pass` param is a signal to Search::ProductSearch to cast a wider net for results.
|
106
|
-
In practice, the `:pass` param has the following effects on the request body:
|
107
|
-
|
108
|
-
* When `:pass` is `2`, the `content.description` field is added as a field to be searched
|
109
|
-
* When `:pass` is `3`, the query's operator changes from `AND` to `OR`
|
110
|
-
|
111
|
-
The 3rd pass is considered the "last" pass, at which point the results are always considered sufficient.
|
112
|
-
|
113
|
-
Prior to the last pass, "sufficient" results are defined as the number of hits being greater than or equal to `Workarea.config.search_sufficient_results` (defaults to `2`).
|
114
|
-
Results are also sufficient when the response from Elasticsearch includes at least one spelling correction suggestion (which the next middleware in the chain will use to rewrite the query).
|
115
|
-
|
116
|
-
|
117
|
-
### SpellingCorrection
|
118
|
-
|
119
|
-
`Workarea::Search::StorefrontSearch::SpellingCorrection` initializes a new, replacement query if there are zero results (and no filters).
|
120
|
-
The replacement query's `:q` param is set to the first value of the existing query's `#query_suggestions`, which are spelling correction suggestions provided by Elasticsearch.
|
121
|
-
It also sets `#message` on the search response, which will display on the results page in the Storefront to notify the user the query string has been rewritten.
|
122
|
-
|
123
|
-
|
124
|
-
### Template
|
125
|
-
|
126
|
-
`Workarea::Search::StorefrontSearch::Template` changes the response `#template` to `'no_results'` if there are still zero results (and no filters).
|
@@ -1,21 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: Style Guides
|
3
|
-
excerpt: Each Workarea user interface includes a style guide page that provides tests and documentation for each layer of the CSS Architecture. The only exception to this rule is Tools, who's documentation is included in their respective files. These pages are
|
4
|
-
---
|
5
|
-
|
6
|
-
# Style Guides
|
7
|
-
|
8
|
-
Each Workarea user interface includes a style guide page that provides tests and documentation for each layer of the [CSS Architecture](css-architectural-overview.html). The only exception to this rule is Tools, who's documentation is included in their respective files. These pages are available by default at the following paths:
|
9
|
-
|
10
|
-
- `/style_guides`
|
11
|
-
- `/admin/style_guides`
|
12
|
-
|
13
|
-
## Documentation
|
14
|
-
|
15
|
-
A primary use case for the style guide pages is documentation for developers, managers, clients, and other stakeholders. Style guide pages provide a single page view of all "components" of a UI that are considered reusable.
|
16
|
-
|
17
|
-
## Test Suite
|
18
|
-
|
19
|
-
The other primary use case for the style guide pages is a test suite for developers. Many SIs develop most of the UI using only this page. It's much easier to develop and maintain re-usable components in one place rather than spread throughout the app. The page allows for visual testing, like confirming a `button` block looks the same regardless of the underlying HTML element.
|
20
|
-
|
21
|
-
|
@@ -1,24 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: Stylesheet Coding Standards
|
3
|
-
excerpt: The files that make up the Workarea CSS Framework adhere to specific architectural guidelines. The architecture defines specific layers to which each CSS file should belong. For more information, read through the CSS Architectural Overview section.
|
4
|
-
---
|
5
|
-
|
6
|
-
# Stylesheet Coding Standards
|
7
|
-
|
8
|
-
## Architecture
|
9
|
-
|
10
|
-
The files that make up the Workarea CSS Framework adhere to specific architectural guidelines. The architecture defines specific layers to which each CSS file should belong. For more information, read through the [CSS Architectural Overview](css-architectural-overview.html) section.
|
11
|
-
|
12
|
-
## BEM
|
13
|
-
|
14
|
-
The term block comes from BEM: Block, Element, Modifier. The [BEM philosophy and syntax](http://csswizardry.com/2013/01/mindbemding-getting-your-head-round-bem-syntax/) is used when constructing [Components](css-architectural-overview.html#the-components-layer) in the Workarea platform.
|
15
|
-
|
16
|
-
## CSS Style Guide
|
17
|
-
|
18
|
-
Workarea has published a [SCSS style guide on Github](https://github.com/weblinc/scss-style-guide) to help keep developers writing clean, consistent code.
|
19
|
-
|
20
|
-
## Linting
|
21
|
-
|
22
|
-
Workarea stylesheets are linted using the [scss-lint gem](https://rubygems.org/gems/scss-lint). A `.scss-lint.yml` file in each Workarea repository configures the linter.
|
23
|
-
|
24
|
-
|
@@ -1,67 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: Stylesheets Overview
|
3
|
-
excerpt: A new Workarea application includes no stylesheets of its own. Create one to see for yourself :) However, the Workarea platform adds an Admin and a Storefront to the application, and each of those includes its own stylesheets to bootstrap the applicat
|
4
|
-
---
|
5
|
-
|
6
|
-
# Stylesheets Overview
|
7
|
-
|
8
|
-
A new Workarea application includes no stylesheets of its own. [Create one to see for yourself](create-a-new-app.html) :) However, the Workarea platform adds an Admin and a Storefront to the application, and each of those includes its own stylesheets to bootstrap the application.
|
9
|
-
|
10
|
-
This guide provides an overview of (1) how to get stylesheets on the page and (2) understanding stylesheets provided by Workarea.
|
11
|
-
|
12
|
-
## Getting Stylesheets on the Page
|
13
|
-
|
14
|
-
Looking at the Storefront of a vanilla Workarea app (no customizations or plugins) in production, the home page includes one `style` element and one stylesheet `link` tag.
|
15
|
-
|
16
|
-
The `style` tag is included in all Workarea layout files to provide parity with the `<meta name=viewport>` element. Some devices support the HTML element, while others require the viewport rules to be specified in CSS. Workarea includes the styles within the layout to keep this logic in one place.
|
17
|
-
|
18
|
-
workarea-storefront/app/views/layouts/workarea/storefront/application.html.haml:
|
19
|
-
|
20
|
-
```
|
21
|
-
<!-- ... -->
|
22
|
-
|
23
|
-
<head>
|
24
|
-
<!-- ... -->
|
25
|
-
|
26
|
-
<meta name='viewport' content='width=device-width, user-scalable=no'>
|
27
|
-
|
28
|
-
<!-- ... -->
|
29
|
-
|
30
|
-
<style>
|
31
|
-
@-ms-viewport { width: device-width; }
|
32
|
-
@viewport { width: device-width; }
|
33
|
-
</style>
|
34
|
-
|
35
|
-
<!-- ... -->
|
36
|
-
</head>
|
37
|
-
|
38
|
-
<!-- ... -->
|
39
|
-
```
|
40
|
-
|
41
|
-
A single stylesheet is also reference in the document `head`. It looks something like this.
|
42
|
-
|
43
|
-
```
|
44
|
-
<link rel="stylesheet" media="all" href="https://vanilla-app-production-workarea.cdn-ssl.com/assets/workarea/storefront/application-4db34e2c17577a8bd410f364367a61481494c5fd1bb25217b05b14a426b54abb.css">
|
45
|
-
```
|
46
|
-
|
47
|
-
The file name of the stylesheet above is:
|
48
|
-
|
49
|
-
`application-4db34e2c17577a8bd410f364367a61481494c5fd1bb25217b05b14a426b54abb.css`
|
50
|
-
|
51
|
-
**This is the application stylesheet manifests, the primary mechanism for adding and removing stylesheets in your app**. Unless you have a good reason to do otherwise, **[Add and remove stylesheets using a manifest](add-stylesheets-through-a-manifest.html)**. Not familiar with asset manifests? [I've got you covered](rails-asset-manifests.html).
|
52
|
-
|
53
|
-
If you do have a good reason to do otherwise, you can also [add CSS through the Admin UI](add-css-through-the-admin-ui.html).
|
54
|
-
|
55
|
-
Plugins can add their own assets to your app as well, so check out [Appending](appending.html) to take control of that process.
|
56
|
-
|
57
|
-
## Stylesheets According to Workarea
|
58
|
-
|
59
|
-
To understand the structure of the stylesheets provided by Workarea you should familiarize yourself with the [CSS Architectural overview](css-architectural-overview.html) documentation.
|
60
|
-
|
61
|
-
Workarea also has a feature test helper file that is included in the test environment only. This file is covered in the [Feature Test Helper Stylesheet](feature-spec-helper-stylesheet.html) guide.
|
62
|
-
|
63
|
-
## Some Last Words on Stylesheets
|
64
|
-
|
65
|
-
Lastly, UI components are documented and tested using [style guides](style-guides.html) within each application.
|
66
|
-
|
67
|
-
If you'd care to [contribute](contribute-code.html) code back to the platform, or if you obsess over code style, check out the Workarea [stylesheet coding standards](stylesheet-coding-standards.html).
|
@@ -1,81 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: SwappableList Data Structure
|
3
|
-
excerpt: "SwappableList is a data structure in Workarea, typically used for storing a mutatable list of values in the app configuration. Learn why it's used in the platform and how you can use it on your own projects in this guide."
|
4
|
-
---
|
5
|
-
|
6
|
-
# SwappableList Data Structure
|
7
|
-
|
8
|
-
Workarea introduces a new data structure in its configuration, called `Workarea::SwappableList`. Based on [Rails::Configuration::MiddlewareStackProxy](https://api.rubyonrails.org/classes/Rails/Configuration/MiddlewareStackProxy.html), the object used in `Rails.configuration.middleware`, a swappable list is useful for lists of configuration that may change based on the implementation. It's especially useful in the platform as a means of providing a default, ordered list of configured values that can be changed in an implementation without needing to know the full breadth of the list. Generally, Workarea uses Swappable Lists much like Rails and Rack do: Defining an enumerated list of class names that are "chained" together by some input and output a mutated result.
|
9
|
-
|
10
|
-
## Implementation
|
11
|
-
|
12
|
-
`Workarea::SwappableList` is an [Enumerable](https://ruby-doc.org/core/Enumerable.html) object that includes the following extra methods for mutating the data structure in place:
|
13
|
-
|
14
|
-
- `#insert` (aliased to `#insert_before`) for adding a new element to the end of the list, or before a given element in the list
|
15
|
-
- `#insert_after` for adding a new element after a given element in the list
|
16
|
-
- `#swap` for swapping two elements that already exist in the list
|
17
|
-
|
18
|
-
## Usage
|
19
|
-
|
20
|
-
Workarea uses Swappable Lists in all configuration settings that contain a collection of values. As described briefly above, this allows implementations and plugins to customize the order and content of these configuration settings without needing to know what the full content of the configuration setting was prior to changing it.
|
21
|
-
|
22
|
-
For example, in your project you may want to customize the way taxes are calculated. You don't want the original `Workarea::Pricing::Calculators::TaxCalculator` to run, you want your own class to take its place. To ensure Workarea uses your class instead of its own out-of-box implementation, you'll be using Swappable List's `#swap` method to replace your new value with the existing found value in the list:
|
23
|
-
|
24
|
-
```ruby
|
25
|
-
Workarea.configure do |config|
|
26
|
-
config.pricing_calculators.swap(
|
27
|
-
'Workarea::Pricing::Calculators::TaxCalculator',
|
28
|
-
'Workarea::Pricing::Calculators::CustomTaxCalculator'
|
29
|
-
)
|
30
|
-
end
|
31
|
-
```
|
32
|
-
|
33
|
-
Here's another example: Perhaps you are implementing a means of spending rewards points in exchange for a discounted price on customers orders. You still want the `DiscountCalculator` to apply for any other custom discounts the retailer may want to use, but right afterwards you can inject a `RewardsCalculator` to deduct money off of the order if rewards points are being spent on it. You can accomplish this by using the `#insert_after` method to find a given element in the list and place your element in the next position.
|
34
|
-
|
35
|
-
```ruby
|
36
|
-
Workarea.configure do |config|
|
37
|
-
config.pricing_calculators.insert_after(
|
38
|
-
'Workarea::Pricing::Calculators::DiscountCalculator',
|
39
|
-
'Workarea::Pricing::Calculators::RewardsCalculator'
|
40
|
-
)
|
41
|
-
end
|
42
|
-
```
|
43
|
-
|
44
|
-
You can also insert elements in the list before other elements, with the `#insert_before` method. This allows you to "prepend" functionality onto complex logical operations, like search. Here's an example of modifying search middleware by first checking whether the search term matches one of any product's keywords. When a keyword match is found, the `Workarea::Search::StorefrontSearch::KeywordRedirect` middleware class redirects the user to that product's URL instead of actually performing the search query.
|
45
|
-
|
46
|
-
```ruby
|
47
|
-
Workarea.configure do |config|
|
48
|
-
config.storefront_search_middleware.insert_before(
|
49
|
-
'Workarea::Search::StorefrontSearch::ProductMultipass',
|
50
|
-
'Workarea::Search::StorefrontSearch::KeywordRedirect'
|
51
|
-
)
|
52
|
-
end
|
53
|
-
```
|
54
|
-
|
55
|
-
Finally, since Swappable Lists mix in the `Enumerable` module, any of its methods to add or remove content are available in any Swappable List. Here's what the [share plugin](https://github.com/workarea-commerce/workarea-share) does in the initialization process to ensure that it adds its own sharing seeds so you can see how the plugin works:
|
56
|
-
|
57
|
-
```ruby
|
58
|
-
Workarea.config.seeds.push('Workarea::SharesSeeds')
|
59
|
-
# this is also equivalent to ...
|
60
|
-
Workarea.config.seeds << 'Workarea::SharesSeeds'
|
61
|
-
```
|
62
|
-
|
63
|
-
Swappable Lists can also be created ad-hoc for your own purposes. In **config/initializers/workarea.rb**:
|
64
|
-
|
65
|
-
```ruby
|
66
|
-
Workarea.configure do |config|
|
67
|
-
# By default, the swappable list is empty
|
68
|
-
config.order_export_middleware = Workarea::SwappableList.new
|
69
|
-
|
70
|
-
# ...but you can also get it started with some default values
|
71
|
-
config.product_import_middleware = Workarea::SwappableList.new([
|
72
|
-
'Workarea::Mach::ProductImport::ProductAttributes',
|
73
|
-
'Workarea::Mach::ProductImport::Variants',
|
74
|
-
'Workarea::Mach::ProductImport::Inventory',
|
75
|
-
'Workarea::Mach::ProductImport::Pricing',
|
76
|
-
'Workarea::Mach::ProductImport::Persistence'
|
77
|
-
])
|
78
|
-
end
|
79
|
-
```
|
80
|
-
|
81
|
-
**NOTE:** You'll notice that swappable lists typically include class names, rather than their constants. It's a best practice when initializing Rails apps to not use any auto-loaded constants, as their actual place in memory may change between reloads. Instead, refer to classes by their String class names and `#constantize` them when the classes need to be instantiated.
|
@@ -1,102 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: System Emails
|
3
|
-
excerpt: System emails are sent from both the admin and storefront engines. All system emails may be customized like any other view in the system, by first overriding the mailer views and associated stylesheets.
|
4
|
-
---
|
5
|
-
|
6
|
-
# System Emails
|
7
|
-
|
8
|
-
System emails are sent from both the admin and storefront engines. All system emails may be customized like any other view in the system, by first [overriding](overriding.html) the mailer views and associated stylesheets.
|
9
|
-
|
10
|
-
In both the admin and storefront emails are comprised of
|
11
|
-
|
12
|
-
- an email view layout
|
13
|
-
- a number of mailer views, all wrapped in the email view layout
|
14
|
-
- an email stylesheet manifest, referenced by the email view layout
|
15
|
-
- a number of stylesheets, all referenced by the email stylesheet manifest
|
16
|
-
|
17
|
-
Unlike the front-end of either engine, the stylesheets responsible for styling the system emails are minimial. They are independent from their respective engine's styling, in that they have a separate manifest, but styles can be pulled in from the parent engine easily.
|
18
|
-
|
19
|
-
An example of can be found in the `email/_settings.scss` file:
|
20
|
-
|
21
|
-
```
|
22
|
-
/*------------------------------------*\
|
23
|
-
#SETTINGS
|
24
|
-
\*------------------------------------*/
|
25
|
-
|
26
|
-
/**
|
27
|
-
* In this file you can override a variables !default value before it is
|
28
|
-
* imported, effectively adjusting the theme of the site for the site's emails.
|
29
|
-
*/
|
30
|
-
|
31
|
-
$font-size: 16px !default;
|
32
|
-
|
33
|
-
@import 'workarea/storefront/settings/colors';
|
34
|
-
@import 'workarea/storefront/settings/global';
|
35
|
-
@import 'workarea/storefront/settings/typography';
|
36
|
-
|
37
|
-
/**
|
38
|
-
* Email-specific variables are defined separately.
|
39
|
-
*/
|
40
|
-
|
41
|
-
$email-max-width: 600px !default;
|
42
|
-
$email-background-color: $light-gray !default;
|
43
|
-
```
|
44
|
-
|
45
|
-
In the above example the `@import` directives here are pulling in the settings from the parent engine for use within the emails.
|
46
|
-
|
47
|
-
## Customize System Emails
|
48
|
-
|
49
|
-
### The Template
|
50
|
-
|
51
|
-
The actual template contained within the email layout is derived from the [Hybrid Cerberus](https://github.com/TedGoas/Cerberus) template. It was chosen because of its wide adoption, semantic versioning, and active community.
|
52
|
-
|
53
|
-
Keeping with the spirit of the project, all comments were retained as the template was converted from HTML to Haml for our use in Workarea. Reading through the layout once should give you a clear picture of what the template is attempting to do.
|
54
|
-
|
55
|
-
Another diversion from the original template was the removal of all inline CSS, excluding those defined in the `head` of the document. Ultimately the template is rendered through [Premailer](https://github.com/fphilipe/premailer-rails), which automatically transforms external CSS into inline CSS.
|
56
|
-
|
57
|
-
### Premailer
|
58
|
-
|
59
|
-
Premailer's role is to parse an email with a linked, external stylesheet file and apply any the styles defined as inline CSS to each matching element. In short this helps developers write CSS in the way they are accostomed without having to endure the mental gymnastics of classical email template development.
|
60
|
-
|
61
|
-
Here is a contrived example of how Premailer works. Given the following CSS:
|
62
|
-
|
63
|
-
```
|
64
|
-
/** from 'workarea/storefront/email/_base.scss' */
|
65
|
-
$font-size: 16px !default;
|
66
|
-
$line-height: 1.5 !default;
|
67
|
-
|
68
|
-
p {
|
69
|
-
font-size: $font-size;
|
70
|
-
line-height: $line-height;
|
71
|
-
}
|
72
|
-
```
|
73
|
-
|
74
|
-
And template:
|
75
|
-
|
76
|
-
```
|
77
|
-
...
|
78
|
-
<body>
|
79
|
-
<p>Hello World!</p>
|
80
|
-
</body>
|
81
|
-
...
|
82
|
-
```
|
83
|
-
|
84
|
-
Premailer will provide:
|
85
|
-
|
86
|
-
```
|
87
|
-
...
|
88
|
-
<body>
|
89
|
-
<p style='font-size: 16px; line-height: 1.5;'>Hello World!</p>
|
90
|
-
</body>
|
91
|
-
...
|
92
|
-
```
|
93
|
-
|
94
|
-
Another helpful feature Premailer provides is automatically generated text-only versions of each email template. These text-only emails should be satisfactory out-of-the-box, but if customization is required, they can be manually created and customized to your liking.
|
95
|
-
|
96
|
-
## Preview System Emails in a Browser
|
97
|
-
|
98
|
-
Rails provides functionality to [preview emails in a browser](http://api.rubyonrails.org/v4.1/classes/ActionMailer/Base.html#class-ActionMailer::Base-label-Previewing+emails). All Workarea emails provide previews out of the box.
|
99
|
-
|
100
|
-
View an index of email previews at the following path in your app: _/rails/mailers/_
|
101
|
-
|
102
|
-
|
@@ -1,8 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: Taggable
|
3
|
-
excerpt: A taggable is an application document that includes the Mongoid::Document::Taggable module from the mongoid-simple-tags Ruby library (source). The Mongoid::Document::Taggable module provides tagging functionality that is explained in the library's REA
|
4
|
-
---
|
5
|
-
|
6
|
-
# Taggable
|
7
|
-
|
8
|
-
A <dfn>taggable</dfn> is an [application document](application-document.html) that includes the `Mongoid::Document::Taggable` module. This mixin module provides tagging functionality similar to the **mongoid-simple-tags** gem, further explained in that library's [README](http://www.rubydoc.info/gems/mongoid-simple-tags/0.1.3/file/README.rdoc) and [API docs](http://www.rubydoc.info/gems/mongoid-simple-tags/0.1.3/Mongoid/Document/Taggable).
|
@@ -1,16 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: Test a Credit Card Transaction
|
3
|
-
excerpt: Active Merchant provides the following credit card numbers for use in development environments.
|
4
|
-
---
|
5
|
-
|
6
|
-
# Test a Credit Card Transaction
|
7
|
-
|
8
|
-
[Active Merchant](http://activemerchant.org/) provides the following credit card numbers for use in development environments.
|
9
|
-
|
10
|
-
| Card Number | Result |
|
11
|
-
| --- | --- |
|
12
|
-
| 1 | Successful tansaction |
|
13
|
-
| 2 | Declined transaction |
|
14
|
-
| 3 | Payment processing error |
|
15
|
-
|
16
|
-
|
@@ -1,34 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: Test if a Plugin is Installed
|
3
|
-
excerpt: It may be necessary to enable certain plugin functionality based on the presence of other plugins. The Workarea::Plugin.installed? method may be used to test if a plugin is installed.
|
4
|
-
---
|
5
|
-
|
6
|
-
# Test if a Plugin is Installed
|
7
|
-
|
8
|
-
It may be necessary to enable certain plugin functionality based on the presence of other plugins. The `Workarea::Plugin.installed?` method may be used to test if a plugin is installed.
|
9
|
-
|
10
|
-
```
|
11
|
-
Workarea::Plugin.installed?('Workarea::WishLists')
|
12
|
-
Workarea::Plugin.installed?('wish_lists')
|
13
|
-
Workarea::Plugin.installed?(:wish_lists)
|
14
|
-
```
|
15
|
-
|
16
|
-
For example, in the API plugin, you want to add functionality if the Wish Lists plugin is present.
|
17
|
-
|
18
|
-
```
|
19
|
-
if Workarea::Plugin.installed?(:wish_lists)
|
20
|
-
module Workarea
|
21
|
-
module Api
|
22
|
-
module Users
|
23
|
-
class WishListsController < Api::ApplicationController
|
24
|
-
def show
|
25
|
-
@user = User.find(params[:user_id])
|
26
|
-
@wish_list = WishList.for_user(@user.id)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
```
|
34
|
-
|