summaryrefslogtreecommitdiffstats
path: root/docs/html/search.jd
blob: d0e7478b51eb775d1d08768ef227f9eb789fe0ff (plain)
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,"&lt;")
                     .replace(/>/g,"&gt;");
      }

</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>