import cssVars from 'css-vars-ponyfill' import $ from 'jquery' import lozad from 'lozad' import Headroom from "headroom.js" import slick from 'slick-carousel' import tippy from 'tippy.js' import AOS from 'aos' import Fuse from 'fuse.js' import { isRTL, formatDate } from './helpers' cssVars({}) $(document).ready(() => { if (isRTL()) { $('html').attr('dir', 'rtl').addClass('rtl') } const $body = $('body') const $header = $('.js-header') const $openMenu = $('.js-open-menu') const $closeMenu = $('.js-close-menu') const $menu = $('.js-menu') const $toggleSubmenu = $('.js-toggle-submenu') const $submenuOption = $('.js-submenu-option')[0] const $submenu = $('.js-submenu') const $recentArticles = $('.js-recent-articles') const $openSearch = $('.js-open-search') const $closeSearch = $('.js-close-search') const $search = $('.js-search') const $inputSearch = $('.js-input-search') const $searchResults = $('.js-search-results') const $searchNoResults = $('.js-no-results') let fuse = null let submenuIsOpen = false function showSubmenu() { $header.addClass('submenu-is-active') $toggleSubmenu.addClass('active') $submenu.removeClass('closed').addClass('opened') } function hideSubmenu() { $header.removeClass('submenu-is-active') $toggleSubmenu.removeClass('active') $submenu.removeClass('opened').addClass('closed') } function toggleScrollVertical() { $body.toggleClass('no-scroll-y') } function trySearchFeature() { if (typeof ghostSearchApiKey !== 'undefined') { getAllPosts(ghostHost, ghostSearchApiKey) } else { $openSearch.css('visibility', 'hidden') $closeSearch.remove() $search.remove() } } function getAllPosts(host, key) { const api = new GhostContentAPI({ url: host, key, version: 'v2' }) const allPosts = [] const fuseOptions = { shouldSort: true, threshold: 0, location: 0, distance: 100, tokenize: true, matchAllTokens: true, maxPatternLength: 32, minMatchCharLength: 1, keys: ['title', 'custom_excerpt', 'html'] } api.posts.browse({ limit: 'all', fields: 'id, title, url, published_at, custom_excerpt, html' }) .then((posts) => { for (var i = 0, len = posts.length; i < len; i++) { allPosts.push(posts[i]) } fuse = new Fuse(allPosts, fuseOptions) }) .catch((err) => { console.log(err) }) } $openMenu.click(() => { $menu.addClass('opened') toggleScrollVertical() }) $closeMenu.click(() => { $menu.removeClass('opened') toggleScrollVertical() }) $toggleSubmenu.click(() => { submenuIsOpen = !submenuIsOpen if (submenuIsOpen) { showSubmenu() } else { hideSubmenu() } }) $openSearch.click(() => { $search.addClass('opened') setTimeout(() => { $inputSearch.focus() }, 400); toggleScrollVertical() }) $closeSearch.click(() => { $inputSearch.blur() $search.removeClass('opened') toggleScrollVertical() }) $inputSearch.keyup(() => { if ($inputSearch.val().length > 0 && fuse) { const results = fuse.search($inputSearch.val()) let htmlString = '' if (results.length > 0) { for (var i = 0, len = results.length; i < len; i++) { htmlString += `
\ \

${results[i].title}

\ ${formatDate(results[i].published_at)}\
\
` } $searchNoResults.hide() $searchResults.html(htmlString) $searchResults.show() } else { $searchResults.html('') $searchResults.hide() $searchNoResults.show() } } else { $searchResults.html('') $searchResults.hide() $searchNoResults.hide() } }) $(window).click((e) => { if (submenuIsOpen) { if ($submenuOption && !$submenuOption.contains(e.target)) { submenuIsOpen = false hideSubmenu() } } }) var headerElement = document.querySelector('.js-header') if (headerElement) { var headroom = new Headroom(headerElement, { tolerance: { down: 10, up: 20 }, offset: 15 }) headroom.init() } if ($recentArticles.length > 0) { $recentArticles.slick({ adaptiveHeight: true, arrows: false, infinite: false, mobileFirst: true, variableWidth: true, rtl: isRTL }) } if (typeof disableFadeAnimation === 'undefined' || !disableFadeAnimation) { AOS.init({ once: true, startEvent: 'DOMContentLoaded', }) } else { $('[data-aos]').addClass('no-aos-animation') } const observer = lozad() observer.observe() tippy('.js-tooltip') trySearchFeature() })