{"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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"}