slickgrid 2.3.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE +20 -0
  4. data/README.md +30 -0
  5. data/lib/slickgrid.rb +6 -0
  6. data/lib/slickgrid/version.rb +3 -0
  7. data/slickgrid.gemspec +20 -0
  8. data/vendor/assets/images/slickgrid/CheckboxN.png +0 -0
  9. data/vendor/assets/images/slickgrid/CheckboxY.png +0 -0
  10. data/vendor/assets/images/slickgrid/GrpCheckboxN.png +0 -0
  11. data/vendor/assets/images/slickgrid/GrpCheckboxY.png +0 -0
  12. data/vendor/assets/images/slickgrid/actions.gif +0 -0
  13. data/vendor/assets/images/slickgrid/ajax-loader-small.gif +0 -0
  14. data/vendor/assets/images/slickgrid/arrow-right.gif +0 -0
  15. data/vendor/assets/images/slickgrid/arrow_redo.png +0 -0
  16. data/vendor/assets/images/slickgrid/arrow_right_peppermint.png +0 -0
  17. data/vendor/assets/images/slickgrid/arrow_right_spearmint.png +0 -0
  18. data/vendor/assets/images/slickgrid/arrow_undo.png +0 -0
  19. data/vendor/assets/images/slickgrid/bullet_blue.png +0 -0
  20. data/vendor/assets/images/slickgrid/bullet_star.png +0 -0
  21. data/vendor/assets/images/slickgrid/bullet_toggle_minus.png +0 -0
  22. data/vendor/assets/images/slickgrid/bullet_toggle_plus.png +0 -0
  23. data/vendor/assets/images/slickgrid/calendar.gif +0 -0
  24. data/vendor/assets/images/slickgrid/collapse.gif +0 -0
  25. data/vendor/assets/images/slickgrid/comment_yellow.gif +0 -0
  26. data/vendor/assets/images/slickgrid/delete.png +0 -0
  27. data/vendor/assets/images/slickgrid/down.gif +0 -0
  28. data/vendor/assets/images/slickgrid/drag-handle.png +0 -0
  29. data/vendor/assets/images/slickgrid/editor-helper-bg.gif +0 -0
  30. data/vendor/assets/images/slickgrid/expand.gif +0 -0
  31. data/vendor/assets/images/slickgrid/header-bg.gif +0 -0
  32. data/vendor/assets/images/slickgrid/header-columns-bg.gif +0 -0
  33. data/vendor/assets/images/slickgrid/header-columns-over-bg.gif +0 -0
  34. data/vendor/assets/images/slickgrid/help.png +0 -0
  35. data/vendor/assets/images/slickgrid/info.gif +0 -0
  36. data/vendor/assets/images/slickgrid/listview.gif +0 -0
  37. data/vendor/assets/images/slickgrid/pencil.gif +0 -0
  38. data/vendor/assets/images/slickgrid/row-over-bg.gif +0 -0
  39. data/vendor/assets/images/slickgrid/sort-asc.gif +0 -0
  40. data/vendor/assets/images/slickgrid/sort-asc.png +0 -0
  41. data/vendor/assets/images/slickgrid/sort-desc.gif +0 -0
  42. data/vendor/assets/images/slickgrid/sort-desc.png +0 -0
  43. data/vendor/assets/images/slickgrid/stripes.png +0 -0
  44. data/vendor/assets/images/slickgrid/tag_red.png +0 -0
  45. data/vendor/assets/images/slickgrid/tick.png +0 -0
  46. data/vendor/assets/images/slickgrid/user_identity.gif +0 -0
  47. data/vendor/assets/images/slickgrid/user_identity_plus.gif +0 -0
  48. data/vendor/assets/javascripts/slickgrid.js +5 -0
  49. data/vendor/assets/javascripts/slickgrid/controls/columnpicker.js +221 -0
  50. data/vendor/assets/javascripts/slickgrid/controls/gridmenu.js +429 -0
  51. data/vendor/assets/javascripts/slickgrid/controls/pager.js +154 -0
  52. data/vendor/assets/javascripts/slickgrid/core.js +493 -0
  53. data/vendor/assets/javascripts/slickgrid/dataview.js +1220 -0
  54. data/vendor/assets/javascripts/slickgrid/editors.js +640 -0
  55. data/vendor/assets/javascripts/slickgrid/formatters.js +65 -0
  56. data/vendor/assets/javascripts/slickgrid/grid.js +3990 -0
  57. data/vendor/assets/javascripts/slickgrid/groupitemmetadataprovider.js +172 -0
  58. data/vendor/assets/javascripts/slickgrid/plugins/autotooltips.js +83 -0
  59. data/vendor/assets/javascripts/slickgrid/plugins/cellcopymanager.js +88 -0
  60. data/vendor/assets/javascripts/slickgrid/plugins/cellexternalcopymanager.js +452 -0
  61. data/vendor/assets/javascripts/slickgrid/plugins/cellrangedecorator.js +72 -0
  62. data/vendor/assets/javascripts/slickgrid/plugins/cellrangeselector.js +123 -0
  63. data/vendor/assets/javascripts/slickgrid/plugins/cellselectionmodel.js +168 -0
  64. data/vendor/assets/javascripts/slickgrid/plugins/checkboxselectcolumn.js +202 -0
  65. data/vendor/assets/javascripts/slickgrid/plugins/draggablegrouping.js +207 -0
  66. data/vendor/assets/javascripts/slickgrid/plugins/headerbuttons.js +177 -0
  67. data/vendor/assets/javascripts/slickgrid/plugins/headermenu.js +296 -0
  68. data/vendor/assets/javascripts/slickgrid/plugins/rowdetailview.js +455 -0
  69. data/vendor/assets/javascripts/slickgrid/plugins/rowmovemanager.js +138 -0
  70. data/vendor/assets/javascripts/slickgrid/plugins/rowselectionmodel.js +191 -0
  71. data/vendor/assets/javascripts/slickgrid/remotemodel.js +169 -0
  72. data/vendor/assets/stylesheets/slickgrid.scss +1 -0
  73. data/vendor/assets/stylesheets/slickgrid/controls/columnpicker.css +46 -0
  74. data/vendor/assets/stylesheets/slickgrid/controls/gridmenu.css +113 -0
  75. data/vendor/assets/stylesheets/slickgrid/controls/pager.css +41 -0
  76. data/vendor/assets/stylesheets/slickgrid/default-theme.css +132 -0
  77. data/vendor/assets/stylesheets/slickgrid/grid.css +189 -0
  78. data/vendor/assets/stylesheets/slickgrid/plugins/headerbuttons.css +39 -0
  79. data/vendor/assets/stylesheets/slickgrid/plugins/headermenu.css +59 -0
  80. data/vendor/assets/stylesheets/slickgrid/plugins/rowdetailview.css +39 -0
  81. metadata +165 -0
@@ -0,0 +1,72 @@
1
+ (function ($) {
2
+ // register namespace
3
+ $.extend(true, window, {
4
+ "Slick": {
5
+ "CellRangeDecorator": CellRangeDecorator
6
+ }
7
+ });
8
+
9
+ /***
10
+ * Displays an overlay on top of a given cell range.
11
+ *
12
+ * TODO:
13
+ * Currently, it blocks mouse events to DOM nodes behind it.
14
+ * Use FF and WebKit-specific "pointer-events" CSS style, or some kind of event forwarding.
15
+ * Could also construct the borders separately using 4 individual DIVs.
16
+ *
17
+ * @param {Grid} grid
18
+ * @param {Object} options
19
+ */
20
+ function CellRangeDecorator(grid, options) {
21
+ var _elem;
22
+ var _defaults = {
23
+ selectionCssClass: 'slick-range-decorator',
24
+ selectionCss: {
25
+ "zIndex": "9999",
26
+ "border": "2px dashed red"
27
+ },
28
+ offset: {
29
+ top: -1,
30
+ left: -1,
31
+ height: -2,
32
+ width: -2
33
+ }
34
+ };
35
+
36
+ options = $.extend(true, {}, _defaults, options);
37
+
38
+
39
+ function show(range) {
40
+ if (!_elem) {
41
+ _elem = $("<div></div>", {css: options.selectionCss})
42
+ .addClass(options.selectionCssClass)
43
+ .css("position", "absolute")
44
+ .appendTo(grid.getCanvasNode());
45
+ }
46
+
47
+ var from = grid.getCellNodeBox(range.fromRow, range.fromCell);
48
+ var to = grid.getCellNodeBox(range.toRow, range.toCell);
49
+
50
+ _elem.css({
51
+ top: from.top + options.offset.top,
52
+ left: from.left + options.offset.left,
53
+ height: to.bottom - from.top + options.offset.height,
54
+ width: to.right - from.left + options.offset.width
55
+ });
56
+
57
+ return _elem;
58
+ }
59
+
60
+ function hide() {
61
+ if (_elem) {
62
+ _elem.remove();
63
+ _elem = null;
64
+ }
65
+ }
66
+
67
+ $.extend(this, {
68
+ "show": show,
69
+ "hide": hide
70
+ });
71
+ }
72
+ })(jQuery);
@@ -0,0 +1,123 @@
1
+ (function ($) {
2
+ // register namespace
3
+ $.extend(true, window, {
4
+ "Slick": {
5
+ "CellRangeSelector": CellRangeSelector
6
+ }
7
+ });
8
+
9
+ function CellRangeSelector(options) {
10
+ var _grid;
11
+ var _currentlySelectedRange;
12
+ var _canvas;
13
+ var _dragging;
14
+ var _decorator;
15
+ var _self = this;
16
+ var _handler = new Slick.EventHandler();
17
+ var _defaults = {
18
+ selectionCss: {
19
+ "border": "2px dashed blue"
20
+ }
21
+ };
22
+
23
+ function init(grid) {
24
+ options = $.extend(true, {}, _defaults, options);
25
+ _decorator = options.cellDecorator || new Slick.CellRangeDecorator(grid, options);
26
+ _grid = grid;
27
+ _canvas = _grid.getCanvasNode();
28
+ _handler
29
+ .subscribe(_grid.onDragInit, handleDragInit)
30
+ .subscribe(_grid.onDragStart, handleDragStart)
31
+ .subscribe(_grid.onDrag, handleDrag)
32
+ .subscribe(_grid.onDragEnd, handleDragEnd);
33
+ }
34
+
35
+ function destroy() {
36
+ _handler.unsubscribeAll();
37
+ }
38
+
39
+ function getCellDecorator() {
40
+ return _decorator;
41
+ }
42
+
43
+ function handleDragInit(e, dd) {
44
+ // prevent the grid from cancelling drag'n'drop by default
45
+ e.stopImmediatePropagation();
46
+ }
47
+
48
+ function handleDragStart(e, dd) {
49
+ var cell = _grid.getCellFromEvent(e);
50
+ if (_self.onBeforeCellRangeSelected.notify(cell) !== false) {
51
+ if (_grid.canCellBeSelected(cell.row, cell.cell)) {
52
+ _dragging = true;
53
+ e.stopImmediatePropagation();
54
+ }
55
+ }
56
+ if (!_dragging) {
57
+ return;
58
+ }
59
+
60
+ _grid.focus();
61
+
62
+ var start = _grid.getCellFromPoint(
63
+ dd.startX - $(_canvas).offset().left,
64
+ dd.startY - $(_canvas).offset().top);
65
+
66
+ dd.range = {start: start, end: {}};
67
+ _currentlySelectedRange = dd.range;
68
+ return _decorator.show(new Slick.Range(start.row, start.cell));
69
+ }
70
+
71
+ function handleDrag(e, dd) {
72
+ if (!_dragging) {
73
+ return;
74
+ }
75
+ e.stopImmediatePropagation();
76
+
77
+ var end = _grid.getCellFromPoint(
78
+ e.pageX - $(_canvas).offset().left,
79
+ e.pageY - $(_canvas).offset().top);
80
+
81
+ if (!_grid.canCellBeSelected(end.row, end.cell)) {
82
+ return;
83
+ }
84
+
85
+ dd.range.end = end;
86
+ _currentlySelectedRange = dd.range;
87
+ _decorator.show(new Slick.Range(dd.range.start.row, dd.range.start.cell, end.row, end.cell));
88
+ }
89
+
90
+ function handleDragEnd(e, dd) {
91
+ if (!_dragging) {
92
+ return;
93
+ }
94
+
95
+ _dragging = false;
96
+ e.stopImmediatePropagation();
97
+
98
+ _decorator.hide();
99
+ _self.onCellRangeSelected.notify({
100
+ range: new Slick.Range(
101
+ dd.range.start.row,
102
+ dd.range.start.cell,
103
+ dd.range.end.row,
104
+ dd.range.end.cell
105
+ )
106
+ });
107
+ }
108
+
109
+ function getCurrentRange() {
110
+ return _currentlySelectedRange;
111
+ }
112
+
113
+ $.extend(this, {
114
+ "init": init,
115
+ "destroy": destroy,
116
+ "getCellDecorator": getCellDecorator,
117
+ "getCurrentRange": getCurrentRange,
118
+
119
+ "onBeforeCellRangeSelected": new Slick.Event(),
120
+ "onCellRangeSelected": new Slick.Event()
121
+ });
122
+ }
123
+ })(jQuery);
@@ -0,0 +1,168 @@
1
+ (function ($) {
2
+ // register namespace
3
+ $.extend(true, window, {
4
+ "Slick": {
5
+ "CellSelectionModel": CellSelectionModel
6
+ }
7
+ });
8
+
9
+ function CellSelectionModel(options) {
10
+ var _grid;
11
+ var _canvas;
12
+ var _ranges = [];
13
+ var _self = this;
14
+ var _selector;
15
+
16
+ if (typeof options === "undefined" || typeof options.cellRangeSelector === "undefined") {
17
+ _selector = new Slick.CellRangeSelector({
18
+ "selectionCss": {
19
+ "border": "2px solid black"
20
+ }
21
+ });
22
+ } else {
23
+ _selector = options.cellRangeSelector;
24
+ }
25
+
26
+ var _options;
27
+ var _defaults = {
28
+ selectActiveCell: true
29
+ };
30
+
31
+ function init(grid) {
32
+ _options = $.extend(true, {}, _defaults, options);
33
+ _grid = grid;
34
+ _canvas = _grid.getCanvasNode();
35
+ _grid.onActiveCellChanged.subscribe(handleActiveCellChange);
36
+ _grid.onKeyDown.subscribe(handleKeyDown);
37
+ grid.registerPlugin(_selector);
38
+ _selector.onCellRangeSelected.subscribe(handleCellRangeSelected);
39
+ _selector.onBeforeCellRangeSelected.subscribe(handleBeforeCellRangeSelected);
40
+ }
41
+
42
+ function destroy() {
43
+ _grid.onActiveCellChanged.unsubscribe(handleActiveCellChange);
44
+ _grid.onKeyDown.unsubscribe(handleKeyDown);
45
+ _selector.onCellRangeSelected.unsubscribe(handleCellRangeSelected);
46
+ _selector.onBeforeCellRangeSelected.unsubscribe(handleBeforeCellRangeSelected);
47
+ _grid.unregisterPlugin(_selector);
48
+ }
49
+
50
+ function removeInvalidRanges(ranges) {
51
+ var result = [];
52
+
53
+ for (var i = 0; i < ranges.length; i++) {
54
+ var r = ranges[i];
55
+ if (_grid.canCellBeSelected(r.fromRow, r.fromCell) && _grid.canCellBeSelected(r.toRow, r.toCell)) {
56
+ result.push(r);
57
+ }
58
+ }
59
+
60
+ return result;
61
+ }
62
+
63
+ function setSelectedRanges(ranges) {
64
+ // simple check for: empty selection didn't change, prevent firing onSelectedRangesChanged
65
+ if ((!_ranges || _ranges.length === 0) && (!ranges || ranges.length === 0)) { return; }
66
+
67
+ _ranges = removeInvalidRanges(ranges);
68
+ _self.onSelectedRangesChanged.notify(_ranges);
69
+ }
70
+
71
+ function getSelectedRanges() {
72
+ return _ranges;
73
+ }
74
+
75
+ function handleBeforeCellRangeSelected(e, args) {
76
+ if (_grid.getEditorLock().isActive()) {
77
+ e.stopPropagation();
78
+ return false;
79
+ }
80
+ }
81
+
82
+ function handleCellRangeSelected(e, args) {
83
+ _grid.setActiveCell(args.range.fromRow, args.range.fromCell, false, false, true);
84
+ setSelectedRanges([args.range]);
85
+ }
86
+
87
+ function handleActiveCellChange(e, args) {
88
+ if (_options.selectActiveCell && args.row != null && args.cell != null) {
89
+ setSelectedRanges([new Slick.Range(args.row, args.cell)]);
90
+ }
91
+ else if (!_options.selectActiveCell) {
92
+ // clear the previous selection once the cell changes
93
+ setSelectedRanges([]);
94
+ }
95
+ }
96
+
97
+ function handleKeyDown(e) {
98
+ /***
99
+ * Кey codes
100
+ * 37 left
101
+ * 38 up
102
+ * 39 right
103
+ * 40 down
104
+ */
105
+ var ranges, last;
106
+ var active = _grid.getActiveCell();
107
+ var metaKey = e.ctrlKey || e.metaKey;
108
+
109
+ if (active && e.shiftKey && !metaKey && !e.altKey &&
110
+ (e.which == 37 || e.which == 39 || e.which == 38 || e.which == 40)) {
111
+
112
+ ranges = getSelectedRanges();
113
+ if (!ranges.length)
114
+ ranges.push(new Slick.Range(active.row, active.cell));
115
+
116
+ // keyboard can work with last range only
117
+ last = ranges.pop();
118
+
119
+ // can't handle selection out of active cell
120
+ if (!last.contains(active.row, active.cell))
121
+ last = new Slick.Range(active.row, active.cell);
122
+
123
+ var dRow = last.toRow - last.fromRow,
124
+ dCell = last.toCell - last.fromCell,
125
+ // walking direction
126
+ dirRow = active.row == last.fromRow ? 1 : -1,
127
+ dirCell = active.cell == last.fromCell ? 1 : -1;
128
+
129
+ if (e.which == 37) {
130
+ dCell -= dirCell;
131
+ } else if (e.which == 39) {
132
+ dCell += dirCell;
133
+ } else if (e.which == 38) {
134
+ dRow -= dirRow;
135
+ } else if (e.which == 40) {
136
+ dRow += dirRow;
137
+ }
138
+
139
+ // define new selection range
140
+ var new_last = new Slick.Range(active.row, active.cell, active.row + dirRow * dRow, active.cell + dirCell * dCell);
141
+ if (removeInvalidRanges([new_last]).length) {
142
+ ranges.push(new_last);
143
+ var viewRow = dirRow > 0 ? new_last.toRow : new_last.fromRow;
144
+ var viewCell = dirCell > 0 ? new_last.toCell : new_last.fromCell;
145
+ _grid.scrollRowIntoView(viewRow);
146
+ _grid.scrollCellIntoView(viewRow, viewCell);
147
+ }
148
+ else
149
+ ranges.push(last);
150
+
151
+ setSelectedRanges(ranges);
152
+
153
+ e.preventDefault();
154
+ e.stopPropagation();
155
+ }
156
+ }
157
+
158
+ $.extend(this, {
159
+ "getSelectedRanges": getSelectedRanges,
160
+ "setSelectedRanges": setSelectedRanges,
161
+
162
+ "init": init,
163
+ "destroy": destroy,
164
+
165
+ "onSelectedRangesChanged": new Slick.Event()
166
+ });
167
+ }
168
+ })(jQuery);
@@ -0,0 +1,202 @@
1
+ (function ($) {
2
+ // register namespace
3
+ $.extend(true, window, {
4
+ "Slick": {
5
+ "CheckboxSelectColumn": CheckboxSelectColumn
6
+ }
7
+ });
8
+
9
+
10
+ function CheckboxSelectColumn(options) {
11
+ var _grid;
12
+ var _self = this;
13
+ var _handler = new Slick.EventHandler();
14
+ var _selectedRowsLookup = {};
15
+ var _defaults = {
16
+ columnId: "_checkbox_selector",
17
+ cssClass: null,
18
+ toolTip: "Select/Deselect All",
19
+ width: 30
20
+ };
21
+
22
+ var _options = $.extend(true, {}, _defaults, options);
23
+
24
+ function init(grid) {
25
+ _grid = grid;
26
+ _handler
27
+ .subscribe(_grid.onSelectedRowsChanged, handleSelectedRowsChanged)
28
+ .subscribe(_grid.onClick, handleClick)
29
+ .subscribe(_grid.onHeaderClick, handleHeaderClick)
30
+ .subscribe(_grid.onKeyDown, handleKeyDown);
31
+ }
32
+
33
+ function destroy() {
34
+ _handler.unsubscribeAll();
35
+ }
36
+
37
+ function handleSelectedRowsChanged(e, args) {
38
+ var UID = createUID();
39
+ var selectedRows = _grid.getSelectedRows();
40
+ var lookup = {}, row, i;
41
+ for (i = 0; i < selectedRows.length; i++) {
42
+ row = selectedRows[i];
43
+ lookup[row] = true;
44
+ if (lookup[row] !== _selectedRowsLookup[row]) {
45
+ _grid.invalidateRow(row);
46
+ delete _selectedRowsLookup[row];
47
+ }
48
+ }
49
+ for (i in _selectedRowsLookup) {
50
+ _grid.invalidateRow(i);
51
+ }
52
+ _selectedRowsLookup = lookup;
53
+ _grid.render();
54
+
55
+ if (selectedRows.length && selectedRows.length == _grid.getDataLength()) {
56
+ _grid.updateColumnHeader(_options.columnId, "<input id='header-selector" + UID + "' type='checkbox' checked='checked'><label for='header-selector" + UID + "'></label>", _options.toolTip);
57
+ } else {
58
+ _grid.updateColumnHeader(_options.columnId, "<input id='header-selector" + UID + "' type='checkbox'><label for='header-selector" + UID + "'></label>", _options.toolTip);
59
+ }
60
+ }
61
+
62
+ function handleKeyDown(e, args) {
63
+ if (e.which == 32) {
64
+ if (_grid.getColumns()[args.cell].id === _options.columnId) {
65
+ // if editing, try to commit
66
+ if (!_grid.getEditorLock().isActive() || _grid.getEditorLock().commitCurrentEdit()) {
67
+ toggleRowSelection(args.row);
68
+ }
69
+ e.preventDefault();
70
+ e.stopImmediatePropagation();
71
+ }
72
+ }
73
+ }
74
+
75
+ function handleClick(e, args) {
76
+ // clicking on a row select checkbox
77
+ if (_grid.getColumns()[args.cell].id === _options.columnId && $(e.target).is(":checkbox")) {
78
+ // if editing, try to commit
79
+ if (_grid.getEditorLock().isActive() && !_grid.getEditorLock().commitCurrentEdit()) {
80
+ e.preventDefault();
81
+ e.stopImmediatePropagation();
82
+ return;
83
+ }
84
+
85
+ toggleRowSelection(args.row);
86
+ e.stopPropagation();
87
+ e.stopImmediatePropagation();
88
+ }
89
+ }
90
+
91
+ function toggleRowSelection(row) {
92
+ if (_selectedRowsLookup[row]) {
93
+ _grid.setSelectedRows($.grep(_grid.getSelectedRows(), function (n) {
94
+ return n != row
95
+ }));
96
+ } else {
97
+ _grid.setSelectedRows(_grid.getSelectedRows().concat(row));
98
+ }
99
+ _grid.setActiveCell(row, getCheckboxColumnCellIndex());
100
+ _grid.focus();
101
+ }
102
+
103
+ function selectRows(rowArray) {
104
+ var i, l=rowArray.length, addRows = [];
105
+ for(i=0; i<l; i++) {
106
+ if (!_selectedRowsLookup[rowArray[i]]) {
107
+ addRows[addRows.length] = rowArray[i];
108
+ }
109
+ }
110
+ _grid.setSelectedRows(_grid.getSelectedRows().concat(addRows));
111
+ }
112
+
113
+ function deSelectRows(rowArray) {
114
+ var i, l=rowArray.length, removeRows = [];
115
+ for(i=0; i<l; i++) {
116
+ if (_selectedRowsLookup[rowArray[i]]) {
117
+ removeRows[removeRows.length] = rowArray[i];
118
+ }
119
+ }
120
+ _grid.setSelectedRows($.grep(_grid.getSelectedRows(), function (n) {
121
+ return removeRows.indexOf(n)<0
122
+ }));
123
+ }
124
+
125
+ function handleHeaderClick(e, args) {
126
+ if (args.column.id == _options.columnId && $(e.target).is(":checkbox")) {
127
+ // if editing, try to commit
128
+ if (_grid.getEditorLock().isActive() && !_grid.getEditorLock().commitCurrentEdit()) {
129
+ e.preventDefault();
130
+ e.stopImmediatePropagation();
131
+ return;
132
+ }
133
+
134
+ if ($(e.target).is(":checked")) {
135
+ var rows = [];
136
+ for (var i = 0; i < _grid.getDataLength(); i++) {
137
+ rows.push(i);
138
+ }
139
+ _grid.setSelectedRows(rows);
140
+ } else {
141
+ _grid.setSelectedRows([]);
142
+ }
143
+ e.stopPropagation();
144
+ e.stopImmediatePropagation();
145
+ }
146
+ }
147
+
148
+ var _checkboxColumnCellIndex = null;
149
+
150
+ function getCheckboxColumnCellIndex() {
151
+ if (_checkboxColumnCellIndex === null) {
152
+ _checkboxColumnCellIndex = 0;
153
+ var colArr = _grid.getColumns();
154
+ for (var i=0; i < colArr.length; i++) {
155
+ if (colArr[i].id == _options.columnId) {
156
+ _checkboxColumnCellIndex = i;
157
+ }
158
+ }
159
+ }
160
+ return _checkboxColumnCellIndex;
161
+ }
162
+
163
+ function getColumnDefinition() {
164
+ var UID = createUID();
165
+
166
+ return {
167
+ id: _options.columnId,
168
+ name: "<input id='header-selector" + UID + "' type='checkbox'><label for='header-selector" + UID + "'></label>",
169
+ toolTip: _options.toolTip,
170
+ field: "sel",
171
+ width: _options.width,
172
+ resizable: false,
173
+ sortable: false,
174
+ cssClass: _options.cssClass,
175
+ formatter: checkboxSelectionFormatter
176
+ };
177
+ }
178
+
179
+ function createUID() {
180
+ return Math.round(10000000 * Math.random());
181
+ }
182
+
183
+ function checkboxSelectionFormatter(row, cell, value, columnDef, dataContext) {
184
+ var UID = createUID() + row;
185
+
186
+ if (dataContext) {
187
+ return _selectedRowsLookup[row]
188
+ ? "<input id='selector" + UID + "' type='checkbox' checked='checked'><label for='selector" + UID + "'></label>"
189
+ : "<input id='selector" + UID + "' type='checkbox'><label for='selector" + UID + "'></label>";
190
+ }
191
+ return null;
192
+ }
193
+
194
+ $.extend(this, {
195
+ "init": init,
196
+ "destroy": destroy,
197
+ "deSelectRows": deSelectRows,
198
+ "selectRows": selectRows,
199
+ "getColumnDefinition": getColumnDefinition
200
+ });
201
+ }
202
+ })(jQuery);