var twentytwenty=twentytwenty||{};
twentytwenty.scrolled=0;
if(! Element.prototype.closest){
Element.prototype.closest=function(s){
var el=this;
do {
if(el.matches(s) ){
return el;
}
el=el.parentElement||el.parentNode;
} while(el!==null&&el.nodeType===1);
return null;
};}
if(window.NodeList&&! NodeList.prototype.forEach){
NodeList.prototype.forEach=function(callback, thisArg){
var i;
var len=this.length;
thisArg=thisArg||window;
for(i=0; i < len; i++){
callback.call(thisArg, this[ i ], i, this);
}};}
twentytwenty.createEvent=function(eventName){
var event;
if(typeof window.Event==='function'){
event=new Event(eventName);
}else{
event=document.createEvent('Event');
event.initEvent(eventName, true, false);
}
return event;
};
if(! Element.prototype.matches){
Element.prototype.matches =
Element.prototype.matchesSelector ||
Element.prototype.mozMatchesSelector ||
Element.prototype.msMatchesSelector ||
Element.prototype.oMatchesSelector ||
Element.prototype.webkitMatchesSelector ||
function(s){
var matches=(this.document||this.ownerDocument).querySelectorAll(s),
i=matches.length;
while(--i >=0&&matches.item(i)!==this){}
return i > -1;
};}
twentytwenty.touchEnabled={
init: function(){
var matchMedia=function(){
var prefixes=[ '-webkit-', '-moz-', '-o-', '-ms-' ];
var query=[ '(', prefixes.join('touch-enabled),('), 'heartz', ')' ].join('');
return window.matchMedia&&window.matchMedia(query).matches;
};
if(( 'ontouchstart' in window)||(window.DocumentTouch&&document instanceof window.DocumentTouch)||matchMedia()){
document.body.classList.add('touch-enabled');
}}
};
twentytwenty.coverModals={
init: function(){
if(document.querySelector('.cover-modal') ){
this.onToggle();
this.outsideUntoggle();
this.closeOnEscape();
this.hideAndShowModals();
}},
onToggle: function(){
document.querySelectorAll('.cover-modal').forEach(function(element){
element.addEventListener('toggled', function(event){
var modal=event.target,
body=document.body;
if(modal.classList.contains('active') ){
body.classList.add('showing-modal');
}else{
body.classList.remove('showing-modal');
body.classList.add('hiding-modal');
setTimeout(function(){
body.classList.remove('hiding-modal');
}, 500);
}});
});
},
outsideUntoggle: function(){
document.addEventListener('click', function(event){
var target=event.target;
var modal=document.querySelector('.cover-modal.active');
if(event.target.tagName.toLowerCase()==='a'&&event.target.hash.includes('#')&&modal!==null){
this.untoggleModal(modal);
setTimeout(function(){
var anchor=document.getElementById(event.target.hash.slice(1) );
anchor.scrollIntoView();
}, 550);
}
if(target===modal){
this.untoggleModal(target);
}}.bind(this) );
},
closeOnEscape: function(){
document.addEventListener('keydown', function(event){
if(event.keyCode===27){
event.preventDefault();
document.querySelectorAll('.cover-modal.active').forEach(function(element){
this.untoggleModal(element);
}.bind(this) );
}}.bind(this) );
},
hideAndShowModals: function(){
var _doc=document,
_win=window,
modals=_doc.querySelectorAll('.cover-modal'),
htmlStyle=_doc.documentElement.style,
adminBar=_doc.querySelector('#wpadminbar');
function getAdminBarHeight(negativeValue){
var height,
currentScroll=_win.pageYOffset;
if(adminBar){
height=currentScroll + adminBar.getBoundingClientRect().height;
return negativeValue ? -height:height;
}
return currentScroll===0 ? 0:-currentScroll;
}
function htmlStyles(){
var overflow=_win.innerHeight > _doc.documentElement.getBoundingClientRect().height;
return {
'overflow-y': overflow ? 'hidden':'scroll',
position: 'fixed',
width: '100%',
top: getAdminBarHeight(true) + 'px',
left: 0
};}
modals.forEach(function(modal){
modal.addEventListener('toggle-target-before-inactive', function(event){
var styles=htmlStyles(),
offsetY=_win.pageYOffset,
paddingTop=(Math.abs(getAdminBarHeight()) - offsetY) + 'px',
mQuery=_win.matchMedia('(max-width: 600px)');
if(event.target!==modal){
return;
}
Object.keys(styles).forEach(function(styleKey){
htmlStyle.setProperty(styleKey, styles[ styleKey ]);
});
_win.twentytwenty.scrolled=parseInt(styles.top, 10);
if(adminBar){
_doc.body.style.setProperty('padding-top', paddingTop);
if(mQuery.matches){
if(offsetY >=getAdminBarHeight()){
modal.style.setProperty('top', 0);
}else{
modal.style.setProperty('top',(getAdminBarHeight() - offsetY) + 'px');
}}
}
modal.classList.add('show-modal');
});
modal.addEventListener('toggle-target-after-inactive', function(event){
if(event.target!==modal){
return;
}
setTimeout(function(){
var clickedEl=twentytwenty.toggles.clickedEl;
modal.classList.remove('show-modal');
Object.keys(htmlStyles()).forEach(function(styleKey){
htmlStyle.removeProperty(styleKey);
});
if(adminBar){
_doc.body.style.removeProperty('padding-top');
modal.style.removeProperty('top');
}
if(clickedEl!==false){
clickedEl.focus();
clickedEl=false;
}
_win.scrollTo(0, Math.abs(_win.twentytwenty.scrolled + getAdminBarHeight()) );
_win.twentytwenty.scrolled=0;
}, 500);
});
});
},
untoggleModal: function(modal){
var modalTargetClass,
modalToggle=false;
if(modal.dataset.modalTargetString){
modalTargetClass=modal.dataset.modalTargetString;
modalToggle=document.querySelector('*[data-toggle-target="' + modalTargetClass + '"]');
}
if(modalToggle){
modalToggle.click();
}else{
modal.classList.remove('active');
}}
};
twentytwenty.intrinsicRatioVideos={
init: function(){
this.makeFit();
window.addEventListener('resize', function(){
this.makeFit();
}.bind(this) );
},
makeFit: function(){
document.querySelectorAll('iframe, object, video').forEach(function(video){
var ratio, iTargetWidth,
container=video.parentNode;
if(video.classList.contains('intrinsic-ignore')||video.parentNode.classList.contains('intrinsic-ignore') ){
return true;
}
if(! video.dataset.origwidth){
video.setAttribute('data-origwidth', video.width);
video.setAttribute('data-origheight', video.height);
}
iTargetWidth=container.offsetWidth;
ratio=iTargetWidth / video.dataset.origwidth;
video.style.width=iTargetWidth + 'px';
video.style.height=(video.dataset.origheight * ratio) + 'px';
});
}};
twentytwenty.modalMenu={
init: function(){
this.expandLevel();
this.keepFocusInModal();
},
expandLevel: function(){
var modalMenus=document.querySelectorAll('.modal-menu');
modalMenus.forEach(function(modalMenu){
var activeMenuItem=modalMenu.querySelector('.current-menu-item');
if(activeMenuItem){
twentytwentyFindParents(activeMenuItem, 'li').forEach(function(element){
var subMenuToggle=element.querySelector('.sub-menu-toggle');
if(subMenuToggle){
twentytwenty.toggles.performToggle(subMenuToggle, true);
}});
}});
},
keepFocusInModal: function(){
var _doc=document;
_doc.addEventListener('keydown', function(event){
var toggleTarget, modal, selectors, elements, menuType, bottomMenu, activeEl, lastEl, firstEl, tabKey, shiftKey,
clickedEl=twentytwenty.toggles.clickedEl;
if(clickedEl&&_doc.body.classList.contains('showing-modal') ){
toggleTarget=clickedEl.dataset.toggleTarget;
selectors='input, a, button';
modal=_doc.querySelector(toggleTarget);
elements=modal.querySelectorAll(selectors);
elements=Array.prototype.slice.call(elements);
if('.menu-modal'===toggleTarget){
menuType=window.matchMedia('(min-width: 1000px)').matches;
menuType=menuType ? '.expanded-menu':'.mobile-menu';
elements=elements.filter(function(element){
return null!==element.closest(menuType)&&null!==element.offsetParent;
});
elements.unshift(_doc.querySelector('.close-nav-toggle') );
bottomMenu=_doc.querySelector('.menu-bottom > nav');
if(bottomMenu){
bottomMenu.querySelectorAll(selectors).forEach(function(element){
elements.push(element);
});
}}
lastEl=elements[ elements.length - 1 ];
firstEl=elements[0];
activeEl=_doc.activeElement;
tabKey=event.keyCode===9;
shiftKey=event.shiftKey;
if(! shiftKey&&tabKey&&lastEl===activeEl){
event.preventDefault();
firstEl.focus();
}
if(shiftKey&&tabKey&&firstEl===activeEl){
event.preventDefault();
lastEl.focus();
}}
});
}};
twentytwenty.primaryMenu={
init: function(){
this.focusMenuWithChildren();
},
focusMenuWithChildren: function(){
var links, i, len,
menu=document.querySelector('.primary-menu-wrapper');
if(! menu){
return false;
}
links=menu.getElementsByTagName('a');
for(i=0, len=links.length; i < len; i++){
links[i].addEventListener('focus', toggleFocus, true);
links[i].addEventListener('blur', toggleFocus, true);
}
function toggleFocus(){
var self=this;
while(-1===self.className.indexOf('primary-menu') ){
if('li'===self.tagName.toLowerCase()){
if(-1!==self.className.indexOf('focus') ){
self.className=self.className.replace(' focus', '');
}else{
self.className +=' focus';
}}
self=self.parentElement;
}}
}};
twentytwenty.toggles={
clickedEl: false,
init: function(){
this.toggle();
this.resizeCheck();
this.untoggleOnEscapeKeyPress();
},
performToggle: function(element, instantly){
var target, timeOutTime, classToToggle,
self=this,
_doc=document,
toggle=element,
targetString=toggle.dataset.toggleTarget,
activeClass='active';
if(! _doc.querySelectorAll('.show-modal').length){
self.clickedEl=_doc.activeElement;
}
if(targetString==='next'){
target=toggle.nextSibling;
}else{
target=_doc.querySelector(targetString);
}
if(target.classList.contains(activeClass) ){
target.dispatchEvent(twentytwenty.createEvent('toggle-target-before-active') );
}else{
target.dispatchEvent(twentytwenty.createEvent('toggle-target-before-inactive') );
}
classToToggle=toggle.dataset.classToToggle ? toggle.dataset.classToToggle:activeClass;
timeOutTime=0;
if(target.classList.contains('cover-modal') ){
timeOutTime=10;
}
setTimeout(function(){
var focusElement,
subMenued=target.classList.contains('sub-menu'),
newTarget=subMenued ? toggle.closest('.menu-item').querySelector('.sub-menu'):target,
duration=toggle.dataset.toggleDuration;
if(toggle.dataset.toggleType==='slidetoggle'&&! instantly&&duration!=='0'){
twentytwentyMenuToggle(newTarget, duration);
}else{
newTarget.classList.toggle(classToToggle);
}
if(targetString==='next'){
toggle.classList.toggle(activeClass);
}else if(target.classList.contains('sub-menu') ){
toggle.classList.toggle(activeClass);
}else{
_doc.querySelector('*[data-toggle-target="' + targetString + '"]').classList.toggle(activeClass);
}
twentytwentyToggleAttribute(toggle, 'aria-expanded', 'true', 'false');
if(self.clickedEl&&-1!==toggle.getAttribute('class').indexOf('close-') ){
twentytwentyToggleAttribute(self.clickedEl, 'aria-expanded', 'true', 'false');
}
if(toggle.dataset.toggleBodyClass){
_doc.body.classList.toggle(toggle.dataset.toggleBodyClass);
}
if(toggle.dataset.setFocus){
focusElement=_doc.querySelector(toggle.dataset.setFocus);
if(focusElement){
if(target.classList.contains(activeClass) ){
focusElement.focus();
}else{
focusElement.blur();
}}
}
target.dispatchEvent(twentytwenty.createEvent('toggled') );
if(target.classList.contains(activeClass) ){
target.dispatchEvent(twentytwenty.createEvent('toggle-target-after-active') );
}else{
target.dispatchEvent(twentytwenty.createEvent('toggle-target-after-inactive') );
}}, timeOutTime);
},
toggle: function(){
var self=this;
document.querySelectorAll('*[data-toggle-target]').forEach(function(element){
element.addEventListener('click', function(event){
event.preventDefault();
self.performToggle(element);
});
});
},
resizeCheck: function(){
if(document.querySelectorAll('*[data-untoggle-above], *[data-untoggle-below], *[data-toggle-above], *[data-toggle-below]').length){
window.addEventListener('resize', function(){
var winWidth=window.innerWidth,
toggles=document.querySelectorAll('.toggle');
toggles.forEach(function(toggle){
var unToggleAbove=toggle.dataset.untoggleAbove,
unToggleBelow=toggle.dataset.untoggleBelow,
toggleAbove=toggle.dataset.toggleAbove,
toggleBelow=toggle.dataset.toggleBelow;
if(! unToggleAbove&&! unToggleBelow&&! toggleAbove&&! toggleBelow){
return;
}
if((((unToggleAbove&&winWidth > unToggleAbove) ||
(unToggleBelow&&winWidth < unToggleBelow) ) &&
toggle.classList.contains('active') ) ||
(((toggleAbove&&winWidth > toggleAbove) ||
(toggleBelow&&winWidth < toggleBelow) ) &&
! toggle.classList.contains('active') )
){
toggle.click();
}});
});
}},
untoggleOnEscapeKeyPress: function(){
document.addEventListener('keyup', function(event){
if(event.key==='Escape'){
document.querySelectorAll('*[data-untoggle-on-escape].active').forEach(function(element){
if(element.classList.contains('active') ){
element.click();
}});
}});
}};
function twentytwentyDomReady(fn){
if(typeof fn!=='function'){
return;
}
if(document.readyState==='interactive'||document.readyState==='complete'){
return fn();
}
document.addEventListener('DOMContentLoaded', fn, false);
}
twentytwentyDomReady(function(){
twentytwenty.toggles.init();
twentytwenty.coverModals.init();
twentytwenty.intrinsicRatioVideos.init();
twentytwenty.modalMenu.init();
twentytwenty.primaryMenu.init();
twentytwenty.touchEnabled.init();
});
function twentytwentyToggleAttribute(element, attribute, trueVal, falseVal){
var toggles;
if(! element.hasAttribute(attribute) ){
return;
}
if(trueVal===undefined){
trueVal=true;
}
if(falseVal===undefined){
falseVal=false;
}
toggles=document.querySelectorAll('[data-toggle-target="' + element.dataset.toggleTarget + '"]');
toggles.forEach(function(toggle){
if(! toggle.hasAttribute(attribute) ){
return;
}
if(toggle.getAttribute(attribute)!==trueVal){
toggle.setAttribute(attribute, trueVal);
}else{
toggle.setAttribute(attribute, falseVal);
}});
}
function twentytwentyMenuToggle(target, duration){
var initialParentHeight, finalParentHeight, menu, menuItems, transitionListener,
initialPositions=[],
finalPositions=[];
if(! target){
return;
}
menu=target.closest('.menu-wrapper');
menuItems=menu.querySelectorAll('.menu-item');
menuItems.forEach(function(menuItem, index){
initialPositions[ index ]={ x: menuItem.offsetLeft, y: menuItem.offsetTop };});
initialParentHeight=target.parentElement.offsetHeight;
target.classList.add('toggling-target');
target.classList.toggle('active');
menuItems.forEach(function(menuItem, index){
finalPositions[ index ]={ x: menuItem.offsetLeft, y: menuItem.offsetTop };});
finalParentHeight=target.parentElement.offsetHeight;
target.classList.toggle('active');
menu.classList.add('is-toggling');
target.classList.toggle('active');
menuItems.forEach(function(menuItem, index){
var initialPosition=initialPositions[ index ];
if(initialPosition.y===0&&menuItem.parentElement===target){
initialPosition.y=initialParentHeight;
}
menuItem.style.transform='translate(' + initialPosition.x + 'px, ' + initialPosition.y + 'px)';
});
requestAnimationFrame(function(){
requestAnimationFrame(function(){
menu.classList.add('is-animating');
menuItems.forEach(function(menuItem, index){
var finalPosition=finalPositions[ index ];
if(finalPosition.y===0&&menuItem.parentElement===target){
finalPosition.y=finalParentHeight;
}
if(duration!==undefined){
menuItem.style.transitionDuration=duration + 'ms';
}
menuItem.style.transform='translate(' + finalPosition.x + 'px, ' + finalPosition.y + 'px)';
});
if(duration!==undefined){
target.style.transitionDuration=duration + 'ms';
}});
transitionListener=function(){
menu.classList.remove('is-animating');
menu.classList.remove('is-toggling');
target.classList.remove('toggling-target');
menuItems.forEach(function(menuItem){
menuItem.style.transform='';
menuItem.style.transitionDuration='';
});
target.style.transitionDuration='';
target.removeEventListener('transitionend', transitionListener);
};
target.addEventListener('transitionend', transitionListener);
});
}
function twentytwentyFindParents(target, query){
var parents=[];
function traverse(item){
var parent=item.parentNode;
if(parent instanceof HTMLElement){
if(parent.matches(query) ){
parents.push(parent);
}
traverse(parent);
}}
traverse(target);
return parents;
};