slickgrid 2.3.16

Sign up to get free protection for your applications and to get access to all the features.
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);