Skip to content

Commit

Permalink
Resolved issue twitter#22. Added selectionCallback(query, selectedIte…
Browse files Browse the repository at this point in the history
…m) to dataset and also a 'selection' event that fires when an item is selected.
  • Loading branch information
justindarc committed Feb 27, 2013
1 parent 7a33ab3 commit ea21946
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 3 deletions.
3 changes: 2 additions & 1 deletion src/js/dropdown_view.js
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,8 @@ var DropdownView = (function() {
return {
value: $suggestion.data('value'),
query: $suggestions.data('query'),
dataset: $suggestions.data('dataset')
dataset: $suggestions.data('dataset'),
index: $suggestions.children().index($suggestion)
};
}
})();
3 changes: 2 additions & 1 deletion src/js/typeahead.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,8 @@
limit: datasetDef.limit,
template: datasetDef.template,
engine: datasetDef.engine,
getSuggestions: dataset.getSuggestions
getSuggestions: dataset.getSuggestions,
selectionCallback: datasetDef.selectionCallback
};
});

Expand Down
18 changes: 17 additions & 1 deletion src/js/typeahead_view.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ var TypeaheadView = (function() {
dropdown: '<ol class="tt-dropdown-menu tt-is-empty"></ol>'
};

var renderedSuggestions = [];

// constructor
// -----------

Expand Down Expand Up @@ -172,6 +174,7 @@ var TypeaheadView = (function() {
},

_handleSelection: function(e) {
var query, selectedItem, dataset, selectionCallback;
var byClick = e.type === 'select',
suggestionData = byClick ?
e.data : this.dropdownView.getSuggestionUnderCursor();
Expand All @@ -188,6 +191,19 @@ var TypeaheadView = (function() {
// focus is not a synchronous event in ie, so we deal with it
byClick && utils.isMsie() ?
setTimeout(this.dropdownView.hide, 0) : this.dropdownView.hide();

query = suggestionData.query;
selectedItem = renderedSuggestions[suggestionData.index] || renderedSuggestions[0];

selectionCallback = this.datasets[suggestionData.dataset].selectionCallback;
if (selectionCallback && typeof selectionCallback === 'function') {
selectionCallback(query, selectedItem);
}

this.inputView.$input.trigger(jQuery.Event('selection', {
query: query,
selectedItem: selectedItem
}));
}
},

Expand All @@ -205,7 +221,7 @@ var TypeaheadView = (function() {
_renderSuggestions: function(query, dataset, suggestions) {
if (query !== this.inputView.getQuery()) { return; }

suggestions = suggestions.slice(0, dataset.limit);
suggestions = renderedSuggestions = suggestions.slice(0, dataset.limit);
this.dropdownView.renderSuggestions(query, dataset, suggestions);
},

Expand Down

0 comments on commit ea21946

Please sign in to comment.