From 532e27b7e18ebc7573c04e9af3aa9f4b2fb46417 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sun, 19 Apr 2020 13:32:11 +0200 Subject: [PATCH 01/49] Move filters into new column on desktop --- .../templates/filter_selector.html.haml | 1 - .../darkswarm/_shop-filters.css.scss | 25 ++------- app/views/shop/products/_filters.html.haml | 8 +-- app/views/shop/products/_form.html.haml | 52 ++++++++++--------- config/locales/en.yml | 1 + 5 files changed, 37 insertions(+), 50 deletions(-) diff --git a/app/assets/javascripts/templates/filter_selector.html.haml b/app/assets/javascripts/templates/filter_selector.html.haml index cd4135ebee..742ace2a0e 100644 --- a/app/assets/javascripts/templates/filter_selector.html.haml +++ b/app/assets/javascripts/templates/filter_selector.html.haml @@ -1,4 +1,3 @@ %ul %active-selector{ ng: { repeat: "selector in allSelectors", show: "ifDefined(selector.fits, true)" } } - %render-svg{path: "{{selector.object.icon}}", ng: { if: "selector.object.icon"} } %span{"ng-bind" => "::selector.object.name"} diff --git a/app/assets/stylesheets/darkswarm/_shop-filters.css.scss b/app/assets/stylesheets/darkswarm/_shop-filters.css.scss index 16bca77cbc..2d8caf9a54 100644 --- a/app/assets/stylesheets/darkswarm/_shop-filters.css.scss +++ b/app/assets/stylesheets/darkswarm/_shop-filters.css.scss @@ -14,7 +14,7 @@ @include border-radius(0); padding: 0; - margin: 0 0 0.25rem 0.25rem; + margin: 0 0.25rem 0.25rem 0; &:hover, &:focus { background: transparent; @@ -140,25 +140,6 @@ .filter-shopfront { &.taxon-selectors, &.property-selectors { background: transparent; - - single-line-selectors { - overflow-x: hidden; - white-space: nowrap; - - .f-dropdown { - overflow-x: auto; - white-space: normal; - } - } - - ul { - margin: 0; - display: inline-block; - } - - ul, ul li { - list-style: none; - } } // Shopfront taxons @@ -170,4 +151,8 @@ &.property-selectors { @include filter-selector(#666, #ccc, #777); } + + ul { + margin: 0; + } } diff --git a/app/views/shop/products/_filters.html.haml b/app/views/shop/products/_filters.html.haml index 100ccecc0a..f0e69d1985 100644 --- a/app/views/shop/products/_filters.html.haml +++ b/app/views/shop/products/_filters.html.haml @@ -1,5 +1,5 @@ -.filter-shopfront.taxon-selectors.text-right{ng: {show: 'supplied_taxons != null'}} - %single-line-selectors{ selectors: "taxonSelectors", objects: "supplied_taxons", "active-selectors" => "activeTaxons"} +.filter-shopfront.taxon-selectors{ng: {show: 'supplied_taxons != null'}} + %filter-selector{ 'selector-set' => "taxonSelectors", objects: "supplied_taxons", "active-selectors" => "activeTaxons"} -.filter-shopfront.property-selectors.text-right{ng: {show: 'supplied_properties != null'}} - %single-line-selectors{ selectors: "propertySelectors", objects: "supplied_properties", "active-selectors" => "activeProperties"} +.filter-shopfront.property-selectors{ng: {show: 'supplied_properties != null'}} + %filter-selector{ 'selector-set' => "propertySelectors", objects: "supplied_properties", "active-selectors" => "activeProperties"} diff --git a/app/views/shop/products/_form.html.haml b/app/views/shop/products/_form.html.haml index 5e45c44fa1..7598c75568 100644 --- a/app/views/shop/products/_form.html.haml +++ b/app/views/shop/products/_form.html.haml @@ -19,36 +19,38 @@ = t :products_with %span.applied-search "{{ query }}" .row - .small-12.medium-6.large-5.columns + .small-12.columns %input#search.text{"ng-model" => "query", placeholder: t(:products_search), "ng-debounce" => "200", "ofn-disable-enter" => true} - .small-12.medium-6.large-6.large-offset-1.columns - = render partial: "shop/products/filters" - .row - %div.pad-top{ "infinite-scroll" => "loadMore()", "infinite-scroll-distance" => "1", "infinite-scroll-disabled" => 'Products.loading' } - %product.animate-repeat{"ng-controller" => "ProductNodeCtrl", "ng-repeat" => "product in Products.products track by product.id", "id" => "product-{{ product.id }}"} - = render "shop/products/summary" - %shop-variant{variant: 'variant', "ng-repeat" => "variant in product.variants | orderBy: ['name_to_display','unit_value'] track by variant.id", "id" => "variant-{{ variant.id }}", "ng-class" => "{'out-of-stock': !variant.on_demand && variant.on_hand == 0}"} + .medium-12.large-10.columns + %div.pad-top{ "infinite-scroll" => "loadMore()", "infinite-scroll-distance" => "1", "infinite-scroll-disabled" => 'Products.loading' } + %product.animate-repeat{"ng-controller" => "ProductNodeCtrl", "ng-repeat" => "product in Products.products track by product.id", "id" => "product-{{ product.id }}"} + = render "shop/products/summary" + %shop-variant{variant: 'variant', "ng-repeat" => "variant in product.variants | orderBy: ['name_to_display','unit_value'] track by variant.id", "id" => "variant-{{ variant.id }}", "ng-class" => "{'out-of-stock': !variant.on_demand && variant.on_hand == 0}"} - %product{"ng-show" => "Products.loading"} - .row.summary - .small-12.columns.text-center - = t :products_loading - .row - .small-12.columns.text-center - %img.spinner{ src: "/assets/spinning-circles.svg" } + %product{"ng-show" => "Products.loading"} + .row.summary + .small-12.columns.text-center + = t :products_loading + .row + .small-12.columns.text-center + %img.spinner{ src: "/assets/spinning-circles.svg" } - %div{"ng-show" => "Products.products.length == 0 && !Products.loading"} - .row.summary - .small-12.columns - %p.no-results - = t :search_no_results_html, query: "{{query}}".html_safe - .row - .small-12.columns - %form{action: main_app.cart_path} - %i.ofn-i_011-spinner.cart-spinner{"ng-show" => "Cart.dirty"} - %input.small.button.primary.right.add_to_cart{type: :submit, value: "{{ Cart.dirty ? '#{t(:products_updating_cart)}' : (Cart.empty() ? '#{t(:products_cart_empty)}' : '#{t(:products_edit_cart)}' ) }}", "ng-disabled" => "Cart.dirty || Cart.empty()", "ng-class" => "{ dirty: Cart.dirty }" } + %div{"ng-show" => "Products.products.length == 0 && !Products.loading"} + .row.summary + .small-12.columns + %p.no-results + = t :search_no_results_html, query: "{{query}}".html_safe + .row + .small-12.columns + %form{action: main_app.cart_path} + %i.ofn-i_011-spinner.cart-spinner{"ng-show" => "Cart.dirty"} + %input.small.button.primary.right.add_to_cart{type: :submit, value: "{{ Cart.dirty ? '#{t(:products_updating_cart)}' : (Cart.empty() ? '#{t(:products_cart_empty)}' : '#{t(:products_edit_cart)}' ) }}", "ng-disabled" => "Cart.dirty || Cart.empty()", "ng-class" => "{ dirty: Cart.dirty }" } + + .hide-for-medium-down.large-2.columns + %h5= t(:products_filter_by) + = render partial: "shop/products/filters" diff --git a/config/locales/en.yml b/config/locales/en.yml index fa92cb72a1..83a6c95025 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1653,6 +1653,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using products_or: "OR" products_with: with products_search: "Search by product or producer" + products_filter_by: "Filter by" products_loading: "Loading products..." products_updating_cart: "Updating cart..." products_cart_empty: "Cart empty" From f46ca0c5956084bd5a028d8f580c8fc7587941ff Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sun, 19 Apr 2020 14:41:30 +0200 Subject: [PATCH 02/49] Move search to new searchbar This required a lot of refactoring, as the search needed to be inside both the form element and the Angular ProductsCtrl element, but to get a full-width row for the searchbar it needed to be outside of the 12 column layout of the other shop page elements... --- .../stylesheets/darkswarm/branding.css.scss | 3 + .../stylesheets/darkswarm/shop.css.scss | 18 +++- .../stylesheets/darkswarm/shop_tabs.css.scss | 2 + app/views/shop/products/_form.html.haml | 95 +++++++++---------- app/views/shop/products/_searchbar.haml | 7 ++ 5 files changed, 75 insertions(+), 50 deletions(-) create mode 100644 app/views/shop/products/_searchbar.haml diff --git a/app/assets/stylesheets/darkswarm/branding.css.scss b/app/assets/stylesheets/darkswarm/branding.css.scss index 8c34da12d4..de705bbfa3 100644 --- a/app/assets/stylesheets/darkswarm/branding.css.scss +++ b/app/assets/stylesheets/darkswarm/branding.css.scss @@ -43,6 +43,9 @@ $black: #000; $white: #fff; $grey-050: #f7f7f7; +$grey-100: #e6e6e6; +$grey-200: #ddd; +$grey-300: #ccc; $grey-400: #bbb; $grey-500: #999; $grey-600: #777; diff --git a/app/assets/stylesheets/darkswarm/shop.css.scss b/app/assets/stylesheets/darkswarm/shop.css.scss index cb7f86e216..b8a1905c76 100644 --- a/app/assets/stylesheets/darkswarm/shop.css.scss +++ b/app/assets/stylesheets/darkswarm/shop.css.scss @@ -12,9 +12,25 @@ @import "shop-popovers"; .darkswarm { + .shop-searchbar { + background-color: $grey-100; + height: 5em; + padding: 1em; + margin-bottom: 1em; + position: relative; + z-index: 5; + + input#search { + height: 3.5em; + border-radius: 0.25em; + border: solid 1px $grey-300; + background-color: $white; + margin: 0; + } + } + products { display: block; - padding-top: 20px; @media all and (max-width: 768px) { input.button.right { diff --git a/app/assets/stylesheets/darkswarm/shop_tabs.css.scss b/app/assets/stylesheets/darkswarm/shop_tabs.css.scss index dce28ddde6..36f8695af8 100644 --- a/app/assets/stylesheets/darkswarm/shop_tabs.css.scss +++ b/app/assets/stylesheets/darkswarm/shop_tabs.css.scss @@ -8,6 +8,8 @@ .tab-buttons { color: $dark-grey; box-shadow: $distributor-header-shadow; + position: relative; + z-index: 10; .columns { display: flex; diff --git a/app/views/shop/products/_form.html.haml b/app/views/shop/products/_form.html.haml index 7598c75568..7d7028578f 100644 --- a/app/views/shop/products/_form.html.haml +++ b/app/views/shop/products/_form.html.haml @@ -1,56 +1,53 @@ -.footer-pad.small-12.columns +%form{action: main_app.cart_path} %products{"ng-controller" => "ProductsCtrl", "ng-init" => "refreshStaleData()", "ng-show" => "order_cycle.order_cycle_id != null", "ng-cloak" => true } - // TODO: Needs an ng-show to slide content down - .row.animate-slide{ "ng-show" => "query || appliedPropertiesList() || appliedTaxonsList()" } - .small-12.columns - .alert-box.search-alert.ng-scope - %a.right{"ng-click" => "clearAll()"} - = t :products_clear_all - %i.ofn-i_009-close - %span.filter-label - = t :products_showing - %span.applied-properties - {{ appliedPropertiesList() }} - %span.applied-taxons - {{ appliedTaxonsList() }} - %span{ ng: { hide: "!query"} } - %span{ "ng-show" => "appliedPropertiesList() || appliedTaxonsList()" } - = t :products_with - %span.applied-search "{{ query }}" - .row - .small-12.columns - %input#search.text{"ng-model" => "query", - placeholder: t(:products_search), - "ng-debounce" => "200", - "ofn-disable-enter" => true} + = render partial: "shop/products/searchbar" .row - .medium-12.large-10.columns - %div.pad-top{ "infinite-scroll" => "loadMore()", "infinite-scroll-distance" => "1", "infinite-scroll-disabled" => 'Products.loading' } - %product.animate-repeat{"ng-controller" => "ProductNodeCtrl", "ng-repeat" => "product in Products.products track by product.id", "id" => "product-{{ product.id }}"} - = render "shop/products/summary" - %shop-variant{variant: 'variant', "ng-repeat" => "variant in product.variants | orderBy: ['name_to_display','unit_value'] track by variant.id", "id" => "variant-{{ variant.id }}", "ng-class" => "{'out-of-stock': !variant.on_demand && variant.on_hand == 0}"} + .small-12.columns + .footer-pad.small-12.columns + .row.animate-slide{ "ng-show" => "query || appliedPropertiesList() || appliedTaxonsList()" } + .small-12.columns + .alert-box.search-alert.ng-scope + %a.right{"ng-click" => "clearAll()"} + = t :products_clear_all + %i.ofn-i_009-close + %span.filter-label + = t :products_showing + %span.applied-properties + {{ appliedPropertiesList() }} + %span.applied-taxons + {{ appliedTaxonsList() }} + %span{ ng: { hide: "!query"} } + %span{ "ng-show" => "appliedPropertiesList() || appliedTaxonsList()" } + = t :products_with + %span.applied-search "{{ query }}" - %product{"ng-show" => "Products.loading"} - .row.summary - .small-12.columns.text-center - = t :products_loading - .row - .small-12.columns.text-center - %img.spinner{ src: "/assets/spinning-circles.svg" } + .row + .medium-12.large-10.columns + %div.pad-top{ "infinite-scroll" => "loadMore()", "infinite-scroll-distance" => "1", "infinite-scroll-disabled" => 'Products.loading' } + %product.animate-repeat{"ng-controller" => "ProductNodeCtrl", "ng-repeat" => "product in Products.products track by product.id", "id" => "product-{{ product.id }}"} + = render "shop/products/summary" + %shop-variant{variant: 'variant', "ng-repeat" => "variant in product.variants | orderBy: ['name_to_display','unit_value'] track by variant.id", "id" => "variant-{{ variant.id }}", "ng-class" => "{'out-of-stock': !variant.on_demand && variant.on_hand == 0}"} - %div{"ng-show" => "Products.products.length == 0 && !Products.loading"} - .row.summary - .small-12.columns - %p.no-results - = t :search_no_results_html, query: "{{query}}".html_safe - .row - .small-12.columns - %form{action: main_app.cart_path} - %i.ofn-i_011-spinner.cart-spinner{"ng-show" => "Cart.dirty"} - %input.small.button.primary.right.add_to_cart{type: :submit, value: "{{ Cart.dirty ? '#{t(:products_updating_cart)}' : (Cart.empty() ? '#{t(:products_cart_empty)}' : '#{t(:products_edit_cart)}' ) }}", "ng-disabled" => "Cart.dirty || Cart.empty()", "ng-class" => "{ dirty: Cart.dirty }" } + %product{"ng-show" => "Products.loading"} + .row.summary + .small-12.columns.text-center + = t :products_loading + .row + .small-12.columns.text-center + %img.spinner{ src: "/assets/spinning-circles.svg" } - .hide-for-medium-down.large-2.columns - %h5= t(:products_filter_by) - = render partial: "shop/products/filters" + %div{"ng-show" => "Products.products.length == 0 && !Products.loading"} + .row.summary + .small-12.columns + %p.no-results + = t :search_no_results_html, query: "{{query}}".html_safe + .row + .small-12.columns + %i.ofn-i_011-spinner.cart-spinner{"ng-show" => "Cart.dirty"} + %input.small.button.primary.right.add_to_cart{type: :submit, value: "{{ Cart.dirty ? '#{t(:products_updating_cart)}' : (Cart.empty() ? '#{t(:products_cart_empty)}' : '#{t(:products_edit_cart)}' ) }}", "ng-disabled" => "Cart.dirty || Cart.empty()", "ng-class" => "{ dirty: Cart.dirty }" } + + .hide-for-medium-down.large-2.columns + %h5= t(:products_filter_by) + = render partial: "shop/products/filters" diff --git a/app/views/shop/products/_searchbar.haml b/app/views/shop/products/_searchbar.haml new file mode 100644 index 0000000000..26cac7c95d --- /dev/null +++ b/app/views/shop/products/_searchbar.haml @@ -0,0 +1,7 @@ +.shop-searchbar + .row + .small-5.columns + %input#search.text{"ng-model" => "query", + placeholder: t(:products_search), + "ng-debounce" => "200", + "ofn-disable-enter" => true} From 0d9f049d24944f4904348deb223b9dc88e56a432 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sun, 19 Apr 2020 15:10:08 +0200 Subject: [PATCH 03/49] Add inner icon and restyle search input element --- app/assets/images/icn-search-grey.png | Bin 0 -> 534 bytes .../stylesheets/darkswarm/_shop-inputs.css.scss | 7 ------- app/assets/stylesheets/darkswarm/shop.css.scss | 11 +++++++++-- 3 files changed, 9 insertions(+), 9 deletions(-) create mode 100644 app/assets/images/icn-search-grey.png diff --git a/app/assets/images/icn-search-grey.png b/app/assets/images/icn-search-grey.png new file mode 100644 index 0000000000000000000000000000000000000000..15af5ed712c5775c949cb4ccf05a7335215ff8b9 GIT binary patch literal 534 zcmV+x0_pvUP)Px$&`Cr=R5%fplg~>6Q4q)5)$lJUOrnT_0zpOS$2lrG8Wa>kL_~)Ub?Fub9XfQZ zQ$Za%7X1Z5p29!smSqWFnGT^JFY3DfuF#f*eg!vy z-MHM7GM%iOrWFVTeiYg!v2D8~FkD%qOp4EHwc3+Tr~4GzCgCYV0yBo;Y|9;F0mj&2 zpS=F8PJ-mARBDC(B)jJk$~pVGd?Yl!03*D}E+R6gG8QjZDwT5pAG}*e&8Q}cCcE;! zXT# Date: Sun, 19 Apr 2020 15:59:23 +0200 Subject: [PATCH 04/49] Add filters count --- .../darkswarm/controllers/products_controller.js.coffee | 3 +++ app/views/shop/products/_form.html.haml | 5 ++++- config/locales/en.yml | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee index 217118ee82..36aaa9a338 100644 --- a/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee +++ b/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee @@ -94,3 +94,6 @@ Darkswarm.controller "ProductsCtrl", ($scope, $filter, $rootScope, Products, Ord $scope.Products.products = [] $scope.update_filters() $scope.loadProducts() + + $scope.filtersCount = () -> + $scope.taxonSelectors.totalActive() + $scope.propertySelectors.totalActive() diff --git a/app/views/shop/products/_form.html.haml b/app/views/shop/products/_form.html.haml index 7d7028578f..1db1c3e340 100644 --- a/app/views/shop/products/_form.html.haml +++ b/app/views/shop/products/_form.html.haml @@ -49,5 +49,8 @@ %input.small.button.primary.right.add_to_cart{type: :submit, value: "{{ Cart.dirty ? '#{t(:products_updating_cart)}' : (Cart.empty() ? '#{t(:products_cart_empty)}' : '#{t(:products_edit_cart)}' ) }}", "ng-disabled" => "Cart.dirty || Cart.empty()", "ng-class" => "{ dirty: Cart.dirty }" } .hide-for-medium-down.large-2.columns - %h5= t(:products_filter_by) + %h5 + = t(:products_filter_by) + %span{ng: {show: 'filtersCount()' }} + = "({{ filtersCount() }} #{t(:products_filter_selected)})" = render partial: "shop/products/filters" diff --git a/config/locales/en.yml b/config/locales/en.yml index 83a6c95025..86be792153 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1654,6 +1654,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using products_with: with products_search: "Search by product or producer" products_filter_by: "Filter by" + products_filter_selected: "selected" products_loading: "Loading products..." products_updating_cart: "Updating cart..." products_cart_empty: "Cart empty" From f43bf3880c13069ceb8f76d3147091c4c1be13d6 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sun, 19 Apr 2020 16:23:11 +0200 Subject: [PATCH 05/49] Add filters button on mobile and tablet --- app/assets/stylesheets/darkswarm/shop.css.scss | 8 ++++++++ app/assets/stylesheets/darkswarm/ui.css.scss | 4 ++++ app/views/shop/products/_searchbar.haml | 8 +++++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/app/assets/stylesheets/darkswarm/shop.css.scss b/app/assets/stylesheets/darkswarm/shop.css.scss index 64e11d8b65..25ad072c0f 100644 --- a/app/assets/stylesheets/darkswarm/shop.css.scss +++ b/app/assets/stylesheets/darkswarm/shop.css.scss @@ -34,6 +34,14 @@ font-style: italic; } } + + button { + background-color: $grey-600; + margin-left: 1em; + height: 3em; + width: 7em; + padding: 0; + } } products { diff --git a/app/assets/stylesheets/darkswarm/ui.css.scss b/app/assets/stylesheets/darkswarm/ui.css.scss index 4a50c4a1a0..35400362bb 100644 --- a/app/assets/stylesheets/darkswarm/ui.css.scss +++ b/app/assets/stylesheets/darkswarm/ui.css.scss @@ -129,3 +129,7 @@ button.success, .button.success { padding: 0; } } + +.flex { + display: flex; +} diff --git a/app/views/shop/products/_searchbar.haml b/app/views/shop/products/_searchbar.haml index 26cac7c95d..c9bb311ac0 100644 --- a/app/views/shop/products/_searchbar.haml +++ b/app/views/shop/products/_searchbar.haml @@ -1,7 +1,13 @@ .shop-searchbar .row - .small-5.columns + .small-12.large-5.columns.flex %input#search.text{"ng-model" => "query", placeholder: t(:products_search), "ng-debounce" => "200", "ofn-disable-enter" => true} + + .hide-for-large-up + %button{type: 'button'} + Filters + %span{ng: {show: 'filtersCount()' }} + ({{ filtersCount() }}) From 8e9833fd06dfe56a4809531cc905650d3866a8f0 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sun, 19 Apr 2020 17:08:19 +0200 Subject: [PATCH 06/49] Implement overlaid sidebar on mobile and tablet --- .../controllers/products_controller.js.coffee | 4 +++ .../stylesheets/darkswarm/shop.css.scss | 35 +++++++++++++++++++ app/views/shop/products/_form.html.haml | 9 +++++ app/views/shop/products/_searchbar.haml | 2 +- 4 files changed, 49 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee index 36aaa9a338..51e02ac2b4 100644 --- a/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee +++ b/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee @@ -10,6 +10,7 @@ Darkswarm.controller "ProductsCtrl", ($scope, $filter, $rootScope, Products, Ord $scope.order_cycle = OrderCycle.order_cycle $scope.supplied_taxons = null $scope.supplied_properties = null + $scope.showFilterSidebar = false $rootScope.$on "orderCycleSelected", -> $scope.update_filters() @@ -97,3 +98,6 @@ Darkswarm.controller "ProductsCtrl", ($scope, $filter, $rootScope, Products, Ord $scope.filtersCount = () -> $scope.taxonSelectors.totalActive() + $scope.propertySelectors.totalActive() + + $scope.toggleFilterSidebar = -> + $scope.showFilterSidebar = !$scope.showFilterSidebar diff --git a/app/assets/stylesheets/darkswarm/shop.css.scss b/app/assets/stylesheets/darkswarm/shop.css.scss index 25ad072c0f..2eea3bde94 100644 --- a/app/assets/stylesheets/darkswarm/shop.css.scss +++ b/app/assets/stylesheets/darkswarm/shop.css.scss @@ -44,6 +44,41 @@ } } + .shop-filters-sidebar { + display: flex; + flex-direction: column; + height: 100%; + + .background { + position: fixed; + top: 0; + right: 0; + z-index: 200; + height: 100%; + width: 100%; + background-color: rgba(0, 0, 0, 0.15); + } + + .sidebar { + position: fixed; + top: 0; + right: 0; + z-index: 210; + height: 100%; + width: 45%; + background-color: rgba($white, 0.95); + padding: 1em; + + @media all and (max-width: 768px) { + width: 65%; + } + + @media all and (max-width: 480px) { + width: 85%; + } + } + } + products { display: block; diff --git a/app/views/shop/products/_form.html.haml b/app/views/shop/products/_form.html.haml index 1db1c3e340..2fb74db02f 100644 --- a/app/views/shop/products/_form.html.haml +++ b/app/views/shop/products/_form.html.haml @@ -54,3 +54,12 @@ %span{ng: {show: 'filtersCount()' }} = "({{ filtersCount() }} #{t(:products_filter_selected)})" = render partial: "shop/products/filters" + + .shop-filters-sidebar.hide-for-large-up{ng: {show: 'showFilterSidebar'}} + .background{ng: {click: 'toggleFilterSidebar()'}} + .sidebar + %h5 + = t(:products_filter_by) + %span{ng: {show: 'filtersCount()' }} + = "({{ filtersCount() }} #{t(:products_filter_selected)})" + = render partial: "shop/products/filters" diff --git a/app/views/shop/products/_searchbar.haml b/app/views/shop/products/_searchbar.haml index c9bb311ac0..aa4a2ff761 100644 --- a/app/views/shop/products/_searchbar.haml +++ b/app/views/shop/products/_searchbar.haml @@ -7,7 +7,7 @@ "ofn-disable-enter" => true} .hide-for-large-up - %button{type: 'button'} + %button{type: 'button', ng: {click: 'toggleFilterSidebar()'}} Filters %span{ng: {show: 'filtersCount()' }} ({{ filtersCount() }}) From 7c00d41fc489e86fcb4ced6ae0ce90de855a1303 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sun, 19 Apr 2020 17:26:48 +0200 Subject: [PATCH 07/49] Add some animation effects --- app/assets/stylesheets/darkswarm/shop.css.scss | 14 ++++++++++++++ app/views/shop/products/_form.html.haml | 4 ++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/app/assets/stylesheets/darkswarm/shop.css.scss b/app/assets/stylesheets/darkswarm/shop.css.scss index 2eea3bde94..c133f8590c 100644 --- a/app/assets/stylesheets/darkswarm/shop.css.scss +++ b/app/assets/stylesheets/darkswarm/shop.css.scss @@ -57,6 +57,12 @@ height: 100%; width: 100%; background-color: rgba(0, 0, 0, 0.15); + opacity: 0; + transition: opacity 250ms ease-in-out 0s; + + &.shown { + opacity: 1; + } } .sidebar { @@ -66,15 +72,23 @@ z-index: 210; height: 100%; width: 45%; + margin-right: -45%; background-color: rgba($white, 0.95); padding: 1em; + transition: margin 250ms ease-in-out 0s; + + &.shown { + margin-right: 0; + } @media all and (max-width: 768px) { width: 65%; + margin-right: -65%; } @media all and (max-width: 480px) { width: 85%; + margin-right: -85%; } } } diff --git a/app/views/shop/products/_form.html.haml b/app/views/shop/products/_form.html.haml index 2fb74db02f..b98f308a53 100644 --- a/app/views/shop/products/_form.html.haml +++ b/app/views/shop/products/_form.html.haml @@ -56,8 +56,8 @@ = render partial: "shop/products/filters" .shop-filters-sidebar.hide-for-large-up{ng: {show: 'showFilterSidebar'}} - .background{ng: {click: 'toggleFilterSidebar()'}} - .sidebar + .background{ng: {click: 'toggleFilterSidebar()', class: "{'shown': showFilterSidebar}"}} + .sidebar{ng: {class: "{'shown': showFilterSidebar}"}} %h5 = t(:products_filter_by) %span{ng: {show: 'filtersCount()' }} From da1d8e90e27ddbebe108dfa5f481c5f1a19afa01 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sun, 19 Apr 2020 17:44:27 +0200 Subject: [PATCH 08/49] Update search placeholder --- config/locales/en.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index 86be792153..fad7962350 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1652,7 +1652,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using products_showing: "Showing:" products_or: "OR" products_with: with - products_search: "Search by product or producer" + products_search: "Search..." products_filter_by: "Filter by" products_filter_selected: "selected" products_loading: "Loading products..." From 94145d0f7e7f889354a20494e578f18856f0643b Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sun, 19 Apr 2020 17:44:45 +0200 Subject: [PATCH 09/49] Improve layout and sizing on mobile --- app/assets/stylesheets/darkswarm/shop.css.scss | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/assets/stylesheets/darkswarm/shop.css.scss b/app/assets/stylesheets/darkswarm/shop.css.scss index c133f8590c..311fdf48e1 100644 --- a/app/assets/stylesheets/darkswarm/shop.css.scss +++ b/app/assets/stylesheets/darkswarm/shop.css.scss @@ -15,7 +15,7 @@ .shop-searchbar { background-color: $grey-100; height: 5em; - padding: 1em; + padding: 1em 0; margin-bottom: 1em; position: relative; z-index: 5; @@ -41,6 +41,15 @@ height: 3em; width: 7em; padding: 0; + font-size: 1em; + + @media all and (max-width: 480px) { + margin-left: 0.75em; + } + } + + @media all and (max-width: 480px) { + font-size: 0.9em; } } From ff07b9703376edd3edf184698a91c004412176a1 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sun, 19 Apr 2020 18:30:24 +0200 Subject: [PATCH 10/49] Add sidebar footer and buttons Also includes a minor refactor to resolve an issue with animation timings. Angular was not adding the "shown" class to the different elements at the same time in the digest cycle, and it looked a bit shaky. --- .../stylesheets/darkswarm/shop.css.scss | 67 ++++++++++++++++--- app/views/shop/products/_form.html.haml | 14 +++- config/locales/en.yml | 2 + 3 files changed, 69 insertions(+), 14 deletions(-) diff --git a/app/assets/stylesheets/darkswarm/shop.css.scss b/app/assets/stylesheets/darkswarm/shop.css.scss index 311fdf48e1..42748e48f1 100644 --- a/app/assets/stylesheets/darkswarm/shop.css.scss +++ b/app/assets/stylesheets/darkswarm/shop.css.scss @@ -11,6 +11,11 @@ @import "shop-taxon-flag"; @import "shop-popovers"; +$sidebar-small-width: 85%; +$sidebar-medium-width: 65%; +$sidebar-large-width: 45%; +$sidebar-footer-height: 5em; + .darkswarm { .shop-searchbar { background-color: $grey-100; @@ -68,10 +73,16 @@ background-color: rgba(0, 0, 0, 0.15); opacity: 0; transition: opacity 250ms ease-in-out 0s; + } - &.shown { + &.shown { + .background { opacity: 1; } + + .sidebar, .sidebar-footer { + margin-right: 0; + } } .sidebar { @@ -80,24 +91,58 @@ right: 0; z-index: 210; height: 100%; - width: 45%; - margin-right: -45%; + width: $sidebar-large-width; + margin-right: -$sidebar-large-width; background-color: rgba($white, 0.95); padding: 1em; transition: margin 250ms ease-in-out 0s; + overflow-y: scroll; - &.shown { - margin-right: 0; + .property-selectors { + margin-bottom: $sidebar-footer-height + 2em; } + } - @media all and (max-width: 768px) { - width: 65%; - margin-right: -65%; + .sidebar-footer { + background-color: $grey-800; + width: $sidebar-large-width; + margin-right: -$sidebar-large-width; + height: $sidebar-footer-height; + position: fixed; + bottom: 0; + right: 0; + transition: margin 250ms ease-in-out 0s; + padding: 1em; + + button { + height: 3em; + background-color: $grey-800; + color: $white; + border: 1px solid $grey-600; + border-radius: 0.5em; + width: 47%; + margin: 0; + padding: 0; + + &.done { + background-color: $orange-500; + border: none; + margin-left: 3%; + } } + } - @media all and (max-width: 480px) { - width: 85%; - margin-right: -85%; + @media all and (max-width: 768px) { + .sidebar, .sidebar-footer { + width: $sidebar-medium-width; + margin-right: -$sidebar-medium-width; + } + } + + @media all and (max-width: 480px) { + .sidebar, .sidebar-footer { + width: $sidebar-small-width; + margin-right: -$sidebar-small-width; } } } diff --git a/app/views/shop/products/_form.html.haml b/app/views/shop/products/_form.html.haml index b98f308a53..4b0311954f 100644 --- a/app/views/shop/products/_form.html.haml +++ b/app/views/shop/products/_form.html.haml @@ -53,13 +53,21 @@ = t(:products_filter_by) %span{ng: {show: 'filtersCount()' }} = "({{ filtersCount() }} #{t(:products_filter_selected)})" + = render partial: "shop/products/filters" - .shop-filters-sidebar.hide-for-large-up{ng: {show: 'showFilterSidebar'}} - .background{ng: {click: 'toggleFilterSidebar()', class: "{'shown': showFilterSidebar}"}} - .sidebar{ng: {class: "{'shown': showFilterSidebar}"}} + .shop-filters-sidebar.hide-for-large-up{ng: {show: 'showFilterSidebar', class: "{'shown': showFilterSidebar}"}} + .background{ng: {click: 'toggleFilterSidebar()'}} + .sidebar %h5 = t(:products_filter_by) %span{ng: {show: 'filtersCount()' }} = "({{ filtersCount() }} #{t(:products_filter_selected)})" + = render partial: "shop/products/filters" + + .sidebar-footer + %button{type: 'button', ng: {click: 'clearAll() && toggleFilterSidebar()'}} + = t(:products_filter_clear) + %button.done{type: 'button', ng: {click: 'toggleFilterSidebar()'}} + = t(:products_filter_done) diff --git a/config/locales/en.yml b/config/locales/en.yml index fad7962350..ca2d5ad360 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1655,6 +1655,8 @@ See the %{link} to find out more about %{sitename}'s features and to start using products_search: "Search..." products_filter_by: "Filter by" products_filter_selected: "selected" + products_filter_clear: "Clear" + products_filter_done: "Done" products_loading: "Loading products..." products_updating_cart: "Updating cart..." products_cart_empty: "Cart empty" From e25e4e7482a3dda600c7e3041499a51571eabbc1 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sun, 19 Apr 2020 20:32:29 +0200 Subject: [PATCH 11/49] Fix issue with button submitting form instead of opening popup --- .../javascripts/templates/price_breakdown_button.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/templates/price_breakdown_button.html.haml b/app/assets/javascripts/templates/price_breakdown_button.html.haml index 5eff1ef237..1aa104eaca 100644 --- a/app/assets/javascripts/templates/price_breakdown_button.html.haml +++ b/app/assets/javascripts/templates/price_breakdown_button.html.haml @@ -1,2 +1,2 @@ -%button.graph-button{"ng-class" => "{open: tt_isOpen}"} +%button.graph-button{"ng-class" => "{open: tt_isOpen}", type: 'button'} / %i.ofn-i_058-graph From f337fd49e153d452687bc668d09fa9abd2652f3b Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 20 Apr 2020 09:08:10 +0200 Subject: [PATCH 12/49] Extract search feedback bar into partial and move into main column --- app/views/shop/products/_form.html.haml | 19 ++----------------- app/views/shop/products/_search_feedback.haml | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 17 deletions(-) create mode 100644 app/views/shop/products/_search_feedback.haml diff --git a/app/views/shop/products/_form.html.haml b/app/views/shop/products/_form.html.haml index 4b0311954f..e9beb73658 100644 --- a/app/views/shop/products/_form.html.haml +++ b/app/views/shop/products/_form.html.haml @@ -6,25 +6,10 @@ .row .small-12.columns .footer-pad.small-12.columns - .row.animate-slide{ "ng-show" => "query || appliedPropertiesList() || appliedTaxonsList()" } - .small-12.columns - .alert-box.search-alert.ng-scope - %a.right{"ng-click" => "clearAll()"} - = t :products_clear_all - %i.ofn-i_009-close - %span.filter-label - = t :products_showing - %span.applied-properties - {{ appliedPropertiesList() }} - %span.applied-taxons - {{ appliedTaxonsList() }} - %span{ ng: { hide: "!query"} } - %span{ "ng-show" => "appliedPropertiesList() || appliedTaxonsList()" } - = t :products_with - %span.applied-search "{{ query }}" - .row .medium-12.large-10.columns + = render partial: "shop/products/search_feedback" + %div.pad-top{ "infinite-scroll" => "loadMore()", "infinite-scroll-distance" => "1", "infinite-scroll-disabled" => 'Products.loading' } %product.animate-repeat{"ng-controller" => "ProductNodeCtrl", "ng-repeat" => "product in Products.products track by product.id", "id" => "product-{{ product.id }}"} = render "shop/products/summary" diff --git a/app/views/shop/products/_search_feedback.haml b/app/views/shop/products/_search_feedback.haml new file mode 100644 index 0000000000..3851f2704d --- /dev/null +++ b/app/views/shop/products/_search_feedback.haml @@ -0,0 +1,16 @@ +.row.animate-slide{ "ng-show" => "query || appliedPropertiesList() || appliedTaxonsList()" } + .small-12.columns + .alert-box.search-alert.ng-scope + %a.right{"ng-click" => "clearAll()"} + = t :products_clear_all + %i.ofn-i_009-close + %span.filter-label + = t :products_showing + %span.applied-properties + {{ appliedPropertiesList() }} + %span.applied-taxons + {{ appliedTaxonsList() }} + %span{ ng: { hide: "!query"} } + %span{ "ng-show" => "appliedPropertiesList() || appliedTaxonsList()" } + = t :products_with + %span.applied-search "{{ query }}" From cbd77b4941fa2883a46f933af444b478b86794b9 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 20 Apr 2020 09:19:09 +0200 Subject: [PATCH 13/49] Improve element sizing and position on small screens --- app/assets/stylesheets/darkswarm/_shop-navigation.css.scss | 2 ++ app/assets/stylesheets/darkswarm/shop.css.scss | 1 + 2 files changed, 3 insertions(+) diff --git a/app/assets/stylesheets/darkswarm/_shop-navigation.css.scss b/app/assets/stylesheets/darkswarm/_shop-navigation.css.scss index 12bf494949..4d5714eefc 100644 --- a/app/assets/stylesheets/darkswarm/_shop-navigation.css.scss +++ b/app/assets/stylesheets/darkswarm/_shop-navigation.css.scss @@ -85,6 +85,7 @@ ordercycle { @media all and (max-width: 480px) { width: 100%; + min-width: 0; } } @@ -99,6 +100,7 @@ ordercycle { @media all and (max-width: 768px) { float: none; + margin-right: 0; } @media all and (max-width: 480px) { diff --git a/app/assets/stylesheets/darkswarm/shop.css.scss b/app/assets/stylesheets/darkswarm/shop.css.scss index 42748e48f1..8fd9a455b2 100644 --- a/app/assets/stylesheets/darkswarm/shop.css.scss +++ b/app/assets/stylesheets/darkswarm/shop.css.scss @@ -32,6 +32,7 @@ $sidebar-footer-height: 5em; margin: 0; padding: 0 1em 0 2.75em; width: 100%; + min-width: 0; background: $white url("/assets/icn-search-grey.png") 1em center no-repeat; font-size: 1em; From 035bde9effe9cb55b2d95e5181c8b9ed615967cc Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 20 Apr 2020 15:00:17 +0200 Subject: [PATCH 14/49] Define breakpoints in mixin and refactor --- .../darkswarm/_shop-inputs.css.scss | 16 +++++++------- .../darkswarm/_shop-navigation.css.scss | 19 +++++++++-------- .../darkswarm/_shop-popovers.css.scss | 2 +- .../darkswarm/_shop-product-rows.css.scss | 21 ++++++++++--------- .../darkswarm/_shop-product-thumb.css.scss | 5 +++-- .../darkswarm/_shop-taxon-flag.css.scss | 8 ++++--- .../darkswarm/active_table.css.scss | 6 +++--- .../darkswarm/active_table_search.css.scss | 2 +- .../stylesheets/darkswarm/big-input.scss | 2 +- .../stylesheets/darkswarm/checkout.css.scss | 4 ++-- .../darkswarm/distributor_header.css.scss | 5 +++-- .../darkswarm/embedded_shopfront.css.scss | 5 +++-- .../stylesheets/darkswarm/home_panes.css.scss | 6 +++--- .../stylesheets/darkswarm/hub_node.css.scss | 14 ++++++------- .../stylesheets/darkswarm/images.css.scss | 4 ++-- app/assets/stylesheets/darkswarm/map.css.scss | 3 ++- app/assets/stylesheets/darkswarm/mixins.scss | 17 ++++++++++++++- .../darkswarm/modal-enterprises.css.scss | 4 ++-- .../stylesheets/darkswarm/page_alert.css.scss | 3 ++- .../darkswarm/producer_node.css.scss | 4 ++-- .../stylesheets/darkswarm/shop.css.scss | 16 +++++++------- .../stylesheets/darkswarm/shop_tabs.css.scss | 10 ++++----- .../stylesheets/darkswarm/tabset.css.scss | 12 +++++------ .../stylesheets/darkswarm/taxons.css.scss | 2 +- 24 files changed, 107 insertions(+), 83 deletions(-) diff --git a/app/assets/stylesheets/darkswarm/_shop-inputs.css.scss b/app/assets/stylesheets/darkswarm/_shop-inputs.css.scss index 9126dc56d7..59a3bd0c67 100644 --- a/app/assets/stylesheets/darkswarm/_shop-inputs.css.scss +++ b/app/assets/stylesheets/darkswarm/_shop-inputs.css.scss @@ -23,22 +23,22 @@ border-color: #b3b3b3; text-align: right; - @media all and (max-width: 1024px) { + @include breakpoint(desktop) { width: 8rem; } - @media all and (max-width: 768px) { + @include breakpoint(tablet) { width: 7rem; } - @media all and (max-width: 640px) { + @include breakpoint(phablet) { float: left !important; font-size: 0.75rem; padding-left: 0.25rem; padding-right: 0.25rem; } - @media all and (max-width: 480px) { + @include breakpoint(mobile) { width: 5.8rem; } @@ -62,15 +62,15 @@ input.bulk { width: 5rem; - @media all and (max-width: 1024px) { + @include breakpoint(desktop) { width: 4rem; } - @media all and (max-width: 768px) { + @include breakpoint(tablet) { width: 3.5rem; } - @media all and (max-width: 480px) { + @include breakpoint(mobile) { width: 2.8rem; } } @@ -86,7 +86,7 @@ .bulk-input-container { float: right; - @media all and (max-width: 640px) { + @include breakpoint(phablet) { float: left !important; } diff --git a/app/assets/stylesheets/darkswarm/_shop-navigation.css.scss b/app/assets/stylesheets/darkswarm/_shop-navigation.css.scss index 4d5714eefc..2310e412f0 100644 --- a/app/assets/stylesheets/darkswarm/_shop-navigation.css.scss +++ b/app/assets/stylesheets/darkswarm/_shop-navigation.css.scss @@ -1,3 +1,4 @@ +@import "mixins"; @import "typography"; ordercycle { @@ -17,7 +18,7 @@ ordercycle { margin-right: 0.3rem; } - @media all and (max-width: 1024px) { + @include breakpoint(desktop) { float: none; padding: 0.5em 1em; width: 100%; @@ -33,7 +34,7 @@ ordercycle { } } - @media all and (max-width: 480px) { + @include breakpoint(mobile) { padding: 0.5em 1em 0.75em; } @@ -83,7 +84,7 @@ ordercycle { border-radius: 0 0.25em 0.25em 0; min-width: 13em; - @media all and (max-width: 480px) { + @include breakpoint(mobile) { width: 100%; min-width: 0; } @@ -93,17 +94,17 @@ ordercycle { color: $grey-700; } - @media all and (max-width: 1024px) { + @include breakpoint(desktop) { float: none; margin-right: 1em; } - @media all and (max-width: 768px) { + @include breakpoint(tablet) { float: none; margin-right: 0; } - @media all and (max-width: 480px) { + @include breakpoint(mobile) { display: flex; } } @@ -116,7 +117,7 @@ ordercycle { padding: 0.5em 0; span { - @media all and (max-width: 768px) { + @include breakpoint(tablet) { font-size: 0.875em; } } @@ -150,7 +151,7 @@ shop ordercycle { color: $white; padding: 0 0 12px; - @media all and (max-width: 1024px) { + @include breakpoint(desktop) { float: none; display: inline-block; padding: 0.2em 0 0; @@ -158,7 +159,7 @@ shop ordercycle { margin-right: 1em; } - @media all and (max-width: 768px) { + @include breakpoint(tablet) { float: none; padding: 0 0 10px; } diff --git a/app/assets/stylesheets/darkswarm/_shop-popovers.css.scss b/app/assets/stylesheets/darkswarm/_shop-popovers.css.scss index d233284767..dd5aa5a177 100644 --- a/app/assets/stylesheets/darkswarm/_shop-popovers.css.scss +++ b/app/assets/stylesheets/darkswarm/_shop-popovers.css.scss @@ -114,7 +114,7 @@ button.graph-button { } } - @media all and (max-width: 768px) { + @include breakpoint(tablet) { // Hide for small display: none; } diff --git a/app/assets/stylesheets/darkswarm/_shop-product-rows.css.scss b/app/assets/stylesheets/darkswarm/_shop-product-rows.css.scss index d98457cd73..b0ea1faf39 100644 --- a/app/assets/stylesheets/darkswarm/_shop-product-rows.css.scss +++ b/app/assets/stylesheets/darkswarm/_shop-product-rows.css.scss @@ -1,3 +1,4 @@ +@import "mixins"; @import "branding"; @import "animations"; @@ -14,11 +15,11 @@ // outline: 1px solid red - @media all and (max-width: 768px) { + @include breakpoint(tablet) { font-size: 0.875rem; } - @media all and (max-width: 640px) { + @include breakpoint(phablet) { font-size: 0.75rem; } } @@ -56,13 +57,13 @@ .variant-name { padding-left: 7.9375rem; - @media all and (max-width: 768px) { + @include breakpoint(tablet) { padding-left: 4.9375rem; } } .variant-name { - @media all and (max-width: 640px) { + @include breakpoint(phablet) { background: #333; color: white; padding-left: 0.9375rem; @@ -82,7 +83,7 @@ font-size: 0.875rem; overflow: hidden; - @media all and (max-width: 768px) { + @include breakpoint(tablet) { font-size: 0.75rem; } } @@ -92,7 +93,7 @@ padding-left: 0.25rem; padding-right: 0.25rem; - @media all and (max-width: 640px) { + @include breakpoint(phablet) { text-align: right; } } @@ -106,7 +107,7 @@ color: $med-drk-grey; } - @media all and (max-width: 640px) { + @include breakpoint(phablet) { background: #777; color: $disabled-med; @@ -132,7 +133,7 @@ padding-bottom: 1em; line-height: 1; - @media all and (max-width: 768px) { + @include breakpoint(tablet) { padding-top: 0.65rem; padding-bottom: 0.65rem; } @@ -141,11 +142,11 @@ .summary-header { padding-left: 7.9375rem; - @media all and (max-width: 768px) { + @include breakpoint(tablet) { padding-left: 4.9375rem; } - @media all and (max-width: 640px) { + @include breakpoint(phablet) { padding-left: 0.9375rem; } diff --git a/app/assets/stylesheets/darkswarm/_shop-product-thumb.css.scss b/app/assets/stylesheets/darkswarm/_shop-product-thumb.css.scss index 8a75467c9c..c9f8794295 100644 --- a/app/assets/stylesheets/darkswarm/_shop-product-thumb.css.scss +++ b/app/assets/stylesheets/darkswarm/_shop-product-thumb.css.scss @@ -1,3 +1,4 @@ +@import "mixins"; @import "branding"; @import "animations"; @@ -56,7 +57,7 @@ } } - @media all and (max-width: 768px) { + @include breakpoint(tablet) { top: 2px; width: 4rem; height: 4rem; @@ -70,7 +71,7 @@ } } - @media all and (max-width: 640px) { + @include breakpoint(phablet) { display: none; width: 0rem; height: 0rem; diff --git a/app/assets/stylesheets/darkswarm/_shop-taxon-flag.css.scss b/app/assets/stylesheets/darkswarm/_shop-taxon-flag.css.scss index 6a2c993600..e1b0d8ccbe 100644 --- a/app/assets/stylesheets/darkswarm/_shop-taxon-flag.css.scss +++ b/app/assets/stylesheets/darkswarm/_shop-taxon-flag.css.scss @@ -1,3 +1,5 @@ +@import "mixins"; + .darkswarm { products { product { @@ -10,7 +12,7 @@ padding-top: 0.25rem; z-index: 999999; - @media all and (max-width: 480px) { + @include breakpoint(mobile) { background-size: 28px 32px; min-height: 32px; width: 28px; @@ -27,11 +29,11 @@ } } - @media all and (max-width: 768px) { + @include breakpoint(tablet) { margin-top: -0.85rem; } - @media all and (max-width: 480px) { + @include breakpoint(mobile) { render-svg { svg { width: 18px; diff --git a/app/assets/stylesheets/darkswarm/active_table.css.scss b/app/assets/stylesheets/darkswarm/active_table.css.scss index 66dca7743b..395ad7c876 100644 --- a/app/assets/stylesheets/darkswarm/active_table.css.scss +++ b/app/assets/stylesheets/darkswarm/active_table.css.scss @@ -26,7 +26,7 @@ display: block; border: 0; - @media all and (max-width: 640px) { + @include breakpoint(phablet) { margin-bottom: 1rem; } @@ -45,7 +45,7 @@ } // Generic text resize - @media all and (max-width: 640px) { + @include breakpoint(phablet) { &, & * { font-size: 0.875rem; } @@ -114,7 +114,7 @@ .fat > div { border-top: 1px solid #aaa; - @media all and (max-width: 640px) { + @include breakpoint(phablet) { margin-top: 1em; } diff --git a/app/assets/stylesheets/darkswarm/active_table_search.css.scss b/app/assets/stylesheets/darkswarm/active_table_search.css.scss index b934116cdc..1c26fcb74f 100644 --- a/app/assets/stylesheets/darkswarm/active_table_search.css.scss +++ b/app/assets/stylesheets/darkswarm/active_table_search.css.scss @@ -16,7 +16,7 @@ margin-top: 2px; - @media all and (max-width: 640px) { + @include breakpoint(phablet) { margin-bottom: 1em; } } diff --git a/app/assets/stylesheets/darkswarm/big-input.scss b/app/assets/stylesheets/darkswarm/big-input.scss index 7b9ecdac8d..10336e30c6 100644 --- a/app/assets/stylesheets/darkswarm/big-input.scss +++ b/app/assets/stylesheets/darkswarm/big-input.scss @@ -23,7 +23,7 @@ box-shadow: none; color: $inputactv; - @media all and (max-width: 640px) { + @include breakpoint(phablet) { font-size: 1.25rem; } diff --git a/app/assets/stylesheets/darkswarm/checkout.css.scss b/app/assets/stylesheets/darkswarm/checkout.css.scss index 2e1a2a528c..df51d9de34 100644 --- a/app/assets/stylesheets/darkswarm/checkout.css.scss +++ b/app/assets/stylesheets/darkswarm/checkout.css.scss @@ -13,7 +13,7 @@ checkout { display: block; - @media all and (max-width: 640px) { + @include breakpoint(phablet) { &.row .row { margin-left: 0; margin-right: 0; @@ -24,7 +24,7 @@ checkout { .button, table { width: 100%; } - @media all and (max-width: 640px) { + @include breakpoint(phablet) { form.edit_order { border: 1px solid $disabled-bright; margin-bottom: 2rem; diff --git a/app/assets/stylesheets/darkswarm/distributor_header.css.scss b/app/assets/stylesheets/darkswarm/distributor_header.css.scss index 8e3fdc2a9b..8e9ebf769b 100644 --- a/app/assets/stylesheets/darkswarm/distributor_header.css.scss +++ b/app/assets/stylesheets/darkswarm/distributor_header.css.scss @@ -1,3 +1,4 @@ +@import "mixins"; @import 'typography'; section { @@ -34,7 +35,7 @@ section { @include headingFont; } - @media all and (max-width: 768px) { + @include breakpoint(tablet) { location, location + small { display: block; } @@ -44,7 +45,7 @@ section { margin-top: 0; padding-top: 0.45em; - @media all and (max-width: 768px) { + @include breakpoint(tablet) { margin-bottom: 8px; } } diff --git a/app/assets/stylesheets/darkswarm/embedded_shopfront.css.scss b/app/assets/stylesheets/darkswarm/embedded_shopfront.css.scss index c1206ecc5e..210825a008 100644 --- a/app/assets/stylesheets/darkswarm/embedded_shopfront.css.scss +++ b/app/assets/stylesheets/darkswarm/embedded_shopfront.css.scss @@ -1,3 +1,4 @@ +@import "mixins"; @import "typography"; $large-menu-height: 4.6875rem; @@ -97,7 +98,7 @@ body.embedded { display: none; } - @media all and (max-width: 640px) { + @include breakpoint(phablet) { nav.top-bar { height: 3.4rem; padding: 0.2rem $gutter-width; @@ -141,7 +142,7 @@ body.embedded { } } - @media all and (max-width: 480px) { + @include breakpoint(mobile) { ul.left li.powered-by span { display: none; } diff --git a/app/assets/stylesheets/darkswarm/home_panes.css.scss b/app/assets/stylesheets/darkswarm/home_panes.css.scss index 92053189e2..60f881462d 100644 --- a/app/assets/stylesheets/darkswarm/home_panes.css.scss +++ b/app/assets/stylesheets/darkswarm/home_panes.css.scss @@ -66,7 +66,7 @@ font-weight: 300; } - @media all and (max-width: 768px) { + @include breakpoint(tablet) { h2 { font-size: 52px; } @@ -87,7 +87,7 @@ padding-bottom: 0; } - @media all and (max-width: 640px) { + @include breakpoint(phablet) { .row .row { padding: 0; } @@ -139,7 +139,7 @@ font-weight: 300; color: $brand-colour; - @media all and (max-width: 640px) { + @include breakpoint(phablet) { font-size: 45px; } } diff --git a/app/assets/stylesheets/darkswarm/hub_node.css.scss b/app/assets/stylesheets/darkswarm/hub_node.css.scss index cf0ae9ca46..f7e1ac5686 100644 --- a/app/assets/stylesheets/darkswarm/hub_node.css.scss +++ b/app/assets/stylesheets/darkswarm/hub_node.css.scss @@ -45,7 +45,7 @@ } //Hub Link - @media all and (max-width: 640px) { + @include breakpoint(phablet) { a.hub { display: block; } @@ -67,7 +67,7 @@ .active_table_row { border: 1px solid transparent; - @media all and (max-width: 640px) { + @include breakpoint(phablet) { border-color: $clr-brick-light; } @@ -85,7 +85,7 @@ } &.open, &.closed { - @media all and (max-width: 640px) { + @include breakpoint(phablet) { .active_table_row:first-child .skinny-head { background-color: $clr-brick-light; @@ -164,7 +164,7 @@ } } - @media all and (max-width: 640px) { + @include breakpoint(phablet) { .active_table_row:first-child .skinny-head { background-color: rgba(255, 255, 255, 0.85); } @@ -218,7 +218,7 @@ } // Small devices - @media all and (max-width: 640px) { + @include breakpoint(phablet) { .active_table_row:first-child .skinny-head { background-color: $disabled-bright; } @@ -226,7 +226,7 @@ } // Small devices - @media all and (max-width: 640px) { + @include breakpoint(phablet) { .active_table_row, .active_table_row:first-child, .active_table_row:last-child { border-color: $disabled-bright; background-color: transparent; @@ -253,7 +253,7 @@ cursor: auto; } - @media all and (max-width: 640px) { + @include breakpoint(phablet) { border-color: transparent; } } diff --git a/app/assets/stylesheets/darkswarm/images.css.scss b/app/assets/stylesheets/darkswarm/images.css.scss index 2a9f931f6e..cd939e3b42 100644 --- a/app/assets/stylesheets/darkswarm/images.css.scss +++ b/app/assets/stylesheets/darkswarm/images.css.scss @@ -13,7 +13,7 @@ &.placeholder { opacity: 0.35; - @media all and (max-width: 1024px) { + @include breakpoint(desktop) { display: none; } } @@ -31,7 +31,7 @@ max-height: 260px; overflow: hidden; - @media all and (max-width: 640px) { + @include breakpoint(phablet) { min-height: 68px; } } diff --git a/app/assets/stylesheets/darkswarm/map.css.scss b/app/assets/stylesheets/darkswarm/map.css.scss index d880b3025b..b0df5b66da 100644 --- a/app/assets/stylesheets/darkswarm/map.css.scss +++ b/app/assets/stylesheets/darkswarm/map.css.scss @@ -1,6 +1,7 @@ // Place all the styles related to the map controller here. // They will automatically be included in application.css. // You can use Sass (SCSS) here: http://sass-lang.com/ +@import "mixins"; @import "big-input"; .map-container { @@ -29,7 +30,7 @@ margin-top: 1.2rem; margin-left: 1rem; - @media all and (max-width: 768px) { + @include breakpoint(tablet) { width: 80%; } diff --git a/app/assets/stylesheets/darkswarm/mixins.scss b/app/assets/stylesheets/darkswarm/mixins.scss index 0643294c0c..2b38d89dea 100644 --- a/app/assets/stylesheets/darkswarm/mixins.scss +++ b/app/assets/stylesheets/darkswarm/mixins.scss @@ -16,7 +16,7 @@ padding-top: 100px; padding-bottom: 100px; - @media all and (max-width: 640px) { + @include breakpoint(phablet) { padding-top: 25px; } } @@ -255,3 +255,18 @@ background-repeat: no-repeat; background-size: 922px 922px; } + +@mixin breakpoint($point) { + @if $point == desktop { + @media all and (max-width: 1024px) { @content; } + } + @else if $point == tablet { + @media all and (max-width: 768px) { @content; } + } + @else if $point == phablet { + @media all and (max-width: 640px) { @content; } + } + @else if $point == mobile { + @media all and (max-width: 480px) { @content; } + } +} diff --git a/app/assets/stylesheets/darkswarm/modal-enterprises.css.scss b/app/assets/stylesheets/darkswarm/modal-enterprises.css.scss index 5d356028f8..0f52ab8b79 100644 --- a/app/assets/stylesheets/darkswarm/modal-enterprises.css.scss +++ b/app/assets/stylesheets/darkswarm/modal-enterprises.css.scss @@ -57,7 +57,7 @@ p { line-height: 2.4; - @media all and (max-width: 640px) { + @include breakpoint(phablet) { line-height: 1.4; } } @@ -193,7 +193,7 @@ display: inline-block; border-bottom: 1px solid transparent; - @media all and (max-width: 640px) { + @include breakpoint(phablet) { display: none; } } diff --git a/app/assets/stylesheets/darkswarm/page_alert.css.scss b/app/assets/stylesheets/darkswarm/page_alert.css.scss index 59ccf327d0..4be82c8c2e 100644 --- a/app/assets/stylesheets/darkswarm/page_alert.css.scss +++ b/app/assets/stylesheets/darkswarm/page_alert.css.scss @@ -1,3 +1,4 @@ +@import "mixins"; @import "branding"; @import "animations"; @import "compass/css3/transition"; @@ -19,7 +20,7 @@ $page-alert-height: 55px; margin: 0; h6 { - @media all and (max-width: 480px) { + @include breakpoint(mobile) { font-size: 10px; line-height: 24px; } diff --git a/app/assets/stylesheets/darkswarm/producer_node.css.scss b/app/assets/stylesheets/darkswarm/producer_node.css.scss index 770a76564f..707c5d903b 100644 --- a/app/assets/stylesheets/darkswarm/producer_node.css.scss +++ b/app/assets/stylesheets/darkswarm/producer_node.css.scss @@ -4,7 +4,7 @@ .producers { .active_table .active_table_node { // Header row - @media all and (max-width: 640px) { + @include breakpoint(phablet) { .skinny-head { background-color: $clr-turquoise-light; @@ -137,7 +137,7 @@ .active_table_row.closed { border: 1px solid transparent; - @media all and (max-width: 640px) { + @include breakpoint(phablet) { border-color: $clr-turquoise-light; } diff --git a/app/assets/stylesheets/darkswarm/shop.css.scss b/app/assets/stylesheets/darkswarm/shop.css.scss index 8fd9a455b2..23b6502866 100644 --- a/app/assets/stylesheets/darkswarm/shop.css.scss +++ b/app/assets/stylesheets/darkswarm/shop.css.scss @@ -49,12 +49,12 @@ $sidebar-footer-height: 5em; padding: 0; font-size: 1em; - @media all and (max-width: 480px) { + @include breakpoint(mobile) { margin-left: 0.75em; } } - @media all and (max-width: 480px) { + @include breakpoint(mobile) { font-size: 0.9em; } } @@ -133,14 +133,14 @@ $sidebar-footer-height: 5em; } } - @media all and (max-width: 768px) { + @include breakpoint(tablet) { .sidebar, .sidebar-footer { width: $sidebar-medium-width; margin-right: -$sidebar-medium-width; } } - @media all and (max-width: 480px) { + @include breakpoint(mobile) { .sidebar, .sidebar-footer { width: $sidebar-small-width; margin-right: -$sidebar-small-width; @@ -151,13 +151,13 @@ $sidebar-footer-height: 5em; products { display: block; - @media all and (max-width: 768px) { + @include breakpoint(tablet) { input.button.right { float: left; } } - @media all and (max-width: 480px) { + @include breakpoint(mobile) { .add_to_cart { margin-top: 2rem; } @@ -204,7 +204,7 @@ $sidebar-footer-height: 5em; .bulk-buy { font-size: 0.875rem; - @media all and (max-width: 768px) { + @include breakpoint(tablet) { font-size: 0.75rem; } } @@ -227,7 +227,7 @@ $sidebar-footer-height: 5em; font-size: 0.75em; padding-right: 0.9375rem; - @media all and (max-width: 640px) { + @include breakpoint(phablet) { padding-right: 0.25rem; } } diff --git a/app/assets/stylesheets/darkswarm/shop_tabs.css.scss b/app/assets/stylesheets/darkswarm/shop_tabs.css.scss index 36f8695af8..66bbb8998e 100644 --- a/app/assets/stylesheets/darkswarm/shop_tabs.css.scss +++ b/app/assets/stylesheets/darkswarm/shop_tabs.css.scss @@ -14,12 +14,12 @@ .columns { display: flex; - @media all and (max-width: 1024px) { + @include breakpoint(desktop) { display: table; width: 100%; } - @media all and (max-width: 480px) { + @include breakpoint(mobile) { padding: 0; } } @@ -56,7 +56,7 @@ background: none; } - @media all and (max-width: 640px) { + @include breakpoint(phablet) { padding: 0.35em 0 0.65em 0; } } @@ -69,7 +69,7 @@ } } - @media all and (max-width: 1024px) { + @include breakpoint(desktop) { display: table-cell; width: auto; } @@ -106,7 +106,7 @@ p { max-width: 100%; - @media all and (max-width: 768px) { + @include breakpoint(tablet) { height: auto !important; } } diff --git a/app/assets/stylesheets/darkswarm/tabset.css.scss b/app/assets/stylesheets/darkswarm/tabset.css.scss index c100bff672..4f4ab3c7b9 100644 --- a/app/assets/stylesheets/darkswarm/tabset.css.scss +++ b/app/assets/stylesheets/darkswarm/tabset.css.scss @@ -10,7 +10,7 @@ .tab { text-align: center; - @media all and (max-width: 640px) { + @include breakpoint(phablet) { text-align: left; } @@ -24,7 +24,7 @@ padding: 1em; border: none; - @media all and (max-width: 640px) { + @include breakpoint(phablet) { padding: 0.35em 0 0.65em 0; text-shadow: none; } @@ -37,7 +37,7 @@ border-bottom: 4px solid $clr-brick-bright; cursor: pointer; - @media all and (max-width: 640px) { + @include breakpoint(phablet) { transition: none; color: white; background-color: $clr-brick-bright; @@ -46,7 +46,7 @@ a { color: $clr-brick-bright; - @media all and (max-width: 640px) { + @include breakpoint(phablet) { color: #ffffff; } } @@ -55,14 +55,14 @@ &.selected { border-bottom: 4px solid $clr-brick; - @media all and (max-width: 640px) { + @include breakpoint(phablet) { background-color: $clr-brick; } a { color: $clr-brick; - @media all and (max-width: 640px) { + @include breakpoint(phablet) { color: #ffffff; } } diff --git a/app/assets/stylesheets/darkswarm/taxons.css.scss b/app/assets/stylesheets/darkswarm/taxons.css.scss index a5db89b324..006e15de58 100644 --- a/app/assets/stylesheets/darkswarm/taxons.css.scss +++ b/app/assets/stylesheets/darkswarm/taxons.css.scss @@ -57,7 +57,7 @@ } } - @media all and (max-width: 640px) { + @include breakpoint(phablet) { render-svg { svg { width: 24px; From d1ea2c5f7785427ea7f992912d9259c603aaa2ee Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 21 Apr 2020 11:40:01 +0200 Subject: [PATCH 15/49] Extract shop searchbar styles to separate file --- .../stylesheets/darkswarm/shop.css.scss | 42 ------------------ .../darkswarm/shop_search.css.scss | 44 +++++++++++++++++++ 2 files changed, 44 insertions(+), 42 deletions(-) create mode 100644 app/assets/stylesheets/darkswarm/shop_search.css.scss diff --git a/app/assets/stylesheets/darkswarm/shop.css.scss b/app/assets/stylesheets/darkswarm/shop.css.scss index 23b6502866..d17c0befab 100644 --- a/app/assets/stylesheets/darkswarm/shop.css.scss +++ b/app/assets/stylesheets/darkswarm/shop.css.scss @@ -17,48 +17,6 @@ $sidebar-large-width: 45%; $sidebar-footer-height: 5em; .darkswarm { - .shop-searchbar { - background-color: $grey-100; - height: 5em; - padding: 1em 0; - margin-bottom: 1em; - position: relative; - z-index: 5; - - input#search { - height: 3em; - border-radius: 0.25em; - border: solid 1px $grey-300; - margin: 0; - padding: 0 1em 0 2.75em; - width: 100%; - min-width: 0; - background: $white url("/assets/icn-search-grey.png") 1em center no-repeat; - font-size: 1em; - - &::placeholder { - font-style: italic; - } - } - - button { - background-color: $grey-600; - margin-left: 1em; - height: 3em; - width: 7em; - padding: 0; - font-size: 1em; - - @include breakpoint(mobile) { - margin-left: 0.75em; - } - } - - @include breakpoint(mobile) { - font-size: 0.9em; - } - } - .shop-filters-sidebar { display: flex; flex-direction: column; diff --git a/app/assets/stylesheets/darkswarm/shop_search.css.scss b/app/assets/stylesheets/darkswarm/shop_search.css.scss new file mode 100644 index 0000000000..9db17086e9 --- /dev/null +++ b/app/assets/stylesheets/darkswarm/shop_search.css.scss @@ -0,0 +1,44 @@ +@import "mixins"; +@import "branding"; + +.shop-searchbar { + background-color: $grey-100; + height: 5em; + padding: 1em 0; + margin-bottom: 1em; + position: relative; + z-index: 5; + + input#search { + height: 3em; + border-radius: 0.25em; + border: solid 1px $grey-300; + margin: 0; + padding: 0 1em 0 2.75em; + width: 100%; + min-width: 0; + background: $white url("/assets/icn-search-grey.png") 1em center no-repeat; + font-size: 1rem; // avoid zoom on iphone, see issue #4535 + + &::placeholder { + font-style: italic; + } + } + + button { + background-color: $grey-600; + margin-left: 1em; + height: 3em; + width: 7em; + padding: 0; + font-size: 1em; + + @include breakpoint(mobile) { + margin-left: 0.75em; + } + } + + @include breakpoint(mobile) { + font-size: 0.9em; + } +} From 9eaf55f4c09bcf6ad84c84e5c0b142a1505c97c5 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 21 Apr 2020 11:42:49 +0200 Subject: [PATCH 16/49] Add missing translation key --- app/views/shop/products/_searchbar.haml | 2 +- config/locales/en.yml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/views/shop/products/_searchbar.haml b/app/views/shop/products/_searchbar.haml index aa4a2ff761..c74be2b14a 100644 --- a/app/views/shop/products/_searchbar.haml +++ b/app/views/shop/products/_searchbar.haml @@ -8,6 +8,6 @@ .hide-for-large-up %button{type: 'button', ng: {click: 'toggleFilterSidebar()'}} - Filters + = t(:products_filter_heading) %span{ng: {show: 'filtersCount()' }} ({{ filtersCount() }}) diff --git a/config/locales/en.yml b/config/locales/en.yml index ca2d5ad360..691d9d8006 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1655,6 +1655,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using products_search: "Search..." products_filter_by: "Filter by" products_filter_selected: "selected" + products_filter_heading: "Filters" products_filter_clear: "Clear" products_filter_done: "Done" products_loading: "Loading products..." From ebe00bdc314cb3387e6d71a0573fd20cd56eca15 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 21 Apr 2020 11:45:38 +0200 Subject: [PATCH 17/49] Update filters clear button functionality --- .../darkswarm/controllers/products_controller.js.coffee | 3 +++ app/views/shop/products/_form.html.haml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee index 51e02ac2b4..b1004b132d 100644 --- a/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee +++ b/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee @@ -85,6 +85,9 @@ Darkswarm.controller "ProductsCtrl", ($scope, $filter, $rootScope, Products, Ord $scope.clearAll = -> $scope.query = "" + $scope.clearFilters() + + $scope.clearFilters = -> $scope.taxonSelectors.clearAll() $scope.propertySelectors.clearAll() diff --git a/app/views/shop/products/_form.html.haml b/app/views/shop/products/_form.html.haml index e9beb73658..a91ea0cb7a 100644 --- a/app/views/shop/products/_form.html.haml +++ b/app/views/shop/products/_form.html.haml @@ -52,7 +52,7 @@ = render partial: "shop/products/filters" .sidebar-footer - %button{type: 'button', ng: {click: 'clearAll() && toggleFilterSidebar()'}} + %button{type: 'button', ng: {click: 'clearFilters()'}} = t(:products_filter_clear) %button.done{type: 'button', ng: {click: 'toggleFilterSidebar()'}} = t(:products_filter_done) From 865dcf79cbd38796958135fcdabb139e7fd1b39a Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Thu, 23 Apr 2020 09:47:33 +0200 Subject: [PATCH 18/49] Extract some properties to variables --- .../stylesheets/darkswarm/_shop-navigation.css.scss | 9 +++++---- app/assets/stylesheets/darkswarm/account.css.scss | 3 ++- app/assets/stylesheets/darkswarm/shop.css.scss | 10 +++++----- app/assets/stylesheets/darkswarm/shop_search.css.scss | 3 ++- app/assets/stylesheets/darkswarm/variables.css.scss | 6 ++++++ 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/app/assets/stylesheets/darkswarm/_shop-navigation.css.scss b/app/assets/stylesheets/darkswarm/_shop-navigation.css.scss index 2310e412f0..95bd6b1059 100644 --- a/app/assets/stylesheets/darkswarm/_shop-navigation.css.scss +++ b/app/assets/stylesheets/darkswarm/_shop-navigation.css.scss @@ -1,12 +1,13 @@ @import "mixins"; @import "typography"; +@import "variables"; ordercycle { float: right; background: $grey-050; color: $grey-800; width: 100%; - border-radius: 0.5em 0.5em 0 0; + border-radius: $radius-medium $radius-medium 0 0; margin-top: 1em; padding: 1em 1.25em 0; @@ -42,12 +43,12 @@ ordercycle { border: 1px solid $teal-300; display: inline-block; font-size: 1em; - border-radius: 0.25em; + border-radius: $radius-small; .select-label { background-color: rgba($teal-300, 0.5); display: inline-block; - border-radius: 0.25em 0 0 0.25em; + border-radius: $radius-small 0 0 $radius-small; float: left; font-size: 1em; line-height: 1.3em; @@ -81,7 +82,7 @@ ordercycle { padding: 0.5em 1.25em 0.5em 0.75em; height: 2.35em; background-size: 30px auto; - border-radius: 0 0.25em 0.25em 0; + border-radius: 0 $radius-small $radius-small 0; min-width: 13em; @include breakpoint(mobile) { diff --git a/app/assets/stylesheets/darkswarm/account.css.scss b/app/assets/stylesheets/darkswarm/account.css.scss index 44d93b4cd1..bb6701f15d 100644 --- a/app/assets/stylesheets/darkswarm/account.css.scss +++ b/app/assets/stylesheets/darkswarm/account.css.scss @@ -1,5 +1,6 @@ @import "branding"; @import "mixins"; +@import "variables"; .account-summary { color: #4a4a4a; @@ -99,7 +100,7 @@ table { width: 100%; - border-radius: 0.5em 0.5em 0 0; + border-radius: $radius-medium $radius-medium 0 0; tr:nth-of-type(even) { background: transparent; diff --git a/app/assets/stylesheets/darkswarm/shop.css.scss b/app/assets/stylesheets/darkswarm/shop.css.scss index d17c0befab..d6a8090333 100644 --- a/app/assets/stylesheets/darkswarm/shop.css.scss +++ b/app/assets/stylesheets/darkswarm/shop.css.scss @@ -29,9 +29,9 @@ $sidebar-footer-height: 5em; z-index: 200; height: 100%; width: 100%; - background-color: rgba(0, 0, 0, 0.15); + background-color: $shop-sidebar-overlay; opacity: 0; - transition: opacity 250ms ease-in-out 0s; + transition: opacity $transition-sidebar; } &.shown { @@ -54,7 +54,7 @@ $sidebar-footer-height: 5em; margin-right: -$sidebar-large-width; background-color: rgba($white, 0.95); padding: 1em; - transition: margin 250ms ease-in-out 0s; + transition: margin $transition-sidebar; overflow-y: scroll; .property-selectors { @@ -70,7 +70,7 @@ $sidebar-footer-height: 5em; position: fixed; bottom: 0; right: 0; - transition: margin 250ms ease-in-out 0s; + transition: margin $transition-sidebar; padding: 1em; button { @@ -78,7 +78,7 @@ $sidebar-footer-height: 5em; background-color: $grey-800; color: $white; border: 1px solid $grey-600; - border-radius: 0.5em; + border-radius: $radius-medium; width: 47%; margin: 0; padding: 0; diff --git a/app/assets/stylesheets/darkswarm/shop_search.css.scss b/app/assets/stylesheets/darkswarm/shop_search.css.scss index 9db17086e9..f800fdaf00 100644 --- a/app/assets/stylesheets/darkswarm/shop_search.css.scss +++ b/app/assets/stylesheets/darkswarm/shop_search.css.scss @@ -1,5 +1,6 @@ @import "mixins"; @import "branding"; +@import "variables"; .shop-searchbar { background-color: $grey-100; @@ -11,7 +12,7 @@ input#search { height: 3em; - border-radius: 0.25em; + border-radius: $radius-small; border: solid 1px $grey-300; margin: 0; padding: 0 1em 0 2.75em; diff --git a/app/assets/stylesheets/darkswarm/variables.css.scss b/app/assets/stylesheets/darkswarm/variables.css.scss index 0b8104cea1..29b4d14562 100644 --- a/app/assets/stylesheets/darkswarm/variables.css.scss +++ b/app/assets/stylesheets/darkswarm/variables.css.scss @@ -30,3 +30,9 @@ $topbar-dropdown-link-color: $black; $topbar-dropdown-bg: $white; $topbar-dropdown-link-bg: $white; $topbar-dropdown-link-bg-hover: $white; + +$radius-small: 0.25em; +$radius-medium: 0.5em; + +$shop-sidebar-overlay: rgba(0, 0, 0, 0.15); +$transition-sidebar: 250ms ease-in-out 0s; From cbb67e15ed7e0556a23d16b48bda25018a5a8a0f Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 27 Apr 2020 12:14:11 +0200 Subject: [PATCH 19/49] Extract button styles --- .../stylesheets/darkswarm/shop.css.scss | 15 +------------- app/assets/stylesheets/darkswarm/ui.css.scss | 20 +++++++++++++++++++ app/views/shop/products/_form.html.haml | 4 ++-- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/app/assets/stylesheets/darkswarm/shop.css.scss b/app/assets/stylesheets/darkswarm/shop.css.scss index d6a8090333..4afb254dd2 100644 --- a/app/assets/stylesheets/darkswarm/shop.css.scss +++ b/app/assets/stylesheets/darkswarm/shop.css.scss @@ -74,20 +74,7 @@ $sidebar-footer-height: 5em; padding: 1em; button { - height: 3em; - background-color: $grey-800; - color: $white; - border: 1px solid $grey-600; - border-radius: $radius-medium; - width: 47%; - margin: 0; - padding: 0; - - &.done { - background-color: $orange-500; - border: none; - margin-left: 3%; - } + width: 48%; } } diff --git a/app/assets/stylesheets/darkswarm/ui.css.scss b/app/assets/stylesheets/darkswarm/ui.css.scss index 35400362bb..e30f238aa5 100644 --- a/app/assets/stylesheets/darkswarm/ui.css.scss +++ b/app/assets/stylesheets/darkswarm/ui.css.scss @@ -2,6 +2,7 @@ @import "branding"; @import "mixins"; @import "typography"; +@import "variables"; // Button class extensions @@ -123,6 +124,25 @@ button.success, .button.success { } } +button.large { + height: 3em; + font-size: 1em; + color: $white; + border-radius: $radius-medium; + margin: 0; + padding: 0; + + &.dark { + background-color: $grey-800; + border: 1px solid $grey-600; + } + + &.bright { + background-color: $orange-500; + border: none; + } +} + // Responsive @media screen and (min-width: 768px) { [role="main"] { diff --git a/app/views/shop/products/_form.html.haml b/app/views/shop/products/_form.html.haml index a91ea0cb7a..9e373ec50a 100644 --- a/app/views/shop/products/_form.html.haml +++ b/app/views/shop/products/_form.html.haml @@ -52,7 +52,7 @@ = render partial: "shop/products/filters" .sidebar-footer - %button{type: 'button', ng: {click: 'clearFilters()'}} + %button.large.dark.left{type: 'button', ng: {click: 'clearFilters()'}} = t(:products_filter_clear) - %button.done{type: 'button', ng: {click: 'toggleFilterSidebar()'}} + %button.large.bright.right{type: 'button', ng: {click: 'toggleFilterSidebar()'}} = t(:products_filter_done) From f24969edb10ae5b334f053c5e705f155c940d549 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 20 Apr 2020 09:39:16 +0200 Subject: [PATCH 20/49] Remove gutter padding on shop content to gain a bit more horizontal real-estate --- app/assets/stylesheets/darkswarm/ui.css.scss | 5 +++++ app/views/shop/products/_form.html.haml | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/assets/stylesheets/darkswarm/ui.css.scss b/app/assets/stylesheets/darkswarm/ui.css.scss index e30f238aa5..66d72d6511 100644 --- a/app/assets/stylesheets/darkswarm/ui.css.scss +++ b/app/assets/stylesheets/darkswarm/ui.css.scss @@ -153,3 +153,8 @@ button.large { .flex { display: flex; } + +.no-gutter { + padding-right: 0; + padding-left: 0; +} diff --git a/app/views/shop/products/_form.html.haml b/app/views/shop/products/_form.html.haml index 9e373ec50a..8a27ead0a6 100644 --- a/app/views/shop/products/_form.html.haml +++ b/app/views/shop/products/_form.html.haml @@ -5,7 +5,7 @@ .row .small-12.columns - .footer-pad.small-12.columns + .footer-pad.small-12.columns.no-gutter .row .medium-12.large-10.columns = render partial: "shop/products/search_feedback" From ff69389bb0e04e46f0f72fb6d86ab50053c0f71b Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 21 Apr 2020 13:40:42 +0200 Subject: [PATCH 21/49] Make search bar "sticky" for tablets and mobile --- app/assets/stylesheets/darkswarm/menu.css.scss | 6 +++++- app/assets/stylesheets/darkswarm/shop_search.css.scss | 6 ++++++ app/assets/stylesheets/darkswarm/variables.css.scss | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/app/assets/stylesheets/darkswarm/menu.css.scss b/app/assets/stylesheets/darkswarm/menu.css.scss index 23c2c8ae68..abefec7a23 100644 --- a/app/assets/stylesheets/darkswarm/menu.css.scss +++ b/app/assets/stylesheets/darkswarm/menu.css.scss @@ -171,7 +171,7 @@ nav.top-bar { .tab-bar { background-color: white; border-bottom: 1px solid $light-grey-transparency; - height: 2.8em; + height: $mobile-nav-height; position: fixed; width: 100%; z-index: 1; @@ -210,6 +210,10 @@ nav.top-bar { } } +.off-canvas-wrap { + overflow: inherit; +} + .off-canvas-list li.language-switcher ul li { list-style-type: none; padding-left: 0.5em; diff --git a/app/assets/stylesheets/darkswarm/shop_search.css.scss b/app/assets/stylesheets/darkswarm/shop_search.css.scss index f800fdaf00..fdf45329ad 100644 --- a/app/assets/stylesheets/darkswarm/shop_search.css.scss +++ b/app/assets/stylesheets/darkswarm/shop_search.css.scss @@ -39,6 +39,12 @@ } } + @include breakpoint(desktop) { + position: -webkit-sticky; + position: sticky; + top: $mobile-nav-height; + } + @include breakpoint(mobile) { font-size: 0.9em; } diff --git a/app/assets/stylesheets/darkswarm/variables.css.scss b/app/assets/stylesheets/darkswarm/variables.css.scss index 29b4d14562..216e7f68ee 100644 --- a/app/assets/stylesheets/darkswarm/variables.css.scss +++ b/app/assets/stylesheets/darkswarm/variables.css.scss @@ -31,6 +31,8 @@ $topbar-dropdown-bg: $white; $topbar-dropdown-link-bg: $white; $topbar-dropdown-link-bg-hover: $white; +$mobile-nav-height: 2.8em; + $radius-small: 0.25em; $radius-medium: 0.5em; From 026b98022ca3052a36f830ae3091ffac0085bbed Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 21 Apr 2020 14:00:27 +0200 Subject: [PATCH 22/49] Add clear search button in shop searchbar --- app/assets/images/icn-close.png | Bin 0 -> 540 bytes .../controllers/products_controller.js.coffee | 5 ++++- .../stylesheets/darkswarm/shop_search.css.scss | 13 +++++++++++++ app/views/shop/products/_searchbar.haml | 11 +++++++---- 4 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 app/assets/images/icn-close.png diff --git a/app/assets/images/icn-close.png b/app/assets/images/icn-close.png new file mode 100644 index 0000000000000000000000000000000000000000..6ef99bffec3400901080a7fe2c1a32948ce54123 GIT binary patch literal 540 zcmV+%0^|LOP)Px$)=5M`R5%f>RoiO9KoFgTMo<(*#6S^5s*%2GKE(E4Ed7Ln|I+#)(btk-UhAv( z3jyt%Z8n%>TU+bEW_M?2&d!RbQkU{kEc>KbB|J2~zm_Y}fPUo5X18i@k!zEzw zMF8xJ;S)Y0!jR@G6qgD|_z3!1Sb%p1igIQc24%BZS}vD}Ahkz6pQj)QXusc|uK7H< z2W3<<0)s`pUZ-NQNUPO~JkN`PHX02om&-Jt&uKE5z+4J2dOAK*BYPMkx?C?ubAZaCfVLceV=mM>8{s-B1(ZQ^v)PE8qVkqyArhrM zun-~cW=d+cngB!oKvU8`1L^<}7d`W#@ zl}d%C)2T9V*laeNDG&D5ub!x~xP$y^C@B0&#YGy(XDm84;S=;{P=LW#?wqRs)gD;6 e1N#5`0zLtKr19q*Qh43~0000 - $scope.query = "" + $scope.clearQuery() $scope.clearFilters() + $scope.clearQuery = -> + $scope.query = "" + $scope.clearFilters = -> $scope.taxonSelectors.clearAll() $scope.propertySelectors.clearAll() diff --git a/app/assets/stylesheets/darkswarm/shop_search.css.scss b/app/assets/stylesheets/darkswarm/shop_search.css.scss index fdf45329ad..0822e5ba3c 100644 --- a/app/assets/stylesheets/darkswarm/shop_search.css.scss +++ b/app/assets/stylesheets/darkswarm/shop_search.css.scss @@ -10,6 +10,19 @@ position: relative; z-index: 5; + .search-wrap { + position: relative; + width: 100%; + + .clear { + height: 1em; + width: 1em; + margin-top: 1em; + position: absolute; + right: 1em; + } + } + input#search { height: 3em; border-radius: $radius-small; diff --git a/app/views/shop/products/_searchbar.haml b/app/views/shop/products/_searchbar.haml index c74be2b14a..2ca6f32cb0 100644 --- a/app/views/shop/products/_searchbar.haml +++ b/app/views/shop/products/_searchbar.haml @@ -1,10 +1,13 @@ .shop-searchbar .row .small-12.large-5.columns.flex - %input#search.text{"ng-model" => "query", - placeholder: t(:products_search), - "ng-debounce" => "200", - "ofn-disable-enter" => true} + %div.search-wrap + %input#search.text{"ng-model" => "query", + placeholder: t(:products_search), + "ng-debounce" => "200", + "ofn-disable-enter" => true} + %a.clear{type: 'button', ng: {show: 'query', click: 'clearQuery()'}} + %img{ src: "/assets/icn-close.png" } .hide-for-large-up %button{type: 'button', ng: {click: 'toggleFilterSidebar()'}} From c9bfccf465bcd383855bf7d79fb26f000b8aaef2 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 20 Apr 2020 09:58:13 +0200 Subject: [PATCH 23/49] Update styling on search feedback bar --- .../darkswarm/_shop-filters.css.scss | 39 ++++++++++++------- app/views/shop/products/_search_feedback.haml | 9 +++-- config/locales/en.yml | 3 +- 3 files changed, 32 insertions(+), 19 deletions(-) diff --git a/app/assets/stylesheets/darkswarm/_shop-filters.css.scss b/app/assets/stylesheets/darkswarm/_shop-filters.css.scss index 2d8caf9a54..7916beb48a 100644 --- a/app/assets/stylesheets/darkswarm/_shop-filters.css.scss +++ b/app/assets/stylesheets/darkswarm/_shop-filters.css.scss @@ -107,26 +107,37 @@ // Alert when search, taxon, filter is triggered .alert-box.search-alert { - background-color: $clr-yellow-light; - border-color: $clr-yellow-light; + background-color: $white; color: #777; - font-size: 0.75rem; - padding: 0.5rem 0.75rem; + font-size: 1em; + padding: 0.35em 0 0; + border: 0; + margin: 0; - span.applied-properties { - color: #333; + .clear-all { + color: $grey-500; + + &:hover { + color: $grey-600; + } } - span.applied-taxons { - color: $clr-blue; - } + span { + color: $grey-800; + font-style: italic; - span.applied-search { - color: $clr-brick; - } + &.applied-properties { + color: $grey-800; + } - span.filter-label { - opacity: 0.75; + &.applied-taxons { + color: $clr-blue; + } + + &.applied-search { + font-weight: bold; + color: $teal-500; + } } } diff --git a/app/views/shop/products/_search_feedback.haml b/app/views/shop/products/_search_feedback.haml index 3851f2704d..ee3ade69a5 100644 --- a/app/views/shop/products/_search_feedback.haml +++ b/app/views/shop/products/_search_feedback.haml @@ -1,11 +1,11 @@ .row.animate-slide{ "ng-show" => "query || appliedPropertiesList() || appliedTaxonsList()" } .small-12.columns .alert-box.search-alert.ng-scope - %a.right{"ng-click" => "clearAll()"} - = t :products_clear_all + %a.clear-all.right{"ng-click" => "clearAll()"} + = t :products_clear %i.ofn-i_009-close %span.filter-label - = t :products_showing + = t :products_results_for %span.applied-properties {{ appliedPropertiesList() }} %span.applied-taxons @@ -13,4 +13,5 @@ %span{ ng: { hide: "!query"} } %span{ "ng-show" => "appliedPropertiesList() || appliedTaxonsList()" } = t :products_with - %span.applied-search "{{ query }}" + %span.applied-search + {{ query }} diff --git a/config/locales/en.yml b/config/locales/en.yml index 691d9d8006..4136241786 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1648,8 +1648,9 @@ See the %{link} to find out more about %{sitename}'s features and to start using other: You have %{count} orders with %{shop} currently open for review. You can make changes until %{oc_close}. orders_changeable_orders_alert_html: This order has been confirmed, but you can make changes until %{oc_close}. - products_clear_all: Clear all + products_clear: Clear products_showing: "Showing:" + products_results_for: "Results for" products_or: "OR" products_with: with products_search: "Search..." From 4b695014e450a51104c937a6aebe07bdd2414c73 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 20 Apr 2020 11:20:40 +0200 Subject: [PATCH 24/49] Update "no results" styling --- .../darkswarm/_shop-filters.css.scss | 18 +++++++++ app/views/shop/products/_form.html.haml | 10 ----- app/views/shop/products/_search_feedback.haml | 37 ++++++++++++------- config/locales/en.yml | 2 + 4 files changed, 43 insertions(+), 24 deletions(-) diff --git a/app/assets/stylesheets/darkswarm/_shop-filters.css.scss b/app/assets/stylesheets/darkswarm/_shop-filters.css.scss index 7916beb48a..52659773b3 100644 --- a/app/assets/stylesheets/darkswarm/_shop-filters.css.scss +++ b/app/assets/stylesheets/darkswarm/_shop-filters.css.scss @@ -122,6 +122,24 @@ } } + .no-results { + color: $grey-800; + font-style: italic; + font-size: 1.25em; + } + + .clear-search { + background-color: transparent; + padding: 0; + margin: 0; + color: $orange-500; + font-size: 1.25em; + + &:hover { + color: $orange-400; + } + } + span { color: $grey-800; font-style: italic; diff --git a/app/views/shop/products/_form.html.haml b/app/views/shop/products/_form.html.haml index 8a27ead0a6..c4e6ea6908 100644 --- a/app/views/shop/products/_form.html.haml +++ b/app/views/shop/products/_form.html.haml @@ -23,16 +23,6 @@ .small-12.columns.text-center %img.spinner{ src: "/assets/spinning-circles.svg" } - %div{"ng-show" => "Products.products.length == 0 && !Products.loading"} - .row.summary - .small-12.columns - %p.no-results - = t :search_no_results_html, query: "{{query}}".html_safe - .row - .small-12.columns - %i.ofn-i_011-spinner.cart-spinner{"ng-show" => "Cart.dirty"} - %input.small.button.primary.right.add_to_cart{type: :submit, value: "{{ Cart.dirty ? '#{t(:products_updating_cart)}' : (Cart.empty() ? '#{t(:products_cart_empty)}' : '#{t(:products_edit_cart)}' ) }}", "ng-disabled" => "Cart.dirty || Cart.empty()", "ng-class" => "{ dirty: Cart.dirty }" } - .hide-for-medium-down.large-2.columns %h5 = t(:products_filter_by) diff --git a/app/views/shop/products/_search_feedback.haml b/app/views/shop/products/_search_feedback.haml index ee3ade69a5..9b5816a41d 100644 --- a/app/views/shop/products/_search_feedback.haml +++ b/app/views/shop/products/_search_feedback.haml @@ -1,17 +1,26 @@ .row.animate-slide{ "ng-show" => "query || appliedPropertiesList() || appliedTaxonsList()" } .small-12.columns .alert-box.search-alert.ng-scope - %a.clear-all.right{"ng-click" => "clearAll()"} - = t :products_clear - %i.ofn-i_009-close - %span.filter-label - = t :products_results_for - %span.applied-properties - {{ appliedPropertiesList() }} - %span.applied-taxons - {{ appliedTaxonsList() }} - %span{ ng: { hide: "!query"} } - %span{ "ng-show" => "appliedPropertiesList() || appliedTaxonsList()" } - = t :products_with - %span.applied-search - {{ query }} + %div{"ng-show" => "Products.products.length > 0"} + %a.clear-all.right{"ng-click" => "clearAll()"} + = t :products_clear + %i.ofn-i_009-close + %span.filter-label + = t :products_results_for + %span.applied-properties + {{ appliedPropertiesList() }} + %span.applied-taxons + {{ appliedTaxonsList() }} + %span{ ng: { hide: "!query"} } + %span{ "ng-show" => "appliedPropertiesList() || appliedTaxonsList()" } + = t :products_with + %span.applied-search + {{ query }} + + %div{"ng-show" => "Products.products.length == 0 && !Products.loading"} + .row.summary + .small-12.columns + %p.no-results + = t :products_no_results_html, query: "{{query}}".html_safe + %button.clear-search{type: 'button', ng: {click: 'clearAll()'}} + = t :products_clear_search diff --git a/config/locales/en.yml b/config/locales/en.yml index 4136241786..5802486794 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1669,6 +1669,8 @@ See the %{link} to find out more about %{sitename}'s features and to start using products_update_error_msg: "Saving failed." products_update_error_data: "Save failed due to invalid data:" products_changes_saved: "Changes saved." + products_no_results_html: "Sorry, no results found for %{query}." + products_clear_search: "Clear search" search_no_results_html: "Sorry, no results found for %{query}. Try another search?" From 6b66787004c111d871539ce88855d079738154b2 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 20 Apr 2020 11:26:26 +0200 Subject: [PATCH 25/49] Update "no results" layout on mobile and tablet --- app/assets/stylesheets/darkswarm/_shop-filters.css.scss | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/assets/stylesheets/darkswarm/_shop-filters.css.scss b/app/assets/stylesheets/darkswarm/_shop-filters.css.scss index 52659773b3..c84f5d95c6 100644 --- a/app/assets/stylesheets/darkswarm/_shop-filters.css.scss +++ b/app/assets/stylesheets/darkswarm/_shop-filters.css.scss @@ -2,6 +2,7 @@ @import "branding"; @import "big-input"; @import "animations"; +@import "variables"; @mixin filter-selector($base-clr, $border-clr, $hover-clr) { &.inline-block, ul.inline-block { @@ -156,6 +157,14 @@ font-weight: bold; color: $teal-500; } + + &.filter-label { + float: left; + } + } + + @include breakpoint(desktop) { + text-align: center; } } From 14d928c39dda1a5403cc43810d794ba2c263a535 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 20 Apr 2020 14:40:56 +0200 Subject: [PATCH 26/49] Fix feature specs where UI has changed --- app/views/shared/menu/_joyride.html.haml | 2 +- spec/features/consumer/shopping/cart_spec.rb | 2 +- .../shopping/embedded_shopfronts_spec.rb | 15 +++------------ .../consumer/shopping/variant_overrides_spec.rb | 2 +- spec/support/request/shop_workflow.rb | 16 +++++++++++++--- 5 files changed, 19 insertions(+), 18 deletions(-) diff --git a/app/views/shared/menu/_joyride.html.haml b/app/views/shared/menu/_joyride.html.haml index 6d732e0294..eb1875f383 100644 --- a/app/views/shared/menu/_joyride.html.haml +++ b/app/views/shared/menu/_joyride.html.haml @@ -1,4 +1,4 @@ -.joyride-tip-guide{"ng-class" => "{ in: open }", "ng-show" => "open"} +.cart-dropdown.joyride-tip-guide{"ng-class" => "{ in: open }", "ng-show" => "open"} %span.joyride-nub.top .joyride-content-wrapper %h5 diff --git a/spec/features/consumer/shopping/cart_spec.rb b/spec/features/consumer/shopping/cart_spec.rb index ace11e775a..6a02206e1d 100644 --- a/spec/features/consumer/shopping/cart_spec.rb +++ b/spec/features/consumer/shopping/cart_spec.rb @@ -34,7 +34,7 @@ feature "full-page cart", js: true do click_link "Continue shopping" expect(page).to have_no_link "Continue shopping" - expect(page).to have_button "Edit your cart" + expect(page).to have_link "Shop" expect(page).to have_no_content distributor.preferred_shopfront_message end end diff --git a/spec/features/consumer/shopping/embedded_shopfronts_spec.rb b/spec/features/consumer/shopping/embedded_shopfronts_spec.rb index 290c6af516..20c7bfccb8 100644 --- a/spec/features/consumer/shopping/embedded_shopfronts_spec.rb +++ b/spec/features/consumer/shopping/embedded_shopfronts_spec.rb @@ -46,9 +46,8 @@ feature "Using embedded shopfront functionality", js: true do it "allows shopping and checkout" do on_embedded_page do fill_in "variants[#{variant.id}]", with: 1 - wait_until_enabled 'input.add_to_cart' - first("input.add_to_cart:not([disabled='disabled'])").click + edit_cart expect(page).to have_text 'Your shopping cart' find('a#checkout-link').click @@ -91,11 +90,11 @@ feature "Using embedded shopfront functionality", js: true do it "redirects to embedded hub on logout when embedded" do on_embedded_page do - wait_for_shop_loaded + wait_for_cart find('ul.right li#login-link a').click login_with_modal - wait_for_shop_loaded + wait_for_cart wait_until { page.find('ul.right li.user-menu.has-dropdown').value.present? } logout_via_navigation @@ -106,14 +105,6 @@ feature "Using embedded shopfront functionality", js: true do private - # When you have pending changes and try to navigate away from a page, it asks you "Are you sure?". - # When we click the "Update" button to save changes, we need to wait - # until it is actually saved and "loading" disappears before doing anything else. - def wait_for_shop_loaded - page.has_no_content? "Loading" - page.has_no_css? "input[value='Updating cart...']" - end - def login_with_modal page.has_selector? 'div.login-modal', visible: true diff --git a/spec/features/consumer/shopping/variant_overrides_spec.rb b/spec/features/consumer/shopping/variant_overrides_spec.rb index 8b37f5d22e..a4279786da 100644 --- a/spec/features/consumer/shopping/variant_overrides_spec.rb +++ b/spec/features/consumer/shopping/variant_overrides_spec.rb @@ -86,7 +86,7 @@ feature "shopping with variant overrides defined", js: true do it "shows the correct prices in the shopping cart" do fill_in "variants[#{product1_variant1.id}]", with: "2" - add_to_cart + edit_cart expect(page).to have_selector "tr.line-item.variant-#{product1_variant1.id} .cart-item-price", text: with_currency(61.11) expect(page).to have_field "order[line_items_attributes][0][quantity]", with: '2' diff --git a/spec/support/request/shop_workflow.rb b/spec/support/request/shop_workflow.rb index ff5909f267..cde1437b04 100644 --- a/spec/support/request/shop_workflow.rb +++ b/spec/support/request/shop_workflow.rb @@ -1,7 +1,17 @@ module ShopWorkflow - def add_to_cart - wait_until_enabled 'input.add_to_cart' - first("input.add_to_cart:not([disabled='disabled'])").click + def wait_for_cart + first("#cart").click + within '.cart-dropdown' do + expect(page).to_not have_link "Updating cart..." + end + end + + def edit_cart + wait_for_cart + within '.cart-dropdown' do + expect(page).to have_link "Edit your cart" + end + first("a.add_to_cart").click end def have_price(price) From 2964ec138defb8daae939d49ff7582ec0cb25f7c Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 21 Apr 2020 12:38:08 +0200 Subject: [PATCH 27/49] Update display of join words in filters list and rearrange code a bit for clarity Here we need to build a really dynamic structure on the page like "Results for: in or " and the styling on each of the words needs to be a bit different, specifically the filter terms need to be differently styled to the join words like "in" and "or". We have to generate those bits on the Angular side, but they also have to be wrapped in HTML in a specific way. $sce.trustAsHtml() marks the injected HTML as "safe" (in relation to security issues like XSS). In this case the injected content doesn't involve any user-defined data, so it should be fine. --- .../controllers/products_controller.js.coffee | 9 +++++--- app/views/shop/products/_search_feedback.haml | 23 ++++++++++--------- config/locales/en.yml | 3 ++- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee index 894ed5576f..4a654cde10 100644 --- a/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee +++ b/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee @@ -1,4 +1,4 @@ -Darkswarm.controller "ProductsCtrl", ($scope, $filter, $rootScope, Products, OrderCycle, OrderCycleResource, FilterSelectorsService, Cart, Dereferencer, Taxons, Properties, currentHub, $timeout) -> +Darkswarm.controller "ProductsCtrl", ($scope, $sce, $filter, $rootScope, Products, OrderCycle, OrderCycleResource, FilterSelectorsService, Cart, Dereferencer, Taxons, Properties, currentHub, $timeout) -> $scope.Products = Products $scope.Cart = Cart $scope.query = "" @@ -76,12 +76,15 @@ Darkswarm.controller "ProductsCtrl", ($scope, $filter, $rootScope, Products, Ord $scope.appliedTaxonsList = -> $scope.activeTaxons.map( (taxon_id) -> Taxons.taxons_by_id[taxon_id].name - ).join(" #{t('products_or')} ") if $scope.activeTaxons? + ).join($scope.filtersJoinWord()) if $scope.activeTaxons? $scope.appliedPropertiesList = -> $scope.activeProperties.map( (property_id) -> Properties.properties_by_id[property_id].name - ).join(" #{t('products_or')} ") if $scope.activeProperties? + ).join($scope.filtersJoinWord()) if $scope.activeProperties? + + $scope.filtersJoinWord = -> + $sce.trustAsHtml(" #{t('products_or')} ") $scope.clearAll = -> $scope.clearQuery() diff --git a/app/views/shop/products/_search_feedback.haml b/app/views/shop/products/_search_feedback.haml index 9b5816a41d..70648d9500 100644 --- a/app/views/shop/products/_search_feedback.haml +++ b/app/views/shop/products/_search_feedback.haml @@ -2,20 +2,21 @@ .small-12.columns .alert-box.search-alert.ng-scope %div{"ng-show" => "Products.products.length > 0"} + %span.filter-label + = t :products_results_for + %span{ ng: { hide: "!query"} } + %span.applied-search + {{ query }} + + %span{ "ng-show" => "query && ( appliedPropertiesList() || appliedTaxonsList() )" } + = t :products_filters_in + + %span.applied-properties{'ng-bind-html' => 'appliedPropertiesList()'} + %span.applied-taxons{'ng-bind-html' => 'appliedTaxonsList()'} + %a.clear-all.right{"ng-click" => "clearAll()"} = t :products_clear %i.ofn-i_009-close - %span.filter-label - = t :products_results_for - %span.applied-properties - {{ appliedPropertiesList() }} - %span.applied-taxons - {{ appliedTaxonsList() }} - %span{ ng: { hide: "!query"} } - %span{ "ng-show" => "appliedPropertiesList() || appliedTaxonsList()" } - = t :products_with - %span.applied-search - {{ query }} %div{"ng-show" => "Products.products.length == 0 && !Products.loading"} .row.summary diff --git a/config/locales/en.yml b/config/locales/en.yml index 5802486794..60a4880db0 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1651,7 +1651,8 @@ See the %{link} to find out more about %{sitename}'s features and to start using products_clear: Clear products_showing: "Showing:" products_results_for: "Results for" - products_or: "OR" + products_or: "or" + products_filters_in: "in" products_with: with products_search: "Search..." products_filter_by: "Filter by" From 96c6da304a36e6eb4edea8a5ea5a123db8d9752c Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 2 May 2020 10:46:40 +0200 Subject: [PATCH 28/49] Increase margin between filter selectors --- app/assets/stylesheets/darkswarm/_shop-filters.css.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/stylesheets/darkswarm/_shop-filters.css.scss b/app/assets/stylesheets/darkswarm/_shop-filters.css.scss index c84f5d95c6..c8b6cbd290 100644 --- a/app/assets/stylesheets/darkswarm/_shop-filters.css.scss +++ b/app/assets/stylesheets/darkswarm/_shop-filters.css.scss @@ -15,7 +15,7 @@ @include border-radius(0); padding: 0; - margin: 0 0.25rem 0.25rem 0; + margin: 0 0.5rem 0.5rem 0; &:hover, &:focus { background: transparent; From 03afae01b323d4184b5eb309bbc3256dfb444761 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 2 May 2020 10:50:30 +0200 Subject: [PATCH 29/49] Decrease sidebar width on mobile for more tapping space --- app/assets/stylesheets/darkswarm/shop.css.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/stylesheets/darkswarm/shop.css.scss b/app/assets/stylesheets/darkswarm/shop.css.scss index 4afb254dd2..6c477acb48 100644 --- a/app/assets/stylesheets/darkswarm/shop.css.scss +++ b/app/assets/stylesheets/darkswarm/shop.css.scss @@ -11,7 +11,7 @@ @import "shop-taxon-flag"; @import "shop-popovers"; -$sidebar-small-width: 85%; +$sidebar-small-width: 75%; $sidebar-medium-width: 65%; $sidebar-large-width: 45%; $sidebar-footer-height: 5em; From a7771a20c4cdf4b12546cfb2b7d53e5ec6c0e780 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 2 May 2020 10:55:48 +0200 Subject: [PATCH 30/49] Adjust border-radius on filters button --- app/assets/stylesheets/darkswarm/shop_search.css.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/stylesheets/darkswarm/shop_search.css.scss b/app/assets/stylesheets/darkswarm/shop_search.css.scss index 0822e5ba3c..dcac100027 100644 --- a/app/assets/stylesheets/darkswarm/shop_search.css.scss +++ b/app/assets/stylesheets/darkswarm/shop_search.css.scss @@ -46,6 +46,7 @@ width: 7em; padding: 0; font-size: 1em; + border-radius: $radius-small; @include breakpoint(mobile) { margin-left: 0.75em; From 5ceaff24e90a7ffae78531b981bff412c5ae4b48 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 2 May 2020 10:58:56 +0200 Subject: [PATCH 31/49] Darken overlay background colour to reduce distraction --- app/assets/stylesheets/darkswarm/variables.css.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/stylesheets/darkswarm/variables.css.scss b/app/assets/stylesheets/darkswarm/variables.css.scss index 216e7f68ee..115212fc76 100644 --- a/app/assets/stylesheets/darkswarm/variables.css.scss +++ b/app/assets/stylesheets/darkswarm/variables.css.scss @@ -36,5 +36,5 @@ $mobile-nav-height: 2.8em; $radius-small: 0.25em; $radius-medium: 0.5em; -$shop-sidebar-overlay: rgba(0, 0, 0, 0.15); +$shop-sidebar-overlay: rgba(0, 0, 0, 0.5); $transition-sidebar: 250ms ease-in-out 0s; From e0cb514cad023f7e758e17922f6fb0b475aa0fcf Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 2 May 2020 11:02:21 +0200 Subject: [PATCH 32/49] Add hover state to filters button with darker background --- app/assets/stylesheets/darkswarm/shop_search.css.scss | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/assets/stylesheets/darkswarm/shop_search.css.scss b/app/assets/stylesheets/darkswarm/shop_search.css.scss index dcac100027..72c46647fc 100644 --- a/app/assets/stylesheets/darkswarm/shop_search.css.scss +++ b/app/assets/stylesheets/darkswarm/shop_search.css.scss @@ -47,6 +47,11 @@ padding: 0; font-size: 1em; border-radius: $radius-small; + transition: none; + + &:hover { + background-color: $grey-700; + } @include breakpoint(mobile) { margin-left: 0.75em; From 71fb3b1845cdac87aaea3f32ef6eb144ff8f81cc Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 2 May 2020 11:18:28 +0200 Subject: [PATCH 33/49] Focus search field after it's cleared, ready for immediate typing of new search term on mobile --- .../javascripts/darkswarm/directives/focus_search.coffee | 6 ++++++ app/views/shop/products/_searchbar.haml | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 app/assets/javascripts/darkswarm/directives/focus_search.coffee diff --git a/app/assets/javascripts/darkswarm/directives/focus_search.coffee b/app/assets/javascripts/darkswarm/directives/focus_search.coffee new file mode 100644 index 0000000000..076c310351 --- /dev/null +++ b/app/assets/javascripts/darkswarm/directives/focus_search.coffee @@ -0,0 +1,6 @@ +Darkswarm.directive "focusSearch", -> + restrict: 'A' + link: (scope, element, attr)-> + element.bind 'click', (event) -> + # Focus seach field, ready for typing + $(element).siblings('#search').focus() diff --git a/app/views/shop/products/_searchbar.haml b/app/views/shop/products/_searchbar.haml index 2ca6f32cb0..63467215a8 100644 --- a/app/views/shop/products/_searchbar.haml +++ b/app/views/shop/products/_searchbar.haml @@ -6,7 +6,7 @@ placeholder: t(:products_search), "ng-debounce" => "200", "ofn-disable-enter" => true} - %a.clear{type: 'button', ng: {show: 'query', click: 'clearQuery()'}} + %a.clear{type: 'button', ng: {show: 'query', click: 'clearQuery()'}, 'focus-search' => true} %img{ src: "/assets/icn-close.png" } .hide-for-large-up From 07ac7dd9c7670c7c0778de2474c9771f5180d5fc Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 2 May 2020 11:24:13 +0200 Subject: [PATCH 34/49] Add explicit 'search' input type to search field. In theory this should improve some of the custom-keyboard functionality added by mobiles, but the implementations will be vary... --- app/views/shop/products/_searchbar.haml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/views/shop/products/_searchbar.haml b/app/views/shop/products/_searchbar.haml index 63467215a8..fa9fb962a4 100644 --- a/app/views/shop/products/_searchbar.haml +++ b/app/views/shop/products/_searchbar.haml @@ -3,6 +3,7 @@ .small-12.large-5.columns.flex %div.search-wrap %input#search.text{"ng-model" => "query", + type: 'search', placeholder: t(:products_search), "ng-debounce" => "200", "ofn-disable-enter" => true} From ea06ec7eded3eef0ea2468fc22aaa5e9fe02d71d Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 2 May 2020 11:27:04 +0200 Subject: [PATCH 35/49] Remove smaller (less than 1em) scaling in search bar on mobile --- app/assets/stylesheets/darkswarm/shop_search.css.scss | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/assets/stylesheets/darkswarm/shop_search.css.scss b/app/assets/stylesheets/darkswarm/shop_search.css.scss index 72c46647fc..6eb635b2e3 100644 --- a/app/assets/stylesheets/darkswarm/shop_search.css.scss +++ b/app/assets/stylesheets/darkswarm/shop_search.css.scss @@ -63,8 +63,4 @@ position: sticky; top: $mobile-nav-height; } - - @include breakpoint(mobile) { - font-size: 0.9em; - } } From f6b910b38abe23533a98272df84a66df113893da Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 2 May 2020 11:31:22 +0200 Subject: [PATCH 36/49] Fix clear search (x) button position on some layouts Hopefully this will work on iPhones as well...? --- app/assets/stylesheets/darkswarm/shop_search.css.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/stylesheets/darkswarm/shop_search.css.scss b/app/assets/stylesheets/darkswarm/shop_search.css.scss index 6eb635b2e3..ee9d09b4c6 100644 --- a/app/assets/stylesheets/darkswarm/shop_search.css.scss +++ b/app/assets/stylesheets/darkswarm/shop_search.css.scss @@ -13,6 +13,7 @@ .search-wrap { position: relative; width: 100%; + display: inline-flex; .clear { height: 1em; From 483a654d3198bfe9e72dc31a68c1fdce5e9f23a1 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 2 May 2020 11:38:55 +0200 Subject: [PATCH 37/49] Add join word "or" when both categories and properties are present Previously for example with "Organic" property and "Fruit" and "Nuts" categories it rendered as: "Fruit or Nuts Organic" instead of: "Fruit or Nuts or Organic" --- app/views/shop/products/_search_feedback.haml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/views/shop/products/_search_feedback.haml b/app/views/shop/products/_search_feedback.haml index 70648d9500..2f4c0548a3 100644 --- a/app/views/shop/products/_search_feedback.haml +++ b/app/views/shop/products/_search_feedback.haml @@ -12,6 +12,10 @@ = t :products_filters_in %span.applied-properties{'ng-bind-html' => 'appliedPropertiesList()'} + + %span{ "ng-show" => "appliedPropertiesList() && appliedTaxonsList()" } + = t :products_or + %span.applied-taxons{'ng-bind-html' => 'appliedTaxonsList()'} %a.clear-all.right{"ng-click" => "clearAll()"} From 7be85d1dab9e67fe1b523416f5a7309df67de2f3 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 2 May 2020 11:42:25 +0200 Subject: [PATCH 38/49] Use bold font with teal colour for both applied taxons and applied properties --- app/assets/stylesheets/darkswarm/_shop-filters.css.scss | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/app/assets/stylesheets/darkswarm/_shop-filters.css.scss b/app/assets/stylesheets/darkswarm/_shop-filters.css.scss index c8b6cbd290..7df689719e 100644 --- a/app/assets/stylesheets/darkswarm/_shop-filters.css.scss +++ b/app/assets/stylesheets/darkswarm/_shop-filters.css.scss @@ -145,12 +145,9 @@ color: $grey-800; font-style: italic; - &.applied-properties { - color: $grey-800; - } - - &.applied-taxons { + &.applied-taxons, &.applied-properties { color: $clr-blue; + font-weight: bold; } &.applied-search { From a1435e78c951d535e67f37602388eec3df78b452 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 2 May 2020 12:06:24 +0200 Subject: [PATCH 39/49] Extract applied filters feedback to partial --- .../shop/products/_applied_filters_feedback.haml | 9 +++++++++ app/views/shop/products/_search_feedback.haml | 11 +---------- 2 files changed, 10 insertions(+), 10 deletions(-) create mode 100644 app/views/shop/products/_applied_filters_feedback.haml diff --git a/app/views/shop/products/_applied_filters_feedback.haml b/app/views/shop/products/_applied_filters_feedback.haml new file mode 100644 index 0000000000..b92ff8f088 --- /dev/null +++ b/app/views/shop/products/_applied_filters_feedback.haml @@ -0,0 +1,9 @@ +%span{ "ng-show" => "query && ( appliedPropertiesList() || appliedTaxonsList() )" } + = t :products_filters_in + +%span.applied-properties{'ng-bind-html' => 'appliedPropertiesList()'} + +%span{ "ng-show" => "appliedPropertiesList() && appliedTaxonsList()" } + = t :products_or + +%span.applied-taxons{'ng-bind-html' => 'appliedTaxonsList()'} diff --git a/app/views/shop/products/_search_feedback.haml b/app/views/shop/products/_search_feedback.haml index 2f4c0548a3..18f7d26c91 100644 --- a/app/views/shop/products/_search_feedback.haml +++ b/app/views/shop/products/_search_feedback.haml @@ -7,16 +7,7 @@ %span{ ng: { hide: "!query"} } %span.applied-search {{ query }} - - %span{ "ng-show" => "query && ( appliedPropertiesList() || appliedTaxonsList() )" } - = t :products_filters_in - - %span.applied-properties{'ng-bind-html' => 'appliedPropertiesList()'} - - %span{ "ng-show" => "appliedPropertiesList() && appliedTaxonsList()" } - = t :products_or - - %span.applied-taxons{'ng-bind-html' => 'appliedTaxonsList()'} + = render partial: 'shop/products/applied_filters_feedback' %a.clear-all.right{"ng-click" => "clearAll()"} = t :products_clear From a75d3276a44dc4c7661c67709a700e54c86825dd Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 2 May 2020 12:08:03 +0200 Subject: [PATCH 40/49] Include applied filters list in "no results" feedback --- app/views/shop/products/_search_feedback.haml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/views/shop/products/_search_feedback.haml b/app/views/shop/products/_search_feedback.haml index 18f7d26c91..33b538452e 100644 --- a/app/views/shop/products/_search_feedback.haml +++ b/app/views/shop/products/_search_feedback.haml @@ -18,5 +18,6 @@ .small-12.columns %p.no-results = t :products_no_results_html, query: "{{query}}".html_safe + = render partial: 'shop/products/applied_filters_feedback' %button.clear-search{type: 'button', ng: {click: 'clearAll()'}} = t :products_clear_search From 82b11d6947c4dbc9cc81271ea22e591467227a4d Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 2 May 2020 12:11:28 +0200 Subject: [PATCH 41/49] Ensure join words are not bold --- .../darkswarm/controllers/products_controller.js.coffee | 2 +- app/assets/stylesheets/darkswarm/_shop-filters.css.scss | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee b/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee index 4a654cde10..bc72b597c2 100644 --- a/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee +++ b/app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee @@ -84,7 +84,7 @@ Darkswarm.controller "ProductsCtrl", ($scope, $sce, $filter, $rootScope, Product ).join($scope.filtersJoinWord()) if $scope.activeProperties? $scope.filtersJoinWord = -> - $sce.trustAsHtml(" #{t('products_or')} ") + $sce.trustAsHtml(" #{t('products_or')} ") $scope.clearAll = -> $scope.clearQuery() diff --git a/app/assets/stylesheets/darkswarm/_shop-filters.css.scss b/app/assets/stylesheets/darkswarm/_shop-filters.css.scss index 7df689719e..7684aff69a 100644 --- a/app/assets/stylesheets/darkswarm/_shop-filters.css.scss +++ b/app/assets/stylesheets/darkswarm/_shop-filters.css.scss @@ -148,6 +148,10 @@ &.applied-taxons, &.applied-properties { color: $clr-blue; font-weight: bold; + + .join-word { + font-weight: normal; + } } &.applied-search { From b78976fcd79e835b8e0a12c3b7a1fe0f27180d05 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 2 May 2020 12:14:19 +0200 Subject: [PATCH 42/49] Ensure consistent styling in both "no results" and "searching for" text --- app/views/shop/products/_search_feedback.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/shop/products/_search_feedback.haml b/app/views/shop/products/_search_feedback.haml index 33b538452e..2558725ab1 100644 --- a/app/views/shop/products/_search_feedback.haml +++ b/app/views/shop/products/_search_feedback.haml @@ -17,7 +17,7 @@ .row.summary .small-12.columns %p.no-results - = t :products_no_results_html, query: "{{query}}".html_safe + = t :products_no_results_html, query: "{{query}}".html_safe = render partial: 'shop/products/applied_filters_feedback' %button.clear-search{type: 'button', ng: {click: 'clearAll()'}} = t :products_clear_search From 7e6683581a3b33604d21386dad720c67046bc3ac Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 2 May 2020 12:15:19 +0200 Subject: [PATCH 43/49] Remove full stop from translation This doesn't fit with the new syntax structure --- config/locales/en.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index 60a4880db0..62654fc6da 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1670,7 +1670,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using products_update_error_msg: "Saving failed." products_update_error_data: "Save failed due to invalid data:" products_changes_saved: "Changes saved." - products_no_results_html: "Sorry, no results found for %{query}." + products_no_results_html: "Sorry, no results found for %{query}" products_clear_search: "Clear search" search_no_results_html: "Sorry, no results found for %{query}. Try another search?" From dee793a392fb0572df4829426ed02a49566299b6 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 2 May 2020 12:19:50 +0200 Subject: [PATCH 44/49] Change join word between the two filter sets to be "and", to match the actual logic --- app/views/shop/products/_applied_filters_feedback.haml | 2 +- config/locales/en.yml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/views/shop/products/_applied_filters_feedback.haml b/app/views/shop/products/_applied_filters_feedback.haml index b92ff8f088..45730f39cf 100644 --- a/app/views/shop/products/_applied_filters_feedback.haml +++ b/app/views/shop/products/_applied_filters_feedback.haml @@ -4,6 +4,6 @@ %span.applied-properties{'ng-bind-html' => 'appliedPropertiesList()'} %span{ "ng-show" => "appliedPropertiesList() && appliedTaxonsList()" } - = t :products_or + = t :products_and %span.applied-taxons{'ng-bind-html' => 'appliedTaxonsList()'} diff --git a/config/locales/en.yml b/config/locales/en.yml index 62654fc6da..01ba7cebd2 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1652,6 +1652,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using products_showing: "Showing:" products_results_for: "Results for" products_or: "or" + products_and: "and" products_filters_in: "in" products_with: with products_search: "Search..." From cb9c56d8aa087401026c4b3290b870e9a2c9dc48 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 2 May 2020 12:34:17 +0200 Subject: [PATCH 45/49] Ensure correct left-alignment on text in search results feedback --- .../stylesheets/darkswarm/_shop-filters.css.scss | 10 ++++++---- app/views/shop/products/_search_feedback.haml | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/app/assets/stylesheets/darkswarm/_shop-filters.css.scss b/app/assets/stylesheets/darkswarm/_shop-filters.css.scss index 7684aff69a..e9da000409 100644 --- a/app/assets/stylesheets/darkswarm/_shop-filters.css.scss +++ b/app/assets/stylesheets/darkswarm/_shop-filters.css.scss @@ -123,6 +123,12 @@ } } + .no-results-bar { + @include breakpoint(desktop) { + text-align: center; + } + } + .no-results { color: $grey-800; font-style: italic; @@ -163,10 +169,6 @@ float: left; } } - - @include breakpoint(desktop) { - text-align: center; - } } // singleLineSelectors directive provides a drop-down that can overlap diff --git a/app/views/shop/products/_search_feedback.haml b/app/views/shop/products/_search_feedback.haml index 2558725ab1..d26288eabd 100644 --- a/app/views/shop/products/_search_feedback.haml +++ b/app/views/shop/products/_search_feedback.haml @@ -13,7 +13,7 @@ = t :products_clear %i.ofn-i_009-close - %div{"ng-show" => "Products.products.length == 0 && !Products.loading"} + %div.no-results-bar{"ng-show" => "Products.products.length == 0 && !Products.loading"} .row.summary .small-12.columns %p.no-results From 9f882a867453ad9c5e209ecc2b209b6c5912add3 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 2 May 2020 12:54:44 +0200 Subject: [PATCH 46/49] Ensure search results feedback wraps nicely onto next line --- app/assets/stylesheets/darkswarm/_shop-filters.css.scss | 5 +---- app/views/shop/products/_search_feedback.haml | 9 +++++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/app/assets/stylesheets/darkswarm/_shop-filters.css.scss b/app/assets/stylesheets/darkswarm/_shop-filters.css.scss index e9da000409..5bb8b5e381 100644 --- a/app/assets/stylesheets/darkswarm/_shop-filters.css.scss +++ b/app/assets/stylesheets/darkswarm/_shop-filters.css.scss @@ -117,6 +117,7 @@ .clear-all { color: $grey-500; + margin-left: 1.5em; &:hover { color: $grey-600; @@ -164,10 +165,6 @@ font-weight: bold; color: $teal-500; } - - &.filter-label { - float: left; - } } } diff --git a/app/views/shop/products/_search_feedback.haml b/app/views/shop/products/_search_feedback.haml index d26288eabd..ea6b0c7f22 100644 --- a/app/views/shop/products/_search_feedback.haml +++ b/app/views/shop/products/_search_feedback.haml @@ -2,6 +2,11 @@ .small-12.columns .alert-box.search-alert.ng-scope %div{"ng-show" => "Products.products.length > 0"} + + %a.clear-all.right{"ng-click" => "clearAll()"} + = t :products_clear + %i.ofn-i_009-close + %span.filter-label = t :products_results_for %span{ ng: { hide: "!query"} } @@ -9,10 +14,6 @@ {{ query }} = render partial: 'shop/products/applied_filters_feedback' - %a.clear-all.right{"ng-click" => "clearAll()"} - = t :products_clear - %i.ofn-i_009-close - %div.no-results-bar{"ng-show" => "Products.products.length == 0 && !Products.loading"} .row.summary .small-12.columns From 0cd4ad0a1ad80cfbbf3925ce9bb4e0fab4d0dd2e Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 2 May 2020 12:58:49 +0200 Subject: [PATCH 47/49] Ensure large amount of search text doesn't break layout with clear all button --- app/assets/stylesheets/darkswarm/shop_search.css.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/stylesheets/darkswarm/shop_search.css.scss b/app/assets/stylesheets/darkswarm/shop_search.css.scss index ee9d09b4c6..fccde6de79 100644 --- a/app/assets/stylesheets/darkswarm/shop_search.css.scss +++ b/app/assets/stylesheets/darkswarm/shop_search.css.scss @@ -29,7 +29,7 @@ border-radius: $radius-small; border: solid 1px $grey-300; margin: 0; - padding: 0 1em 0 2.75em; + padding: 0 2.25em 0 2.75em; width: 100%; min-width: 0; background: $white url("/assets/icn-search-grey.png") 1em center no-repeat; From 265a8ed5739e8b5b1c4602efe18e7d88a9a763be Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 12 May 2020 18:24:10 +0200 Subject: [PATCH 48/49] Move messages and products form outside of row and columns to enable full-width --- app/views/shopping_shared/tabs/_shop.html.haml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/views/shopping_shared/tabs/_shop.html.haml b/app/views/shopping_shared/tabs/_shop.html.haml index 8628b91178..2c23b4e8c1 100644 --- a/app/views/shopping_shared/tabs/_shop.html.haml +++ b/app/views/shopping_shared/tabs/_shop.html.haml @@ -6,7 +6,5 @@ = render partial: "shop/messages/closed_shop" - else - .row - .small-12.columns - = render partial: "shop/messages/select_oc" - = render partial: "shop/products/form" + = render partial: "shop/messages/select_oc" + = render partial: "shop/products/form" From 598071fa787731bbaffc67fd721df08a464d6326 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 12 May 2020 18:59:15 +0200 Subject: [PATCH 49/49] Remove conflicting "clear search" buttons added by Chrome --- app/assets/stylesheets/darkswarm/shop_search.css.scss | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/assets/stylesheets/darkswarm/shop_search.css.scss b/app/assets/stylesheets/darkswarm/shop_search.css.scss index fccde6de79..cbe0bf6bd4 100644 --- a/app/assets/stylesheets/darkswarm/shop_search.css.scss +++ b/app/assets/stylesheets/darkswarm/shop_search.css.scss @@ -38,6 +38,14 @@ &::placeholder { font-style: italic; } + + // Remove conflicting "clear search" buttons added by Chrome + &::-webkit-search-decoration, + &::-webkit-search-cancel-button, + &::-webkit-search-results-button, + &::-webkit-search-results-decoration { + display: none; + } } button {