3 $.extend(true, window, {
5 "CellRangeSelector": CellRangeSelector
10 function CellRangeSelector(options) {
16 var _handler = new Slick.EventHandler();
19 "border": "2px dashed blue"
25 options = $.extend(true, {}, _defaults, options);
26 _decorator = new Slick.CellRangeDecorator(grid, options);
28 _canvas = _grid.getCanvasNode();
30 .subscribe(_grid.onDragInit, handleDragInit)
31 .subscribe(_grid.onDragStart, handleDragStart)
32 .subscribe(_grid.onDrag, handleDrag)
33 .subscribe(_grid.onDragEnd, handleDragEnd);
37 _handler.unsubscribeAll();
40 function handleDragInit(e, dd) {
41 // prevent the grid from cancelling drag'n'drop by default
42 e.stopImmediatePropagation();
45 function handleDragStart(e, dd) {
46 var cell = _grid.getCellFromEvent(e);
47 if (_self.onBeforeCellRangeSelected.notify(cell) !== false) {
48 if (_grid.canCellBeSelected(cell.row, cell.cell)) {
50 e.stopImmediatePropagation();
59 var start = _grid.getCellFromPoint(
60 dd.startX - $(_canvas).offset().left,
61 dd.startY - $(_canvas).offset().top);
63 dd.range = {start: start, end: {}};
65 return _decorator.show(new Slick.Range(start.row, start.cell));
68 function handleDrag(e, dd) {
72 e.stopImmediatePropagation();
74 var end = _grid.getCellFromPoint(
75 e.pageX - $(_canvas).offset().left,
76 e.pageY - $(_canvas).offset().top);
78 if (!_grid.canCellBeSelected(end.row, end.cell)) {
83 _decorator.show(new Slick.Range(dd.range.start.row, dd.range.start.cell, end.row, end.cell));
86 function handleDragEnd(e, dd) {
92 e.stopImmediatePropagation();
95 _self.onCellRangeSelected.notify({
96 range: new Slick.Range(
109 "onBeforeCellRangeSelected": new Slick.Event(),
110 "onCellRangeSelected": new Slick.Event()