mirror of
https://github.com/wassname/nvatom.git
synced 2026-06-27 16:10:36 +08:00
Modify a filtering function from FuzzyFilter to our own
Add a feature to read markdown files only Why we ditch FuzzyFilter? 1. It doesn't give a priority on the title match 2. It seems like to give unexpected search scores in a very, very long text
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
path = require 'path'
|
||||
fs = require 'fs'
|
||||
fsPlus = require 'fs-plus'
|
||||
{$, $$, SelectListView} = require 'atom'
|
||||
|
||||
module.exports =
|
||||
@@ -11,6 +12,33 @@ class NotationalVelocityView extends SelectListView
|
||||
@addClass('notational-velocity from-top overlay')
|
||||
@loadData()
|
||||
|
||||
filter: (filterQuery) ->
|
||||
queries = []
|
||||
|
||||
for queryStr in filterQuery.split(' ')
|
||||
if queryStr.length
|
||||
queries.push(new RegExp(queryStr, 'gim'))
|
||||
|
||||
perfs = []
|
||||
for item,i in @items
|
||||
perfs.push({score: 1, index: i})
|
||||
|
||||
for query in queries
|
||||
for perf in perfs
|
||||
result = @items[perf.index].filetext.match(query)
|
||||
if result == null
|
||||
perf.score = 0
|
||||
continue
|
||||
perf.score *= result.length
|
||||
result = @items[perf.index].title.match(query)
|
||||
if result != null
|
||||
perf.score *= 10
|
||||
perfs = perfs.filter (x) -> x.score > 0
|
||||
|
||||
perfs.sort (a, b) -> if a.score > b.score then -1 else 1
|
||||
|
||||
return (@items[p.index] for p in perfs)
|
||||
|
||||
loadData: ->
|
||||
@data = []
|
||||
|
||||
@@ -19,6 +47,9 @@ class NotationalVelocityView extends SelectListView
|
||||
|
||||
for filename in fs.readdirSync(directory)
|
||||
filepath = path.join(directory, filename)
|
||||
if !fsPlus.isMarkdownExtension(path.extname(filename))
|
||||
continue
|
||||
|
||||
filetext = fs.readFileSync(filepath, 'utf8')
|
||||
|
||||
title = ''
|
||||
@@ -93,3 +124,28 @@ class NotationalVelocityView extends SelectListView
|
||||
# super(view)
|
||||
# return unless view.length
|
||||
# console.log @list.indexOf(@list.find('.selected'))
|
||||
|
||||
populateList: ->
|
||||
console.log 'populateList'
|
||||
return unless @items?
|
||||
|
||||
filterQuery = @getFilterQuery()
|
||||
if filterQuery.length
|
||||
filteredItems = @filter(filterQuery)
|
||||
#filteredItems = fuzzyFilter(@items, filterQuery, key: @getFilterKey())
|
||||
else
|
||||
filteredItems = @items
|
||||
|
||||
@list.empty()
|
||||
if filteredItems.length
|
||||
@setError(null)
|
||||
|
||||
for i in [0...Math.min(filteredItems.length, @maxItems)]
|
||||
item = filteredItems[i]
|
||||
itemView = $(@viewForItem(item))
|
||||
itemView.data('select-list-item', item)
|
||||
@list.append(itemView)
|
||||
|
||||
@selectItemView(@list.find('li:first'))
|
||||
else
|
||||
@setError(@getEmptyMessage(@items.length, filteredItems.length))
|
||||
|
||||
Reference in New Issue
Block a user