aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Thornton <[email protected]>2012-01-27 22:27:06 -0800
committerJacob Thornton <[email protected]>2012-01-27 22:27:06 -0800
commit7cbb5868259ef95aacbd16812c25ac73ea76ca2d (patch)
treeb93148cb5befef147b4cc34f084ef1b74181d4f3
parente726b231ba0c0c0effb13c9458842d64bda0e58c (diff)
downloadbootstrap-7cbb5868259ef95aacbd16812c25ac73ea76ca2d.tar.xz
bootstrap-7cbb5868259ef95aacbd16812c25ac73ea76ca2d.zip
move the matcher and sorter into the options - encourage people to override them...
-rw-r--r--docs/javascript.html17
-rw-r--r--docs/templates/pages/javascript.mustache17
-rw-r--r--js/bootstrap-typeahead.js21
3 files changed, 44 insertions, 11 deletions
diff --git a/docs/javascript.html b/docs/javascript.html
index d48924115..53130bd16 100644
--- a/docs/javascript.html
+++ b/docs/javascript.html
@@ -1353,7 +1353,7 @@ $('.myCarousel').carousel({
<tr>
<th style="width: 100px;">Name</th>
<th style="width: 50px;">type</th>
- <th style="width: 50px;">default</th>
+ <th style="width: 90px;">default</th>
<th>description</th>
</tr>
</thead>
@@ -1370,6 +1370,18 @@ $('.myCarousel').carousel({
<td>8</td>
<td>The max number of items to display in the dropdown.</td>
</tr>
+ <tr>
+ <td>matcher</td>
+ <td>function</td>
+ <td>case sensitive</td>
+ <td>The method used to determine if a query matches an item. Accepts a single argument, the <code>item</code> against which to test the query. Access the current query with <code>this.query</code>. Return a boolean <code>true</code> if query is a match.</td>
+ </tr>
+ <tr>
+ <td>sorter</td>
+ <td>function</td>
+ <td>no sort</td>
+ <td>Method used to sort autocomplete results. Accepts a single argument <code>items</code> and has the scope of the typeahead instance. Reference the current query with <code>this.query</code>.</td>
+ </tr>
</tbody>
</table>
@@ -1378,6 +1390,9 @@ $('.myCarousel').carousel({
<pre class="prettyprint linenums">
&lt;input type="text" data-provide="typeahead"&gt;
</pre>
+ <h3>Methods</h3>
+ <h4>.typeahead(options)</h4>
+ <p>Initializes an input with a typahead.</p>
</div>
</div>
</section>
diff --git a/docs/templates/pages/javascript.mustache b/docs/templates/pages/javascript.mustache
index 9113c1776..3c7a3b101 100644
--- a/docs/templates/pages/javascript.mustache
+++ b/docs/templates/pages/javascript.mustache
@@ -1288,7 +1288,7 @@ $('.myCarousel').carousel({
<tr>
<th style="width: 100px;">{{_i}}Name{{/i}}</th>
<th style="width: 50px;">{{_i}}type{{/i}}</th>
- <th style="width: 50px;">{{_i}}default{{/i}}</th>
+ <th style="width: 90px;">{{_i}}default{{/i}}</th>
<th>{{_i}}description{{/i}}</th>
</tr>
</thead>
@@ -1305,6 +1305,18 @@ $('.myCarousel').carousel({
<td>8</td>
<td>{{_i}}The max number of items to display in the dropdown.{{/i}}</td>
</tr>
+ <tr>
+ <td>{{_i}}matcher{{/i}}</td>
+ <td>{{_i}}function{{/i}}</td>
+ <td>case sensitive</td>
+ <td>{{_i}}The method used to determine if a query matches an item. Accepts a single argument, the <code>item</code> against which to test the query. Access the current query with <code>this.query</code>. Return a boolean <code>true</code> if query is a match.{{/i}}</td>
+ </tr>
+ <tr>
+ <td>{{_i}}sorter{{/i}}</td>
+ <td>{{_i}}function{{/i}}</td>
+ <td>no sort</td>
+ <td>{{_i}}Method used to sort autocomplete results. Accepts a single argument <code>items</code> and has the scope of the typeahead instance. Reference the current query with <code>this.query</code>.{{/i}}</td>
+ </tr>
</tbody>
</table>
@@ -1313,6 +1325,9 @@ $('.myCarousel').carousel({
<pre class="prettyprint linenums">
&lt;input type="text" data-provide="typeahead"&gt;
</pre>
+ <h3>{{_i}}Methods{{/i}}</h3>
+ <h4>.typeahead({{_i}}options{{/i}})</h4>
+ <p>{{_i}}Initializes an input with a typahead.{{/i}}</p>
</div>
</div>
</section> \ No newline at end of file
diff --git a/js/bootstrap-typeahead.js b/js/bootstrap-typeahead.js
index b4d839c93..39331816e 100644
--- a/js/bootstrap-typeahead.js
+++ b/js/bootstrap-typeahead.js
@@ -24,6 +24,8 @@
var Typeahead = function ( element, options ) {
this.$element = $(element)
this.options = $.extend({}, $.fn.typeahead.defaults, options)
+ this.matcher = this.options.matcher
+ this.sorter = this.options.sorter
this.$menu = $(this.options.menu).appendTo('body')
this.source = this.options.source
this.shown = false
@@ -34,11 +36,6 @@
constructor: Typeahead
- , matcher: function (item, query) {
- // ;_; http://jsperf.com/asdfdfasdfa
- return ~item.toLowerCase().indexOf(query)
- }
-
, select: function () {
var val = this.$menu.find('.active').attr('data-value')
this.$element.val(val)
@@ -77,12 +74,12 @@
return this.shown ? this.hide() : this
}
- q = this.query.toLowerCase()
-
- items = jQuery.grep(this.source, function (item) {
- if (that.matcher(item, q)) return item
+ items = $.grep(this.source, function (item) {
+ if (that.matcher(item)) return item
})
+ items = this.sorter(items)
+
if (!items.length) {
return this.shown ? this.hide() : this
}
@@ -233,6 +230,12 @@
, items: 8
, menu: '<ul class="typeahead dropdown-menu"></ul>'
, item: '<li><a href="#"></a></li>'
+ , matcher: function (item) {
+ return ~item.indexOf(this.query)
+ }
+ , sorter: function (items) {
+ return items
+ }
}
$.fn.typeahead.Constructor = Typeahead