| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 | 
							- <template lang="pug">
 
-   .search-results(v-if='searchIsFocused || search.length > 1')
 
-     .search-results-container
 
-       .search-results-help(v-if='search.length < 2')
 
-         img(src='/svg/icon-search-alt.svg')
 
-         .mt-4 {{$t('common:header.searchHint')}}
 
-       .search-results-loader(v-else-if='searchIsLoading && results.length < 1')
 
-         orbit-spinner(
 
-           :animation-duration='1000'
 
-           :size='100'
 
-           color='#FFF'
 
-         )
 
-         .headline.mt-5 {{$t('common:header.searchLoading')}}
 
-       .search-results-none(v-else-if='!searchIsLoading && results.length < 1')
 
-         img(src='/svg/icon-no-results.svg', alt='No Results')
 
-         .subheading {{$t('common:header.searchNoResult')}}
 
-       template(v-if='results.length > 0')
 
-         v-subheader.white--text {{$t('common:header.searchResultsCount', { total: response.totalHits })}}
 
-         v-list.search-results-items.radius-7(two-line)
 
-           template(v-for='(item, idx) of results')
 
-             v-list-tile(@click='goToPage(item)', :key='item.id', :class='idx === cursor ? `highlighted` : ``')
 
-               v-list-tile-avatar(tile)
 
-                 img(src='/svg/icon-selective-highlighting.svg')
 
-               v-list-tile-content
 
-                 v-list-tile-title(v-html='item.title')
 
-                 v-list-tile-sub-title(v-html='item.description')
 
-                 .caption.grey--text.mt-1(v-html='item.path')
 
-               v-list-tile-action
 
-                 v-chip(label) {{item.locale.toUpperCase()}}
 
-             v-divider(v-if='idx < results.length - 1')
 
-         v-pagination.mt-3(
 
-           v-if='paginationLength > 1'
 
-           dark
 
-           v-model='pagination'
 
-           :length='paginationLength'
 
-         )
 
-       template(v-if='suggestions.length > 0')
 
-         v-subheader.white--text.mt-3 {{$t('common:header.searchDidYouMean')}}
 
-         v-list.search-results-suggestions.radius-7(dense, dark)
 
-           template(v-for='(term, idx) of suggestions')
 
-             v-list-tile(:key='term', @click='setSearchTerm(term)', :class='idx + results.length === cursor ? `highlighted` : ``')
 
-               v-list-tile-avatar
 
-                 v-icon search
 
-               v-list-tile-content
 
-                 v-list-tile-title(v-html='term')
 
-             v-divider(v-if='idx < suggestions.length - 1')
 
-       .text-xs-center.pt-5(v-if='search.length > 1')
 
-         v-btn(outline, color='orange', @click='search = ``', v-if='results.length > 0')
 
-           v-icon(left) save
 
-           span {{$t('common:header.searchCopyLink')}}
 
-         v-btn(outline, color='pink', @click='search = ``')
 
-           v-icon(left) clear
 
-           span {{$t('common:header.searchClose')}}
 
- </template>
 
- <script>
 
- import _ from 'lodash'
 
- import { sync } from 'vuex-pathify'
 
- import { OrbitSpinner } from 'epic-spinners'
 
- import searchPagesQuery from 'gql/common/common-pages-query-search.gql'
 
- export default {
 
-   components: {
 
-     OrbitSpinner
 
-   },
 
-   data() {
 
-     return {
 
-       cursor: 0,
 
-       pagination: 1,
 
-       response: {
 
-         results: [],
 
-         suggestions: [],
 
-         totalHits: 0
 
-       }
 
-     }
 
-   },
 
-   computed: {
 
-     search: sync('site/search'),
 
-     searchIsFocused: sync('site/searchIsFocused'),
 
-     searchIsLoading: sync('site/searchIsLoading'),
 
-     searchRestrictLocale: sync('site/searchRestrictLocale'),
 
-     searchRestrictPath: sync('site/searchRestrictPath'),
 
-     results() {
 
-       return this.response.results ? this.response.results : []
 
-     },
 
-     hits() {
 
-       return this.response.totalHits ? this.response.totalHits : 0
 
-     },
 
-     suggestions() {
 
-       return this.response.suggestions ? this.response.suggestions : []
 
-     },
 
-     paginationLength() {
 
-       return this.response.totalHits > 0 ? 0 : Math.ceil(this.response.totalHits / 10)
 
-     }
 
-   },
 
-   watch: {
 
-     search(newValue, oldValue) {
 
-       this.cursor = 0
 
-       if (newValue.length < 2) {
 
-         this.response.results = []
 
-         this.response.suggestions = []
 
-       } else {
 
-         this.searchIsLoading = true
 
-       }
 
-     }
 
-   },
 
-   mounted() {
 
-     this.$root.$on('searchMove', (dir) => {
 
-       this.cursor += (dir === 'up' ? -1 : 1)
 
-       if (this.cursor < -1) {
 
-         this.cursor = -1
 
-       } else if (this.cursor > this.results.length + this.suggestions.length - 1) {
 
-         this.cursor = this.results.length + this.suggestions.length - 1
 
-       }
 
-     })
 
-     this.$root.$on('searchEnter', () => {
 
-       if (this.cursor >= 0 && this.cursor < this.results.length) {
 
-         this.goToPage(_.nth(this.results, this.cursor))
 
-       } else if (this.cursor >= 0) {
 
-         this.setSearchTerm(_.nth(this.suggestions, this.cursor - this.results.length))
 
-       }
 
-     })
 
-   },
 
-   methods: {
 
-     setSearchTerm(term) {
 
-       this.search = term
 
-     },
 
-     goToPage(item) {
 
-       window.location.assign(`/${item.locale}/${item.path}`)
 
-     }
 
-   },
 
-   apollo: {
 
-     response: {
 
-       query: searchPagesQuery,
 
-       variables() {
 
-         return {
 
-           query: this.search
 
-         }
 
-       },
 
-       fetchPolicy: 'network-only',
 
-       debounce: 300,
 
-       throttle: 1000,
 
-       skip() {
 
-         return !this.search || this.search.length < 2
 
-       },
 
-       update: (data) => _.get(data, 'pages.search', {}),
 
-       watchLoading (isLoading) {
 
-         this.searchIsLoading = isLoading
 
-       }
 
-     }
 
-   }
 
- }
 
- </script>
 
- <style lang="scss">
 
- .search-results {
 
-   position: fixed;
 
-   top: 64px;
 
-   left: 0;
 
-   width: 100%;
 
-   height: calc(100% - 64px);
 
-   background-color: rgba(0,0,0,.9);
 
-   z-index: 100;
 
-   text-align: center;
 
-   animation: searchResultsReveal .6s ease;
 
-   @media #{map-get($display-breakpoints, 'sm-and-down')} {
 
-     top: 112px;
 
-   }
 
-   &-container {
 
-     margin: 12px auto;
 
-     width: 90vw;
 
-     max-width: 1024px;
 
-   }
 
-   &-help {
 
-     text-align: center;
 
-     padding: 32px 0;
 
-     font-size: 18px;
 
-     font-weight: 300;
 
-     color: #FFF;
 
-     img {
 
-       width: 104px;
 
-     }
 
-   }
 
-   &-loader {
 
-     display: flex;
 
-     justify-content: center;
 
-     align-items: center;
 
-     flex-direction: column;
 
-     padding: 32px 0;
 
-     color: #FFF;
 
-   }
 
-   &-none {
 
-     color: #FFF;
 
-     img {
 
-       width: 200px;
 
-     }
 
-   }
 
-   &-items {
 
-     .highlighted {
 
-       background: #FFF linear-gradient(to bottom, #FFF, mc('orange', '100'));
 
-     }
 
-   }
 
-   &-suggestions {
 
-     .highlighted {
 
-       background: transparent linear-gradient(to bottom, mc('blue', '500'), mc('blue', '700'));
 
-     }
 
-   }
 
- }
 
- @keyframes searchResultsReveal {
 
-   0% {
 
-     background-color: rgba(0,0,0,0);
 
-     padding-top: 32px;
 
-   }
 
-   100% {
 
-     background-color: rgba(0,0,0,.9);
 
-     padding-top: 0;
 
-   }
 
- }
 
- </style>
 
 
  |