3 $.extend(true, window, {
5 "CheckboxSelectColumn": CheckboxSelectColumn
10 function CheckboxSelectColumn(options) {
13 var _handler = new Slick.EventHandler();
14 var _selectedRowsLookup = {};
16 columnId: "_checkbox_selector",
18 toolTip: "Select/Deselect All",
22 var _options = $.extend(true, {}, _defaults, options);
27 .subscribe(_grid.onSelectedRowsChanged, handleSelectedRowsChanged)
28 .subscribe(_grid.onClick, handleClick)
29 .subscribe(_grid.onHeaderClick, handleHeaderClick)
30 .subscribe(_grid.onKeyDown, handleKeyDown);
34 _handler.unsubscribeAll();
37 function handleSelectedRowsChanged(e, args) {
38 var selectedRows = _grid.getSelectedRows();
39 var lookup = {}, row, i;
40 for (i = 0; i < selectedRows.length; i++) {
41 row = selectedRows[i];
43 if (lookup[row] !== _selectedRowsLookup[row]) {
44 _grid.invalidateRow(row);
45 delete _selectedRowsLookup[row];
48 for (i in _selectedRowsLookup) {
49 _grid.invalidateRow(i);
51 _selectedRowsLookup = lookup;
54 if (selectedRows.length && selectedRows.length == _grid.getDataLength()) {
55 _grid.updateColumnHeader(_options.columnId, "<input type='checkbox' checked='checked'>", _options.toolTip);
57 _grid.updateColumnHeader(_options.columnId, "<input type='checkbox'>", _options.toolTip);
61 function handleKeyDown(e, args) {
63 if (_grid.getColumns()[args.cell].id === _options.columnId) {
64 // if editing, try to commit
65 if (!_grid.getEditorLock().isActive() || _grid.getEditorLock().commitCurrentEdit()) {
66 toggleRowSelection(args.row);
69 e.stopImmediatePropagation();
74 function handleClick(e, args) {
75 // clicking on a row select checkbox
76 if (_grid.getColumns()[args.cell].id === _options.columnId && $(e.target).is(":checkbox")) {
77 // if editing, try to commit
78 if (_grid.getEditorLock().isActive() && !_grid.getEditorLock().commitCurrentEdit()) {
80 e.stopImmediatePropagation();
84 toggleRowSelection(args.row);
86 e.stopImmediatePropagation();
90 function toggleRowSelection(row) {
91 if (_selectedRowsLookup[row]) {
92 _grid.setSelectedRows($.grep(_grid.getSelectedRows(), function (n) {
96 _grid.setSelectedRows(_grid.getSelectedRows().concat(row));
100 function handleHeaderClick(e, args) {
101 if (args.column.id == _options.columnId && $(e.target).is(":checkbox")) {
102 // if editing, try to commit
103 if (_grid.getEditorLock().isActive() && !_grid.getEditorLock().commitCurrentEdit()) {
105 e.stopImmediatePropagation();
109 if ($(e.target).is(":checked")) {
111 for (var i = 0; i < _grid.getDataLength(); i++) {
114 _grid.setSelectedRows(rows);
116 _grid.setSelectedRows([]);
119 e.stopImmediatePropagation();
123 function getColumnDefinition() {
125 id: _options.columnId,
126 name: "<input type='checkbox'>",
127 toolTip: _options.toolTip,
129 width: _options.width,
132 cssClass: _options.cssClass,
133 formatter: checkboxSelectionFormatter
137 function checkboxSelectionFormatter(row, cell, value, columnDef, dataContext) {
139 return _selectedRowsLookup[row]
140 ? "<input type='checkbox' checked='checked'>"
141 : "<input type='checkbox'>";
150 "getColumnDefinition": getColumnDefinition