UNPKG

carbon-components

Version:

Carbon Components is a component library for IBM Cloud

698 lines (609 loc) • 35.2 kB
(function (global, factory) { if (typeof define === "function" && define.amd) { define(["exports", "warning", "../../globals/js/feature-flags", "../../globals/js/settings", "../../globals/js/misc/mixin", "../../globals/js/mixins/create-component", "../../globals/js/mixins/init-component-by-search", "../../globals/js/mixins/handles", "../../globals/js/misc/event-matches", "../../globals/js/misc/on", "../removed-component"], factory); } else if (typeof exports !== "undefined") { factory(exports, require("warning"), require("../../globals/js/feature-flags"), require("../../globals/js/settings"), require("../../globals/js/misc/mixin"), require("../../globals/js/mixins/create-component"), require("../../globals/js/mixins/init-component-by-search"), require("../../globals/js/mixins/handles"), require("../../globals/js/misc/event-matches"), require("../../globals/js/misc/on"), require("../removed-component")); } else { var mod = { exports: {} }; factory(mod.exports, global.warning, global.featureFlags, global.settings, global.mixin, global.createComponent, global.initComponentBySearch, global.handles, global.eventMatches, global.on, global.removedComponent); global.leftNav = mod.exports; } })(this, function (_exports, _warning, _featureFlags, _settings, _mixin2, _createComponent, _initComponentBySearch, _handles, _eventMatches, _on, _removedComponent) { "use strict"; Object.defineProperty(_exports, "__esModule", { value: true }); _exports.default = void 0; _warning = _interopRequireDefault(_warning); _settings = _interopRequireDefault(_settings); _mixin2 = _interopRequireDefault(_mixin2); _createComponent = _interopRequireDefault(_createComponent); _initComponentBySearch = _interopRequireDefault(_initComponentBySearch); _handles = _interopRequireDefault(_handles); _eventMatches = _interopRequireDefault(_eventMatches); _on = _interopRequireDefault(_on); _removedComponent = _interopRequireDefault(_removedComponent); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } var didWarnAboutDeprecation; var toArray = function toArray(arrayLike) { return Array.prototype.slice.call(arrayLike); }; var LeftNav = /*#__PURE__*/ function (_mixin) { _inherits(LeftNav, _mixin); /** * Left Navigation. * @extends CreateComponent * @extends InitComponentBySearch * @extends Handles * @param {HTMLElement} element The element working as a left navigation. * @param {Object} [options] The component options * @param {string} [options.selectorLeftNav] The data attribute selector for the nav element in the left nav container. * @param {string} [options.selectorLeftNavList] The data attribute selector for the main ul element in the left nav. * @param {string} [options.selectorLeftNavNestedList] The data attribute selector for the nested ul elements in the left nav. * @param {string} [options.selectorLeftNavToggle] * The data attribute selector for the button that will show and hide the left navigation. * @param {string} [options.selectorLeftNavListItem] The data attribute selector for all list items in the left navigation. * @param {string} [options.selectorLeftNavNestedListItem] * The data attribute selector for all nested list items in the left navigation. * @param {string} [options.selectorLeftNavArrowIcon] The data attribute selector for the arrow icons in the left nav. * @param {string} [options.selectorLeftNavFlyoutMenu] The data attribute selector for the flyout menus in the left nav. * @param {string} [options.selectorLeftNavFlyoutItem] The data attribute selector for the flyout menu items in the left nav. * @param {string} [options.selectorLeftNavSection] * The data attribute selector for the three sections in the header of the left nav. * @param {string} [options.selectorLeftNavCurrentPage] * The data attribute selector for the current section title in the left nav header. * @param {string} [options.selectorLeftNavMainNavHidden] The CSS selector for the hidden main nav. * @param {string} [options.classActiveLeftNav] The class name for when a left nav is active. * @param {string} [options.classActiveLeftNavListItem] The class name for when a left nav list item is active. * @param {string} [options.classExpandedLeftNavListItem] The class name for when a nested list is expanded. * @param {string} [options.classFlyoutDisplayed] The class name for when a flyout menu is displayed. * @param {string} [options.classActiveSection] The class name for an active section item in the left nav header. * @param {string} [options.classItemHasChildren] The class name for when a list item has children. * @param {string} [options.classTaxonomyIcon] The class name for the taxonomy icon. */ function LeftNav(element, options) { var _this; _classCallCheck(this, LeftNav); _this = _possibleConstructorReturn(this, _getPrototypeOf(LeftNav).call(this, element, options)); if (process.env.NODE_ENV !== "production") { process.env.NODE_ENV !== "production" ? (0, _warning.default)(didWarnAboutDeprecation, 'The `LeftNav` component in `carbon-components` has been deprecated. It will be removed in the next major release.') : void 0; didWarnAboutDeprecation = true; } _this.leftNavSectionActive = false; _this.hookOpenActions(); _this.hookListSectionEvents(); _this.hookListItemsEvents(); _this.manage((0, _on.default)(_this.element.ownerDocument, 'click', function (evt) { _this.handleDocumentClick(evt); })); return _this; } /** * Closes the menu. */ _createClass(LeftNav, [{ key: "closeMenu", value: function closeMenu() { this.element.classList.remove(this.options.classActiveLeftNav); var toggleOpenNode = this.element.ownerDocument.querySelector(this.options.selectorLeftNavToggleOpen); toggleOpenNode.classList.remove(this.options.classActiveTrigger); this.element.querySelector(this.options.selectorLeftNav).parentNode.setAttribute('aria-expanded', 'false'); } /** * Toggles the menu to open and close. */ }, { key: "toggleMenu", value: function toggleMenu() { var leftNavContainer = this.element.querySelector(this.options.selectorLeftNav).parentNode; this.element.classList.toggle(this.options.classActiveLeftNav); var toggleOpenNode = this.element.ownerDocument.querySelector(this.options.selectorLeftNavToggleOpen); toggleOpenNode.classList.toggle(this.options.classActiveTrigger); if (leftNavContainer.getAttribute('aria-expanded') === 'false') leftNavContainer.setAttribute('aria-expanded', 'true');else leftNavContainer.setAttribute('aria-expanded', 'false'); } /** * Adds a transitional animation to the navSection */ }, { key: "animateNavSection", value: function animateNavSection(selectedNav) { var _this2 = this; var selectedNavValue = selectedNav.dataset.leftNavSection; var selectedNavLink = selectedNav.querySelector(this.options.selectorLeftNavSectionLink); var leftNav = this.element.querySelector(this.options.selectorLeftNav); var leftNavSections = this.element.querySelector(this.options.selectorLeftNavSections); selectedNav.classList.remove(this.options.classNavSection); selectedNav.classList.remove("".concat(this.options.classNavSection, "--").concat(selectedNavValue)); selectedNav.classList.add(this.options.classNavSectionTransition); if (leftNavSections.children[0] === selectedNav) { selectedNav.classList.add("".concat(this.options.classNavSectionTransition, "--50")); // First child only move 50px } else { selectedNav.classList.add("".concat(this.options.classNavSectionTransition, "--100")); // Second move 100px } selectedNav.setAttribute('data-left-nav-section', selectedNavValue); /* Not sure what trick more performant */ setTimeout(function () { selectedNav.classList.add("".concat(_this2.options.classNavSectionTransition, "--0")); }, 100); // Could probably use a promise here selectedNavLink.classList.remove(this.options.classNavSectionLink); selectedNavLink.classList.add(this.options.classNavHeaderTitle); selectedNavLink.setAttribute('data-left-nav-current-section-title', ''); selectedNavLink.removeAttribute('data-left-nav-section-link'); this.element.insertBefore(selectedNav, leftNav); } /** * Adds a transitional animation to the navigation items on nav section click */ }, { key: "animateNavList", value: function animateNavList(selectedNavTitle) { var _this3 = this; var currentLeftNavList = this.element.querySelector("".concat(this.options.selectorLeftNavList, ":not(").concat(this.options.selectorLeftNavMainNavHidden, ")")); var newLeftNavList = this.element.querySelector("[data-left-nav-list=".concat(selectedNavTitle, "]")); var currentLeftNavItems = toArray(currentLeftNavList.querySelectorAll(this.options.selectorLeftNavListItem)).reverse(); var newLeftNavItems = toArray(newLeftNavList.querySelectorAll(this.options.selectorLeftNavListItem)); var fadeOutTime = 300; var counter = 0; var counterIteration = fadeOutTime / currentLeftNavItems.length; // Length of animation divided by number of items currentLeftNavItems.forEach(function (item) { item.setAttribute('tabIndex', '-1'); setTimeout(function () { item.classList.add(_this3.options.classItemFade); }, counter); counter += counterIteration; }); newLeftNavItems.forEach(function (item) { item.setAttribute('tabIndex', '0'); item.classList.remove(_this3.options.classItemFade); }); setTimeout(function () { currentLeftNavList.classList.add(_this3.options.classListHidden); currentLeftNavList.classList.add(_this3.options.classListTop); currentLeftNavList.setAttribute('aria-hidden', 'true'); newLeftNavList.classList.remove(_this3.options.classListHidden); setTimeout(function () { newLeftNavList.classList.remove(_this3.options.classListTop); }, 100); newLeftNavList.setAttribute('aria-hidden', 'false'); }, fadeOutTime + 100); // Wait for items to fade out. } }, { key: "hookOpenActions", value: function hookOpenActions() { var _this4 = this; var openBtn = this.element.ownerDocument.querySelector(this.options.selectorLeftNavToggleOpen); var closeBtn = this.element.ownerDocument.querySelector(this.options.selectorLeftNavToggleClose); this.manage((0, _on.default)(openBtn, 'click', function () { _this4.element.tabIndex = '0'; _this4.toggleMenu(); })); this.manage((0, _on.default)(openBtn, 'keydown', function (evt) { if (evt.which === 13) { _this4.element.tabIndex = '0'; _this4.toggleMenu(); } })); if (closeBtn) { this.manage((0, _on.default)(closeBtn, 'click', function () { _this4.element.tabIndex = '-1'; _this4.closeMenu(); })); this.manage((0, _on.default)(closeBtn, 'keydown', function (evt) { if (evt.which === 13) { _this4.element.tabIndex = '-1'; _this4.closeMenu(); } })); } this.manage((0, _on.default)(this.element.ownerDocument, 'keydown', function (evt) { if (evt.which === 27 && _this4.element.classList.contains(_this4.options.classActiveLeftNav)) { _this4.closeMenu(); } })); } /** * Addes Event listeners to list sections */ }, { key: "hookListSectionEvents", value: function hookListSectionEvents() { var _this5 = this; var leftNavSections = this.element.querySelector(this.options.selectorLeftNavSections); this.manage((0, _on.default)(leftNavSections, 'click', function (evt) { _this5.handleSectionItemClick(evt, leftNavSections); })); this.manage((0, _on.default)(leftNavSections, 'keydown', function (evt) { if (evt.which === 13) { _this5.handleSectionItemClick(evt, leftNavSections); _this5.element.querySelector(_this5.options.selectorLeftNavCurrentSectionTitle).focus(); } })); } /** * Adds event listeners to list items */ }, { key: "hookListItemsEvents", value: function hookListItemsEvents() { var _this6 = this; var leftNavList = toArray(this.element.querySelectorAll(this.options.selectorLeftNavList)); leftNavList.forEach(function (list) { _this6.manage((0, _on.default)(list, 'click', function (evt) { var leftNavItem = (0, _eventMatches.default)(evt, _this6.options.selectorLeftNavListItem); if (leftNavItem) { var childItem = (0, _eventMatches.default)(evt, _this6.options.selectorLeftNavNestedListItem); var hasChildren = (0, _eventMatches.default)(evt, _this6.options.selectorLeftNavListItemHasChildren); var flyoutItem = (0, _eventMatches.default)(evt, _this6.options.selectorLeftNavFlyoutItem); if (flyoutItem) { _this6.addActiveListItem(flyoutItem); } else if (childItem) { if (childItem.querySelector(_this6.options.selectorLeftNavFlyoutMenu)) { var flyoutMenu = childItem.querySelector(_this6.options.selectorLeftNavFlyoutMenu); flyoutMenu.classList.toggle(_this6.options.classFlyoutDisplayed); } else { _this6.addActiveListItem(childItem); } } else if (hasChildren) { _this6.handleNestedListClick(leftNavItem); } else { _this6.addActiveListItem(leftNavItem); } } })); _this6.manage((0, _on.default)(list, 'keydown', function (evt) { if (evt.which === 13) { var leftNavItem = (0, _eventMatches.default)(evt, _this6.options.selectorLeftNavListItem); if (leftNavItem) { var childItem = (0, _eventMatches.default)(evt, _this6.options.selectorLeftNavNestedListItem); var hasChildren = (0, _eventMatches.default)(evt, _this6.options.selectorLeftNavListItemHasChildren); var flyoutItem = (0, _eventMatches.default)(evt, _this6.options.selectorLeftNavFlyoutItem); var hasLinkItem = !(leftNavItem.querySelector(_this6.options.selectorLeftNavListItemLink) === undefined); if (flyoutItem) { _this6.addActiveListItem(flyoutItem); } else if (childItem) { if (!childItem.querySelector(_this6.options.selectorLeftNavFlyoutMenu)) { _this6.addActiveListItem(childItem); } else { childItem.querySelector(_this6.options.selectorLeftNavFlyoutMenu).setAttribute('aria-hidden', 'false'); childItem.querySelector(_this6.options.selectorLeftNavFlyoutMenu).style.top = "".concat(childItem.offsetTop - _this6.element.querySelector(_this6.options.selectorLeftNav).scrollTop, "px"); childItem.querySelector(_this6.options.selectorLeftNavFlyoutMenu).style.left = "".concat(childItem.offsetLeft + Math.round(childItem.offsetWidth), "px"); } } else if (hasChildren) { _this6.handleNestedListClick(leftNavItem); } else if (hasLinkItem) { var link = leftNavItem.querySelector(_this6.options.selectorLeftNavListItemLink); link.click(); } else { _this6.addActiveListItem(leftNavItem); } } } })); }); var flyouts = toArray(this.element.ownerDocument.querySelectorAll(this.options.selectorLeftNavListItemHasFlyout)); flyouts.forEach(function (flyout) { _this6.manage((0, _on.default)(flyout, 'mouseenter', function () { flyout.querySelector(_this6.options.selectorLeftNavFlyoutMenu).setAttribute('aria-hidden', 'false'); // eslint-disable-next-line no-param-reassign flyout.querySelector(_this6.options.selectorLeftNavFlyoutMenu).style.top = "".concat(flyout.offsetTop - _this6.element.querySelector(_this6.options.selectorLeftNav).scrollTop, "px"); // eslint-disable-next-line no-param-reassign flyout.querySelector(_this6.options.selectorLeftNavFlyoutMenu).style.left = "".concat(flyout.offsetLeft + Math.round(flyout.offsetWidth), "px"); flyout.querySelector(_this6.options.selectorLeftNavFlyoutMenu).classList.toggle(_this6.options.classFlyoutDisplayed); })); _this6.manage((0, _on.default)(flyout, 'mouseleave', function () { flyout.querySelector(_this6.options.selectorLeftNavFlyoutMenu).setAttribute('aria-hidden', 'true'); flyout.querySelector(_this6.options.selectorLeftNavFlyoutMenu).classList.remove(_this6.options.classFlyoutDisplayed); })); }); } /** * Hides all flyout menus. */ }, { key: "hideAllFlyoutMenus", value: function hideAllFlyoutMenus() { var _this7 = this; var flyoutMenus = toArray(this.element.querySelectorAll(this.options.selectorLeftNavFlyoutMenu)); flyoutMenus.forEach(function (menu) { menu.setAttribute('aria-hidden', 'true'); menu.classList.remove(_this7.options.classFlyoutDisplayed); }); } /** * Sets a list item as active. * @param {Object} item The active list item. */ }, { key: "addActiveListItem", value: function addActiveListItem(item) { var _this8 = this; toArray(this.element.querySelectorAll(this.options.selectorLeftNavAllListItems)).forEach(function (currentItem) { if (!(item === currentItem)) { if (!currentItem.contains(item)) { currentItem.classList.remove(_this8.options.classActiveLeftNavListItem); } else { currentItem.classList.add(_this8.options.classActiveLeftNavListItem); } } }); toArray(this.element.querySelectorAll(this.options.selectorLeftNavNestedListItem)).forEach(function (currentItem) { if (!(item === currentItem)) { currentItem.classList.remove(_this8.options.classActiveLeftNavListItem); } }); item.classList.add(this.options.classActiveLeftNavListItem); this.closeMenu(); this.hideAllFlyoutMenus(); this.closeMenu(); } /** * Handles click on the document. * Closes the left navigation when document is clicked outside the left navigation. * @param {Event} evt The event triggering this method. */ }, { key: "handleDocumentClick", value: function handleDocumentClick(evt) { var clickTarget = evt.target; var isOfSelf = this.element.contains(clickTarget); var isToggleBtn = this.element.ownerDocument.querySelector(this.options.selectorLeftNavToggleOpen).contains(clickTarget); var isOpen = this.element.classList.contains(this.options.classActiveLeftNav); var isUnifiedHeader = this.element.ownerDocument.querySelector('[data-unified-header]').contains(clickTarget); var shouldClose = !isOfSelf && isOpen && !isToggleBtn && !isUnifiedHeader; var flyoutOpen; if (this.element.querySelector(this.options.selectorLeftNavFlyoutMenu)) { var leftnavFlyoutMenu = this.element.querySelector(this.options.selectorLeftNavFlyoutMenu); flyoutOpen = leftnavFlyoutMenu.classList.contains(this.options.classFlyoutDisplayed); } if (isOfSelf && this.element.tagName === 'A') { evt.preventDefault(); } if (shouldClose) { this.closeMenu(); } if (this.element.querySelector(this.options.selectorLeftNavFlyoutMenu)) { if (flyoutOpen && !isOfSelf && isOpen) { this.element.querySelector(this.options.selectorLeftNavFlyoutMenu).classList.remove(this.options.classFlyoutDisplayed); } } } /** * Handles click on a list item that contains a nested list in the left navigation. * It hides all flyout menus and switches the tab-index on the list items based on whether or not the list is expanded. * @param {HTMLElement} listItem The list item that was clicked. */ }, { key: "handleNestedListClick", value: function handleNestedListClick(listItem) { var _this9 = this; var isOpen = listItem.classList.contains(this.options.classExpandedLeftNavListItem); this.hideAllFlyoutMenus(); listItem.classList.toggle(this.options.classExpandedLeftNavListItem, !isOpen); var listItems = toArray(listItem.querySelectorAll(this.options.selectorLeftNavNestedListItem)); listItems.forEach(function (item) { if (isOpen) { listItem.querySelector(_this9.options.selectorLeftNavNestedList).setAttribute('aria-hidden', 'true'); // eslint-disable-next-line no-param-reassign item.querySelector(_this9.options.selectorLeftNavListItemLink).tabIndex = -1; } else { listItem.querySelector(_this9.options.selectorLeftNavNestedList).setAttribute('aria-hidden', 'false'); // eslint-disable-next-line no-param-reassign item.querySelector(_this9.options.selectorLeftNavListItemLink).tabIndex = 0; } }); } }, { key: "handleSectionItemClick", value: function handleSectionItemClick(evt, leftNavSections) { var _this10 = this; // Sorry var leftNavSectionItem = (0, _eventMatches.default)(evt, this.options.selectorLeftNavSection); if (leftNavSectionItem) { // currently selected var selectedLeftNavSectionItem = this.element.querySelector(this.options.selectorLeftNavCurrentSection); var selectedLeftNavSectionItemTitle = selectedLeftNavSectionItem.querySelector(this.options.selectorLeftNavCurrentSectionTitle); var selectedLeftNavSectionItemIcon = this.element.querySelector(this.options.selectorLeftNavCurrentSectionIcon); var selectedLeftNavSectionItemUse = selectedLeftNavSectionItemIcon.querySelector('use'); var selectedLeftNavSectionValue = selectedLeftNavSectionItem.dataset.leftNavCurrentSection; // clicked on item var leftNavSectionItemLink = leftNavSectionItem.querySelector(this.options.selectorLeftNavSectionLink); var leftNavSectionItemIcon = leftNavSectionItem.querySelector(this.options.selectorLeftNavSectionIcon); var leftNavSectionItemIconUse = leftNavSectionItemIcon.querySelector('use'); var leftNavSectionValue = leftNavSectionItem.dataset.leftNavSection; if (this.leftNavSectionActive) { return; } this.leftNavSectionActive = true; var newLeftNavSectionItem = document.createElement('li'); newLeftNavSectionItem.setAttribute('data-left-nav-section', selectedLeftNavSectionValue); newLeftNavSectionItem.classList.add(this.options.classNavSection); newLeftNavSectionItem.classList.add("".concat(this.options.classNavSection, "--").concat(selectedLeftNavSectionValue)); var newLeftNavSectionItemAnchor = document.createElement('a'); newLeftNavSectionItemAnchor.setAttribute('href', 'javascript:void(0)'); // eslint-disable-line no-script-url newLeftNavSectionItemAnchor.setAttribute('tabindex', 0); newLeftNavSectionItemAnchor.classList.add(this.options.classNavSectionAnchor); var newLeftNavSectionItemIcon = selectedLeftNavSectionItemIcon.cloneNode(true); // IE11 doesn't support classList on SVG, must revert to className newLeftNavSectionItemIcon.setAttribute('class', this.options.classTaxonomyIcon); newLeftNavSectionItemIcon.removeAttribute('data-left-nav-current-section-icon'); newLeftNavSectionItemIcon.setAttribute('data-left-nav-section-icon', selectedLeftNavSectionValue); var newLeftNavSectionItemLink = document.createElement('span'); newLeftNavSectionItemLink.setAttribute('data-left-nav-section-link', ''); newLeftNavSectionItemLink.classList.add(this.options.classNavSectionLink); newLeftNavSectionItemLink.textContent = selectedLeftNavSectionItemTitle.textContent; this.animateNavSection(leftNavSectionItem); this.animateNavList(leftNavSectionValue); newLeftNavSectionItemAnchor.appendChild(newLeftNavSectionItemIcon); newLeftNavSectionItemAnchor.appendChild(newLeftNavSectionItemLink); newLeftNavSectionItem.appendChild(newLeftNavSectionItemAnchor); leftNavSections.insertBefore(newLeftNavSectionItem, leftNavSections.firstChild); setTimeout(function () { selectedLeftNavSectionItemTitle.textContent = leftNavSectionItemLink.textContent; selectedLeftNavSectionItem.setAttribute('data-left-nav-current-section', leftNavSectionValue); selectedLeftNavSectionItemIcon.setAttribute('data-left-nav-current-section-icon', leftNavSectionValue); selectedLeftNavSectionItemUse.setAttribute('xlink:href', leftNavSectionItemIconUse.getAttribute('xlink:href')); leftNavSectionItem.parentNode.removeChild(leftNavSectionItem); // Cant use .remove() because of IE11 _this10.leftNavSectionActive = false; }, 450); // Wait for nav items to animate } } /** * The component options. * If `options` is specified in the constructor, {@linkcode LeftNav.create .create()}, or {@linkcode LeftNav.init .init()}, * properties in this object are overriden for the instance being create and how {@linkcode LeftNav.init .init()} works. * @member LeftNav.options * @type {Object} * @property {string} selectorInit The CSS selector to find left nav containers. * @property {string} [selectorLeftNav] The data attribute selector for the nav element in the left nav container. * @property {string} [selectorLeftNavList] The data attribute selector for the main ul element in the left nav. * @property {string} [selectorLeftNavNestedList] The data attribute selector for the nested ul elements in the left nav. * @property {string} [selectorLeftNavToggle] * The data attribute selector for the button that will show and hide the left navigation. * @property {string} [selectorLeftNavListItem] The data attribute selector for all list items in the left navigation. * @property {string} [selectorLeftNavNestedListItem] * The data attribute selector for all nested list items in the left navigation. * @property {string} [selectorLeftNavArrowIcon] The data attribute selector for the arrow icons in the left nav. * @property {string} [selectorLeftNavFlyoutMenu] The data attribute selector for the flyout menus in the left nav. * @property {string} [selectorLeftNavFlyoutItem] The data attribute selector for the flyout menu items in the left nav. * @property {string} [selectorLeftNavSection] The data attribute selector for the three sections in the header of the left nav. * @property {string} [selectorLeftNavCurrentPage] * The data attribute selector for the current section title in the left nav header. * @property {string} [selectorLeftNavMainNavHidden] The CSS selector for the hidden main nav. * @property {string} [classActiveLeftNav] The class name for when a left nav is active. * @property {string} [classActiveLeftNavListItem] The class name for when a left nav list item is active. * @property {string} [classExpandedLeftNavListItem] The class name for when a nested list is expanded. * @property {string} [classFlyoutDisplayed] The class name for when a flyout menu is displayed. * @property {string} [classActiveSection] The class name for an active section item in the left nav header. * @property {string} [classItemHasChildren] The class name for when a list item has children. * @property {string} [classTaxonomyIcon] The class name for the taxonomy icon. */ }], [{ key: "options", get: function get() { var prefix = _settings.default.prefix; return { selectorInit: '[data-left-nav-container]', // Data Attribute selectors selectorLeftNav: '[data-left-nav]', selectorLeftNavList: '[data-left-nav-list]', selectorLeftNavNestedList: '[data-left-nav-nested-list]', selectorLeftNavToggleOpen: '[data-left-nav-toggle="open"]', selectorLeftNavToggleClose: '[data-left-nav-toggle="close"]', selectorLeftNavListItem: '[data-left-nav-item]', selectorLeftNavListItemLink: '[data-left-nav-item-link]', selectorLeftNavNestedListItem: '[data-left-nav-nested-item]', selectorLeftNavArrowIcon: '[data-left-nav-icon]', selectorLeftNavFlyoutMenu: '[data-left-nav-flyout]', selectorLeftNavFlyoutItem: '[data-left-nav-flyout-item]', selectorLeftNavSections: '[data-left-nav-sections]', selectorLeftNavSection: '[data-left-nav-section]', selectorLeftNavSectionLink: '[data-left-nav-section-link]', selectorLeftNavSectionIcon: '[data-left-nav-section-icon]', selectorLeftNavCurrentSection: '[data-left-nav-current-section]', selectorLeftNavCurrentSectionTitle: '[data-left-nav-current-section-title]', selectorLeftNavCurrentSectionIcon: '[data-left-nav-current-section-icon]', selectorLeftNavListItemHasChildren: '[data-left-nav-item-with-children]', selectorLeftNavListItemHasFlyout: '[data-left-nav-has-flyout]', selectorLeftNavAllListItems: '[data-left-nav-item], [data-left-nav-nested-item], [data-left-nav-flyout-item]', selectorLeftNavMainNavHidden: ".".concat(prefix, "--left-nav__main-nav--hidden"), // CSS Class Selectors classActiveTrigger: "".concat(prefix, "--left-nav__trigger--active"), classActiveLeftNav: "".concat(prefix, "--left-nav--active"), classActiveLeftNavListItem: "".concat(prefix, "--active-list-item"), classExpandedLeftNavListItem: "".concat(prefix, "--main-nav__parent-item--expanded"), classFlyoutDisplayed: "".concat(prefix, "--nested-list__flyout-menu--displayed"), classItemHasChildren: "".concat(prefix, "--main-nav__parent-item--has-children"), classNavSection: "".concat(prefix, "--left-nav__section"), classNavSectionTransition: "".concat(prefix, "--left-nav__section--transition"), classNavSectionAnchor: "".concat(prefix, "--left-nav__section--anchor"), classNavSectionLink: "".concat(prefix, "--left-nav__section--link"), classNavHeaderTitle: "".concat(prefix, "--left-nav__header--title"), classItemFade: "".concat(prefix, "--main-nav__parent-item--fade"), classItemHidden: "".concat(prefix, "--main-nav__parent-item--hidden"), classListHidden: "".concat(prefix, "--left-nav__main-nav--hidden"), classListTop: "".concat(prefix, "--left-nav__main-nav--top"), classTaxonomyIcon: "".concat(prefix, "--left-nav__section--taxonomy-icon") }; } /** * The map associating DOM element and left navigation instance. * @member LeftNav.components * @type {WeakMap} */ }]); LeftNav.components = new WeakMap(); return LeftNav; }((0, _mixin2.default)(_createComponent.default, _initComponentBySearch.default, _handles.default)); var _default = !_featureFlags.breakingChangesX ? LeftNav : (0, _removedComponent.default)('LeftNav'); _exports.default = _default; });