diff --git a/lib/notational-velocity-view.coffee b/lib/notational-velocity-view.coffee index 149d469..288bb29 100644 --- a/lib/notational-velocity-view.coffee +++ b/lib/notational-velocity-view.coffee @@ -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))