mirror of https://git.sr.ht/~hrbrmstr/freebase
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
4.4 KiB
174 lines
4.4 KiB
$(function() {
|
|
|
|
$("#sidebar")
|
|
.stick_in_parent({offset_top: 40})
|
|
.on('sticky_kit:bottom', function(e) {
|
|
$(this).parent().css('position', 'static');
|
|
})
|
|
.on('sticky_kit:unbottom', function(e) {
|
|
$(this).parent().css('position', 'relative');
|
|
});
|
|
|
|
$('body').scrollspy({
|
|
target: '#sidebar',
|
|
offset: 60
|
|
});
|
|
|
|
$('[data-toggle="tooltip"]').tooltip();
|
|
|
|
var cur_path = paths(location.pathname);
|
|
$("#navbar ul li a").each(function(index, value) {
|
|
if (value.text == "Home")
|
|
return;
|
|
if (value.getAttribute("href") === "#")
|
|
return;
|
|
|
|
var path = paths(value.pathname);
|
|
if (is_prefix(cur_path, path)) {
|
|
// Add class to parent <li>, and enclosing <li> if in dropdown
|
|
var menu_anchor = $(value);
|
|
menu_anchor.parent().addClass("active");
|
|
menu_anchor.closest("li.dropdown").addClass("active");
|
|
}
|
|
});
|
|
});
|
|
|
|
$(document).ready(function() {
|
|
// do keyword highlighting
|
|
/* modified from https://jsfiddle.net/julmot/bL6bb5oo/ */
|
|
var mark = function() {
|
|
|
|
var referrer = document.URL ;
|
|
var paramKey = "q" ;
|
|
|
|
if (referrer.indexOf("?") !== -1) {
|
|
var qs = referrer.substr(referrer.indexOf('?') + 1);
|
|
var qs_noanchor = qs.split('#')[0];
|
|
var qsa = qs_noanchor.split('&');
|
|
var keyword = "";
|
|
|
|
for (var i = 0; i < qsa.length; i++) {
|
|
var currentParam = qsa[i].split('=');
|
|
|
|
if (currentParam.length !== 2) {
|
|
continue;
|
|
}
|
|
|
|
if (currentParam[0] == paramKey) {
|
|
keyword = decodeURIComponent(currentParam[1].replace(/\+/g, "%20"));
|
|
}
|
|
}
|
|
|
|
if (keyword !== "") {
|
|
$(".contents").unmark({
|
|
done: function() {
|
|
$(".contents").mark(keyword);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
};
|
|
|
|
mark();
|
|
});
|
|
|
|
function paths(pathname) {
|
|
var pieces = pathname.split("/");
|
|
pieces.shift(); // always starts with /
|
|
|
|
var end = pieces[pieces.length - 1];
|
|
if (end === "index.html" || end === "")
|
|
pieces.pop();
|
|
return(pieces);
|
|
}
|
|
|
|
function is_prefix(needle, haystack) {
|
|
if (needle.length > haystack.lengh)
|
|
return(false);
|
|
|
|
// Special case for length-0 haystack, since for loop won't run
|
|
if (haystack.length === 0) {
|
|
return(needle.length === 0);
|
|
}
|
|
|
|
for (var i = 0; i < haystack.length; i++) {
|
|
if (needle[i] != haystack[i])
|
|
return(false);
|
|
}
|
|
|
|
return(true);
|
|
}
|
|
|
|
/* Clipboard --------------------------*/
|
|
|
|
function changeTooltipMessage(element, msg) {
|
|
var tooltipOriginalTitle=element.getAttribute('data-original-title');
|
|
element.setAttribute('data-original-title', msg);
|
|
$(element).tooltip('show');
|
|
element.setAttribute('data-original-title', tooltipOriginalTitle);
|
|
}
|
|
|
|
if(Clipboard.isSupported()) {
|
|
$(document).ready(function() {
|
|
var copyButton = "<button type='button' class='btn btn-primary btn-copy-ex' type = 'submit' title='Copy to clipboard' aria-hidden='true' data-toggle='tooltip' data-placement='left auto' data-trigger='hover' data-clipboard-copy><i class='fa fa-copy' aria-hidden='true'></i></button>";
|
|
|
|
$(".examples").addClass("hasCopyButton");
|
|
|
|
// Insert copy buttons:
|
|
$(copyButton).prependTo(".hasCopyButton");
|
|
|
|
// Initialize tooltips:
|
|
$('.btn-copy-ex').tooltip({container: 'body'});
|
|
|
|
// Initialize clipboard:
|
|
var clipboardBtnCopies = new Clipboard('[data-clipboard-copy]', {
|
|
text: function(trigger) {
|
|
return trigger.parentNode.textContent;
|
|
}
|
|
});
|
|
|
|
clipboardBtnCopies.on('success', function(e) {
|
|
changeTooltipMessage(e.trigger, 'Copied!');
|
|
e.clearSelection();
|
|
});
|
|
|
|
clipboardBtnCopies.on('error', function() {
|
|
changeTooltipMessage(e.trigger,'Press Ctrl+C or Command+C to copy');
|
|
});
|
|
});
|
|
}
|
|
|
|
/* Search term highlighting ------------------------------*/
|
|
|
|
function matchedWords(hit) {
|
|
var words = [];
|
|
|
|
var hierarchy = hit._highlightResult.hierarchy;
|
|
// loop to fetch from lvl0, lvl1, etc.
|
|
for (var idx in hierarchy) {
|
|
words = words.concat(hierarchy[idx].matchedWords);
|
|
}
|
|
|
|
var content = hit._highlightResult.content;
|
|
if (content) {
|
|
words = words.concat(content.matchedWords);
|
|
}
|
|
|
|
// return unique words
|
|
var words_uniq = [...new Set(words)];
|
|
return words_uniq;
|
|
}
|
|
|
|
function updateHitURL(hit) {
|
|
|
|
var words = matchedWords(hit);
|
|
var url = "";
|
|
|
|
if (hit.anchor) {
|
|
url = hit.url_without_anchor + '?q=' + escape(words.join(" ")) + '#' + hit.anchor;
|
|
} else {
|
|
url = hit.url + '?q=' + escape(words.join(" "));
|
|
}
|
|
|
|
return url;
|
|
}
|
|
|