1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
page.title=Search Results
@jd:body
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script src="/assets/jquery-history.js" type="text/javascript"></script>
<script type="text/javascript">
var tabIndex = 0;
google.load('search', '1');
function OnLoad() {
document.getElementById("search_autocomplete").style.color = "#000";
// create search control
searchControl = new google.search.SearchControl();
// use our existing search form and use tabs when multiple searchers are used
drawOptions = new google.search.DrawOptions();
drawOptions.setDrawMode(google.search.SearchControl.DRAW_MODE_TABBED);
drawOptions.setInput(document.getElementById("search_autocomplete"));
// configure search result options
searchOptions = new google.search.SearcherOptions();
searchOptions.setExpandMode(GSearchControl.EXPAND_MODE_OPEN);
// configure each of the searchers, for each tab
devSiteSearcher = new google.search.WebSearch();
devSiteSearcher.setUserDefinedLabel("All Developers Site");
devSiteSearcher.setSiteRestriction("http://developer.android.com/");
devGuideSearcher = new google.search.WebSearch();
devGuideSearcher.setUserDefinedLabel("Dev Guide");
devGuideSearcher.setSiteRestriction("http://developer.android.com/guide/");
referenceSearcher = new google.search.WebSearch();
referenceSearcher.setUserDefinedLabel("Reference");
referenceSearcher.setSiteRestriction("http://developer.android.com/reference/");
blogSearcher = new google.search.WebSearch();
blogSearcher.setUserDefinedLabel("Blog");
blogSearcher.setSiteRestriction("http://android-developers.blogspot.com");
groupsSearcher = new google.search.WebSearch();
groupsSearcher.setUserDefinedLabel("Developer Groups");
groupsSearcher.setSiteRestriction("001283715400630100512:ggqrtvkztwm");
sourceSiteSearcher = new google.search.WebSearch();
sourceSiteSearcher.setUserDefinedLabel("Android Source");
sourceSiteSearcher.setSiteRestriction("http://source.android.com");
homeSiteSearcher = new google.search.WebSearch();
homeSiteSearcher.setUserDefinedLabel("Android Home");
homeSiteSearcher.setSiteRestriction("http://www.android.com");
// add each searcher to the search control
searchControl.addSearcher(devSiteSearcher, searchOptions);
searchControl.addSearcher(devGuideSearcher, searchOptions);
searchControl.addSearcher(referenceSearcher, searchOptions);
searchControl.addSearcher(groupsSearcher, searchOptions);
searchControl.addSearcher(sourceSiteSearcher, searchOptions);
searchControl.addSearcher(blogSearcher, searchOptions);
// configure result options
searchControl.setResultSetSize(google.search.Search.LARGE_RESULTSET);
searchControl.setLinkTarget(google.search.Search.LINK_TARGET_SELF);
searchControl.setTimeoutInterval(google.search.SearchControl.TIMEOUT_LONG);
searchControl.setNoResultsString(google.search.SearchControl.NO_RESULTS_DEFAULT_STRING);
// upon ajax search, refresh the url and search title
searchControl.setSearchStartingCallback(this, function(control, searcher, query) {
// save the tab index from the hash
tabIndex = location.hash.split("&t=")[1];
$("#searchTitle").html("search results for <em>" + escapeHTML(query) + "</em>");
$.history.add('q=' + query + '&t=' + tabIndex);
openTab();
});
// draw the search results box
searchControl.draw(document.getElementById("leftSearchControl"), drawOptions);
// get query and execute the search
if (location.hash.indexOf("&t=") != -1) {
searchControl.execute(decodeURI(getQuery(location.hash)));
}
document.getElementById("search_autocomplete").focus();
addTabListeners();
}
// End of OnLoad
google.setOnLoadCallback(OnLoad, true);
// when an event on the browser history occurs (back, forward, load) perform a search
$(window).history(function(e, hash) {
var query = decodeURI(getQuery(hash));
searchControl.execute(query);
$("#searchTitle").html("search results for <em>" + escapeHTML(query) + "</em>");
});
// forcefully regain key-up event control (previously jacked by search api)
$("#search_autocomplete").keyup(function(event) {
return search_changed(event, false, '/');
});
// open a tab, specified by its array position
function openTab() {
tabIndex = location.hash.split("&t=")[1];
// show the appropriate tab
var tabHeaders = $(".gsc-tabHeader");
$(tabHeaders[tabIndex]).click();
}
// add event listeners to each tab so we can track the browser history
function addTabListeners() {
var tabHeaders = $(".gsc-tabHeader");
for (var i = 0; i < tabHeaders.length; i++) {
$(tabHeaders[i]).attr("id",i).click(function() {
var tabHeaders = $(".gsc-tabHeader");
var tabIndex = $(this).attr("id");
$.history.add('q=' + getQuery(location.hash) + '&t=' + tabIndex); // update the hash with the new tab
});
}
}
function getQuery(hash) {
var hashParts = hash.split('&t=');
var queryParts = hashParts[0].split('=');
return queryParts[1];
}
/* returns the given string with all HTML brackets converted to entities
TODO: move this to the site's JS library */
function escapeHTML(string) {
return string.replace(/</g,"<")
.replace(/>/g,">");
}
</script>
<div id="mainBodyFixed" style="width:auto; margin:20px">
<h2 id="searchTitle">search results</h2>
<img src="{@docRoot}assets/images/hr_gray_main.jpg" />
<div><br /></div>
<div id="leftSearchControl" class="search-control">Loading...</div>
</div>
|