You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.1 KiB
42 lines
1.1 KiB
var _ = require('underscore');
|
|
var $ = require('jquery');
|
|
var vent = require('vent');
|
|
var Backbone = require('backbone');
|
|
var jdu = require('jdu');
|
|
var ArtistCollection = require('../Artist/ArtistCollection');
|
|
require('typeahead');
|
|
|
|
vent.on(vent.Hotkeys.NavbarSearch, function() {
|
|
$('.x-artist-search').focus();
|
|
});
|
|
|
|
var stringCleaner = function(text) {
|
|
return jdu.replace(text.toLowerCase());
|
|
};
|
|
|
|
var substringMatcher = function() {
|
|
|
|
return function findMatches (q, cb) {
|
|
var matches = _.select(ArtistCollection.toJSON(), function(artist) {
|
|
return stringCleaner(artist.name).indexOf(stringCleaner(q)) > -1;
|
|
});
|
|
cb(matches);
|
|
};
|
|
};
|
|
|
|
$.fn.bindSearch = function() {
|
|
$(this).typeahead({
|
|
hint : true,
|
|
minLength : 1
|
|
}, {
|
|
name : 'artist',
|
|
displayKey : 'name',
|
|
source : substringMatcher()
|
|
});
|
|
|
|
$(this).on('typeahead:selected typeahead:autocompleted', function(e, artist) {
|
|
this.blur();
|
|
$(this).val('');
|
|
Backbone.history.navigate('/artist/{0}'.format(artist.nameSlug), { trigger : true });
|
|
});
|
|
}; |