From 64f9c40a220c4e4a23c9c9d4630db825f5e5ddc9 Mon Sep 17 00:00:00 2001 From: Kevin Abel <kabel2@unl.edu> Date: Tue, 16 Aug 2011 16:30:36 +0000 Subject: [PATCH] Refactored the searchInit function to utilize a standard form rather than google's deprecated gSearchForm. Uses the onSearchStart callback to chain the peoplefinder and local searches. Removed unused functions. --- www/searchFunc.js | 183 ++++++++++++++++++++++++---------------------- 1 file changed, 95 insertions(+), 88 deletions(-) diff --git a/www/searchFunc.js b/www/searchFunc.js index 969a29a..c2e129a 100644 --- a/www/searchFunc.js +++ b/www/searchFunc.js @@ -6,42 +6,66 @@ function searchInit() { UNL_Search.peoplefinderCache = new UNL_Search.Cache(); //Parse the querystring for q - var qs = location.search.substring(1,location.search.length); - qs = qs.replace(/\+/g, ' '); + var qs = window.location.search.substr(1); var args = qs.split('&'); UNL_Search.query = ""; - for (var i=0;i<args.length;i++) { + for (var i = 0; i < args.length; i++) { var pair = args[i].split('='); - var name = unescape(pair[0]); - if (name == "q") { + if (decodeURIComponent(pair[0]) == "q") { if (pair.length == 2) { - UNL_Search.query = unescape(pair[1]) + UNL_Search.query = decodeURIComponent(pair[1].replace(/\+/g, ' ')); } break; } } - UNL_Search.unl_search = new google.search.CustomSearchControl("015236299699564929946:nk1siew10ie"); + var unl_search = new google.search.CustomSearchControl("015236299699564929946:nk1siew10ie"); + unl_search.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET); + unl_search.setSearchCompleteCallback(UNL_Search, UNL_Search.onSearchComplete); + unl_search.setSearchStartingCallback(UNL_Search, UNL_Search.onSearchStart); - UNL_Search.unl_search.draw('unl_results'); + UNL_Search.unl_search = unl_search; + + drawOp = new google.search.DrawOptions(); + drawOp.enableSearchResultsOnly(); + + unl_search.draw('unl_results', drawOp); if (UNL_Search.do_local_search) { - UNL_Search.local_search = new google.search.CustomSearchControl(UNL_Search.local_search_context); - UNL_Search.local_search.setResultSetSize('small'); - UNL_Search.local_search.draw('local_results'); + var local_search = new google.search.CustomSearchControl(UNL_Search.local_search_context); + local_search.setResultSetSize('small'); + local_search.setSearchCompleteCallback(UNL_Search, UNL_Search.onSearchComplete); + local_search.draw('local_results', drawOp); + UNL_Search.local_search = local_search; } - - var gSearchForm = new GSearchForm(false, document.getElementById("searchform")); - gSearchForm.setOnSubmitCallback(UNL_Search, UNL_Search.doQuery); - gSearchForm.input.value = (UNL_Search.query ? UNL_Search.query : ""); + + WDN.loadJQuery(function() { + var $ = WDN.jQuery; + $('#search_q').attr('autocomplete', 'off').val(UNL_Search.query); + $('#searchform form').submit(function() { + var q = $.trim($('#search_q').val()); + UNL_Search.query = q; + UNL_Search.pfCancelFlag = false; + if (q !== '') { + unl_search.execute(q); + } else { + unl_search.cancelSearch(); + unl_search.clearAllResults(); + if (UNL_Search.do_local_search) { + local_search.cancelSearch(); + local_search.clearAllResults(); + } + UNL_Search.pfCancelFlag = true; + $('#ppl_results').empty(); + } + + return false; + }); + }); // Execute an inital search - if (UNL_Search.query && UNL_Search.query != "") { - UNL_Search.doPeoplefinderQuery(UNL_Search.query); - UNL_Search.unl_search.execute(UNL_Search.query); - if (UNL_Search.do_local_search) { - UNL_Search.local_search.execute(UNL_Search.query); - } + if (UNL_Search.query) { + unl_search.execute(UNL_Search.query); } } @@ -60,8 +84,8 @@ UNL_Search.do_local_search = false; UNL_Search.unl_search = null; UNL_Search.local_search = null; UNL_Search.local_search_context = null; -UNL_Search.scrolldelay = null; UNL_Search.peoplefinderCache = null; +UNL_Search.pfCancelFlag = false; //Caching Class // @@ -84,62 +108,61 @@ UNL_Search.Cache.prototype.get = function (key) { return val; }; -UNL_Search.handleUNLResults = function () { - UNL_Search.handleResults('unl_results', UNL_Search.unl_search); +UNL_Search.onSearchStart = function(control, searcher, query) { + UNL_Search.doPeoplefinderQuery(query); + if (UNL_Search.do_local_search) { + UNL_Search.local_search.execute(query); + } + UNL_Search.trackQuery(control, searcher, query); }; -UNL_Search.handleLocalResults = function () { - UNL_Search.handleResults('local_results', UNL_Search.local_search); -}; +UNL_Search.onSearchComplete = function(control, searcher) { + var $ = WDN.jQuery; + /* The more URL no longer works on google's host + if (searcher && searcher.cursor && searcher.cursor.pages.length >= 8) { + var $moreDiv = $("<div />").html('More…').addClass('gsc-cursor-page').click(function() { + window.location.href = searcher.cursor.moreResultsUrl; + return false; + }); + $('.gsc-cursor-box .gsc-cursor', control.root).append($moreDiv); + } + */ + + if (searcher.cursor.estimatedResultCount) { + var $resultHead = $("<div />").addClass('result_head').text('About ' + searcher.cursor.estimatedResultCount + ' results'); + $('.gsc-results', control.root).before($resultHead); + } + + if (mobileSearch) { //if we're doing a mobile search, rewrite link URLs to use mobile proxy + $('a.gs-title', control.root).each(function() { + $(this).attr('href', function(i, val) { + return 'http://m.unl.edu/?view=proxy&u=' + encodeURIComponent(val); + }) + }); + } +} -UNL_Search.handleResults = function (result_div, searchobj) { - var resultsDIV = document.getElementById(result_div); +UNL_Search.trackQuery = function(control, searcher, query) { + var loc = document.location; + var url = [ + loc.pathname, + loc.search, + loc.search ? '&' : '?', + 'q=', + encodeURIComponent(query) + ].join(''); - if (searchobj.results && searchobj.results.length > 0) { - resultsDIV.innerHTML = ''; - WDN.jQuery(resultsDIV).css('background', 'none'); - //var resultHead = '<p>Results <strong>' + (1 + 8 * searchobj.cursor.currentPageIndex) + '</strong> - <strong>' + (8 + 8 * searchobj.cursor.currentPageIndex) + '</strong> of about <strong>' + searchobj.cursor.estimatedResultCount + '</strong> for <em>' + query + '</em></p>'; - //resultsDIV.innerHTML += resultHead; - for (var i = 0; i < searchobj.results.length; i++) { - if (i % 2 != 0) { - searchobj.results[i].html.className += " alt"; - } - resultsDIV.appendChild(searchobj.results[i].html); - } - if (mobileSearch) { //if we're doing a mobile search, rewrite link URLs to use mobile proxy - WDN.jQuery(resultsDIV).find('a.gs-title').each(function(){ - //href= WDN.jQuery(this).attr('href'); - WDN.jQuery(this).attr('href', function(i, val){ - return 'http://m.unl.edu/?view=proxy&u='+val; - }); - }); - } - var nav = document.createElement("ul"); - nav.className = "wdn_pagination"; - var search_name = 'unl_search'; - if (result_div.substring(0,5) == 'local') { - search_name = 'local_search'; - } - for (var i = 0; i < searchobj.cursor.pages.length; i++) { - WDN.loadCSS('/wdn/templates_3.0/css/content/pagination.css'); - var pageText = ''; - if (searchobj.cursor.currentPageIndex != i) { - pageText += '<li><a onclick="UNL_Search.'+search_name+'.gotoPage(' + i + '); return false;" href="#">' + searchobj.cursor.pages[i].label + '</a></li>'; - } else { - pageText += '<li class="selected">'+searchobj.cursor.pages[i].label + '</li>'; - } - nav.innerHTML += pageText; - } - if (searchobj.cursor.pages.length >= 8) { - nav.innerHTML += '<li><a href="' + searchobj.cursor.moreResultsUrl + '">More Results >></a></li>'; + try { + if (typeof WDN.analytics !== 'undefined') { + WDN.analytics.callTrackPageview(url); + } else { + _gaq.push(["_trackPageview", url]); } - resultsDIV.appendChild(nav); - } else { - WDN.jQuery(resultsDIV).html('<p>No results found.</p>'); + } catch (e) { + // do nothing } }; - UNL_Search.doPeoplefinderQuery = function (val) { var cacheData = this.peoplefinderCache.get(val) if (cacheData) { @@ -156,23 +179,7 @@ UNL_Search.doPeoplefinderQuery = function (val) { }; UNL_Search.handlePeoplefinderResults = function (peoplefinderText) { - document.getElementById("ppl_results").innerHTML = peoplefinderText; -}; - -UNL_Search.doQuery = function (form) { - if (form.input.value != "") { - this.query = form.input.value; - this.doPeoplefinderQuery(form.input.value); - if (this.do_local_search) { - this.local_search.execute(form.input.value); - } - this.unl_search.execute(form.input.value); - } else { - document.getElementById("searchcontrol").innerHTML = ''; - document.getElementById("ppl_results").innerHTML = ''; + if (!UNL_Search.pfCancelFlag) { + document.getElementById("ppl_results").innerHTML = peoplefinderText; } - - return false; }; - - -- GitLab