diff --git a/www/js/search.js b/www/js/search.js index 071f7b832d00305f5f90a49c9fedb57e505750cd..a94e16e99fc65c8bcd11f2efec346fea00e09b75 100644 --- a/www/js/search.js +++ b/www/js/search.js @@ -16,6 +16,7 @@ resultSel = '.search-results', googleSel = '.google-results', + evtStateChange = 'statechange', wrapperMain = '#search_wrapper', wrapperWeb = '#search_results', wrapperDir = '#directory_results', @@ -71,14 +72,28 @@ }; Directory.prototype._renderState = function(duration) { var $innerRes = $('.results', $(this._renderTo)), + $showRes, failState, depFilter = '.departments'; + + if (!$innerRes.length) { + return; + } $innerRes.slideUp(duration); if (this._viewState === 0) { - $innerRes.not(depFilter).slideDown(); + $showRes = $innerRes.not(depFilter); + failState = 1; } else { - $innerRes.filter(depFilter).slideDown(); + $showRes = $innerRes.filter(depFilter); + failState = 0; + } + + if (!$showRes.length && typeof duration !== "undefined") { + this.changeViewState(failState); + return; } + + $showRes.slideDown(); }; Directory.prototype.cancelSearch = function() { this._searchCanceled = true; @@ -106,8 +121,12 @@ return; } + var prevState = this._viewState; + this._viewState = state; this._renderState(); + + $(this._renderTo).trigger(evtStateChange, [state, prevState]); }; Directory.prototype.clearAllResults = function() { $(this._renderTo).empty(); @@ -205,11 +224,22 @@ $(function() { var $q = $(inputSel), + resSel = '.results-group', tabsSel = '.result-tab', selCls = 'selected', stateClsPfx = 'state-', $resTabs = $('.result-tab'), + tabStateChange = function(e, state, prevState) { + var $tab = $(this).find(tabsSel); + + e.stopPropagation(); + + $tab.removeClass(stateClsPfx + prevState); + $tab.addClass(stateClsPfx + state); + + $tab.children().removeClass(selCls).eq(state).addClass(selCls); + }, googleOrigin = /^https?:\/\/www\.google\.com$/, @@ -247,21 +277,13 @@ return; } - var i = $(this).index(), - j = $(this).siblings('.' + selCls).index(), - $tab = $(this).closest(tabsSel), - $par = $(this).parents('.results-group'); - - $tab.removeClass(stateClsPfx + j); - $tab.addClass(stateClsPfx + i); - - $(this).siblings().removeClass(selCls); - $(this).addClass(selCls); + var i = $(this).index(), + $par = $(this).parents(resSel); if ($par.is(wrapperDir)) { directorySearch.changeViewState(i); } else if ($par.is(wrapperWeb)) { - $(activeSearch.root).closest(googleSel).slideUp(); + $(activeSearch.root).closest(googleSel).slideUp().trigger(evtStateChange, [i, 0 + !i]); if (i === 0) { activeSearch = localSearch; } else { @@ -272,6 +294,8 @@ } }); + $(resSel).on(evtStateChange, tabStateChange); + // listen for the submit event $(formSel).submit(function(e) { e.preventDefault();