3 $.extend(true, window, {
5 "RowMoveManager": RowMoveManager
9 function RowMoveManager(options) {
14 var _handler = new Slick.EventHandler();
16 cancelEditOnDrag: false
20 options = $.extend(true, {}, _defaults, options);
22 _canvas = _grid.getCanvasNode();
24 .subscribe(_grid.onDragInit, handleDragInit)
25 .subscribe(_grid.onDragStart, handleDragStart)
26 .subscribe(_grid.onDrag, handleDrag)
27 .subscribe(_grid.onDragEnd, handleDragEnd);
31 _handler.unsubscribeAll();
34 function handleDragInit(e, dd) {
35 // prevent the grid from cancelling drag'n'drop by default
36 e.stopImmediatePropagation();
39 function handleDragStart(e, dd) {
40 var cell = _grid.getCellFromEvent(e);
42 if (options.cancelEditOnDrag && _grid.getEditorLock().isActive()) {
43 _grid.getEditorLock().cancelCurrentEdit();
46 if (_grid.getEditorLock().isActive() || !/move|selectAndMove/.test(_grid.getColumns()[cell.cell].behavior)) {
51 e.stopImmediatePropagation();
53 var selectedRows = _grid.getSelectedRows();
55 if (selectedRows.length == 0 || $.inArray(cell.row, selectedRows) == -1) {
56 selectedRows = [cell.row];
57 _grid.setSelectedRows(selectedRows);
60 var rowHeight = _grid.getOptions().rowHeight;
62 dd.selectedRows = selectedRows;
64 dd.selectionProxy = $("<div class='slick-reorder-proxy'/>")
65 .css("position", "absolute")
66 .css("zIndex", "99999")
67 .css("width", $(_canvas).innerWidth())
68 .css("height", rowHeight * selectedRows.length)
71 dd.guide = $("<div class='slick-reorder-guide'/>")
72 .css("position", "absolute")
73 .css("zIndex", "99998")
74 .css("width", $(_canvas).innerWidth())
81 function handleDrag(e, dd) {
86 e.stopImmediatePropagation();
88 var top = e.pageY - $(_canvas).offset().top;
89 dd.selectionProxy.css("top", top - 5);
91 var insertBefore = Math.max(0, Math.min(Math.round(top / _grid.getOptions().rowHeight), _grid.getDataLength()));
92 if (insertBefore !== dd.insertBefore) {
94 "rows": dd.selectedRows,
95 "insertBefore": insertBefore
98 if (_self.onBeforeMoveRows.notify(eventData) === false) {
99 dd.guide.css("top", -1000);
102 dd.guide.css("top", insertBefore * _grid.getOptions().rowHeight);
106 dd.insertBefore = insertBefore;
110 function handleDragEnd(e, dd) {
115 e.stopImmediatePropagation();
118 dd.selectionProxy.remove();
122 "rows": dd.selectedRows,
123 "insertBefore": dd.insertBefore
125 // TODO: _grid.remapCellCssClasses ?
126 _self.onMoveRows.notify(eventData);
131 "onBeforeMoveRows": new Slick.Event(),
132 "onMoveRows": new Slick.Event(),