am ea64d5de: am 719acb45: update search suggestions to use new unified JS and show samples

* commit 'ea64d5de02842233b3a163c9c707cc77ce06483c':
  update search suggestions to use new unified JS and show samples
This commit is contained in:
Scott Main 2013-12-10 13:52:37 -08:00 committed by Android Git Automerger
commit ab750f311c
2 changed files with 265 additions and 16 deletions

View file

@ -23,7 +23,7 @@ var navBarIsFixed = false;
$(document).ready(function() { $(document).ready(function() {
// load json file for JD doc search suggestions // load json file for JD doc search suggestions
$.getScript(toRoot + 'reference/jd_lists.js'); $.getScript(toRoot + 'jd_lists_unified.js');
// load json file for Android API search suggestions // load json file for Android API search suggestions
$.getScript(toRoot + 'reference/lists.js'); $.getScript(toRoot + 'reference/lists.js');
// load json files for Google services API suggestions // load json files for Google services API suggestions
@ -1539,6 +1539,13 @@ function set_item_values(toroot, $li, match)
$link.attr('href',toroot + match.link); $link.attr('href',toroot + match.link);
} }
function set_item_values_jd(toroot, $li, match)
{
var $link = $('a',$li);
$link.html(match.title);
$link.attr('href',toroot + match.url);
}
function new_suggestion($list) { function new_suggestion($list) {
var $li = $("<li class='jd-autocomplete'></li>"); var $li = $("<li class='jd-autocomplete'></li>");
$list.append($li); $list.append($li);
@ -1615,6 +1622,9 @@ function sync_selection_table(toroot)
$(".search_filtered_wrapper.docs li").remove(); $(".search_filtered_wrapper.docs li").remove();
// determine google results to show // determine google results to show
// NOTE: The order of the conditions below for the sugg.type MUST BE SPECIFIC:
// The order must match the reverse order that each section appears as a card in
// the suggestion UI... this may be only for the "develop" grouped items though.
gDocsListLength = gDocsMatches.length < ROW_COUNT_DOCS ? gDocsMatches.length : ROW_COUNT_DOCS; gDocsListLength = gDocsMatches.length < ROW_COUNT_DOCS ? gDocsMatches.length : ROW_COUNT_DOCS;
for (i=0; i<gDocsListLength; i++) { for (i=0; i<gDocsListLength; i++) {
var sugg = gDocsMatches[i]; var sugg = gDocsMatches[i];
@ -1625,16 +1635,19 @@ function sync_selection_table(toroot)
if (sugg.type == "distribute") { if (sugg.type == "distribute") {
$li = new_suggestion($(".suggest-card.distribute ul")); $li = new_suggestion($(".suggest-card.distribute ul"));
} else } else
if (sugg.type == "samples") {
$li = new_suggestion($(".suggest-card.develop .child-card.samples"));
} else
if (sugg.type == "training") { if (sugg.type == "training") {
$li = new_suggestion($(".suggest-card.develop .child-card.training")); $li = new_suggestion($(".suggest-card.develop .child-card.training"));
} else } else
if (sugg.type == "guide"||"google") { if (sugg.type == "about"||"guide"||"tools"||"google") {
$li = new_suggestion($(".suggest-card.develop .child-card.guides")); $li = new_suggestion($(".suggest-card.develop .child-card.guides"));
} else { } else {
continue; continue;
} }
set_item_values(toroot, $li, sugg); set_item_values_jd(toroot, $li, sugg);
set_item_selected($li, i == gSelectedIndex); set_item_selected($li, i == gSelectedIndex);
} }
@ -1659,6 +1672,10 @@ function sync_selection_table(toroot)
$(".child-card.training").prepend("<li class='header'>Training:</li>"); $(".child-card.training").prepend("<li class='header'>Training:</li>");
$(".child-card.training li").appendTo(".suggest-card.develop ul"); $(".child-card.training li").appendTo(".suggest-card.develop ul");
} }
if ($(".child-card.samples li").length > 0) {
$(".child-card.samples").prepend("<li class='header'>Samples:</li>");
$(".child-card.samples li").appendTo(".suggest-card.develop ul");
}
if ($(".suggest-card.develop li").length > 0) { if ($(".suggest-card.develop li").length > 0) {
$(".suggest-card.develop").show(300); $(".suggest-card.develop").show(300);
@ -1681,6 +1698,7 @@ function sync_selection_table(toroot)
*/ */
function search_changed(e, kd, toroot) function search_changed(e, kd, toroot)
{ {
var currentLang = getLangPref();
var search = document.getElementById("search_autocomplete"); var search = document.getElementById("search_autocomplete");
var text = search.value.replace(/(^ +)|( +$)/g, ''); var text = search.value.replace(/(^ +)|( +$)/g, '');
// get the ul hosting the currently selected item // get the ul hosting the currently selected item
@ -1794,8 +1812,8 @@ function search_changed(e, kd, toroot)
} }
} }
// if key-up event and not arrow down/up, // if key-up event and not arrow down/up/left/right,
// read the search query and add suggestsions to gMatches // read the search query and add suggestions to gMatches
else if (!kd && (e.keyCode != 40) else if (!kd && (e.keyCode != 40)
&& (e.keyCode != 38) && (e.keyCode != 38)
&& (e.keyCode != 37) && (e.keyCode != 37)
@ -1841,31 +1859,35 @@ function search_changed(e, kd, toroot)
// Search for JD docs // Search for matching JD docs
if (text.length >= 3) { if (text.length >= 3) {
for (var i=0; i<JD_DATA.length; i++) { // Regex to match only the beginning of a word
// Regex to match only the beginning of a word var textRegex = new RegExp("\\b" + text.toLowerCase(), "g");
var textRegex = new RegExp("\\b" + text.toLowerCase(), "g");
// Search for Training classes
for (var i=0; i<TRAINING_RESOURCES.length; i++) {
// current search comparison, with counters for tag and title, // current search comparison, with counters for tag and title,
// used later to improve ranking // used later to improve ranking
var s = JD_DATA[i]; var s = TRAINING_RESOURCES[i];
s.matched_tag = 0; s.matched_tag = 0;
s.matched_title = 0; s.matched_title = 0;
var matched = false; var matched = false;
// Check if query matches any tags; work backwards toward 1 to assist ranking // Check if query matches any tags; work backwards toward 1 to assist ranking
for (var j = s.tags.length - 1; j >= 0; j--) { for (var j = s.keywords.length - 1; j >= 0; j--) {
// it matches a tag // it matches a tag
if (s.tags[j].toLowerCase().match(textRegex)) { if (s.keywords[j].toLowerCase().match(textRegex)) {
matched = true; matched = true;
s.matched_tag = j + 1; // add 1 to index position s.matched_tag = j + 1; // add 1 to index position
} }
} }
// Don't consider doc title for lessons (only for class landing pages) // Don't consider doc title for lessons (only for class landing pages),
// ...it is not a training lesson (or is but has matched a tag) // unless the lesson has a tag that already matches
if (!(s.type == "training" && s.link.indexOf("index.html") == -1) || matched) { if ((s.lang == currentLang) &&
(!(s.type == "training" && s.url.indexOf("index.html") == -1) || matched)) {
// it matches the doc title // it matches the doc title
if (s.label.toLowerCase().match(textRegex)) { if (s.title.toLowerCase().match(textRegex)) {
matched = true; matched = true;
s.matched_title = 1; s.matched_title = 1;
} }
@ -1875,6 +1897,231 @@ function search_changed(e, kd, toroot)
matchedCountDocs++; matchedCountDocs++;
} }
} }
// Search for API Guides
for (var i=0; i<GUIDE_RESOURCES.length; i++) {
// current search comparison, with counters for tag and title,
// used later to improve ranking
var s = GUIDE_RESOURCES[i];
s.matched_tag = 0;
s.matched_title = 0;
var matched = false;
// Check if query matches any tags; work backwards toward 1 to assist ranking
for (var j = s.keywords.length - 1; j >= 0; j--) {
// it matches a tag
if (s.keywords[j].toLowerCase().match(textRegex)) {
matched = true;
s.matched_tag = j + 1; // add 1 to index position
}
}
// Check if query matches the doc title, but only for current language
if (s.lang == currentLang) {
// if query matches the doc title
if (s.title.toLowerCase().match(textRegex)) {
matched = true;
s.matched_title = 1;
}
}
if (matched) {
gDocsMatches[matchedCountDocs] = s;
matchedCountDocs++;
}
}
// Search for Tools Guides
for (var i=0; i<TOOLS_RESOURCES.length; i++) {
// current search comparison, with counters for tag and title,
// used later to improve ranking
var s = TOOLS_RESOURCES[i];
s.matched_tag = 0;
s.matched_title = 0;
var matched = false;
// Check if query matches any tags; work backwards toward 1 to assist ranking
for (var j = s.keywords.length - 1; j >= 0; j--) {
// it matches a tag
if (s.keywords[j].toLowerCase().match(textRegex)) {
matched = true;
s.matched_tag = j + 1; // add 1 to index position
}
}
// Check if query matches the doc title, but only for current language
if (s.lang == currentLang) {
// if query matches the doc title
if (s.title.toLowerCase().match(textRegex)) {
matched = true;
s.matched_title = 1;
}
}
if (matched) {
gDocsMatches[matchedCountDocs] = s;
matchedCountDocs++;
}
}
// Search for About docs
for (var i=0; i<ABOUT_RESOURCES.length; i++) {
// current search comparison, with counters for tag and title,
// used later to improve ranking
var s = ABOUT_RESOURCES[i];
s.matched_tag = 0;
s.matched_title = 0;
var matched = false;
// Check if query matches any tags; work backwards toward 1 to assist ranking
for (var j = s.keywords.length - 1; j >= 0; j--) {
// it matches a tag
if (s.keywords[j].toLowerCase().match(textRegex)) {
matched = true;
s.matched_tag = j + 1; // add 1 to index position
}
}
// Check if query matches the doc title, but only for current language
if (s.lang == currentLang) {
// if query matches the doc title
if (s.title.toLowerCase().match(textRegex)) {
matched = true;
s.matched_title = 1;
}
}
if (matched) {
gDocsMatches[matchedCountDocs] = s;
matchedCountDocs++;
}
}
// Search for Design guides
for (var i=0; i<DESIGN_RESOURCES.length; i++) {
// current search comparison, with counters for tag and title,
// used later to improve ranking
var s = DESIGN_RESOURCES[i];
s.matched_tag = 0;
s.matched_title = 0;
var matched = false;
// Check if query matches any tags; work backwards toward 1 to assist ranking
for (var j = s.keywords.length - 1; j >= 0; j--) {
// it matches a tag
if (s.keywords[j].toLowerCase().match(textRegex)) {
matched = true;
s.matched_tag = j + 1; // add 1 to index position
}
}
// Check if query matches the doc title, but only for current language
if (s.lang == currentLang) {
// if query matches the doc title
if (s.title.toLowerCase().match(textRegex)) {
matched = true;
s.matched_title = 1;
}
}
if (matched) {
gDocsMatches[matchedCountDocs] = s;
matchedCountDocs++;
}
}
// Search for Distribute guides
for (var i=0; i<DISTRIBUTE_RESOURCES.length; i++) {
// current search comparison, with counters for tag and title,
// used later to improve ranking
var s = DISTRIBUTE_RESOURCES[i];
s.matched_tag = 0;
s.matched_title = 0;
var matched = false;
// Check if query matches any tags; work backwards toward 1 to assist ranking
for (var j = s.keywords.length - 1; j >= 0; j--) {
// it matches a tag
if (s.keywords[j].toLowerCase().match(textRegex)) {
matched = true;
s.matched_tag = j + 1; // add 1 to index position
}
}
// Check if query matches the doc title, but only for current language
if (s.lang == currentLang) {
// if query matches the doc title
if (s.title.toLowerCase().match(textRegex)) {
matched = true;
s.matched_title = 1;
}
}
if (matched) {
gDocsMatches[matchedCountDocs] = s;
matchedCountDocs++;
}
}
// Search for Google guides
for (var i=0; i<GOOGLE_RESOURCES.length; i++) {
// current search comparison, with counters for tag and title,
// used later to improve ranking
var s = GOOGLE_RESOURCES[i];
s.matched_tag = 0;
s.matched_title = 0;
var matched = false;
// Check if query matches any tags; work backwards toward 1 to assist ranking
for (var j = s.keywords.length - 1; j >= 0; j--) {
// it matches a tag
if (s.keywords[j].toLowerCase().match(textRegex)) {
matched = true;
s.matched_tag = j + 1; // add 1 to index position
}
}
// Check if query matches the doc title, but only for current language
if (s.lang == currentLang) {
// if query matches the doc title
if (s.title.toLowerCase().match(textRegex)) {
matched = true;
s.matched_title = 1;
}
}
if (matched) {
gDocsMatches[matchedCountDocs] = s;
matchedCountDocs++;
}
}
// Search for Samples
for (var i=0; i<SAMPLES_RESOURCES.length; i++) {
// current search comparison, with counters for tag and title,
// used later to improve ranking
var s = SAMPLES_RESOURCES[i];
s.matched_tag = 0;
s.matched_title = 0;
var matched = false;
// Check if query matches any tags; work backwards toward 1 to assist ranking
for (var j = s.keywords.length - 1; j >= 0; j--) {
// it matches a tag
if (s.keywords[j].toLowerCase().match(textRegex)) {
matched = true;
s.matched_tag = j + 1; // add 1 to index position
}
}
// Check if query matches the doc title, but only for current language
if (s.lang == currentLang) {
// if query matches the doc title.t
if (s.title.toLowerCase().match(textRegex)) {
matched = true;
s.matched_title = 1;
}
}
if (matched) {
gDocsMatches[matchedCountDocs] = s;
matchedCountDocs++;
}
}
// Rank/sort all the matched pages
rank_autocomplete_doc_results(text, gDocsMatches); rank_autocomplete_doc_results(text, gDocsMatches);
} }

View file

@ -122,6 +122,8 @@ onkeyup="return search_changed(event, false, '<?cs var:toroot ?>')" />
</div> </div>
<div class="child-card training no-display"> <div class="child-card training no-display">
</div> </div>
<div class="child-card samples no-display">
</div>
</div> </div>
<div class="suggest-card design no-display"> <div class="suggest-card design no-display">
<ul class="search_filtered"> <ul class="search_filtered">