提交 af8c1dd8 编写于 作者: B bpatel

8168965: search items are not listed in any sensible order

Reviewed-by: jjg, ksrini
Contributed-by: michel.trudeau@oracle.com
上级 409730b6
/*
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
......@@ -169,11 +169,42 @@ $(function() {
var tresult = new Array();
var mresult = new Array();
var tgresult = new Array();
var secondaryresult = new Array();
var displayCount = 0;
var exactMatcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term) + "$", "i");
camelCaseRegexp = ($.ui.autocomplete.escapeRegex(request.term)).split(/(?=[A-Z])/).join("([a-z0-9_$]*?)");
var camelCaseMatcher = new RegExp("^" + camelCaseRegexp);
secondaryMatcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
// Return the nested innermost name from the specified object
function nestedName(e) {
return e.l.substring(e.l.lastIndexOf(".") + 1);
}
// Sort array items by short name (as opposed to fully qualified name).
// Additionally, sort by the nested type name, when present,
// as opposed to top level short name.
function sortAndConcatResults(a1, a2) {
var sortingKey;
var sortArray = function(e1, e2) {
var l = sortingKey(e1);
var m = sortingKey(e2);
if (l < m)
return -1;
if (l > m)
return 1;
return 0;
};
sortingKey = function(e) {
return nestedName(e).toUpperCase();
};
a1.sort(sortArray);
a2.sort(sortArray);
a1 = a1.concat(a2);
a2.length = 0;
return a1;
}
if (moduleSearchIndex) {
var mdleCount = 0;
$.each(moduleSearchIndex, function(index, item) {
......@@ -184,10 +215,11 @@ $(function() {
} else if (camelCaseMatcher.test(item.l)) {
result.unshift(item);
} else if (secondaryMatcher.test(item.l)) {
result.push(item);
secondaryresult.push(item);
}
});
displayCount = mdleCount;
result = sortAndConcatResults(result, secondaryresult);
}
if (packageSearchIndex) {
var pCount = 0;
......@@ -197,48 +229,51 @@ $(function() {
pkg = (item.m)
? (item.m + "/" + item.l)
: item.l;
if (exactMatcher.test(item.l)) {
var s = nestedName(item);
if (exactMatcher.test(s)) {
presult.unshift(item);
pCount++;
} else if (camelCaseMatcher.test(pkg)) {
presult.unshift(item);
} else if (secondaryMatcher.test(pkg)) {
presult.push(item);
secondaryresult.push(item);
}
});
result = result.concat(presult);
result = result.concat(sortAndConcatResults(presult, secondaryresult));
displayCount = (pCount > displayCount) ? pCount : displayCount;
}
if (typeSearchIndex) {
var tCount = 0;
$.each(typeSearchIndex, function(index, item) {
item[category] = catTypes;
if (exactMatcher.test(item.l)) {
var s = nestedName(item);
if (exactMatcher.test(s)) {
tresult.unshift(item);
tCount++;
} else if (camelCaseMatcher.test(item.l)) {
} else if (camelCaseMatcher.test(s)) {
tresult.unshift(item);
} else if (secondaryMatcher.test(item.p + "." + item.l)) {
tresult.push(item);
secondaryresult.push(item);
}
});
result = result.concat(tresult);
result = result.concat(sortAndConcatResults(tresult, secondaryresult));
displayCount = (tCount > displayCount) ? tCount : displayCount;
}
if (memberSearchIndex) {
var mCount = 0;
$.each(memberSearchIndex, function(index, item) {
item[category] = catMembers;
if (exactMatcher.test(item.l)) {
var s = nestedName(item);
if (exactMatcher.test(s)) {
mresult.unshift(item);
mCount++;
} else if (camelCaseMatcher.test(item.l)) {
} else if (camelCaseMatcher.test(s)) {
mresult.unshift(item);
} else if (secondaryMatcher.test(item.c + "." + item.l)) {
mresult.push(item);
secondaryresult.push(item);
}
});
result = result.concat(mresult);
result = result.concat(sortAndConcatResults(mresult, secondaryresult));
displayCount = (mCount > displayCount) ? mCount : displayCount;
}
if (tagSearchIndex) {
......@@ -249,10 +284,10 @@ $(function() {
tgresult.unshift(item);
tgCount++;
} else if (secondaryMatcher.test(item.l)) {
tgresult.push(item);
secondaryresult.push(item);
}
});
result = result.concat(tgresult);
result = result.concat(sortAndConcatResults(tgresult, secondaryresult));
displayCount = (tgCount > displayCount) ? tgCount : displayCount;
}
displayCount = (displayCount > 500) ? displayCount : 500;
......@@ -312,4 +347,4 @@ $(function() {
}
}
});
});
\ No newline at end of file
});
......@@ -23,7 +23,7 @@
/*
* @test
* @bug 8141492 8071982 8141636 8147890 8166175
* @bug 8141492 8071982 8141636 8147890 8166175 8168965
* @summary Test the search feature of javadoc.
* @author bpatel
* @library ../lib
......@@ -486,6 +486,9 @@ public class TestSearch extends JavadocTester {
checkOutput("search.js", true,
"camelCaseRegexp = ($.ui.autocomplete.escapeRegex(request.term)).split(/(?=[A-Z])/).join(\"([a-z0-9_$]*?)\");",
"var camelCaseMatcher = new RegExp(\"^\" + camelCaseRegexp);",
"camelCaseMatcher.test(item.l)");
"camelCaseMatcher.test(item.l)",
"var secondaryresult = new Array();",
"function nestedName(e) {",
"function sortAndConcatResults(a1, a2) {");
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册