From cad624613c5d65a31622599ff6ec11248bd74a2f Mon Sep 17 00:00:00 2001 From: Thibaut Courouble Date: Sat, 27 Feb 2016 12:36:37 -0500 Subject: [PATCH] Improve search scope behavior Closes #360. --- assets/javascripts/views/search/search.coffee | 1 + assets/javascripts/views/search/search_scope.coffee | 10 ++++++++++ assets/javascripts/views/sidebar/doc_list.coffee | 9 +++++++++ assets/javascripts/views/sidebar/sidebar.coffee | 8 ++++++++ 4 files changed, 28 insertions(+) diff --git a/assets/javascripts/views/search/search.coffee b/assets/javascripts/views/search/search.coffee index 2e802fdc..addd030e 100644 --- a/assets/javascripts/views/search/search.coffee +++ b/assets/javascripts/views/search/search.coffee @@ -94,6 +94,7 @@ class app.views.Search extends app.View clear: -> @removeClass @constructor.activeClass @trigger 'clear' + return externalSearch: (url) -> if value = @value diff --git a/assets/javascripts/views/search/search_scope.coffee b/assets/javascripts/views/search/search_scope.coffee index 1d6d0e96..14274010 100644 --- a/assets/javascripts/views/search/search_scope.coffee +++ b/assets/javascripts/views/search/search_scope.coffee @@ -48,6 +48,8 @@ class app.views.SearchScope extends app.View return selectDoc: (doc) -> + previousDoc = @doc + return if doc is previousDoc @doc = doc @tag.textContent = doc.fullName @@ -56,9 +58,14 @@ class app.views.SearchScope extends app.View @input.removeAttribute 'placeholder' @input.value = @input.value[@input.selectionStart..] @input.style.paddingLeft = @tag.offsetWidth + 10 + 'px' + $.trigger @input, 'input' + @trigger 'change', @doc, previousDoc + return reset: => + return unless @doc + previousDoc = @doc @doc = null @tag.textContent = '' @@ -67,6 +74,9 @@ class app.views.SearchScope extends app.View @input.setAttribute 'placeholder', @placeholder @input.style.paddingLeft = '' + @trigger 'change', null, previousDoc + return + onKeydown: (event) => return if event.ctrlKey or event.metaKey or event.altKey or event.shiftKey diff --git a/assets/javascripts/views/sidebar/doc_list.coffee b/assets/javascripts/views/sidebar/doc_list.coffee index 0a8b2a5a..c0ae1acc 100644 --- a/assets/javascripts/views/sidebar/doc_list.coffee +++ b/assets/javascripts/views/sidebar/doc_list.coffee @@ -114,10 +114,15 @@ class app.views.DocList extends app.View reveal: (model) -> @openDoc model.doc @openType model.getType() if model.type + @focus model @paginateTo model @scrollTo model return + focus: (model) -> + @listFocus.focus @find("a[href='#{model.fullPath()}']") + return + revealCurrent: -> if model = app.router.context.type or app.router.context.entry @reveal model @@ -128,6 +133,10 @@ class app.views.DocList extends app.View @listFold.open @find("[data-slug='#{doc.slug}']") return + closeDoc: (doc) -> + @listFold.close @find("[data-slug='#{doc.slug}']") + return + openType: (type) -> @listFold.open @lists[type.doc.slug].find("[data-slug='#{type.slug}']") return diff --git a/assets/javascripts/views/sidebar/sidebar.coffee b/assets/javascripts/views/sidebar/sidebar.coffee index a9550160..86e6ace0 100644 --- a/assets/javascripts/views/sidebar/sidebar.coffee +++ b/assets/javascripts/views/sidebar/sidebar.coffee @@ -16,6 +16,8 @@ class app.views.Sidebar extends app.View @search .on 'searching', @showResults .on 'clear', @showDocList + .scope + .on 'change', @onScopeChange @results = new app.views.Results @, @search @docList = new app.views.DocList @@ -54,6 +56,12 @@ class app.views.Sidebar extends app.View reset: -> @showDocList true + return + + onScopeChange: (newDoc, previousDoc) => + @docList.closeDoc(previousDoc) if previousDoc + if newDoc then @docList.reveal(newDoc.toEntry()) else @scrollToTop() + return saveScrollPosition: -> if @view is @docList