Commit 2384d9af authored by bootstraponline's avatar bootstraponline

Reposition headers based on score

Enforce min score
parent adcf6c70
...@@ -42,6 +42,23 @@ ...@@ -42,6 +42,23 @@
.on('blur', inactive); .on('blur', inactive);
} }
function refToHeader (itemRef) {
return $('.tocify-item[data-unique=' + itemRef + ']').closest('.tocify-header');
}
function sortDescending (obj2, obj1) {
var s1 = parseInt(obj1.id.replace(/[^\d]/g, ''), 10);
var s2 = parseInt(obj2.id.replace(/[^\d]/g, ''), 10);
return s1 === s2 ? 0 : s1 < s2 ? -1 : 1;
}
function resetHeaderLocations () {
var headers = $(".tocify-header").sort(sortDescending);
$.each(headers, function (index, item) {
$(item).insertBefore($("#toc ul:first-child"));
});
}
function search (event) { function search (event) {
var sections = $('section, #toc .tocify-header'); var sections = $('section, #toc .tocify-header');
...@@ -53,12 +70,37 @@ ...@@ -53,12 +70,37 @@
if (this.value) { if (this.value) {
sections.hide(); sections.hide();
var results = index.search(this.value); // results are sorted by score in descending order
var tmpResults = index.search(this.value);
var results = [];
// remove low score matches
$.each(tmpResults, function (index, item) {
if (item.score >= 0.0001) results.push(item);
});
if (results.length) { if (results.length) {
lastRef = null;
resetHeaderLocations();
$.each(results, function (index, item) { $.each(results, function (index, item) {
$('#section-' + item.ref).show(); var itemRef = item.ref;
$('.tocify-item[data-unique=' + item.ref + ']').closest('.tocify-header').show(); $('#section-' + itemRef).show();
// headers must be repositioned in the DOM
var closestHeader = refToHeader(itemRef);
if (lastRef) {
refToHeader(lastRef).insertBefore(closestHeader);
}
closestHeader.show();
lastRef = itemRef;
}); });
// position first element. it wasn't positioned above if len > 1
if (results.length > 1) {
var firstRef = results[0].ref;
var secondRef = results[1].ref
refToHeader(firstRef).insertBefore(refToHeader(secondRef));
}
highlight.call(this); highlight.call(this);
} else { } else {
sections.show(); sections.show();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment