Files
e90a783fea Add docs for badger (#1431)
* Add docs for badger

This is based on the PR https://github.com/dgraph-io/badger/pull/1424.
Saurabh wasn't able to sign the CLA and that's why I'm raising this PR.

added docs

added gitignore file

updated readme file

updated README.md

* Add missing newlines

* deleted unused file

removed runnable  code files

(cherry picked from commit 2f152d80182adb16913111319591e32714af76ec)

* remove ds_store file

* Added build script and nginx config

Co-authored-by: Apoorv Vardhan <[email protected]>
2020-07-24 19:36:51 +05:30

416 lines
11 KiB
JavaScript

// debounce limits the amount of function invocation by spacing out the calls
// by at least `wait` ms.
function debounce(func, wait, immediate) {
var timeout;
return function() {
var context = this,
args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
}
/********** Cookie helpers **/
function createCookie(name, val, days) {
var expires = "";
if (days) {
var date = new Date();
date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
expires = "; expires=" + date.toUTCString();
}
document.cookie = name + "=" + val + expires + "; path=/";
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(";");
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == " ") c = c.substring(1, c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
}
return null;
}
function eraseCookie(name) {
createCookie(name, "", -1);
}
/**
* getCurrentVersion gets the current doc version from the URL path and returns it
*
* @params pathname {String} - current path in a format of '/current/path'.
* @return {String} - e.g. 'master', 'v7.7.1', ''
* empty string denotes the latest version
*/
function getCurrentVersion(pathname) {
let candidate;
if (location.pathname.startsWith("/docs")) {
candidate = pathname.split("/")[2];
} else {
candidate = pathname.split("/")[1];
}
if (candidate === "master") {
return candidate;
}
if (/v\d+\.\d+\.\d+/.test(candidate)) {
return candidate;
}
return "";
}
// getPathBeforeVersionName gets the current URL path before the version prefix
function getPathBeforeVersionName(location, versionName) {
if (location.pathname.startsWith("/docs")) {
return "/docs/";
}
return "/";
}
// getPathAfterVersionName gets the current URL path after the version prefix
function getPathAfterVersionName(location, versionName) {
let path;
if (location.pathname.startsWith("/docs")) {
if (versionName === "") {
path = location.pathname
.split("/")
.slice(2)
.join("/");
} else {
path = location.pathname
.split("/")
.slice(3)
.join("/");
}
return path + location.hash;
}
if (versionName === "") {
path = location.pathname
.split("/")
.slice(1)
.join("/");
} else {
path = location.pathname
.split("/")
.slice(2)
.join("/");
}
return path + location.hash;
}
(function() {
// clipboard
var clipInit = false;
$("pre code:not(.no-copy)").each(function() {
var code = $(this),
text = code.text();
if (text.length > 5) {
if (!clipInit) {
var text;
var clip = new Clipboard(".copy-btn", {
text: function(trigger) {
text = $(trigger)
.prev("code")
.text();
return text.replace(/^\$\s/gm, "");
}
});
clip.on("success", function(e) {
e.clearSelection();
$(e.trigger)
.text("Copied to clipboard!")
.addClass("copied");
window.setTimeout(function() {
$(e.trigger)
.text("Copy")
.removeClass("copied");
}, 2000);
});
clip.on("error", function(e) {
e.clearSelection();
$(e.trigger).text("Error copying");
window.setTimeout(function() {
$(e.trigger).text("Copy");
}, 2000);
});
clipInit = true;
}
code.after('<span class="copy-btn">Copy</span>');
}
});
// Sidebar
var h2s = document.querySelectorAll("h2");
var h3s = document.querySelectorAll("h3");
var isAfter = function(e1, e2) {
return e1.compareDocumentPosition(e2) & Node.DOCUMENT_POSITION_FOLLOWING;
};
var activeLink = document.querySelector(".topic.active");
var allLinks = [];
var h2sWithH3s = [];
var j = 0;
for (var i = 0; i < h2s.length; i++) {
var h2 = h2s[i];
var nextH2 = h2s[i + 1];
var ourH3s = [];
while (
h3s[j] &&
isAfter(h2, h3s[j]) &&
(!nextH2 || !isAfter(nextH2, h3s[j]))
) {
ourH3s.push({ header: h3s[j] });
j++;
}
h2sWithH3s.push({
header: h2,
subHeaders: ourH3s
});
}
// console.log(h2sWithH3s);
function createSubtopic(container, headers) {
var subMenu = document.createElement("ul");
subMenu.className = "sub-topics";
container.appendChild(subMenu);
Array.prototype.forEach.call(headers, function(h) {
var li = createSubtopicItem(h.header);
li.className = "topic sub-topic";
subMenu.appendChild(li);
if (h.subHeaders) {
createSubtopic(subMenu, h.subHeaders);
}
});
}
function createSubtopicItem(h) {
allLinks.push(h);
var li = document.createElement("li");
li.innerHTML =
'<i class="fa fa-angle-right"></i> <a href="#' +
h.id +
'" data-scroll class="' +
h.tagName +
'">' +
(h.title || h.textContent) +
"</a>";
return li;
}
// setActiveSubTopic updates the active subtopic on the sidebar based on the
// hash
// @params hash [String] - hash including the hash sign at the beginning
function setActiveSubTopic(hash) {
// Set inactive the previously active topic
var prevActiveTopic = document.querySelector(".sub-topics .topic.active");
var nextActiveTopic = document.querySelector(
'.sub-topics a[href="' + hash + '"]'
).parentNode;
if (prevActiveTopic !== nextActiveTopic) {
nextActiveTopic.classList.add("active");
if (prevActiveTopic) {
prevActiveTopic.classList.remove("active");
}
}
}
// updateSidebar updates the active menu in the sidebar
function updateSidebar() {
var currentScrollY = document.body.scrollTop;
var topSideOffset = 120;
var activeHash;
for (var i = 0; i < allLinks.length; i++) {
var h = allLinks[i];
var hash = h.getElementsByTagName("a")[0].hash;
if (h.offsetTop - topSideOffset > currentScrollY) {
if (!activeHash) {
activeHash = hash;
break;
}
} else {
activeHash = hash;
}
}
if (activeHash) {
setActiveSubTopic(activeHash);
}
}
if (h2sWithH3s.length > 0 && activeLink) {
createSubtopic(activeLink, h2sWithH3s);
}
var subTopics = document.querySelectorAll(".sub-topics .sub-topic");
for (var i = 0; i < subTopics.length; i++) {
var subTopic = subTopics[i];
subTopic.addEventListener("click", function(e) {
var hash = e.target.hash;
setActiveSubTopic(hash);
});
}
// Scrollspy for sidebar
window.addEventListener("scroll", debounce(updateSidebar, 15));
// Sidebar toggle
document
.getElementById("sidebar-toggle")
.addEventListener("click", function(e) {
e.preventDefault();
var klass = document.body.className;
if (klass === "sidebar-visible") {
document.body.className = "";
} else {
document.body.className = "sidebar-visible";
}
});
// Anchor tags for headings
function appendAnchor(heading) {
var id = heading.id;
var anchorOffset = document.createElement("div");
anchorOffset.className = "anchor-offset";
anchorOffset.id = id;
var anchor = document.createElement("a");
anchor.href = "#" + id;
anchor.className = "anchor";
// anchor.innerHTML = 'link'
anchor.innerHTML = '<i class="fa fa-link"></i>';
heading.insertBefore(anchor, heading.firstChild);
heading.insertBefore(anchorOffset, heading.firstChild);
// Remove the id from heading
// Instead we will assign the id to the .anchor-offset element to account
// for the fixed header height
heading.removeAttribute("id");
}
var h2s = document.querySelectorAll(
".content-wrapper h2, .content-wrapper h3"
);
for (var i = 0; i < h2s.length; i++) {
appendAnchor(h2s[i]);
}
// code collapse
var pres = $("pre");
pres.each(function() {
var self = this;
var isInRunnable = $(self).parents(".runnable").length > 0;
if (isInRunnable) {
return;
}
if (self.clientHeight > 330) {
if (self.clientHeight < 380) {
return;
}
self.className += " collapsed";
var showMore = document.createElement("div");
showMore.className = "showmore";
showMore.innerHTML = "<span>Show all</span>";
showMore.addEventListener("click", function() {
self.className = "";
showMore.parentNode.removeChild(showMore);
});
this.appendChild(showMore);
}
});
// version selector
// var currentVersion = getCurrentVersion(location.pathname);
// if ( document.getElementsByClassName("version-selector")) {
// document
// .getElementsByClassName("version-selector")[0]
// .addEventListener("change", function(e) {
// // targetVersion: '', 'master', 'v0.7.7', 'v0.7.6', etc.
// var targetVersion = e.target.value;
// if (currentVersion !== targetVersion) {
// var basePath = getPathBeforeVersionName(location, currentVersion);
// // Getting everything after targetVersion and concatenating it with the hash part.
// var currentPath = getPathAfterVersionName(location, currentVersion);
// var targetPath;
// if (targetVersion === "") {
// targetPath = basePath + currentPath;
// } else {
// targetPath = basePath + targetVersion + "/" + currentPath;
// }
// location.assign(targetPath);
// }
// });
// }
// var versionSelector = document.getElementsByClassName("version-selector")[0],
// options = versionSelector.options;
// for (var i = 0; i < options.length; i++) {
// if (options[i].value.indexOf("latest") != -1) {
// options[i].value = options[i].value.replace(/\s\(latest\)/, "");
// }
// }
// for (var i = 0; i < options.length; i++) {
// if (options[i].value === currentVersion) {
// options[i].selected = true;
// break;
// }
// }
// (" ");
// Add target = _blank to all external links.
var links = document.links;
for (var i = 0, linksLength = links.length; i < linksLength; i++) {
if (links[i].hostname != window.location.hostname) {
links[i].target = "_blank";
}
}
/********** On page load **/
updateSidebar();
var activeTopic = document.querySelector(".sub-topics .topic.active");
if (activeTopic) {
activeTopic.scrollIntoView();
}
})();