$(document).ready(function() {
|
|
|
|
vis.createBreadcrumbs($(".container.full").first());
|
|
vis.initSiteSearch();
|
|
vis.initKeywords();
|
|
|
|
$("#tipue_search_input").keyup(checkInput)
|
|
vis.typingTimeout = 0;
|
|
|
|
});
|
|
|
|
function checkInput() {
|
|
if (document.getElementById("tipue_search_input").value.length > 3) {
|
|
clearTimeout(vis.typingTimeout);
|
|
vis.typingTimeout = setTimeout(function () {vis.initSiteSearch(true)},200);
|
|
}
|
|
else {
|
|
var title = document.title.replace(/(\(.+\) )/g,"");
|
|
document.title = title;
|
|
document.getElementById("search-results-wrapper").style.display = "none";
|
|
}
|
|
}
|
|
|
|
// namespace
|
|
var vis = {};
|
|
|
|
/**
|
|
* Adds a breadcrumb as first child to the specified container.
|
|
*
|
|
* @author felixhayashi
|
|
*/
|
|
vis.createBreadcrumbs = function(container) {
|
|
|
|
// use the url to infer the path
|
|
var crumbs = location.pathname.split('/');
|
|
|
|
// number of ancestor directories
|
|
var stepbackIndex = crumbs.length-1;
|
|
var breadcrumbs = $.map(crumbs, function(crumb, i) {
|
|
|
|
// first and last element of the split
|
|
if(!crumb) return;
|
|
|
|
stepbackIndex--;
|
|
|
|
if(/\.html$/.test(crumb)) {
|
|
|
|
// strip the .html to make it look prettier
|
|
return "<span>" + crumb.replace(/\.html$/, "") + "</span>";
|
|
|
|
} else {
|
|
|
|
// calculate the relative url
|
|
for(var ref=crumb+"/", j=0; j<stepbackIndex; j++, ref="../"+ref);
|
|
|
|
return "<a href='" + ref + "'>" + crumb + "</a>";
|
|
}
|
|
}).join("") || "Home";
|
|
|
|
// insert into the container at the beginning.
|
|
$(container).prepend("<div id=\"breadcrumbs\">" + breadcrumbs + "</div>");
|
|
|
|
};
|
|
|
|
/**
|
|
* Will load tipue search field.
|
|
* If the search has already begun, we also display the results.
|
|
*
|
|
* For information how it works:
|
|
* @see https://github.com/almende/vis/issues/909#issuecomment-120119414
|
|
* @see https://github.com/almende/vis/issues/909#issuecomment-120397562
|
|
*
|
|
* @author felixhayashi
|
|
*/
|
|
vis.initSiteSearch = function(dynamic) { // Added dynamic flag for live update ~ Alex
|
|
$("#tipue_search_input").tipuesearch({
|
|
"mode": "live",
|
|
"show": 3,
|
|
},dynamic);
|
|
|
|
|
|
var hasSearchMessage = $("#tipue_search_content").children().length > 0;
|
|
if(hasSearchMessage) {
|
|
// show result panel
|
|
if ($("#search-results-wrapper").css("display") === 'none') {
|
|
$("#search-results-wrapper").css("display", "block");
|
|
}
|
|
// encode the keywords that were entered by the user
|
|
var keywords = $("#tipue_search_input").val().replace(/\s/g, ",");
|
|
// add keywords to result-urls
|
|
$(".tipue_search_content_url a, .tipue_search_content_title a").each(function() {
|
|
$(this).attr("href", $(this).attr("href") + "?keywords=" + keywords);
|
|
});
|
|
} else {
|
|
$("#search-results-wrapper").css("display", "none");
|
|
}
|
|
|
|
};
|
|
|
|
/**
|
|
* Will highlight the keywords that are passed as url get-parameters.
|
|
* All keywords are higlighted and a panel is displayed to jump to the
|
|
* first keyword found.
|
|
*
|
|
* For information how it works:
|
|
* @see https://github.com/almende/vis/issues/909#issuecomment-120119414
|
|
* @see https://github.com/almende/vis/issues/909#issuecomment-120397562
|
|
*
|
|
* @author felixhayashi
|
|
*/
|
|
vis.initKeywords = function() {
|
|
|
|
// extract keywords from get-variable
|
|
var keywords = url("?keywords");
|
|
|
|
if(keywords) {
|
|
|
|
// highlighting all keywords
|
|
keywords = keywords.split(",");
|
|
for(var i = 0; i < keywords.length; i++) {
|
|
$("body").highlight(keywords[i]);
|
|
}
|
|
|
|
// nasty hack: programmatically open full options tab
|
|
// because no browser allows scrolling to hidden elements!
|
|
$("[role=presentation][targetnode=fullOptions]").click();
|
|
$("tr.toggle:not(collapsible)").click();
|
|
|
|
// init keyword info panel
|
|
$("#keyword-info").css("display", "block");
|
|
$("#keyword-count").text($(".highlight").length);
|
|
$("#keyword-jumper-button").on('click', function(event) {
|
|
event.preventDefault();
|
|
// do not cache hits outside the handler; creates problems with prettyfy lib
|
|
// we use the first visible(!) hit at the time the button is clicked
|
|
var firstHit = $(".highlight:visible").first();
|
|
if(firstHit.length) {
|
|
$("html, body").animate({ scrollTop: $(firstHit).offset().top }, 2000);
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
};
|