| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | var drawer = function() {    if (!Element.prototype.closest) {        if (!Element.prototype.matches) {            Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;        }        Element.prototype.closest = function(s) {            var el = this;            var ancestor = this;            if (!document.documentElement.contains(el))                return null;            do {                if (ancestor.matches(s))                    return ancestor;                ancestor = ancestor.parentElement;            } while (ancestor !== null);            return null;        }        ;    }    var settings = {        speedOpen: 50,        speedClose: 350,        activeClass: 'is-active',        visibleClass: 'is-visible',        selectorTarget: '[data-drawer-target]',        selectorTrigger: '[data-drawer-trigger]',        selectorClose: '[data-drawer-close]',    };    var toggleccessibility = function(event) {        if (event.getAttribute('aria-expanded') === 'true') {            event.setAttribute('aria-expanded', false);        } else {            event.setAttribute('aria-expanded', true);        }    };    var openDrawer = function(trigger) {        var target = document.getElementById(trigger.getAttribute('aria-controls'));        target.classList.add(settings.activeClass);        document.documentElement.style.overflow = 'hidden';        toggleccessibility(trigger);        setTimeout(function() {            target.classList.add(settings.visibleClass);        }, settings.speedOpen);    };    var closeDrawer = function(event) {        var closestParent = event.closest(settings.selectorTarget)            , childrenTrigger = document.querySelector('[aria-controls="' + closestParent.id + '"');        closestParent.classList.remove(settings.visibleClass);        document.documentElement.style.overflow = '';        toggleccessibility(childrenTrigger);        setTimeout(function() {            closestParent.classList.remove(settings.activeClass);        }, settings.speedClose);    };    var clickHandler = function(event) {        var toggle = event.target            , open = toggle.closest(settings.selectorTrigger)            , close = toggle.closest(settings.selectorClose);        if (open) {            openDrawer(open);        }        if (close) {            closeDrawer(close);        }        if (open || close) {            event.preventDefault();        }    };    // var keydownHandler = function(event) {    //     if (event.key === 'Escape' || event.keyCode === 27) {    //         var drawers = document.querySelectorAll(settings.selectorTarget), i;    //         for (i = 0; i < drawers.length; ++i) {    //             if (drawers[i].classList.contains(settings.activeClass)) {    //                 closeDrawer(drawers[i]);    //             }    //         }    //     }    // };    document.addEventListener('click', clickHandler, false);    // document.addEventListener('keydown', keydownHandler, false);};drawer();
 |