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