$cart_items[$id] += $quantity;
} else {
$cart_items[$id] = $quantity;
- $needs_update = true;
}
$ga['add'][$id] = $quantity;
+
+ $needs_update = true;
break;
case 'update':
"vue-slider-component": "^3.0.40",
"vue-template-compiler": "^2.6.10"
},
- "dependencies": {
-
- }
+ "dependencies": {}
}
window.headerHeight = 134;
var scroll = getBodyScrollTop();
if (scroll > 200) {
- document.getElementById('site-header').classList.add('minimized');
- document.getElementById('mobile-menu-icon').classList.add('minimized');
+ document.body.classList.add('header-minimized');
window.headerHeight = 60;
} else {
- document.getElementById('site-header').classList.remove('minimized');
- document.getElementById('mobile-menu-icon').classList.remove('minimized');
+ document.body.classList.remove('header-minimized');
}
document.querySelector('html').style.setProperty('--header-height', window.headerHeight + 'px');
}
<template>
- <div class="bg-white">
+ <div>
- <!-- Trigger Link that will appear inside the nav portal -->
- <portal to="nav-search-toggle">
- <a href="#" id="nav-search-toggle-link" class="text-white hover:text-blue" @click.prevent="toggleVisibility"
- :class="visible ? 'text-blue' : ''">
- <slot name="link"></slot>
- </a>
- </portal>
+ <a href="#" id="nav-search-toggle-link"
+ class="text-white hover:text-blue"
+ @click.prevent="toggleVisibility"
+ :class="visible ? 'text-blue' : ''">
+ <slot></slot>
+ </a>
- <slide-toggle :active="visible" :duration="300" @open-end="focusField">
- <div class="header-search-box container py-3">
- <form :action="endpoint" method="get" class="flex justify-between items-center" @submit="submitForm">
- <search-field :placeholder="placeholder" ref="searchInput"></search-field>
- <button class="ml-4 p-3 -mr-3 appearance-none focus:outline-none focus:bg-grey-100">
- <slot name="button"></slot>
- </button>
- </form>
+ <!-- Main search field that appears below the main header -->
+ <portal to="nav-search-bar">
+ <div class="bg-white text-grey-dark">
+ <slide-toggle :active="visible" :duration="300" @open-end="focusField">
+ <div class="header-search-box container py-3">
+ <form :action="endpoint" method="get" class="flex justify-between items-center" @submit="submitForm">
+ <search-field :placeholder="placeholder" ref="searchInput"></search-field>
+ <button class="ml-4 p-3 -mr-3 appearance-none focus:outline-none focus:bg-grey-100">
+ <slot name="button"></slot>
+ </button>
+ </form>
+ </div>
+ </slide-toggle>
</div>
- </slide-toggle>
+ </portal>
+
</div>
</template>
&-title
background-color: #314D6E
- height: 134px // Todo: handle this when header is smaller (on scroll down)
+ height: var(--header-height)
+ transition: height var(--transition-duration)
&-content
- max-height: calc(100vh - 134px - 120px)
+ // Fill available height if needed. Footer of popout is 139px tall
+ max-height: calc(100vh - var(--header-height) - 139px)
+ transition: max-height var(--transition-duration)
overflow-y: auto
+ &-footer
+ @apply bg-grey-100 p-10
+
+
// Show cart popout when .cart-open is applied to body
.cart-open
.cart-header-popout
+$header-height = 134px
+
#header-placeholder
- height 134px
+ height: $header-height
.template-home &
background-color:theme('colors.navy')
.site-header
- --transition-duration 500ms
+ --transition-duration: 500ms
+
@apply bg-navy text-white text-lg font-display font-medium antialiased fixed top-0
- transition height var(--transition-duration)
- width 100%
- z-index 100
- height 134px
+ transition: height var(--transition-duration)
+ width: 100%
+ z-index: 100
+ height: $header-height
.container
- transition padding-top var(--transition-duration), padding-bottom var(--transition-duration)
+ transition: padding-top var(--transition-duration), padding-bottom var(--transition-duration)
.nav
height: 67px
- transition height var(--transition-duration)
+ transition: height var(--transition-duration)
.logo
- height 70px
- transition height var(--transition-duration)
+ height: 70px
+ transition: height var(--transition-duration)
img
- height 70px
- transition height var(--transition-duration)
+ height: 70px
+ transition: height var(--transition-duration)
+below($breakpoint-menu)
.logo
.nav
display: none
- &.minimized
+ //=== Mini header
+ .header-minimized &
height: 60px
.container
img
height: 44px
-
<nav id="menu" class="nav mx-auto flex items-center">
@include('partials.nav')
- {{-- Todo: consider inverting the portal so the hidden search form is put in the portal instead of the icon (to avoid loading delay on icon) --}}
- <portal-target name="nav-search-toggle" slim></portal-target>
+
+ @if(config('features.search'))
+ <search placeholder="{{ __('Rechercher ...') }}" endpoint="{{ $nav->getHrefByName('recherche') }}">
+ <template v-slot:button>
+ @svg('search', 'fill-current text-navy w-6 h-6 hover:text-blue')
+ </template>
+
+ {{-- Nav search link (in default slot so there's no flicker as Vue initialises) --}}
+ @svg('search')
+
+ </search>
+ @endif
+
</nav>
@if (config('features.quote'))
</a>
<div class="cart-header-popout">
- <div class="cart-header-popout-title flex justify-between items-center px-1v py-1v">
+ <div class="cart-header-popout-title flex justify-between items-center px-1v">
<span>
{{ __('Ma sélection') }}
</span>
{{ __("Vous n'avez encore rien sélectionné") }}
</div>
</div>
- <div class="cart-header-popout-footer bg-grey-100 p-1v" v-if="cartItemCount > 0">
+ <div class="cart-header-popout-footer" v-if="cartItemCount > 0">
<link-button class="block text-center" :href="$nav->getHrefByName('cart')">
{{ __('Obtenir un devis') }}
</link-button>
</div>
-</header>
+ <portal-target name="nav-search-bar" slim></portal-target>
-@if(config('features.search'))
- <search placeholder="{{ __('Rechercher ...') }}" endpoint="{{ $nav->getHrefByName('recherche') }}">
- <template v-slot:link>
- @svg('search')
- </template>
- <template v-slot:button>
- @svg('search', 'fill-current text-navy w-6 h-6 hover:text-blue')
- </template>
- </search>
-@endif
+</header>
dependencies:
find-up "^3.0.0"
-popper.js@^1.12:
+popper.js@^1.12, popper.js@^1.14.7:
version "1.15.0"
resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.15.0.tgz#5560b99bbad7647e9faa475c6b8056621f5a4ff2"
integrity sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA==
resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=
+tippy.js@^4.3.5:
+ version "4.3.5"
+ resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-4.3.5.tgz#882bff8d92f09bb0546d2826d5668c0560006f54"
+ integrity sha512-NDq3efte8nGK6BOJ1dDN1/WelAwfmh3UtIYXXck6+SxLzbIQNZE/cmRSnwScZ/FyiKdIcvFHvYUgqmoGx8CcyA==
+ dependencies:
+ popper.js "^1.14.7"
+
to-array@0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"