{"version":3,"file":null,"sources":["../../src/scripts/stacked-menu.js"],"sourcesContent":["/**\n * A flexible stacked navigation menu.\n * @class\n *\n * @example The StackedMenu basic template looks like:\n *
\n * \n *
\n *\n * @example Instance the StackedMenu:\n * var menus = new StackedMenu();\n */\nclass StackedMenu {\n\n /**\n * Create a StackedMenu.\n * @constructor\n * @param {Object} options - An object containing key:value that representing the current StackedMenu.\n */\n constructor(options) {\n /**\n * The StackedMenu options.\n * @type {Object}\n * @property {Boolean} compact=false - Transform StackedMenu items (except item childs) to small size.\n * @property {Boolean} hoverable=false - How StackedMenu triggered `open`/`close` state. Use `false` for hoverable and `true` for collapsible (clickable).\n * @property {Boolean} closeOther=true - Control whether expanding an item will cause the other items to close. Only available when `hoverable=false`.\n * @property {String} align='left' - Where StackedMenu items childs will open when `hoverable=true` (`left`/`right`).\n * @property {String} selector='#stacked-menu' - The StackedMenu element selector.\n * @property {String} selectorClass='stacked-menu' - The css class name that will be added to the StackedMenu and used for css prefix classes.\n * @example\n * var options = {\n * closeOther: false,\n * align: 'right',\n * };\n *\n * var menus = new StackedMenu(options);\n */\n this.options = {\n compact: false,\n hoverable: false,\n closeOther: true,\n align: 'right',\n selector: '#stacked-menu',\n selectorClass: 'stacked-menu'\n }\n\n // mixed default and custom options\n this.options = this._extend({}, this.options, options)\n\n /**\n * The StackedMenu element.\n * @type {Element}\n */\n this.selector = document.querySelector(this.options.selector)\n\n /**\n * The StackedMenu items.\n * @type {Element}\n */\n this.items = this.selector ? this.selector.querySelectorAll('.menu-item') : null\n\n // forEach fallback\n if (!Array.prototype.forEach) {\n Array.prototype.forEach = function forEach(cb, arg) {\n if(typeof cb !== 'function') throw new TypeError(`${cb} is not a function`)\n\n let array = this\n arg = arg || this\n for(let i = 0; i < array.length; i++) {\n cb.call(arg, array[i], i, array)\n }\n }\n }\n this.each = Array.prototype.forEach\n\n /**\n * Lists of feature classes that will be added to the StackedMenu depend to current options.\n * Used selectorClass for prefix.\n * @type {Object}\n */\n this.classes = {\n alignLeft: this.options.selectorClass + '-has-left',\n compact: this.options.selectorClass + '-has-compact',\n collapsible: this.options.selectorClass + '-has-collapsible',\n hoverable: this.options.selectorClass + '-has-hoverable',\n hasChild: 'has-child',\n hasActive: 'has-active',\n hasOpen: 'has-open'\n }\n\n /** states element */\n /**\n * The active item.\n * @type {Element}\n */\n this.active = null\n\n /**\n * The open item(s).\n * @type {Element}\n */\n this.open = []\n\n /** event handlers */\n this.handlerClickDoc = []\n this.handlerOver = []\n this.handlerOut = []\n this.handlerClick = []\n\n // Initialization\n this.init()\n }\n\n /** Private methods */\n /**\n * Listen on document when the page is ready.\n * @private\n * @param {Function} handler - The callback function when page is ready.\n * @return {void}\n */\n _onReady(handler) {\n if(document.readyState != 'loading') {\n handler()\n } else {\n document.addEventListener('DOMContentLoaded', handler, false)\n }\n }\n\n /**\n * Merge the contents of two or more objects together into the first object.\n * @private\n * @param {Object} obj - An object containing additional properties to merge in.\n * @return {Object} The merged object.\n */\n _extend(obj) {\n obj = obj || {}\n const args = arguments\n for (let i = 1; i < args.length; i++) {\n if (!args[i]) continue\n for (let key in args[i]) {\n if (args[i].hasOwnProperty(key))\n obj[key] = args[i][key]\n }\n }\n return obj\n }\n\n /**\n * Attach an event to StackedMenu selector.\n * @private\n * @param {String} type - The name of the event (case-insensitive).\n * @param {(Boolean|Number|String|Array|Object)} data - The custom data that will be added to event.\n * @return {void}\n */\n _emit(type, data) {\n let e\n if (document.createEvent) {\n e = document.createEvent('Event')\n e.initEvent(type, true, true)\n } else {\n e = document.createEventObject()\n e.eventType = type\n }\n e.eventName = type\n e.data = data || this\n // attach event to selector\n document.createEvent\n ? this.selector.dispatchEvent(e)\n : this.selector.fireEvent('on' + type, e)\n }\n\n /**\n * Bind one or two handlers to the element, to be executed when the mouse pointer enters and leaves the element.\n * @private\n * @param {Element} el - The target element.\n * @param {Function} handlerOver - A function to execute when the mouse pointer enters the element.\n * @param {Function} handlerOut - A function to execute when the mouse pointer leaves the element.\n * @return {void}\n */\n _hover(el, handlerOver, handlerOut) {\n if (el.tagName === 'A') {\n this._on(el, 'focus', handlerOver)\n this._on(el, 'blur', handlerOut)\n } else {\n this._on(el, 'mouseover', handlerOver)\n this._on(el, 'mouseout', handlerOut)\n }\n }\n\n /**\n * Registers the specified listener on the element.\n * @private\n * @param {Element} el - The target element.\n * @param {String} type - The name of the event.\n * @param {Function} handler - The callback function when event type is fired.\n * @return {void}\n */\n _on(el, type, handler) {\n let types = type.split(' ')\n for (let i = 0; i < types.length; i++) {\n el[window.addEventListener ? 'addEventListener' : 'attachEvent']( window.addEventListener ? types[i] : `on${types[i]}` , handler, false)\n }\n }\n\n /**\n * Removes the event listener previously registered with [_on()]{@link StackedMenu#_on} method.\n * @private\n * @param {Element} el - The target element.\n * @param {String} type - The name of the event.\n * @param {Function} handler - The callback function when event type is fired.\n * @return {void}\n */\n _off(el, type, handler) {\n let types = type.split(' ')\n for (let i = 0; i < types.length; i++) {\n el[window.removeEventListener ? 'removeEventListener' : 'detachEvent']( window.removeEventListener ? types[i] : `on${types[i]}` , handler, false)\n }\n }\n\n /**\n * Adds one or more class names to the target element.\n * @private\n * @param {Element} el - The target element.\n * @param {String} className - Specifies one or more class names to be added.\n * @return {void}\n */\n _addClass(el, className) {\n let classes = className.split(' ')\n for (let i = 0; i < classes.length; i++) {\n if (el.classList) el.classList.add(classes[i])\n else el.classes[i] += ' ' + classes[i]\n }\n }\n\n /**\n * Removes one or more class names to the target element.\n * @private\n * @param {Element} el - The target element.\n * @param {String} className - Specifies one or more class names to be added.\n * @return {void}\n */\n _removeClass(el, className) {\n let classes = className.split(' ')\n for (let i = 0; i < classes.length; i++) {\n if (el.classList) el.classList.remove(classes[i])\n else el.classes[i] = el.classes[i].replace(new RegExp('(^|\\\\b)' + classes[i].split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ')\n }\n }\n\n /**\n * Determine whether the element is assigned the given class.\n * @private\n * @param {Element} el - The target element.\n * @param {String} className - The class name to search for.\n * @return {Boolean} is has className.\n */\n _hasClass(el, className) {\n if (el.classList) return el.classList.contains(className)\n return new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className)\n }\n\n /**\n * Determine whether the element is a menu child.\n * @private\n * @param {Element} el - The target element.\n * @return {Boolean} is has child.\n */\n _hasChild(el) {\n return this._hasClass(el, this.classes.hasChild)\n }\n\n /**\n * Determine whether the element is a active menu.\n * @private\n * @param {Element} el - The target element.\n * @return {Boolean} is has active state.\n */\n _hasActive(el) {\n return this._hasClass(el, this.classes.hasActive)\n }\n\n /**\n * Determine whether the element is a open menu.\n * @private\n * @param {Element} el - The target element.\n * @return {Boolean} is has open state.\n */\n _hasOpen(el) {\n return this._hasClass(el, this.classes.hasOpen)\n }\n\n /**\n * Determine whether the element is a level menu.\n * @private\n * @param {Element} el - The target element.\n * @return {Boolean} is a level menu.\n */\n _isLevelMenu (el) {\n return this._hasClass(el.parentNode.parentNode, this.options.selectorClass)\n }\n\n /**\n * Attach an event to menu item depend on hoverable option.\n * @private\n * @param {Element} el - The target element.\n * @param {Number} index - An array index from each menu item use to detach the current event.\n * @return {void}\n */\n _menuTrigger(el, index) {\n let elHover = el.querySelector('a')\n\n // remove exist listener\n this._off(el, 'mouseover', this.handlerOver[index])\n this._off(el, 'mouseout', this.handlerOut[index])\n this._off(elHover, 'focus', this.handlerOver[index])\n this._off(elHover, 'blur', this.handlerOut[index])\n this._off(el, 'click', this.handlerClick[index])\n\n // handler listener\n this.handlerOver[index] = this.openMenu.bind(this, el)\n this.handlerOut[index] = this.closeMenu.bind(this, el)\n this.handlerClick[index] = this.toggleMenu.bind(this, el)\n\n // add listener\n if (this.isHoverable()) {\n if (this._hasChild(el)) {\n this._hover(el, this.handlerOver[index], this.handlerOut[index])\n this._hover(elHover, this.handlerOver[index], this.handlerOut[index])\n }\n } else {\n this._on(el, 'click', this.handlerClick[index])\n }\n }\n\n /**\n * Handle for menu items interactions.\n * @private\n * @param {Element} items - The element of menu items.\n * @return {void}\n */\n _handleInteractions(items) {\n const self = this\n\n this.each.call(items, (el, i) => {\n if (self._hasChild(el)) {\n self._menuTrigger(el, i)\n }\n\n if(self._hasActive(el)) self.active = el\n })\n }\n\n /**\n * Get the parent menu item text of menu to be use on menu subhead.\n * @private\n * @param {Element} el - The target element.\n * @return {void}\n */\n _getSubhead(el) {\n return el.querySelector('.menu-text').textContent\n }\n\n /**\n * Generate the subhead element for each child menu.\n * @private\n * @return {void}\n */\n _generateSubhead() {\n const self = this\n let menus = this.selector.children\n let link, menu, subhead, label\n this.each.call(menus, el => {\n self.each.call(el.children, child => {\n if (self._hasChild(child)) {\n self.each.call(child.children, cc => {\n if(self._hasClass(cc, 'menu-link')) link = cc\n })\n\n menu = link.nextElementSibling\n subhead = document.createElement('li')\n label = document.createTextNode(self._getSubhead(link))\n subhead.appendChild(label)\n self._addClass(subhead, 'menu-subhead')\n\n menu.insertBefore(subhead, menu.firstChild)\n }\n })\n })\n }\n\n /**\n * Handle menu link tabindex depend on parent states.\n * @return {void}\n */\n _handleTabIndex () {\n const self = this\n this.each.call(this.items, el => {\n let container = el.parentNode.parentNode\n if (!self._isLevelMenu(el)) {\n el.querySelector('a').setAttribute('tabindex', '-1')\n }\n if (self._hasActive(container) || self._hasOpen(container)) {\n el.querySelector('a').removeAttribute('tabindex')\n }\n })\n }\n\n /**\n * Animate slide menu item.\n * @private\n * @param {Object} el - The target element.\n * @param {String} direction - Up/Down slide direction.\n * @param {Number} speed - Animation Speed in millisecond.\n * @param {String} easing - CSS Animation effect.\n * @return {Promise} resolve\n */\n _slide(el, direction, speed, easing) {\n speed = speed || 300\n easing = easing || 'ease'\n let self = this\n let menu = el.querySelector('.menu')\n let es = window.getComputedStyle(el)['height']\n // wait to resolve\n let walkSpeed = speed + 50\n // wait to clean style attribute\n let clearSpeed = walkSpeed + 100\n\n menu.style.transition = `height ${speed}ms ${easing}, opacity ${speed/2}ms ${easing}, visibility ${speed/2}ms ${easing}`\n\n // slideDown\n if (direction === 'down') {\n // element\n el.style.overflow = 'hidden'\n el.style.height = es\n // menu\n menu.style.height = 'auto'\n // get the current menu height\n let height = window.getComputedStyle(menu)['height']\n menu.style.height = 0\n menu.style.visibility = 'hidden'\n menu.style.opacity = 0\n // remove element style\n el.style.overflow = ''\n el.style.height = ''\n\n setTimeout(function() {\n menu.style.height = height\n menu.style.opacity = 1\n menu.style.visibility = 'visible'\n }, 0)\n } else if (direction === 'up') {\n // get the menu height\n let height = window.getComputedStyle(menu)['height']\n menu.style.height = height\n menu.style.visibility = 'visible'\n menu.style.opacity = 1\n\n setTimeout(function() {\n menu.style.height = 0\n menu.style.visibility = 'hidden'\n menu.style.opacity = 0\n }, 0)\n }\n\n let done = new Promise(function(resolve) {\n // remove the temporary styles\n setTimeout(function() {\n resolve(el)\n // emit event\n self._emit('menu:slide' + direction)\n }, walkSpeed)\n })\n\n // remove styles after done has resolve\n setTimeout(function() {\n menu.removeAttribute('style')\n }, clearSpeed)\n\n return done\n }\n\n /** Public methods */\n /**\n * The first process that called after constructs the StackedMenu instance.\n * @public\n * @fires StackedMenu#menu:init\n * @return {void}\n */\n init() {\n const self = this\n let opts = this.options\n\n this._addClass(this.selector, opts.selectorClass)\n\n // generate subhead\n this._generateSubhead()\n\n // implement compact feature\n this.compact(opts.compact)\n // implement hoverable feature\n this.hoverable(opts.hoverable)\n\n // handle menu link tabindex\n this._handleTabIndex()\n\n this.each.call(this.items, (el) => {\n // stop propagation on each menu-link\n self._on(el, 'click', function(e) {\n e.stopPropagation()\n // prevent default if has child\n if (self._hasChild(el)) e.preventDefault()\n })\n })\n\n // close on outside click, only on collapsible with compact mode\n this._on(document.body, 'click', function () {\n if (!self.isHoverable() && self.isCompact()) {\n // handle listener\n self.closeAllMenu()\n }\n })\n\n // on ready state\n this._onReady(() => {\n\n /**\n * This event is fired when the Menu has completed init.\n *\n * @event StackedMenu#menu:init\n * @type {Object}\n * @property {Object} data - The StackedMenu data instance.\n *\n * @example\n * document.querySelector('#stacked-menu').addEventListener('menu:init', function(e) {\n * console.log(e.data);\n * });\n * @example Or using jQuery:\n * $('#stacked-menu').on('menu:init', function() {\n * console.log('fired on menu:init!!');\n * });\n */\n self._emit('menu:init')\n })\n }\n\n /**\n * Open/show the target menu item. This method didn't take effect to an active item if not on compact mode.\n * @public\n * @fires StackedMenu#menu:open\n * @param {Element} el - The target element.\n * @param {Boolean} emiter - are the element will fire menu:open or not.\n * @return {Object} The StackedMenu instance.\n *\n * @example\n * var menuItem2 = menu.querySelectorAll('.menu-item.has-child')[1];\n * menu.openMenu(menuItem2);\n */\n openMenu(el, emiter = true) {\n // prevent open on active item if not on compact mode\n if(this._hasActive(el) && !this.isCompact()) return\n const self = this\n let blockedSlide = this._isLevelMenu(el) && this.isCompact()\n\n // open menu\n if (this.isHoverable() || blockedSlide) {\n this._addClass(el, this.classes.hasOpen)\n // handle tabindex\n this._handleTabIndex()\n } else {\n // slide down\n this._slide(el, 'down', 150, 'linear').then(function() {\n self._addClass(el, self.classes.hasOpen)\n // handle tabindex\n self._handleTabIndex()\n })\n }\n\n this.open.push(el)\n\n // child menu behavior\n if (this.isHoverable() || (this.isCompact() && !this.hoverable())) {\n const clientHeight = document.documentElement.clientHeight\n const child = el.querySelector('.menu')\n const pos = child.getBoundingClientRect()\n const tolerance = pos.height - 20\n const bottom = clientHeight - pos.top\n const transformOriginX = this.options.align === 'left' ? '100%' : '0px'\n\n if (pos.top >= 500 || tolerance >= bottom) {\n child.style.top = 'auto'\n child.style.bottom = 0\n child.style.transformOrigin = `${transformOriginX} 100% 0`\n }\n }\n\n /**\n * This event is fired when the Menu has open.\n *\n * @event StackedMenu#menu:open\n * @type {Object}\n * @property {Object} data - The StackedMenu data instance.\n *\n * @example\n * document.querySelector('#stacked-menu').addEventListener('menu:open', function(e) {\n * console.log(e.data);\n * });\n * @example Or using jQuery:\n * $('#stacked-menu').on('menu:open', function() {\n * console.log('fired on menu:open!!');\n * });\n */\n if (emiter) {\n this._emit('menu:open')\n }\n\n return this\n }\n\n /**\n * Close/hide the target menu item.\n * @public\n * @fires StackedMenu#menu:close\n * @param {Element} el - The target element.\n * @param {Boolean} emiter - are the element will fire menu:open or not.\n * @return {Object} The StackedMenu instance.\n *\n * @example\n * var menuItem2 = menu.querySelectorAll('.menu-item.has-child')[1];\n * menu.closeMenu(menuItem2);\n */\n closeMenu(el, emiter = true) {\n const self = this\n let blockedSlide = this._isLevelMenu(el) && this.isCompact()\n // open menu\n if (this.isHoverable() || blockedSlide) {\n this._removeClass(el, this.classes.hasOpen)\n // handle tabindex\n this._handleTabIndex()\n } else {\n if (!this._hasActive(el)) {\n // slide up\n this._slide(el, 'up', 150, 'linear').then(function() {\n self._removeClass(el, self.classes.hasOpen)\n // handle tabindex\n self._handleTabIndex()\n })\n }\n }\n\n this.each.call(this.open, (v, i) => {\n if (el == v) self.open.splice(i, 1)\n })\n\n // remove child menu behavior style\n if (this.isHoverable() || (this.isCompact() && !this.hoverable())) {\n const child = el.querySelector('.menu')\n\n child.style.top = ''\n child.style.bottom = ''\n child.style.transformOrigin = ''\n }\n\n /**\n * This event is fired when the Menu has close.\n *\n * @event StackedMenu#menu:close\n * @type {Object}\n * @property {Object} data - The StackedMenu data instance.\n *\n * @example\n * document.querySelector('#stacked-menu').addEventListener('menu:close', function(e) {\n * console.log(e.data);\n * });\n * @example Or using jQuery:\n * $('#stacked-menu').on('menu:close', function() {\n * console.log('fired on menu:close!!');\n * });\n */\n if (emiter) {\n this._emit('menu:close')\n }\n\n return this\n }\n\n /**\n * Close all opened menu items.\n * @public\n * @fires StackedMenu#menu:close\n * @return {Object} The StackedMenu instance.\n *\n * @example\n * menu.closeAllMenu();\n */\n closeAllMenu() {\n const self = this\n this.each.call(this.items, el => {\n if (self._hasOpen(el)) {\n self.closeMenu(el, false)\n }\n })\n\n return this\n }\n\n /**\n * Toggle open/close the target menu item.\n * @public\n * @fires StackedMenu#menu:open\n * @fires StackedMenu#menu:close\n * @param {Element} el - The target element.\n * @return {Object} The StackedMenu instance.\n *\n * @example\n * var menuItem2 = menu.querySelectorAll('.menu-item.has-child')[1];\n * menu.toggleMenu(menuItem2);\n */\n toggleMenu(el) {\n const method = this._hasOpen(el) ? 'closeMenu': 'openMenu'\n const self = this\n let itemParent, elParent\n\n // close other\n this.each.call(this.items, item => {\n itemParent = item.parentNode.parentNode\n elParent = el.parentNode.parentNode\n // close other except parents that has open state and an active item\n if(!self._hasOpen(elParent) && self._hasChild(itemParent)) {\n if (self.options.closeOther || (!self.options.closeOther && self.isCompact())) {\n if (self._hasOpen(itemParent)) {\n self.closeMenu(itemParent, false)\n }\n }\n }\n })\n // open target el\n if (this._hasChild(el)) this[method](el)\n\n return this\n }\n\n /**\n * Set the open menu position to `left` or `right`.\n * @public\n * @fires StackedMenu#menu:align\n * @param {String} position - The position that will be set to the Menu.\n * @return {Object} The StackedMenu instance.\n *\n * @example\n * menu.align('left');\n */\n align(position) {\n const method = (position === 'left') ? '_addClass': '_removeClass'\n const classes = this.classes\n\n this[method](this.selector, classes.alignLeft)\n\n this.options.align = position\n\n /**\n * This event is fired when the Menu has changed align position.\n *\n * @event StackedMenu#menu:align\n * @type {Object}\n * @property {Object} data - The StackedMenu data instance.\n *\n * @example\n * document.querySelector('#stacked-menu').addEventListener('menu:align', function(e) {\n * console.log(e.data);\n * });\n * @example Or using jQuery:\n * $('#stacked-menu').on('menu:align', function() {\n * console.log('fired on menu:align!!');\n * });\n */\n this._emit('menu:align')\n\n return this\n }\n\n /**\n * Determine whether the Menu is currently compact.\n * @public\n * @return {Boolean} is compact.\n *\n * @example\n * var isCompact = menu.isCompact();\n */\n isCompact() {\n return this.options.compact\n }\n\n /**\n * Toggle the Menu compact mode.\n * @public\n * @fires StackedMenu#menu:compact\n * @param {Boolean} isCompact - The compact mode.\n * @return {Object} The StackedMenu instance.\n *\n * @example\n * menu.compact(true);\n */\n compact(isCompact) {\n const method = (isCompact) ? '_addClass': '_removeClass'\n const classes = this.classes\n\n this[method](this.selector, classes.compact)\n\n this.options.compact = isCompact\n // reset interactions\n this._handleInteractions(this.items)\n\n /**\n * This event is fired when the Menu has completed toggle compact mode.\n *\n * @event StackedMenu#menu:compact\n * @type {Object}\n * @property {Object} data - The StackedMenu data instance.\n *\n * @example\n * document.querySelector('#stacked-menu').addEventListener('menu:compact', function(e) {\n * console.log(e.data);\n * });\n * @example Or using jQuery:\n * $('#stacked-menu').on('menu:compact', function() {\n * console.log('fired on menu:compact!!');\n * });\n */\n this._emit('menu:compact')\n\n return this\n }\n\n /**\n * Determine whether the Menu is currently hoverable.\n * @public\n * @return {Boolean} is hoverable.\n *\n * @example\n * var isHoverable = menu.isHoverable();\n */\n isHoverable() {\n return this.options.hoverable\n }\n\n /**\n * Toggle the Menu (interaction) hoverable.\n * @public\n * @fires StackedMenu#menu:hoverable\n * @param {Boolean} isHoverable - `true` for hoverable and `false` for collapsible (clickable).\n * @return {Object} The StackedMenu instance.\n *\n * @example\n * menu.hoverable(true);\n */\n hoverable(isHoverable) {\n const classes = this.classes\n\n if (isHoverable) {\n this._addClass(this.selector, classes.hoverable)\n this._removeClass(this.selector, classes.collapsible)\n } else {\n this._addClass(this.selector, classes.collapsible)\n this._removeClass(this.selector, classes.hoverable)\n }\n\n this.options.hoverable = isHoverable\n // reset interactions\n this._handleInteractions(this.items)\n\n /**\n * This event is fired when the Menu has completed toggle hoverable.\n *\n * @event StackedMenu#menu:hoverable\n * @type {Object}\n * @property {Object} data - The StackedMenu data instance.\n *\n * @example\n * document.querySelector('#stacked-menu').addEventListener('menu:hoverable', function(e) {\n * console.log(e.data);\n * });\n * @example Or using jQuery:\n * $('#stacked-menu').on('menu:hoverable', function() {\n * console.log('fired on menu:hoverable!!');\n * });\n */\n this._emit('menu:hoverable')\n\n return this\n }\n}\n\nexport default StackedMenu\n"],"names":["let","height"],"mappings":"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"}