diff options
Diffstat (limited to 'tools/droiddoc/templates/assets/search_autocomplete.js')
-rw-r--r-- | tools/droiddoc/templates/assets/search_autocomplete.js | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/tools/droiddoc/templates/assets/search_autocomplete.js b/tools/droiddoc/templates/assets/search_autocomplete.js new file mode 100644 index 0000000..2e12e0f --- /dev/null +++ b/tools/droiddoc/templates/assets/search_autocomplete.js @@ -0,0 +1,173 @@ +var gSelectedIndex = -1; +var gSelectedID = -1; +var gMatches = new Array(); +var gLastText = ""; +var ROW_COUNT = 30; +var gInitialized = false; +var DEFAULT_TEXT = "search developer docs"; + +function set_row_selected(row, selected) +{ + var c1 = row.cells[0]; + // var c2 = row.cells[1]; + if (selected) { + c1.className = "jd-autocomplete jd-selected"; + // c2.className = "jd-autocomplete jd-selected jd-linktype"; + } else { + c1.className = "jd-autocomplete"; + // c2.className = "jd-autocomplete jd-linktype"; + } +} + +function set_row_values(toroot, row, match) +{ + var link = row.cells[0].childNodes[0]; + link.innerHTML = match.label; + link.href = toroot + match.link + // row.cells[1].innerHTML = match.type; +} + +function sync_selection_table(toroot) +{ + var filtered = document.getElementById("search_filtered"); + var r; //TR DOM object + var i; //TR iterator + gSelectedID = -1; + + filtered.onmouseover = function() { + if(gSelectedIndex >= 0) { + set_row_selected(this.rows[gSelectedIndex], false); + gSelectedIndex = -1; + } + } + + //initialize the table; draw it for the first time (but not visible). + if (!gInitialized) { + for (i=0; i<ROW_COUNT; i++) { + var r = filtered.insertRow(-1); + var c1 = r.insertCell(-1); + // var c2 = r.insertCell(-1); + c1.className = "jd-autocomplete"; + // c2.className = "jd-autocomplete jd-linktype"; + var link = document.createElement("a"); + c1.onmousedown = function() { + window.location = this.firstChild.getAttribute("href"); + } + c1.onmouseover = function() { + this.className = this.className + " jd-selected"; + } + c1.onmouseout = function() { + this.className = "jd-autocomplete"; + } + c1.appendChild(link); + } + /* var r = filtered.insertRow(-1); + var c1 = r.insertCell(-1); + c1.className = "jd-autocomplete jd-linktype"; + c1.colSpan = 2; */ + gInitialized = true; + } + + //if we have results, make the table visible and initialize result info + if (gMatches.length > 0) { + document.getElementById("search_filtered_div").className = "showing"; + var N = gMatches.length < ROW_COUNT ? gMatches.length : ROW_COUNT; + for (i=0; i<N; i++) { + r = filtered.rows[i]; + r.className = "show-row"; + set_row_values(toroot, r, gMatches[i]); + set_row_selected(r, i == gSelectedIndex); + if (i == gSelectedIndex) { + gSelectedID = gMatches[i].id; + } + } + //start hiding rows that are no longer matches + for (; i<ROW_COUNT; i++) { + r = filtered.rows[i]; + r.className = "no-display"; + } + //if there are more results we're not showing, so say so. +/* if (gMatches.length > ROW_COUNT) { + r = filtered.rows[ROW_COUNT]; + r.className = "show-row"; + c1 = r.cells[0]; + c1.innerHTML = "plus " + (gMatches.length-ROW_COUNT) + " more"; + } else { + filtered.rows[ROW_COUNT].className = "hide-row"; + }*/ + //if we have no results, hide the table + } else { + document.getElementById("search_filtered_div").className = "no-display"; + } +} + +function search_changed(e, kd, toroot) +{ + var search = document.getElementById("search_autocomplete"); + var text = search.value; + + // 13 = enter + if (!kd && (e.keyCode == 13)) { + document.getElementById("search_filtered_div").className = "no-display"; + if (gSelectedIndex >= 0) { + window.location = toroot + gMatches[gSelectedIndex].link; + return false; + } + } + // 38 -- arrow up + else if (kd && (e.keyCode == 38)) { + if (gSelectedIndex >= 0) { + gSelectedIndex--; + } + sync_selection_table(toroot); + return false; + } + // 40 -- arrow down + else if (kd && (e.keyCode == 40)) { + if (gSelectedIndex < gMatches.length-1 + && gSelectedIndex < ROW_COUNT-1) { + gSelectedIndex++; + } + sync_selection_table(toroot); + return false; + } + else if (!kd) { + gMatches = new Array(); + matchedCount = 0; + gSelectedIndex = -1; + for (i=0; i<DATA.length; i++) { + var s = DATA[i]; + if (text.length != 0 && s.label.indexOf(text) != -1) { + gMatches[matchedCount] = s; + if (gSelectedID == s.id) { + gSelectedIndex = matchedCount; + } + matchedCount++; + } + } + sync_selection_table(toroot); + return true; // allow the event to bubble up to the search api + } +} + +function search_focus_changed(obj, focused) +{ + if (focused) { + if(obj.value == DEFAULT_TEXT){ + obj.value = ""; + obj.style.color="#000000"; + } + } else { + if(obj.value == ""){ + obj.value = DEFAULT_TEXT; + obj.style.color="#aaaaaa"; + } + document.getElementById("search_filtered_div").className = "no-display"; + } +} + +function submit_search() { + var query = document.getElementById('search_autocomplete').value; + document.location = '/search.html#q=' + query; + return false; +} |