Source: components/profile.js

(function () {
    "use strict";

    /**
    * Adds click listeners to the main header
    * @namespace
    */
    db.libs.profile = (function () {
        function init() {
            // If already initialized, do nothing and return
            var initiated = document.querySelector('html').hasAttribute('data-top-nav-initiated');
            if (initiated) {
                return;
            }

            // Mobile menu toggler
            var smallMenuToggle = document.querySelector('#js-menu-toggle');
            var header = document.querySelector('#main-navigation');
            smallMenuToggle.addEventListener('click', function (event) {
                event.preventDefault();
                header.classList.toggle('expand');
                smallMenuToggle.classList.toggle('active');
            });

            // Large dropdown menu toggler
            var contentMenuToggler = document.querySelector('#js-top-nav-content');
            var largeDropdown = document.querySelector('.large-dropdown');
            contentMenuToggler.addEventListener('click', function (event) {
                event.preventDefault();
                var expanded = contentMenuToggler.getAttribute('aria-expanded');
                if (expanded === 'false') {
                    contentMenuToggler.setAttribute('aria-expanded', 'true');
                } else {
                    contentMenuToggler.setAttribute('aria-expanded', 'false');
                }
                this.classList.toggle('active');
                largeDropdown.classList.toggle('expand');
            });

            // Close menu by pressing the Escape key
            var ESC_KEY = 27;
            document.addEventListener("keydown", function (event) {
                if (event.keyCode === ESC_KEY) {
                    contentMenuToggler.classList.remove('active');
                    largeDropdown.classList.remove('expand');
                    contentMenuToggler.setAttribute('aria-expanded', 'false');
                }
            });

            // Section toggler
            var sectionToggler = document.querySelectorAll('.js-section-toggle');
            sectionToggler.forEach(function (section) {
                section.addEventListener('click', function () {
                    var toggleid = this.dataset.toggle;
                    this.classList.toggle('active');
                    document.querySelectorAll('[data-toggle-id]').forEach(function (e) {
                        if (e.dataset.toggleId != toggleid) {
                            e.classList.remove('expand');
                        }
                    });
                    document.querySelector('[data-toggle-id="' + toggleid + '"]').classList.toggle('expand');

                });
            });

            var bindClickListener = function (element) {
                element.addEventListener('click', function (event) {
                    event.preventDefault();
                    this.classList.toggle('active');
                    userDropdown.classList.toggle('expand');
                    if (!contentMenuToggler.classList.contains('active')) {
                        this.blur();
                    }
                });
            };

            // User dropdown toggler
            var userMenuToggle = document.querySelectorAll('.js-user-menu');
            var userDropdown = document.querySelector('.js-user-dropdown');
            for (var i = 0; i < userMenuToggle.length; i++) {
                var toggle = userMenuToggle[i];
                bindClickListener(toggle);
            }

            document.querySelector('html').setAttribute('data-top-nav-initiated', 'true');
        }
        return {
            init: init,
            reflow: init
        };
    })();
})();