Skip to content

Commit 93e28b2

Browse files
committed
Merge pull request #27 from alicoding/new
New search filter
2 parents 38b7304 + 0f33c07 commit 93e28b2

File tree

2 files changed

+83
-3
lines changed

2 files changed

+83
-3
lines changed

index.html

+16-3
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@
1111
<link href="css/normalize.css" rel="stylesheet">
1212
<link href="css/bootstrap.min.css" rel="stylesheet">
1313
<link href="css/main.css" rel="stylesheet">
14-
14+
<style>
15+
.filter-table .quick { margin-left: 0.5em; font-size: 0.8em; text-decoration: none; }
16+
.fitler-table .quick:hover { text-decoration: underline; }
17+
td.alt { background-color: #ffc; background-color: rgba(255, 255, 0, 0.2); }
18+
</style>
1519
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
1620
<!--[if lt IE 9]>
1721
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
@@ -76,9 +80,9 @@
7680
<div class="panel panel-default">
7781
<div class="panel-heading">By Component</div>
7882
<div class="panel-body">
79-
<input type="text" class="form-control" placeholder="Filter">
83+
8084
</div>
81-
<table id="stats-table" class="table tablesorter">
85+
<table id="stats-table" class="table tablesorter sieve">
8286
<thead>
8387
<tr>
8488
<th>Component</th>
@@ -109,6 +113,15 @@
109113
<script src="js/plugins.js"></script>
110114
<script src="js/vendor/bootstrap.min.js"></script>
111115
<script src="js/vendor/jquery.tablesorter.min.js"></script>
116+
<script src="js/vendor/jquery.filtertable.min.js"></script>
117+
<script>
118+
$(document).ready(function() {
119+
$("table.sieve").sieve();
120+
$( "input" ).addClass( "form-control" );
121+
$( "input" ).attr( "placeholder", "Search here" );
122+
});
123+
</script>
124+
112125
</body>
113126
</html>
114127

js/vendor/jquery.filtertable.min.js

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/*!
2+
* jQuery Sieve v0.3.0 (2013-04-04)
3+
* http://rmm5t.github.io/jquery-sieve/
4+
* Copyright (c) 2013 Ryan McGeary; Licensed MIT
5+
*/
6+
(function() {
7+
var $;
8+
9+
$ = jQuery;
10+
11+
$.fn.sieve = function(options) {
12+
var compact;
13+
compact = function(array) {
14+
var item, _i, _len, _results;
15+
_results = [];
16+
for (_i = 0, _len = array.length; _i < _len; _i++) {
17+
item = array[_i];
18+
if (item) {
19+
_results.push(item);
20+
}
21+
}
22+
return _results;
23+
};
24+
return this.each(function() {
25+
var container, searchBar, settings;
26+
container = $(this);
27+
settings = $.extend({
28+
searchInput: null,
29+
searchTemplate: "<div><label>Search: <input type='text'></label></div>",
30+
itemSelector: "tbody tr",
31+
textSelector: null,
32+
toggle: function(item, match) {
33+
return item.toggle(match);
34+
},
35+
complete: function() {}
36+
}, options);
37+
if (!settings.searchInput) {
38+
searchBar = $(settings.searchTemplate);
39+
settings.searchInput = searchBar.find("input");
40+
container.before(searchBar);
41+
}
42+
return settings.searchInput.on("keyup.sieve change.sieve", function() {
43+
var items, query;
44+
query = compact($(this).val().toLowerCase().split(/\s+/));
45+
items = container.find(settings.itemSelector);
46+
items.each(function() {
47+
var cells, item, match, q, text, _i, _len;
48+
item = $(this);
49+
if (settings.textSelector) {
50+
cells = item.find(settings.textSelector);
51+
text = cells.text().toLowerCase();
52+
} else {
53+
text = item.text().toLowerCase();
54+
}
55+
match = true;
56+
for (_i = 0, _len = query.length; _i < _len; _i++) {
57+
q = query[_i];
58+
match && (match = text.indexOf(q) >= 0);
59+
}
60+
return settings.toggle(item, match);
61+
});
62+
return settings.complete();
63+
});
64+
});
65+
};
66+
67+
}).call(this);

0 commit comments

Comments
 (0)