workarea 3.4.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rubocop.yml +326 -0
- data/CHANGELOG.md +20501 -0
- data/README.md +163 -0
- data/docker-compose.yml +27 -0
- data/docs/Gemfile +8 -0
- data/docs/bin/middleman +29 -0
- data/docs/config.rb +87 -0
- data/docs/config.ru +7 -0
- data/docs/data/articles.yml +157 -0
- data/docs/package.json +15 -0
- data/docs/source/404.html.erb +13 -0
- data/docs/source/articles/access-routes-in-javascript.html.md +33 -0
- data/docs/source/articles/add-a-content-area.html.md +169 -0
- data/docs/source/articles/add-a-content-block-type.html.md +334 -0
- data/docs/source/articles/add-a-report.html.md +202 -0
- data/docs/source/articles/add-css-through-the-admin-ui.html.md +30 -0
- data/docs/source/articles/add-javascript-through-a-manifest.html.md +367 -0
- data/docs/source/articles/add-javascript-through-a-view.html.md +80 -0
- data/docs/source/articles/add-javascript-through-the-admin-ui.html.md +30 -0
- data/docs/source/articles/add-metrics.html.md +58 -0
- data/docs/source/articles/add-or-replace-a-pricing-calculator.html.md +150 -0
- data/docs/source/articles/add-remove-or-change-a-mongoid-validation.html.md +147 -0
- data/docs/source/articles/add-remove-or-change-a-product-template.html.md +142 -0
- data/docs/source/articles/add-remove-sort-and-group-storefront-search-filters.html.md +483 -0
- data/docs/source/articles/add-stylesheets-through-a-manifest.html.md +276 -0
- data/docs/source/articles/add-system-content.html.md +138 -0
- data/docs/source/articles/analytics-overview.html.md +51 -0
- data/docs/source/articles/analyze-storefront-search-results.html.md +261 -0
- data/docs/source/articles/api-overview.html.md +35 -0
- data/docs/source/articles/appending.html.md +506 -0
- data/docs/source/articles/application-document.html.md +88 -0
- data/docs/source/articles/automated-javascript-testing.html.md +162 -0
- data/docs/source/articles/b2b-overview.html.md +64 -0
- data/docs/source/articles/browser-and-device-support.html.md +47 -0
- data/docs/source/articles/change-product-placeholder-image.html.md +39 -0
- data/docs/source/articles/change-storefront-search-results.html.md +283 -0
- data/docs/source/articles/change-the-storefront-product-pricing-ui.html.md +348 -0
- data/docs/source/articles/change-the-storefront-search-filters-ui.html.md +103 -0
- data/docs/source/articles/checkout.html.md +479 -0
- data/docs/source/articles/commerce-model.html.md +164 -0
- data/docs/source/articles/configuration-for-hosting.html.md +106 -0
- data/docs/source/articles/configuration.html.md +406 -0
- data/docs/source/articles/configure-a-payment-gateway.html.md +58 -0
- data/docs/source/articles/configure-asset-storage.html.md +29 -0
- data/docs/source/articles/configure-asset-types.html.md +18 -0
- data/docs/source/articles/configure-contact-form-subjects-list.html.md +24 -0
- data/docs/source/articles/configure-imageoptim.html.md +23 -0
- data/docs/source/articles/configure-locales.html.md +45 -0
- data/docs/source/articles/configure-logins-and-authentication.html.md +42 -0
- data/docs/source/articles/configure-low-inventory-threshold.html.md +26 -0
- data/docs/source/articles/configure-product-image-sizes-and-processing.html.md +28 -0
- data/docs/source/articles/content.html.md +554 -0
- data/docs/source/articles/contentable.html.md +41 -0
- data/docs/source/articles/contribute-code.html.md +69 -0
- data/docs/source/articles/contribute-documentation.html.md +60 -0
- data/docs/source/articles/create-a-custom-discount.html.md +234 -0
- data/docs/source/articles/create-a-new-app.html.md +131 -0
- data/docs/source/articles/create-a-plugin.html.md +19 -0
- data/docs/source/articles/create-a-style-guide.html.md +71 -0
- data/docs/source/articles/create-a-theme.html.md +134 -0
- data/docs/source/articles/css-architectural-overview.html.md +89 -0
- data/docs/source/articles/customize-a-helper.html.md +91 -0
- data/docs/source/articles/decoration.html.md +415 -0
- data/docs/source/articles/define-and-configure-inventory-policies.html.md +107 -0
- data/docs/source/articles/documentation-style-guide.html.md +48 -0
- data/docs/source/articles/documentation.html.md +54 -0
- data/docs/source/articles/domain-modeling.html.md +82 -0
- data/docs/source/articles/error-pages.html.md.erb +95 -0
- data/docs/source/articles/extension-overview.html.md +152 -0
- data/docs/source/articles/favicon-support.html.md +112 -0
- data/docs/source/articles/feature-spec-helper-stylesheet.html.md +25 -0
- data/docs/source/articles/featurejs-and-feature-spec-helper.html.md +20 -0
- data/docs/source/articles/help-and-support.html.md +34 -0
- data/docs/source/articles/html-fragment-caching.html.md +46 -0
- data/docs/source/articles/http-caching.html.md +43 -0
- data/docs/source/articles/i18n.html.md +35 -0
- data/docs/source/articles/images-flow.html.md +10 -0
- data/docs/source/articles/index-storefront-search-documents.html.md +104 -0
- data/docs/source/articles/infrastructure.html.md +46 -0
- data/docs/source/articles/installing.html.md +61 -0
- data/docs/source/articles/integrate-a-payment-gateway.html.md +124 -0
- data/docs/source/articles/integrate-a-web-analytics-provider.html.md +35 -0
- data/docs/source/articles/integrate-an-inventory-management-system.html.md +88 -0
- data/docs/source/articles/integrating-with-other-software.html.md +59 -0
- data/docs/source/articles/inventory.html.md +352 -0
- data/docs/source/articles/javascript-coding-standards.html.md +30 -0
- data/docs/source/articles/javascript-modules.html.md +174 -0
- data/docs/source/articles/javascript-overview.html.md +62 -0
- data/docs/source/articles/javascript-reference-documentation.html.md +51 -0
- data/docs/source/articles/javascript-templates.html.md +52 -0
- data/docs/source/articles/low-level-caching.html.md +25 -0
- data/docs/source/articles/maintain-a-plugin.html.md +12 -0
- data/docs/source/articles/maintenance-policy.html.md +79 -0
- data/docs/source/articles/navigable.html.md +51 -0
- data/docs/source/articles/navigating-the-code.html.md +149 -0
- data/docs/source/articles/navigation.html.md +386 -0
- data/docs/source/articles/order-life-cycle.html.md +546 -0
- data/docs/source/articles/order-pricing.html.md +389 -0
- data/docs/source/articles/orders-and-items.html.md +210 -0
- data/docs/source/articles/orders.html.md +66 -0
- data/docs/source/articles/overriding.html.md +155 -0
- data/docs/source/articles/overview.html.md +43 -0
- data/docs/source/articles/plugins-overview.html.md +12 -0
- data/docs/source/articles/prerequisites-and-dependencies.html.md +202 -0
- data/docs/source/articles/products.html.md.erb +1270 -0
- data/docs/source/articles/progressive-web-application-support.html.md +148 -0
- data/docs/source/articles/rails-asset-manifests.html.md +33 -0
- data/docs/source/articles/rails-asset-view-helpers.html.md +25 -0
- data/docs/source/articles/reading-data.html.md +10 -0
- data/docs/source/articles/releasable.html.md +37 -0
- data/docs/source/articles/report-a-bug.html.md +75 -0
- data/docs/source/articles/ruby-coding-standards.html.md +10 -0
- data/docs/source/articles/run-sidekiq-in-a-local-environment.html.md +40 -0
- data/docs/source/articles/searching.html.md +1005 -0
- data/docs/source/articles/security-policy.html.md +42 -0
- data/docs/source/articles/seeds.html.md +345 -0
- data/docs/source/articles/shipping.html.md +756 -0
- data/docs/source/articles/sort-and-exclude-product-options.html.md +47 -0
- data/docs/source/articles/storefront-search-features.html.md +568 -0
- data/docs/source/articles/storefront-searches.html.md +126 -0
- data/docs/source/articles/style-guides.html.md +21 -0
- data/docs/source/articles/stylesheet-coding-standards.html.md +24 -0
- data/docs/source/articles/stylesheets-overview.html.md +67 -0
- data/docs/source/articles/swappable-list-data-structure.html.md +81 -0
- data/docs/source/articles/system-emails.html.md +102 -0
- data/docs/source/articles/taggable.html.md +8 -0
- data/docs/source/articles/test-a-credit-card-transaction.html.md +16 -0
- data/docs/source/articles/test-if-a-plugin-is-installed.html.md +34 -0
- data/docs/source/articles/testing.html.md +914 -0
- data/docs/source/articles/themes-overview.html.md +155 -0
- data/docs/source/articles/translate-administrable-content.html.md +14 -0
- data/docs/source/articles/translate-javascript-content.html.md +16 -0
- data/docs/source/articles/translate-or-customize-message-content.html.md +29 -0
- data/docs/source/articles/translate-or-customize-static-content.html.md +30 -0
- data/docs/source/articles/use-an-existing-workarea-app.html.md +108 -0
- data/docs/source/articles/view-models.html.md +509 -0
- data/docs/source/articles/views.html.md +14 -0
- data/docs/source/articles/workers.html.md +613 -0
- data/docs/source/articles/writing-data.html.md +10 -0
- data/docs/source/cli.html.md +163 -0
- 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 +1 -0
- data/docs/source/images/arrow_white.svg +1 -0
- 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 +1 -0
- 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 +1 -0
- data/docs/source/images/image-group-content-block-in-storefront.png +0 -0
- data/docs/source/images/images.svg +1 -0
- 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 +1 -0
- data/docs/source/images/menu.svg +2 -0
- data/docs/source/images/mongo-replica-set.svg +1 -0
- 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 +1 -0
- 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 +1 -0
- 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 +1 -0
- 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 +3 -0
- 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 +1 -0
- data/docs/source/images/worst-performing-searches-on-results-customization-page.png +0 -0
- data/docs/source/images/writing-data.svg +1 -0
- data/docs/source/index.html.erb +167 -0
- data/docs/source/javascripts/jquery.js +2 -0
- data/docs/source/javascripts/lunr.js +7 -0
- data/docs/source/javascripts/site.js +299 -0
- data/docs/source/javascripts/vendor/highlight.pack.js +2 -0
- data/docs/source/layouts/article.erb +106 -0
- data/docs/source/layouts/bare.erb +46 -0
- data/docs/source/layouts/layout.erb +43 -0
- data/docs/source/release-notes.html.md +258 -0
- data/docs/source/release-notes/workarea-3-0-0.html.md +146 -0
- data/docs/source/release-notes/workarea-3-0-1.html.md +161 -0
- data/docs/source/release-notes/workarea-3-0-10.html.md +39 -0
- data/docs/source/release-notes/workarea-3-0-11.html.md +277 -0
- data/docs/source/release-notes/workarea-3-0-12.html.md +14 -0
- data/docs/source/release-notes/workarea-3-0-13.html.md +153 -0
- data/docs/source/release-notes/workarea-3-0-14.html.md +93 -0
- data/docs/source/release-notes/workarea-3-0-15.html.md +107 -0
- data/docs/source/release-notes/workarea-3-0-16.html.md +36 -0
- data/docs/source/release-notes/workarea-3-0-17.html.md +141 -0
- data/docs/source/release-notes/workarea-3-0-18.html.md +123 -0
- data/docs/source/release-notes/workarea-3-0-19.html.md +160 -0
- data/docs/source/release-notes/workarea-3-0-2.html.md +222 -0
- data/docs/source/release-notes/workarea-3-0-20.html.md +95 -0
- data/docs/source/release-notes/workarea-3-0-21.html.md +168 -0
- data/docs/source/release-notes/workarea-3-0-22.html.md +268 -0
- data/docs/source/release-notes/workarea-3-0-23.html.md +173 -0
- data/docs/source/release-notes/workarea-3-0-24.html.md +19 -0
- data/docs/source/release-notes/workarea-3-0-25.html.md +26 -0
- data/docs/source/release-notes/workarea-3-0-26.html.md +199 -0
- data/docs/source/release-notes/workarea-3-0-27.html.md +113 -0
- data/docs/source/release-notes/workarea-3-0-28.html.md +39 -0
- data/docs/source/release-notes/workarea-3-0-29.html.md +73 -0
- data/docs/source/release-notes/workarea-3-0-3.html.md +35 -0
- data/docs/source/release-notes/workarea-3-0-30.html.md +186 -0
- data/docs/source/release-notes/workarea-3-0-31.html.md +125 -0
- data/docs/source/release-notes/workarea-3-0-32.html.md +73 -0
- data/docs/source/release-notes/workarea-3-0-33.html.md +137 -0
- data/docs/source/release-notes/workarea-3-0-34.html.md +203 -0
- data/docs/source/release-notes/workarea-3-0-35.html.md +205 -0
- data/docs/source/release-notes/workarea-3-0-36.html.md +105 -0
- data/docs/source/release-notes/workarea-3-0-37.html.md +144 -0
- data/docs/source/release-notes/workarea-3-0-38.html.md +73 -0
- data/docs/source/release-notes/workarea-3-0-39.html.md +77 -0
- data/docs/source/release-notes/workarea-3-0-4.html.md +14 -0
- data/docs/source/release-notes/workarea-3-0-40.html.md +130 -0
- data/docs/source/release-notes/workarea-3-0-41.html.md +70 -0
- data/docs/source/release-notes/workarea-3-0-42.html.md +52 -0
- data/docs/source/release-notes/workarea-3-0-43.html.md +72 -0
- data/docs/source/release-notes/workarea-3-0-44.html.md +93 -0
- data/docs/source/release-notes/workarea-3-0-45.html.md +61 -0
- data/docs/source/release-notes/workarea-3-0-46.html.md +171 -0
- data/docs/source/release-notes/workarea-3-0-47.html.md +130 -0
- data/docs/source/release-notes/workarea-3-0-48.html.md +160 -0
- data/docs/source/release-notes/workarea-3-0-49.html.md +28 -0
- data/docs/source/release-notes/workarea-3-0-5.html.md +225 -0
- data/docs/source/release-notes/workarea-3-0-50.html.md +74 -0
- data/docs/source/release-notes/workarea-3-0-51.html.md +61 -0
- data/docs/source/release-notes/workarea-3-0-52.html.md +76 -0
- data/docs/source/release-notes/workarea-3-0-53.html.md +126 -0
- data/docs/source/release-notes/workarea-3-0-54.html.md +112 -0
- data/docs/source/release-notes/workarea-3-0-55.html.md +105 -0
- data/docs/source/release-notes/workarea-3-0-56.html.md +56 -0
- data/docs/source/release-notes/workarea-3-0-57.html.md +82 -0
- data/docs/source/release-notes/workarea-3-0-58.html.md +153 -0
- data/docs/source/release-notes/workarea-3-0-59.html.md +78 -0
- data/docs/source/release-notes/workarea-3-0-6.html.md +165 -0
- data/docs/source/release-notes/workarea-3-0-60.html.md +43 -0
- data/docs/source/release-notes/workarea-3-0-61.html.md +46 -0
- data/docs/source/release-notes/workarea-3-0-62.html.md +23 -0
- data/docs/source/release-notes/workarea-3-0-63.html.md +25 -0
- data/docs/source/release-notes/workarea-3-0-64.html.md +25 -0
- data/docs/source/release-notes/workarea-3-0-65.html.md +37 -0
- data/docs/source/release-notes/workarea-3-0-7.html.md +207 -0
- data/docs/source/release-notes/workarea-3-0-8.html.md +337 -0
- data/docs/source/release-notes/workarea-3-0-9.html.md +196 -0
- data/docs/source/release-notes/workarea-3-1-0.html.md +414 -0
- data/docs/source/release-notes/workarea-3-1-1.html.md +139 -0
- data/docs/source/release-notes/workarea-3-1-10.html.md +19 -0
- data/docs/source/release-notes/workarea-3-1-11.html.md +27 -0
- data/docs/source/release-notes/workarea-3-1-12.html.md +216 -0
- data/docs/source/release-notes/workarea-3-1-13.html.md +113 -0
- data/docs/source/release-notes/workarea-3-1-14.html.md +39 -0
- data/docs/source/release-notes/workarea-3-1-15.html.md +107 -0
- data/docs/source/release-notes/workarea-3-1-16.html.md +188 -0
- data/docs/source/release-notes/workarea-3-1-17.html.md +141 -0
- data/docs/source/release-notes/workarea-3-1-18.html.md +73 -0
- data/docs/source/release-notes/workarea-3-1-19.html.md +137 -0
- data/docs/source/release-notes/workarea-3-1-2.html.md +55 -0
- data/docs/source/release-notes/workarea-3-1-20.html.md +203 -0
- data/docs/source/release-notes/workarea-3-1-21.html.md +205 -0
- data/docs/source/release-notes/workarea-3-1-22.html.md +121 -0
- data/docs/source/release-notes/workarea-3-1-23.html.md +144 -0
- data/docs/source/release-notes/workarea-3-1-24.html.md +94 -0
- data/docs/source/release-notes/workarea-3-1-25.html.md +77 -0
- data/docs/source/release-notes/workarea-3-1-26.html.md +130 -0
- data/docs/source/release-notes/workarea-3-1-27.html.md +70 -0
- data/docs/source/release-notes/workarea-3-1-28.html.md +52 -0
- data/docs/source/release-notes/workarea-3-1-29.html.md +44 -0
- data/docs/source/release-notes/workarea-3-1-3.html.md +185 -0
- data/docs/source/release-notes/workarea-3-1-30.html.md +72 -0
- data/docs/source/release-notes/workarea-3-1-31.html.md +93 -0
- data/docs/source/release-notes/workarea-3-1-32.html.md +61 -0
- data/docs/source/release-notes/workarea-3-1-33.html.md +171 -0
- data/docs/source/release-notes/workarea-3-1-34.html.md +130 -0
- data/docs/source/release-notes/workarea-3-1-35.html.md +179 -0
- data/docs/source/release-notes/workarea-3-1-36.html.md +28 -0
- data/docs/source/release-notes/workarea-3-1-37.html.md +74 -0
- data/docs/source/release-notes/workarea-3-1-38.html.md +61 -0
- data/docs/source/release-notes/workarea-3-1-39.html.md +96 -0
- data/docs/source/release-notes/workarea-3-1-4.html.md +148 -0
- data/docs/source/release-notes/workarea-3-1-40.html.md +126 -0
- data/docs/source/release-notes/workarea-3-1-41.html.md +128 -0
- data/docs/source/release-notes/workarea-3-1-42.html.md +105 -0
- data/docs/source/release-notes/workarea-3-1-43.html.md +37 -0
- data/docs/source/release-notes/workarea-3-1-44.html.md +82 -0
- data/docs/source/release-notes/workarea-3-1-45.html.md +153 -0
- data/docs/source/release-notes/workarea-3-1-46.html.md +91 -0
- data/docs/source/release-notes/workarea-3-1-47.html.md +65 -0
- data/docs/source/release-notes/workarea-3-1-48.html.md +46 -0
- data/docs/source/release-notes/workarea-3-1-49.html.md +23 -0
- data/docs/source/release-notes/workarea-3-1-5.html.md +169 -0
- data/docs/source/release-notes/workarea-3-1-50.html.md +42 -0
- data/docs/source/release-notes/workarea-3-1-51.html.md +25 -0
- data/docs/source/release-notes/workarea-3-1-52.html.md +57 -0
- data/docs/source/release-notes/workarea-3-1-6.html.md +117 -0
- data/docs/source/release-notes/workarea-3-1-7.html.md +176 -0
- data/docs/source/release-notes/workarea-3-1-8.html.md +283 -0
- data/docs/source/release-notes/workarea-3-1-9.html.md +212 -0
- data/docs/source/release-notes/workarea-3-2-0.html.md +1705 -0
- data/docs/source/release-notes/workarea-3-2-1.html.md +216 -0
- data/docs/source/release-notes/workarea-3-2-10.html.md +237 -0
- data/docs/source/release-notes/workarea-3-2-11.html.md +121 -0
- data/docs/source/release-notes/workarea-3-2-12.html.md +145 -0
- data/docs/source/release-notes/workarea-3-2-13.html.md +138 -0
- data/docs/source/release-notes/workarea-3-2-14.html.md +77 -0
- data/docs/source/release-notes/workarea-3-2-15.html.md +130 -0
- data/docs/source/release-notes/workarea-3-2-16.html.md +111 -0
- data/docs/source/release-notes/workarea-3-2-17.html.md +52 -0
- data/docs/source/release-notes/workarea-3-2-18.html.md +44 -0
- data/docs/source/release-notes/workarea-3-2-19.html.md +72 -0
- data/docs/source/release-notes/workarea-3-2-2.html.md +145 -0
- data/docs/source/release-notes/workarea-3-2-20.html.md +93 -0
- data/docs/source/release-notes/workarea-3-2-21.html.md +61 -0
- data/docs/source/release-notes/workarea-3-2-22.html.md +154 -0
- data/docs/source/release-notes/workarea-3-2-23.html.md +130 -0
- data/docs/source/release-notes/workarea-3-2-24.html.md +200 -0
- data/docs/source/release-notes/workarea-3-2-25.html.md +28 -0
- data/docs/source/release-notes/workarea-3-2-26.html.md +94 -0
- data/docs/source/release-notes/workarea-3-2-27.html.md +61 -0
- data/docs/source/release-notes/workarea-3-2-28.html.md +96 -0
- data/docs/source/release-notes/workarea-3-2-29.html.md +126 -0
- data/docs/source/release-notes/workarea-3-2-30.html.md +112 -0
- data/docs/source/release-notes/workarea-3-2-31.html.md +105 -0
- data/docs/source/release-notes/workarea-3-2-32.html.md +56 -0
- data/docs/source/release-notes/workarea-3-2-33.html.md +82 -0
- data/docs/source/release-notes/workarea-3-2-34.html.md +153 -0
- data/docs/source/release-notes/workarea-3-2-35.html.md +91 -0
- data/docs/source/release-notes/workarea-3-2-36.html.md +118 -0
- data/docs/source/release-notes/workarea-3-2-37.html.md +46 -0
- data/docs/source/release-notes/workarea-3-2-38.html.md +23 -0
- data/docs/source/release-notes/workarea-3-2-39.html.md +42 -0
- data/docs/source/release-notes/workarea-3-2-4.html.md +109 -0
- data/docs/source/release-notes/workarea-3-2-40.html.md +25 -0
- data/docs/source/release-notes/workarea-3-2-41.html.md +90 -0
- data/docs/source/release-notes/workarea-3-2-5.html.md +186 -0
- data/docs/source/release-notes/workarea-3-2-6.html.md +173 -0
- data/docs/source/release-notes/workarea-3-2-7.html.md +89 -0
- data/docs/source/release-notes/workarea-3-2-8.html.md +137 -0
- data/docs/source/release-notes/workarea-3-2-9.html.md +219 -0
- data/docs/source/release-notes/workarea-3-3-0.html.md +1272 -0
- data/docs/source/release-notes/workarea-3-3-1.html.md +324 -0
- data/docs/source/release-notes/workarea-3-3-10.html.md +69 -0
- data/docs/source/release-notes/workarea-3-3-11.html.md +72 -0
- data/docs/source/release-notes/workarea-3-3-12.html.md +136 -0
- data/docs/source/release-notes/workarea-3-3-13.html.md +61 -0
- data/docs/source/release-notes/workarea-3-3-14.html.md +196 -0
- data/docs/source/release-notes/workarea-3-3-15.html.md +167 -0
- data/docs/source/release-notes/workarea-3-3-16.html.md +234 -0
- data/docs/source/release-notes/workarea-3-3-17.html.md +82 -0
- data/docs/source/release-notes/workarea-3-3-18.html.md +165 -0
- data/docs/source/release-notes/workarea-3-3-19.html.md +106 -0
- data/docs/source/release-notes/workarea-3-3-2.html.md +72 -0
- data/docs/source/release-notes/workarea-3-3-20.html.md +116 -0
- data/docs/source/release-notes/workarea-3-3-21.html.md +228 -0
- data/docs/source/release-notes/workarea-3-3-22.html.md +125 -0
- data/docs/source/release-notes/workarea-3-3-23.html.md +154 -0
- data/docs/source/release-notes/workarea-3-3-24.html.md +70 -0
- data/docs/source/release-notes/workarea-3-3-25.html.md +114 -0
- data/docs/source/release-notes/workarea-3-3-26.html.md +260 -0
- data/docs/source/release-notes/workarea-3-3-27.html.md +138 -0
- data/docs/source/release-notes/workarea-3-3-28.html.md +147 -0
- data/docs/source/release-notes/workarea-3-3-29.html.md +63 -0
- data/docs/source/release-notes/workarea-3-3-3.html.md +153 -0
- data/docs/source/release-notes/workarea-3-3-30.html.md +102 -0
- data/docs/source/release-notes/workarea-3-3-31.html.md +57 -0
- data/docs/source/release-notes/workarea-3-3-32.html.md +44 -0
- data/docs/source/release-notes/workarea-3-3-33.html.md +114 -0
- data/docs/source/release-notes/workarea-3-3-4.html.md +332 -0
- data/docs/source/release-notes/workarea-3-3-5.html.md +242 -0
- data/docs/source/release-notes/workarea-3-3-6.html.md +100 -0
- data/docs/source/release-notes/workarea-3-3-7.html.md +148 -0
- data/docs/source/release-notes/workarea-3-3-8.html.md +163 -0
- data/docs/source/release-notes/workarea-3-3-9.html.md +93 -0
- data/docs/source/release-notes/workarea-3-4-0.html.md +580 -0
- data/docs/source/release-notes/workarea-3-4-1.html.md +150 -0
- data/docs/source/release-notes/workarea-3-4-10.html.md +72 -0
- data/docs/source/release-notes/workarea-3-4-11.html.md +60 -0
- data/docs/source/release-notes/workarea-3-4-12.html.md +155 -0
- data/docs/source/release-notes/workarea-3-4-2.html.md +188 -0
- data/docs/source/release-notes/workarea-3-4-3.html.md +136 -0
- data/docs/source/release-notes/workarea-3-4-4.html.md +114 -0
- data/docs/source/release-notes/workarea-3-4-5.html.md +275 -0
- data/docs/source/release-notes/workarea-3-4-6.html.md +169 -0
- data/docs/source/release-notes/workarea-3-4-7.html.md +162 -0
- data/docs/source/release-notes/workarea-3-4-8.html.md +95 -0
- data/docs/source/release-notes/workarea-3-4-9.html.md +135 -0
- data/docs/source/search.html.erb +34 -0
- data/docs/source/shared/_header.erb +61 -0
- data/docs/source/shared/_svgs.erb +17 -0
- data/docs/source/style_guide/index.html.erb +382 -0
- data/docs/source/stylesheets/_base.scss +125 -0
- data/docs/source/stylesheets/_components.scss +669 -0
- data/docs/source/stylesheets/_helpers.scss +10 -0
- data/docs/source/stylesheets/_opinions.scss +42 -0
- data/docs/source/stylesheets/_settings.scss +56 -0
- data/docs/source/stylesheets/_typography.scss +119 -0
- data/docs/source/stylesheets/site.css.scss +14 -0
- data/docs/source/stylesheets/vendor/_avalanche.scss +328 -0
- data/docs/source/stylesheets/vendor/_normalize.scss +341 -0
- data/docs/source/stylesheets/vendor/highlight/_tomorrow_night_blue.scss +75 -0
- data/docs/source/upgrade-guides.html.md +18 -0
- data/docs/source/upgrade-guides/workarea-3-4-0.html.md +152 -0
- data/docs/workarea_renderer.rb +8 -0
- data/docs/yarn.lock +2522 -0
- metadata +669 -0
@@ -0,0 +1,112 @@
|
|
1
|
+
---
|
2
|
+
title: Favicon Support
|
3
|
+
excerpt: Learn how Workarea manages favicons and how they are output in your application
|
4
|
+
---
|
5
|
+
|
6
|
+
# Favicon Support
|
7
|
+
|
8
|
+
Favicons are a collection of images used by browsers and mobile devices to visually represent a site within their user interfaces. Due to the variation between browsers and mobile devices, favicons are typically supplied in a variety of sizes and via a number of delivery methods.
|
9
|
+
|
10
|
+
Suffice it to say that long passed are the days of simply dropping a `favicon.ico` file in your site's root directory.
|
11
|
+
|
12
|
+
The good news is that Workarea provides a way to set and automate the creation and linking of these assets without developer intervention through the Admin.
|
13
|
+
|
14
|
+
## Setting an asset as a favicon
|
15
|
+
|
16
|
+
Within the Admin, a user may use an Asset's <em>tags</em> field to denote that the Asset should be used as a favicon.
|
17
|
+
|
18
|
+
<!-- TODO v3.4 mention the visual indicator -->
|
19
|
+
|
20
|
+
For a single Asset to be used as the site's favicon the Admin user may simply add the `favicon` tag to the chosen Asset. Once this is done, the platform will create, output, and link all necessary files automatically.
|
21
|
+
|
22
|
+
For more granular control over each generated favicon, an Admin user may apply tags to the chosen Asset in the following format: `favicon-SIZE`. For example, if the chosen Asset does not scale well and is visually unintelligible when scaled down to 16 pixels (the smallest required favicon size), the user may choose another, smaller Asset to replace this size by applying the `favicon-16x16` tag to the Asset.
|
23
|
+
|
24
|
+
The majority of the generated favicons will be of type `.png`, though a fallback `favicon.ico` file is still generated for canonical posterity and for use with older browsers. To manually override this icon, a user may simply denote an Asset as the `.ico` fallback by applying the `favicon-ico` tag to the Asset. Since tagging supports multiple, comma-delimited values, an Asset can carry more than one favicon tag at a time.
|
25
|
+
|
26
|
+
<!-- TODO v3.4 mention the favicon placeholder fallback -->
|
27
|
+
|
28
|
+
It should be noted that favicons are intended to be square images.
|
29
|
+
|
30
|
+
## Favicon asset and manifest automation
|
31
|
+
|
32
|
+
The markup necessary for rendering the generated favicons is added to each Storefront layout via methods found within `Workarea::Storefront::FaviconsHelper`. This helper renders the `workarea/storefront/favicons/tags` partial, where the following is generated:
|
33
|
+
|
34
|
+
<!-- TODO v3.4 remove web manifest? -->
|
35
|
+
|
36
|
+
* A link to a 180x180 pixel Apple Touch icon
|
37
|
+
* A link to a 32x32 pixel .png icon
|
38
|
+
* A link to a 16x16 pixel .ico icon
|
39
|
+
* A link to a web manifest file
|
40
|
+
* A meta tag providing the URL to a browserconfig file
|
41
|
+
* A meta tag to specify the tile color for use in the Microsoft Windows Metro UI
|
42
|
+
* A meta tag to specify the color of the browser's "theme", a feature available on some devices
|
43
|
+
|
44
|
+
The color-specific settings are output as the aforementioned meta tags in addition to appearing as entries within the web manifest and browserconfig files. These settings are configurable via:
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
Workarea.config.web_manifest.tile_color
|
48
|
+
Workarea.config.web_manifest.theme_color
|
49
|
+
```
|
50
|
+
|
51
|
+
URLs for each linked icon are provided by the following `FaviconsHelper` methods:
|
52
|
+
|
53
|
+
* `Workarea::Storefront::FaviconsHelper#favicons_path` generates a URL to a dynamically sized `.png` file
|
54
|
+
* `Workarea::Storefront::FaviconsHelper#favicon_path` generates a URL to the `favicon.ico` file
|
55
|
+
|
56
|
+
Each favicon is dynamically generated on demand using Dragonfly. The following custom dragonfly processors defined within `core/config/initializers/07_dragonfly.rb`:
|
57
|
+
|
58
|
+
* `:favicon` handles the resizing of a file to the passed size.
|
59
|
+
* `:favicon_ico` handles the conversion to the `.ico` format.
|
60
|
+
|
61
|
+
<!-- TODO v3.4 remove below -->
|
62
|
+
Lastly, if there is no Asset tagged as a favicon, the system will not generate any of the above.
|
63
|
+
|
64
|
+
## Favicon URLs
|
65
|
+
|
66
|
+
Storefront routes are provided to handle requests for an icon of a particular size and the `favicon.ico` file itself. These routes are:
|
67
|
+
|
68
|
+
* `dynamic_favicon` which takes no parameters, returning the `favicon.ico` and serving the file from `https://domain.com/favicon.ico`
|
69
|
+
* `dynamic_favicons` which takes a size parameter, returns a `.png` version and serving the file from, for example, `https://domain.com/favicons/32x32.png` if the requested size parameter is set to `32x32`.
|
70
|
+
|
71
|
+
Both of these routes are Dragonfly endpoints which handle the favicon rendering within `Workarea::AssetEndpoints::Favicons`. This class has two methods to match the provided routes:
|
72
|
+
|
73
|
+
* `result` handles the dynamic_favicons request, restricting sizes to those defined within `Workarea.config.favicon_allowed_sizes`, preventing DDOS attacks that may try to request many varying sizes at once.
|
74
|
+
* `ico` handles the generation of the `favicon.ico` file by finding the appropriate Asset and running it through the `:favicon_ico` Dragonfly processor.
|
75
|
+
|
76
|
+
## The Web Manifest
|
77
|
+
|
78
|
+
<!-- TODO v3.4 explain repurposing for PWA apps -->
|
79
|
+
|
80
|
+
The rendered favicon tags in the layout link each page to a web manifest.
|
81
|
+
|
82
|
+
A web manifest is a file that can inform devices how to style particular elements of the client UI when accessing the site. In addition to favicon settings, it provides further configuration for theme coloring and other basic meta information for the site. Further information can be found on the following sites:
|
83
|
+
|
84
|
+
* [https://developer.mozilla.org/en-US/docs/Web/Manifest](https://developer.mozilla.org/en-US/docs/Web/Manifest)
|
85
|
+
* [https://developers.google.com/web/fundamentals/web-app-manifest/](https://developers.google.com/web/fundamentals/web-app-manifest/)
|
86
|
+
|
87
|
+
The Workarea platform automatically generates this file from `Storefront::PagesController#web_manifest` via a route which serves the file from `https://domain.com/site.webmanifest`. The file itself is in JSON format and lives at `storefront/pages/web_manifest.json.jbuilder` in the views directory and will be cached by Rack cache.
|
88
|
+
|
89
|
+
This template contains a mix of favicon images and configuration values to provide a basic web manifest which can be expanded upon to suit your client's needs. Out of the box it provides:
|
90
|
+
|
91
|
+
* **name** using `Workarea.config.site_name`
|
92
|
+
* **short_name** also using `Workarea.config.site_name`
|
93
|
+
* **icons** containing
|
94
|
+
* a 192x192 `.png` icon
|
95
|
+
* a 512x512 `.png` icon
|
96
|
+
* **theme_color** using `Workarea.config.web_manifest.theme_color`
|
97
|
+
* **background_color** using `Workarea.config.web_manifest.background_color`
|
98
|
+
* **start_url** using `'/?utm_source=homescreen'`
|
99
|
+
* **display** using `Workarea.config.web_manifest.display_mode`
|
100
|
+
|
101
|
+
## Browserconfig
|
102
|
+
|
103
|
+
The rendered favicon tags in the layout also link each page to a browserconfig file.
|
104
|
+
|
105
|
+
A browserconfig file informs Microsoft Windows devices on how they should present and style their UI elements when accessing the site. This file is similar to the web manifest in many regards. The main difference is that this file is in XML format.
|
106
|
+
|
107
|
+
Like the web manifest, the Workarea platform automatically generates this file from `Storefront::PagesController#browser_config` via a route which serves the file from `https://domain.com/browserconfig.xml`. The file itself is in XML format and lives at `storefront/pages/browser_config.xml.builder` in the views directory and will be cached by Rack cache.
|
108
|
+
|
109
|
+
Also like the web manifest, this template contains a mix of favicon iamges and configuration values which can further be expanded upon to suit your client's needs. By default it offers:
|
110
|
+
|
111
|
+
* **square150x150logo** which is dynamically generated
|
112
|
+
* **TileColor** defined by `Workarea.config.web_manifest.tile_color`, for use in the Windows Metro UI
|
@@ -0,0 +1,25 @@
|
|
1
|
+
---
|
2
|
+
title: Feature Test Helper Stylesheet
|
3
|
+
excerpt: 'In a test environment, the application stylesheet manifest includes the following style rules:'
|
4
|
+
---
|
5
|
+
|
6
|
+
# Feature Test Helper Stylesheet
|
7
|
+
|
8
|
+
In a test environment, the application stylesheet manifest includes the following style rules:
|
9
|
+
|
10
|
+
```
|
11
|
+
/**
|
12
|
+
* "Disable" transitions and animations in the test environment
|
13
|
+
*/
|
14
|
+
|
15
|
+
* {
|
16
|
+
transition: none !important;
|
17
|
+
animation: none !important;
|
18
|
+
}
|
19
|
+
```
|
20
|
+
|
21
|
+
These rules effectively disable CSS transitions and animations in the test environment.
|
22
|
+
|
23
|
+
Workarea applies these styles to allow for more reliable full stack automated tests. If you are not running any of Workarea's tests, you may remove this code if you prefer.
|
24
|
+
|
25
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
---
|
2
|
+
title: Feature.js & Feature Test Helper
|
3
|
+
excerpt: Feature.js provides browser feature detection for developers. It is loaded in its entirety in the Storefront's head manifest. Out of the box it provides JavaScript methods and root HTML element classes that represent which features are available to th
|
4
|
+
---
|
5
|
+
|
6
|
+
# Feature.js & Feature Test Helper
|
7
|
+
|
8
|
+
## Feature.js
|
9
|
+
|
10
|
+
[Feature.js](http://featurejs.com) provides browser feature detection for developers. It is loaded in its entirety in the Storefront's head manifest. Out of the box it provides JavaScript methods and root HTML element classes that represent which features are available to the developer to program against.
|
11
|
+
|
12
|
+
## Feature Test Helper
|
13
|
+
|
14
|
+
After Feature.js does all that hard work to set up the features above, Workarea's feature test helper file works equally hard (at least I like to think so) to undo a portion of it. However, it only does this if the Rails environment is `test`.
|
15
|
+
|
16
|
+
Some styles, particularly CSS animations and transitions, interfere with full stack testing and make it difficult to write reliable tests. Workarea therefore applies additional styles in the test environment to effectively disable all animations and transitions.
|
17
|
+
|
18
|
+
However, Feature.js is not aware of this and still reports those features as supported. The feature test helper updates the class values on the html element to report animations and transitions as not supported overwrites the corresponding properties on the `Feature.js` object to do the same.
|
19
|
+
|
20
|
+
|
@@ -0,0 +1,34 @@
|
|
1
|
+
---
|
2
|
+
title: Help & Support
|
3
|
+
excerpt: In addition to these guides, Workarea provides the following resources for help and support.
|
4
|
+
---
|
5
|
+
|
6
|
+
# Help & Support
|
7
|
+
|
8
|
+
In addition to these guides, Workarea provides the following resources for help and support.
|
9
|
+
|
10
|
+
## Slack
|
11
|
+
|
12
|
+
Workarea has a public Slack, where we hang out, mostly during EST business hours. [Signup and chat with us!](https://workarea-community.slack.com)
|
13
|
+
|
14
|
+
Use Slack to:
|
15
|
+
|
16
|
+
- Read and post announcements about new Workarea releases, plugins, and documentation (from the core team and the community)
|
17
|
+
- Report bugs or inquire if certain behavior is a bug
|
18
|
+
- Ask the community about or share known solutions to problems to reduce implementation time
|
19
|
+
- Ask the community how to use a feature or how it's expected to work
|
20
|
+
- Ask the community about what to learn or how to learn, or suggest resource to others to learn more about Workarea and its dependencies
|
21
|
+
|
22
|
+
## Workarea Support
|
23
|
+
|
24
|
+
The Workarea Support team provides support and training services to merchants and partners. Visit [https://support.workarea.com] (https://support.workarea.com) to open an issue or contact us for support.
|
25
|
+
|
26
|
+
### Submit an Incident Report
|
27
|
+
Go to [https://support.workarea.com] (https://support.workarea.com) and submit an [Incident Report] (https://jira.tools.weblinc.com/servicedesk/customer/portal/16/create/248) detailing the observed issue. Provide as much detail as possible (screen shots, error codes, steps to reproduce, etc.) to reduce the need to further diagnose and resolve more quickly.
|
28
|
+
|
29
|
+
Please include your Solution Partner primary contact on all incidents and requests, so communication can be facilitated as needed.
|
30
|
+
|
31
|
+
Alternatively, email [support@workarea.com] (mailto:support@workarea.com) and include your priority in the subject of the email.
|
32
|
+
|
33
|
+
### After Hours Escalation
|
34
|
+
To escalate the issue after Hours of Support, call __[+1 (215) 398-7814] (tel:+1-215-398-7814)__ and leave a message for on-call support and request a call back.
|
@@ -0,0 +1,46 @@
|
|
1
|
+
---
|
2
|
+
title: HTML Fragment Caching
|
3
|
+
excerpt: After HTTP caching The next level of caching happens in the Rails views. The Workarea system does this fragment caching in the conventional Rails way, so if you've worked with caching on Rails systems before this will be familar to you.
|
4
|
+
---
|
5
|
+
|
6
|
+
# HTML Fragment Caching
|
7
|
+
|
8
|
+
After [HTTP caching](http-caching.html) The next level of caching happens in the Rails views. The Workarea system does this fragment caching in the conventional Rails way, so if you've worked with caching on Rails systems before this will be familiar to you.
|
9
|
+
|
10
|
+
storefront/app/views/workarea/storefront/categories/show.html.haml:
|
11
|
+
|
12
|
+
```
|
13
|
+
- cache "#{@category.cache_key}/head", expires_in: Workarea.config.cache_expirations.categories_fragment_cache do
|
14
|
+
= append_partial('admin.category_head', category: @category)
|
15
|
+
|
16
|
+
- if @category.first_page?
|
17
|
+
%link{ href: category_url(@category), rel: 'canonical' }
|
18
|
+
- unless @category.last_page?
|
19
|
+
%link{ href: url_for(page: @category.next_page, only_path: false), rel: 'next' }
|
20
|
+
- unless @category.first_page?
|
21
|
+
%link{ href: url_for(page: @category.prev_page, only_path: false), rel: 'prev' }
|
22
|
+
- unless @category.meta_keywords.blank?
|
23
|
+
%meta{ name: :keywords, content: @category.meta_keywords }
|
24
|
+
- unless @category.meta_description.blank?
|
25
|
+
%meta{ name: :description, content: @category.meta_description }
|
26
|
+
|
27
|
+
%meta{ property: 'og:url', content: url_for(only_path: false) }
|
28
|
+
%meta{ property: 'og:title', content: page_title }
|
29
|
+
%meta{ property: 'og:type', content: 'website' }
|
30
|
+
%meta{ property: 'og:image', content: image_path('workarea/storefront/logo.png') }
|
31
|
+
%meta{ property: 'og:image:secure_url', content: image_path('workarea/storefront/logo.png') }
|
32
|
+
```
|
33
|
+
|
34
|
+
In the Rails views, a chunk of HTML is wrapped in a `cache` block. When that `cache` block is hit, Rails fetches the key from the cache store and returns the value. If the key doesn't exist or is expired, the code in the `cache` block will be run, and the result is saved in the cache store. Examples of fragment caches include:
|
35
|
+
|
36
|
+
- Primary navigation menus
|
37
|
+
- Secondary navigation menus
|
38
|
+
- Product summaries (shown on browse pages and recommendations)
|
39
|
+
- Browse results
|
40
|
+
|
41
|
+
When defining any fragment caches, keep in mind cache expiration. The simplest way to handle this is to use the updated\_at timestamp of the correlating model to ensure this cache will be expired when the model is updated.
|
42
|
+
|
43
|
+
## Resources on Fragment Caching
|
44
|
+
|
45
|
+
- [Rails Guide: Fragment Caching](http://guides.rubyonrails.org/caching_with_rails.html#fragment-caching)
|
46
|
+
- [Heroku: Fragment Caching](https://devcenter.heroku.com/articles/caching-strategies#fragment-caching)
|
@@ -0,0 +1,43 @@
|
|
1
|
+
---
|
2
|
+
title: HTTP Caching
|
3
|
+
excerpt: All major content, browse, and search pages are cached for a short and configurable duration by an HTTP cache. This allows the system to serve a large number of requests in a short period of time.
|
4
|
+
---
|
5
|
+
|
6
|
+
# HTTP Caching
|
7
|
+
|
8
|
+
All major content, browse, and search pages are cached for a short and configurable duration by an HTTP cache. This allows the system to serve a large number of requests in a short period of time.
|
9
|
+
|
10
|
+
storefront/app/controllers/workarea/storefront/pages\_controller.rb:
|
11
|
+
|
12
|
+
```
|
13
|
+
module Workarea
|
14
|
+
class Storefront::PagesController < Storefront::ApplicationController
|
15
|
+
before_filter :cache_page
|
16
|
+
# ...
|
17
|
+
end
|
18
|
+
end
|
19
|
+
```
|
20
|
+
|
21
|
+
Controller/actions which enable this include:
|
22
|
+
|
23
|
+
- `Workarea::Storefront::CategoriesController#show`
|
24
|
+
- `Workarea::Storefront::PagesController#show`
|
25
|
+
- `Workarea::Storefront::PagesController#home_page`
|
26
|
+
- `Workarea::Storefront::ProductsController#show`
|
27
|
+
- `Workarea::Storefront::SearchesController#show`
|
28
|
+
|
29
|
+
This creates a major complication for any data on the page with user or session specific. Examples include login status, cart count, and personalized product recommendations. Workarea solves this problem by loading this content asynchronously via Javascript. Make sure you review any customized functionality to ensure you won't be caching pages with session-specific data.
|
30
|
+
|
31
|
+
**Note:** [Rack::Cache](http://rtomayko.github.io/rack-cache/) is a simple way to achieve the caching advantage explained above without the configuration and hosting burden of a more robust HTTP cache like [Varnish](https://www.varnish-cache.org).
|
32
|
+
|
33
|
+
## Customizing the Rack::Cache Key
|
34
|
+
|
35
|
+
There are scenarios where it becomes necessary to vary `Rack::Cache` entries, like geolocated content blocks or segmentation-based navigation. In these cases, Workarea provides a relatively straight-forward way to add to the cache key. Refer to [the documentation in the code for Workarea::Cache::Varies](https://github.com/workarea-commerce/workarea/blob/master/core/lib/workarea/cache.rb) for more information.
|
36
|
+
|
37
|
+
**Note:** Using `Workarea::Cache::Varies` can have a _very_ adverse affect on application performance, and is not encouraged. Make sure this is what you need, and feel free to reach out on [Slack](https://workarea-community.slack.com) to see if there may be a better way to achieve your goals.
|
38
|
+
|
39
|
+
## Resources on HTTP Caching
|
40
|
+
|
41
|
+
- [W3 Spec](http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html)
|
42
|
+
- [Web Fundamentals: HTTP caching](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=en)
|
43
|
+
- [HTTP Caching in Ruby with Rails](https://devcenter.heroku.com/articles/http-caching-ruby-rails)
|
@@ -0,0 +1,35 @@
|
|
1
|
+
---
|
2
|
+
title: I18n
|
3
|
+
excerpt: Internationalization/localization features in Workarea allow for translation/customization of static content (including message content and JavaScript content) and translation of administrable content.
|
4
|
+
---
|
5
|
+
|
6
|
+
# I18n
|
7
|
+
|
8
|
+
Internationalization/localization features in Workarea allow for [translation/customization of static content](translate-or-customize-static-content.html) (including [message content](translate-or-customize-message-content.html) and [JavaScript content](translate-javascript-content.html)) and [translation of administrable content](translate-administrable-content.html).
|
9
|
+
|
10
|
+
**Note:** Internationalization/localization in Workarea relies heavily on [Rails I18n](http://guides.rubyonrails.org/i18n.html) and [Mongoid Localization](https://docs.mongodb.org/ecosystem/tutorial/ruby-mongoid-tutorial/#localized-fields). The preceding links provide excellent explanations of those features, so they are recommended reading.
|
11
|
+
|
12
|
+
## Customizing Text
|
13
|
+
|
14
|
+
Rails I18n features are useful even if your app has only a single locale. Use I18n to customize static text strings, such as [the content of success, failure, and warning messages](translate-or-customize-message-content.html).
|
15
|
+
|
16
|
+
## Translating Text
|
17
|
+
|
18
|
+
Of course, your app may also use multiple locales to provide [static content translations](translate-or-customize-static-content.html) and [translation of administrable content](translate-administrable-content.html).
|
19
|
+
|
20
|
+
To use multiple locales, start by [configuring locales](configure-locales.html).
|
21
|
+
|
22
|
+
## Determining the Current Locale
|
23
|
+
|
24
|
+
Workarea determines the current locale by looking for a locale prefix in the request URL.
|
25
|
+
|
26
|
+
Given an app with en (default), es, and de locales, the following table demonstrates how each URL maps to a locale.
|
27
|
+
|
28
|
+
| URL | Locale |
|
29
|
+
| --- | --- |
|
30
|
+
| http://example.com/categories/sale | en (default) |
|
31
|
+
| http://example.com/en/categories/sale | en |
|
32
|
+
| http://example.com/es/categories/sale | es |
|
33
|
+
| http://example.com/de/categories/sale | de |
|
34
|
+
|
35
|
+
|
@@ -0,0 +1,10 @@
|
|
1
|
+
---
|
2
|
+
title: Images Flow
|
3
|
+
excerpt: A diagram to illustrate how images (product images, content assets) flow into the system and how they are modified and presented to end users.
|
4
|
+
---
|
5
|
+
|
6
|
+
# Images Flow
|
7
|
+
|
8
|
+
The following diagram illustrates how images (product images, content assets) flow into the system and how they are modified and presented to end users.
|
9
|
+
|
10
|
+

|
@@ -0,0 +1,104 @@
|
|
1
|
+
---
|
2
|
+
title: Index Storefront Search Documents
|
3
|
+
excerpt: This document provides procedures developers can use to manually index Storefront search documents.
|
4
|
+
---
|
5
|
+
|
6
|
+
Index Storefront Search Documents
|
7
|
+
================================================================================
|
8
|
+
|
9
|
+
This document provides procedures developers can use to manually index Storefront search documents.
|
10
|
+
|
11
|
+
These procedures are for _manually_ indexing search documents. However, most search indexing is _automatic_, as explained in [Search, Indexing](searching.html#indexing_7).
|
12
|
+
See also [Storefront Search Features, Indexing](storefront-search-features.html#indexing_12) for an overview of Storefront search document creation and indexing.
|
13
|
+
|
14
|
+
|
15
|
+
Index All Storefront Search Documents
|
16
|
+
--------------------------------------------------------------------------------
|
17
|
+
|
18
|
+
Workarea's `search.rake` Rakefile provides a task for (re)indexing all Storefront search documents.
|
19
|
+
|
20
|
+
Index all Storefront search documents from a shell session within the environment:
|
21
|
+
|
22
|
+
```bash
|
23
|
+
$ bin/rails workarea:search_index:storefront
|
24
|
+
```
|
25
|
+
|
26
|
+
Index all Storefront search documents within Ruby:
|
27
|
+
|
28
|
+
```ruby
|
29
|
+
Rake::Task['workarea:search_index:storefront'].invoke
|
30
|
+
```
|
31
|
+
|
32
|
+
The procedures above index documents _inline_ (i.e. in the foreground).
|
33
|
+
Alternatively, set the environment variable `INLINE` to `false` before executing the task to perform the indexing with Sidekiq workers (i.e. in the background):
|
34
|
+
|
35
|
+
```bash
|
36
|
+
$ INLINE=false bin/rails workarea:search_index:all
|
37
|
+
```
|
38
|
+
|
39
|
+
|
40
|
+
Index Specific Storefront Search Documents
|
41
|
+
--------------------------------------------------------------------------------
|
42
|
+
|
43
|
+
In some cases, you may need to index only specific Storefront search documents.
|
44
|
+
The procedure for this varies for product and non-product search documents.
|
45
|
+
|
46
|
+
|
47
|
+
### Non-Product Documents
|
48
|
+
|
49
|
+
For non-product search documents (e.g. categories, pages, searches), initialize a Storefront search model and call `#save` to index the resulting search document.
|
50
|
+
|
51
|
+
```ruby
|
52
|
+
catalog_category = Workarea::Catalog::Category.first
|
53
|
+
Search::Storefront::Category.new(catalog_category).save
|
54
|
+
```
|
55
|
+
|
56
|
+
See [Storefront Search Features, Search Models](storefront-search-features.html#search-models_13) for an explanation of Storefront search models.
|
57
|
+
|
58
|
+
|
59
|
+
### Product Documents
|
60
|
+
|
61
|
+
For product search documents, don't use a search model directly.
|
62
|
+
Use any of the following API calls, which create the search model instances for you.
|
63
|
+
(See [Workers](workers.html) for more details regarding the `perform` and `perform_async` methods.)
|
64
|
+
|
65
|
+
* `Workarea::IndexProduct.perform(product)`
|
66
|
+
* `Workarea::IndexProduct#perform(id)`
|
67
|
+
* `Workarea::IndexProduct#perform_async(id)`
|
68
|
+
* `Workarea::BulkIndexProducts.perform_by_models(products)`
|
69
|
+
* `Workarea::BulkIndexProducts.perform(ids)`
|
70
|
+
* `Workarea::BulkIndexProducts#perform(ids)`
|
71
|
+
* `Workarea::BulkIndexProducts#perform_async(ids)`
|
72
|
+
|
73
|
+
For example, index one product:
|
74
|
+
|
75
|
+
```ruby
|
76
|
+
catalog_product = Workarea::Catalog::Product.first
|
77
|
+
Workarea::IndexProduct.perform(catalog_product)
|
78
|
+
```
|
79
|
+
|
80
|
+
Or, enqueue a background job to index 5 products in bulk (using only a single request to Elasticsearch):
|
81
|
+
|
82
|
+
```ruby
|
83
|
+
catalog_product_ids = Workarea::Catalog::Product.all.pluck('id').first(5)
|
84
|
+
# => ["71C098FFD9", "9A7160EBF0", "2702316B04", "06C6FC0827", "0FA514641B"]
|
85
|
+
Workarea::BulkIndexProducts.new.perform_async(catalog_product_ids)
|
86
|
+
```
|
87
|
+
|
88
|
+
Each of the API calls above provides two additional functions, which is why these calls are used instead of creating search models directly.
|
89
|
+
|
90
|
+
First, calling any of the above methods sets `:last_indexed_at` on each of the affected models in MongoDB.
|
91
|
+
Among other things, this timestamp is used by workers responsible for keeping indexes fresh.
|
92
|
+
|
93
|
+
Second, for each product passed in, these methods create a collection of _product entries_ to represent the document within the Storefront search indexes.
|
94
|
+
The product entries collection (an instance of `Search::ProductEntries` is a collection of search models, each of which produce a search document to be indexed.
|
95
|
+
|
96
|
+
This allows more or fewer search documents to be indexed for each product.
|
97
|
+
For example, with [Workarea Browse Option](https://github.com/workarea-commerce/workarea-browse-option) installed, a single MongoDB document may be represented by multiple search documents in each search index (e.g. one for each color of the product).
|
98
|
+
In contrast, with [Workarea Package Products](https://github.com/workarea-commerce/workarea-package-products) installed, the child products of a package are not indexed at all (they produce an empty product entries collection).
|
99
|
+
|
100
|
+
The product entries abstraction also allows a different search model to be used conditionally.
|
101
|
+
For example, Workarea Browse Option extends product entries to use a different search model for those products that "browse by option".
|
102
|
+
This search model uses only variants of the given option (e.g. blue) to construct the search model.
|
103
|
+
Similarly, Workarea Package Products uses a different search model for "package" products.
|
104
|
+
This search model includes details from the package's "child" products, which themselves are not indexed.
|
@@ -0,0 +1,46 @@
|
|
1
|
+
---
|
2
|
+
title: Infrastructure
|
3
|
+
excerpt: An overview of the required pieces of infrastructure for hosting Workarea.
|
4
|
+
---
|
5
|
+
|
6
|
+
# Infrastructure
|
7
|
+
|
8
|
+
This will be a brief overview of what you'll need to host a Workarea app on your own. Workarea is a hefty application which can be complex to run efficiently, so we recommend our [Workarea Commerce Cloud hosting](https://www.workarea.com/pages/commerce-cloud) for merchants who want to focus on their unique business problems.
|
9
|
+
|
10
|
+
## Application
|
11
|
+
|
12
|
+
### Web
|
13
|
+
|
14
|
+
Workarea ships with a [default Puma configuration](https://github.com/workarea-commerce/workarea/blob/master/core/lib/workarea/configuration/puma.rb) out-of-the-box, which is the application server we recommend. Workarea is known to work with [Passenger](https://www.phusionpassenger.com), and will probably work with most any application server that supports Rails.
|
15
|
+
|
16
|
+
### Sidekiq
|
17
|
+
|
18
|
+
Workarea depends on [Sidekiq](https://sidekiq.org) for performing background work, so you'll need to have a Sidekiq daemon running along with the application server. Workarea will automatically configure Sidekiq based on its own configuration.
|
19
|
+
|
20
|
+
## Databases
|
21
|
+
|
22
|
+
### MongoDB
|
23
|
+
|
24
|
+
Workarea uses on [MongoDB](https://www.mongodb.com), so you'll need a production-grade replica set. Currently, the latest version of Workarea supports MongoDB v4.0.x.
|
25
|
+
|
26
|
+
### Elasticsearch
|
27
|
+
|
28
|
+
Workarea uses [Elasticsearch](https://www.elastic.co/products/elasticsearch) for large portions of functionality. You'll want a production-grade cluster running version v5.6.x.
|
29
|
+
|
30
|
+
### Redis
|
31
|
+
|
32
|
+
Workarea uses [Redis](https://redis.io) for the Sidekiq queue, cache, Rack::Attack, and more. Note that while only one instance of Redis is _required_, we recommend running two. The first would be for persistent data like the Sidekiq queue or recommendations. The second is for ephemeral data like cache.
|
33
|
+
|
34
|
+
## Miscellaneous
|
35
|
+
|
36
|
+
### Assets
|
37
|
+
|
38
|
+
Currently, Workarea depends on [Amazon's S3](https://aws.amazon.com/s3/) to back its asset storage. You'll need at least one bucket setup to run Workarea. An optional second (called the "integration" bucket in the code) can be configured for integrating with other systems, like flat-file exports, image imports, etc.
|
39
|
+
|
40
|
+
### Geolocation
|
41
|
+
|
42
|
+
Workarea provides a number of geography-based features. For these features to function, you have two options. The first (very slow) way is to configure the [Geocoder gem](https://github.com/alexreisner/geocoder) that Workarea uses to look up request location by IP address. The second, preferred way is to integrate an upstream proxy like [nginx](http://nginx.org) to lookup geography data based on IP address and add headers, which the Workarea application will read. See [the ngx_http_geoip_module](http://nginx.org/en/docs/http/ngx_http_geoip_module.html) for an example.
|
43
|
+
|
44
|
+
### Compliance
|
45
|
+
|
46
|
+
This is just dropping you a note that the Workarea application is written to be compliant with PCI-DSS requirements. Workarea Commerce Cloud hosting provides a complete top-to-bottom certified, tier 1, PCI-DSS environment. This is recommended for all merchants.
|