UNPKG

slickgrid

Version:

A lightning fast JavaScript grid/spreadsheet

9 lines 4.27 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.cellrangeselector.js */ !function(Y){Y.extend(!0,window,{Slick:{CellRangeSelector:function(f){var l,n,r,a,i,c,s,g,u,d,w,p,v,h,m,C,o,S,b,x=this,t=new Slick.EventHandler,I={autoScroll:!0,minIntervalToShowNextCell:30,maxIntervalToShowNextCell:600,accelerateInterval:5,selectionCss:{border:"2px dashed blue"}},y=!1,R=0,D=0;function N(e,t){R=t.scrollTop,D=t.scrollLeft}function k(e,t){i=Y(l.getActiveCanvasNode(e)),p=Y(l.getActiveViewportNode(e));var o=l.getDisplayedScrollbarDimensions();v=p.width()-o.width,h=p.height()-o.height,C={x:l.getAbsoluteColumnMinWidth()/2,y:l.getOptions().rowHeight/2},y=!(!l.getPluginByName("RowMoveManager")&&!l.getPluginByName("CrossGridRowMoveManager")),i.offset();u=g=0,w=i.hasClass("grid-canvas-bottom"),-1<a.frozenRow&&w&&(g=(a.frozenBottom?Y("."+l.getUID()+" .grid-canvas-bottom"):Y("."+l.getUID()+" .grid-canvas-top")).height()),d=i.hasClass("grid-canvas-right"),-1<a.frozenColumn&&d&&(u=Y("."+l.getUID()+" .grid-canvas-left").width()),e.stopImmediatePropagation()}function z(e,t){var o=l.getCellFromEvent(e);if(!1!==x.onBeforeCellRangeSelected.notify(o)&&l.canCellBeSelected(o.row,o.cell)&&(c=!0,e.stopImmediatePropagation()),c)return l.focus(),o=t.startX-Y(r).offset().left,0<=a.frozenColumn&&d&&(o+=D),e=t.startY-Y(r).offset().top,0<=a.frozenRow&&w&&(e+=R),o=l.getCellFromPoint(o,e),t.range={start:o,end:{}},n=t.range,s.show(new Slick.Range(o.row,o.cell))}function T(e,t){if(c||y){var i,s;if(y||e.stopImmediatePropagation(),f.autoScroll)if((m=function(e,t){var o=e.touches?e.touches[0]:e,n=p.scrollLeft(),l=p.scrollTop(),r=n+v,a=l+h,i=p.offset(),s=i.left,i=i.top,f=s+v,c=i+h,e={e:e,dd:t,viewport:{left:n,top:l,right:r,bottom:a,offset:{left:s,top:i,right:f,bottom:c}},offset:{x:0,y:0},isOutsideViewport:!1};o.pageX<s?e.offset.x=o.pageX-s:o.pageX>f&&(e.offset.x=o.pageX-f);o.pageY<i?e.offset.y=i-o.pageY:o.pageY>c&&(e.offset.y=c-o.pageY);return e.isOutsideViewport=!!e.offset.x||!!e.offset.y,e}(e,t)).isOutsideViewport)return S=f.maxIntervalToShowNextCell-Math.abs(m.offset.x)*f.accelerateInterval,b=f.maxIntervalToShowNextCell-Math.abs(m.offset.y)*f.accelerateInterval,void(o||(s=i=0,o=setInterval(function(){var e,t,o,n,l,r=!1,a=!1;m.offset.x?(i+=f.minIntervalToShowNextCell,r=S<=i):i=0,m.offset.y?(s+=f.minIntervalToShowNextCell,a=b<=s):s=0,(r||a)&&(r&&(i=0),a&&(s=0),r=r,a=a,e=m.e.pageX,t=m.e.pageY,o=m.offset.x,n=m.offset.y,l=m.viewport.offset,r&&o&&(e=0<o?l.right+C.x:l.left-C.x),a&&n&&(t=0<n?l.top-C.y:l.bottom+C.y),P({pageX:e,pageY:t},m.dd))},f.minIntervalToShowNextCell)));B(),P(e,t)}}function B(){clearInterval(o),o=null}function P(e,t){e=e.touches?e.touches[0]:e,e=l.getCellFromPoint(e.pageX-i.offset().left+u,e.pageY-i.offset().top+g);if(!(0<=a.frozenColumn&&!d&&e.cell>a.frozenColumn||d&&e.cell<=a.frozenColumn||0<=a.frozenRow&&!w&&e.row>=a.frozenRow||w&&e.row<a.frozenRow)){if(f.autoScroll&&m){var o=l.getCellNodeBox(e.row,e.cell);if(!o)return;var n=m.viewport;(o.left<n.left||o.right>n.right||o.top<n.top||o.bottom>n.bottom)&&l.scrollCellIntoView(e.row,e.cell)}l.canCellBeSelected(e.row,e.cell)&&t&&t.range&&(t.range.end=e,o=new Slick.Range(t.range.start.row,t.range.start.cell,e.row,e.cell),s.show(o),x.onCellRangeSelecting.notify({range:o}))}}function X(e,t){c&&(c=!1,e.stopImmediatePropagation(),B(),s.hide(),x.onCellRangeSelected.notify({range:new Slick.Range(t.range.start.row,t.range.start.cell,t.range.end.row,t.range.end.cell)}))}Y.extend(this,{init:function(e){if(void 0===Slick.Draggable)throw new Error('Slick.Draggable is undefined, make sure to import "slick.interactions.js"');f=Y.extend(!0,{},I,f),s=f.cellDecorator||new Slick.CellRangeDecorator(e,f),r=(l=e).getCanvasNode(),a=l.getOptions(),t.subscribe(l.onScroll,N).subscribe(l.onDragInit,k).subscribe(l.onDragStart,z).subscribe(l.onDrag,T).subscribe(l.onDragEnd,X)},destroy:function(){t.unsubscribeAll(),r=p=i=null,s&&s.destroy&&s.destroy()},pluginName:"CellRangeSelector",getCellDecorator:function(){return s},getCurrentRange:function(){return n},onBeforeCellRangeSelected:new Slick.Event,onCellRangeSelected:new Slick.Event,onCellRangeSelecting:new Slick.Event})}}})}(jQuery);