summaryrefslogtreecommitdiffstats
path: root/tools/droiddoc/templates/assets/search_autocomplete.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/droiddoc/templates/assets/search_autocomplete.js')
-rw-r--r--tools/droiddoc/templates/assets/search_autocomplete.js173
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;
+}