1
Fork 0

Improve results

This commit is contained in:
Guillaume Gomez 2018-04-26 00:36:00 +02:00
parent e6db79f2ca
commit cf9209f872
2 changed files with 53 additions and 26 deletions

View file

@ -454,12 +454,16 @@
var obj = searchIndex[results[i].id]; var obj = searchIndex[results[i].id];
obj.lev = results[i].lev; obj.lev = results[i].lev;
if (isType !== true || obj.type) { if (isType !== true || obj.type) {
var res = buildHrefAndPath(obj);
obj.displayPath = pathSplitter(res[0]);
obj.fullPath = obj.displayPath + obj.name;
obj.href = res[1];
out.push(obj); out.push(obj);
if (out.length >= MAX_RESULTS) {
break;
}
} }
} }
if (out.length >= MAX_RESULTS) {
break;
}
} }
return out; return out;
} }
@ -1017,6 +1021,12 @@
ALIASES[window.currentCrate][query.raw]) { ALIASES[window.currentCrate][query.raw]) {
var aliases = ALIASES[window.currentCrate][query.raw]; var aliases = ALIASES[window.currentCrate][query.raw];
for (var i = 0; i < aliases.length; ++i) { for (var i = 0; i < aliases.length; ++i) {
aliases[i].is_alias = true;
aliases[i].alias = query.raw;
var res = buildHrefAndPath(aliases[i]);
aliases[i].displayPath = pathSplitter(res[0]);
aliases[i].fullPath = aliases[i].displayPath + aliases[i].name;
aliases[i].href = res[1];
ret['others'].unshift(aliases[i]); ret['others'].unshift(aliases[i]);
if (ret['others'].length > MAX_RESULTS) { if (ret['others'].length > MAX_RESULTS) {
ret['others'].pop(); ret['others'].pop();
@ -1179,16 +1189,6 @@
}; };
} }
function escape(content) {
var h1 = document.createElement('h1');
h1.textContent = content;
return h1.innerHTML;
}
function pathSplitter(path) {
return '<span>' + path.replace(/::/g, '::</span><span>');
}
function buildHrefAndPath(item) { function buildHrefAndPath(item) {
var displayPath; var displayPath;
var href; var href;
@ -1227,6 +1227,16 @@
return [displayPath, href]; return [displayPath, href];
} }
function escape(content) {
var h1 = document.createElement('h1');
h1.textContent = content;
return h1.innerHTML;
}
function pathSplitter(path) {
return '<span>' + path.replace(/::/g, '::</span><span>');
}
function addTab(array, query, display) { function addTab(array, query, display) {
var extraStyle = ''; var extraStyle = '';
if (display === false) { if (display === false) {
@ -1234,12 +1244,13 @@
} }
var output = ''; var output = '';
var duplicates = {};
if (array.length > 0) { if (array.length > 0) {
output = '<table class="search-results"' + extraStyle + '>'; output = '<table class="search-results"' + extraStyle + '>';
var shown = []; var shown = [];
array.forEach(function(item) { array.forEach(function(item) {
var name, type, href, displayPath; var name, type;
var id_ty = item.ty + item.path + item.name; var id_ty = item.ty + item.path + item.name;
if (shown.indexOf(id_ty) !== -1) { if (shown.indexOf(id_ty) !== -1) {
@ -1250,15 +1261,23 @@
name = item.name; name = item.name;
type = itemTypes[item.ty]; type = itemTypes[item.ty];
var res = buildHrefAndPath(item); if (item.is_alias !== true) {
var href = res[1]; var fullPath = item.displayPath + name;
var displayPath = res[0];
if (duplicates[fullPath]) {
return;
}
duplicates[fullPath] = true;
}
output += '<tr class="' + type + ' result"><td>' + output += '<tr class="' + type + ' result"><td>' +
'<a href="' + href + '">' + '<a href="' + item.href + '">' +
pathSplitter(displayPath) + '<span class="' + type + '">' + (item.is_alias === true ?
('<span><b>' + item.alias + ' </b></span><span ' +
'class="grey"><i>&nbsp;- see&nbsp;</i></span>') : '') +
item.displayPath + '<span class="' + type + '">' +
name + '</span></a></td><td>' + name + '</span></a></td><td>' +
'<a href="' + href + '">' + '<a href="' + item.href + '">' +
'<span class="desc">' + escape(item.desc) + '<span class="desc">' + escape(item.desc) +
'&nbsp;</span></a></td></tr>'; '&nbsp;</span></a></td></tr>';
}); });
@ -1284,8 +1303,7 @@
if (results['others'].length === 1 && if (results['others'].length === 1 &&
getCurrentValue('rustdoc-go-to-only-result') === "true") { getCurrentValue('rustdoc-go-to-only-result') === "true") {
var elem = document.createElement('a'); var elem = document.createElement('a');
var res = buildHrefAndPath(results['others'][0]); elem.href = results['others'][0].href;
elem.href = res[1];
elem.style.display = 'none'; elem.style.display = 'none';
// For firefox, we need the element to be in the DOM so it can be clicked. // For firefox, we need the element to be in the DOM so it can be clicked.
document.body.appendChild(elem); document.body.appendChild(elem);
@ -1347,12 +1365,13 @@
} }
} }
if (queries.length > 1) { if (queries.length > 1) {
function getSmallest(arrays, positions) { function getSmallest(arrays, positions, notDuplicates) {
var start = null; var start = null;
for (var it = 0; it < positions.length; ++it) { for (var it = 0; it < positions.length; ++it) {
if (arrays[it].length > positions[it] && if (arrays[it].length > positions[it] &&
(start === null || start > arrays[it][positions[it]].lev)) { (start === null || start > arrays[it][positions[it]].lev) &&
!notDuplicates[arrays[it][positions[it]].fullPath]) {
start = arrays[it][positions[it]].lev; start = arrays[it][positions[it]].lev;
} }
} }
@ -1362,19 +1381,23 @@
function mergeArrays(arrays) { function mergeArrays(arrays) {
var ret = []; var ret = [];
var positions = []; var positions = [];
var notDuplicates = {};
for (var x = 0; x < arrays.length; ++x) { for (var x = 0; x < arrays.length; ++x) {
positions.push(0); positions.push(0);
} }
while (ret.length < MAX_RESULTS) { while (ret.length < MAX_RESULTS) {
var smallest = getSmallest(arrays, positions); var smallest = getSmallest(arrays, positions, notDuplicates);
if (smallest === null) { if (smallest === null) {
break; break;
} }
for (x = 0; x < arrays.length && ret.length < MAX_RESULTS; ++x) { for (x = 0; x < arrays.length && ret.length < MAX_RESULTS; ++x) {
if (arrays[x].length > positions[x] && if (arrays[x].length > positions[x] &&
arrays[x][positions[x]].lev === smallest) { arrays[x][positions[x]].lev === smallest &&
!notDuplicates[arrays[x][positions[x]].fullPath]) {
ret.push(arrays[x][positions[x]]); ret.push(arrays[x][positions[x]]);
notDuplicates[arrays[x][positions[x]].fullPath] = true;
positions[x] += 1; positions[x] += 1;
} }
} }

View file

@ -1326,4 +1326,8 @@ kbd {
} }
#all-types > p { #all-types > p {
margin: 5px 0; margin: 5px 0;
}
.search-results td span.grey {
color: #ccc;
} }