{"version":3,"file":"umw.tabbuilder.min.js","sources":["umw.tabbuilder.js"],"sourcesContent":["(function ($, _) {\n 'use strict';\n\n const dataAttributes = {\n containerSelector: 'umw-tab-container',\n tabName: 'umw-tab-name',\n tabClass: 'umw-tab-class',\n position: 'umw-tab-position'\n };\n\n const $umwTabsContainers = $('.js-umw-tabs-check-if-empty');\n\n $(function () {\n var selectorsMap = {}, tabContainerMap = {};\n $('[data-' + dataAttributes.containerSelector + ']').each(function () {\n var $content = $(this);\n $content.find('script').remove(); // Clear scripts inside the moving nodes in order to prevent double-executing\n\n var hasContent = $.trim($content.text()).length > 0 || $content.find('iframe').length > 0 || $content.find('img').length > 0;\n if (hasContent) {\n var containerSelector = $content.data(dataAttributes.containerSelector);\n\n var $tabsContainer;\n if (selectorsMap[containerSelector]) {\n $tabsContainer = selectorsMap[containerSelector];\n } else {\n // Multiple elements can be found by a single selector. We can not clone content to every found tabs container because scripts of cloned content will become broken.\n // Therefore, always use the first found element as a single tabs container\n $tabsContainer = selectorsMap[containerSelector] = $(containerSelector).first();\n }\n\n if (!$tabsContainer.length) {\n console.error('[UMW]: Tab builder - Cannot find tabs container by \"' + containerSelector + '\" selector');\n return;\n }\n\n // Get or define unique tab container id attribute\n var tabContUniqueId = $tabsContainer.attr('id');\n if (!tabContUniqueId) {\n $tabsContainer.attr('id', tabContUniqueId = _.uniqueId('tabCont'));\n }\n\n // The same tabs container can be found by different selector. Merge if the same container was already found by different selector\n if (!tabContainerMap[tabContUniqueId]) {\n tabContainerMap[tabContUniqueId] = [];\n }\n\n var tabDetails = {\n $content: $content,\n tabName: _getTabTitle($content),\n position: $content.data(dataAttributes.position),\n containerId: _getTabContainerId($content),\n tabClass: $content.data(dataAttributes.tabClass)\n }\n\n tabContainerMap[tabContUniqueId].push(tabDetails);\n }\n });\n\n if (!_.isEmpty(tabContainerMap)) {\n\n // Check URL for speific parameter \"tab\", to preselect tab at build\n const searchParams = new URLSearchParams(window.location.search);\n let urlPreselectedTabName = null;\n\n for (let param of searchParams) {\n if (param[0] === \"tab\") {\n urlPreselectedTabName = param[1].toLowerCase();\n break;\n }\n }\n\n _.each(tabContainerMap, function (tabDetailsList, containerUniqueId) {\n var $tabsContainer = $('#' + containerUniqueId);\n var hasActiveTabs = false;\n var sourceContainerIds = [];\n var overrideActiveState = false;\n\n var $navTabs = $tabsContainer.find('.nav-tabs');\n if ($navTabs.length > 0) {\n $navTabs.detach();\n\n hasActiveTabs = $navTabs.find('.active').length > 0;\n } else {\n $navTabs = _$createElem('ul', 'nav nav-tabs', { 'role': 'tablist' });\n }\n\n var $tabPanes = $tabsContainer.find('.tab-content');\n if ($tabPanes.length > 0) {\n $tabPanes.detach();\n } else {\n $tabPanes = _$createElem('div', 'tab-content');\n }\n\n var sorted = _.sortBy(tabDetailsList, 'position');\n var grouped = _.groupBy(sorted, 'tabName');\n\n // Add all source containers IDs to array to compare with Url seach param\n if (urlPreselectedTabName) {\n _.each(grouped, function (contentParts) {\n sourceContainerIds.push(contentParts[0].containerId);\n });\n overrideActiveState = _.indexOf(sourceContainerIds, urlPreselectedTabName) > 0 ? true : false;\n }\n\n _.each(grouped, function (contentParts, tabName) {\n var tabId = _.uniqueId(containerUniqueId + '_tab');\n var isActiveTab = !hasActiveTabs && (hasActiveTabs = true); // Set tab as active if there are no active tabs yet\n if (overrideActiveState) { // Override selected tab if selected tab parameter for selected tab passet by URL\n isActiveTab = false;\n if (urlPreselectedTabName === contentParts[0].containerId) {\n isActiveTab = true;\n }\n }\n\n // Nav tab\n if ($(\"body\").hasClass(\"bs5\")) {\n const $tabNavAnchor = _$createElem('button', isActiveTab ? 'nav-link active' : 'nav-link', { 'type': 'button', 'id': tabId + '-tab', 'data-bs-toggle': 'pill', 'data-bs-target': '#' + tabId, 'role': 'tab', 'aria-controls': tabId, 'aria-selected': 'false' }, tabName);\n const liClass = 'nav-item' + (contentParts[0] && contentParts[0].tabClass ? ' ' + contentParts[0].tabClass : '');\n _$createElem('li', liClass, { 'role': 'presentation' }).append($tabNavAnchor).appendTo($navTabs);\n } else {\n const $tabNavAnchor = _$createElem('a', null, { 'href': '#' + tabId, 'aria-controls': tabId, 'role': 'tab', 'data-toggle': 'tab' }, tabName);\n const liClass = ((isActiveTab ? 'active' : '') + (contentParts[0] && contentParts[0].tabClass ? ' ' + contentParts[0].tabClass : '')).trim();\n _$createElem('li', liClass, { 'role': 'presentation' }).append($tabNavAnchor).appendTo($navTabs);\n }\n\n // Tab pane\n const tabClass = 'tab-pane ' + ((isActiveTab ? ' active' : '') + (contentParts[0] && contentParts[0].tabClass ? ' ' + contentParts[0].tabClass : '')).trim();\n var $tabPane = _$createElem('div', tabClass, { 'id': tabId, 'role': 'tabpanel' }).appendTo($tabPanes);\n _.each(contentParts, function (part) {\n // Prepare the content\n part.$content.detach();\n part.$content.removeClass('hidden').show(); // Make the content visible in case it is hidden\n\n part.$content.appendTo($tabPane);\n });\n });\n\n $tabsContainer.append($navTabs, $tabPanes);\n\n $tabsContainer.show();\n });\n } else {\n // Markup trash collector, if empty container exists. \n // In case specific control builds the tabs but can't check content model of related to him controls at the same page, which participates in tab building process. \n $umwTabsContainers.each(function () {\n var $this = $(this);\n if ($this.text().length === 0) $this.remove();\n });\n }\n });\n\n function _$createElem(tag, className, attributes, textContent) {\n var elem = document.createElement(tag);\n\n if (className) {\n elem.className = className;\n }\n\n if (attributes) {\n _.each(attributes, function (attrValue, attrName) {\n elem.setAttribute(attrName, attrValue);\n });\n }\n\n if (textContent) {\n elem.textContent = textContent;\n }\n\n return $(elem);\n }\n\n function _getTabTitle($tabContent) {\n var tabTitle = $tabContent.data(dataAttributes.tabName); // Preferred way\n if (!tabTitle) {\n tabTitle = $tabContent.prevAll('input:hidden.TabTitle').val() ||\n $tabContent.find('.js-tab-name,.Title,.MainTitle').first().text() ||\n _.uniqueId('Tab ');\n }\n\n return tabTitle;\n }\n\n function _getTabContainerId($tabContent) {\n var tabContainerId = $tabContent.attr('id');\n if (tabContainerId) {\n tabContainerId = tabContainerId.toLowerCase();\n }\n return tabContainerId;\n }\n})(jQuery, _);"],"names":["$","_","dataAttributes","containerSelector","tabName","tabClass","position","$umwTabsContainers","_$createElem","tag","className","attributes","textContent","elem","document","createElement","each","attrValue","attrName","setAttribute","selectorsMap","tabContainerMap","tabContUniqueId","tabDetails","$content","this","find","remove","trim","text","length","data","$tabsContainer","first","attr","uniqueId","$tabContent","tabTitle","prevAll","val","containerId","tabContainerId","toLowerCase","push","console","error","isEmpty","$this","param","searchParams","URLSearchParams","window","location","search","let","urlPreselectedTabName","tabDetailsList","containerUniqueId","hasActiveTabs","sourceContainerIds","overrideActiveState","$navTabs","$tabPanes","detach","role","sorted","sortBy","grouped","groupBy","contentParts","indexOf","$tabNavAnchor","tabId","isActiveTab","hasClass","type","id","data-bs-toggle","data-bs-target","aria-controls","aria-selected","append","href","data-toggle","appendTo","$tabPane","part","removeClass","show","jQuery"],"mappings":"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"}