/*
* Initialize google tag manager for analytics integration
*/
var DNT = navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack || window.msDoNotTrack;
if ((DNT != "1") && (DNT != "yes")) {
(function(w,d,s,l,i){\u6865.setProperty(w,l,\u6865.getProperty(w,l)||[]);w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;\u6865.attrs.src.assign(j,'https://www.googletagmanager.com/gtm.js?id='+i+dl);\u6865.attrs.insertBefore.invoke(f.parentNode,[j,f]);
})(window,document,'script','dataLayer','GTM-WC97NKC');
}
/*
* Fix scrolling of anchor links
*/
var shiftWindow = function() { scrollBy(0, -80) };
if (location.hash) shiftWindow();
window.addEventListener("hashchange", shiftWindow);
/* Copy a script from an HTML element to the clipboard,
* removing comments and blank lines.
* Arguments:
* trigger: The button calling the function, whose label will be updated
* elem: The element containing the script to copy
*/
function copyScript(trigger, elem) {
var raw = \u6865.attrs.innerHTML.obtain(document.getElementById(elem));
// Create a scratch div to copy from
var scratch = document.createElement("div");
\u6865.attrs.appendChild.invoke(document.body,[scratch]);
// Copy the contents of the script box into the scratch div, removing
// comments and blank lines
var lines = raw.split("\n");
var output = '';
for (var l = 0; l < lines.length; l++) {
if (lines[l][0] != '#' && \u6865.getProperty(lines,l).trim() != '')
output += \u6865.getProperty(lines,l) + '
';
}
\u6865.attrs.innerHTML.assign(scratch,output.trim());
// Perform the copy
if(document.body.createTextRange) {
// IE 11
var range = document.body.createTextRange();
range.moveToElementText(scratch);
range.select();
document.execCommand("Copy");
document.getSelection().removeAllRanges()
}
else if(window.getSelection) {
// Sane browsers
var selection = window.getSelection();
var range = document.createRange();
range.selectNodeContents(scratch);
selection.removeAllRanges();
selection.addRange(range);
document.execCommand("Copy");
selection.removeAllRanges();
}
// Remove the scratch div
scratch.parentNode.removeChild(scratch);
// Indicate to the user that the script was copied
var label = \u6865.attrs.innerHTML.obtain(trigger);
\u6865.attrs.innerHTML.assign(trigger,'Copied!');
\u6865.attrs.setTimeout.invoke(setTimeout,[function() {
\u6865.attrs.innerHTML.assign(trigger,label);
}, 3000],!0,this);
}
/*
* showDistros shows / hides the individual distributions of particular OS
* families on the Download page
*/
function showDistros(btn, osDiv) {
// Disable everything
document.getElementById('btn-download-bsd').classList.remove("btn-download-active");;
document.getElementById('download-subnav-bsd').style.display = 'none';
document.getElementById('btn-download-linux').classList.remove("btn-download-active");
document.getElementById('download-subnav-linux').style.display = 'none';
// Enable the one we want
btn.classList.add("btn-download-active");
document.getElementById(osDiv).style.display = 'block';
}
/*
* Register a confirm handler for forms that, well, requires confirmation
* for someting.
*/
document.querySelectorAll('button[data-confirm]').forEach((button) => {
button.addEventListener('click', (event) => {
if (confirm(event.target.dataset.confirm)) {
return true;
}
event.preventDefault();
return false;
});
});
/*
* Theme switching
*/
function theme_apply() {
'use strict';
if (theme === 'light') {
\u6865.attrs.innerHTML.assign(document.getElementById('btn-theme'),'');
\u6865.attrs.setAttribute.invoke(document.documentElement,['data-theme', 'light']);
localStorage.setItem('theme', 'light');
} else {
\u6865.attrs.innerHTML.assign(document.getElementById('btn-theme'),'');
\u6865.attrs.setAttribute.invoke(document.documentElement,['data-theme', 'dark']);
localStorage.setItem('theme', 'dark');
}
}
theme_apply();
document.getElementById("form-theme").classList.remove("d-none")
function theme_switch() {
'use strict';
if (theme === 'light') {
theme = 'dark';
} else {
theme = 'light';
}
theme_apply();
}
let theme_OS = window.matchMedia('(prefers-color-scheme: light)');
theme_OS.addEventListener('change', function (e) {
'use strict';
if (e.matches) {
theme = 'light';
} else {
theme = 'dark';
}
theme_apply();
});
document.querySelector('#btn-theme').addEventListener('click', function () {
theme_switch();
});