position: 'right' // Todo: switch for Arabic, based on class or text direction?
});
+ // Open / Close Menu handlers
document.querySelector(`a[href="#menu"]`)
.addEventListener('click', (event) => {
mmenu.open();
event.preventDefault();
event.stopPropagation();
- if (null === document.querySelector('.mm--close')) {
+ if (null === document.querySelector('#close-menu')) {
- nav.innerHTML = '<a class="mm--close"></a>' + nav.innerHTML;
+ nav.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" id="close-menu" viewBox="0 0 30 30"><path d="M16 15L29.3 1.8c.3-.3.3-.8 0-1-.3-.3-.8-.3-1 0L15 14 1.8.7C1.5.4 1 .4.8.7c-.3.3-.3.8 0 1L14 15 .7 28.2c-.3.3-.3.8 0 1 .1.1.3.2.5.2s.4-.1.5-.2L15 16l13.2 13.2c.1.1.3.2.5.2s.4-.1.5-.2c.3-.3.3-.8 0-1L16 15z" fill="currentColor"/></svg>' + nav.innerHTML;
- document.querySelector('.mm--close').addEventListener('click', (event) => {
+ document.querySelector('#close-menu').addEventListener('click', (event) => {
mmenu.close();
});
function buildMobileMenu() {
const menu = document.createElement('div');
- const menuItems = document.querySelector('.main-menu');
+ const menuItems = document.querySelector('.main-menu').cloneNode(true);
+ const ctaButtons = document.querySelectorAll('.header-cta');
+ const locales = document.querySelectorAll('.nav-secondary .locales a');
+ const localeLinks = Array.from(locales).reduce((html, link) => html + link.outerHTML, '');
- // Todo: copy other items into mobile menu (secondary nav buttons, language switcher etc)
- menu.appendChild(menuItems.cloneNode(true));
+ // Prepend CTA links from header into main menu
+ // ctaButtons is a NodeList so we convert to an array to allow it to be reversed
+ // It needs to be reversed because we will prepend these links and we want the
+ // order to remain the same at the end...
+ Array.from(ctaButtons).reverse().forEach(function(button) {
+ let newItem = document.createElement('li');
+ newItem.className = 'cta-button';
+ newItem.innerHTML = button.outerHTML;
+ menuItems.insertBefore(newItem, menuItems.childNodes[0] || null);
+ });
+
+ // Append language switcher
+ let localesItem = document.createElement('li');
+ localesItem.className = 'locales';
+ localesItem.innerHTML = localeLinks;
+ menuItems.appendChild(localesItem);
+
+ // Remove link from top level menu items that have sub-menus (otherwise MMenu splits the link and the sub-menu arrow)
+ menuItems.querySelectorAll('.menu-item-has-children > a').forEach(function (link) {
+ let parent = link.parentNode;
+ let newWrapper = document.createElement('span');
+ newWrapper.innerText = link.innerText;
+ parent.insertBefore(newWrapper, parent.childNodes[0] || null);
+ parent.removeChild(link); // Replaced by the new element
+ });
menu.setAttribute('id', menuID);
+ menu.appendChild(menuItems);
+
document.body.appendChild(menu);
}
<div class="nav-secondary absolute top-0 right-0 flex items-center">
- <ul class="flex mr-2">
+ <ul class="locales flex mr-2">
@foreach ($languages as $lang)
<li class="mr-4">
<a href="{{ $lang['url'] }}" @if($lang['current_lang']) class="border-b-2 border-pink"@endif>
</ul>
@if ($button_1)
- <a href="{{ $button_1->url }}" class="btn flex items-center">
+ <a href="{{ $button_1->url }}" class="header-cta btn flex items-center">
<img src="@asset('images/teleconsultation.svg')" class="mr-2">
{{ $button_1->title }}
</a>
@endif
@if ($button_2)
- <a href="{{ $button_2->url }}" class="btn flex items-center bg-teal">
+ <a href="{{ $button_2->url }}" class="header-cta btn flex items-center bg-teal">
<img src="@asset('images/rendezvous.svg')" class="mr-2">
{{ $button_2->title }}
</a>