{"version":3,"file":"js/04-configs.js","sources":["js/04-configs.js"],"sourcesContent":["/*******************************************************************************\n * Copyright (c) 2018 IBM Corporation and others.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * IBM Corporation - initial API and implementation\n *******************************************************************************/\n\nvar subSectionClass = \"subsection\";\nvar subHeadingClass = \"subHeading\";\nvar maxIndentLevel = 7;\nvar minIndentLevel = 3;\nvar contentBreadcrumbHeight = 0;\nvar mobileWidth = 767;\nvar ipadWidth = 1024;\n\nfunction addTOCClick() {\n var onclick = function (event) {\n // clean out the breadcrumb so that it cannot be clicked on while loading/repositioning the doc\n $(\".contentStickyBreadcrumbHeader .stickyBreadcrumb\").remove();\n var resource = $(event.currentTarget);\n setSelectedTOC(resource, false);\n var currentHref = resource.attr(\"href\");\n\n if (isMobileView() || isIPadView()) {\n $('.nav-container .nav-panel-menu').removeClass('is-active'); // Hide the nav menu\n $('footer').hide();\n }\n\n if (currentHref.indexOf(\"#\") === -1) {\n // loading initial content\n // - update main breadcrumb \n // Note: content breadcrumb not visible with initial loading\n updateTitle(resource.text());\n } else {\n // positioning to one of the 2nd level subtitiles\n // - enable content breadcrumb\n // - scroll to the 2nd level subtitle\n handleContentBreadcrumbVisibility(true);\n }\n updateHashInUrl(currentHref);\n createClickableBreadcrumb(getContentBreadcrumbTitle(), true);\n };\n\n $(\".nav-container .nav-panel-menu a\").off(\"click\").on(\"click\", onclick);\n\n $(\".nav-container .nav-panel-menu a\").off('keypress').on('keypress', function (event) {\n event.stopPropagation();\n // Space key\n if (event.which === 13 || event.keyCode === 13 || event.which === 32 || event.keyCode === 32) {\n $(this).trigger('click');\n }\n });\n}\n\n// Add css to selected TOC. If scrollTo is specified, scroll the TOC element into viewport.\nfunction setSelectedTOC(resource, scrollTo) {\n var currentTOCSelected = $(\".nav-menu .toc_sub_selected.is-current-page\");\n var newHref = resource.attr(\"href\");\n \n if(newHref){\n if (currentTOCSelected.length === 1) {\n var href = currentTOCSelected.find(\"a\").attr(\"href\");\n if (href.indexOf(\"#\") !== -1) {\n href = href.substring(0, href.indexOf(\"#\"));\n }\n // remove all hash href created based on the content if a different TOC element is clicked\n if (newHref.indexOf(href) === -1) {\n removeHashRefTOC(href);\n }\n currentTOCSelected.removeClass(\"is-current-page\");\n if (currentTOCSelected.hasClass(\"toc_main_selected\")) {\n currentTOCSelected.removeClass(\"toc_main_selected\");\n } else if (currentTOCSelected.hasClass(\"toc_sub_selected\")) {\n currentTOCSelected.removeClass(\"toc_sub_selected\");\n }\n }\n $('.is-current-page').removeClass('is-current-page');\n resource.parent().addClass(\"is-current-page\");\n if (newHref.indexOf(\"#\") === -1) {\n resource.parent().addClass(\"toc_main_selected\");\n } else {\n resource.parent().addClass(\"toc_sub_selected\");\n }\n }\n}\n\n// Remove the 2nd level subtitles from TOC\nfunction removeHashRefTOC(href) {\n var hashHref = $(\".nav-container .nav-panel-menu\").find(\"a[href^='\" + href + \"#']\");\n $(hashHref).each(function () {\n $(this).parent().remove();\n });\n}\n\n// Update title in browser tab to show current page\nfunction updateTitle(currentPage) {\n $(\"title\").text(currentPage + \" - Server Config - Open Liberty\");\n}\n\n// History: \n// From what we can recall from memory, the reason why we have this method is because\n// in smaller resolutions, for some reason, we need to animate the scroll to allow\n// a delay for the scrollTop to work. In large resolutions, the animation scroll is\n// is not needed.\n// Method:\nfunction scrollToPos(pos) {\n return;\n if (isMobileView()) {\n // $(\"#background_container\").css('height', iframeContents.height() + \"px\");\n $('html, body').animate({\n scrollTop: pos\n }, 400);\n $('footer').show();\n } else {\n $('html, body').animate({\n scrollTop: pos\n }, 400);\n }\n}\n\n// Handle history event involving expand/collapse toggle button\nfunction handleExpandCollapseState(titleId, isExpand) {\n var hrefElement = $(\"article.doc\").find('a[id=\"' + titleId + '\"]');\n if (hrefElement.length === 1) {\n if (!hrefElement.is(\":visible\")) {\n // make its parent(s) visible\n var titleSplits = titleId.split(\"/\");\n var parentTitleId = titleSplits[0];\n for (var i = 1; i < titleSplits.length - 1; i++) {\n parentTitleId += \"/\" + titleSplits[i];\n var parentToggleButton = $(\"article.doc\").find(\"a[id='\" + parentTitleId + \"']\").parent().find(\".toggle\");\n if (parentToggleButton.attr(\"collapsed\") === \"true\") {\n handleExpandCollapseToggleButton(parentToggleButton, false);\n }\n }\n }\n var toggleButton = $(\"article.doc\").find(\"a[id='\" + titleId + \"']\").parent().find(\".toggle\");\n if ((isExpand === true && (toggleButton.attr(\"collapsed\") === \"true\")) ||\n (isExpand === false && (toggleButton.attr(\"collapsed\") === \"false\"))) {\n handleExpandCollapseToggleButton(toggleButton, false);\n }\n }\n}\n\n// Add a browser history event with pushState. The event is to be used by the window.onpopstate to handle\n// the forward and backward history events.\n// The state contains two pieces of info: \n// href: the content url including hash to point to the nested title\n// expand: use only if the event is triggered by the toggle button to expand/collapse the content\nfunction updateHashInUrl(href, isExpand) {\n var hashInUrl = href;\n if (href.indexOf(\"/config/\") !== -1) {\n hashInUrl = href.substring(17);\n }\n // a null is used by mobile for the TOC page\n var state = null;\n if (href !== \"\") {\n state = { href: href };\n }\n if (isExpand !== undefined) {\n if (isExpand) {\n hashInUrl += \"&expand=true\";\n state.expand = true;\n } else {\n hashInUrl += \"&expand=false\";\n state.expand = false;\n }\n }\n window.history.pushState(state, null, '#' + hashInUrl);\n}\n\n/// Modify the flat hierachary of the content to include nested levels with expand/collapse button\nfunction handleSubHeadingsInContent() {\n var contentTitle = getContentBreadcrumbTitle();\n var anchors = $(\"article.doc div.paragraph > p > a\");\n var deferAddingExpandAndCollapseToggleButton = [];\n\n if (anchors.length === 0) {\n addAnchorToSubHeadings();\n anchors = $(\"article.doc div.paragraph > p > a\");\n }\n\n // in reverse order so that we can hide all the nested headings\n $($(anchors).get().reverse()).each(function () {\n var subHeading = $(this).parent();\n var anchorTitle = modifySubHeading(subHeading, contentTitle);\n var table = getTableForSubHeading(subHeading);\n var anchorTitleId = $(this).attr(\"id\");\n var indentLevels = calcIndentAndAddClass(subHeading, anchorTitle, table, anchorTitleId);\n\n if (indentLevels >= minIndentLevel) {\n if (table) {\n addExpandAndCollapseToggleButtons(subHeading, anchorTitleId);\n } else {\n deferAddingExpandAndCollapseToggleButton.push({ heading: subHeading, anchorTitleId: anchorTitleId });\n }\n }\n });\n\n handleDeferredExpandCollapseElements(deferAddingExpandAndCollapseToggleButton);\n}\n\nfunction addAnchorToSubHeadings() {\n var subHeadings = $(\"article.doc > div.paragraph > p > strong\");\n $($(subHeadings)).each(function() {\n var parent = $(this).parent();\n var id = parent.text().replace(/ > /g, \"/\");\n var anchorElement = $('<a id=\"' + id + '\"></a>');\n parent.prepend(anchorElement);\n });\n}\n\n// Extract the first part of the content title as the breadcrumb title\nfunction getContentBreadcrumbTitle() {\n var title = $('article.doc h1.page').text();\n var parsedTitle = getTitle(title);\n return parsedTitle;\n}\n\nfunction getTitle(title) {\n var retTitle = title;\n var openParamIndex = title.indexOf(\"(\");\n var closeParamIndex = title.indexOf(\")\");\n if (openParamIndex !== -1 & closeParamIndex != -1) {\n retTitle = title.substring(openParamIndex + 1, closeParamIndex);\n }\n return retTitle.trim();\n}\n\n// remove strong from the last heading\nfunction modifySubHeading(subHeadingElement, contentTitle) {\n var strong = subHeadingElement.find(\"strong\");\n var anchorTitle;\n if (strong.length > 0) {\n anchorTitle = strong.text();\n } else {\n anchorTitle = subHeadingElement.text();\n }\n if (anchorTitle !== undefined) {\n var title = contentTitle + \" > \" + anchorTitle;\n var lastIndex = title.lastIndexOf(\">\");\n if (lastIndex !== -1) {\n var titleStrong = title.substring(0, lastIndex + 1);\n var titlePlain = title.substring(lastIndex + 1);\n strong.remove();\n subHeadingElement.append(\"<strong>\" + titleStrong + \"</strong>\" + titlePlain);\n }\n\n // fix incomplete tag id cuz of colon\n if (title.indexOf(\".\") !== -1) {\n var titleId = title.replace(/ > /g, \"/\");\n subHeadingElement.find(\"a\").attr(\"id\", titleId);\n }\n }\n return title;\n}\n\n// get the table belonging to the subheading\nfunction getTableForSubHeading(subHeadingElement) {\n var next = subHeadingElement.parent().next();\n while ((next.length === 1) && !next.is(\"table\") && (next.find(\"p > a\").length === 0)) {\n next = next.next();\n }\n if (next.is(\"table\")) {\n return next;\n } else {\n return undefined;\n }\n}\n\n// calculate the heading indentation\nfunction calcIndentAndAddClass(subHeadingElement, title, table, dataId) {\n var levels;\n if (title) {\n var splits = title.split(\">\");\n levels = splits.length;\n if (levels > maxIndentLevel) {\n levels = maxIndentLevel;\n }\n var marginLeft;\n if (levels > minIndentLevel) {\n marginLeft = (levels - minIndentLevel) * 49 + 69;\n }\n\n subHeadingElement.addClass(subHeadingClass);\n if (levels >= minIndentLevel) {\n subHeadingElement.addClass(subSectionClass);\n setDataId(subHeadingElement, dataId);\n if (marginLeft !== undefined) {\n subHeadingElement.css(\"margin-left\", marginLeft + \"px\");\n }\n // add subsection class + extra left margin indentation\n var next = subHeadingElement.parent().next();\n while ((next.length === 1) && !next.is(\"table\") && (next.find(\"p > a\").length === 0)) {\n next.addClass(subSectionClass);\n setDataId(next, dataId);\n if (marginLeft !== undefined) {\n next.css(\"margin-left\", marginLeft + \"px\");\n }\n next = next.next();\n }\n if (table) {\n table.addClass(subSectionClass);\n setDataId(table, dataId);\n var width = parseInt(table.css(\"width\").replace(\"px\", \"\"));\n if (marginLeft !== undefined) {\n table.css(\"margin-left\", marginLeft - 10 + \"px\");\n var marginValue = marginLeft - 10;\n table.css(\"width\", \"calc(100% + 20px - \" + marginLeft + \"px - 10px)\");\n } else {\n table.css(\"width\", \"calc(100% + 20px - 59px)\");\n }\n }\n }\n }\n return levels;\n}\n\nfunction setDataId(element, dataId) {\n element.attr(\"data-id\", dataId);\n}\n\nfunction getDataId(element) {\n return element.attr(\"data-id\");\n}\n\nfunction addExpandAndCollapseToggleButtons(subHeading, titleId) {\n var toggleButton = $('<div class=\"toggle\" collapsed=\"true\" tabindex=0><img src=\"/img/all_guides_plus.svg\" alt=\"Expand\" aria-label=\"Expand\" /></div>');\n handleExpandCollapseTitle(titleId, false);\n toggleButton.on('click', function () {\n handleExpandCollapseToggleButton($(this), true);\n });\n toggleButton.on('keypress', function (event) {\n event.stopPropagation();\n // Enter or space key\n if (event.which === 13 || event.keyCode === 13 || event.which === 32 || event.keyCode === 32) {\n toggleButton.trigger('click');\n }\n });\n\n // listen for focus causing by tab. not mouse\n var mousedown = false;\n toggleButton.on('mousedown', function() {\n mousedown = true;\n });\n toggleButton.on('focus', function() {\n mousedown = false;\n });\n\n subHeading.prepend(toggleButton);\n}\n\nfunction handleExpandCollapseToggleButton(buttonElement, updateUrl) {\n var collapsed = buttonElement.attr('collapsed');\n var titleId = getDataId(buttonElement.parent());\n if (collapsed === \"true\") {\n // Expand to show the table and nested elements\n buttonElement.empty().append($('<img src=\"/img/all_guides_minus.svg\" alt=\"Collapse\" aria-label=\"Collapse\"/>'));\n buttonElement.attr('collapsed', false);\n // this call needs to be done after collapsed is set to false\n handleExpandCollapseTitle(titleId, true);\n } else {\n // Collapse the table and nested elements\n handleExpandCollapseTitle(titleId, false);\n buttonElement.empty().append($('<img src=\"/img/all_guides_plus.svg\" alt=\"Expand\" aria-label=\"Expand\"/>'));\n buttonElement.attr('collapsed', true);\n }\n if (updateUrl) {\n var href = getSelectedDocHtml() + \"#\";\n updateHashInUrl(href + titleId, true);\n }\n}\n\nfunction handleExpandCollapseTitle(titleId, isShow) {\n var content = $('article.doc');\n var matchingElements = content.find('[data-id^=\"' + titleId + '\"]');\n var hideElements = [];\n $(matchingElements).each(function () {\n var dataId = getDataId($(this));\n if (isShow) {\n // don't show already collapsed element\n var toggleButton = $(this).find(\".toggle\");\n if (toggleButton.length === 1) {\n if (toggleButton.attr(\"collapsed\") === \"true\") {\n var elements = content.find(\"[data-id^='\" + dataId + \"']\");\n $(elements).each(function () {\n var nestedDataId = getDataId($(this));\n if ((nestedDataId === dataId && $(this).is(\"table\")) ||\n /* detect id with same string + more such as http-method-omission when matching http-method */\n (nestedDataId !== dataId && (nestedDataId.indexOf(dataId + \"/\") === 0))) {\n hideElements.push($(this));\n }\n })\n }\n }\n\n if (dataId === titleId && $(this).is(\"div\") && $(this).hasClass(\"collapseMargin\")) {\n $(this).removeClass(\"collapseMargin\");\n }\n $(this).show();\n } else {\n // don't hide the clicked toggle element title and description\n if ((dataId === titleId && $(this).is(\"table\")) || (dataId !== titleId && (dataId.indexOf(titleId + \"/\") === 0))) {\n $(this).hide();\n } else if (dataId === titleId && $(this).is(\"div\")) {\n $(this).addClass(\"collapseMargin\");\n }\n }\n });\n $(hideElements).each(function () {\n $(this).hide();\n })\n if (!isMobileView()) {\n content.trigger(\"scroll\"); // trigger a scroll event to update the breadcrumb\n }\n}\n\nfunction handleDeferredExpandCollapseElements(deferredElements) {\n $(deferredElements).each(function () {\n var subHeading = $(this).attr(\"heading\");\n var titleId = $(this).attr(\"anchorTitleId\");\n var matchingElements = $('article.doc').find('[data-id^=\"' + titleId + '\"]');\n $(matchingElements).each(function () {\n var dataId = getDataId($(this));\n if (dataId !== titleId && (dataId.indexOf(titleId + \"/\") === 0)) {\n addExpandAndCollapseToggleButtons(subHeading, titleId);\n return false;\n }\n });\n });\n}\n\n// change the evenly divided fixed cell width (25%)\nfunction modifyFixedTableColumnWidth() {\n var article = $('article.doc');\n var colgroups = article.find(\"colgroup\");\n var colWidths = [];\n if (!isMobileView()) {\n colWidths[4] = [\"25%\", \"15%\", \"15%\", \"45%\"];\n // } else {\n // colWidths[4] = [\"25%\", \"25%\", \"15%\", \"35%\"];\n }\n $(colgroups).each(function () {\n if (isMobileView()) {\n $(this).remove();\n } else {\n var cols = $(this).find(\"col\");\n var currentColWidths = colWidths[cols.length];\n if (currentColWidths) {\n $(cols).each(function (index) {\n $(this).css(\"width\", currentColWidths[index]);\n })\n }\n }\n })\n}\n\n// Find the table of content element for the content. If processHash is specified, return\n// the TOC sub element corresponding to the hash. If there is no TOC sub element for it\n// (as in the case of the hash populated by clicking on the content breadcrumb), return undefined.\nfunction findTOCElement(processHash) {\n // Remove the path and version from the url\n var configIndex = location.href.indexOf('/config/');\n var href = location.href.substring(configIndex + 8);\n var slashIndex = href.indexOf('/');\n href = href.substring(slashIndex + 1); // Remove Antora version from href\n var hashIndex = href.indexOf('#');\n if(hashIndex !== -1){\n var hash = href.substring(hashIndex);\n href = href.substring(0, hashIndex);\n } \n\n var matchingTOCElement;\n if (!processHash) {\n matchingTOCElement = $(\".nav-container .nav-panel-menu a[href='\" + href + \"']\");\n } else {\n if (hash !== undefined && hash !== \"\") {\n href = href + hash;\n matchingTOCElement = $(\".nav-container .nav-panel-menu a[href='\" + href + \"']\");\n if (matchingTOCElement.length === 0) {\n matchingTOCElement = undefined;\n }\n }\n }\n return matchingTOCElement;\n}\n\n// add the second level headings to the TOC\nfunction handleSubHeadingsInTOC(TOCElement) {\n var href = getSelectedDocHtml();\n removeHashRefTOC(href); \n\n var anchors = $(\"article.doc > div.paragraph > p > a\");\n var anchorLI = TOCElement.parent();\n var depth = anchorLI.data('depth') + 1; // Get the data-depth of the parent to add to the subchildren\n var anchorHref = TOCElement.attr(\"href\");\n var ul = $(\"<ul class='nav-list'></ul>\");\n anchorLI.append(ul);\n $(anchors).each(function () {\n var subHeading = $(this).parent();\n if (subHeading.hasClass(\"subsection\") === false) {\n var anchorTitleId = $(this).attr(\"id\");\n var anchorTitleText = subHeading.text();\n var anchorTitleTextIndex = anchorTitleText.lastIndexOf(\" > \");\n if (anchorTitleTextIndex !== -1) {\n anchorTitleText = anchorTitleText.substring(anchorTitleTextIndex + 3);\n }\n var tocLI = $('<li class=\"nav-item\" data-depth=\"' + depth + '\"><a href=\"' + anchorHref + '#' + anchorTitleId + '\">' + anchorTitleText + '</a></li>'); \n ul.append(tocLI);\n }\n });\n addTOCClick();\n}\n\nfunction getSelectedDocHtml() {\n var currentTOCSelected = $(\".is-current-page > a\");\n var href = \"\";\n if (currentTOCSelected.length === 1) {\n href = currentTOCSelected.attr(\"href\");\n if (href.indexOf(\"#\") !== -1) {\n href = href.substring(0, href.indexOf(\"#\"));\n }\n }\n return href;\n}\n\nfunction handleContentScrolling() {\n if (!isMobileView()) {\n var article = $('article.doc');\n var lastViewPos = -99999;\n \n var onContentScroll = function () {\n // determine whether it is scrolling up or down\n var scrollDown = false;\n var currentScrollTop = $(this).scrollTop();\n if (lastViewPos < currentScrollTop) {\n scrollDown = true;\n }\n\n lastViewPos = currentScrollTop;\n var breadcrumbVisible = $('.contentStickyBreadcrumbHeader').is(':visible');\n\n if(article.find('.page').text() == \"Server configuration overview\") {\n // No top breadcrumb bar for overview pages,\n // therefore skip all the breadcrumb handling code\n return;\n }\n\n // content breadcrumb only appears after content title and its first table are out of view\n var initialContentInView = isInitialContentInView(lastViewPos);\n if (breadcrumbVisible && !scrollDown) {\n // breadcrumb is visible and a scrolling up case, check whether initial content is back in view to\n // determine whether breadcrumb stays visible or not\n if (initialContentInView) {\n breadcrumbVisible = false;\n handleContentBreadcrumbVisibility(false);\n }\n } else if (!breadcrumbVisible && scrollDown) {\n // breadcrumb is not visible and a scrolling down case, check whether initial content is out of view to\n // determine whether breadcrumb switches to visible\n if (!initialContentInView) {\n breadcrumbVisible = true;\n handleContentBreadcrumbVisibility(true);\n }\n }\n if (breadcrumbVisible) {\n // go through subheadings to determine the content of breadcrumb\n var anchors = article.find(\"div.paragraph > p > a\");\n var closestAnchor = {};\n $(anchors).each(function () {\n if ($(this).parent().is(\":visible\") && isInViewport($(this), closestAnchor)) {\n return false;\n }\n });\n\n if (closestAnchor.element && !closestAnchor.inView) {\n var title = closestAnchor.element.parent().text();\n createClickableBreadcrumb(title, true);\n } else {\n createClickableBreadcrumb(getContentBreadcrumbTitle(), true);\n }\n }\n };\n\n $(window.parent.document).off('scroll').on('scroll', onContentScroll);\n }\n}\n\nfunction isInitialContentInView(currentViewPos) {\n var inViewPort = true;\n var article = $('article.doc');\n \n // look for the last element for the initial content\n var firstSubheadingElement = article.find(\"div.paragraph > p > a\").first();\n if (firstSubheadingElement.length === 1) {\n var lastInitialContentElement = firstSubheadingElement.parent().parent().prev();\n var lastInitialContentElementRect = lastInitialContentElement[0].getBoundingClientRect();\n var breadcrumbHeight = 0;\n if ($(\".contentStickyBreadcrumbHeader\").is(':visible')) {\n breadcrumbHeight = $(\".contentStickyBreadcrumbHeader\").outerHeight();\n }\n if (lastInitialContentElementRect.top + lastInitialContentElementRect.height - breadcrumbHeight < currentViewPos) {\n inViewPort = false;\n }\n }\n\n return inViewPort;\n}\n\nfunction isInViewport(anchorElement, closestAnchor) {\n var element = anchorElement.parent();\n var elementTop = element[0].getBoundingClientRect().top;\n // factor in the fixed header height including the main header if the parent scrollbar is scrolled to the \n // bottom to reveal the footer\n var headerHeight = contentBreadcrumbHeight + 101; // Nav height is 101 but we can't calculate it.\n\n // timing problem that the height could be overriden and be 1. Stepping thru debugger won't have the problem.\n //var contentBreadcrumbHeight = $(\".contentStickyBreadcrumbHeader\").outerHeight();\n\n var contentTop = elementTop - headerHeight;\n var contentBottom = contentTop + parseInt(element.css(\"height\"));\n var viewportHeight = document.documentElement.clientHeight;\n var contentHeight = viewportHeight - headerHeight;\n if ((contentTop >= 0 || contentBottom > 0) && contentBottom <= contentHeight) {\n // element is not covered by the breadcrumb and is in the viewport - we're done\n // if the next element is the second level subheading and is near the top of the viewport,\n // return it to be used as the breadcrumb\n if (element.text().split(\">\").length === 2 && contentTop < 50) {\n closestAnchor.top = contentTop;\n closestAnchor.element = element;\n closestAnchor.inView = true;\n }\n return true;\n } else if (contentTop > 0) {\n // for case when there is no subheading shown in the viewport and no need to go thru the rest of the subheadings once\n // a subheading is found out of viewport\n return true;\n } else if (contentTop < 0) {\n // element is covered by breadcrumb\n closestAnchor.top = contentTop;\n closestAnchor.element = element;\n closestAnchor.inView = false;\n return false;\n } else {\n // should not be here\n return false;\n }\n}\n\nfunction createClickableBreadcrumb(breadcrumbText, highlightLastItem) {\n if (!isMobileView() && !isIPadView()) {\n $('.contentStickyBreadcrumbHeader .stickyBreadcrumb').remove();\n // hide it for now until the font size is determined\n $(\".contentStickyBreadcrumbHeader\").append(\"<div class='stickyBreadcrumb'/>\");\n $('.contentStickyBreadcrumbHeader .stickyBreadcrumb').hide();\n if (breadcrumbText.length > 0) {\n var breadcrumbTextSplits = breadcrumbText.split(\" > \");\n var href = getSelectedDocHtml();\n var stickyHeaderBreadcrumb = \"\";\n for (var i = 0; i < breadcrumbTextSplits.length; i++) {\n if (i === 1) {\n href = href + \"#\";\n }\n if (i > 1) {\n href = href + \"/\";\n }\n if (i > 0) {\n href = href + breadcrumbTextSplits[i];\n stickyHeaderBreadcrumb = stickyHeaderBreadcrumb + \" > \";\n }\n\n if (highlightLastItem && (i === breadcrumbTextSplits.length - 1)) {\n stickyHeaderBreadcrumb = stickyHeaderBreadcrumb + \"<a class='lastParentItem'>\" + breadcrumbTextSplits[i] + \"</a>\";\n } else {\n stickyHeaderBreadcrumb = stickyHeaderBreadcrumb + \"<a href='\" + href + \"'>\" + breadcrumbTextSplits[i] + \"</a>\";\n }\n }\n $(\".contentStickyBreadcrumbHeader .stickyBreadcrumb\").append(stickyHeaderBreadcrumb);\n\n // adjust the breadcrumb font if its width is larger than the page width\n var paddingWidth = parseInt($(\".contentStickyBreadcrumbHeader\").css(\"padding-left\")) +\n parseInt($(\".contentStickyBreadcrumbHeader\").css(\"padding-right\"));\n var breadcrumbWidth = $(\".contentStickyBreadcrumbHeader .stickyBreadcrumb\").width() + paddingWidth;\n var contentWindowWidth = $('article.doc').width();\n var fontSize = 32;\n while (breadcrumbWidth > contentWindowWidth && fontSize > 0) {\n $(\".contentStickyBreadcrumbHeader .stickyBreadcrumb\").css(\"font-size\", fontSize + \"px\");\n breadcrumbWidth = $(\".contentStickyBreadcrumbHeader .stickyBreadcrumb\").width() + paddingWidth;\n fontSize = fontSize - 2;\n }\n if(window.location.href.includes(\"server-configuration-overview.html\")){\n $(\".contentStickyBreadcrumbHeader\").hide();\n }\n else{\n $(\".contentStickyBreadcrumbHeader .stickyBreadcrumb\").show();\n }\n\n addContentBreadcrumbClick();\n }\n }\n}\n\nfunction addContentBreadcrumbClick() {\n // listen to breadcrumb element that has a href in it\n $(\".stickyBreadcrumb a[href]\").off(\"click\").on(\"click\", function (event) {\n event.preventDefault();\n var href = $(event.currentTarget).attr(\"href\");\n updateHashInUrl(href);\n\n // Find anchor and jump to it\n var scrollTop = 0;\n var hashIndex = href.indexOf('#');\n var hash = href.substring(hashIndex + 1); \n var anchor = $('article.doc').find(\"div.paragraph > p > a[id='\" + hash + \"']\");\n if(anchor.length == 1){\n scrollTop = anchor.offset().top;\n } \n $('html,body').animate({scrollTop: scrollTop - 101}, 500); \n });\n}\n\n// When the parent window scrolls, it affects the viewport of the content. Hence needs to adjust\n// the content breadcrumb.\nfunction handleParentWindowScrolling() {\n if (!isMobileView() && !isIPadView()) {\n $(window.parent.document).on('scroll', function (e) {\n var breadcrumbVisible = $('.contentStickyBreadcrumbHeader').is(':visible');\n // for parent window scrolling, need to adjust breadcrumb only when content breadcrumb is visible\n if (breadcrumbVisible) {\n // go through subheadings to determine the content of breadcrumb\n var article = $('article.doc');\n var anchors = article.find(\"div.paragraph > p > a\");\n var closestAnchor = {};\n $(anchors).each(function () {\n if ($(this).parent().is(\":visible\") && isInViewport($(this), closestAnchor)) {\n return false;\n }\n });\n\n if (closestAnchor.element && !closestAnchor.inView) {\n // normal scrolling elements\n var title = closestAnchor.element.parent().text();\n createClickableBreadcrumb(title, true);\n } else {\n // scrolling when the previous 2nd level title and its nested titles are all\n // scrolled passed the viewport and the next 2nd level title comes in view\n createClickableBreadcrumb(getContentBreadcrumbTitle(), true);\n }\n }\n })\n }\n}\n\n// If the doc content is in focus by means of other than a mouse click, then goto the top of the \n// doc.\nfunction addConfigContentFocusListener() {\n var mousedown = false;\n $(\"#config_content\").on('mousedown', function(event) {\n mousedown = true;\n });\n $('#config_content').on(\"focusin\", function(e) {\n if (!mousedown) {\n scrollToPos(0);\n }\n mousedown = false;\n });\n}\n\n// Handle content loading based on the url\nfunction handleInitialContent() {\n var url = window.location.href;\n var index = url.indexOf('/reference/config/');\n var configName = url.substring(index + 18).replace(\".html\", \"\");\n if(configName === \"serverConfiguration\") {\n updateTitle(\"OVERVIEW\");\n } else {\n updateTitle(configName);\n } \n}\n\nfunction handlePopstate() {\n window.onpopstate = function (event) {\n if (event.state) {\n var popstateHrefPathname = event.state.href;\n if (event.state.href.indexOf(\"#\") !== -1) {\n popstateHrefPathname = event.state.href.substring(0, event.state.href.indexOf(\"#\"));\n }\n\n if (location.pathname === popstateHrefPathname) {\n // if content document is already loaded, \n // - expand/collapse the subheading if the expand property is set\n // - scroll to the matching heading\n if (event.state.expand !== undefined && event.state.href.indexOf(\"#\") !== -1) {\n var titleId = event.state.href.substring(event.state.href.indexOf('#') + 1);\n handleExpandCollapseState(titleId, event.state.expand);\n }\n if (event.state.href.indexOf(\"#\") !== -1) {\n handleContentBreadcrumbVisibility(true);\n } else {\n handleContentBreadcrumbVisibility(false);\n }\n\n // select TOC\n var TOCSubElement = $(\".nav-container .nav-panel-menu\").find(\"a[href='\" + event.state.href + \"']\");\n if (TOCSubElement.length === 1) {\n setSelectedTOC(TOCSubElement, true);\n }\n }\n }\n }\n}\n\n// Determine the content breadcrumb visibility:\n// - content breadcrumb not display in initial content\n// - once the overview of the content is scrolled thru, display the content breadcrumb right before the\n// first 2nd subtitle is scrolled into.\nfunction initialContentBreadcrumbVisibility() {\n if (!isMobileView() && !isIPadView()) {\n // save the content breadcrumb height to be used later as the height could be 1 during the transition \n // to display it in isInViewPort function\n contentBreadcrumbHeight = $(\".contentStickyBreadcrumbHeader\").outerHeight();\n var href = location.href;\n var hashPos = href.indexOf(\"#\");\n // no breadcrumb when there is no hash or a trailing # \n if (hashPos === -1 || hashPos === href.length - 1) {\n handleContentBreadcrumbVisibility(false);\n } else {\n handleContentBreadcrumbVisibility(true);\n }\n }\n}\n\n// Enable/disable content breadcrumb visibility\nfunction handleContentBreadcrumbVisibility(isShow) {\n if (!isMobileView() && !isIPadView()) {\n if (isShow && !$('.contentStickyBreadcrumbHeader').is(\":visible\")) {\n // with scrolling listener not on the content anymore, disable scrolling listener until animation is done\n $(window.parent.document).off('scroll');\n $('.contentStickyBreadcrumbHeader').slideDown(500, function() {\n handleContentScrolling();\n });\n } else if (!isShow && $('.contentStickyBreadcrumbHeader').is(\":visible\")) {\n // with scrolling listener not on the content anymore, disable scrolling listener until animation is done\n $(window.parent.document).off('scroll')\n $('.contentStickyBreadcrumbHeader').slideUp(500, function() {\n handleContentScrolling();\n });\n }\n }\n}\n\nfunction isMobileView() {\n if ($(window).width() <= mobileWidth) {\n return true;\n } else {\n return false;\n }\n}\n\nfunction isIPadView() {\n if ($(window).width() <= ipadWidth && $(window).width() > mobileWidth) {\n return true;\n } else {\n return false;\n }\n}\n\n// function updateHashAfterRedirect() {\n// var hashValue = window.location.hash;\n// var href = \"\";\n// if (hashValue !== \"\" && hashValue.indexOf(\"#rwlp_config_\") !== -1) {\n// hashValue = hashValue.substring(\"#rwlp_config_\".length);\n// //hashValue = hashValue.substring(1);\n// if (hashValue.indexOf(\"&\") !== -1) {\n// href = \"/docs/ref/config/\" + hashValue.substring(0, hashValue.indexOf(\"&\"));\n// } else {\n// href = \"/docs/ref/config/\" + hashValue;\n// }\n \n// if (location.pathname + location.hash === href) {\n// replaceHistoryState('#' + hashValue);\n// }\n// }\n// }\n\nfunction replaceHistoryState(hashToReplace) {\n var fullHref = \"/docs/ref/config/\" + hashToReplace.substring(1);\n var isExpand = undefined;\n if (fullHref.indexOf(\"&\") !== -1) {\n fullHref = fullHref.substring(0, fullHref.indexOf(\"&\"));\n if (hashToReplace.indexOf(\"&expand=true\") !== -1) {\n isExpand = true;\n } else if (hashToReplace.indexOf(\"&expand=false\") !== -1) {\n isExpand = false;\n }\n }\n var state = { href: fullHref };\n if (isExpand !== undefined) {\n state.expand = isExpand;\n }\n window.history.replaceState(state, null, hashToReplace);\n return fullHref;\n}\n\n// This function was written for the Server Configuration overview pages only.\n// When we have a page that has an anchor that references another section in the same page,\n// the browser scrolls that section, on the same page, into view.\n// When the scrolling occurs, the whole page was being scrolled \"under\" our top navigation bar.\n// rather than the whole page\nfunction addOverviewPageClickAndScroll() {\n var article = $('article.doc');\n var allHashAnchorsInOverviewPages = 'div[id=\"overview_content\"] a[href^=\"#\"]';\n var overviewAnchors = article.find(allHashAnchorsInOverviewPages);\n overviewAnchors.on(\"click\",function (event) {\n event.preventDefault();\n var hash = this.hash;\n var target = article.find(hash);\n var newTop = target.offset().top;\n scrollToPos(newTop);\n });\n}\n\n$(document).ready(function () {\n addTOCClick();\n addConfigContentFocusListener();\n handleInitialContent();\n handlePopstate();\n addOverviewPageClickAndScroll();\n initialContentBreadcrumbVisibility();\n modifyFixedTableColumnWidth();\n handleSubHeadingsInContent();\n var TOCElement = findTOCElement();\n handleSubHeadingsInTOC(TOCElement); // this adds the sub elements to li so check here for the hash usage\n var TOCSubElement = findTOCElement(true);\n if (TOCSubElement) {\n setSelectedTOC(TOCSubElement, true);\n } else if (TOCElement) {\n setSelectedTOC(TOCElement, true);\n }\n createClickableBreadcrumb(getContentBreadcrumbTitle(), true);\n\n if (!isMobileView() && !isIPadView()) { \n handleContentScrolling();\n } \n\n if (window.location.hash !== \"\" && window.location.hash !== undefined &&\n window.location.hash.indexOf(\"&expand=\") !== -1) {\n var isExpand;\n if (window.location.hash.indexOf(\"&expand=true\") !== -1) {\n isExpand = true;\n } else if (window.location.hash.indexOf(\"&expand=false\") !== -1) {\n isExpand = false;\n }\n var hash = window.location.hash.substring(1);\n if (hash.indexOf(\"#\") !== -1) {\n var titleId = hash.substring(hash.indexOf('#') + 1, hash.indexOf(\"&\"));\n handleExpandCollapseState(titleId, isExpand);\n }\n }\n\n // update hash if it is redirect\n // updateHashAfterRedirect();\n});"],"names":["subSectionClass","subHeadingClass","maxIndentLevel","minIndentLevel","contentBreadcrumbHeight","mobileWidth","ipadWidth","addTOCClick","$","off","on","event","remove","resource","currentTarget","currentHref","setSelectedTOC","attr","isMobileView","isIPadView","removeClass","hide","indexOf","updateTitle","text","handleContentBreadcrumbVisibility","updateHashInUrl","createClickableBreadcrumb","getContentBreadcrumbTitle","stopPropagation","which","keyCode","this","trigger","scrollTo","href","currentTOCSelected","newHref","length","find","substring","removeHashRefTOC","hasClass","parent","addClass","hashHref","each","currentPage","scrollToPos","pos","handleExpandCollapseState","titleId","isExpand","hrefElement","is","titleSplits","split","parentTitleId","i","parentToggleButton","handleExpandCollapseToggleButton","toggleButton","hashInUrl","state","undefined","expand","window","history","pushState","handleSubHeadingsInContent","contentTitle","anchors","deferAddingExpandAndCollapseToggleButton","addAnchorToSubHeadings","get","reverse","subHeading","anchorTitle","modifySubHeading","table","getTableForSubHeading","anchorTitleId","indentLevels","calcIndentAndAddClass","addExpandAndCollapseToggleButtons","push","heading","handleDeferredExpandCollapseElements","subHeadings","id","replace","anchorElement","prepend","getTitle","title","retTitle","openParamIndex","closeParamIndex","trim","subHeadingElement","strong","lastIndex","lastIndexOf","titleStrong","titlePlain","append","next","dataId","marginLeft","levels","setDataId","css","parseInt","element","getDataId","handleExpandCollapseTitle","mousedown","buttonElement","updateUrl","collapsed","empty","getSelectedDocHtml","isShow","content","matchingElements","hideElements","elements","nestedDataId","show","deferredElements","modifyFixedTableColumnWidth","colgroups","colWidths","cols","currentColWidths","index","findTOCElement","processHash","hash","matchingTOCElement","configIndex","location","slashIndex","hashIndex","handleSubHeadingsInTOC","TOCElement","anchorLI","depth","data","anchorHref","ul","tocLI","anchorTitleTextIndex","anchorTitleText","handleContentScrolling","article","lastViewPos","document","initialContentInView","closestAnchor","scrollDown","currentScrollTop","scrollTop","breadcrumbVisible","isInitialContentInView","isInViewport","inView","currentViewPos","breadcrumbHeight","inViewPort","firstSubheadingElement","first","lastInitialContentElementRect","prev","getBoundingClientRect","outerHeight","top","height","elementTop","headerHeight","contentTop","contentBottom","viewportHeight","documentElement","clientHeight","breadcrumbText","highlightLastItem","breadcrumbTextSplits","stickyHeaderBreadcrumb","paddingWidth","breadcrumbWidth","width","contentWindowWidth","fontSize","includes","addContentBreadcrumbClick","preventDefault","anchor","offset","animate","handleParentWindowScrolling","e","addConfigContentFocusListener","handleInitialContent","url","configName","handlePopstate","onpopstate","TOCSubElement","popstateHrefPathname","pathname","initialContentBreadcrumbVisibility","hashPos","slideDown","slideUp","replaceHistoryState","hashToReplace","fullHref","replaceState","addOverviewPageClickAndScroll","ready"],"mappings":"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"}