in resources/web/docs_js/index-v1.js [289:576]
$(function() {
var lang = $('section#guide[lang]').attr('lang') || 'en';
const default_kibana_url = 'http://localhost:5601',
default_base_path = '/zzz', // Since the original implementation, the base path was added and most users use it.
default_console_url = default_kibana_url + default_base_path + '/app/kibana#/dev_tools/console',
default_sense_url = default_kibana_url + '/app/sense/',
default_ess_url = 'http://localhost:5601', // localhost is wrong, but we'll enhance this later
default_ece_url = 'http://localhost:5601',
base_url = utils.get_base_url(window.location.href),
LangStrings = lang_strings(lang);
// Capturing the various global variables into the store
const initialStoreState = {
settings: {
language: lang,
langStrings: LangStrings,
baseUrl: base_url,
kibana_url: Cookies.get("kibana_url") || default_kibana_url,
kibana_curl_host: Cookies.get("kibana_curl_host") || "localhost:5601",
kibana_curl_user: Cookies.get("kibana_curl_user"),
kibana_curl_password: "$KIBANAPASS",
console_url: Cookies.get("console_url") || default_console_url,
console_curl_host: Cookies.get("console_curl_host") || "localhost:9200",
console_curl_user: Cookies.get("console_curl_user"),
console_curl_password: "$ESPASS",
sense_url: Cookies.get("sense_url") || default_sense_url,
sense_curl_host: Cookies.get("sense_curl_host") || "localhost:9200",
sense_curl_user: Cookies.get("sense_curl_user"),
sense_curl_password: "$ESPASS",
ess_url: Cookies.get("ess_url") || default_ess_url,
ess_curl_host: Cookies.get("ess_curl_host") || "localhost:5601",
ess_curl_user: Cookies.get("ess_curl_user"),
ess_curl_password: "$CLOUD_PASS",
ece_url: Cookies.get("ece_url") || default_ece_url,
ece_curl_host: Cookies.get("ece_curl_host") || "localhost:5601",
ece_curl_user: Cookies.get("ece_curl_user"),
ece_curl_password: "$ECE_PASS",
consoleAlternative: Cookies.get('consoleAlternative') || "console",
},
/*
* Grab the initial state that we know how to deal with from the page.
* Rather than grab *everything* we grab the keys we can reduce to prevent
* things from falling over when an out of date version of the js sees new
* initial state. This wouldn't be a thing if we could bust the cache at
* will but, at this point, we can't.
*/
alternatives: window.initial_state.alternatives,
};
// first call to store initializes it
store(initialStoreState);
// One modal component for N mini-apps
mount($('body'), Modal);
AlternativeSwitcher(store());
// Get all headings inside the main body of the doc
const allHeadings = $('div#content').find('h1,h2,h3,h4,h5,h6,h7,h8,h9,h10,h11,h12')
let allLevels = []
// Create a list of all heading levels used on the page
allHeadings.each(function(index) {
// Don't include the first heading because that's the title
if (index === 0) return;
if (!allLevels.includes($(this).prop('nodeName'))) allLevels.push($(this).prop('nodeName'));
})
// Update the heading level to be incremental
// (i.e. the first heading after the title should be an h2 and
// then deeper levels should be adjusted so they are incremental)
allHeadings.each(function(index) {
const currentHeading = $(this)
const contents = currentHeading.prop('innerHTML')
// Don't include the first heading because that's the
// title and we always want that to be an h1
if (index > 0) {
if (allLevels[0] && ($(this).prop('nodeName') === allLevels[0])) {
$(this).replaceWith(`<h2>${contents}</h2>`);
}
if (allLevels[1] && ($(this).prop('nodeName') === allLevels[1])) {
$(this).replaceWith(`<h3>${contents}</h3>`);
}
if (allLevels[2] && ($(this).prop('nodeName') === allLevels[2])) {
$(this).replaceWith(`<h4>${contents}</h4>`);
}
if (allLevels[3] && ($(this).prop('nodeName') === allLevels[3])) {
$(this).replaceWith(`<h5>${contents}</h5>`);
}
if (allLevels[4] && ($(this).prop('nodeName') === allLevels[4])) {
$(this).replaceWith(`<h6>${contents}</h6>`);
}
}
})
// If breadcrumbs contain a dropdown (e.g. APM, ECS Logging)
// handle interaction with the dropdown
if ($('#related-products')) {
// Select-type element used to reveal options
const dropDownAnchor = $('#related-products > .dropdown-anchor')
// Popover-type element containing options
const dropDownContent = $('#related-products > .dropdown-content')
// Toggle the visibility of the popover on click
dropDownAnchor.click(function (e) {
e.preventDefault();
dropDownContent.toggleClass('show')
});
// Toggle the visibility of the popover on enter
dropDownAnchor.keypress(function (e) {
if (e.which == 13) {
dropDownContent.toggleClass('show')
}
});
// Close the popover when clicking outside it
$(document).mouseup(function(e) {
if (
dropDownContent.hasClass("show")
&& !dropDownAnchor.is(e.target)
&& !dropDownContent.is(e.target)
&& dropDownContent.has(e.target).length === 0
) {
dropDownContent.removeClass("show")
}
})
// Bold the item in the popover that represents
// the current book
const currentBookTitle = dropDownAnchor.text()
const items = dropDownContent.find("li")
items.each(function(i) {
if (items[i].innerText === currentBookTitle) {
const link = items[i].children[0]
link.style.fontWeight = 700
}
})
}
// Move rtp container to top right and make visible
var sticky_content = $('#sticky_content');
// Left column that contains the TOC
var left_col = $('#left_col');
// Middle column that contains the main content
var middle_col = $('#middle_col');
// Right column that contains the OTP and demand gen content
var right_col = $('#right_col');
// Empty column below TOC on small screens so the demand gen content can be positioned under the main content
var bottom_left_col = $('#bottom_left_col');
$('.page_header > a[href="../current/index.html"]').click(function(e) {
e.preventDefault();
utils.get_current_page_in_version('current').fail(function() {
location.href = "../current/index.html"
});
});
// Enable Sense widget
init_sense_widgets();
init_console_widgets();
init_kibana_widgets();
init_feedback_widget();
init_landing_page();
$("div.ess_widget").each(function() {
const div = $(this),
snippet = div.attr('data-snippet'),
consoleText = div.prev().text() + '\n';
return mount(div, ConsoleWidget, {
setting: "ess",
url_label: 'Enter the endpoint URL of the Elasticsearch Service',
configure_text: 'Configure the Elasticsearch Service endpoint URL',
consoleText,
snippet
});
});
$("div.ece_widget").each(function() {
const div = $(this),
snippet = div.attr('data-snippet'),
consoleText = div.prev().text() + '\n';
return mount(div, ConsoleWidget, {
setting: "ece",
url_label: 'Enter the endpoint URL of Elastic Cloud Enterprise',
configure_text: 'Configure the Elastic Cloud Enterprise endpoint URL',
consoleText,
snippet
});
});
$('div.console_code_copy').each(function () {
const $copyButton = $(this);
const langText = $copyButton.next().text();
$copyButton.on('click', function () {
utils.copyText(langText, lang_strings);
$copyButton.addClass('copied');
setTimeout(function () {
$copyButton.removeClass('copied')
}, 3000);
});
});
var div = $('div.toc');
// Fetch toc.html unless there is already a .toc on the page
if (div.length == 0) {
var url = location.href.replace(/[^\/]+$/, 'toc.html');
var toc = $.get(url, {}, function(data) {
left_col.append(data);
init_toc(LangStrings);
utils.open_current(location.pathname);
}).always(function() {
init_headers(sticky_content, LangStrings);
highlight_otp();
});
} else {
init_toc(LangStrings);
// Style book landing page (no main content, just a TOC and demand gen content)
// Set the width of the left column to zero
left_col.removeClass().addClass('col-0');
bottom_left_col.removeClass().addClass('col-0');
// Set the width of the middle column (containing the TOC) to 9
middle_col.removeClass().addClass('col-12 col-lg-9 guide-section');
// Set the width of the demand gen content to 3
right_col.removeClass().addClass('col-12 col-lg-3 sticky-top-md h-almost-full-lg');
}
PR.prettyPrint();
// Setup hot module replacement for css if we're in dev mode.
if (module.hot) {
var hotcss = document.createElement('script');
hotcss.setAttribute('src', '/guide/static/styles.js');
document.head.appendChild(hotcss);
}
// For the private docs repositories, the edit button is hidden
// unless there is an '?edit' in the query string or hash.
if (new URLSearchParams(window.location.search).has('edit')
|| window.location.hash.indexOf('?edit') > -1) {
$('a.edit_me_private').show();
}
// scroll to selected TOC element; if it doesn't exist yet, wait and try again
// window.width must match the breakpoint of `.sticky-top-md`
if($(window).width() >= 769){
var scrollToSelectedTOC = setInterval(() => {
if ($('.current_page').length) {
// Get scrollable element
var container = document.querySelector("#left_col");
// Get active table of contents element
var activeItem = document.querySelector(".current_page")
// If the top of the active item is out of view (or in the bottom 100px of the visible portion of the TOC)
// scroll so the top of the active item is at the top of the visible portion TOC
if (container.offsetHeight - 100 <= activeItem.offsetTop) {
// Scroll to active item
container.scrollTop = activeItem.offsetTop
}
clearInterval(scrollToSelectedTOC);
}
}, 150);
}
window.dataLayer = window.dataLayer || [];
const titleParams = document.title.split('|')
const pageViewData = {
'event': 'page_view',
'pagePath': window.location.pathname,
'pageURL': window.location.href,
'pageTitle': document.title,
'pageTemplate': '', // ?
'team': 'Docs',
'pageCategory': titleParams[titleParams.length - 2].trim(),
'hostname': window.location.hostname,
'canonicalTag': window.location.protocol + '//' + window.location.hostname + window.location.pathname,
'euid': getEuid(),
'userId': getCookie('userId'),
'hashedIP': getCookie('hashedIp'),
'userAgent': window.navigator.userAgent,
...getUtm()
};
dataLayer.push(pageViewData);
// Test comment used to detect unminifed JS in tests
});