UNPKG

slickgrid

Version:

A lightning fast JavaScript grid/spreadsheet

9 lines 3.76 kB
/** * SlickGrid v3.0.2 * (c) 2009-present Michael Leibman * homepage: http://github.com/mleibman/slickgrid * license: MIT * date: 2022-11-14 * file: ./plugins/slick.rowselectionmodel.js */ !function(b){b.extend(!0,window,{Slick:{RowSelectionModel:function(t){var c,n,l,o,r,a=[],i=this,s=new Slick.EventHandler,u={selectActiveRow:!0,dragToSelect:!1,autoScrollWhenDrag:!0,cellRangeSelector:void 0};function g(e){return function(){n||(n=!0,e.apply(this,arguments),n=!1)}}function w(e){for(var t=[],n=0;n<e.length;n++)for(var l=e[n].fromRow;l<=e[n].toRow;l++)t.push(l);return t}function f(e){for(var t=[],n=c.getColumns().length-1,l=0;l<e.length;l++)t.push(new Slick.Range(e[l],0,e[l],n));return t}function S(){return w(a)}function e(e){d(f(e),"SlickRowSelectionModel.setSelectedRows")}function d(e,t){(a&&0!==a.length||e&&0!==e.length)&&(a=e,e=new Slick.EventData,Object.defineProperty(e,"detail",{writable:!0,configurable:!0,value:{caller:t||"SlickRowSelectionModel.setSelectedRanges"}}),i.onSelectedRangesChanged.notify(a,e))}function h(e,t){l.selectActiveRow&&null!=t.row&&d([new Slick.Range(t.row,0,t.row,c.getColumns().length-1)])}function R(e){var t,n,l=c.getActiveCell();!(c.getOptions().multiSelect&&l&&e.shiftKey)||e.ctrlKey||e.altKey||e.metaKey||e.which!=Slick.keyCode.UP&&e.which!=Slick.keyCode.DOWN||((n=S()).sort(function(e,t){return e-t}),t=(n=n.length?n:[l.row])[0],n=n[n.length-1],0<=(l=e.which==Slick.keyCode.DOWN?l.row<n||t==n?++n:++t:l.row<n?--n:--t)&&l<c.getDataLength()&&(c.scrollRowIntoView(l),d(f(function(e,t){for(var n=[],l=e;l<=t;l++)n.push(l);for(l=t;l<e;l++)n.push(l);return n}(t,n)))),e.preventDefault(),e.stopPropagation())}function v(e){var n=c.getCellFromEvent(e);if(!n||!c.canCellBeActive(n.row,n.cell))return!1;if(!c.getOptions().multiSelect||!e.ctrlKey&&!e.shiftKey&&!e.metaKey)return!1;var t=w(a),l=b.inArray(n.row,t);if(-1===l&&(e.ctrlKey||e.metaKey))t.push(n.row),c.setActiveCell(n.row,n.cell);else if(-1!==l&&(e.ctrlKey||e.metaKey))t=b.grep(t,function(e,t){return e!==n.row}),c.setActiveCell(n.row,n.cell);else if(t.length&&e.shiftKey){for(var o=t.pop(),l=Math.min(n.row,o),r=Math.max(n.row,o),t=[],i=l;i<=r;i++)i!==o&&t.push(i);t.push(o),c.setActiveCell(n.row,n.cell)}return d(f(t)),e.stopImmediatePropagation(),!0}function C(e,t){var n;if(r||(n=c.getPluginByName("RowMoveManager")||c.getPluginByName("CrossGridRowMoveManager"),r=n?n.isHandlerColumn:b.noop),c.getEditorLock().isActive()||r(t.cell))return e.stopPropagation(),!1;c.setActiveCell(t.row,t.cell)}function p(e,t){if(!c.getOptions().multiSelect||!l.selectActiveRow)return!1;d([new Slick.Range(t.range.fromRow,0,t.range.toRow,c.getColumns().length-1)])}b.extend(this,{getSelectedRows:S,setSelectedRows:e,getSelectedRanges:function(){return a},setSelectedRanges:d,refreshSelections:function(){e(S())},init:function(e){if(void 0===Slick.Draggable)throw new Error('Slick.Draggable is undefined, make sure to import "slick.interactions.js"');if(l=b.extend(!0,{},u,t),o=l.cellRangeSelector,c=e,!o&&l.dragToSelect){if(!Slick.CellRangeDecorator)throw new Error("Slick.CellRangeDecorator is required when option dragToSelect set to true");o=new Slick.CellRangeSelector({selectionCss:{border:"none"},autoScroll:l.autoScrollWhenDrag})}s.subscribe(c.onActiveCellChanged,g(h)),s.subscribe(c.onKeyDown,g(R)),s.subscribe(c.onClick,g(v)),o&&(e.registerPlugin(o),o.onCellRangeSelecting.subscribe(p),o.onCellRangeSelected.subscribe(p),o.onBeforeCellRangeSelected.subscribe(C))},destroy:function(){s.unsubscribeAll(),o&&(o.onCellRangeSelecting.unsubscribe(p),o.onCellRangeSelected.unsubscribe(p),o.onBeforeCellRangeSelected.unsubscribe(C),c.unregisterPlugin(o),o.destroy&&o.destroy())},pluginName:"RowSelectionModel",onSelectedRangesChanged:new Slick.Event})}}})}(jQuery);