1 Commits
Author SHA1 Message Date
Seongjae Lee ce9869362a Make title search independent from DocQuery search 2015-09-18 00:14:52 -07:00
+59 -37
View File
@@ -38,33 +38,6 @@ class NotationalVelocityView extends SelectListView
@prevCursorPosition = currCursorPosition @prevCursorPosition = currCursorPosition
return isCursorProceeded return isCursorProceeded
selectItem: (filteredItems, filterQuery) ->
isCursorProceeded = @isCursorProceeded()
for item in filteredItems
if item.title.toLowerCase() is filterQuery.toLowerCase()
# autoselect
n = filteredItems.indexOf(item) + 1
@selectItemView(@list.find("li:nth-child(#{n})"))
return
for item in filteredItems
if item.title.toLowerCase().startsWith(filterQuery.toLowerCase()) and isCursorProceeded
# autocomplete
@skipPopulateList = true
editor = @filterEditorView.model
editor.setText(filterQuery + item.title.slice(filterQuery.length))
editor.selectLeft(item.title.length - filterQuery.length)
# autoselect
n = filteredItems.indexOf(item) + 1
@selectItemView(@list.find("li:nth-child(#{n})"))
filter: (filterQuery) ->
if (filterQuery is "") or (filterQuery is undefined)
return @docQuery.documents
return @docQuery.search(filterQuery)
getFilterKey: -> getFilterKey: ->
'filetext' 'filetext'
@@ -136,24 +109,73 @@ class NotationalVelocityView extends SelectListView
selectedText = editor.getSelectedText() selectedText = editor.getSelectedText()
return fullText.substring(0, fullText.length - selectedText.length) return fullText.substring(0, fullText.length - selectedText.length)
filterByTitle: (filterQuery) ->
if (filterQuery is "") or (filterQuery is undefined)
return []
filterQuery = filterQuery.toLowerCase()
matchingNotes = []
filteredNotes = []
for note in @docQuery.documents
title = note.title.toLowerCase()
if title is filterQuery
matchingNotes.push(note)
else if filteredNotes.length < @maxItems and title.startsWith(filterQuery)
filteredNotes.push(note)
notes = matchingNotes.concat(filteredNotes)
if notes.length > @maxItems
notes = notes.slice(0, @maxItems)
return notes
filterByLunr: (filterQuery) ->
notes = []
if (filterQuery is "") or (filterQuery is undefined)
notes = @docQuery.documents
else
notes = @docQuery.search(filterQuery)
if notes.length > @maxItems
notes = notes.slice(0, @maxItems)
return notes
populateList: -> populateList: ->
filterQuery = @getFilterQuery() filterQuery = @getFilterQuery()
filteredItems = @filter(filterQuery) notesByTitle = @filterByTitle(filterQuery)
notesByLunr = @filterByLunr(filterQuery)
isCursorProceeded = @isCursorProceeded()
@list.empty() @list.empty()
if filteredItems.length if notesByTitle.length + notesByLunr.length == 0
@setError(null) @setError(@getEmptyMessage(@docQuery.documents.length, 0))
return
for i in [0...Math.min(filteredItems.length, @maxItems)] @setError(null)
item = filteredItems[i] for note in notesByTitle
itemView = $(@viewForItem(item)) itemView = $(@viewForItem(note))
itemView.data('select-list-item', item) itemView.data('select-list-item', note)
@list.append(itemView) @list.append(itemView)
@selectItem(filteredItems, filterQuery) if notesByTitle.length
# autoselect
@selectItemView(@list.find("li:nth-child(1)"))
else #autocomplete
@setError(@getEmptyMessage(@docQuery.documents.length, filteredItems.length)) note = notesByTitle[0]
if note.title.toLowerCase() is filterQuery.toLowerCase() or isCursorProceeded
@skipPopulateList = true
editor = @filterEditorView.model
editor.setText(filterQuery + note.title.slice(filterQuery.length))
editor.selectLeft(note.title.length - filterQuery.length)
if @list.length >= @maxItems
return
for note in notesByLunr
if @list.length >= @maxItems
break
if filterQuery?.length and note.title.toLowerCase().startsWith(filterQuery.toLowerCase())
continue
itemView = $(@viewForItem(note))
itemView.data('select-list-item', note)
@list.append(itemView)
schedulePopulateList: -> schedulePopulateList: ->
unless @skipPopulateList unless @skipPopulateList