Skip to content

Commit 39c986b

Browse files
committed
Added caseSensitive option and data-toggle attribute
1 parent 8d372b9 commit 39c986b

File tree

10 files changed

+108
-94
lines changed

10 files changed

+108
-94
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
- Added request and response converter (solved issue [#3](http://github.com/rstaib/jquery-bootgrid/issues/3))
88
- Added WIA-ARIA busy attribute to indicate that the table is loading
99
- Metadata for rows
10+
- Maintain row selection during filtering and sorting
1011

1112
## 1.0.0
1213
- Public functions for dynamic manipulation such as append and remove row(s)

Gruntfile.js

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,25 @@ module.exports = function (grunt)
1313
banner: '/*! <%= "\\r\\n * " + pkg.title %> v<%= pkg.version %> - <%= grunt.template.today("mm/dd/yyyy") + "\\r\\n" %>' +
1414
' * Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %> <%= (pkg.homepage ? "(" + pkg.homepage + ")" : "") + "\\r\\n" %>' +
1515
' * Licensed under <%= pkg.licenses[0].type + " " + pkg.licenses[0].url + "\\r\\n */\\r\\n" %>' +
16-
';(function ($, window, undefined)\r\n{\r\n /*jshint validthis: true */\r\n "use strict";\r\n\r\n',
17-
footer: '\r\n})(jQuery, window);',
16+
';(function ($, window, document, undefined)\r\n{\r\n /*jshint validthis: true */\r\n "use strict";\r\n\r\n',
17+
footer: '\r\n})(jQuery, window, document);',
1818
process: function(src, filepath)
1919
{
2020
var result = src.trim().replace(/(.+?\r\n)/gm, ' $1'),
21-
end = [0, ""];
22-
switch (result[result.length - 1])
23-
{
24-
case ";":
25-
end = [2, " };"];
26-
break;
21+
end = [0, ""],
22+
lastChar = result[result.length - 1];
2723

28-
case "}":
29-
end = [1, " }"];
30-
break;
24+
if (lastChar === ";")
25+
{
26+
end = (result[result.length - 2] === ")") ?
27+
(result[result.length - 2] === "}") ?
28+
[3, " });"] : [2, ");"] : [2, " };"];
3129
}
30+
else if (lastChar === "}")
31+
{
32+
end = [1, " }"];
33+
}
34+
3235
return result.substr(0, result.length - end[0]) + end[1];
3336
}
3437
},
@@ -37,8 +40,8 @@ module.exports = function (grunt)
3740
'<%= pkg.folders.dist %>/<%= pkg.namespace %>.js': [
3841
'<%= pkg.folders.src %>/internal.js',
3942
'<%= pkg.folders.src %>/public.js',
40-
'<%= pkg.folders.src %>/plugin.js',
41-
'<%= pkg.folders.src %>/extensions.js'
43+
'<%= pkg.folders.src %>/extensions.js',
44+
'<%= pkg.folders.src %>/plugin.js'
4245
]
4346
}
4447
}
215 Bytes
Binary file not shown.
268 Bytes
Binary file not shown.

build/jquery.bootgrid.js

Lines changed: 70 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
/*!
2-
* jQuery Bootgrid v1.1.0-beta - 09/01/2014
2+
* jQuery Bootgrid v1.1.0-beta - 09/04/2014
33
* Copyright (c) 2014 Rafael Staib (http://www.jquery-bootgrid.com)
44
* Licensed under MIT http://www.opensource.org/licenses/MIT
55
*/
6-
;(function ($, window, undefined)
6+
;(function ($, window, document, undefined)
77
{
88
/*jshint validthis: true */
99
"use strict";
@@ -111,6 +111,8 @@
111111
text: $this.text(),
112112
align: data.align || "left",
113113
headerAlign: data.headerAlign || "left",
114+
cssClass: data.cssClass || "",
115+
headerCssClass: data.headerCssClass || "",
114116
formatter: that.options.formatters[data.formatter] || null,
115117
order: (!sorted && (data.order === "asc" || data.order === "desc")) ? data.order : null,
116118
sortable: !(data.sortable === false), // default: true
@@ -164,7 +166,7 @@
164166
function containsPhrase(row)
165167
{
166168
var column,
167-
searchPattern = new RegExp(that.searchPhrase, "gi");
169+
searchPattern = new RegExp(that.searchPhrase, (that.options.caseSensitive) ? "g" : "gi");
168170

169171
for (var i = 0; i < that.columns.length; i++)
170172
{
@@ -565,13 +567,14 @@
565567
{
566568
if (column.visible)
567569
{
568-
var value = ($.isFunction(column.formatter)) ?
569-
column.formatter.call(that, column, row) :
570-
column.converter.to(row[column.id]);
570+
var value = ($.isFunction(column.formatter)) ?
571+
column.formatter.call(that, column, row) :
572+
column.converter.to(row[column.id]),
573+
cssClass = (column.cssClass.length > 0) ? " " + column.cssClass : "";
571574
cells += tpl.cell.resolve(getParams.call(that, {
572575
content: (value == null || value === "") ? "&nbsp;" : value,
573-
css: (column.align === "right") ? css.right :
574-
(column.align === "center") ? css.center : css.left }));
576+
css: ((column.align === "right") ? css.right : (column.align === "center") ?
577+
css.center : css.left) + cssClass }));
575578
}
576579
});
577580

@@ -692,10 +695,12 @@
692695
iconCss = ((sorting && sortOrder && sortOrder === "asc") ? css.iconUp :
693696
(sorting && sortOrder && sortOrder === "desc") ? css.iconDown : ""),
694697
icon = tpl.icon.resolve(getParams.call(that, { iconCss: iconCss })),
695-
align = column.headerAlign;
698+
align = column.headerAlign,
699+
cssClass = (column.headerCssClass.length > 0) ? " " + column.headerCssClass : "";
696700
html += tpl.headerCell.resolve(getParams.call(that, {
697701
column: column, icon: icon, sortable: sorting && column.sortable && css.sortable || "",
698-
css: (align === "right") ? css.right : (align === "center") ? css.center : css.left }));
702+
css: ((align === "right") ? css.right : (align === "center") ?
703+
css.center : css.left) + cssClass }));
699704
}
700705
});
701706

@@ -930,6 +935,7 @@
930935
ajax: false, // todo: find a better name for this property to differentiate between client-side and server-side data
931936
post: {}, // or use function () { return {}; } (reserved properties are "current", "rowCount", "sort" and "searchPhrase")
932937
url: "", // or use function () { return ""; }
938+
caseSensitive: true,
933939

934940
// note: The following properties should not be used via data-api attributes
935941
converters: {
@@ -1190,58 +1196,6 @@
11901196
return this;
11911197
};
11921198

1193-
// GRID PLUGIN DEFINITION
1194-
// =====================
1195-
1196-
var old = $.fn.bootgrid;
1197-
1198-
$.fn.bootgrid = function (option)
1199-
{
1200-
var args = Array.prototype.slice.call(arguments, 1);
1201-
return this.each(function ()
1202-
{
1203-
var $this = $(this),
1204-
instance = $this.data(namespace),
1205-
options = typeof option === "object" && option;
1206-
1207-
if (!instance && option === "destroy")
1208-
{
1209-
return;
1210-
}
1211-
if (!instance)
1212-
{
1213-
$this.data(namespace, (instance = new Grid(this, options)));
1214-
init.call(instance);
1215-
}
1216-
if (typeof option === "string")
1217-
{
1218-
return instance[option].apply(instance, args);
1219-
}
1220-
});
1221-
};
1222-
1223-
$.fn.bootgrid.Constructor = Grid;
1224-
1225-
// GRID NO CONFLICT
1226-
// ===============
1227-
1228-
$.fn.bootgrid.noConflict = function ()
1229-
{
1230-
$.fn.bootgrid = old;
1231-
return this;
1232-
};
1233-
1234-
// GRID DATA-API
1235-
// ============
1236-
1237-
/*
1238-
$(document).on("click" + namespace + ".data-api", "[data-toggle=\"bootgrid\"]", function(e)
1239-
{
1240-
e.preventDefault();
1241-
$(this).bootgrid("show");
1242-
});
1243-
*/
1244-
12451199
// GRID COMMON TYPE EXTENSIONS
12461200
// ============
12471201

@@ -1251,6 +1205,13 @@
12511205
return this.attr("aria-" + name, value);
12521206
},
12531207

1208+
_bgBusyAria: function(busy)
1209+
{
1210+
return (busy == null || busy) ?
1211+
this._bgAria("busy", "true") :
1212+
this._bgAria("busy", "false");
1213+
},
1214+
12541215
_bgRemoveAria: function (name)
12551216
{
12561217
return this.removeAttr("aria-" + name);
@@ -1393,4 +1354,50 @@
13931354
return result;
13941355
};
13951356
}
1396-
})(jQuery, window);
1357+
1358+
// GRID PLUGIN DEFINITION
1359+
// =====================
1360+
1361+
var old = $.fn.bootgrid;
1362+
1363+
$.fn.bootgrid = function (option)
1364+
{
1365+
var args = Array.prototype.slice.call(arguments, 1);
1366+
return this.each(function ()
1367+
{
1368+
var $this = $(this),
1369+
instance = $this.data(namespace),
1370+
options = typeof option === "object" && option;
1371+
1372+
if (!instance && option === "destroy")
1373+
{
1374+
return;
1375+
}
1376+
if (!instance)
1377+
{
1378+
$this.data(namespace, (instance = new Grid(this, options)));
1379+
init.call(instance);
1380+
}
1381+
if (typeof option === "string")
1382+
{
1383+
return instance[option].apply(instance, args);
1384+
}
1385+
});
1386+
};
1387+
1388+
$.fn.bootgrid.Constructor = Grid;
1389+
1390+
// GRID NO CONFLICT
1391+
// ===============
1392+
1393+
$.fn.bootgrid.noConflict = function ()
1394+
{
1395+
$.fn.bootgrid = old;
1396+
return this;
1397+
};
1398+
1399+
// GRID DATA-API
1400+
// ============
1401+
1402+
$("[data-toggle=\"bootgrid\"]").bootgrid();
1403+
})(jQuery, window, document);

build/jquery.bootgrid.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

demo/index.htm

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
@viewport { width: device-width; }
1616

1717
body { padding-top: 70px; }
18+
19+
.column .text { color: #f00 !important; }
20+
.cell { font-weight: bold; }
1821
</style>
1922
</head>
2023
<body>
@@ -54,7 +57,7 @@
5457
<tr>
5558
<th data-column-id="id" data-identifier="true" data-type="numeric" data-align="right">ID</th>
5659
<th data-column-id="sender" data-order="asc" data-align="center" data-header-align="center">Sender</th>
57-
<th data-column-id="received">Received</th>
60+
<th data-column-id="received" data-css-class="cell" data-header-css-class="column">Received</th>
5861
<th data-column-id="link" data-formatter="link" data-sortable="false">Link</th>
5962
</tr>
6063
</thead>

src/internal.js

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ function loadColumns()
101101
text: $this.text(),
102102
align: data.align || "left",
103103
headerAlign: data.headerAlign || "left",
104+
cssClass: data.cssClass || "",
105+
headerCssClass: data.headerCssClass || "",
104106
formatter: that.options.formatters[data.formatter] || null,
105107
order: (!sorted && (data.order === "asc" || data.order === "desc")) ? data.order : null,
106108
sortable: !(data.sortable === false), // default: true
@@ -154,7 +156,7 @@ function loadData()
154156
function containsPhrase(row)
155157
{
156158
var column,
157-
searchPattern = new RegExp(that.searchPhrase, "gi");
159+
searchPattern = new RegExp(that.searchPhrase, (that.options.caseSensitive) ? "g" : "gi");
158160

159161
for (var i = 0; i < that.columns.length; i++)
160162
{
@@ -555,13 +557,14 @@ function renderRows(rows)
555557
{
556558
if (column.visible)
557559
{
558-
var value = ($.isFunction(column.formatter)) ?
559-
column.formatter.call(that, column, row) :
560-
column.converter.to(row[column.id]);
560+
var value = ($.isFunction(column.formatter)) ?
561+
column.formatter.call(that, column, row) :
562+
column.converter.to(row[column.id]),
563+
cssClass = (column.cssClass.length > 0) ? " " + column.cssClass : "";
561564
cells += tpl.cell.resolve(getParams.call(that, {
562565
content: (value == null || value === "") ? "&nbsp;" : value,
563-
css: (column.align === "right") ? css.right :
564-
(column.align === "center") ? css.center : css.left }));
566+
css: ((column.align === "right") ? css.right : (column.align === "center") ?
567+
css.center : css.left) + cssClass }));
565568
}
566569
});
567570

@@ -682,10 +685,12 @@ function renderTableHeader()
682685
iconCss = ((sorting && sortOrder && sortOrder === "asc") ? css.iconUp :
683686
(sorting && sortOrder && sortOrder === "desc") ? css.iconDown : ""),
684687
icon = tpl.icon.resolve(getParams.call(that, { iconCss: iconCss })),
685-
align = column.headerAlign;
688+
align = column.headerAlign,
689+
cssClass = (column.headerCssClass.length > 0) ? " " + column.headerCssClass : "";
686690
html += tpl.headerCell.resolve(getParams.call(that, {
687691
column: column, icon: icon, sortable: sorting && column.sortable && css.sortable || "",
688-
css: (align === "right") ? css.right : (align === "center") ? css.center : css.left }));
692+
css: ((align === "right") ? css.right : (align === "center") ?
693+
css.center : css.left) + cssClass }));
689694
}
690695
});
691696

src/plugin.js

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,4 @@ $.fn.bootgrid.noConflict = function ()
4242
// GRID DATA-API
4343
// ============
4444

45-
/*
46-
$(document).on("click" + namespace + ".data-api", "[data-toggle=\"bootgrid\"]", function(e)
47-
{
48-
e.preventDefault();
49-
$(this).bootgrid("show");
50-
});
51-
*/
45+
$("[data-toggle=\"bootgrid\"]").bootgrid();

src/public.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ Grid.defaults = {
5151
ajax: false, // todo: find a better name for this property to differentiate between client-side and server-side data
5252
post: {}, // or use function () { return {}; } (reserved properties are "current", "rowCount", "sort" and "searchPhrase")
5353
url: "", // or use function () { return ""; }
54+
caseSensitive: true,
5455

5556
// note: The following properties should not be used via data-api attributes
5657
converters: {

0 commit comments

Comments
 (0)