diff --git a/app/assets/javascripts/app/controllers/navigation.coffee b/app/assets/javascripts/app/controllers/navigation.coffee index 4464bf1e7..55ad1234c 100644 --- a/app/assets/javascripts/app/controllers/navigation.coffee +++ b/app/assets/javascripts/app/controllers/navigation.coffee @@ -15,7 +15,7 @@ class App.Navigation extends App.ControllerWidgetPermanent 'focus #global-search': 'searchFocus' 'blur #global-search': 'searchBlur' 'keyup #global-search': 'listNavigate' - 'click .js-global-search-result': 'emptyAndClose' + 'click .js-global-search-result': 'andClose' 'click .js-details-link': 'openExtendedSearch' 'change .js-menu .js-switch input': 'switch' @@ -156,31 +156,31 @@ class App.Navigation extends App.ControllerWidgetPermanent type: 'personal' ) - renderResult: (result = [], noChange) => - if noChange - return + renderResult: (result = []) => - # show no results placeholder if no result exists + # remove result if not result exists if _.isEmpty(result) - @searchContainer.addClass('no-match') - @searchResult.html(App.view('navigation/no_result')()) + @searchContainer.removeClass('open') + @globalSearch.close() + @searchResult.html('') return - @searchContainer.removeClass('no-match') - # build markup html = App.view('navigation/result')( result: result ) @searchResult.html(html) + # show result list + @searchContainer.addClass('open') + # start ticket popups @ticketPopups() # start user popups @userPopups() - # start organization popups + # start oorganization popups @organizationPopups() render: -> @@ -205,22 +205,26 @@ class App.Navigation extends App.ControllerWidgetPermanent searchFocus: (e) => @query = '' # reset query cache - @anyPopoversDestroy() @searchContainer.addClass('focused') + @anyPopoversDestroy() + @search() searchBlur: (e) => + # delay to be able to click x update = => query = @searchInput.val().trim() if !query @emptyAndClose() return + @searchContainer.removeClass('focused') @delay(update, 100, 'removeFocused') listNavigate: (e) => if e.keyCode is 27 # close on esc @emptyAndClose() + @searchInput.blur() return else if e.keyCode is 38 # up @nudge(e, -1) @@ -229,13 +233,14 @@ class App.Navigation extends App.ControllerWidgetPermanent @nudge(e, 1) return else if e.keyCode is 13 # enter - @searchInput.blur() - href = @$('.global-search-result .nav-tab.is-hover').attr('href') - if href - @navigate(href) - else + if @$('.global-search-menu .js-details-link.is-hover').get(0) @openExtendedSearch() + return + href = @$('.global-search-result .nav-tab.is-hover').attr('href') + return if !href + @navigate(href) @emptyAndClose() + @searchInput.blur() return # on other keys, show result @@ -279,33 +284,25 @@ class App.Navigation extends App.ControllerWidgetPermanent @scrollToIfNeeded(prev, false) emptyAndClose: => - @query = '' @searchInput.val('') - @searchContainer.removeClass('focused filled open no-match') + @searchContainer.removeClass('filled').removeClass('open').removeClass('focused') @globalSearch.close() + + # remove not needed popovers @delay(@anyPopoversDestroy, 100, 'removePopovers') andClose: => - @query = '' @searchInput.blur() - @searchContainer.removeClass('open no-match') + @searchContainer.removeClass('open') @globalSearch.close() @delay(@anyPopoversDestroy, 100, 'removePopovers') search: => query = @searchInput.val().trim() - @searchContainer.toggleClass('filled', !!query) - # if we started a new search and already typed something in - if @query == '' and query != '' - @searchContainer.addClass('open no-match') - @searchResult.html(App.view('navigation/search_placeholder')()) - + return if !query + return if query is @query @query = query - - if @query == '' - @searchContainer.removeClass('open') - return - + @searchContainer.toggleClass('filled', !!@query) @globalSearch.search(query: @query) filterNavbar: (values, user, parent = null) -> @@ -405,11 +402,11 @@ class App.Navigation extends App.ControllerWidgetPermanent url = params.url type = params.type if type is 'menu' - @$('.js-menu .is-active').removeClass('is-active') + @$('.js-menu .is-active, .js-details-link.is-active').removeClass('is-active') else @$('.is-active').removeClass('is-active') return if !url || url is '#' - @$(".js-menu [href=\"#{url}\"], .tasks [href=\"#{url}\"]").addClass('is-active') + @$("[href=\"#{url}\"]").addClass('is-active') recentViewNavbarItemsRebuild: => diff --git a/app/assets/javascripts/app/controllers/search.coffee b/app/assets/javascripts/app/controllers/search.coffee index 1e252214c..4c66dcf2f 100644 --- a/app/assets/javascripts/app/controllers/search.coffee +++ b/app/assets/javascripts/app/controllers/search.coffee @@ -125,8 +125,7 @@ class App.Search extends App.Controller @globalSearch.search(query: @query) - renderResult: (result = [], noChange) => - return if noChange + renderResult: (result = []) => @result = result for tab in @tabs count = 0 diff --git a/app/assets/javascripts/app/lib/app_post/global_search.coffee b/app/assets/javascripts/app/lib/app_post/global_search.coffee index 1e115fdf1..2724624fe 100644 --- a/app/assets/javascripts/app/lib/app_post/global_search.coffee +++ b/app/assets/javascripts/app/lib/app_post/global_search.coffee @@ -45,12 +45,10 @@ class App.GlobalSearch extends App.Controller renderTry: (result, query) => # if result hasn't changed, do not rerender + diff = false if @lastQuery is query && @searchResultCache[query] diff = difference(@searchResultCache[query].result, result) - if _.isEmpty(diff) - @render(result, true) - return - + return if diff isnt false && _.isEmpty(diff) @lastQuery = query # cache search result diff --git a/app/assets/javascripts/app/views/navigation/no_result.jst.eco b/app/assets/javascripts/app/views/navigation/no_result.jst.eco deleted file mode 100644 index b335db81a..000000000 --- a/app/assets/javascripts/app/views/navigation/no_result.jst.eco +++ /dev/null @@ -1,4 +0,0 @@ -