canvas-datagrid 0.25.4 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://canvasDatagrid/webpack/universalModuleDefinition","webpack://canvasDatagrid/./lib/component.js","webpack://canvasDatagrid/./lib/contextMenu.js","webpack://canvasDatagrid/./lib/defaults.js","webpack://canvasDatagrid/./lib/dom.js","webpack://canvasDatagrid/./lib/draw.js","webpack://canvasDatagrid/./lib/events.js","webpack://canvasDatagrid/./lib/intf.js","webpack://canvasDatagrid/./lib/main.js","webpack://canvasDatagrid/./lib/publicMethods.js","webpack://canvasDatagrid/./lib/touch.js","webpack://canvasDatagrid/./node_modules/is-printable-key-event/dist/index.js","webpack://canvasDatagrid/webpack/bootstrap","webpack://canvasDatagrid/webpack/runtime/compat get default export","webpack://canvasDatagrid/webpack/runtime/define property getters","webpack://canvasDatagrid/webpack/runtime/hasOwnProperty shorthand","webpack://canvasDatagrid/webpack/runtime/make namespace object","webpack://canvasDatagrid/webpack/startup"],"names":["typeMap","component","dehyphenateProperty","hyphenateProperty","prop","replace","p","nextLetterCap","Array","prototype","forEach","call","char","toUpperCase","cust","toLowerCase","getDefaultItem","base","item","i","r","defaults","filter","applyComponentStyle","supressChangeAndDrawEvents","intf","isComponent","cStyle","window","getComputedStyle","tagName","canvas","defs","computedStyle","styles","def","val","getPropertyValue","setStyleProperty","dispatchEvent","requestAnimationFrame","resize","style","data","strData","JSON","parse","e","Error","schema","strSchema","number","strNum","n","parseInt","isNaN","strBool","test","string","str","getObservableAttributes","attrs","attributes","attr","push","disconnectedCallback","connected","connectedCallback","parentDOMNode","innerHTML","appendChild","observe","adoptedCallback","attributeChangedCallback","attrName","oldVal","newVal","tfn","dataType","name","addEventListener","Function","observer","MutationObserver","mutations","checkInnerHTML","checkStyle","mutation","attributeName","target","nodeName","parentNode","addedNodes","length","type","characterData","childList","subtree","document","querySelectorAll","el","self","zIndexTop","hoverScrollTimeout","autoCompleteContext","applyContextItemStyle","contextItemContainer","createInlineStyle","mobile","createContextMenu","ev","pos","items","parentContextMenu","container","createElement","upArrow","downArrow","children","selectedIndex","rect","isArray","createItems","childMenuArrow","removeChildContext","relatedTarget","contextMenu","contains","dispose","splice","indexOf","undefined","removeEventListener","setAttribute","contextAddCallback","getAttribute","cPos","getBoundingClientRect","left","childContextMenuMarginLeft","offsetWidth","top","childContextMenuMarginTop","bottom","right","createChildContext","apply","addItem","addContent","content","title","childContextMenuArrowHTML","click","clickIndex","idx","Event","checkArrowVisibility","scrollTop","removeChild","scrollHeight","offsetHeight","startHoverScroll","t","a","contextHoverScrollAmount","setTimeout","contextHoverScrollRateMs","endHoverScroll","clearTimeout","init","loc","s","scrollOffset","contextMenuZIndex","x","y","height","position","color","contextMenuArrowColor","textAlign","zIndex","inputDropdown","maxHeight","innerHeight","autocompleteBottomMargin","minWidth","width","hasFocus","deltaY","scrollLeft","deltaX","contextMenuArrowUpHTML","contextMenuArrowDownHTML","body","contextMenuWindowMargin","innerWidth","parentGrid","c","Object","defineProperty","get","set","value","isFinite","index","createFilterContextMenuItems","filterContainer","filterLabel","filterAutoCompleteButton","filterInput","cell","header","iRect","checkRegExpErrorState","background","contextFilterInputBackground","contextFilterInputColor","invalidFilterRegEx","contextFilterInvalidRegExpBackground","contextFilterInvalidRegExpColor","fillAutoComplete","count","blanksItem","row","cellValue","String","trim","blankValues","includes","blanksText","maxAutoCompleteItems","formatters","stopPropagation","disposeAutocomplete","keys","concat","map","key","createAutoCompleteContext","autoCompleteItems","onclick","disposeContextMenu","preventDefault","setFilter","en","columnFilters","filterOptionText","contextFilterButtonHTML","cf","h","getHeaderByName","removeFilterOptionText","removeFilterClick","controlInput","focus","addDefaultContextMenuItem","isNormalCell","isBackground","isColumnHeaderCellCap","isScrollBar","isCorner","isRowHeader","showFilter","showCopy","selections","reduce","copyText","execCommand","showPaste","clipBoardData","pasteText","paste","columnIndex","rowIndex","draw","showColumnSelector","columnSelectorText","d","getSchema","column","toggleColumnVisibility","hidden","setStorageData","columnSelectorHiddenText","columnSelectorVisibleText","hideColumnText","saveAppearance","showClearSettingsOption","sizes","rows","columns","clearSettingsOptionText","createRowOrders","createColumnOrders","storedSettings","columnWidth","cellWidth","cellHeight","allowSorting","showOrderByOption","showOrderByOptionTextAsc","order","showOrderByOptionTextDesc","contextmenuEvent","overridePos","createDiposeEvent","contextPosition","getLayerPos","NativeEvent","getCellAt","isGrid","contextMenuMarginLeft","canvasOffsetLeft","contextMenuMarginTop","canvasOffsetTop","mobileContextMenuMargin","getClippingRect","ele","boundingRect","eleRect","clipRect","w","parentRect","Infinity","columnHeaderCellHeight","getColumnHeaderCellHeight","rowHeaderCellWidth","getRowHeaderCellWidth","offsetTop","scrollBarWidth","offsetLeft","clipElement","clip","scrollingElement","nodeType","resizeEditInput","input","editCell","bm","gridBorderCollapse","borderWidth","cellBorderWidth","getVisibleCellByIndex","mobileEditInputHeight","cellPaddingLeft","ignoreScrollOffset","offsetParent","clientX","clientY","isChildGrid","endEdit","abort","abortEdit","newValue","oldValue","changes","defaultValue","aborted","addRow","createNewRowData","beginEditAt","inEnterMode","editable","adjacentCells","enumItems","enu","option","valueInEnum","scrollIntoView","setActiveCell","getAdjacentCells","multiLine","editCellZIndex","fontSize","editCellFontSize","scale","cellValueIsEmpty","shouldClearCellValue","nx","ny","altKey","nextRowIndex","shiftKey","Math","max","min","last","first","className","css","verticalAlign","marginLeft","padding","border","contextFilterInputBorder","borderRadius","contextFilterInputBorderRadius","lineHeight","fontWeight","fontFamily","contextFilterInputFontFamily","contextFilterInputFontSize","contextMenuBackground","contextMenuColor","contextFilterButtonBorder","contextFilterButtonBorderRadius","contextMenuFilterButtonFontFamily","contextMenuFilterButtonFontSize","cssFloat","childContextMenuArrowColor","contextMenuChildArrowFontSize","contextMenuFontFamily","contextMenuFontSize","contextMenuBorder","contextMenuPadding","contextMenuBorderRadius","opacity","contextMenuOpacity","overflow","contextMenuHoverBackground","contextMenuHoverColor","display","cursor","boxSizing","outline","margin","mobileEditFontFamily","mobileEditFontSize","editCellBorder","editCellColor","editCellBackgroundColor","appearance","webkitAppearance","mozAppearance","editCellPaddingLeft","editCellFontFamily","boxShadow","editCellBoxShadow","contextMenuItemMargin","contextMenuItemBorderRadius","contextMenuLabelMargin","contextMenuLabelDisplay","contextMenuLabelMinWidth","maxWidth","contextMenuLabelMaxWidth","whiteSpace","contextMenuCursor","contextMenuFilterInvalidExpresion","appendTo","setDom","ctx","context","eventParent","onblur","blur","parentIsCanvas","getContext","textBaseline","parentNodeStyle","touchstart","mouseup","mousedown","dblclick","mousemove","scrollWheel","copy","cut","keypress","keyup","keydown","perfCounters","cachedImagesDrawn","drawCount","perfWindowSize","entityCount","hiddenFrozenColumnCount","scrollDebugCounters","touchPPSCounters","htmlImageCache","fillArray","low","high","step","drawPerfLine","perfArr","arrIndex","useAbs","beginPath","moveTo","cx","cy","abs","lineTo","strokeStyle","stroke","drawOnAllImagesLoaded","loaded","html","img","complete","drawHtml","v","formattedValue","cacheKey","toString","round","drawImage","Image","onload","src","btoa","drawOrderByArrow","mt","columnHeaderOrderByArrowMarginTop","ml","columnHeaderOrderByArrowMarginLeft","mr","columnHeaderOrderByArrowMarginRight","aw","columnHeaderOrderByArrowWidth","ah","columnHeaderOrderByArrowHeight","fillStyle","columnHeaderOrderByArrowColor","columnHeaderOrderByArrowBorderColor","orderDirection","fill","drawTreeArrow","treeArrowMarginTop","treeArrowMarginRight","treeArrowMarginLeft","treeArrowWidth","treeArrowHeight","treeArrowColor","treeArrowBorderColor","openChildren","radiusRect","radius","b","quadraticCurveTo","fillRect","strokeRect","fillText","text","fillCircle","arc","PI","strokeCircle","clipFrozenArea","mode","lastFrozenColumnPixel","lastFrozenRowPixel","fillHandle","selectionHandleType","strokeHandle","addselectionHandle","hw","selectionHandleSize","tr","br","tl","bl","addBorderLine","l","addEllipsis","ellipsisCache","measureText","wrapText","splitChar","lines","calculatedLineHeight","word","words","split","textHeight","out","wrap","cellWhiteSpace","autoResize","autoResizeRows","elWidth","et","ellipsisText","elClipLength","plWidth","clippedVal","ogWordWidth","previousLine","line","cHeight","paddedHeight","measure","paddedWidth","originText","stepLength","direction","substr","drawText","ll","fontHeight","vPos","hPos","paddingLeft","orderByArrowWidth","horizontalAlignment","paddingRight","verticalAlignment","paddingBottom","lineSpacing","debug","active","font","debugFont","debugColor","stringify","pw","idx_ord","sortColumnIndex","getFrozenColumnsWidth","frozenColumn","getColummnWidth","internal","visible","checkScrollHeight","rowHeaderCell","treeGrid","rowOpen","rowHeight","cornerCell","rd","aCell","bc","selectionBorders","moveBorders","selectionHandles","rowHeaders","u","currentCell","performance","now","visibleRowHeights","orders","drawScrollBars","drawCorner","scrollBox","entities","m","scrollBarBoxMargin","scrollBarBorderColor","lineWidth","scrollBarBorderWidth","horizontalBox","horizontalBar","scrollBoxWidth","scrollWidth","verticalBox","verticalBar","scrollBoxHeight","horizontalBarVisible","scrollBarBackgroundColor","scrollBarBoxColor","horizontalBoxVisible","scrollBarActiveColor","scrollBarBoxBorderRadius","visibleCells","unshift","verticalBarVisible","verticalBoxVisible","scrollBarCornerBorderColor","scrollBarCornerBackgroundColor","corner","createHandlesOverlayArray","allowMovingSelection","selectionBorderTop","selectionBorderRight","selectionHandle","selectionBorderLeft","selectionBorderBottom","selectionHandleBehavior","createBorderOverlayArray","drawArray","propPrefix","offsetPoint","selectionBorder","isHeader","drawCell","rowOrderIndex","drawEach","headerIndex","columnOrderIndex","cellStyle","cellGridAttributes","isColumnHeader","selected","hovered","hovers","activeCell","rawValue","activeHeader","f","orderByArrowSize","treeArrowSize","visibleRows","paddingTop","cellLineHeight","cellLineSpacing","sortRowIndex","isNormal","gridId","userHeight","userWidth","cellHeightWithChildGrid","cellWidthWithChildGrid","save","tree","showRowNumbers","childGrids","createGrid","cellGridHeight","grid","orderBy","console","warn","filterTextPrefix","movingSelection","moveOffset","restore","drawRowHeader","rowData","showRowHeaders","drawHeaders","g","o","columnHeaderCell","nonFrozenHeaderWidth","drawHeaderColumnRange","start","end","rArgs","rhIndex","frozenRow","showColumnHeaders","scrollPixelLeft","columnHeaderCellBorderWidth","scrollIndexLeft","isColumnHeaderCell","endCap","drawRow","treeHeight","rowSansTreeHeight","trees","scrollIndexRight","scrollPixelRight","initDraw","drawBackground","gridBackgroundColor","drawFrozenRows","ln","allowFreezingRows","frozenMarkerBorderWidth","frozenMarkerWidth","drawRows","snapToRow","scrollPixelTop","scrollIndexTop","scrollIndexBottom","scrollPixelBottom","showNewRow","newRow","drawMoveMarkers","moveOverlayBorderWidth","moveOverlayBorderColor","setLineDash","moveOverlayBorderSegments","drawReorderMarkers","reorderObject","dragOffset","reorderMarkerBackgroundColor","reorderMarkerBorderWidth","reorderMarkerBorderColor","dragMode","reorderMarkerIndexBorderWidth","reorderMarkerIndexBorderColor","reorderTarget","drawBorder","gridBorderWidth","gridBorderColor","drawSelectionBorders","selectionOverlayBorderWidth","selectionOverlayBorderColor","dsb","drawSelectionHandles","selectionHandleBorderWidth","selectionHandleBorderColor","selectionHandleColor","az","touchSelectHandleZone","ax","ay","drawActiveCell","cl","acx","acy","acw","ach","selectionMode","activeCellOverlayBorderWidth","activeCellOverlayBorderColor","getHeaderWidth","drawFrozenMarkers","my","mx","xHover","yHover","allowFreezingColumns","frozenMarkerHoverColor","frozenMarkerColor","frozenMarkerHoverBorderColor","frozenMarkerBorderColor","freezeMarkerPosition","frozenMarkerActiveColor","frozenMarkerActiveBorderColor","drawPerfLines","showPerformance","px","py","ph","dpl","debugPerfChartTextColor","toFixed","debugPerfChartBackground","debugScrollHeightColor","debugScrollWidthColor","debugPerformanceColor","debugEntitiesColor","debugTouchPPSXColor","debugTouchPPSYColor","pop","yPPS","xPPS","drawDebug","perf","perfDelta","frozenColumnsWidth","htmlImages","startScale","scaleDelta","zoomDeltaStart","touchLength","touches","touchPosition","touchPosition1","scrollIndex","scrollPixel","canvasOffset","touchDelta","touchAnimateTo","scrollAnimation","touchPPS","touchPPST","xPPST","yPPST","touchDuration","pointerLockPosition","size","mouse","touch","touchStart","dragContext","debugBackgroundColor","lh","wheeling","fn","events","removeEachListener","sfn","defaultPrevented","dispatchEachEvent","getRatio","maxPixelRatio","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","drawAfterResize","vb","nb","co","isScrollBoxCorner","sbw","ratio","cellBorder","columnHeaderCellBorder","dataHeight","dataWidth","dims","ch","checkScrollBoxVisibility","overflowX","overflowY","setScrollBoxSize","setCanvasSize","dim","appliedInlineStyles","isComponet","scrollCache","reduceSchema","accumulator","va","args","widthBoxRatio","heightBoxRatio","scrollBarBoxMinSize","scrollBarBoxWidth","bar","box","page","pageUpDownOverlap","scroll","dontDraw","floor","ctrl","ctrlKey","metaKey","persistantSelectionMode","singleSelectionMode","dragBounds","sBounds","delta","previousCell","scrollTimer","isInGrid","rowBoundaryCrossed","columnBoundaryCrossed","cellBoundaryCrossed","prefix","draggingItem","scrollModes","dragItem","selecting","dragStart","dragStartObject","getSelectionBounds","ignoreNextClick","selectRow","dragAddToSelection","selectionBounds","selectArea","autoScrollZone","startingBounds","checkSelectionChange","sb","getSelectedData","selectAll","columnHeaderClickBehavior","selectColumn","treeArrowClickRadius","toggleTree","dragResizeColumn","resizingStartingWidth","resizingStartingHeight","minColumnWidth","minRowHeight","resizeScrollZone","resizeChildGrids","globalRowResize","stopDragResize","scrollGrid","scrollPointerLock","scrollStartMode","movementX","movementY","scrollMode","scrollStart","scrollRepeatRate","selectionScrollIncrement","stopScrollGrid","exitPointerLock","dragReorder","columReorder","rowReorder","allowColumnReordering","allowRowReordering","source","reorderDeadZone","stopDragReorder","oIndex","tIndex","cr","dragMove","stopDragMove","moveSelection","freezeMove","stopFreezeMove","startFreezeMove","lastMouseDownTarget","button","move","freeze","requestPointerLock","dragging","cols","isPrintableKeyEvent","selectNone","Number","isArrowKey","selectionFollowsActiveCell","selectedData","fitColumnToValues","autosize","deltaMode","touchHaltAnimation","scrollTo","pasteData","pasteValue","mimeType","startRowIndex","startColIndex","getVisibleSchema","isSupportedHtmlTable","htmlString","parseData","cleanedHtmlData","substring","match","cellData","forEachSelectedCell","colName","realRowIndex","cells","existingRowData","newRowData","assign","colIndex","columnName","affectedCells","getNextVisibleColumnIndex","visibleColumnIndex","getVisibleColumnIndexOf","event","clipboardItems","Map","from","clipboardData","supportedMimeTypes","pasteableItems","join","itemToPaste","pasteType","getAsString","tableRows","textRows","outputHeaders","outputHeaderKeys","sData","htmlSafe","fCopyCell","addHeaders","headers","useHtml","hVal","addCellValue","trRow","textRow","rowKeys","sSorted","setData","ctor","treeGridAttributes","storageName","invalidSearchExpClass","localStyleLibraryStorageKey","orderings","add","sortFunction","col","sort","filters","currentFilter","sorters","parsers","schemaHashes","componentL1Events","eventNames","expandToRow","orderedIndex","visibility","localStorage","setItem","tempSchema","applyDefaultValue","forEachHeader","getSchemaNameHash","applyFilter","refreshFromOrigialData","applyDataTransforms","getBestGuessDataType","drawChildGrids","gridKey","setTimer","selectionScrollZone","originalData","validateColumn","setDefaults","obj1","obj2","setAttributes","eachAttribute","setStyle","eachStyle","findColumnMaxTextLength","contextmenu","disconnect","tryLoadStoredSettings","reloadStoredValues","getDomRoot","shadowRoot","host","getFontName","fontStyle","getFontHeight","parseFloat","parseStyleValue","initProp","propName","getStyleProperty","styleKeys","supressDrawAndEvent","isDim","getItem","message","initialized","addStyleKeyIfNoneExists","publicStyleKeyIntf","initScrollBox","ie","navigator","userAgent","edge","webKit","moz","cursorGrab","cursorGrabing","cursorGrabbing","clearChangeLog","gotoCell","gotoRow","findColumnScrollLeft","findRowScrollTop","isCellVisible","isRowVisible","isColumnVisible","getSchemaFromData","expandTree","collapseTree","insertRow","deleteRow","insertColumn","deleteColumn","addColumn","setRowHeight","setColumnWidth","resetColumnWidths","resetRowHeights","assertPxColor","clearPxColorAssertions","integerToAlpha","DOMStyles","valueObject","filterFor","filterRegExp","regEnd","pattern","exec","flags","flagLength","RegExp","toLocaleUpperCase","innerText","textContent","TypeError","currentCursor","find","eventName","RangeError","eachDataRow","setTreeGridAttributes","setCellGridAttributes","schemaGetter","schemaSetter","eachSchemaColumn","hideEachSchemaColumn","getTypes","parseInnerHtml","callback","etl","autoGenerateSchema","dataGetter","dataSetter","autoResizeColumns","sHeight","sWidth","setScrollTop","preventScrollEvent","setScrollLeft","supressDrawEvent","webComponent","modules","dom","publicMethods","Grid","eval","module","attachShadow","HTMLElement","create","customElements","observedAttributes","define","canvasDatagrid","require","EXCLUDE_GLOBAL","tKeys","argKey","tKey","sKey","ordA","charCodeAt","ordZ","len","fromCharCode","offsetX","offsetY","targetX","targetY","sbh","isColumnSelected","colIsSelected","shift","supressEvent","addCol","removeCol","st","de","ri","dragObject","childGrid","trArgs","treeGridHeight","dontSetStorageData","sorter","sel","xi","maxRowLength","minXi","yi","lastSourceIndex","cidx","useTouchScrollZones","getBorder","entitiy","borderResizeZone","tsz","touchScrollZone","moveMode","borderDragBehavior","moveBorder","xBorderBehavior","yBorderBehavior","isVerticalScrollBar","isHorizontalScrollBar","allowColumnResize","allowColumnResizeFromCell","allowRowHeaderResize","allowRowResize","allowRowResizeFromCell","rowGrabZoneSize","maxCol","minCol","mapEachSchemaColumn","bounds","rowHeaderCellFont","autosizePadding","autosizeHeaderCellPadding","rowHeaderCellPaddingRight","rowHeaderCellPaddingLeft","formatter","columnHeaderCellFont","headerCellPaddingRight","headerCellPaddingLeft","cellFont","cellPaddingRight","cellAutoResizePadding","total","getRowHeight","cellFormatterString","headerCell","asc","localeCompare","date","Date","getTime","touchTimerMs","debounceTouchMove","touchMoving","touchScrollTimeout","animationFrames","getTouchPos","touchIndex","easingFunctions","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easing","touchEasingMethod","calculatePPSTimed","touchSigmaTimed","calculatePPS","touchSigma","touchEndAnimation","touchReleaseAnimationDurationMs","stopAnimation","touchEditCell","touchCell","clearInterval","calculatePPSTimer","touchDeadZone","touchingCell","changedTouches","startingCell","touchContextTimeout","touchStartEvent","zoomAltered","touchStart1","touchScrollStart","touchContextMenuTimeMs","setInterval","touchEndEvents","touchmove","passive","touchend","touchcancel","touchSelect","handleType","touchSelecting","touchMove","rw","rScrollZone","lScrollZone","bScrollZone","tScrollZone","t1","t2","touchZoomSensitivity","touchZoomMin","touchZoomMax","touchScroll","dz","touchReleaseAcceleration","scrollAnimationPPSThreshold"],"mappings":"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","file":"canvas-datagrid.debug.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"canvasDatagrid\"] = factory();\n\telse\n\t\troot[\"canvasDatagrid\"] = factory();\n})(self, function() {\nreturn ","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport defaults from './defaults';\n\nexport default function () {\n var typeMap,\n component = {};\n component.dehyphenateProperty = function hyphenateProperty(prop) {\n prop = prop.replace('--cdg-', '');\n var p = '',\n nextLetterCap;\n Array.prototype.forEach.call(prop, function (char) {\n if (nextLetterCap) {\n nextLetterCap = false;\n p += char.toUpperCase();\n return;\n }\n if (char === '-') {\n nextLetterCap = true;\n return;\n }\n p += char;\n });\n return p;\n };\n component.hyphenateProperty = function hyphenateProperty(prop, cust) {\n var p = '';\n Array.prototype.forEach.call(prop, function (char) {\n if (char === char.toUpperCase()) {\n p += '-' + char.toLowerCase();\n return;\n }\n p += char;\n });\n return (cust ? '--cdg-' : '') + p;\n };\n function getDefaultItem(base, item) {\n var i = {},\n r;\n defaults(i);\n r = i.defaults[base].filter(function (i) {\n return (\n i[0].toLowerCase() === item.toLowerCase() ||\n component.hyphenateProperty(i[0]) === item.toLowerCase() ||\n component.hyphenateProperty(i[0], true) === item.toLowerCase()\n );\n })[0];\n return r;\n }\n component.applyComponentStyle = function (supressChangeAndDrawEvents, intf) {\n if (!intf.isComponent) {\n return;\n }\n var cStyle = window.getComputedStyle(\n intf.tagName === 'CANVAS-DATAGRID' ? intf : intf.canvas,\n null,\n ),\n defs = {};\n intf.computedStyle = cStyle;\n defaults(defs);\n defs = defs.defaults.styles;\n defs.forEach(function (def) {\n var val;\n val = cStyle.getPropertyValue(component.hyphenateProperty(def[0], true));\n if (val === '') {\n val = cStyle.getPropertyValue(\n component.hyphenateProperty(def[0], false),\n );\n }\n if (val !== '' && typeof val === 'string') {\n intf.setStyleProperty(\n def[0],\n typeMap[typeof def[1]](\n val.replace(/^\\s+/, '').replace(/\\s+$/, ''),\n def[1],\n ),\n true,\n );\n }\n });\n if (!supressChangeAndDrawEvents && intf.dispatchEvent) {\n requestAnimationFrame(function () {\n intf.resize(true);\n });\n intf.dispatchEvent('stylechanged', intf.style);\n }\n };\n typeMap = {\n data: function (strData) {\n try {\n return JSON.parse(strData);\n } catch (e) {\n throw new Error('Cannot read JSON data in canvas-datagrid data.');\n }\n },\n schema: function (strSchema) {\n try {\n return JSON.parse(strSchema);\n } catch (e) {\n throw new Error(\n 'Cannot read JSON data in canvas-datagrid schema attribute.',\n );\n }\n },\n number: function (strNum, def) {\n var n = parseInt(strNum, 10);\n return isNaN(n) ? def : n;\n },\n boolean: function (strBool) {\n return /true/i.test(strBool);\n },\n string: function (str) {\n return str;\n },\n };\n component.getObservableAttributes = function () {\n var i = {},\n attrs = ['data', 'schema', 'style', 'className', 'name'];\n defaults(i);\n i.defaults.attributes.forEach(function (attr) {\n attrs.push(attr[0].toLowerCase());\n });\n return attrs;\n };\n component.disconnectedCallback = function () {\n this.connected = false;\n };\n component.connectedCallback = function () {\n var intf = this;\n intf.parentDOMNode.innerHTML = '';\n intf.parentDOMNode.appendChild(intf.canvas);\n intf.connected = true;\n component.observe(intf);\n component.applyComponentStyle(true, intf);\n intf.resize(true);\n };\n component.adoptedCallback = function () {\n this.resize();\n };\n component.attributeChangedCallback = function (attrName, oldVal, newVal) {\n var tfn,\n intf = this,\n def;\n if (attrName === 'style') {\n component.applyComponentStyle(false, intf);\n return;\n }\n if (attrName === 'data') {\n if (intf.dataType === 'application/x-canvas-datagrid') {\n intf.dataType = 'application/json+x-canvas-datagrid';\n }\n intf.data = newVal;\n return;\n }\n if (attrName === 'schema') {\n intf.schema = typeMap.schema(newVal);\n return;\n }\n if (attrName === 'name') {\n intf.name = newVal;\n return;\n }\n if (attrName === 'class' || attrName === 'className') {\n return;\n }\n def = getDefaultItem('attributes', attrName);\n if (def) {\n tfn = typeMap[typeof def[1]];\n intf.attributes[def[0]] = tfn(newVal);\n return;\n }\n if (/^on/.test(attrName)) {\n intf.addEventListener('on' + attrName, Function('e', newVal));\n }\n return;\n };\n component.observe = function (intf) {\n var observer;\n if (!window.MutationObserver) {\n return;\n }\n intf.applyComponentStyle = function () {\n component.applyComponentStyle(false, intf);\n intf.resize();\n };\n /**\n * Applies the computed css styles to the grid. In some browsers, changing directives in attached style sheets does not automatically update the styles in this component. It is necessary to call this method to update in these cases.\n * @memberof canvasDatagrid\n * @name applyComponentStyle\n * @method\n */\n observer = new window.MutationObserver(function (mutations) {\n var checkInnerHTML, checkStyle;\n Array.prototype.forEach.call(mutations, function (mutation) {\n if (\n mutation.attributeName === 'class' ||\n mutation.attributeName === 'style'\n ) {\n checkStyle = true;\n return;\n }\n if (mutation.target.nodeName === 'STYLE') {\n checkStyle = true;\n return;\n }\n if (\n mutation.target.parentNode &&\n mutation.target.parentNode.nodeName === 'STYLE'\n ) {\n checkStyle = true;\n return;\n }\n if (\n mutation.target === intf &&\n (mutation.addedNodes.length > 0 || mutation.type === 'characterData')\n ) {\n checkInnerHTML = true;\n }\n });\n if (checkStyle) {\n intf.applyComponentStyle(false, intf);\n }\n if (checkInnerHTML) {\n if (intf.dataType === 'application/x-canvas-datagrid') {\n intf.dataType = 'application/json+x-canvas-datagrid';\n }\n intf.data = intf.innerHTML;\n }\n });\n observer.observe(intf, {\n characterData: true,\n childList: true,\n attributes: true,\n subtree: true,\n });\n Array.prototype.forEach.call(\n document.querySelectorAll('style'),\n function (el) {\n observer.observe(el, {\n characterData: true,\n childList: true,\n attributes: true,\n subtree: true,\n });\n },\n );\n };\n return component;\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false, Event: false*/\n'use strict';\n\nexport default function (self) {\n var zIndexTop, hoverScrollTimeout, autoCompleteContext;\n function applyContextItemStyle(contextItemContainer) {\n self.createInlineStyle(\n contextItemContainer,\n 'canvas-datagrid-context-menu-item' + (self.mobile ? '-mobile' : ''),\n );\n contextItemContainer.addEventListener('mouseover', function () {\n self.createInlineStyle(\n contextItemContainer,\n 'canvas-datagrid-context-menu-item:hover',\n );\n });\n contextItemContainer.addEventListener('mouseout', function () {\n self.createInlineStyle(\n contextItemContainer,\n 'canvas-datagrid-context-menu-item',\n );\n });\n }\n function createContextMenu(ev, pos, items, parentContextMenu) {\n var container = document.createElement('div'),\n upArrow = document.createElement('div'),\n downArrow = document.createElement('div'),\n children = [],\n selectedIndex = -1,\n intf = {},\n rect;\n if (!Array.isArray(items)) {\n throw new Error('createContextMenu expects an array.');\n }\n function createItems() {\n items.forEach(function (item) {\n var contextItemContainer = document.createElement('div'),\n childMenuArrow;\n function removeChildContext(e) {\n if (\n e.relatedTarget === container ||\n item.contextMenu.container === e.relatedTarget ||\n childMenuArrow === e.relatedTarget ||\n contextItemContainer === e.relatedTarget ||\n item.contextMenu.container.contains(e.relatedTarget)\n ) {\n return;\n }\n item.contextMenu.dispose();\n children.splice(children.indexOf(item.contextMenu), 1);\n item.contextMenu = undefined;\n contextItemContainer.removeEventListener(\n 'mouseout',\n removeChildContext,\n );\n container.removeEventListener('mouseout', removeChildContext);\n contextItemContainer.setAttribute('contextOpen', '0');\n contextItemContainer.setAttribute('opening', '0');\n }\n function contextAddCallback(items) {\n // check yet again if the user hasn't moved off\n if (\n contextItemContainer.getAttribute('opening') !== '1' ||\n contextItemContainer.getAttribute('contextOpen') === '1'\n ) {\n return;\n }\n var cPos = contextItemContainer.getBoundingClientRect();\n cPos = {\n left:\n cPos.left +\n self.style.childContextMenuMarginLeft +\n container.offsetWidth,\n top: cPos.top + self.style.childContextMenuMarginTop,\n bottom: cPos.bottom,\n right: cPos.right,\n };\n item.contextMenu = createContextMenu(ev, cPos, items, intf);\n contextItemContainer.setAttribute('contextOpen', '1');\n contextItemContainer.addEventListener('mouseout', removeChildContext);\n container.addEventListener('mouseout', removeChildContext);\n children.push(item.contextMenu);\n }\n function createChildContext() {\n var i;\n if (contextItemContainer.getAttribute('contextOpen') === '1') {\n return;\n }\n contextItemContainer.setAttribute('opening', '1');\n if (typeof item.items === 'function') {\n i = item.items.apply(intf, [\n function (items) {\n contextAddCallback(items);\n },\n ]);\n if (i !== undefined && Array.isArray(i)) {\n contextAddCallback(i);\n }\n return;\n }\n contextAddCallback(item.items);\n }\n function addItem(item) {\n function addContent(content) {\n if (content === null) {\n return;\n }\n if (typeof content === 'function') {\n return addContent(content(ev));\n }\n if (typeof content === 'object') {\n contextItemContainer.appendChild(content);\n return;\n }\n applyContextItemStyle(contextItemContainer);\n contextItemContainer.innerHTML = content;\n return;\n }\n addContent(item.title);\n item.contextItemContainer = contextItemContainer;\n if (\n (item.items && item.items.length > 0) ||\n typeof item.items === 'function'\n ) {\n childMenuArrow = document.createElement('div');\n self.createInlineStyle(\n childMenuArrow,\n 'canvas-datagrid-context-child-arrow',\n );\n childMenuArrow.innerHTML = self.style.childContextMenuArrowHTML;\n contextItemContainer.appendChild(childMenuArrow);\n contextItemContainer.addEventListener(\n 'mouseover',\n createChildContext,\n );\n contextItemContainer.addEventListener('mouseout', function () {\n contextItemContainer.setAttribute('opening', '0');\n });\n }\n if (item.click) {\n contextItemContainer.addEventListener('click', function (ev) {\n item.click.apply(self, [ev]);\n });\n }\n }\n addItem(item);\n container.appendChild(contextItemContainer);\n });\n }\n function clickIndex(idx) {\n items[idx].contextItemContainer.dispatchEvent(new Event('click'));\n }\n function checkArrowVisibility() {\n if (container.scrollTop > 0) {\n self.parentDOMNode.appendChild(upArrow);\n } else if (upArrow.parentNode) {\n upArrow.parentNode.removeChild(upArrow);\n }\n if (\n container.scrollTop >=\n container.scrollHeight - container.offsetHeight &&\n downArrow.parentNode\n ) {\n downArrow.parentNode.removeChild(downArrow);\n } else if (\n container.scrollHeight - container.offsetHeight > 0 &&\n !(\n container.scrollTop >=\n container.scrollHeight - container.offsetHeight\n )\n ) {\n self.parentDOMNode.appendChild(downArrow);\n }\n }\n function startHoverScroll(type) {\n return function t() {\n var a = self.attributes.contextHoverScrollAmount;\n if (type === 'up' && container.scrollTop === 0) {\n return;\n }\n if (type === 'down' && container.scrollTop === container.scrollHeight) {\n return;\n }\n container.scrollTop += type === 'up' ? -a : a;\n hoverScrollTimeout = setTimeout(\n t,\n self.attributes.contextHoverScrollRateMs,\n type,\n );\n };\n }\n function endHoverScroll(type) {\n return function () {\n clearTimeout(hoverScrollTimeout);\n };\n }\n function init() {\n var loc = {},\n s = self.scrollOffset(self.canvas);\n if (zIndexTop === undefined) {\n zIndexTop = self.style.contextMenuZIndex;\n }\n createItems();\n self.createInlineStyle(\n container,\n 'canvas-datagrid-context-menu' + (self.mobile ? '-mobile' : ''),\n );\n loc.x = pos.left - s.left;\n loc.y = pos.top - s.top;\n loc.height = 0;\n zIndexTop += 1;\n container.style.position = 'absolute';\n upArrow.style.color = self.style.contextMenuArrowColor;\n downArrow.style.color = self.style.contextMenuArrowColor;\n [upArrow, downArrow].forEach(function (el) {\n el.style.textAlign = 'center';\n el.style.position = 'absolute';\n el.style.zIndex = zIndexTop + 1;\n });\n container.style.zIndex = zIndexTop;\n if (parentContextMenu && parentContextMenu.inputDropdown) {\n container.style.maxHeight =\n window.innerHeight -\n loc.y -\n self.style.autocompleteBottomMargin +\n 'px';\n container.style.minWidth = pos.width + 'px';\n loc.y += pos.height;\n }\n if (self.mobile) {\n container.style.width = pos.width + 'px';\n }\n container.style.left = loc.x + 'px';\n container.style.top = loc.y + 'px';\n container.addEventListener('scroll', checkArrowVisibility);\n container.addEventListener('wheel', function (e) {\n if (self.hasFocus) {\n container.scrollTop += e.deltaY;\n container.scrollLeft += e.deltaX;\n }\n checkArrowVisibility();\n });\n upArrow.innerHTML = self.style.contextMenuArrowUpHTML;\n downArrow.innerHTML = self.style.contextMenuArrowDownHTML;\n container.appendChild(upArrow);\n document.body.appendChild(downArrow);\n document.body.appendChild(container);\n rect = container.getBoundingClientRect();\n // TODO: fix !(parentContextMenu && parentContextMenu.inputDropdown) state (autocomplete)\n if (rect.bottom > window.innerHeight) {\n if (!(parentContextMenu && parentContextMenu.inputDropdown)) {\n loc.y -=\n rect.bottom +\n self.style.contextMenuWindowMargin -\n window.innerHeight;\n }\n if (loc.y < 0) {\n loc.y = self.style.contextMenuWindowMargin;\n }\n if (\n container.offsetHeight >\n window.innerHeight - self.style.contextMenuWindowMargin\n ) {\n container.style.height =\n window.innerHeight - self.style.contextMenuWindowMargin * 2 + 'px';\n }\n }\n if (rect.right > window.innerWidth) {\n loc.x -=\n rect.right - window.innerWidth + self.style.contextMenuWindowMargin;\n }\n if (loc.x < 0) {\n loc.x = self.style.contextMenuWindowMargin;\n }\n if (loc.y < 0) {\n loc.y = self.style.contextMenuWindowMargin;\n }\n container.style.left = loc.x + 'px';\n container.style.top = loc.y + 'px';\n rect = container.getBoundingClientRect();\n upArrow.style.top = rect.top + 'px';\n downArrow.style.top =\n rect.top + rect.height - downArrow.offsetHeight + 'px';\n upArrow.style.left = rect.left + 'px';\n downArrow.style.left = rect.left + 'px';\n downArrow.style.width = container.offsetWidth + 'px';\n upArrow.style.width = container.offsetWidth + 'px';\n downArrow.addEventListener('mouseover', startHoverScroll('down'));\n downArrow.addEventListener('mouseout', endHoverScroll('down'));\n upArrow.addEventListener('mouseover', startHoverScroll('up'));\n upArrow.addEventListener('mouseout', endHoverScroll('up'));\n checkArrowVisibility();\n }\n intf.parentGrid = self.intf;\n intf.parentContextMenu = parentContextMenu;\n intf.container = container;\n init();\n intf.clickIndex = clickIndex;\n intf.rect = rect;\n intf.items = items;\n intf.upArrow = upArrow;\n intf.downArrow = downArrow;\n intf.dispose = function () {\n clearTimeout(hoverScrollTimeout);\n children.forEach(function (c) {\n c.dispose();\n });\n [downArrow, upArrow, container].forEach(function (el) {\n if (el.parentNode) {\n el.parentNode.removeChild(el);\n }\n });\n };\n Object.defineProperty(intf, 'selectedIndex', {\n get: function () {\n return selectedIndex;\n },\n set: function (value) {\n if (typeof value !== 'number' || isNaN(value || !isFinite(value))) {\n throw new Error('Context menu selected index must be a sane number.');\n }\n selectedIndex = value;\n if (selectedIndex > items.length - 1) {\n selectedIndex = items.length - 1;\n }\n if (selectedIndex < 0) {\n selectedIndex = 0;\n }\n items.forEach(function (item, index) {\n if (index === selectedIndex) {\n return self.createInlineStyle(\n item.contextItemContainer,\n 'canvas-datagrid-context-menu-item:hover',\n );\n }\n self.createInlineStyle(\n item.contextItemContainer,\n 'canvas-datagrid-context-menu-item',\n );\n });\n },\n });\n return intf;\n }\n function createFilterContextMenuItems(e) {\n var filterContainer = document.createElement('div'),\n filterLabel = document.createElement('div'),\n filterAutoCompleteButton = document.createElement('button'),\n filterInput = document.createElement('input'),\n n =\n e.cell && e.cell.header\n ? e.cell.header.title || e.cell.header.name\n : '',\n iRect;\n function checkRegExpErrorState() {\n filterInput.style.background = self.style.contextFilterInputBackground;\n filterInput.style.color = self.style.contextFilterInputColor;\n if (self.invalidFilterRegEx) {\n filterInput.style.background =\n self.style.contextFilterInvalidRegExpBackground;\n filterInput.style.color = self.style.contextFilterInvalidRegExpColor;\n }\n }\n function fillAutoComplete() {\n var count = 0;\n var items = {};\n var blanksItem = [];\n\n self.data.forEach(function (row) {\n var cellValue =\n row[e.cell.header.name] == null\n ? row[e.cell.header.name]\n : String(row[e.cell.header.name]).trim();\n var value = self.blankValues.includes(cellValue)\n ? self.attributes.blanksText\n : cellValue;\n\n if (items[value] || count > self.attributes.maxAutoCompleteItems) {\n return;\n }\n count += 1;\n items[value] = {\n title: self.formatters[e.cell.header.type || 'string']({\n cell: { value: value },\n }),\n click: function (e) {\n filterInput.value = value;\n e.stopPropagation();\n filterInput.dispatchEvent(new Event('keyup'));\n self.disposeAutocomplete();\n return;\n },\n };\n });\n\n if (Object.keys(items).indexOf(self.attributes.blanksText) !== -1) {\n blanksItem.push(items[self.attributes.blanksText]);\n delete items[self.attributes.blanksText];\n }\n\n return blanksItem.concat(\n Object.keys(items).map(function (key) {\n return items[key];\n }),\n );\n }\n\n function createAutoCompleteContext(ev) {\n if (ev && ['ArrowDown', 'ArrowUp', 'Enter', 'Tab'].includes(ev.key)) {\n return;\n }\n\n var autoCompleteItems = fillAutoComplete();\n\n iRect = filterInput.getBoundingClientRect();\n if (autoCompleteContext) {\n autoCompleteContext.dispose();\n autoCompleteContext = undefined;\n }\n autoCompleteContext = createContextMenu(\n e,\n {\n left: iRect.left,\n top: iRect.top,\n right: iRect.right,\n bottom: iRect.bottom,\n height: iRect.height,\n width: iRect.width,\n },\n autoCompleteItems,\n { inputDropdown: true },\n );\n autoCompleteContext.selectedIndex = 0;\n }\n self.createInlineStyle(filterLabel, 'canvas-datagrid-context-menu-label');\n self.createInlineStyle(\n filterAutoCompleteButton,\n 'canvas-datagrid-context-menu-filter-button',\n );\n self.createInlineStyle(\n filterInput,\n 'canvas-datagrid-context-menu-filter-input',\n );\n checkRegExpErrorState();\n filterInput.onclick = self.disposeAutocomplete;\n filterInput.addEventListener('keydown', function (e) {\n if (e.key === 'ArrowDown') {\n autoCompleteContext.selectedIndex += 1;\n }\n\n if (e.key === 'ArrowUp') {\n autoCompleteContext.selectedIndex -= 1;\n }\n\n if (e.key === 'Enter') {\n autoCompleteContext.clickIndex(autoCompleteContext.selectedIndex);\n self.disposeContextMenu();\n }\n\n if (e.key === 'Tab') {\n autoCompleteContext.clickIndex(autoCompleteContext.selectedIndex);\n e.preventDefault();\n }\n\n if (e.key === 'Escape') {\n self.disposeContextMenu();\n }\n });\n filterInput.addEventListener('keyup', function () {\n self.setFilter(e.cell.header.name, filterInput.value);\n });\n filterInput.addEventListener('keyup', createAutoCompleteContext);\n ['focus', 'blur', 'keydown', 'keyup', 'change'].forEach(function (en) {\n filterInput.addEventListener(en, checkRegExpErrorState);\n });\n filterInput.value = e.cell.header\n ? self.columnFilters[e.cell.header.name] || ''\n : '';\n filterLabel.innerHTML = self.attributes.filterOptionText.replace(/%s/g, n);\n filterAutoCompleteButton.onclick = function () {\n if (autoCompleteContext) {\n return self.disposeAutocomplete();\n }\n createAutoCompleteContext();\n };\n filterAutoCompleteButton.innerHTML = self.style.contextFilterButtonHTML;\n filterContainer.addEventListener('click', function (e) {\n return e.stopPropagation();\n });\n filterContainer.appendChild(filterLabel);\n filterContainer.appendChild(filterInput);\n filterContainer.appendChild(filterAutoCompleteButton);\n e.items.push({\n title: filterContainer,\n });\n if (Object.keys(self.columnFilters).length) {\n Object.keys(self.columnFilters).forEach(function (cf) {\n var h = self.getHeaderByName(cf);\n e.items.push({\n title: self.attributes.removeFilterOptionText.replace(\n /%s/g,\n h.title || h.name,\n ),\n click: function removeFilterClick(e) {\n e.preventDefault();\n self.setFilter(cf, '');\n self.controlInput.focus();\n },\n });\n });\n }\n }\n function addDefaultContextMenuItem(e) {\n var isNormalCell =\n !(\n e.cell.isBackground ||\n e.cell.isColumnHeaderCellCap ||\n e.cell.isScrollBar ||\n e.cell.isCorner ||\n e.cell.isRowHeader\n ) && e.cell.header;\n if (self.attributes.showFilter && isNormalCell) {\n createFilterContextMenuItems(e);\n }\n if (\n self.attributes.showCopy &&\n self.selections.reduce(function (p, r) {\n return p + r.length;\n }, 0) > 0\n ) {\n e.items.push({\n title: self.attributes.copyText,\n click: function () {\n document.execCommand('copy');\n self.disposeContextMenu();\n self.controlInput.focus();\n },\n });\n }\n if (self.attributes.showPaste && self.clipBoardData) {\n e.items.push({\n title: self.attributes.pasteText,\n click: function () {\n self.paste(self.clipBoardData, e.cell.columnIndex, e.cell.rowIndex);\n self.draw();\n },\n });\n }\n if (self.attributes.showColumnSelector) {\n e.items.push({\n title: self.attributes.columnSelectorText,\n items: function () {\n var d = [];\n self.getSchema().forEach(function (column) {\n function toggleColumnVisibility(e) {\n column.hidden = !column.hidden;\n self.dispatchEvent('togglecolumn', {\n column: column,\n hidden: column.hidden,\n });\n e.preventDefault();\n self.stopPropagation(e);\n self.disposeContextMenu();\n self.resize(true);\n self.setStorageData();\n }\n var el = document.createElement('div');\n applyContextItemStyle(el);\n el.addEventListener('touchstart', toggleColumnVisibility);\n el.addEventListener('click', toggleColumnVisibility);\n el.innerHTML =\n (column.hidden\n ? self.attributes.columnSelectorHiddenText\n : self.attributes.columnSelectorVisibleText) +\n (column.title || column.name);\n d.push({\n title: el,\n });\n });\n return d;\n },\n });\n if (e.cell && e.cell.header && e.cell.columnIndex > -1) {\n e.items.push({\n title: self.attributes.hideColumnText.replace(\n /%s/gi,\n e.cell.header.title || e.cell.header.name,\n ),\n click: function (ev) {\n self.getSchema()[e.cell.columnIndex].hidden = true;\n ev.preventDefault();\n self.stopPropagation(ev);\n self.disposeContextMenu();\n self.setStorageData();\n setTimeout(function () {\n self.resize(true);\n }, 10);\n },\n });\n }\n }\n if (\n self.attributes.saveAppearance &&\n self.attributes.showClearSettingsOption &&\n (Object.keys(self.sizes.rows).length > 0 ||\n Object.keys(self.sizes.columns).length > 0)\n ) {\n e.items.push({\n title: self.attributes.clearSettingsOptionText,\n click: function (e) {\n e.preventDefault();\n self.sizes.rows = {};\n self.sizes.columns = {};\n self.createRowOrders();\n self.createColumnOrders();\n self.storedSettings = undefined;\n self.dispatchEvent('resizecolumn', {\n columnWidth: self.style.cellWidth,\n });\n self.dispatchEvent('resizerow', {\n cellHeight: self.style.cellHeight,\n });\n self.setStorageData();\n self.resize(true);\n self.disposeContextMenu();\n self.controlInput.focus();\n },\n });\n }\n if (\n self.attributes.allowSorting &&\n self.attributes.showOrderByOption &&\n isNormalCell\n ) {\n e.items.push({\n title: self.attributes.showOrderByOptionTextAsc.replace(\n '%s',\n e.cell.header.title || e.cell.header.name,\n ),\n click: function (ev) {\n ev.preventDefault();\n self.order(e.cell.header.name, 'asc');\n self.controlInput.focus();\n },\n });\n e.items.push({\n title: self.attributes.showOrderByOptionTextDesc.replace(\n '%s',\n e.cell.header.title || e.cell.header.name,\n ),\n click: function (ev) {\n ev.preventDefault();\n self.order(e.cell.header.name, 'desc');\n self.disposeContextMenu();\n self.controlInput.focus();\n },\n });\n }\n }\n self.disposeAutocomplete = function () {\n if (autoCompleteContext) {\n autoCompleteContext.dispose();\n autoCompleteContext = undefined;\n }\n };\n self.disposeContextMenu = function () {\n document.removeEventListener('click', self.disposeContextMenu);\n zIndexTop = self.style.contextMenuZIndex;\n self.disposeAutocomplete();\n if (self.contextMenu) {\n self.contextMenu.dispose();\n }\n self.contextMenu = undefined;\n };\n self.contextmenuEvent = function (e, overridePos) {\n if (!self.hasFocus && e.target !== self.canvas) {\n return;\n }\n function createDiposeEvent() {\n requestAnimationFrame(function () {\n document.addEventListener('click', self.disposeContextMenu);\n document.removeEventListener('mouseup', createDiposeEvent);\n });\n }\n var contextPosition,\n items = [],\n pos = overridePos || self.getLayerPos(e),\n ev = {\n NativeEvent: e,\n cell: self.getCellAt(pos.x, pos.y),\n items: items,\n };\n if (!ev.cell.isGrid) {\n addDefaultContextMenuItem(ev);\n }\n if (self.dispatchEvent('contextmenu', ev)) {\n return;\n }\n if (!ev.cell.isGrid) {\n if (self.contextMenu) {\n self.disposeContextMenu();\n }\n contextPosition = {\n left:\n pos.x +\n pos.rect.left +\n self.style.contextMenuMarginLeft +\n self.canvasOffsetLeft,\n top:\n pos.y +\n pos.rect.top +\n self.style.contextMenuMarginTop +\n self.canvasOffsetTop,\n right: ev.cell.width + ev.cell.x + pos.rect.left,\n bottom: ev.cell.height + ev.cell.y + pos.rect.top,\n height: ev.cell.height,\n width: ev.cell.width,\n };\n if (self.mobile) {\n contextPosition.left = self.style.mobileContextMenuMargin + 'px';\n contextPosition.width =\n self.width - self.style.mobileContextMenuMargin * 2 + 'px';\n }\n self.contextMenu = createContextMenu(ev, contextPosition, items);\n document.addEventListener('mouseup', createDiposeEvent);\n e.preventDefault();\n }\n };\n return;\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n\n'use strict';\nexport default function (self) {\n self.defaults = {\n attributes: [\n ['allowColumnReordering', true],\n ['allowColumnResize', true],\n ['allowColumnResizeFromCell', false],\n ['allowFreezingRows', false],\n ['allowFreezingColumns', false],\n ['allowMovingSelection', true],\n ['allowRowHeaderResize', true],\n ['allowRowReordering', false],\n ['allowRowResize', true],\n ['allowRowResizeFromCell', false],\n ['allowSorting', true],\n ['autoGenerateSchema', false],\n ['autoResizeColumns', false],\n ['autoResizeRows', false],\n ['blanksText', '(Blanks)'],\n ['borderDragBehavior', 'none'],\n ['borderResizeZone', 10],\n ['clearSettingsOptionText', 'Clear saved settings'],\n ['columnHeaderClickBehavior', 'sort'],\n ['columnSelectorHiddenText', '&nbsp;&nbsp;&nbsp;'],\n ['columnSelectorText', 'Add/Remove columns'],\n ['columnSelectorVisibleText', '\\u2713'],\n ['contextHoverScrollAmount', 2],\n ['contextHoverScrollRateMs', 5],\n ['copyHeadersOnSelectAll', true],\n ['copyText', 'Copy'],\n ['debug', false],\n ['editable', true],\n ['ellipsisText', '...'],\n ['filterOptionText', 'Filter %s'],\n ['filterTextPrefix', '(filtered) '],\n ['globalRowResize', false],\n ['hideColumnText', 'Hide %s'],\n ['maxAutoCompleteItems', 200],\n ['multiLine', false],\n ['name', ''],\n ['pageUpDownOverlap', 1],\n ['pasteText', 'Paste'],\n ['persistantSelectionMode', false],\n ['removeFilterOptionText', 'Remove filter on %s'],\n ['reorderDeadZone', 3],\n ['resizeScrollZone', 20],\n ['rowGrabZoneSize', 5],\n ['saveAppearance', true],\n ['scrollAnimationPPSThreshold', 0.75],\n ['scrollPointerLock', false],\n ['scrollRepeatRate', 75],\n ['selectionFollowsActiveCell', false],\n ['selectionHandleBehavior', 'none'],\n ['selectionMode', 'cell'],\n ['selectionScrollIncrement', 20],\n ['selectionScrollZone', 20],\n ['showClearSettingsOption', true],\n ['showColumnHeaders', true],\n ['showColumnSelector', true],\n ['showCopy', false],\n ['showFilter', true],\n ['showNewRow', false],\n ['showOrderByOption', true],\n ['showOrderByOptionTextAsc', 'Order by %s ascending'],\n ['showOrderByOptionTextDesc', 'Order by %s descending'],\n ['showPaste', false],\n ['showPerformance', false],\n ['showRowHeaders', true],\n ['showRowNumbers', true],\n ['singleSelectionMode', false],\n ['snapToRow', false],\n ['touchContextMenuTimeMs', 800],\n ['touchDeadZone', 3],\n ['touchEasingMethod', 'easeOutQuad'],\n ['touchReleaseAcceleration', 1000],\n ['touchReleaseAnimationDurationMs', 2000],\n ['touchScrollZone', 20],\n ['touchSelectHandleZone', 20],\n ['touchZoomSensitivity', 0.005],\n ['touchZoomMin', 0.5],\n ['touchZoomMax', 1.75],\n ['maxPixelRatio', 2],\n ['tree', false],\n ['treeHorizontalScroll', false],\n ],\n styles: [\n ['activeCellBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['activeCellBorderColor', 'rgba(110, 168, 255, 1)'],\n ['activeCellBorderWidth', 1],\n ['activeCellColor', 'rgba(0, 0, 0, 1)'],\n ['activeCellFont', '16px sans-serif'],\n ['activeCellHoverBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['activeCellHorizontalAlignment', 'left'],\n ['activeCellHoverColor', 'rgba(0, 0, 0, 1)'],\n ['activeCellOverlayBorderColor', 'rgba(66, 133, 244, 1)'],\n ['activeCellOverlayBorderWidth', 1],\n ['activeCellPaddingBottom', 5],\n ['activeCellPaddingLeft', 5],\n ['activeCellPaddingRight', 5],\n ['activeCellPaddingTop', 5],\n ['activeCellSelectedBackgroundColor', 'rgba(236, 243, 255, 1)'],\n ['activeCellSelectedColor', 'rgba(0, 0, 0, 1)'],\n ['activeCellVerticalAlignment', 'center'],\n ['activeColumnHeaderCellBackgroundColor', 'rgba(225, 225, 225, 1)'],\n ['activeColumnHeaderCellColor', 'rgba(0, 0, 0, 1)'],\n ['activeRowHeaderCellBackgroundColor', 'rgba(225, 225, 225, 1)'],\n ['activeRowHeaderCellColor', 'rgba(0, 0, 0, 1)'],\n ['autocompleteBottomMargin', 60],\n ['autosizeHeaderCellPadding', 8],\n ['autosizePadding', 5],\n ['cellAutoResizePadding', 13],\n ['cellBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['cellBorderColor', 'rgba(195, 199, 202, 1)'],\n ['cellBorderWidth', 1],\n ['cellColor', 'rgba(0, 0, 0, 1)'],\n ['cellFont', '16px sans-serif'],\n ['cellGridHeight', 250],\n ['cellHeight', 24],\n ['cellHeightWithChildGrid', 150],\n ['cellHorizontalAlignment', 'left'],\n ['cellHoverBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['cellHoverColor', 'rgba(0, 0, 0, 1)'],\n ['cellPaddingBottom', 5],\n ['cellPaddingLeft', 5],\n ['cellPaddingRight', 5],\n ['cellPaddingTop', 5],\n ['cellSelectedBackgroundColor', 'rgba(236, 243, 255, 1)'],\n ['cellSelectedColor', 'rgba(0, 0, 0, 1)'],\n ['cellVerticalAlignment', 'center'],\n ['cellWidth', 250],\n ['cellWidthWithChildGrid', 250],\n ['cellWhiteSpace', 'nowrap'],\n ['cellLineHeight', 1],\n ['cellLineSpacing', 3],\n ['childContextMenuArrowColor', 'rgba(43, 48, 43, 1)'],\n ['childContextMenuArrowHTML', '&#x25BA;'],\n ['childContextMenuMarginLeft', -11],\n ['childContextMenuMarginTop', -6],\n ['columnHeaderCellBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['columnHeaderCellBorderColor', 'rgba(172, 172, 172, 1)'],\n ['columnHeaderCellBorderWidth', 1],\n ['columnHeaderCellCapBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['columnHeaderCellCapBorderColor', 'rgba(172, 172, 172, 1)'],\n ['columnHeaderCellCapBorderWidth', 1],\n ['columnHeaderCellColor', 'rgba(50, 50, 50, 1)'],\n ['columnHeaderCellFont', '16px sans-serif'],\n ['columnHeaderCellHeight', 25],\n ['columnHeaderCellHorizontalAlignment', 'left'],\n ['columnHeaderCellHoverBackgroundColor', 'rgba(235, 235, 235, 1)'],\n ['columnHeaderCellHoverColor', 'rgba(0, 0, 0, 1)'],\n ['columnHeaderCellPaddingBottom', 5],\n ['columnHeaderCellPaddingLeft', 5],\n ['columnHeaderCellPaddingRight', 5],\n ['columnHeaderCellPaddingTop', 5],\n ['columnHeaderCellVerticalAlignment', 'center'],\n ['columnHeaderOrderByArrowBorderColor', 'rgba(195, 199, 202, 1)'],\n ['columnHeaderOrderByArrowBorderWidth', 1],\n ['columnHeaderOrderByArrowColor', 'rgba(155, 155, 155, 1)'],\n ['columnHeaderOrderByArrowHeight', 8],\n ['columnHeaderOrderByArrowMarginLeft', 0],\n ['columnHeaderOrderByArrowMarginRight', 5],\n ['columnHeaderOrderByArrowMarginTop', 6],\n ['columnHeaderOrderByArrowWidth', 13],\n ['contextFilterButtonBorder', 'solid 1px rgba(158, 163, 169, 1)'],\n ['contextFilterButtonBorderRadius', '3px'],\n ['contextFilterButtonHTML', '&#x25BC;'],\n ['contextFilterInputBackground', 'rgba(255,255,255,1)'],\n ['contextFilterInputBorder', 'solid 1px rgba(158, 163, 169, 1)'],\n ['contextFilterInputBorderRadius', '0'],\n ['contextFilterInputColor', 'rgba(0,0,0,1)'],\n ['contextFilterInputFontFamily', 'sans-serif'],\n ['contextFilterInputFontSize', '14px'],\n ['contextFilterInvalidRegExpBackground', 'rgba(180, 6, 1, 1)'],\n ['contextFilterInvalidRegExpColor', 'rgba(255, 255, 255, 1)'],\n ['contextMenuArrowColor', 'rgba(43, 48, 43, 1)'],\n ['contextMenuArrowDownHTML', '&#x25BC;'],\n ['contextMenuArrowUpHTML', '&#x25B2;'],\n ['contextMenuBackground', 'rgba(240, 240, 240, 1)'],\n ['contextMenuBorder', 'solid 1px rgba(158, 163, 169, 1)'],\n ['contextMenuBorderRadius', '3px'],\n ['contextMenuChildArrowFontSize', '12px'],\n ['contextMenuColor', 'rgba(43, 48, 43, 1)'],\n ['contextMenuCursor', 'default'],\n ['contextMenuFilterButtonFontFamily', 'sans-serif'],\n ['contextMenuFilterButtonFontSize', '10px'],\n ['contextMenuFilterInvalidExpresion', 'rgba(237, 155, 156, 1)'],\n ['contextMenuFontFamily', 'sans-serif'],\n ['contextMenuFontSize', '16px'],\n ['contextMenuHoverBackground', 'rgba(182, 205, 250, 1)'],\n ['contextMenuHoverColor', 'rgba(43, 48, 153, 1)'],\n ['contextMenuItemBorderRadius', '3px'],\n ['contextMenuItemMargin', '2px'],\n ['contextMenuLabelDisplay', 'inline-block'],\n ['contextMenuLabelMargin', '0 3px 0 0'],\n ['contextMenuLabelMaxWidth', '700px'],\n ['contextMenuLabelMinWidth', '75px'],\n ['contextMenuMarginLeft', 3],\n ['contextMenuMarginTop', -3],\n ['contextMenuOpacity', '0.98'],\n ['contextMenuPadding', '2px'],\n ['contextMenuWindowMargin', 30],\n ['contextMenuZIndex', 10000],\n ['cornerCellBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['cornerCellBorderColor', 'rgba(202, 202, 202, 1)'],\n ['debugBackgroundColor', 'rgba(0, 0, 0, .0)'],\n ['debugColor', 'rgba(255, 15, 24, 1)'],\n ['debugEntitiesColor', 'rgba(76, 231, 239, 1.00)'],\n ['debugFont', '11px sans-serif'],\n ['debugPerfChartBackground', 'rgba(29, 25, 26, 1.00)'],\n ['debugPerfChartTextColor', 'rgba(255, 255, 255, 0.8)'],\n ['debugPerformanceColor', 'rgba(252, 255, 37, 1.00)'],\n ['debugScrollHeightColor', 'rgba(248, 33, 103, 1.00)'],\n ['debugScrollWidthColor', 'rgba(66, 255, 27, 1.00)'],\n ['debugTouchPPSXColor', 'rgba(246, 102, 24, 1.00)'],\n ['debugTouchPPSYColor', 'rgba(186, 0, 255, 1.00)'],\n ['display', 'inline-block'],\n ['editCellBackgroundColor', 'white'],\n ['editCellBorder', 'solid 1px rgba(110, 168, 255, 1)'],\n ['editCellBoxShadow', '0 2px 5px rgba(0,0,0,0.4)'],\n ['editCellColor', 'black'],\n ['editCellFontFamily', 'sans-serif'],\n ['editCellFontSize', '16px'],\n ['editCellPaddingLeft', 4],\n ['editCellZIndex', 10000],\n ['frozenMarkerHoverColor', 'rgba(236, 243, 255, 1)'],\n ['frozenMarkerHoverBorderColor', 'rgba(110, 168, 255, 1)'],\n ['frozenMarkerActiveColor', 'rgba(236, 243, 255, 1)'],\n ['frozenMarkerActiveBorderColor', 'rgba(110, 168, 255, 1)'],\n ['frozenMarkerColor', 'rgba(222, 222, 222, 1)'],\n ['frozenMarkerBorderColor', 'rgba(168, 168, 168, 1)'],\n ['frozenMarkerBorderWidth', 1],\n ['frozenMarkerWidth', 2],\n ['gridBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['gridBorderCollapse', 'collapse'],\n ['gridBorderColor', 'rgba(202, 202, 202, 1)'],\n ['gridBorderWidth', 1],\n ['height', 'auto'],\n ['maxHeight', 'inherit'],\n ['maxWidth', 'inherit'],\n ['minColumnWidth', 45],\n ['minHeight', 'inherit'],\n ['minRowHeight', 24],\n ['minWidth', 'inherit'],\n ['mobileContextMenuMargin', 10],\n ['mobileEditInputHeight', 30],\n ['mobileEditFontFamily', 'sans-serif'],\n ['mobileEditFontSize', '16px'],\n ['moveOverlayBorderWidth', 1],\n ['moveOverlayBorderColor', 'rgba(66, 133, 244, 1)'],\n ['moveOverlayBorderSegments', '12, 7'],\n ['name', 'default'],\n ['overflowY', 'auto'],\n ['overflowX', 'auto'],\n ['reorderMarkerBackgroundColor', 'rgba(0, 0, 0, 0.1)'],\n ['reorderMarkerBorderColor', 'rgba(0, 0, 0, 0.2)'],\n ['reorderMarkerBorderWidth', 1.25],\n ['reorderMarkerIndexBorderColor', 'rgba(66, 133, 244, 1)'],\n ['reorderMarkerIndexBorderWidth', 2.75],\n ['rowHeaderCellBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['rowHeaderCellBorderColor', 'rgba(200, 200, 200, 1)'],\n ['rowHeaderCellBorderWidth', 1],\n ['rowHeaderCellColor', 'rgba(50, 50, 50, 1)'],\n ['rowHeaderCellFont', '16px sans-serif'],\n ['rowHeaderCellHeight', 25],\n ['rowHeaderCellHorizontalAlignment', 'left'],\n ['rowHeaderCellHoverBackgroundColor', 'rgba(235, 235, 235, 1)'],\n ['rowHeaderCellHoverColor', 'rgba(0, 0, 0, 1)'],\n ['rowHeaderCellPaddingBottom', 5],\n ['rowHeaderCellPaddingLeft', 5],\n ['rowHeaderCellPaddingRight', 5],\n ['rowHeaderCellPaddingTop', 5],\n ['rowHeaderCellSelectedBackgroundColor', 'rgba(217, 217, 217, 1)'],\n ['rowHeaderCellSelectedColor', 'rgba(50, 50, 50, 1)'],\n ['rowHeaderCellVerticalAlignment', 'center'],\n ['rowHeaderCellWidth', 57],\n ['scrollBarActiveColor', 'rgba(125, 125, 125, 1)'],\n ['scrollBarBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['scrollBarBorderColor', 'rgba(202, 202, 202, 1)'],\n ['scrollBarBorderWidth', 0.5],\n ['scrollBarBoxBorderRadius', 4.125],\n ['scrollBarBoxColor', 'rgba(192, 192, 192, 1)'],\n ['scrollBarBoxMargin', 2],\n ['scrollBarBoxMinSize', 15],\n ['scrollBarBoxWidth', 8],\n ['scrollBarCornerBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['scrollBarCornerBorderColor', 'rgba(202, 202, 202, 1)'],\n ['scrollBarWidth', 11],\n ['selectionHandleBorderColor', 'rgba(255, 255, 255, 1)'],\n ['selectionHandleBorderWidth', 1.5],\n ['selectionHandleColor', 'rgba(66, 133, 244, 1)'],\n ['selectionHandleSize', 8],\n ['selectionHandleType', 'square'],\n ['selectionOverlayBorderColor', 'rgba(66, 133, 244, 1)'],\n ['selectionOverlayBorderWidth', 1],\n ['treeArrowBorderColor', 'rgba(195, 199, 202, 1)'],\n ['treeArrowBorderWidth', 1],\n ['treeArrowClickRadius', 5],\n ['treeArrowColor', 'rgba(155, 155, 155, 1)'],\n ['treeArrowHeight', 8],\n ['treeArrowMarginLeft', 0],\n ['treeArrowMarginRight', 5],\n ['treeArrowMarginTop', 6],\n ['treeArrowWidth', 13],\n ['treeGridHeight', 250],\n ['width', 'auto'],\n ],\n };\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nexport default function (self) {\n self.getClippingRect = function (ele) {\n var boundingRect = self.position(self.parentNode),\n eleRect = self.position(ele),\n s = self.scrollOffset(self.canvas),\n clipRect = {\n x: 0,\n y: 0,\n h: 0,\n w: 0,\n },\n parentRect = {\n x: -Infinity,\n y: -Infinity,\n h: Infinity,\n w: Infinity,\n },\n columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n rowHeaderCellWidth = self.getRowHeaderCellWidth();\n boundingRect.top -= s.top;\n boundingRect.left -= s.left;\n eleRect.top -= s.top;\n eleRect.left -= s.left;\n clipRect.h =\n boundingRect.top +\n boundingRect.height -\n ele.offsetTop -\n self.style.scrollBarWidth;\n clipRect.w =\n boundingRect.left +\n boundingRect.width -\n ele.offsetLeft -\n self.style.scrollBarWidth;\n clipRect.x = boundingRect.left + eleRect.left * -1 + rowHeaderCellWidth;\n clipRect.y = boundingRect.top + eleRect.top * -1 + columnHeaderCellHeight;\n return {\n x: clipRect.x > parentRect.x ? clipRect.x : parentRect.x,\n y: clipRect.y > parentRect.y ? clipRect.y : parentRect.y,\n h: clipRect.h < parentRect.h ? clipRect.h : parentRect.h,\n w: clipRect.w < parentRect.w ? clipRect.w : parentRect.w,\n };\n };\n self.clipElement = function (ele) {\n var clipRect = self.getClippingRect(ele);\n if (clipRect.w < 0) {\n clipRect.w = 0;\n }\n if (clipRect.h < 0) {\n clipRect.h = 0;\n }\n ele.style.clip =\n 'rect(' +\n clipRect.y +\n 'px,' +\n clipRect.w +\n 'px,' +\n clipRect.h +\n 'px,' +\n clipRect.x +\n 'px' +\n ')';\n // INFO https://developer.mozilla.org/en-US/docs/Web/CSS/clip\n // clip has been \"deprecated\" for clipPath. Of course nothing but chrome\n // supports clip path, so we'll keep using clip until someday clipPath becomes\n // more widely support. The code below works correctly, but setting clipPath and clip\n // at the same time has undesirable results.\n // ele.style.clipPath = 'polygon('\n // + clipRect.x + 'px ' + clipRect.y + 'px,'\n // + clipRect.x + 'px ' + clipRect.h + 'px,'\n // + clipRect.w + 'px ' + clipRect.h + 'px,'\n // + clipRect.w + 'px ' + clipRect.y + 'px'\n // + ')';\n };\n self.scrollOffset = function (e) {\n var x = 0,\n y = 0,\n scrollingElement = document.scrollingElement || {\n scrollLeft: 0,\n scrollTop: 0,\n };\n while (\n e.parentNode &&\n e.nodeName !== 'CANVAS-DATAGRID' &&\n e !== self.intf\n ) {\n if (\n e.nodeType !== 'canvas-datagrid-tree' &&\n e.nodeType !== 'canvas-datagrid-cell'\n ) {\n x -= e.scrollLeft;\n y -= e.scrollTop;\n }\n e = e.parentNode;\n }\n return {\n left: x - scrollingElement.scrollLeft,\n top: y - scrollingElement.scrollTop,\n };\n };\n self.resizeEditInput = function () {\n if (self.input && self.input.editCell) {\n var pos = self.canvas.getBoundingClientRect(),\n s = self.scrollOffset(self.intf),\n bm = self.style.gridBorderCollapse === 'collapse' ? 1 : 2,\n borderWidth = self.style.cellBorderWidth * bm,\n cell = self.getVisibleCellByIndex(\n self.input.editCell.columnIndex,\n self.input.editCell.rowIndex,\n ) || { x: -100, y: -100, height: 0, width: 0 };\n if (self.mobile) {\n self.input.style.left = '0';\n self.input.style.top =\n self.height -\n self.style.mobileEditInputHeight -\n borderWidth -\n 1 +\n 'px';\n self.input.style.height = self.style.mobileEditInputHeight + 'px';\n self.input.style.width = self.width - borderWidth - 1 + 'px';\n return;\n }\n self.input.style.left =\n pos.left + cell.x + self.canvasOffsetLeft - s.left + 'px';\n self.input.style.top =\n pos.top +\n cell.y -\n self.style.cellBorderWidth +\n self.canvasOffsetTop -\n s.top +\n 'px';\n self.input.style.height = cell.height - borderWidth + 'px';\n self.input.style.width = cell.width - self.style.cellPaddingLeft + 'px';\n self.clipElement(self.input);\n }\n };\n self.position = function (e, ignoreScrollOffset) {\n var x = 0,\n y = 0,\n s = e,\n h,\n w;\n while (e.offsetParent && e.nodeName !== 'CANVAS-DATAGRID') {\n x += e.offsetLeft;\n y += e.offsetTop;\n h = e.offsetHeight;\n w = e.offsetWidth;\n e = e.offsetParent;\n }\n if (ignoreScrollOffset) {\n return { left: x, top: y, height: h, width: w };\n }\n e = s;\n s = self.scrollOffset(e);\n return { left: x + s.left, top: y + s.top, height: h, width: w };\n };\n self.getLayerPos = function (e) {\n var rect = self.canvas.getBoundingClientRect(),\n pos = {\n x: e.clientX - rect.left,\n y: e.clientY - rect.top,\n };\n if (self.isChildGrid) {\n pos.x -= self.canvasOffsetLeft;\n pos.y -= self.canvasOffsetTop;\n }\n return {\n x: pos.x,\n y: pos.y,\n rect: rect,\n };\n };\n /**\n * Ends editing, optionally aborting the edit.\n * @memberof canvasDatagrid\n * @name endEdit\n * @method\n * @param {boolean} abort When true, abort the edit.\n */\n self.endEdit = function (abort) {\n var cell = self.input.editCell,\n y = cell.rowIndex;\n function abortEdit() {\n abort = true;\n }\n if (\n self.dispatchEvent('beforeendedit', {\n cell: cell,\n newValue: self.input.value,\n oldValue: cell.value,\n abort: abortEdit,\n input: self.input,\n })\n ) {\n return false;\n }\n if (self.input.value !== cell.value && !abort) {\n self.changes[y] = self.changes[y] || {};\n self.changes[y][cell.header.name] = self.input.value;\n if (!cell.data) {\n self.data[cell.rowIndex] = {};\n cell.data = self.data[cell.rowIndex];\n }\n cell.data[cell.header.name] = self.input.value;\n if (y === self.data.length) {\n if (\n self.dispatchEvent('newrow', {\n value: self.input.value,\n defaultValue: cell.value,\n aborted: abort,\n cell: cell,\n input: self.input,\n })\n ) {\n return false;\n }\n self.addRow(cell.data);\n self.createNewRowData();\n }\n self.draw(true);\n }\n if (self.input.parentNode) {\n self.input.parentNode.removeChild(self.input);\n }\n self.intf.focus();\n self.dispatchEvent('endedit', {\n cell: cell,\n value: self.input.value,\n aborted: abort,\n input: self.input,\n });\n self.input = undefined;\n return true;\n };\n /**\n * Begins editing at cell x, row y.\n * @memberof canvasDatagrid\n * @name beginEditAt\n * @method\n * @param {number} x The column index of the cell to edit.\n * @param {number} y The row index of the cell to edit.\n * @param {boolean} inEnterMode If true, starting to type in cell will replace the\n * cell's previous value instead of appending, and using the arrow keys will allow\n * the user to navigate to adjacent cells instead of moving the text cursor around\n * (default is false, and means user is in 'edit' mode).\n */\n self.beginEditAt = function (x, y, NativeEvent, inEnterMode = false) {\n if (!self.attributes.editable) {\n return;\n }\n if (self.input) {\n self.endEdit();\n }\n var cell = self.getVisibleCellByIndex(x, y),\n s = self.getSchema(),\n adjacentCells,\n enumItems,\n enu,\n option,\n valueInEnum;\n if (!(cell && cell.header)) {\n return;\n }\n //HACK for IE10, does not like literal enum\n enu = cell.header['enum'];\n if (\n self.dispatchEvent('beforebeginedit', {\n cell: cell,\n NativeEvent: NativeEvent,\n })\n ) {\n return false;\n }\n self.scrollIntoView(x, y);\n self.setActiveCell(x, y);\n adjacentCells = self.getAdjacentCells();\n if (enu) {\n self.input = document.createElement('select');\n } else {\n self.input = document.createElement(\n self.attributes.multiLine ? 'textarea' : 'input',\n );\n }\n cell = self.getVisibleCellByIndex(x, y);\n //HACK on mobile devices sometimes edit can begin without the cell being in view, I don't know how.\n if (!cell) {\n return;\n }\n if (enu) {\n // add enums\n if (typeof enu === 'function') {\n enumItems = enu.apply(self.intf, [{ cell: cell }]);\n } else if (Array.isArray(enu)) {\n enumItems = enu;\n }\n enumItems.forEach(function (e) {\n var i = document.createElement('option'),\n val,\n title;\n if (Array.isArray(e)) {\n val = e[0];\n title = e[1];\n } else {\n val = e;\n title = e;\n }\n if (val === cell.value) {\n valueInEnum = true;\n }\n i.value = val;\n i.innerHTML = title;\n self.input.appendChild(i);\n });\n if (!valueInEnum) {\n option = document.createElement('option');\n option.value = cell.value;\n option.innerHTML = cell.value;\n self.input.appendChild(option);\n }\n self.input.addEventListener('change', function () {\n self.endEdit();\n self.draw(true);\n });\n }\n // if the user has not prevented the default action, append to the body\n if (\n !self.dispatchEvent('appendeditinput', { cell: cell, input: self.input })\n ) {\n document.body.appendChild(self.input);\n }\n self.createInlineStyle(\n self.input,\n self.mobile\n ? 'canvas-datagrid-edit-mobile-input'\n : 'canvas-datagrid-edit-input',\n );\n self.input.style.position = 'absolute';\n self.input.editCell = cell;\n self.resizeEditInput();\n self.input.style.zIndex = self.style.editCellZIndex;\n self.input.style.fontSize =\n parseInt(self.style.editCellFontSize, 10) * self.scale + 'px';\n\n var cellValueIsEmpty = [null, undefined].indexOf(cell.value) !== -1;\n var shouldClearCellValue = cellValueIsEmpty || inEnterMode;\n\n self.input.value = shouldClearCellValue ? '' : cell.value;\n self.input.focus();\n self.input.addEventListener('click', self.stopPropagation);\n self.input.addEventListener('dblclick', self.stopPropagation);\n self.input.addEventListener('mouseup', self.stopPropagation);\n self.input.addEventListener('mousedown', self.stopPropagation);\n self.input.addEventListener('keydown', function (e) {\n var nx = cell.columnIndex,\n ny = cell.rowIndex;\n\n if (e.key === 'Escape') {\n self.endEdit(true); // end edit and abort the value change\n self.draw(true);\n } else if (e.key === 'Enter' && self.attributes.multiLine && e.altKey) {\n self.input.value = self.input.value + '\\n';\n self.input.scrollTop = self.input.scrollHeight;\n } else if (e.key === 'Enter') {\n self.endEdit();\n\n // Move to cell in next or previous row\n var nextRowIndex = e.shiftKey\n ? Math.max(0, ny - 1)\n : Math.min(ny + 1, self.data.length - 1);\n\n if (nextRowIndex !== ny) {\n self.scrollIntoView(nx, nextRowIndex);\n self.setActiveCell(nx, nextRowIndex);\n }\n\n self.draw(true);\n } else if (\n ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(e.key) &&\n inEnterMode\n ) {\n switch (e.key) {\n case 'ArrowUp':\n ny = Math.max(0, ny - 1);\n break;\n case 'ArrowDown':\n ny = Math.min(ny + 1, self.data.length - 1);\n break;\n case 'ArrowLeft':\n nx = Math.max(nx - 1, 0);\n break;\n case 'ArrowRight':\n nx = adjacentCells.right;\n break;\n }\n\n self.endEdit();\n\n self.scrollIntoView(nx, ny);\n self.setActiveCell(nx, ny);\n\n self.draw(true);\n } else if (e.key === 'Tab') {\n e.preventDefault();\n if (!self.endEdit()) {\n return;\n }\n if (e.shiftKey) {\n nx = adjacentCells.left;\n } else {\n nx = adjacentCells.right;\n }\n if (adjacentCells.left === x && e.shiftKey) {\n nx = adjacentCells.last;\n ny -= 1;\n }\n if (adjacentCells.right === x && !e.shiftKey) {\n nx = adjacentCells.first;\n ny += 1;\n }\n if (ny < 0) {\n ny = self.data.length - 1;\n }\n if (ny > self.data.length - 1) {\n ny = 0;\n }\n self.scrollIntoView(nx, ny);\n self.beginEditAt(nx, ny, e);\n }\n });\n\n self.dispatchEvent('beginedit', { cell: cell, input: self.input });\n };\n self.createInlineStyle = function (el, className) {\n var css = {\n 'canvas-datagrid-context-menu-filter-input': {\n height: '19px',\n verticalAlign: 'bottom',\n marginLeft: '2px',\n padding: '0',\n background: self.style.contextFilterInputBackground,\n color: self.style.contextFilterInputColor,\n border: self.style.contextFilterInputBorder,\n borderRadius: self.style.contextFilterInputBorderRadius,\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextFilterInputFontFamily,\n fontSize: self.style.contextFilterInputFontSize,\n },\n 'canvas-datagrid-context-menu-filter-button': {\n height: '19px',\n verticalAlign: 'bottom',\n marginLeft: '2px',\n padding: '0',\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n border: self.style.contextFilterButtonBorder,\n borderRadius: self.style.contextFilterButtonBorderRadius,\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFilterButtonFontFamily,\n fontSize: self.style.contextMenuFilterButtonFontSize,\n },\n 'canvas-datagrid-context-child-arrow': {\n cssFloat: 'right',\n color: self.style.childContextMenuArrowColor,\n fontSize: self.style.contextMenuChildArrowFontSize,\n fontFamily: self.style.contextMenuFontFamily,\n verticalAlign: 'middle',\n },\n 'canvas-datagrid-autocomplete': {\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n border: self.style.contextMenuBorder,\n padding: self.style.contextMenuPadding,\n borderRadius: self.style.contextMenuBorderRadius,\n opacity: self.style.contextMenuOpacity,\n position: 'absolute',\n zIndex: 9999,\n overflow: 'hidden',\n },\n 'canvas-datagrid-autocomplete-item': {\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n },\n 'canvas-datagrid-autocomplete-item:hover': {\n background: self.style.contextMenuHoverBackground,\n color: self.style.contextMenuHoverColor,\n },\n 'canvas-datagrid-canvas': {\n position: 'absolute',\n zIndex: '-1',\n },\n 'canvas-datagrid': {\n display: 'block',\n },\n 'canvas-datagrid-control-input': {\n position: 'fixed',\n top: '-5px',\n left: '-5px',\n border: 'none',\n opacity: '0',\n cursor: 'pointer',\n width: '1px',\n height: '1px',\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n },\n 'canvas-datagrid-edit-mobile-input': {\n boxSizing: 'content-box',\n outline: 'none',\n margin: '0',\n padding: '0 0 0 0',\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.mobileEditFontFamily,\n fontSize: self.style.mobileEditFontSize,\n border: self.style.editCellBorder,\n color: self.style.editCellColor,\n background: self.style.editCellBackgroundColor,\n appearance: 'none',\n webkitAppearance: 'none',\n mozAppearance: 'none',\n borderRadius: '0',\n },\n 'canvas-datagrid-edit-input': {\n boxSizing: 'content-box',\n outline: 'none',\n margin: '0',\n padding: '0 0 0 ' + self.style.editCellPaddingLeft + 'px',\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.editCellFontFamily,\n fontSize: self.style.editCellFontSize,\n boxShadow: self.style.editCellBoxShadow,\n border: self.style.editCellBorder,\n color: self.style.editCellColor,\n background: self.style.editCellBackgroundColor,\n appearance: 'none',\n webkitAppearance: 'none',\n mozAppearance: 'none',\n borderRadius: '0',\n },\n 'canvas-datagrid-context-menu-item-mobile': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n color: 'inherit',\n background: 'inherit',\n margin: self.style.contextMenuItemMargin,\n borderRadius: self.style.contextMenuItemBorderRadius,\n verticalAlign: 'middle',\n },\n 'canvas-datagrid-context-menu-item': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n color: 'inherit',\n background: 'inherit',\n margin: self.style.contextMenuItemMargin,\n borderRadius: self.style.contextMenuItemBorderRadius,\n verticalAlign: 'middle',\n },\n 'canvas-datagrid-context-menu-item:hover': {\n background: self.style.contextMenuHoverBackground,\n color: self.style.contextMenuHoverColor,\n },\n 'canvas-datagrid-context-menu-label': {\n margin: self.style.contextMenuLabelMargin,\n display: self.style.contextMenuLabelDisplay,\n minWidth: self.style.contextMenuLabelMinWidth,\n maxWidth: self.style.contextMenuLabelMaxWidth,\n },\n 'canvas-datagrid-context-menu-mobile': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n border: self.style.contextMenuBorder,\n padding: self.style.contextMenuPadding,\n borderRadius: self.style.contextMenuBorderRadius,\n opacity: self.style.contextMenuOpacity,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n },\n 'canvas-datagrid-context-menu': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n border: self.style.contextMenuBorder,\n padding: self.style.contextMenuPadding,\n borderRadius: self.style.contextMenuBorderRadius,\n opacity: self.style.contextMenuOpacity,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n cursor: self.style.contextMenuCursor,\n },\n 'canvas-datagrid-invalid-search-regExp': {\n background: self.style.contextMenuFilterInvalidExpresion,\n },\n };\n if (css[className]) {\n Object.keys(css[className]).map(function (prop) {\n el.style[prop] = css[className][prop];\n });\n }\n return;\n };\n self.appendTo = function (e) {\n self.parentNode = e;\n self.setDom();\n };\n self.setDom = function () {\n if (self.isChildGrid) {\n self.parentGrid = self.parentNode.parentGrid;\n self.ctx = self.parentGrid.context;\n self.canvas = self.parentGrid.canvas;\n self.controlInput = self.parentGrid.controlInput;\n self.eventParent = self.canvas;\n } else {\n self.controlInput = self.controlInput || document.createElement('input');\n self.controlInput.onblur = self.intf.blur;\n self.createInlineStyle(\n self.controlInput,\n 'canvas-datagrid-control-input',\n );\n self.isChildGrid = false;\n self.parentDOMNode = self.parentNode;\n self.parentIsCanvas = /^canvas$/i.test(self.parentDOMNode.tagName);\n if (self.parentIsCanvas) {\n self.canvas = self.parentDOMNode;\n } else {\n self.canvas = document.createElement('canvas');\n self.parentDOMNode.appendChild(self.canvas);\n }\n document.body.appendChild(self.controlInput);\n self.createInlineStyle(self.canvas, 'canvas-datagrid');\n self.ctx = self.canvas.getContext('2d');\n self.ctx.textBaseline = 'alphabetic';\n self.eventParent = self.canvas;\n }\n self.parentNodeStyle = self.canvas.style;\n self.controlInput.setAttribute('readonly', true);\n self.controlInput.addEventListener('blur', function (e) {\n if (e.target !== self.canvas) {\n self.hasFocus = false;\n }\n });\n self.eventParent.addEventListener('scroll', self.resize, false);\n self.eventParent.addEventListener('touchstart', self.touchstart, false);\n self.eventParent.addEventListener('mouseup', self.mouseup, false);\n self.eventParent.addEventListener('mousedown', self.mousedown, false);\n self.eventParent.addEventListener('dblclick', self.dblclick, false);\n self.eventParent.addEventListener('click', self.click, false);\n self.eventParent.addEventListener('mousemove', self.mousemove);\n self[self.isChildGrid ? 'parentGrid' : 'eventParent'].addEventListener(\n 'wheel',\n self.scrollWheel,\n false,\n );\n self.canvas.addEventListener('contextmenu', self.contextmenuEvent, false);\n self.controlInput.addEventListener('copy', self.copy);\n self.controlInput.addEventListener('cut', self.cut);\n self.controlInput.addEventListener('paste', self.paste);\n self.controlInput.addEventListener('keypress', self.keypress, false);\n self.controlInput.addEventListener('keyup', self.keyup, false);\n self.controlInput.addEventListener('keydown', self.keydown, false);\n window.addEventListener('resize', self.resize);\n };\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals XMLSerializer: false, define: true, Blob: false, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nexport default function (self) {\n var perfCounters = [],\n cachedImagesDrawn = false,\n drawCount = 0,\n perfWindowSize = 300,\n entityCount = [],\n hiddenFrozenColumnCount = 0,\n scrollDebugCounters = [],\n touchPPSCounters = [];\n self.htmlImageCache = {};\n // more heavyweight version than fillArray defined in intf.js\n function fillArray(low, high, step, def) {\n step = step || 1;\n var i = [],\n x;\n for (x = low; x <= high; x += step) {\n i[x] = def === undefined ? x : typeof def === 'function' ? def(x) : def;\n }\n return i;\n }\n function drawPerfLine(w, h, x, y, perfArr, arrIndex, max, color, useAbs) {\n var i = w / perfArr.length,\n r = h / max;\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.beginPath();\n self.ctx.moveTo(x, y + h);\n perfArr.forEach(function (n) {\n var val = arrIndex === undefined ? n : n[arrIndex],\n cx,\n cy;\n if (useAbs) {\n val = Math.abs(val);\n }\n cx = x + i;\n cy = y + h - val * r;\n self.ctx.lineTo(cx, cy);\n x += i;\n });\n self.ctx.moveTo(x + w, y + h);\n self.ctx.strokeStyle = color;\n self.ctx.stroke();\n }\n function drawOnAllImagesLoaded() {\n var loaded = true;\n Object.keys(self.htmlImageCache).forEach(function (html) {\n if (!self.htmlImageCache[html].img.complete) {\n loaded = false;\n }\n });\n if (loaded && !cachedImagesDrawn) {\n cachedImagesDrawn = true;\n self.draw();\n }\n }\n function drawHtml(cell) {\n var img,\n v = cell.innerHTML || cell.formattedValue,\n cacheKey =\n v.toString() + cell.rowIndex.toString() + cell.columnIndex.toString(),\n x = Math.round(cell.x + self.canvasOffsetLeft),\n y = Math.round(cell.y + self.canvasOffsetTop);\n if (self.htmlImageCache[cacheKey]) {\n img = self.htmlImageCache[cacheKey].img;\n if (\n self.htmlImageCache[cacheKey].height !== cell.height ||\n self.htmlImageCache[cacheKey].width !== cell.width\n ) {\n // height and width of the cell has changed, invalidate cache\n self.htmlImageCache[cacheKey] = undefined;\n } else {\n if (!img.complete) {\n return;\n }\n return self.ctx.drawImage(img, x, y);\n }\n } else {\n cachedImagesDrawn = false;\n }\n img = new Image(cell.width, cell.height);\n self.htmlImageCache[cacheKey] = {\n img,\n width: cell.width,\n height: cell.height,\n };\n img.onload = function () {\n self.ctx.drawImage(img, x, y);\n drawOnAllImagesLoaded();\n };\n img.src =\n 'data:image/svg+xml;base64,' +\n btoa(\n '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"' +\n cell.width +\n '\" height=\"' +\n cell.height +\n '\">\\n' +\n '<foreignObject class=\"node\" x=\"0\" y=\"0\" width=\"100%\" height=\"100%\">\\n' +\n '<body xmlns=\"http://www.w3.org/1999/xhtml\" style=\"margin:0;padding:0;\">\\n' +\n v +\n '\\n' +\n '</body>' +\n '</foreignObject>\\n' +\n '</svg>\\n',\n );\n }\n function drawOrderByArrow(x, y) {\n var mt = self.style.columnHeaderOrderByArrowMarginTop * self.scale,\n ml = self.style.columnHeaderOrderByArrowMarginLeft * self.scale,\n mr = self.style.columnHeaderOrderByArrowMarginRight * self.scale,\n aw = self.style.columnHeaderOrderByArrowWidth * self.scale,\n ah = self.style.columnHeaderOrderByArrowHeight * self.scale;\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.fillStyle = self.style.columnHeaderOrderByArrowColor;\n self.ctx.strokeStyle = self.style.columnHeaderOrderByArrowBorderColor;\n self.ctx.beginPath();\n x = x + ml;\n y = y + mt;\n if (self.orderDirection === 'asc') {\n self.ctx.moveTo(x, y);\n self.ctx.lineTo(x + aw, y);\n self.ctx.lineTo(x + aw * 0.5, y + ah);\n self.ctx.moveTo(x, y);\n } else {\n self.ctx.lineTo(x, y + ah);\n self.ctx.lineTo(x + aw, y + ah);\n self.ctx.lineTo(x + aw * 0.5, y);\n self.ctx.lineTo(x, y + ah);\n }\n self.ctx.stroke();\n self.ctx.fill();\n return ml + aw + mr;\n }\n function drawTreeArrow(cell, x, y) {\n var mt = self.style.treeArrowMarginTop * self.scale,\n mr = self.style.treeArrowMarginRight * self.scale,\n ml = self.style.treeArrowMarginLeft * self.scale,\n aw = self.style.treeArrowWidth * self.scale,\n ah = self.style.treeArrowHeight * self.scale;\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.fillStyle = self.style.treeArrowColor;\n self.ctx.strokeStyle = self.style.treeArrowBorderColor;\n self.ctx.beginPath();\n x = x + ml;\n y = y + mt;\n if (self.openChildren[cell.rowIndex]) {\n self.ctx.moveTo(x, y);\n self.ctx.lineTo(x + aw, y);\n self.ctx.lineTo(x + aw * 0.5, y + ah);\n self.ctx.moveTo(x, y);\n } else {\n self.ctx.lineTo(x, y);\n self.ctx.lineTo(x + ah, y + aw * 0.5);\n self.ctx.lineTo(x, y + aw);\n self.ctx.lineTo(x, y);\n }\n self.ctx.stroke();\n self.ctx.fill();\n return ml + aw + mr;\n }\n function radiusRect(x, y, w, h, radius) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n var r = x + w,\n b = y + h;\n self.ctx.beginPath();\n self.ctx.moveTo(x + radius, y);\n self.ctx.lineTo(r - radius, y);\n self.ctx.quadraticCurveTo(r, y, r, y + radius);\n self.ctx.lineTo(r, y + h - radius);\n self.ctx.quadraticCurveTo(r, b, r - radius, b);\n self.ctx.lineTo(x + radius, b);\n self.ctx.quadraticCurveTo(x, b, x, b - radius);\n self.ctx.lineTo(x, y + radius);\n self.ctx.quadraticCurveTo(x, y, x + radius, y);\n }\n function fillRect(x, y, w, h) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.fillRect(x, y, w, h);\n }\n function strokeRect(x, y, w, h) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.strokeRect(x, y, w, h);\n }\n function fillText(text, x, y) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.fillText(text, x, y);\n }\n function fillCircle(x, y, r) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.beginPath();\n self.ctx.arc(x, y, r, 0, 2 * Math.PI);\n self.ctx.fill();\n }\n function strokeCircle(x, y, r) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.beginPath();\n self.ctx.arc(x, y, r, 0, 2 * Math.PI);\n self.ctx.stroke();\n }\n function clipFrozenArea(mode) {\n // 0 both, 1 rows, 2 cols\n // self.lastFrozenColumnPixel;\n // self.lastFrozenRowPixel;\n self.ctx.beginPath();\n if (mode === 0) {\n self.ctx.moveTo(self.lastFrozenColumnPixel, self.lastFrozenRowPixel);\n self.ctx.lineTo(self.lastFrozenColumnPixel, self.height);\n self.ctx.lineTo(self.width, self.height);\n self.ctx.lineTo(self.width, self.lastFrozenRowPixel);\n }\n if (mode === 1) {\n self.ctx.moveTo(0, self.lastFrozenRowPixel);\n self.ctx.lineTo(0, self.height);\n self.ctx.lineTo(self.width, self.height);\n self.ctx.lineTo(self.width, self.lastFrozenRowPixel);\n }\n if (mode === 2) {\n self.ctx.moveTo(self.lastFrozenColumnPixel, 0);\n self.ctx.lineTo(self.width, 0);\n self.ctx.lineTo(self.width, self.height);\n self.ctx.lineTo(self.lastFrozenColumnPixel, self.height);\n }\n self.ctx.clip();\n }\n function fillHandle(x, y, r) {\n if (self.style.selectionHandleType === 'circle') {\n return fillCircle(x, y, r * 0.5);\n }\n fillRect(x - r * 0.5, y - r * 0.5, r, r);\n }\n function strokeHandle(x, y, r) {\n if (self.style.selectionHandleType === 'circle') {\n return strokeCircle(x, y, r * 0.5);\n }\n strokeRect(x - r * 0.5, y - r * 0.5, r, r);\n }\n function addselectionHandle(c, pos) {\n var hw = self.style.selectionHandleSize,\n p = {\n tr: function () {\n fillHandle(c.x + c.width, c.y, hw);\n strokeHandle(c.x + c.width, c.y, hw);\n },\n br: function () {\n fillHandle(c.x + c.width, c.y + c.height, hw);\n strokeHandle(c.x + c.width, c.y + c.height, hw);\n },\n tl: function () {\n fillHandle(c.x, c.y, hw);\n strokeHandle(c.x, c.y, hw);\n },\n bl: function () {\n fillHandle(c.x, c.y + c.height, hw);\n strokeHandle(c.x, c.y + c.height, hw);\n },\n };\n p[pos]();\n }\n function addBorderLine(c, pos) {\n self.ctx.beginPath();\n var p = {\n t: function () {\n self.ctx.moveTo(\n c.x + self.canvasOffsetLeft,\n c.y + self.canvasOffsetTop,\n );\n self.ctx.lineTo(\n c.x + self.canvasOffsetLeft + c.width,\n c.y + self.canvasOffsetTop,\n );\n },\n r: function () {\n self.ctx.moveTo(\n c.x + self.canvasOffsetLeft + c.width,\n c.y + self.canvasOffsetTop,\n );\n self.ctx.lineTo(\n c.x + self.canvasOffsetLeft + c.width,\n c.y + self.canvasOffsetTop + c.height,\n );\n },\n b: function () {\n self.ctx.moveTo(\n c.x + self.canvasOffsetLeft,\n c.y + self.canvasOffsetTop + c.height,\n );\n self.ctx.lineTo(\n c.x + self.canvasOffsetLeft + c.width,\n c.y + self.canvasOffsetTop + c.height,\n );\n },\n l: function () {\n self.ctx.moveTo(\n c.x + self.canvasOffsetLeft,\n c.y + self.canvasOffsetTop,\n );\n self.ctx.lineTo(\n c.x + self.canvasOffsetLeft,\n c.y + self.canvasOffsetTop + c.height,\n );\n },\n };\n p[pos]();\n self.ctx.stroke();\n }\n function addEllipsis(text, width) {\n var c,\n w = 0;\n if (self.ellipsisCache[text] && self.ellipsisCache[text][width]) {\n return self.ellipsisCache[text][width];\n }\n //TODO Add ellipsis back when there is a fast way to do it\n w = self.ctx.measureText(text).width;\n self.ellipsisCache[text] = self.ellipsisCache[text] || {};\n c = { value: text, width: w };\n self.ellipsisCache[text][width] = c;\n return c;\n }\n function wrapText(cell, splitChar) {\n if (!cell.formattedValue) {\n return {\n lines: [{ width: 0, value: '' }],\n width: 0,\n height: cell.calculatedLineHeight,\n };\n }\n var max = 0,\n n = '\\n',\n x,\n word,\n words = cell.formattedValue.split(splitChar),\n textHeight = cell.calculatedLineHeight,\n lines = [],\n out = [],\n wrap = self.style.cellWhiteSpace !== 'nowrap',\n autoResize = self.attributes.autoResizeRows && wrap,\n elWidth,\n et = self.attributes.ellipsisText,\n elClipLength,\n plWidth,\n clippedVal,\n ogWordWidth,\n previousLine,\n line = {\n width: 0,\n value: '',\n },\n cHeight = wrap ? cell.paddedHeight : cell.calculatedLineHeight;\n lines.push(line);\n elWidth = self.ctx.measureText(' ' + et).width;\n for (x = 0; x < words.length; x += 1) {\n word = words[x];\n var measure = self.ctx.measureText(word + splitChar);\n if (line.width + measure.width + elWidth < cell.paddedWidth) {\n line.value += word + splitChar;\n line.width += measure.width;\n continue;\n }\n // if there is a hyphenated word that is too long\n // split it and add the split set to the array\n // then back up and re-read new split set\n // this behavior seems right, it might not be\n if (/\\w-\\w/.test(word) && cell.paddedWidth < measure.width) {\n words.splice(x, 1, word.split('-')[0] + '-', word.split('-')[1]);\n x -= 1;\n continue;\n }\n line = {\n width: measure.width,\n value: word + splitChar,\n };\n if (x === 0) {\n lines = [];\n lines.push(line);\n }\n textHeight += cell.calculatedLineHeight;\n if (textHeight > cHeight && !autoResize) {\n if (lines.length === 0) {\n break;\n }\n elClipLength = 1;\n previousLine = lines[lines.length - 1];\n if (previousLine.width < cell.paddedWidth && words.length === 1) {\n break;\n }\n clippedVal = previousLine.value + word;\n plWidth = self.ctx.measureText(clippedVal + et).width;\n var originText = clippedVal;\n if (plWidth > cell.paddedWidth) {\n var stepLength = parseInt(clippedVal.length / 2);\n var direction = -1;\n while (stepLength > 0) {\n clippedVal = originText.substr(\n 0,\n stepLength * direction + clippedVal.length,\n );\n plWidth = self.ctx.measureText(clippedVal + et).width;\n direction = plWidth > cell.paddedWidth ? -1 : 1;\n stepLength = parseInt(stepLength / 2);\n }\n }\n clippedVal =\n clippedVal + (originText.length != clippedVal.length ? et : '');\n previousLine.value = clippedVal;\n previousLine.width = plWidth;\n break;\n }\n if (x > 0) {\n lines.push(line);\n }\n }\n return {\n lines: lines,\n width: max,\n height: cell.calculatedLineHeight * lines.length,\n };\n }\n function drawText(cell) {\n var ll = cell.text.lines.length,\n h = cell.fontHeight * cell.lineHeight,\n x,\n line,\n wrap = self.style.cellWhiteSpace !== 'nowrap',\n textHeight = 0;\n for (x = 0; x < cell.text.lines.length; x += 1) {\n line = cell.text.lines[x];\n var vPos =\n Math.max(\n (cell.height -\n (wrap ? cell.text.height : cell.calculatedLineHeight)) *\n 0.5,\n 0,\n ) + h,\n hPos = cell.paddingLeft + cell.treeArrowWidth + cell.orderByArrowWidth;\n if (cell.horizontalAlignment === 'right') {\n hPos = cell.paddingLeft + cell.paddedWidth - line.width;\n } else if (cell.horizontalAlignment === 'center') {\n hPos =\n cell.paddingLeft +\n (cell.paddedWidth + cell.paddingRight) / 2 -\n line.width / 2;\n }\n if (cell.verticalAlignment === 'top') {\n vPos = cell.calculatedLineHeight;\n } else if (cell.verticalAlignment === 'bottom') {\n vPos = cell.height - cell.paddingBottom - cell.text.height;\n }\n line.height = h + cell.lineSpacing;\n line.offsetLeft = hPos;\n line.offsetTop = vPos;\n line.x = cell.x + hPos;\n line.y = cell.y + textHeight + vPos;\n textHeight += line.height;\n fillText(line.value, line.x, line.y);\n }\n if (self.attributes.debug && cell.active) {\n requestAnimationFrame(function () {\n self.ctx.font = self.style.debugFont;\n self.ctx.fillStyle = self.style.debugColor;\n fillText(\n JSON.stringify(\n {\n x: cell.x,\n y: cell.y,\n h: cell.height,\n w: cell.width,\n pw: cell.paddedWidth,\n idx: cell.columnIndex,\n idx_ord: cell.sortColumnIndex,\n },\n null,\n '\\t',\n ),\n cell.x + 14,\n cell.y + 14,\n );\n fillText(\n JSON.stringify(\n cell.text.lines.map(function (l) {\n return { w: l.width, v: l.value.length };\n }),\n null,\n '\\t',\n ),\n cell.x + 14,\n cell.y + 30,\n );\n });\n }\n }\n function getFrozenColumnsWidth() {\n var w = 0,\n s = self.getSchema(),\n x = 0,\n n = Math.min(self.frozenColumn, s.length),\n column;\n hiddenFrozenColumnCount = 0;\n while (x < n) {\n column = s[x];\n if (column.hidden) {\n hiddenFrozenColumnCount += 1;\n } else {\n w += self.getColummnWidth(x);\n }\n x += 1;\n }\n return w;\n }\n /**\n * Redraws the grid. No matter what the change, this is the only method required to refresh everything.\n * @memberof canvasDatagrid\n * @name draw\n * @method\n */\n // r = literal row index\n // rd = row data array\n // i = user order index\n // o = literal data index\n // y = y drawing cursor\n // x = x drawing cursor\n // s = visible schema array\n // cx = current x drawing cursor sub calculation var\n // cy = current y drawing cursor sub calculation var\n // a = static cell (like corner cell)\n // p = perf counter\n // l = data length\n // u = current cell\n // h = current height\n // w = current width\n self.draw = function (internal) {\n if (self.dispatchEvent('beforedraw', {})) {\n return;\n }\n if (!self.isChildGrid && (!self.height || !self.width)) {\n return;\n }\n if (self.isChildGrid && internal) {\n requestAnimationFrame(self.parentGrid.draw);\n return;\n }\n if (self.intf.visible === false) {\n return;\n }\n // initial values\n var checkScrollHeight,\n rowHeaderCell,\n p,\n cx,\n cy,\n treeGrid,\n rowOpen,\n rowHeight,\n cornerCell,\n y,\n x,\n c,\n h,\n w,\n s,\n r,\n rd,\n aCell,\n data = self.data || [],\n bc = self.style.gridBorderCollapse === 'collapse',\n selectionBorders = [],\n moveBorders = [],\n selectionHandles = [],\n rowHeaders = [],\n l = data.length,\n u = self.currentCell || {},\n columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n rowHeaderCellWidth = self.getRowHeaderCellWidth(),\n cellHeight = self.style.cellHeight;\n drawCount += 1;\n p = performance.now();\n self.visibleRowHeights = [];\n // if data length has changed, there is no way to know\n if (data.length > self.orders.rows.length) {\n self.createRowOrders();\n }\n function drawScrollBars() {\n var drawCorner,\n en = self.scrollBox.entities,\n m = self.style.scrollBarBoxMargin * 2;\n self.ctx.strokeStyle = self.style.scrollBarBorderColor;\n self.ctx.lineWidth = self.style.scrollBarBorderWidth;\n en.horizontalBox.x =\n rowHeaderCellWidth +\n self.style.scrollBarBoxMargin +\n (en.horizontalBar.width - self.scrollBox.scrollBoxWidth) *\n (self.scrollBox.scrollLeft / self.scrollBox.scrollWidth);\n en.verticalBox.y =\n columnHeaderCellHeight +\n self.style.scrollBarBoxMargin +\n (en.verticalBar.height - self.scrollBox.scrollBoxHeight) *\n (self.scrollBox.scrollTop / self.scrollBox.scrollHeight);\n if (self.scrollBox.horizontalBarVisible) {\n self.ctx.fillStyle = self.style.scrollBarBackgroundColor;\n fillRect(\n en.horizontalBar.x,\n en.horizontalBar.y,\n en.horizontalBar.width + m,\n en.horizontalBar.height,\n );\n strokeRect(\n en.horizontalBar.x,\n en.horizontalBar.y,\n en.horizontalBar.width + m,\n en.horizontalBar.height,\n );\n self.ctx.fillStyle = self.style.scrollBarBoxColor;\n if (self.scrollBox.horizontalBoxVisible) {\n if (/horizontal/.test(u.context)) {\n self.ctx.fillStyle = self.style.scrollBarActiveColor;\n }\n radiusRect(\n en.horizontalBox.x,\n en.horizontalBox.y,\n en.horizontalBox.width,\n en.horizontalBox.height,\n self.style.scrollBarBoxBorderRadius,\n );\n self.ctx.stroke();\n self.ctx.fill();\n }\n drawCorner = true;\n self.visibleCells.unshift(en.horizontalBar);\n self.visibleCells.unshift(en.horizontalBox);\n }\n if (self.scrollBox.verticalBarVisible) {\n self.ctx.fillStyle = self.style.scrollBarBackgroundColor;\n fillRect(\n en.verticalBar.x,\n en.verticalBar.y,\n en.verticalBar.width,\n en.verticalBar.height + m,\n );\n strokeRect(\n en.verticalBar.x,\n en.verticalBar.y,\n en.verticalBar.width,\n en.verticalBar.height + m,\n );\n if (self.scrollBox.verticalBoxVisible) {\n self.ctx.fillStyle = self.style.scrollBarBoxColor;\n if (/vertical/.test(u.context)) {\n self.ctx.fillStyle = self.style.scrollBarActiveColor;\n }\n radiusRect(\n en.verticalBox.x,\n en.verticalBox.y,\n en.verticalBox.width,\n en.verticalBox.height,\n self.style.scrollBarBoxBorderRadius,\n );\n self.ctx.stroke();\n self.ctx.fill();\n }\n drawCorner = true;\n self.visibleCells.unshift(en.verticalBar);\n self.visibleCells.unshift(en.verticalBox);\n }\n if (drawCorner) {\n //corner\n self.ctx.strokeStyle = self.style.scrollBarCornerBorderColor;\n self.ctx.fillStyle = self.style.scrollBarCornerBackgroundColor;\n radiusRect(\n en.corner.x,\n en.corner.y,\n en.corner.width,\n en.corner.height,\n 0,\n );\n self.ctx.stroke();\n self.ctx.fill();\n self.visibleCells.unshift(en.corner);\n }\n }\n function createHandlesOverlayArray(cell) {\n if (self.attributes.allowMovingSelection || self.mobile) {\n if (\n cell.selectionBorderTop &&\n cell.selectionBorderRight &&\n self.mobile\n ) {\n selectionHandles.push([cell, 'tr']);\n cell.selectionHandle = 'tr';\n }\n if (\n cell.selectionBorderTop &&\n cell.selectionBorderLeft &&\n self.mobile\n ) {\n selectionHandles.push([cell, 'tl']);\n cell.selectionHandle = 'tl';\n }\n if (\n cell.selectionBorderBottom &&\n cell.selectionBorderLeft &&\n self.mobile\n ) {\n selectionHandles.push([cell, 'bl']);\n cell.selectionHandle = 'bl';\n }\n if (\n cell.selectionBorderBottom &&\n cell.selectionBorderRight &&\n (self.attributes.selectionHandleBehavior !== 'none' || self.mobile)\n ) {\n selectionHandles.push([cell, 'br']);\n cell.selectionHandle = 'br';\n }\n }\n }\n function createBorderOverlayArray(\n cell,\n drawArray,\n propPrefix,\n offsetPoint,\n ) {\n offsetPoint = offsetPoint || { x: 0, y: 0 };\n cell.selectionBorder = '';\n if (\n !cell.isRowHeader &&\n self.selections[cell.rowIndex + -offsetPoint.y] &&\n self.selections[cell.rowIndex + -offsetPoint.y].indexOf(\n cell.columnIndex + -offsetPoint.x,\n ) !== -1\n ) {\n if (\n (!self.selections[cell.rowIndex - 1 + -offsetPoint.y] ||\n self.selections[cell.rowIndex - 1 + -offsetPoint.y].indexOf(\n cell.columnIndex + -offsetPoint.x,\n ) === -1 ||\n cell.rowIndex === 0) &&\n !cell.isHeader\n ) {\n drawArray.push([cell, 't']);\n cell[propPrefix + 'BorderTop'] = true;\n cell[propPrefix + 'Border'] += 't';\n }\n if (\n !self.selections[cell.rowIndex + 1 + -offsetPoint.y] ||\n self.selections[cell.rowIndex + 1 + -offsetPoint.y].indexOf(\n cell.columnIndex + -offsetPoint.x,\n ) === -1\n ) {\n drawArray.push([cell, 'b']);\n cell[propPrefix + 'BorderBottom'] = true;\n cell[propPrefix + 'Border'] += 'b';\n }\n if (\n !self.selections[cell.rowIndex + -offsetPoint.y] ||\n cell.columnIndex === 0 ||\n self.selections[cell.rowIndex + -offsetPoint.y].indexOf(\n cell.columnIndex - 1 + -offsetPoint.x,\n ) === -1\n ) {\n drawArray.push([cell, 'l']);\n cell[propPrefix + 'BorderLeft'] = true;\n cell[propPrefix + 'Border'] += 'l';\n }\n if (\n !self.selections[cell.rowIndex + -offsetPoint.y] ||\n cell.columnIndex === s.length ||\n self.selections[cell.rowIndex + -offsetPoint.y].indexOf(\n cell.columnIndex + 1 + -offsetPoint.x,\n ) === -1\n ) {\n drawArray.push([cell, 'r']);\n cell[propPrefix + 'BorderRight'] = true;\n cell[propPrefix + 'Border'] += 'r';\n }\n }\n }\n function drawCell(d, rowOrderIndex, rowIndex) {\n return function drawEach(header, headerIndex, columnOrderIndex) {\n if (header.hidden) {\n return 0;\n }\n var cellStyle = header.style || 'cell',\n cellGridAttributes,\n cell,\n isHeader = /HeaderCell/.test(cellStyle),\n isCorner = /cornerCell/.test(cellStyle),\n isRowHeader = 'rowHeaderCell' === cellStyle,\n isColumnHeader = 'columnHeaderCell' === cellStyle,\n wrap = self.style.cellWhiteSpace !== 'nowrap',\n selected =\n self.selections[rowOrderIndex] &&\n self.selections[rowOrderIndex].indexOf(columnOrderIndex) !== -1,\n hovered =\n self.hovers.rowIndex === rowOrderIndex &&\n self.hovers.columnIndex === columnOrderIndex,\n active =\n self.activeCell.rowIndex === rowOrderIndex &&\n self.activeCell.columnIndex === columnOrderIndex,\n isColumnHeaderCellCap = cellStyle === 'columnHeaderCellCap',\n rawValue = d ? d[header.name] : undefined,\n isGrid = header.type === 'canvas-datagrid',\n activeHeader =\n (self.orders.rows[self.activeCell.rowIndex] === rowOrderIndex ||\n self.orders.columns[self.activeCell.columnIndex] ===\n headerIndex) &&\n (columnOrderIndex === -1 || rowOrderIndex === -1)\n ? isRowHeader\n ? 'activeRowHeaderCell'\n : 'activeColumnHeaderCell'\n : false,\n val,\n f = self.formatters[header.type || 'string'],\n orderByArrowSize = 0,\n treeArrowSize = 0,\n cellWidth = self.sizes.columns[headerIndex] || header.width,\n ev = {\n value: rawValue,\n row: d,\n header: header,\n };\n if (isColumnHeaderCellCap) {\n cellWidth = w - x;\n }\n // if no data or schema are defined, a width is provided to the stub column\n if (cellWidth === undefined) {\n cellWidth = self.style.cellWidth;\n }\n cellWidth = cellWidth * self.scale;\n if (x + cellWidth + self.style.cellBorderWidth < 0) {\n x += cellWidth + self.style.cellBorderWidth;\n }\n if (active && cellStyle !== 'cornerCell') {\n cellStyle = 'activeCell';\n }\n if (self.visibleRows.indexOf(rowIndex) === -1 && !isHeader) {\n self.visibleRows.push(rowIndex);\n }\n val = self.dispatchEvent('formatcellvalue', ev);\n cx = x;\n cy = y;\n if (cellStyle === 'cornerCell') {\n cx = 0;\n cy = 0;\n } else if (isRowHeader) {\n cx = 0;\n } else if (isHeader) {\n cy = 0;\n }\n cell = {\n type: isGrid ? 'canvas-datagrid-cell' : header.type,\n style: cellStyle,\n nodeType: 'canvas-datagrid-cell',\n x: cx,\n y: cy,\n fontHeight: (self.style[cellStyle + 'FontHeight'] || 0) * self.scale,\n horizontalAlignment: self.style[cellStyle + 'HorizontalAlignment'],\n verticalAlignment: self.style[cellStyle + 'VerticalAlignment'],\n paddingLeft:\n (self.style[cellStyle + 'PaddingLeft'] || 0) * self.scale,\n paddingTop: (self.style[cellStyle + 'PaddingTop'] || 0) * self.scale,\n paddingRight:\n (self.style[cellStyle + 'PaddingRight'] || 0) * self.scale,\n paddingBottom:\n (self.style[cellStyle + 'PaddingBottom'] || 0) * self.scale,\n whiteSpace: self.style.cellWhiteSpace,\n lineHeight: self.style.cellLineHeight,\n lineSpacing: self.style.cellLineSpacing,\n offsetTop: self.canvasOffsetTop + cy,\n offsetLeft: self.canvasOffsetLeft + cx,\n scrollTop: self.scrollBox.scrollTop,\n scrollLeft: self.scrollBox.scrollLeft,\n active: active || activeHeader,\n hovered: hovered,\n selected: selected,\n width: cellWidth,\n height: cellHeight,\n offsetWidth: cellWidth,\n offsetHeight: cellHeight,\n parentNode: self.intf.parentNode,\n offsetParent: self.intf.parentNode,\n data: d,\n isCorner: isCorner,\n isHeader: isHeader,\n isColumnHeader: isColumnHeader,\n isColumnHeaderCellCap: isColumnHeaderCellCap,\n isRowHeader: isRowHeader,\n rowOpen: rowOpen,\n header: header,\n columnIndex: columnOrderIndex,\n rowIndex: rowOrderIndex,\n sortColumnIndex: headerIndex,\n sortRowIndex: rowIndex,\n isGrid: isGrid,\n isNormal: !isGrid && !isCorner && !isHeader,\n gridId: (self.attributes.name || '') + rowIndex + ':' + headerIndex,\n parentGrid: self.intf,\n innerHTML: '',\n activeHeader: activeHeader,\n value:\n isHeader && !isRowHeader ? header.title || header.name : rawValue,\n };\n cell.calculatedLineHeight =\n cell.fontHeight * cell.lineHeight + cell.lineSpacing;\n cell.paddedWidth = cell.width - cell.paddingRight - cell.paddingLeft;\n cell.paddedHeight = cell.height - cell.paddingTop - cell.paddingBottom;\n ev.cell = cell;\n cell.userHeight = cell.isHeader ? self.sizes.rows[-1] : rowHeight;\n cell.userWidth = cell.isHeader\n ? self.sizes.columns.cornerCell\n : self.sizes.columns[headerIndex];\n self.visibleCells.unshift(cell);\n if (self.dispatchEvent('beforerendercell', ev)) {\n return;\n }\n self.ctx.fillStyle = self.style[cellStyle + 'BackgroundColor'];\n self.ctx.strokeStyle = self.style[cellStyle + 'BorderColor'];\n self.ctx.lineWidth = self.style[cellStyle + 'BorderWidth'];\n if (hovered) {\n self.ctx.fillStyle = self.style[cellStyle + 'HoverBackgroundColor'];\n self.ctx.strokeStyle = self.style[cellStyle + 'HoverBorderColor'];\n }\n if (selected) {\n self.ctx.fillStyle =\n self.style[cellStyle + 'SelectedBackgroundColor'];\n self.ctx.strokeStyle = self.style[cellStyle + 'SelectedBorderColor'];\n }\n if (activeHeader) {\n self.ctx.fillStyle = self.style[activeHeader + 'BackgroundColor'];\n }\n self.dispatchEvent('rendercell', ev);\n if (cell.isGrid) {\n if (cell.height !== rowHeight) {\n cell.height = rowHeight || self.style.cellHeightWithChildGrid;\n checkScrollHeight = true;\n }\n cell.width =\n self.sizes.columns[headerIndex] ||\n self.style.cellWidthWithChildGrid;\n }\n if (rowOpen && !cell.isRowHeader) {\n cell.height = self.sizes.rows[rowIndex] || self.style.cellHeight;\n }\n if (!cell.isGrid) {\n fillRect(cx, cy, cell.width, cell.height);\n strokeRect(cx, cy, cell.width, cell.height);\n }\n self.ctx.save();\n radiusRect(cell.x, cell.y, cell.width, cell.height, 0);\n self.ctx.clip();\n self.dispatchEvent('afterrendercell', ev);\n if (cell.height !== cellHeight && !(rowOpen && !cell.isRowHeader)) {\n self.sizes.rows[isHeader ? -1 : rowIndex] = cell.height;\n checkScrollHeight = true;\n }\n if (cell.width !== cellWidth) {\n self.sizes.columns[headerIndex] = cell.width;\n checkScrollHeight = true;\n }\n if (isRowHeader && self.attributes.tree) {\n if (!self.dispatchEvent('rendertreearrow', ev)) {\n treeArrowSize = drawTreeArrow(\n cell,\n self.style[cellStyle + 'PaddingLeft'],\n cy,\n 0,\n );\n }\n }\n if ((self.attributes.showRowNumbers && isRowHeader) || !isRowHeader) {\n if (cell.isGrid && !self.dispatchEvent('beforerendercellgrid', ev)) {\n if (!self.childGrids[cell.gridId]) {\n // HACK: this only allows setting of the child grids styles if data is set _after_\n // this is less than desirable. An interface needs to be made to effect the\n // style of all cell grids. One for individual grids already exists.\n cellGridAttributes = self.cellGridAttributes;\n cellGridAttributes.name = self.attributes.saveAppearance\n ? cell.gridId\n : undefined;\n cellGridAttributes.component = false;\n cellGridAttributes.parentNode = cell;\n cellGridAttributes.data = rawValue;\n ev.cellGridAttributes = cellGridAttributes;\n if (self.dispatchEvent('beforecreatecellgrid', ev)) {\n return;\n }\n self.childGrids[cell.gridId] = self.createGrid(\n cellGridAttributes,\n );\n self.sizes.rows[rowIndex] =\n self.sizes.rows[rowIndex] || self.style.cellGridHeight;\n checkScrollHeight = true;\n }\n cell.grid = self.childGrids[cell.gridId];\n cell.grid.parentNode = cell;\n cell.grid.visible = true;\n cell.grid.draw();\n self.dispatchEvent('rendercellgrid', ev);\n } else if (!cell.isGrid) {\n if (self.childGrids[cell.gridId]) {\n self.childGrids[cell.gridId].parentNode.offsetHeight = 0;\n }\n if (isHeader && self.orderBy === header.name) {\n if (!self.dispatchEvent('renderorderbyarrow', ev)) {\n orderByArrowSize = drawOrderByArrow(\n cx + self.style[cellStyle + 'PaddingLeft'],\n 0,\n );\n }\n }\n self.ctx.fillStyle = self.style[cellStyle + 'Color'];\n if (hovered) {\n self.ctx.fillStyle = self.style[cellStyle + 'HoverColor'];\n }\n if (selected) {\n self.ctx.fillStyle = self.style[cellStyle + 'SelectedColor'];\n }\n if (activeHeader) {\n self.ctx.fillStyle = self.style[activeHeader + 'Color'];\n }\n cell.treeArrowWidth = treeArrowSize;\n cell.orderByArrowWidth = orderByArrowSize;\n // create text ref to see if height needs to expand\n val = val !== undefined ? val : f ? f(ev) : '';\n if (val === undefined && !f) {\n val = '';\n console.warn(\n 'canvas-datagrid: Unknown format ' +\n header.type +\n ' add a cellFormater',\n );\n }\n cell.formattedValue = (val !== undefined && val !== null\n ? val\n : ''\n ).toString();\n if (\n self.columnFilters &&\n self.columnFilters[val] !== undefined &&\n isHeader\n ) {\n cell.formattedValue = self.attributes.filterTextPrefix + val;\n }\n self.ctx.font =\n self.style[cellStyle + 'FontHeight'] * self.scale +\n 'px ' +\n self.style[cellStyle + 'FontName'];\n if (!self.dispatchEvent('formattext', ev)) {\n cell.text = wrapText(cell, ' ');\n }\n if (!self.dispatchEvent('rendertext', ev)) {\n if (cell.innerHTML || header.type === 'html') {\n drawHtml(cell);\n } else {\n drawText(cell);\n }\n\n if (wrap && cell.text && cell.text.height > rowHeight) {\n self.sizes.rows[isHeader ? -1 : rowIndex] = cell.text.height;\n checkScrollHeight = true;\n }\n }\n }\n }\n if (active) {\n aCell = cell;\n }\n createBorderOverlayArray(cell, selectionBorders, 'selection');\n // createBorderOverlayArray calculates data for createHandlesOverlayArray so it must go 2nd\n createHandlesOverlayArray(cell);\n if (self.movingSelection) {\n createBorderOverlayArray(cell, moveBorders, 'move', self.moveOffset);\n }\n self.ctx.restore();\n x += cell.width + (bc ? 0 : self.style.cellBorderWidth);\n return cell.width;\n };\n }\n function drawRowHeader(rowData, index, rowOrderIndex) {\n var a, i;\n if (self.attributes.showRowHeaders) {\n x = 0;\n i = index + 1;\n rowHeaderCell = { rowHeaderCell: i };\n a = {\n name: 'rowHeaderCell',\n width: self.sizes.columns[-1] || self.style.rowHeaderCellWidth,\n style: 'rowHeaderCell',\n type: 'string',\n data: i,\n index: -1,\n };\n rowOpen = self.openChildren[index];\n drawCell(rowHeaderCell, index, rowOrderIndex)(a, -1, -1);\n }\n }\n function drawHeaders() {\n var d,\n g = s.length,\n i,\n o,\n columnHeaderCell,\n header,\n nonFrozenHeaderWidth;\n function drawHeaderColumnRange(start, end) {\n end = Math.min(end, g);\n for (o = start; o < end; o += 1) {\n i = self.orders.columns[o];\n header = s[i];\n if (!header.hidden) {\n d = {\n title: header.title,\n name: header.name,\n width: header.width || self.style.cellWidth,\n style: 'columnHeaderCell',\n type: 'string',\n index: o,\n order: i,\n };\n columnHeaderCell = {\n columnHeaderCell: header.title || header.name,\n };\n x += drawCell(columnHeaderCell, -1, -1)(d, i, o);\n if (x > self.width + self.scrollBox.scrollLeft) {\n break;\n }\n }\n }\n }\n rowHeaders.forEach(function (rArgs, rhIndex) {\n y = rArgs[3];\n cellHeight = rArgs[4];\n if (rhIndex === self.frozenRow) {\n self.ctx.save();\n radiusRect(\n 0,\n self.lastFrozenRowPixel,\n self.width,\n self.height - self.lastFrozenRowPixel,\n 0,\n );\n self.ctx.clip();\n }\n drawRowHeader(rArgs[0], rArgs[1], rArgs[2]);\n });\n self.ctx.restore();\n if (self.attributes.showColumnHeaders) {\n x =\n -self.scrollBox.scrollLeft +\n self.scrollPixelLeft +\n self.style.columnHeaderCellBorderWidth;\n if (self.attributes.showRowHeaders) {\n x += rowHeaderCellWidth;\n }\n y = 0;\n // cell height might have changed during drawing\n cellHeight = self.getColumnHeaderCellHeight();\n drawHeaderColumnRange(self.scrollIndexLeft, g);\n nonFrozenHeaderWidth = x;\n x = self.style.columnHeaderCellBorderWidth;\n if (self.attributes.showRowHeaders) {\n x += rowHeaderCellWidth;\n }\n drawHeaderColumnRange(0, self.frozenColumn);\n // fill in the space right of the headers\n x = nonFrozenHeaderWidth;\n if (x < w) {\n c = {\n name: '',\n width: self.style.scrollBarWidth,\n style: 'columnHeaderCellCap',\n isColumnHeaderCell: true,\n isColumnHeaderCellCap: true,\n type: 'string',\n index: s.length,\n };\n drawCell({ endCap: '' }, -1, -1)(c, -1, -1);\n }\n // fill in the space right of the headers\n if (self.attributes.showRowHeaders) {\n cornerCell = { cornerCell: '' };\n x = 0;\n c = {\n name: 'cornerCell',\n width: self.style.rowHeaderCellWidth,\n style: 'cornerCell',\n type: 'string',\n index: -1,\n };\n drawCell(cornerCell, -1, -1)(c, -1, -1);\n }\n }\n }\n function drawRow(r, d) {\n var i,\n treeHeight,\n rowSansTreeHeight,\n o,\n g = s.length;\n if (y - cellHeight * 2 > h) {\n return false;\n }\n rd = data[r];\n rowOpen = self.openChildren[r];\n rowSansTreeHeight =\n (self.sizes.rows[r] || self.style.cellHeight) * self.scale;\n treeHeight = (rowOpen ? self.sizes.trees[r] : 0) * self.scale;\n rowHeight = rowSansTreeHeight + treeHeight;\n if (y < -rowHeight) {\n return false;\n }\n if (self.attributes.showRowHeaders) {\n x += rowHeaderCellWidth;\n }\n cellHeight = rowHeight;\n //draw normal columns\n for (o = self.scrollIndexLeft; o < g; o += 1) {\n i = self.orders.columns[o];\n x += drawCell(rd, r, d)(s[i], i, o);\n if (x > self.width) {\n self.scrollIndexRight = o;\n self.scrollPixelRight = x;\n break;\n }\n }\n //draw frozen columns\n x = 0;\n if (self.attributes.showRowHeaders) {\n x += rowHeaderCellWidth;\n }\n for (o = 0; o < self.frozenColumn; o += 1) {\n i = self.orders.columns[o];\n x += drawCell(rd, r, d)(s[i], i, o);\n if (x > self.width) {\n break;\n }\n }\n self.lastFrozenColumnPixel = x;\n // cell height might have changed during drawing\n cellHeight = rowHeight;\n x =\n -self.scrollBox.scrollLeft +\n self.scrollPixelLeft +\n self.style.cellBorderWidth;\n // don't draw a tree for the new row\n treeGrid = self.childGrids[r];\n if (r !== data.length && rowOpen) {\n treeGrid.visible = true;\n treeGrid.parentNode = {\n offsetTop: y + rowSansTreeHeight + self.canvasOffsetTop,\n offsetLeft: rowHeaderCellWidth - 1 + self.canvasOffsetLeft,\n offsetHeight: treeHeight,\n offsetWidth:\n self.width - rowHeaderCellWidth - self.style.scrollBarWidth - 1,\n offsetParent: self.intf.parentNode,\n parentNode: self.intf.parentNode,\n style: self.style,\n nodeType: 'canvas-datagrid-tree',\n scrollTop: self.scrollBox.scrollTop,\n scrollLeft: self.scrollBox.scrollLeft,\n rowIndex: r,\n };\n self.visibleCells.unshift({\n rowIndex: r,\n columnIndex: 0,\n y: treeGrid.parentNode.offsetTop,\n x: treeGrid.parentNode.offsetLeft,\n height: treeGrid.height,\n width: treeGrid.width,\n style: 'tree-grid',\n type: treeGrid.parentNode.nodeType,\n });\n treeGrid.draw();\n } else if (treeGrid) {\n treeGrid.parentNode.offsetHeight = 0;\n delete self.sizes.trees[r];\n }\n rowHeaders.push([rd, r, d, y, rowHeight]);\n self.visibleRowHeights[r] = rowHeight;\n y += cellHeight + (bc ? 0 : self.style.cellBorderWidth);\n return true;\n }\n function initDraw() {\n self.visibleRows = [];\n s = self.getSchema();\n self.visibleCells = [];\n self.canvasOffsetTop = self.isChildGrid ? self.parentNode.offsetTop : 0.5;\n self.canvasOffsetLeft = self.isChildGrid\n ? self.parentNode.offsetLeft\n : -0.5;\n h = self.height;\n w = self.width;\n }\n function drawBackground() {\n radiusRect(0, 0, w, h, 0);\n self.ctx.clip();\n self.ctx.fillStyle = self.style.gridBackgroundColor;\n fillRect(0, 0, w, h);\n }\n function drawFrozenRows() {\n var n,\n ln = Math.min(data.length, self.frozenRow);\n x =\n -self.scrollBox.scrollLeft +\n self.scrollPixelLeft +\n self.style.cellBorderWidth;\n y = columnHeaderCellHeight;\n for (r = 0; r < ln; r += 1) {\n n = self.orders.rows[r];\n if (!drawRow(n, r)) {\n break;\n }\n }\n if (self.attributes.allowFreezingRows) {\n // HACK great, another stupid magic number.\n // Background will appear as a 0.5px artifact behind the row freeze bar without this hack\n y +=\n self.style.frozenMarkerBorderWidth +\n self.style.frozenMarkerWidth -\n 0.4999999999;\n }\n self.lastFrozenRowPixel = y;\n }\n function drawRows() {\n self.ctx.save();\n if (self.frozenRow > 0) {\n radiusRect(\n 0,\n self.lastFrozenRowPixel,\n self.width,\n self.height - self.lastFrozenRowPixel,\n 0,\n );\n self.ctx.clip();\n }\n var o,\n n,\n i,\n g = s.length;\n x =\n -self.scrollBox.scrollLeft +\n self.scrollPixelLeft +\n self.style.cellBorderWidth;\n if (!self.attributes.snapToRow) {\n y +=\n -self.scrollBox.scrollTop +\n self.scrollPixelTop +\n self.style.cellBorderWidth;\n }\n for (r = self.frozenRow + self.scrollIndexTop; r < l; r += 1) {\n n = self.orders.rows[r];\n self.scrollIndexBottom = r;\n self.scrollPixelBottom = y;\n if (!drawRow(n, r)) {\n break;\n }\n }\n if (self.attributes.showNewRow) {\n if (self.attributes.showRowHeaders) {\n x += rowHeaderCellWidth;\n }\n rowHeight = cellHeight = self.style.cellHeight;\n rowOpen = false;\n for (o = self.scrollIndexLeft; o < g; o += 1) {\n i = self.orders.columns[o];\n x += drawCell(self.newRow, data.length, data.length)(s[i], i, o);\n if (x > self.width + self.scrollBox.scrollLeft) {\n break;\n }\n }\n rowHeaders.push([self.newRow, data.length, data.length, y, rowHeight]);\n }\n self.ctx.restore();\n }\n function drawMoveMarkers() {\n if (!self.movingSelection) {\n return;\n }\n self.ctx.lineWidth = self.style.moveOverlayBorderWidth;\n self.ctx.strokeStyle = self.style.moveOverlayBorderColor;\n self.ctx.setLineDash(self.style.moveOverlayBorderSegments);\n moveBorders.forEach(function (c) {\n addBorderLine(c[0], c[1]);\n });\n self.ctx.setLineDash([]);\n }\n function drawReorderMarkers() {\n if (!self.reorderObject) {\n return;\n }\n var b = {\n height: self.reorderObject.height,\n width: self.reorderObject.width,\n x: self.reorderObject.x + self.reorderObject.dragOffset.x,\n y: self.reorderObject.y + self.reorderObject.dragOffset.y,\n },\n m = {\n width: w,\n height: h,\n x: 0,\n y: 0,\n };\n self.ctx.fillStyle = self.style.reorderMarkerBackgroundColor;\n self.ctx.lineWidth = self.style.reorderMarkerBorderWidth;\n self.ctx.strokeStyle = self.style.reorderMarkerBorderColor;\n if (self.dragMode === 'row-reorder') {\n b.width = w;\n b.x = 0;\n m.width = w;\n m.height = self.currentCell.height;\n m.y = self.currentCell.y;\n fillRect(b.x, b.y, b.width, b.height);\n strokeRect(b.x, b.y, b.width, b.height);\n self.ctx.lineWidth = self.style.reorderMarkerIndexBorderWidth;\n self.ctx.strokeStyle = self.style.reorderMarkerIndexBorderColor;\n if (\n self.currentCell.rowIndex !== self.reorderObject.rowIndex &&\n self.currentCell.rowIndex > -1 &&\n self.currentCell.rowIndex < l\n ) {\n addBorderLine(\n m,\n self.reorderTarget.sortRowIndex > self.reorderObject.sortRowIndex\n ? 'b'\n : 't',\n );\n }\n } else if (self.dragMode === 'column-reorder' && self.reorderObject) {\n b.height = h;\n b.y = 0;\n m.height = h;\n m.width = self.currentCell.width;\n m.y = 0;\n m.x = self.currentCell.x;\n fillRect(b.x, b.y, b.width, b.height);\n strokeRect(b.x, b.y, b.width, b.height);\n self.ctx.lineWidth = self.style.reorderMarkerIndexBorderWidth;\n self.ctx.strokeStyle = self.style.reorderMarkerIndexBorderColor;\n if (\n self.currentCell.sortColumnIndex !==\n self.reorderObject.sortColumnIndex &&\n self.currentCell.sortColumnIndex > -1 &&\n self.currentCell.sortColumnIndex < s.length\n ) {\n addBorderLine(\n m,\n self.reorderTarget.columnIndex > self.reorderObject.columnIndex\n ? 'r'\n : 'l',\n );\n }\n }\n }\n function drawBorder() {\n self.ctx.lineWidth = self.style.gridBorderWidth;\n self.ctx.strokeStyle = self.style.gridBorderColor;\n strokeRect(0, 0, self.width, self.height);\n }\n function drawSelectionBorders() {\n self.ctx.lineWidth = self.style.selectionOverlayBorderWidth;\n self.ctx.strokeStyle = self.style.selectionOverlayBorderColor;\n function dsb(c) {\n addBorderLine(c[0], c[1]);\n }\n selectionBorders\n .filter(function (c) {\n return (\n c[0].rowIndex < self.frozenRow &&\n c[0].columnIndex < self.frozenColumn\n );\n })\n .forEach(dsb);\n self.ctx.save();\n clipFrozenArea(0);\n selectionBorders\n .filter(function (c) {\n return (\n c[0].rowIndex >= self.frozenRow &&\n c[0].columnIndex >= self.frozenColumn\n );\n })\n .forEach(dsb);\n self.ctx.restore();\n self.ctx.save();\n clipFrozenArea(1);\n selectionBorders\n .filter(function (c) {\n return (\n c[0].rowIndex >= self.frozenRow &&\n c[0].columnIndex < self.frozenColumn\n );\n })\n .forEach(dsb);\n self.ctx.restore();\n self.ctx.save();\n clipFrozenArea(2);\n selectionBorders\n .filter(function (c) {\n return (\n c[0].rowIndex < self.frozenRow &&\n c[0].columnIndex >= self.frozenColumn\n );\n })\n .forEach(dsb);\n self.ctx.restore();\n }\n function drawSelectionHandles() {\n if (self.mobile || self.attributes.allowMovingSelection) {\n self.ctx.lineWidth = self.style.selectionHandleBorderWidth;\n self.ctx.strokeStyle = self.style.selectionHandleBorderColor;\n self.ctx.fillStyle = self.style.selectionHandleColor;\n selectionHandles.forEach(function (c) {\n addselectionHandle(c[0], c[1]);\n var az = self.attributes.touchSelectHandleZone / 2,\n ax =\n c[0].x + (c[1] === 'tl' || c[1] === 'bl' ? 0 : c[0].width) - az,\n ay =\n c[0].y + (c[1] === 'bl' || c[1] === 'br' ? c[0].height : 0) - az;\n self.visibleCells.unshift({\n x: ax,\n y: ay,\n height: self.style.selectionHandleSize + az,\n width: self.style.selectionHandleSize + az,\n style: 'selection-handle-' + c[1],\n });\n });\n }\n }\n function drawActiveCell() {\n if (!aCell) {\n return;\n }\n self.ctx.save();\n var cl =\n self.activeCell.columnIndex + 1 > self.frozenColumn ||\n self.activeCell.rowIndex + 1 > self.frozenRow,\n acx = cl ? self.lastFrozenColumnPixel : 0,\n acy = cl ? self.lastFrozenRowPixel : 0,\n acw = cl ? self.width - self.lastFrozenColumnPixel : self.width,\n ach = cl ? self.height - self.lastFrozenRowPixel : self.height;\n radiusRect(acx, acy, acw, ach, 0);\n self.ctx.clip();\n if (self.attributes.selectionMode === 'row') {\n if (self.activeCell && self.activeCell.rowIndex === aCell.rowIndex) {\n self.ctx.lineWidth = self.style.activeCellOverlayBorderWidth;\n self.ctx.strokeStyle = self.style.activeCellOverlayBorderColor;\n strokeRect(\n 1,\n aCell.y,\n self.getHeaderWidth() + rowHeaderCellWidth,\n self.visibleRowHeights[aCell.rowIndex],\n );\n }\n } else {\n self.ctx.lineWidth = self.style.activeCellOverlayBorderWidth;\n self.ctx.strokeStyle = self.style.activeCellOverlayBorderColor;\n strokeRect(aCell.x, aCell.y, aCell.width, aCell.height);\n }\n self.ctx.restore();\n }\n function drawFrozenMarkers() {\n var my = self.lastFrozenRowPixel - self.style.frozenMarkerWidth,\n mx = self.lastFrozenColumnPixel - self.style.frozenMarkerBorderWidth,\n xHover =\n self.currentCell && self.currentCell.style === 'frozen-row-marker',\n yHover =\n self.currentCell && self.currentCell.style === 'frozen-column-marker';\n self.ctx.lineWidth = self.style.frozenMarkerBorderWidth;\n if (self.attributes.allowFreezingColumns) {\n self.ctx.fillStyle = yHover\n ? self.style.frozenMarkerHoverColor\n : self.style.frozenMarkerColor;\n self.ctx.strokeStyle = yHover\n ? self.style.frozenMarkerHoverBorderColor\n : self.style.frozenMarkerBorderColor;\n fillRect(mx, 0, self.style.frozenMarkerWidth, self.height);\n strokeRect(mx, 0, self.style.frozenMarkerWidth, self.height);\n self.visibleCells.unshift({\n x: mx,\n y: 0,\n height: self.height,\n width:\n self.style.frozenMarkerWidth + self.style.frozenMarkerBorderWidth,\n style: 'frozen-column-marker',\n });\n }\n if (self.attributes.allowFreezingRows) {\n self.ctx.fillStyle = xHover\n ? self.style.frozenMarkerHoverColor\n : self.style.frozenMarkerColor;\n self.ctx.strokeStyle = xHover\n ? self.style.frozenMarkerHoverBorderColor\n : self.style.frozenMarkerBorderColor;\n fillRect(0, my, self.width, self.style.frozenMarkerWidth);\n strokeRect(0, my, self.width, self.style.frozenMarkerWidth);\n self.visibleCells.unshift({\n x: 0,\n y: my,\n height:\n self.style.frozenMarkerWidth + self.style.frozenMarkerBorderWidth,\n width: self.width,\n style: 'frozen-row-marker',\n });\n }\n if (self.freezeMarkerPosition) {\n self.ctx.fillStyle = self.style.frozenMarkerActiveColor;\n self.ctx.strokeStyle = self.style.frozenMarkerActiveBorderColor;\n if (self.dragMode === 'frozen-column-marker') {\n fillRect(\n self.freezeMarkerPosition.x,\n 0,\n self.style.frozenMarkerWidth,\n self.height,\n );\n strokeRect(\n self.freezeMarkerPosition.x,\n 0,\n self.style.frozenMarkerWidth,\n self.height,\n );\n } else {\n fillRect(\n 0,\n self.freezeMarkerPosition.y,\n self.width,\n self.style.frozenMarkerWidth,\n );\n strokeRect(\n 0,\n self.freezeMarkerPosition.y,\n self.width,\n self.style.frozenMarkerWidth,\n );\n }\n }\n }\n function drawPerfLines() {\n if (!self.attributes.showPerformance) {\n return;\n }\n var pw = 250,\n px =\n self.width -\n pw -\n self.style.scrollBarWidth -\n self.style.scrollBarBorderWidth * 2,\n py = columnHeaderCellHeight,\n ph = 100;\n if (scrollDebugCounters.length === 0) {\n scrollDebugCounters = fillArray(0, perfWindowSize, 1, function () {\n return [0, 0];\n });\n }\n if (touchPPSCounters.length === 0) {\n touchPPSCounters = fillArray(0, perfWindowSize, 1, function () {\n return [0, 0];\n });\n }\n if (entityCount.length === 0) {\n entityCount = fillArray(0, perfWindowSize, 1, 0);\n }\n self.ctx.lineWidth = 0.5;\n function dpl(name, perfArr, arrIndex, max, color, useAbs, rowIndex) {\n var v;\n drawPerfLine(pw, ph, px, py, perfArr, arrIndex, max, color, useAbs);\n self.ctx.fillStyle = color;\n fillRect(3 + px, py + 9 + rowIndex * 11, 8, 8);\n self.ctx.fillStyle = self.style.debugPerfChartTextColor;\n v = arrIndex !== undefined ? perfArr[0][arrIndex] : perfArr[0];\n fillText(\n name + ' ' + (isNaN(v) ? 0 : v).toFixed(3),\n 14 + px,\n py + 16 + rowIndex * 11,\n );\n }\n self.ctx.textAlign = 'left';\n self.ctx.font = self.style.debugFont;\n self.ctx.fillStyle = self.style.debugPerfChartBackground;\n fillRect(px, py, pw, ph);\n [\n [\n 'Scroll Height',\n scrollDebugCounters,\n 0,\n self.scrollBox.scrollHeight,\n self.style.debugScrollHeightColor,\n false,\n ],\n [\n 'Scroll Width',\n scrollDebugCounters,\n 1,\n self.scrollBox.scrollWidth,\n self.style.debugScrollWidthColor,\n false,\n ],\n [\n 'Performance',\n perfCounters,\n undefined,\n 200,\n self.style.debugPerformanceColor,\n false,\n ],\n [\n 'Entities',\n entityCount,\n undefined,\n 1500,\n self.style.debugEntitiesColor,\n false,\n ],\n [\n 'TouchPPSX',\n touchPPSCounters,\n 0,\n 1000,\n self.style.debugTouchPPSXColor,\n true,\n ],\n [\n 'TouchPPSY',\n touchPPSCounters,\n 1,\n 1000,\n self.style.debugTouchPPSYColor,\n true,\n ],\n ].forEach(function (i, index) {\n i.push(index);\n dpl.apply(null, i);\n });\n self.ctx.fillStyle = self.style.debugPerfChartBackground;\n entityCount.pop();\n entityCount.unshift(self.visibleCells.length);\n scrollDebugCounters.pop();\n scrollDebugCounters.unshift([\n self.scrollBox.scrollTop,\n self.scrollBox.scrollLeft,\n ]);\n touchPPSCounters.pop();\n touchPPSCounters.unshift([self.yPPS, self.xPPS]);\n }\n function drawDebug() {\n self.ctx.save();\n var d;\n if (self.attributes.showPerformance || self.attributes.debug) {\n if (perfCounters.length === 0) {\n perfCounters = fillArray(0, perfWindowSize, 1, 0);\n }\n perfCounters.pop();\n perfCounters.unshift(performance.now() - p);\n }\n if (!self.attributes.debug) {\n self.ctx.restore();\n return;\n }\n self.ctx.font = self.style.debugFont;\n d = {};\n d.perf = (\n perfCounters.reduce(function (a, b) {\n return a + b;\n }, 0) / Math.min(drawCount, perfCounters.length)\n ).toFixed(1);\n d.perfDelta = perfCounters[0].toFixed(1);\n d.frozenColumnsWidth = getFrozenColumnsWidth();\n d.htmlImages = Object.keys(self.htmlImageCache).length;\n d.reorderObject =\n 'x: ' +\n (self.reorderObject || { columnIndex: 0 }).columnIndex +\n ', y: ' +\n (self.reorderObject || { rowIndex: 0 }).rowIndex;\n d.reorderTarget =\n 'x: ' +\n (self.reorderTarget || { columnIndex: 0 }).columnIndex +\n ', y: ' +\n (self.reorderTarget || { rowIndex: 0 }).rowIndex;\n d.scale = self.scale;\n d.startScale = self.startScale;\n d.scaleDelta = self.scaleDelta;\n d.zoomDeltaStart = self.zoomDeltaStart;\n d.touchLength = self.touchLength;\n d.touches =\n 'y0: ' +\n (self.touchPosition || { y: 0 }).y +\n ' y1: ' +\n (self.touchPosition1 || { y: 0 }).y;\n d.scrollBox = self.scrollBox.toString();\n d.scrollIndex =\n 'x: ' + self.scrollIndexLeft + ', y: ' + self.scrollIndexTop;\n d.scrollPixel =\n 'x: ' + self.scrollPixelLeft + ', y: ' + self.scrollPixelTop;\n d.canvasOffset =\n 'x: ' + self.canvasOffsetLeft + ', y: ' + self.canvasOffsetTop;\n d.touchDelta = 'x: ' + self.touchDelta.x + ', y: ' + self.touchDelta.y;\n d.touchAnimateTo =\n 'x: ' + self.touchAnimateTo.x + ', y: ' + self.touchAnimateTo.y;\n d.scrollAnimation =\n 'x: ' + self.scrollAnimation.x + ', y: ' + self.scrollAnimation.y;\n d.touchPPS = 'x: ' + self.xPPS + ', y: ' + self.yPPS;\n d.touchPPST = 'x: ' + self.xPPST + ', y: ' + self.yPPST;\n d.touchDuration = self.touchDuration;\n d.pointerLockPosition = self.pointerLockPosition\n ? self.pointerLockPosition.x + ', ' + self.pointerLockPosition.y\n : '';\n d.size = 'w: ' + self.width + ', h: ' + self.height;\n d.mouse = 'x: ' + self.mouse.x + ', y: ' + self.mouse.y;\n d.touch = !self.touchStart\n ? ''\n : 'x: ' + self.touchStart.x + ', y: ' + self.touchStart.y;\n d.entities = self.visibleCells.length;\n d.hasFocus = self.hasFocus;\n d.dragMode = self.dragMode;\n if (self.currentCell) {\n d.columnIndex = self.currentCell.columnIndex;\n d.rowIndex = self.currentCell.rowIndex;\n d.sortColumnIndex = self.currentCell.sortColumnIndex;\n d.sortRowIndex = self.currentCell.sortRowIndex;\n d.context = self.currentCell.context;\n d.dragContext = self.currentCell.dragContext;\n d.style = self.currentCell.style;\n d.type = self.currentCell.type;\n }\n self.ctx.textAlign = 'right';\n self.ctx.fillStyle = self.style.debugBackgroundColor;\n fillRect(0, 0, self.width, self.height);\n Object.keys(d).forEach(function (key, index) {\n var m = key + ': ' + d[key],\n lh = 14;\n self.ctx.fillStyle = self.style.debugColor;\n fillText(\n m,\n w - 20,\n (self.attributes.showPerformance ? 140 : 24) + index * lh,\n );\n });\n self.ctx.restore();\n }\n self.ctx.save();\n initDraw();\n drawBackground();\n drawFrozenRows();\n drawRows();\n drawActiveCell();\n drawHeaders();\n drawFrozenMarkers();\n drawSelectionHandles();\n drawReorderMarkers();\n drawMoveMarkers();\n drawBorder();\n drawSelectionBorders();\n drawScrollBars();\n if (checkScrollHeight) {\n self.resize(true);\n }\n drawDebug();\n drawPerfLines();\n if (self.dispatchEvent('afterdraw', {})) {\n return;\n }\n self.ctx.restore();\n };\n}\n","/*jslint browser: true, unparam: true, todo: true, plusplus: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport isPrintableKeyEvent from 'is-printable-key-event';\n\nexport default function (self) {\n var wheeling;\n self.stopPropagation = function (e) {\n e.stopPropagation();\n };\n /**\n * Adds an event listener to the given event.\n * @memberof canvasDatagrid\n * @name addEventListener\n * @method\n * @param {string} ev The name of the event to subscribe to.\n * @param {function} fn The event procedure to execute when the event is raised.\n */\n self.addEventListener = function (ev, fn) {\n self.events[ev] = self.events[ev] || [];\n self.events[ev].unshift(fn);\n };\n /**\n * Removes the given listener function from the given event. Must be an actual reference to the function that was bound.\n * @memberof canvasDatagrid\n * @name removeEventListener\n * @method\n * @param {string} ev The name of the event to unsubscribe from.\n * @param {function} fn The event procedure to execute when the event is raised.\n */\n self.removeEventListener = function (ev, fn) {\n (self.events[ev] || []).forEach(function removeEachListener(sfn, idx) {\n if (fn === sfn) {\n self.events[ev].splice(idx, 1);\n }\n });\n };\n /**\n * Fires the given event, passing an event object to the event subscribers.\n * @memberof canvasDatagrid\n * @name dispatchEvent\n * @method\n * @param {number} ev The name of the event to dispatch.\n * @param {number} e The event object.\n */\n self.dispatchEvent = function (ev, e) {\n e = ev.type ? ev : e || {};\n ev = ev.type || ev;\n var defaultPrevented;\n function preventDefault() {\n defaultPrevented = true;\n }\n if (!self.events[ev]) {\n return;\n }\n self.events[ev].forEach(function dispatchEachEvent(fn) {\n e.ctx = self.ctx;\n e.preventDefault = preventDefault;\n fn.apply(self.intf, [e]);\n });\n return defaultPrevented;\n };\n self.getRatio = function () {\n return Math.min(\n self.attributes.maxPixelRatio,\n (window.devicePixelRatio || 1) /\n (self.ctx.webkitBackingStorePixelRatio ||\n self.ctx.mozBackingStorePixelRatio ||\n self.ctx.msBackingStorePixelRatio ||\n self.ctx.oBackingStorePixelRatio ||\n self.ctx.backingStorePixelRatio ||\n 1),\n );\n };\n self.resize = function (drawAfterResize) {\n if (!self.canvas) {\n return;\n }\n var x,\n v = {\n x: 0,\n y: 0,\n height: 0,\n width: 0,\n style: 'vertical-scroll-bar',\n },\n n = {\n x: 0,\n y: 0,\n height: 0,\n width: 0,\n style: 'horizontal-scroll-bar',\n },\n vb = {\n x: 0,\n y: 0,\n height: 0,\n width: 0,\n style: 'vertical-scroll-box',\n },\n nb = {\n x: 0,\n y: 0,\n height: 0,\n width: 0,\n style: 'horizontal-scroll-box',\n },\n co = {\n x: 0,\n y: 0,\n height: 0,\n width: 0,\n isCorner: true,\n isScrollBoxCorner: true,\n style: 'scroll-box-corner',\n },\n m = self.style.scrollBarBoxMargin * 2,\n b = self.style.scrollBarBorderWidth * 2,\n d = self.style.scrollBarBoxMargin * 0.5,\n sbw = self.style.scrollBarWidth + self.style.scrollBarBorderWidth * 2,\n ratio = self.getRatio(),\n bm = self.style.gridBorderCollapse === 'collapse' ? 1 : 2,\n cellBorder = self.style.cellBorderWidth * bm,\n columnHeaderCellBorder = self.style.columnHeaderCellBorderWidth * bm,\n dataHeight = 0,\n dataWidth = 0,\n dims,\n l = (self.data || []).length,\n columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n rowHeaderCellWidth = self.getRowHeaderCellWidth(),\n ch = self.style.cellHeight,\n s = self.getSchema();\n // sets actual DOM canvas element\n function checkScrollBoxVisibility() {\n self.scrollBox.horizontalBarVisible =\n (self.style.width !== 'auto' &&\n dataWidth > self.scrollBox.width &&\n self.style.overflowX !== 'hidden') ||\n self.style.overflowX === 'scroll';\n self.scrollBox.horizontalBoxVisible = dataWidth > self.scrollBox.width;\n self.scrollBox.verticalBarVisible =\n (self.style.height !== 'auto' &&\n dataHeight > self.scrollBox.height &&\n self.style.overflowY !== 'hidden') ||\n self.style.overflowY === 'scroll';\n self.scrollBox.verticalBoxVisible = dataHeight > self.scrollBox.height;\n }\n function setScrollBoxSize() {\n self.scrollBox.width = self.width - rowHeaderCellWidth;\n self.scrollBox.height = self.height - columnHeaderCellHeight;\n }\n function setCanvasSize() {\n if (self.isChildGrid) {\n return;\n }\n dims = {\n // HACK +1 ? maybe it's a magic cell border? Required to line up properly in auto height mode.\n height: columnHeaderCellHeight + dataHeight + cellBorder + 1,\n width: dataWidth + rowHeaderCellWidth + cellBorder,\n };\n ['width', 'height'].forEach(function (dim) {\n //TODO: support inherit\n if (\n ['auto', undefined].indexOf(self.style[dim]) !== -1 &&\n ['auto', undefined].indexOf(self.appliedInlineStyles[dim]) !== -1\n ) {\n self.parentNodeStyle[dim] = dims[dim] + 'px';\n } else if (\n ['auto', undefined].indexOf(self.style[dim]) == -1 &&\n ['auto', undefined].indexOf(self.appliedInlineStyles[dim]) == -1\n ) {\n self.parentNodeStyle[dim] = self.style[dim];\n if (self.isComponet) {\n self.canvas.style[dim] = self.style[dim];\n }\n }\n });\n }\n self.scrollCache.x = [];\n self.scrollCache.y = [];\n for (x = 0; x < l; x += 1) {\n self.scrollCache.y[x] = dataHeight;\n dataHeight +=\n ((self.sizes.rows[x] || ch) + (self.sizes.trees[x] || 0)) * self.scale +\n // HACK? if an expanded tree row is frozen it is necessary to add the tree row's height a second time.\n (self.frozenRow > x ? self.sizes.trees[x] || 0 : 0);\n }\n if (l > 1) {\n self.scrollCache.y[x] = dataHeight;\n }\n dataWidth =\n s.reduce(function reduceSchema(accumulator, column, columnIndex) {\n // intentional redefintion of column. This causes scrollCache to be in the correct order\n column = s[self.orders.columns[columnIndex]];\n if (column.hidden) {\n self.scrollCache.x[columnIndex] = accumulator;\n return accumulator;\n }\n var va =\n accumulator + self.getColummnWidth(self.orders.columns[columnIndex]);\n self.scrollCache.x[columnIndex] = va;\n return va;\n }, 0) || 0;\n if (self.attributes.showNewRow) {\n dataHeight += ch;\n }\n if (self.attributes.snapToRow) {\n dataHeight += self.style.cellHeight;\n }\n setCanvasSize();\n if (self.isChildGrid) {\n self.width = self.parentNode.offsetWidth;\n self.height = self.parentNode.offsetHeight;\n } else if (\n self.height !== self.canvas.offsetHeight ||\n self.width !== self.canvas.offsetWidth\n ) {\n self.height = self.canvas.offsetHeight;\n self.width = self.canvas.offsetWidth;\n self.canvasOffsetLeft = self.args.canvasOffsetLeft || 0;\n self.canvasOffsetTop = self.args.canvasOffsetTop || 0;\n }\n /// calculate scroll bar dimensions\n // non-controversial\n self.scrollBox.top = columnHeaderCellHeight + columnHeaderCellBorder;\n self.scrollBox.left = rowHeaderCellWidth;\n // width and height of scroll box\n setScrollBoxSize();\n // is the data larger than the scroll box\n checkScrollBoxVisibility();\n // if the scroll box is visible, make room for it by expanding the size of the element\n // if the other dimension is set to auto\n if (self.scrollBox.horizontalBarVisible) {\n if (self.style.height === 'auto' && !self.isChildGrid) {\n self.height += sbw;\n }\n dataHeight += sbw;\n setCanvasSize();\n setScrollBoxSize();\n checkScrollBoxVisibility();\n }\n if (self.scrollBox.verticalBarVisible) {\n if (self.style.width === 'auto' && !self.isChildGrid) {\n self.width += sbw;\n }\n dataWidth += sbw;\n setCanvasSize();\n setScrollBoxSize();\n checkScrollBoxVisibility();\n }\n // set again after bar visibility checks\n setScrollBoxSize();\n self.scrollBox.scrollWidth = dataWidth - self.scrollBox.width;\n self.scrollBox.scrollHeight = dataHeight - self.scrollBox.height;\n self.scrollBox.widthBoxRatio = self.scrollBox.width / dataWidth;\n self.scrollBox.scrollBoxWidth =\n self.scrollBox.width * self.scrollBox.widthBoxRatio -\n self.style.scrollBarWidth -\n b -\n d;\n // TODO: This heightBoxRatio number is terribly wrong.\n // They should be a result of the size of the grid/canvas?\n // it being off causes the scroll bar to \"slide\" under\n // the dragged mouse.\n // https://github.com/TonyGermaneri/canvas-datagrid/issues/97\n self.scrollBox.heightBoxRatio =\n (self.scrollBox.height - columnHeaderCellHeight) / dataHeight;\n self.scrollBox.scrollBoxHeight =\n self.scrollBox.height * self.scrollBox.heightBoxRatio -\n self.style.scrollBarWidth -\n b -\n d;\n self.scrollBox.scrollBoxWidth = Math.max(\n self.scrollBox.scrollBoxWidth,\n self.style.scrollBarBoxMinSize,\n );\n self.scrollBox.scrollBoxHeight = Math.max(\n self.scrollBox.scrollBoxHeight,\n self.style.scrollBarBoxMinSize,\n );\n // horizontal\n n.x += rowHeaderCellWidth;\n n.y += self.height - self.style.scrollBarWidth - d;\n n.width =\n self.width - self.style.scrollBarWidth - rowHeaderCellWidth - d - m;\n n.height = self.style.scrollBarWidth + self.style.scrollBarBorderWidth + d;\n // horizontal box\n nb.y = n.y + self.style.scrollBarBoxMargin;\n nb.width = self.scrollBox.scrollBoxWidth;\n nb.height = self.style.scrollBarBoxWidth;\n // vertical\n v.x +=\n self.width -\n self.style.scrollBarWidth -\n self.style.scrollBarBorderWidth -\n d;\n v.y += columnHeaderCellHeight;\n v.width = self.style.scrollBarWidth + self.style.scrollBarBorderWidth + d;\n v.height =\n self.height - columnHeaderCellHeight - self.style.scrollBarWidth - d - m;\n // vertical box\n vb.x = v.x + self.style.scrollBarBoxMargin;\n vb.width = self.style.scrollBarBoxWidth;\n vb.height = self.scrollBox.scrollBoxHeight;\n // corner\n co.x = n.x + n.width + m;\n co.y = v.y + v.height + m;\n co.width = self.style.scrollBarWidth + self.style.scrollBarBorderWidth;\n co.height = self.style.scrollBarWidth + self.style.scrollBarBorderWidth;\n self.scrollBox.entities = {\n horizontalBar: n,\n horizontalBox: nb,\n verticalBar: v,\n verticalBox: vb,\n corner: co,\n };\n self.scrollBox.bar = {\n v: v,\n h: n,\n };\n self.scrollBox.box = {\n v: vb,\n h: nb,\n };\n /// calculate page and dom elements\n self.page = Math.max(\n 1,\n self.visibleRows.length - 3 - self.attributes.pageUpDownOverlap,\n );\n // set canvas drawing related items\n if (!self.isChildGrid) {\n self.canvas.width = self.width * ratio;\n self.canvas.height = self.height * ratio;\n self.ctx.scale(ratio, ratio);\n }\n // resize any open dom elements (input/textarea)\n self.resizeEditInput();\n self.scroll(true);\n if (drawAfterResize) {\n self.draw(true);\n }\n self.dispatchEvent('resize', {});\n return true;\n };\n self.scroll = function (dontDraw) {\n var s = self.getSchema(),\n l = (self.data || []).length,\n ch = self.style.cellHeight;\n // go too far in leaps, then get focused\n self.scrollIndexTop = Math.floor(\n l * (self.scrollBox.scrollTop / self.scrollBox.scrollHeight) - 100,\n );\n self.scrollIndexTop = Math.max(self.scrollIndexTop, 0);\n self.scrollPixelTop = self.scrollCache.y[self.scrollIndexTop];\n // sometimes the grid is rendered but the height is zero\n if (self.scrollBox.scrollHeight === 0) {\n self.scrollIndexTop = 0;\n }\n self.scrollPixelTop = 0;\n self.scrollIndexLeft = self.frozenColumn;\n self.scrollPixelLeft = 0;\n while (\n self.scrollPixelTop < self.scrollBox.scrollTop &&\n self.scrollIndexTop < self.data.length\n ) {\n // start on index +1 since index 0 was used in \"go too far\" section above\n self.scrollIndexTop += 1;\n self.scrollPixelTop = self.scrollCache.y[self.scrollIndexTop];\n }\n while (\n self.scrollPixelLeft < self.scrollBox.scrollLeft + 1 &&\n self.scrollIndexLeft < s.length\n ) {\n self.scrollPixelLeft = self.scrollCache.x[self.scrollIndexLeft];\n self.scrollIndexLeft += 1;\n }\n if (s.length > 0) {\n self.scrollIndexLeft = Math.max(self.scrollIndexLeft - 1, 0);\n self.scrollPixelLeft -= self.getColummnWidth(\n self.orders.columns[self.scrollIndexLeft],\n );\n }\n if ((self.data || []).length > 0) {\n self.scrollIndexTop = Math.max(self.scrollIndexTop - 1, 0);\n self.scrollPixelTop = Math.max(\n self.scrollPixelTop -\n (self.data[self.scrollIndexTop]\n ? (self.sizes.rows[self.scrollIndexTop] || ch) +\n (self.sizes.trees[self.scrollIndexTop] || 0)\n : ch) *\n self.scale,\n 0,\n );\n }\n self.ellipsisCache = {};\n if (!dontDraw) {\n self.draw(true);\n }\n //TODO: figure out why this has to be delayed for child grids\n //BUG: wheeling event on 3rd level hierarchy fails to move input box\n requestAnimationFrame(self.resizeEditInput);\n self.dispatchEvent('scroll', {\n top: self.scrollBox.scrollTop,\n left: self.scrollBox.scrollLeft,\n });\n };\n self.mousemove = function (e, overridePos) {\n if (self.contextMenu || self.input) {\n return;\n }\n self.mouse = overridePos || self.getLayerPos(e);\n var ctrl =\n (e.ctrlKey || e.metaKey || self.attributes.persistantSelectionMode) &&\n !self.attributes.singleSelectionMode,\n i,\n s = self.getSchema(),\n dragBounds,\n sBounds,\n x = self.mouse.x,\n y = self.mouse.y,\n o = self.getCellAt(x, y),\n delta,\n ev = { NativeEvent: e, cell: o, x: x, y: y },\n previousCell = self.currentCell;\n clearTimeout(self.scrollTimer);\n if (!self.isInGrid({ x: x, y: y })) {\n self.hasFocus = false;\n }\n if (self.dispatchEvent('mousemove', ev)) {\n return;\n }\n if (o && self.currentCell) {\n self.rowBoundaryCrossed = self.currentCell.rowIndex !== o.rowIndex;\n self.columnBoundaryCrossed =\n self.currentCell.columnIndex !== o.columnIndex;\n self.cellBoundaryCrossed =\n self.rowBoundaryCrossed || self.columnBoundaryCrossed;\n ['row', 'column', 'cell'].forEach(function (prefix) {\n if (self[prefix + 'BoundaryCrossed']) {\n ev.cell = previousCell;\n self.dispatchEvent(prefix + 'mouseout', ev);\n ev.cell = o;\n self.dispatchEvent(prefix + 'mouseover', ev);\n }\n });\n }\n self.currentCell = o;\n if (!self.hasFocus) {\n return;\n }\n self.hovers = {};\n if (!self.draggingItem && o && self.scrollModes.indexOf(o.context) === -1) {\n self.dragItem = o;\n self.dragMode = o.dragContext;\n self.cursor = o.context;\n if (o.context === 'cell') {\n self.cursor = 'default';\n self.hovers = { rowIndex: o.rowIndex, columnIndex: o.columnIndex };\n }\n if ((self.selecting || self.reorderObject) && o.context === 'cell') {\n delta = {\n x: Math.abs(self.dragStart.x - x),\n y: Math.abs(self.dragStart.y - y),\n };\n if (self.dragStartObject.columnIndex !== -1 && e.shiftKey) {\n self.dragStartObject = {\n rowIndex: self.activeCell.rowIndex,\n columnIndex: self.activeCell.columnIndex,\n };\n }\n dragBounds = {\n top: Math.min(self.dragStartObject.rowIndex, o.rowIndex),\n left: Math.min(self.dragStartObject.columnIndex, o.columnIndex),\n bottom: Math.max(self.dragStartObject.rowIndex, o.rowIndex),\n right: Math.max(self.dragStartObject.columnIndex, o.columnIndex),\n };\n if (self.dragStartObject.columnIndex === -1) {\n sBounds = self.getSelectionBounds();\n dragBounds.left = -1;\n dragBounds.right = s.length - 1;\n dragBounds.top = Math.min(sBounds.top, o.rowIndex);\n dragBounds.bottom = Math.max(sBounds.bottom, o.rowIndex);\n }\n if (\n self.dragStartObject.rowIndex !== o.rowIndex ||\n self.dragStartObject.columnIndex !== o.columnIndex\n ) {\n self.ignoreNextClick = true;\n }\n if (\n self.cellBoundaryCrossed ||\n (delta.x === 0 && delta.y === 0) ||\n self.attributes.selectionMode === 'row'\n ) {\n if (\n (self.attributes.selectionMode === 'row' ||\n self.dragStartObject.columnIndex === -1) &&\n self.rowBoundaryCrossed\n ) {\n self.selectRow(o.rowIndex, ctrl, null, true);\n } else if (self.attributes.selectionMode !== 'row') {\n if (!self.dragAddToSelection && o.rowIndex !== undefined) {\n if (\n self.selections[o.rowIndex] &&\n self.selections[o.rowIndex].indexOf(o.columnIndex) !== -1\n ) {\n self.selections[o.rowIndex].splice(\n self.selections[o.rowIndex].indexOf(o.columnIndex),\n 1,\n );\n }\n } else {\n self.selections[o.rowIndex] = self.selections[o.rowIndex] || [];\n if (self.selections[o.rowIndex].indexOf(o.columnIndex) === -1) {\n self.selections[o.rowIndex].push(o.columnIndex);\n }\n }\n }\n }\n if (\n (!self.selectionBounds ||\n dragBounds.top !== self.selectionBounds.top ||\n dragBounds.left !== self.selectionBounds.left ||\n dragBounds.bottom !== self.selectionBounds.bottom ||\n dragBounds.right !== self.selectionBounds.right) &&\n !ctrl\n ) {\n self.selections = [];\n sBounds = dragBounds;\n if (self.attributes.selectionMode === 'row') {\n for (i = sBounds.top; i <= sBounds.bottom; i += 1) {\n self.selectRow(i, true, null, true);\n }\n } else if (dragBounds.top !== -1) {\n self.selectArea(sBounds, true);\n }\n }\n self.autoScrollZone(e, x, y, ctrl);\n }\n }\n self.cellBoundaryCrossed = false;\n self.rowBoundaryCrossed = false;\n self.columnBoundaryCrossed = false;\n self.draw(true);\n };\n self.click = function (e, overridePos) {\n var i,\n startingBounds = JSON.stringify(self.getSelectionBounds()),\n ctrl =\n (e.ctrlKey || e.metaKey || self.attributes.persistantSelectionMode) &&\n !self.attributes.singleSelectionMode,\n pos = overridePos || self.getLayerPos(e);\n self.currentCell = self.getCellAt(pos.x, pos.y);\n if (self.currentCell.grid !== undefined) {\n return;\n }\n function checkSelectionChange() {\n var ev,\n sb = self.getSelectionBounds();\n if (startingBounds === JSON.stringify(sb)) {\n return;\n }\n ev = {\n selections: self.selections,\n selectionBounds: self.getSelectionBounds(),\n };\n Object.defineProperty(ev, 'selectedData', {\n get: function () {\n return self.getSelectedData();\n },\n });\n self.dispatchEvent('selectionchanged', ev);\n }\n if (self.input) {\n self.endEdit();\n }\n if (self.ignoreNextClick) {\n self.ignoreNextClick = false;\n return;\n }\n i = self.currentCell;\n if (\n self.dispatchEvent('click', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n if (!self.hasFocus) {\n return;\n }\n if (\n ['rowHeaderCell', 'columnHeaderCell'].indexOf(self.currentCell.style) ===\n -1 &&\n !ctrl\n ) {\n self.setActiveCell(i.columnIndex, i.rowIndex);\n }\n if (self.currentCell.context === 'cell') {\n if (self.currentCell.style === 'cornerCell') {\n self.selectAll();\n self.draw();\n checkSelectionChange();\n return;\n }\n if (self.currentCell.style === 'columnHeaderCell') {\n if (self.attributes.columnHeaderClickBehavior === 'sort') {\n if (self.orderBy === i.header.name) {\n self.orderDirection =\n self.orderDirection === 'asc' ? 'desc' : 'asc';\n } else {\n self.orderDirection = 'asc';\n }\n self.order(i.header.name, self.orderDirection);\n checkSelectionChange();\n return;\n }\n if (self.attributes.columnHeaderClickBehavior === 'select') {\n self.selectColumn(i.header.index, ctrl, e.shiftKey);\n self.draw();\n return;\n }\n }\n self.selections[i.rowIndex] = self.selections[i.rowIndex] || [];\n if (\n self.attributes.selectionMode === 'row' ||\n self.currentCell.style === 'rowHeaderCell'\n ) {\n if (\n self.currentCell.style === 'rowHeaderCell' &&\n self.attributes.tree &&\n pos.x > 0 &&\n pos.x - self.currentCell.x <\n self.style.treeArrowWidth +\n self.style.treeArrowMarginLeft +\n self.style.treeArrowMarginRight +\n self.style.treeArrowClickRadius &&\n pos.y - self.currentCell.y <\n self.style.treeArrowHeight +\n self.style.treeArrowMarginTop +\n self.style.treeArrowClickRadius &&\n pos.y > 0\n ) {\n self.toggleTree(i.rowIndex);\n return;\n }\n }\n if (e.shiftKey && !ctrl) {\n self.selectionBounds = self.getSelectionBounds();\n self.selectArea(undefined, false);\n }\n }\n checkSelectionChange();\n self.draw(true);\n };\n self.dragResizeColumn = function (e) {\n var pos, x, y;\n pos = self.getLayerPos(e);\n x = self.resizingStartingWidth + pos.x - self.dragStart.x;\n y = self.resizingStartingHeight + pos.y - self.dragStart.y;\n if (x < self.style.minColumnWidth) {\n x = self.style.minColumnWidth;\n }\n if (y < self.style.minRowHeight) {\n y = self.style.minRowHeight;\n }\n if (\n self.dispatchEvent('resizecolumn', {\n x: x,\n y: y,\n draggingItem: self.draggingItem,\n })\n ) {\n return false;\n }\n if (\n self.scrollBox.scrollLeft >\n self.scrollBox.scrollWidth - self.attributes.resizeScrollZone &&\n self.dragMode === 'ew-resize'\n ) {\n self.resize(true);\n self.scrollBox.scrollLeft += x;\n }\n if (self.dragMode === 'ew-resize') {\n self.sizes.columns[\n self.draggingItem.header.style === 'rowHeaderCell'\n ? 'cornerCell'\n : self.draggingItem.sortColumnIndex\n ] = x;\n if (\n ['rowHeaderCell', 'cornerCell'].indexOf(\n self.draggingItem.header.style,\n ) !== -1\n ) {\n self.resize(true);\n }\n self.resizeChildGrids();\n return;\n }\n if (self.dragMode === 'ns-resize') {\n if (self.draggingItem.rowOpen) {\n self.sizes.trees[self.draggingItem.rowIndex] = y;\n } else if (self.attributes.globalRowResize) {\n self.style.cellHeight = y;\n } else {\n self.sizes.rows[self.draggingItem.rowIndex] = y;\n }\n self.dispatchEvent('resizerow', { row: y });\n self.resizeChildGrids();\n return;\n }\n self.ellipsisCache = {};\n };\n self.stopDragResize = function () {\n self.resize();\n document.body.removeEventListener(\n 'mousemove',\n self.dragResizeColumn,\n false,\n );\n document.body.removeEventListener('mouseup', self.stopDragResize, false);\n self.setStorageData();\n self.draw(true);\n self.ignoreNextClick = true;\n };\n self.scrollGrid = function (e) {\n var pos = self.getLayerPos(e);\n if (\n self.attributes.scrollPointerLock &&\n self.pointerLockPosition &&\n ['horizontal-scroll-box', 'vertical-scroll-box'].indexOf(\n self.scrollStartMode,\n ) !== -1\n ) {\n self.pointerLockPosition.x += e.movementX;\n self.pointerLockPosition.y += e.movementY;\n self.pointerLockPosition.x = Math.min(\n self.width - self.style.scrollBarWidth,\n Math.max(0, self.pointerLockPosition.x),\n );\n self.pointerLockPosition.y = Math.min(\n self.height - self.style.scrollBarWidth,\n Math.max(0, self.pointerLockPosition.y),\n );\n pos = self.pointerLockPosition;\n }\n self.scrollMode = self.getCellAt(pos.x, pos.y).context;\n if (\n self.scrollMode === 'horizontal-scroll-box' &&\n self.scrollStartMode !== 'horizontal-scroll-box'\n ) {\n self.scrollStartMode = 'horizontal-scroll-box';\n self.dragStart = pos;\n self.scrollStart.left = self.scrollBox.scrollLeft;\n clearTimeout(self.scrollTimer);\n return;\n }\n if (\n self.scrollMode === 'vertical-scroll-box' &&\n self.scrollStartMode !== 'vertical-scroll-box'\n ) {\n self.scrollStartMode = 'vertical-scroll-box';\n self.dragStart = pos;\n self.scrollStart.top = self.scrollBox.scrollTop;\n clearTimeout(self.scrollTimer);\n return;\n }\n if (\n self.scrollStartMode === 'vertical-scroll-box' &&\n self.scrollMode !== 'vertical-scroll-box'\n ) {\n self.scrollMode = 'vertical-scroll-box';\n }\n if (\n self.scrollStartMode === 'horizontal-scroll-box' &&\n self.scrollMode !== 'horizontal-scroll-box'\n ) {\n self.scrollMode = 'horizontal-scroll-box';\n }\n clearTimeout(self.scrollTimer);\n if (self.scrollModes.indexOf(self.scrollMode) === -1) {\n return;\n }\n if (self.scrollMode === 'vertical-scroll-box') {\n self.scrollBox.scrollTop =\n self.scrollStart.top +\n (pos.y - self.dragStart.y) / self.scrollBox.heightBoxRatio;\n } else if (self.scrollMode === 'vertical-scroll-top') {\n self.scrollBox.scrollTop -= self.page * self.style.cellHeight;\n self.scrollTimer = setTimeout(\n self.scrollGrid,\n self.attributes.scrollRepeatRate,\n e,\n );\n } else if (self.scrollMode === 'vertical-scroll-bottom') {\n self.scrollBox.scrollTop += self.page * self.style.cellHeight;\n self.scrollTimer = setTimeout(\n self.scrollGrid,\n self.attributes.scrollRepeatRate,\n e,\n );\n }\n if (self.scrollMode === 'horizontal-scroll-box') {\n self.scrollBox.scrollLeft =\n self.scrollStart.left +\n (pos.x - self.dragStart.x) / self.scrollBox.widthBoxRatio;\n } else if (self.scrollMode === 'horizontal-scroll-right') {\n self.scrollBox.scrollLeft += self.attributes.selectionScrollIncrement;\n self.scrollTimer = setTimeout(\n self.scrollGrid,\n self.attributes.scrollRepeatRate,\n e,\n );\n } else if (self.scrollMode === 'horizontal-scroll-left') {\n self.scrollBox.scrollLeft -= self.attributes.selectionScrollIncrement;\n self.scrollTimer = setTimeout(\n self.scrollGrid,\n self.attributes.scrollRepeatRate,\n e,\n );\n }\n };\n self.stopScrollGrid = function () {\n clearTimeout(self.scrollTimer);\n if (document.exitPointerLock) {\n document.exitPointerLock();\n }\n document.removeEventListener('mousemove', self.scrollGrid, false);\n };\n self.dragReorder = function (e) {\n var pos,\n x,\n y,\n columReorder = self.dragMode === 'column-reorder',\n rowReorder = self.dragMode === 'row-reorder';\n pos = self.getLayerPos(e);\n x = pos.x - self.dragStart.x;\n y = pos.y - self.dragStart.y;\n if (!self.attributes.allowColumnReordering && columReorder) {\n return;\n }\n if (!self.attributes.allowRowReordering && rowReorder) {\n return;\n }\n if (\n self.dispatchEvent('reordering', {\n NativeEvent: e,\n source: self.dragStartObject,\n target: self.currentCell,\n dragMode: self.dragMode,\n })\n ) {\n return;\n }\n if (\n Math.abs(x) > self.attributes.reorderDeadZone ||\n Math.abs(y) > self.attributes.reorderDeadZone\n ) {\n self.reorderObject = self.draggingItem;\n self.reorderTarget = self.currentCell;\n self.reorderObject.dragOffset = {\n x: x,\n y: y,\n };\n self.autoScrollZone(\n e,\n columReorder ? pos.x : -1,\n rowReorder ? pos.y : -1,\n false,\n );\n }\n };\n self.stopDragReorder = function (e) {\n var oIndex,\n tIndex,\n cr = {\n 'row-reorder': self.orders.rows,\n 'column-reorder': self.orders.columns,\n },\n i = {\n 'row-reorder': 'rowIndex',\n 'column-reorder': 'sortColumnIndex',\n }[self.dragMode];\n document.body.removeEventListener('mousemove', self.dragReorder, false);\n document.body.removeEventListener('mouseup', self.stopDragReorder, false);\n if (\n self.reorderObject &&\n self.reorderTarget &&\n ((self.dragMode === 'column-reorder' &&\n self.reorderTarget.sortColumnIndex > -1 &&\n self.reorderTarget.sortColumnIndex < self.getSchema().length) ||\n (self.dragMode === 'row-reorder' &&\n self.reorderTarget.rowIndex > -1 &&\n self.reorderTarget.rowIndex < self.data.length)) &&\n self.reorderObject[i] !== self.reorderTarget[i] &&\n !self.dispatchEvent('reorder', {\n NativeEvent: e,\n source: self.reorderObject,\n target: self.reorderTarget,\n dragMode: self.dragMode,\n })\n ) {\n self.ignoreNextClick = true;\n oIndex = cr[self.dragMode].indexOf(self.reorderObject[i]);\n tIndex = cr[self.dragMode].indexOf(self.reorderTarget[i]);\n cr[self.dragMode].splice(oIndex, 1);\n cr[self.dragMode].splice(tIndex, 0, self.reorderObject[i]);\n if (self.dragMode === 'column-reorder') {\n self.orders.columns = cr[self.dragMode];\n } else {\n self.orders.rows = cr[self.dragMode];\n }\n self.resize();\n self.setStorageData();\n }\n self.reorderObject = undefined;\n self.reorderTarget = undefined;\n self.draw(true);\n };\n self.dragMove = function (e) {\n if (\n self.dispatchEvent('moving', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n var pos = self.getLayerPos(e);\n self.moveOffset = {\n x: self.currentCell.columnIndex - self.dragStartObject.columnIndex,\n y: self.currentCell.rowIndex - self.dragStartObject.rowIndex,\n };\n if (\n Math.abs(pos.x) > self.attributes.reorderDeadZone ||\n Math.abs(pos.y) > self.attributes.reorderDeadZone\n ) {\n setTimeout(function () {\n self.autoScrollZone(e, pos.x, pos.y, false);\n }, 1);\n }\n };\n self.stopDragMove = function (e) {\n document.body.removeEventListener('mousemove', self.dragMove, false);\n document.body.removeEventListener('mouseup', self.stopDragMove, false);\n var b = self.getSelectionBounds();\n if (\n self.dispatchEvent('endmove', { NativeEvent: e, cell: self.currentCell })\n ) {\n self.movingSelection = undefined;\n self.moveOffset = undefined;\n self.draw(true);\n return;\n }\n if (self.moveOffset) {\n self.moveTo(\n self.movingSelection,\n b.left + self.moveOffset.x,\n b.top + self.moveOffset.y,\n );\n self.moveSelection(self.moveOffset.x, self.moveOffset.y);\n }\n self.movingSelection = undefined;\n self.moveOffset = undefined;\n self.draw(true);\n };\n self.freezeMove = function (e) {\n if (\n self.dispatchEvent('freezemoving', {\n NativeEvent: e,\n cell: self.currentCell,\n })\n ) {\n return;\n }\n var pos = self.getLayerPos(e);\n self.ignoreNextClick = true;\n self.freezeMarkerPosition = pos;\n if (\n self.currentCell &&\n self.currentCell.rowIndex !== undefined &&\n self.dragMode === 'frozen-row-marker'\n ) {\n self.scrollBox.scrollTop = 0;\n self.frozenRow = self.currentCell.rowIndex + 1;\n }\n if (\n self.currentCell &&\n self.currentCell.columnIndex !== undefined &&\n self.dragMode === 'frozen-column-marker'\n ) {\n self.scrollBox.scrollLeft = 0;\n self.frozenColumn = self.currentCell.columnIndex + 1;\n }\n if (\n Math.abs(pos.x) > self.attributes.reorderDeadZone ||\n Math.abs(pos.y) > self.attributes.reorderDeadZone\n ) {\n setTimeout(function () {\n self.autoScrollZone(e, pos.x, pos.y, false);\n }, 1);\n }\n };\n self.stopFreezeMove = function (e) {\n document.body.removeEventListener('mousemove', self.freezeMove, false);\n document.body.removeEventListener('mouseup', self.stopFreezeMove, false);\n self.freezeMarkerPosition = undefined;\n if (\n self.dispatchEvent('endfreezemove', {\n NativeEvent: e,\n cell: self.currentCell,\n })\n ) {\n self.frozenRow = self.startFreezeMove.x;\n self.frozenColumn = self.startFreezeMove.y;\n self.draw(true);\n return;\n }\n self.draw(true);\n };\n self.mousedown = function (e, overridePos) {\n self.lastMouseDownTarget = e.target;\n if (\n self.dispatchEvent('mousedown', {\n NativeEvent: e,\n cell: self.currentCell,\n })\n ) {\n return;\n }\n if (!self.hasFocus) {\n return;\n }\n if (e.button === 2 || self.input) {\n return;\n }\n var ctrl = e.ctrlKey || e.metaKey,\n move = /-move/.test(self.dragMode),\n freeze = /frozen-row-marker|frozen-column-marker/.test(self.dragMode),\n resize = /-resize/.test(self.dragMode);\n self.dragStart = overridePos || self.getLayerPos(e);\n self.scrollStart = {\n left: self.scrollBox.scrollLeft,\n top: self.scrollBox.scrollTop,\n };\n self.dragStartObject = self.getCellAt(self.dragStart.x, self.dragStart.y);\n self.dragAddToSelection = !self.dragStartObject.selected;\n if (\n !ctrl &&\n !e.shiftKey &&\n !/(vertical|horizontal)-scroll-(bar|box)/.test(\n self.dragStartObject.context,\n ) &&\n self.currentCell &&\n !self.currentCell.isColumnHeader &&\n !move &&\n !freeze &&\n !resize\n ) {\n self.selections = [];\n }\n if (self.dragStartObject.isGrid) {\n return;\n }\n if (self.scrollModes.indexOf(self.dragStartObject.context) !== -1) {\n self.scrollMode = self.dragStartObject.context;\n self.scrollStartMode = self.dragStartObject.context;\n self.scrollGrid(e);\n if (\n self.attributes.scrollPointerLock &&\n ['horizontal-scroll-box', 'vertical-scroll-box'].indexOf(\n self.scrollStartMode,\n ) !== -1\n ) {\n self.pointerLockPosition = {\n x: self.dragStart.x,\n y: self.dragStart.y,\n };\n self.canvas.requestPointerLock();\n }\n document.addEventListener('mousemove', self.scrollGrid, false);\n document.addEventListener('mouseup', self.stopScrollGrid, false);\n self.ignoreNextClick = true;\n return;\n }\n if (self.dragMode === 'cell') {\n self.selecting = true;\n if (\n (self.attributes.selectionMode === 'row' ||\n self.dragStartObject.columnIndex === -1) &&\n self.dragStartObject.rowIndex > -1\n ) {\n self.selectRow(self.dragStartObject.rowIndex, ctrl, null);\n } else if (self.attributes.selectionMode !== 'row') {\n self.mousemove(e);\n }\n return;\n }\n if (move) {\n self.draggingItem = self.dragItem;\n self.movingSelection = self.selections.concat([]);\n self.dragging = self.dragStartObject;\n if (\n self.dispatchEvent('beginmove', {\n NativeEvent: e,\n cell: self.currentCell,\n })\n ) {\n return;\n }\n document.body.addEventListener('mousemove', self.dragMove, false);\n document.body.addEventListener('mouseup', self.stopDragMove, false);\n return self.mousemove(e);\n }\n if (freeze) {\n self.draggingItem = self.dragItem;\n self.startFreezeMove = {\n x: self.frozenRow,\n y: self.frozenColumn,\n };\n if (self.dispatchEvent('beginfreezemove', { NativeEvent: e })) {\n return;\n }\n document.body.addEventListener('mousemove', self.freezeMove, false);\n document.body.addEventListener('mouseup', self.stopFreezeMove, false);\n return self.mousemove(e);\n }\n if (resize) {\n self.draggingItem = self.dragItem;\n if (self.draggingItem.rowOpen) {\n self.resizingStartingHeight =\n self.sizes.trees[self.draggingItem.rowIndex];\n } else {\n self.resizingStartingHeight =\n self.sizes.rows[self.draggingItem.rowIndex] || self.style.cellHeight;\n }\n self.resizingStartingWidth =\n self.sizes.columns[\n self.draggingItem.header.style === 'rowHeaderCell'\n ? 'cornerCell'\n : self.draggingItem.sortColumnIndex\n ] || self.draggingItem.width;\n document.body.addEventListener('mousemove', self.dragResizeColumn, false);\n document.body.addEventListener('mouseup', self.stopDragResize, false);\n return;\n }\n if (['row-reorder', 'column-reorder'].indexOf(self.dragMode) !== -1) {\n self.draggingItem = self.dragStartObject;\n document.body.addEventListener('mousemove', self.dragReorder, false);\n document.body.addEventListener('mouseup', self.stopDragReorder, false);\n return;\n }\n };\n self.mouseup = function (e) {\n clearTimeout(self.scrollTimer);\n self.cellBoundaryCrossed = true;\n self.rowBoundaryCrossed = true;\n self.columnBoundaryCrossed = true;\n self.selecting = undefined;\n self.draggingItem = undefined;\n self.dragStartObject = undefined;\n if (\n self.dispatchEvent('mouseup', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n if (!self.hasFocus && e.target !== self.canvas) {\n return;\n }\n if (self.currentCell && self.currentCell.grid !== undefined) {\n return;\n }\n if (self.contextMenu || self.input) {\n return;\n }\n if (self.dragStart && self.isInGrid(self.dragStart)) {\n self.controlInput.focus();\n }\n e.preventDefault();\n };\n // gets the horizontal adjacent cells as well as first/last based on column visibility\n self.getAdjacentCells = function () {\n var x,\n i,\n s = self.getSchema(),\n o = {};\n for (x = 0; x < s.length; x += 1) {\n i = self.orders.columns[x];\n if (!s[i].hidden) {\n if (o.first === undefined) {\n o.first = x;\n o.left = x;\n }\n o.last = x;\n if (x > self.activeCell.columnIndex && o.right === undefined) {\n o.right = x;\n }\n if (x < self.activeCell.columnIndex) {\n o.left = x;\n }\n }\n }\n if (o.right === undefined) {\n o.right = o.last;\n }\n return o;\n };\n self.keydown = function (e) {\n var i,\n ev,\n adjacentCells = self.getAdjacentCells(),\n x = self.activeCell.columnIndex,\n y = self.activeCell.rowIndex,\n ctrl = e.ctrlKey || e.metaKey,\n last = self.data.length - 1,\n s = self.getSchema(),\n cols = s.length - 1;\n\n var defaultPrevented = self.dispatchEvent('keydown', {\n NativeEvent: e,\n cell: self.currentCell,\n });\n\n if (defaultPrevented) {\n return;\n }\n\n if (!self.hasFocus) {\n return;\n }\n\n // If a user starts typing content, switch to \"Enter\" mode\n if (isPrintableKeyEvent(e) && !ctrl) {\n return self.beginEditAt(x, y, e, true);\n }\n\n if (self.attributes.showNewRow) {\n last += 1;\n }\n\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n\n if (e.key === 'Escape') {\n self.selectNone();\n } else if (ctrl && e.key === 'a') {\n self.selectAll();\n } else if (e.key === 'ArrowDown') {\n y += 1;\n } else if (e.key === 'ArrowUp') {\n y -= 1;\n } else if (\n (e.key === 'ArrowLeft' && !ctrl) ||\n (e.shiftKey && e.key === 'Tab')\n ) {\n x = adjacentCells.left;\n } else if (\n (e.key === 'ArrowRight' && !ctrl) ||\n (!e.shiftKey && e.key === 'Tab')\n ) {\n x = adjacentCells.right;\n } else if (e.key === 'PageUp') {\n y -= self.page;\n e.preventDefault();\n } else if (e.key === 'PageDown') {\n y += self.page;\n e.preventDefault();\n } else if (e.key === 'Home' || (ctrl && e.key === 'ArrowUp')) {\n y = 0;\n } else if (e.key === 'End' || (ctrl && e.key === 'ArrowDown')) {\n y = self.data.length - 1;\n } else if (ctrl && e.key === 'ArrowRight') {\n x = adjacentCells.last;\n } else if (ctrl && e.key === 'ArrowLeft') {\n x = adjacentCells.first;\n }\n\n if (e.key === 'Enter') {\n e.preventDefault();\n return self.beginEditAt(x, y, e);\n }\n\n if (x < 0 || Number.isNaN(x)) {\n x = adjacentCells.first;\n }\n if (y > last) {\n y = last;\n }\n if (y < 0 || Number.isNaN(y)) {\n y = 0;\n }\n if (x > cols) {\n x = adjacentCells.last;\n }\n\n // TODO - most likely some column order related bugs in key based selection\n // Arrows\n var isArrowKey = [\n 'ArrowLeft',\n 'ArrowUp',\n 'ArrowRight',\n 'ArrowDown',\n ].includes(e.key);\n\n if (e.shiftKey && isArrowKey) {\n self.selections[Math.max(y, 0)] = self.selections[Math.max(y, 0)] || [];\n self.selections[Math.max(y, 0)].push(x);\n\n self.selectionBounds = self.getSelectionBounds();\n self.selectArea(undefined, ctrl);\n\n self.draw(true);\n }\n\n if (x !== self.activeCell.columnIndex || y !== self.activeCell.rowIndex) {\n self.scrollIntoView(\n x !== self.activeCell.columnIndex ? x : undefined,\n y !== self.activeCell.rowIndex && !Number.isNaN(y) ? y : undefined,\n );\n\n self.setActiveCell(x, y);\n if (!e.shiftKey && self.attributes.selectionFollowsActiveCell) {\n if (!ctrl) {\n self.selections = [];\n }\n self.selections[y] = self.selections[y] || [];\n self.selections[y].push(x);\n ev = {\n selectedData: self.getSelectedData(),\n selections: self.selections,\n selectionBounds: self.getSelectionBounds(),\n };\n Object.defineProperty(ev, 'selectedData', {\n get: function () {\n return self.getSelectedData();\n },\n });\n self.dispatchEvent('selectionchanged', ev);\n }\n self.draw(true);\n }\n };\n self.keyup = function (e) {\n if (\n self.dispatchEvent('keyup', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n if (!self.hasFocus) {\n return;\n }\n };\n self.keypress = function (e) {\n if (!self.hasFocus) {\n return;\n }\n if (\n self.dispatchEvent('keypress', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n };\n self.dblclick = function (e) {\n if (\n self.dispatchEvent('dblclick', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n if (!self.hasFocus) {\n return;\n }\n if (\n self.currentCell.context === 'ew-resize' &&\n self.currentCell.style === 'columnHeaderCell'\n ) {\n self.fitColumnToValues(self.currentCell.header.name);\n } else if (\n self.currentCell.context === 'ew-resize' &&\n self.currentCell.style === 'cornerCell'\n ) {\n self.autosize();\n } else if (['cell', 'activeCell'].indexOf(self.currentCell.style) !== -1) {\n self.beginEditAt(self.currentCell.columnIndex, self.currentCell.rowIndex);\n }\n };\n self.scrollWheel = function (e) {\n var l,\n t,\n ev = e,\n deltaX = e.deltaX === undefined ? e.NativeEvent.deltaX : e.deltaX,\n deltaY = e.deltaY === undefined ? e.NativeEvent.deltaY : e.deltaY,\n deltaMode =\n e.deltaMode === undefined ? e.NativeEvent.deltaMode : e.deltaMode;\n var e = e.NativeEvent || e;\n if (wheeling) {\n ev.preventDefault(e);\n return;\n }\n if (self.dispatchEvent('wheel', { NativeEvent: e })) {\n return;\n }\n self.touchHaltAnimation = true;\n l = self.scrollBox.scrollLeft;\n t = self.scrollBox.scrollTop;\n if (self.hasFocus) {\n //BUG Issue 42: https://github.com/TonyGermaneri/canvas-datagrid/issues/42\n //https://stackoverflow.com/questions/20110224/what-is-the-height-of-a-line-in-a-wheel-event-deltamode-dom-delta-line\n if (deltaMode === 1) {\n // line mode = 17 pixels per line\n deltaY = deltaY * 17;\n }\n if (\n (self.scrollBox.scrollTop < self.scrollBox.scrollHeight &&\n deltaY > 0) ||\n (self.scrollBox.scrollLeft < self.scrollBox.scrollWidth &&\n deltaX > 0) ||\n (self.scrollBox.scrollTop > 0 && deltaY < 0) ||\n (self.scrollBox.scrollLeft > 0 && deltaX < 0)\n ) {\n ev.preventDefault(e);\n }\n wheeling = setTimeout(function () {\n wheeling = undefined;\n self.scrollBox.scrollTo(deltaX + l, deltaY + t);\n }, 1);\n }\n };\n\n self.pasteData = function (\n pasteValue,\n mimeType,\n startRowIndex,\n startColIndex,\n ) {\n var schema = self.getVisibleSchema();\n\n const isSupportedHtmlTable = (htmlString) =>\n /(?:^(<meta[^>]+>)?<table>)|(?:<!--StartFragment-->\\s*<table>)/.test(\n htmlString,\n );\n\n // TODO: support pasting tables from Excel\n if (\n mimeType === 'text/html' &&\n isSupportedHtmlTable(pasteValue) === false\n ) {\n console.warn(\n 'Unrecognized HTML format. HTML must be a simple table, e.g.: <table><tr><td>data</td></tr></table>.',\n );\n console.warn(\n 'Data with the mime type text/html not in this format will not be imported as row data.',\n );\n\n return;\n }\n\n function parseData(data, mimeType) {\n // TODO: use DOMParser\n if (mimeType === 'text/html') {\n // strip table beginning and ending off, then split at rows\n var cleanedHtmlData = data\n .substring(\n data.indexOf('<table><tr>') + 11,\n data.indexOf('</tr></table>'),\n )\n .split('</tr><tr>')\n .filter(\n // ditch any headers on the table\n (row) => !/^<th>|^<thead>/.test(row),\n )\n .map(\n // split row into individual cells\n (row) =>\n row\n .match(/<td>[^<]+/g)\n .map((match) => match.replace(/^<td>/, '')),\n );\n\n return cleanedHtmlData;\n }\n\n // Default data format is string, so split on new line,\n // and then enclose in an array (a row with one cell):\n return data.split('\\n').map((value) => [value]);\n }\n\n var rows = parseData(pasteValue, mimeType);\n\n // Special case: if rows.length = 1, we paste this value in each\n // selected cell. This mimics Excel's paste functionality, and works\n // as a poor-man's fill-down.\n if (rows.length === 1) {\n var cellData = rows[0][0];\n\n self.forEachSelectedCell(function (data, rowIndex, colName) {\n data[rowIndex][colName] = cellData;\n });\n } else {\n var selections = [];\n for (var rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n // Rows may have been moved by user, so get the actual row index\n // (instead of the row index at which the row is rendered):\n var realRowIndex = self.orders.rows[startRowIndex + rowIndex];\n var cells = rows[rowIndex];\n\n var existingRowData = self.data[realRowIndex];\n var newRowData = Object.assign({}, existingRowData);\n\n selections[realRowIndex] = [];\n\n for (var colIndex = 0; colIndex < cells.length; colIndex++) {\n var column = schema[startColIndex + colIndex];\n\n if (!column) {\n console.warn('Paste data exceeded grid bounds. Skipping.');\n continue;\n }\n\n var columnName = column.name;\n var cellData = cells[colIndex];\n\n if (cellData === undefined || cellData === null) {\n newRowData[columnName] = existingRowData[columnName];\n continue;\n }\n\n selections[realRowIndex].push(startColIndex + colIndex);\n\n newRowData[columnName] = cellData;\n }\n\n self.data[realRowIndex] = newRowData;\n }\n self.selections = selections;\n }\n\n // selections is a sparse array, so we condense:\n var affectedCells = [];\n\n self.selections.forEach(function (row, rowIndex) {\n if (rowIndex === undefined) return;\n\n row.forEach(function (columnIndex) {\n affectedCells.push([rowIndex, columnIndex]);\n });\n });\n\n self.dispatchEvent('afterpaste', {\n cells: affectedCells,\n });\n\n return rows.length;\n };\n self.getNextVisibleColumnIndex = function (visibleColumnIndex) {\n var x,\n s = self.getVisibleSchema();\n for (x = 0; x < s.length; x += 1) {\n if (s[x].columnIndex === visibleColumnIndex) {\n return s[x + 1].columnIndex;\n }\n }\n return -1;\n };\n self.getVisibleColumnIndexOf = function (columnIndex) {\n var x,\n s = self.getVisibleSchema();\n for (x = 0; x < s.length; x += 1) {\n if (s[x].columnIndex === columnIndex) {\n return x;\n }\n }\n return -1;\n };\n self.paste = function (event) {\n if (!self.attributes.editable) {\n return;\n }\n\n var defaultPrevented = self.dispatchEvent('beforepaste', {\n NativeEvent: event,\n });\n\n if (defaultPrevented) {\n return;\n }\n\n var clipboardItems = new Map(\n Array.from(event.clipboardData.items).map((item) => [item.type, item]),\n );\n\n // Supported MIME types, in order of preference:\n var supportedMimeTypes = ['text/html', 'text/csv', 'text/plain'];\n\n // The clipboard will often contain the same data in multiple formats,\n // which can be used depending on the context in which it's pasted. Here\n // we'll prefere more structured (HTML/CSV) over less structured, when\n // available, so we try to find those first:\n var pasteableItems = supportedMimeTypes\n .map((mimeType) => clipboardItems.get(mimeType))\n .filter((item) => !!item); // filter out not-found MIME types (= undefined)\n\n if (pasteableItems.length === 0) {\n console.warn(\n 'Cannot find supported clipboard data type. Supported types are:',\n supportedMimeTypes.join(', '),\n );\n return;\n }\n\n var itemToPaste = pasteableItems[0];\n\n // itemToPaste is cleared once accessed (getData or getAsString),\n // so we need to store the type here, before reading its value:\n var pasteType = itemToPaste.type;\n\n itemToPaste.getAsString(function (pasteValue) {\n self.pasteData(\n pasteValue,\n pasteType,\n self.activeCell.rowIndex,\n self.getVisibleColumnIndexOf(self.activeCell.columnIndex),\n );\n\n self.draw();\n });\n };\n self.cut = function (e) {\n self.copy(e);\n self.forEachSelectedCell(function (data, index, colName) {\n data[index][colName] = '';\n });\n };\n self.copy = function (e) {\n if (self.dispatchEvent('copy', { NativeEvent: e })) {\n return;\n }\n if (!self.hasFocus || !e.clipboardData) {\n return;\n }\n var t,\n d,\n data = self.data || [],\n tableRows = [],\n textRows = [],\n outputHeaders = {},\n outputHeaderKeys,\n sData = self.getSelectedData(),\n s = self.getSchema();\n function htmlSafe(v) {\n return v.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n }\n function fCopyCell(v) {\n v = v === null || v === undefined ? '' : v;\n return '<td>' + (typeof v === 'string' ? htmlSafe(v) : v) + '</td>';\n }\n function addHeaders(headers, useHtml) {\n if (!s.length || headers.length < 2) {\n return '';\n }\n var h = [];\n if (useHtml) {\n h.push('<tr>');\n }\n s.forEach(function (column, columnIndex) {\n // intentional redefinition of column\n column = s[self.orders.columns[columnIndex]];\n if (!column.hidden && headers.indexOf(column.name) !== -1) {\n var ev = { NativeEvent: e, column: column };\n if (self.dispatchEvent('copyonschema', ev)) {\n column = ev.column;\n }\n\n var hVal = column.name || column.title || '';\n if (useHtml) {\n h.push('<th>' + htmlSafe(hVal) + '</th>');\n } else {\n h.push('\"' + hVal.replace(/\"/g, '\"\"') + '\"');\n }\n }\n });\n h.push(useHtml ? '</tr>' : '\\n');\n return h.join(useHtml ? '' : ',');\n }\n function addCellValue(val, trRow, textRow, column) {\n // escape strings\n if (val !== null && val !== false && val !== undefined && val.replace) {\n trRow.push(fCopyCell(val));\n textRow.push('\"' + val.replace(/\"/g, '\"\"') + '\"');\n return;\n }\n if (val !== undefined) {\n textRow.push(val);\n trRow.push(fCopyCell(val));\n return;\n }\n // issue #66\n textRow.push('');\n trRow.push('<td>&nbsp;</td>');\n }\n if (sData.length > 0) {\n sData.forEach(function (row) {\n var rowKeys = Object.keys(row);\n if (row) {\n var trRow = [],\n textRow = [],\n sSorted = [];\n // HACK: https://github.com/TonyGermaneri/canvas-datagrid/issues/181\n // I can't use sort here or O(1), so hacks\n s.forEach(function (column, columnIndex) {\n sSorted.push(s[self.orders.columns[columnIndex]]);\n });\n sSorted.forEach(function (column, columnIndex) {\n if (rowKeys.indexOf(column.name) !== -1) {\n outputHeaders[column.name] = true;\n // escape strings\n addCellValue(row[column.name], trRow, textRow, column);\n }\n });\n tableRows.push(trRow.join(''));\n textRows.push(textRow.join(','));\n }\n });\n outputHeaderKeys = Object.keys(outputHeaders);\n t = addHeaders(outputHeaderKeys) + textRows.join('\\n');\n d =\n '<table>' +\n addHeaders(outputHeaderKeys, true) +\n '<tr>' +\n tableRows.join('</tr><tr>') +\n '</tr></table>';\n if (outputHeaderKeys.length === 1) {\n // if there was only one cell selected, remove the quotes from the string\n t = t.substring(1, t.length - 1);\n }\n e.clipboardData.setData('text/html', d);\n e.clipboardData.setData('text/plain', t);\n e.clipboardData.setData('text/csv', t);\n e.clipboardData.setData('application/json', JSON.stringify(sData));\n e.preventDefault();\n }\n };\n return;\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals HTMLElement: false, Reflect: false, define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nexport default function (self, ctor) {\n self.scale = 1;\n self.orders = {\n rows: [],\n columns: [],\n };\n self.appliedInlineStyles = {};\n self.cellGridAttributes = {};\n self.treeGridAttributes = {};\n self.visibleRowHeights = [];\n self.hasFocus = false;\n self.activeCell = {\n columnIndex: 0,\n rowIndex: 0,\n };\n self.innerHTML = '';\n self.storageName = 'canvasDataGrid';\n self.invalidSearchExpClass = 'canvas-datagrid-invalid-search-regExp';\n self.localStyleLibraryStorageKey = 'canvas-datagrid-user-style-library';\n self.dataType = 'application/x-canvas-datagrid';\n self.orderBy = null;\n self.orderDirection = 'asc';\n self.orderings = {\n columns: [],\n add: function (orderBy, orderDirection, sortFunction) {\n self.orderings.columns = self.orderings.columns.filter(function (col) {\n return col.orderBy !== orderBy;\n });\n self.orderings.columns.push({\n orderBy: orderBy,\n orderDirection: orderDirection,\n sortFunction: sortFunction,\n });\n },\n sort: function () {\n self.orderings.columns.forEach(function (col) {\n self.data.sort(col.sortFunction(col.orderBy, col.orderDirection));\n });\n },\n };\n self.columnFilters = {};\n self.filters = {};\n self.frozenRow = 0;\n self.frozenColumn = 0;\n self.ellipsisCache = {};\n self.scrollCache = { x: [], y: [] };\n self.scrollBox = {};\n self.visibleRows = [];\n self.visibleCells = [];\n self.sizes = {\n rows: {},\n columns: {},\n trees: {},\n };\n self.currentFilter = function () {\n return true;\n };\n self.selections = [];\n self.hovers = {};\n self.attributes = {};\n self.style = {};\n self.formatters = {};\n self.sorters = {};\n self.parsers = {};\n self.schemaHashes = {};\n self.events = {};\n self.changes = [];\n self.scrollIndexTop = 0;\n self.scrollPixelTop = 0;\n self.scrollIndexLeft = 0;\n self.scrollPixelLeft = 0;\n self.childGrids = {};\n self.openChildren = {};\n self.scrollModes = [\n 'vertical-scroll-box',\n 'vertical-scroll-top',\n 'vertical-scroll-bottom',\n 'horizontal-scroll-box',\n 'horizontal-scroll-right',\n 'horizontal-scroll-left',\n ];\n self.componentL1Events = {};\n self.eventNames = [\n 'afterdraw',\n 'afterrendercell',\n 'attributechanged',\n 'beforebeginedit',\n 'beforecreatecellgrid',\n 'beforedraw',\n 'beforeendedit',\n 'beforerendercell',\n 'beforerendercellgrid',\n 'beginedit',\n 'cellmouseout',\n 'cellmouseover',\n 'click',\n 'collapsetree',\n 'contextmenu',\n 'copy',\n 'datachanged',\n 'dblclick',\n 'endedit',\n 'expandtree',\n 'formatcellvalue',\n 'keydown',\n 'keypress',\n 'keyup',\n 'mousedown',\n 'mousemove',\n 'mouseup',\n 'newrow',\n 'ordercolumn',\n 'rendercell',\n 'rendercellgrid',\n 'renderorderbyarrow',\n 'rendertext',\n 'rendertreearrow',\n 'reorder',\n 'reordering',\n 'resize',\n 'resizecolumn',\n 'resizerow',\n 'schemachanged',\n 'scroll',\n 'selectionchanged',\n 'stylechanged',\n 'touchcancel',\n 'touchend',\n 'touchmove',\n 'touchstart',\n 'wheel',\n ];\n self.mouse = { x: 0, y: 0 };\n self.getSelectedData = function (expandToRow) {\n var d = [],\n s = self.getSchema(),\n l = self.data.length;\n if (l === 0) {\n return [];\n }\n self.selections.forEach(function (row, index) {\n if (!row) {\n return;\n }\n if (index === l) {\n return;\n }\n if (row.length === 0) {\n d[index] = null;\n return;\n }\n d[index] = {};\n row.forEach(function (col) {\n var orderedIndex;\n if (col === -1 || !s[col]) {\n return;\n }\n orderedIndex = self.orders.columns[col];\n if (!expandToRow && s[orderedIndex].hidden) {\n return;\n }\n if (self.data[index]) {\n d[index][s[orderedIndex].name] =\n self.data[index][s[orderedIndex].name];\n }\n });\n });\n return d;\n };\n self.getColumnHeaderCellHeight = function () {\n if (!self.attributes.showColumnHeaders) {\n return 0;\n }\n return (\n (self.sizes.rows[-1] || self.style.columnHeaderCellHeight) * self.scale\n );\n };\n self.getRowHeaderCellWidth = function () {\n if (!self.attributes.showRowHeaders) {\n return 0;\n }\n return (\n (self.sizes.columns[-1] || self.style.rowHeaderCellWidth) * self.scale\n );\n };\n self.setStorageData = function () {\n if (!self.attributes.saveAppearance || !self.attributes.name) {\n return;\n }\n var visibility = {};\n self.getSchema().forEach(function (column) {\n visibility[column.name] = !column.hidden;\n });\n localStorage.setItem(\n self.storageName + '-' + self.attributes.name,\n JSON.stringify({\n sizes: {\n rows: self.sizes.rows,\n columns: self.sizes.columns,\n },\n orders: {\n rows: self.orders.rows,\n columns: self.orders.columns,\n },\n orderBy: self.orderBy,\n orderDirection: self.orderDirection,\n visibility: visibility,\n }),\n );\n };\n self.getSchema = function () {\n return self.schema || self.tempSchema || [];\n };\n function fillArray(low, high) {\n var i = [],\n x;\n for (x = low; x <= high; x += 1) {\n i[x] = x;\n }\n return i;\n }\n self.createColumnOrders = function () {\n var s = self.getSchema();\n self.orders.columns = fillArray(0, s.length - 1);\n };\n self.createRowOrders = function () {\n self.orders.rows = fillArray(0, self.data.length - 1);\n };\n self.getVisibleSchema = function () {\n return self.getSchema().filter(function (col) {\n return !col.hidden;\n });\n };\n self.applyDefaultValue = function (row, header) {\n var d = header.defaultValue || '';\n if (typeof d === 'function') {\n d = d.apply(self.intf, [header]);\n }\n row[header.name] = d;\n };\n self.createNewRowData = function () {\n self.newRow = {};\n self.getSchema().forEach(function forEachHeader(header) {\n self.applyDefaultValue(self.newRow, header);\n });\n };\n self.getSchemaNameHash = function (key) {\n var n = 0;\n while (self.schemaHashes[key]) {\n n += 1;\n key = key + n;\n }\n return key;\n };\n self.filter = function (type) {\n var f = self.filters[type];\n if (!f && type !== undefined) {\n console.warn(\n 'Cannot find filter for type %s, falling back to substring match.',\n type,\n );\n f = self.filters.string;\n }\n return f;\n };\n self.applyFilter = function () {\n self.refreshFromOrigialData();\n Object.keys(self.columnFilters).forEach(function (filter) {\n var header = self.getHeaderByName(filter);\n if (!header) {\n return;\n }\n self.currentFilter =\n header.filter || self.filter(header.type || 'string');\n self.data = self.data.filter(function (row) {\n return self.currentFilter(row[filter], self.columnFilters[filter]);\n });\n });\n self.resize();\n self.draw(true);\n };\n self.applyDataTransforms = function () {\n self.applyFilter();\n self.orderings.sort();\n };\n self.getBestGuessDataType = function (columnName, data) {\n var t,\n x,\n l = data.length;\n for (x = 0; x < l; x += 1) {\n if (\n data[x] !== undefined &&\n data[x] !== null &&\n [null, undefined].indexOf(data[x][columnName]) !== -1\n ) {\n t = typeof data[x];\n return t === 'object' ? 'string' : t;\n }\n }\n return 'string';\n };\n self.drawChildGrids = function () {\n Object.keys(self.childGrids).forEach(function (gridKey) {\n self.childGrids[gridKey].draw();\n });\n };\n self.resizeChildGrids = function () {\n Object.keys(self.childGrids).forEach(function (gridKey) {\n self.childGrids[gridKey].resize();\n });\n };\n self.autoScrollZone = function (e, x, y, ctrl) {\n var setTimer,\n rowHeaderCellWidth = self.getRowHeaderCellWidth(),\n columnHeaderCellHeight = self.getColumnHeaderCellHeight();\n if (y !== -1) {\n if (\n x > self.width - self.attributes.selectionScrollZone &&\n x < self.width\n ) {\n self.scrollBox.scrollLeft += self.attributes.selectionScrollIncrement;\n setTimer = true;\n }\n if (x - self.attributes.selectionScrollZone - rowHeaderCellWidth < 0) {\n self.scrollBox.scrollLeft -= self.attributes.selectionScrollIncrement;\n setTimer = true;\n }\n }\n if (y !== -1) {\n if (\n y > self.height - self.attributes.selectionScrollZone &&\n y < self.height\n ) {\n self.scrollBox.scrollTop += self.attributes.selectionScrollIncrement;\n setTimer = true;\n }\n if (\n y - self.attributes.selectionScrollZone - columnHeaderCellHeight <\n 0\n ) {\n self.scrollBox.scrollTop -= self.attributes.selectionScrollIncrement;\n setTimer = true;\n }\n }\n if (\n setTimer &&\n !ctrl &&\n self.currentCell &&\n self.currentCell.columnIndex !== -1\n ) {\n self.scrollTimer = setTimeout(\n self.mousemove,\n self.attributes.scrollRepeatRate,\n e,\n );\n }\n };\n self.refreshFromOrigialData = function () {\n self.data = self.originalData.filter(function (row) {\n return true;\n });\n };\n self.validateColumn = function (c, s) {\n if (!c.name) {\n throw new Error('A column must contain at least a name.');\n }\n if (\n s.filter(function (i) {\n return i.name === c.name;\n }).length > 0\n ) {\n throw new Error(\n 'A column with the name ' +\n c.name +\n ' already exists and cannot be added again.',\n );\n }\n return true;\n };\n self.setDefaults = function (obj1, obj2, key, def) {\n obj1[key] = obj2[key] === undefined ? def : obj2[key];\n };\n self.setAttributes = function () {\n self.defaults.attributes.forEach(function eachAttribute(i) {\n self.setDefaults(self.attributes, self.args, i[0], i[1]);\n });\n };\n self.setStyle = function () {\n self.defaults.styles.forEach(function eachStyle(i) {\n self.setDefaults(self.style, self.args.style || {}, i[0], i[1]);\n });\n };\n self.autosize = function (colName) {\n self.getVisibleSchema().forEach(function (col, colIndex) {\n if (col.name === colName || colName === undefined) {\n self.sizes.columns[colIndex] = Math.max(\n self.findColumnMaxTextLength(col.name),\n self.style.minColumnWidth,\n );\n }\n });\n self.sizes.columns[-1] = self.findColumnMaxTextLength('cornerCell');\n };\n self.dispose = function () {\n if (!self.isChildGrid && self.canvas && self.canvas.parentNode) {\n self.canvas.parentNode.removeChild(self.canvas);\n }\n if (!self.isChildGrid) {\n document.body.removeChild(self.controlInput);\n }\n self.eventParent.removeEventListener('mouseup', self.mouseup, false);\n self.eventParent.removeEventListener('mousedown', self.mousedown, false);\n self.eventParent.removeEventListener('dblclick', self.dblclick, false);\n self.eventParent.removeEventListener('click', self.click, false);\n self.eventParent.removeEventListener('mousemove', self.mousemove);\n self.eventParent.removeEventListener('wheel', self.scrollWheel, false);\n self.canvas.removeEventListener('contextmenu', self.contextmenu, false);\n self.canvas.removeEventListener('copy', self.copy);\n self.controlInput.removeEventListener('copy', self.copy);\n self.controlInput.removeEventListener('cut', self.cut);\n self.controlInput.removeEventListener('paste', self.paste);\n self.controlInput.removeEventListener('keypress', self.keypress, false);\n self.controlInput.removeEventListener('keyup', self.keyup, false);\n self.controlInput.removeEventListener('keydown', self.keydown, false);\n window.removeEventListener('resize', self.resize);\n if (self.observer && self.observer.disconnect) {\n self.observer.disconnect();\n }\n };\n self.tryLoadStoredSettings = function () {\n var s;\n self.reloadStoredValues();\n if (\n self.storedSettings &&\n typeof self.storedSettings.orders === 'object' &&\n self.storedSettings.orders !== null\n ) {\n if (self.storedSettings.orders.rows.length >= (self.data || []).length) {\n self.orders.rows = self.storedSettings.orders.rows;\n }\n s = self.getSchema();\n if (self.storedSettings.orders.columns.length === s.length) {\n self.orders.columns = self.storedSettings.orders.columns;\n }\n self.orderBy =\n self.storedSettings.orderBy === undefined\n ? s[0].name\n : self.storedSettings.orderBy;\n self.orderDirection =\n self.storedSettings.orderDirection === undefined\n ? 'asc'\n : self.storedSettings.orderDirection;\n if (\n self.storedSettings.orderBy !== undefined &&\n self.getHeaderByName(self.orderBy) &&\n self.orderDirection\n ) {\n self.order(self.orderBy, self.orderDirection);\n }\n }\n };\n self.getDomRoot = function () {\n return self.shadowRoot ? self.shadowRoot.host : self.parentNode;\n };\n self.getFontName = function (fontStyle) {\n return fontStyle.replace(/\\d+\\.?\\d*px/, '');\n };\n self.getFontHeight = function (fontStyle) {\n return parseFloat(fontStyle, 10);\n };\n self.parseStyleValue = function (key) {\n if (/Font/.test(key)) {\n self.style[key + 'Height'] = self.getFontHeight(self.style[key]);\n self.style[key + 'Name'] = self.getFontName(self.style[key]);\n return;\n }\n // when inheriting styles from already instantiated grids, don't parse already parsed values.\n if (\n key === 'moveOverlayBorderSegments' &&\n typeof self.style[key] === 'string'\n ) {\n self.style[key] = self.style[key].split(',').map(function (i) {\n return parseInt(i, 10);\n });\n }\n };\n self.initProp = function (propName) {\n if (!self.args[propName]) {\n return;\n }\n Object.keys(self.args[propName]).forEach(function (key) {\n self[propName][key] = self.args[propName][key];\n });\n };\n self.getStyleProperty = function (key) {\n if (self.styleKeys.indexOf(key) === -1) {\n return self.parentNodeStyle[key];\n }\n return self.style[key];\n };\n self.setStyleProperty = function (key, value, supressDrawAndEvent) {\n var isDim =\n [\n 'height',\n 'width',\n 'minHeight',\n 'minWidth',\n 'maxHeight',\n 'maxWidth',\n ].indexOf(key) !== -1;\n if (self.styleKeys.indexOf(key) === -1) {\n self.parentNodeStyle[key] = value;\n } else {\n if (/-/.test(key)) {\n key = self.dehyphenateProperty(key);\n }\n self.style[key] = value;\n self.parseStyleValue(key);\n }\n if (isDim) {\n self.resize();\n }\n if (!supressDrawAndEvent) {\n self.draw(true);\n self.dispatchEvent('stylechanged', { name: 'style', value: value });\n }\n };\n self.reloadStoredValues = function () {\n if (self.attributes.name && self.attributes.saveAppearance) {\n try {\n self.storedSettings = localStorage.getItem(\n self.storageName + '-' + self.attributes.name,\n );\n } catch (e) {\n console.warn('Error loading stored values. ' + e.message);\n self.storedSettings = undefined;\n }\n if (self.storedSettings) {\n try {\n self.storedSettings = JSON.parse(self.storedSettings);\n } catch (e) {\n console.warn('could not read settings from localStore', e);\n self.storedSettings = undefined;\n }\n }\n if (self.storedSettings) {\n if (\n typeof self.storedSettings.sizes === 'object' &&\n self.storedSettings.sizes !== null\n ) {\n self.sizes.rows = self.storedSettings.sizes.rows;\n self.sizes.columns = self.storedSettings.sizes.columns;\n ['trees', 'columns', 'rows'].forEach(function (i) {\n if (!self.sizes[i]) {\n self.sizes[i] = {};\n }\n });\n }\n if (typeof self.storedSettings.visibility === 'object') {\n self.getSchema().forEach(function (column) {\n if (\n self.storedSettings.visibility &&\n self.storedSettings.visibility[column.name] !== undefined\n ) {\n column.hidden = !self.storedSettings.visibility[column.name];\n }\n });\n }\n }\n }\n };\n self.init = function () {\n if (self.initialized) {\n return;\n }\n function addStyleKeyIfNoneExists(key) {\n if (self.styleKeys.indexOf(key) === -1) {\n self.styleKeys.push(key);\n }\n }\n var publicStyleKeyIntf = {};\n self.setAttributes();\n self.setStyle();\n self.initScrollBox();\n self.setDom();\n self.nodeType = 'canvas-datagrid';\n self.ie = /Trident/.test(window.navigator.userAgent);\n self.edge = /Edge/.test(window.navigator.userAgent);\n self.webKit = /WebKit/.test(window.navigator.userAgent);\n self.moz = /Gecko/.test(window.navigator.userAgent);\n self.mobile = /Mobile/i.test(window.navigator.userAgent);\n self.blankValues = [undefined, null, ''];\n self.cursorGrab = 'grab';\n self.cursorGrabing = 'grabbing';\n self.cursorGrab = self.webKit ? '-webkit-grab' : self.cursorGrab;\n self.cursorGrabing = self.moz ? '-webkit-grabbing' : self.cursorGrabbing;\n self.pointerLockPosition = { x: 0, y: 0 };\n Object.keys(self.style).forEach(self.parseStyleValue);\n self.intf.moveSelection = self.moveSelection;\n self.intf.moveTo = self.moveTo;\n self.intf.addEventListener = self.addEventListener;\n self.intf.removeEventListener = self.removeEventListener;\n self.intf.dispatchEvent = self.dispatchEvent;\n /**\n * Releases grid resources and removes grid elements.\n * @memberof canvasDatagrid\n * @name dispose\n * @method\n */\n self.intf.dispose = self.dispose;\n /**\n * Appends the grid to another element later. Not implemented.\n * @memberof canvasDatagrid\n * @name appendTo\n * @method\n * @param {number} el The element to append the grid to.\n */\n self.intf.appendTo = self.appendTo;\n self.intf.getVisibleCellByIndex = self.getVisibleCellByIndex;\n self.intf.filters = self.filters;\n self.intf.sorters = self.sorters;\n self.intf.autosize = self.autosize;\n self.intf.beginEditAt = self.beginEditAt;\n self.intf.endEdit = self.endEdit;\n self.intf.setActiveCell = self.setActiveCell;\n self.intf.forEachSelectedCell = self.forEachSelectedCell;\n self.intf.scrollIntoView = self.scrollIntoView;\n self.intf.clearChangeLog = self.clearChangeLog;\n self.intf.gotoCell = self.gotoCell;\n self.intf.gotoRow = self.gotoRow;\n self.intf.getHeaderByName = self.getHeaderByName;\n self.intf.findColumnScrollLeft = self.findColumnScrollLeft;\n self.intf.findRowScrollTop = self.findRowScrollTop;\n self.intf.fitColumnToValues = self.fitColumnToValues;\n self.intf.findColumnMaxTextLength = self.findColumnMaxTextLength;\n self.intf.disposeContextMenu = self.disposeContextMenu;\n self.intf.getCellAt = self.getCellAt;\n self.intf.isCellVisible = self.isCellVisible;\n self.intf.isRowVisible = self.isRowVisible;\n self.intf.isColumnVisible = self.isColumnVisible;\n self.intf.order = self.order;\n self.intf.draw = self.draw;\n self.intf.isComponent = self.isComponent;\n self.intf.selectArea = self.selectArea;\n self.intf.clipElement = self.clipElement;\n self.intf.getSchemaFromData = self.getSchemaFromData;\n self.intf.setFilter = self.setFilter;\n self.intf.selectRow = self.selectRow;\n self.intf.parentGrid = self.parentGrid;\n self.intf.toggleTree = self.toggleTree;\n self.intf.expandTree = self.expandTree;\n self.intf.collapseTree = self.collapseTree;\n self.intf.canvas = self.canvas;\n self.intf.context = self.ctx;\n self.intf.insertRow = self.insertRow;\n self.intf.deleteRow = self.deleteRow;\n self.intf.addRow = self.addRow;\n self.intf.insertColumn = self.insertColumn;\n self.intf.deleteColumn = self.deleteColumn;\n self.intf.addColumn = self.addColumn;\n self.intf.getClippingRect = self.getClippingRect;\n self.intf.setRowHeight = self.setRowHeight;\n self.intf.setColumnWidth = self.setColumnWidth;\n self.intf.resetColumnWidths = self.resetColumnWidths;\n self.intf.resetRowHeights = self.resetRowHeights;\n self.intf.resize = self.resize;\n self.intf.selectColumn = self.selectColumn;\n self.intf.selectRow = self.selectRow;\n self.intf.selectAll = self.selectAll;\n self.intf.selectNone = self.selectNone;\n self.intf.drawChildGrids = self.drawChildGrids;\n self.intf.assertPxColor = self.assertPxColor;\n self.intf.clearPxColorAssertions = self.clearPxColorAssertions;\n self.intf.integerToAlpha = self.integerToAlpha;\n self.intf.copy = self.copy;\n self.intf.paste = self.paste;\n self.intf.setStyleProperty = self.setStyleProperty;\n Object.defineProperty(self.intf, 'defaults', {\n get: function () {\n return {\n styles: self.defaults.styles.reduce(function (a, i) {\n a[i[0]] = i[1];\n return a;\n }, {}),\n attributes: self.defaults.attributes.reduce(function (a, i) {\n a[i[0]] = i[1];\n return a;\n }, {}),\n };\n },\n });\n self.styleKeys = Object.keys(self.intf.defaults.styles);\n self.styleKeys\n .map(function (i) {\n return self.hyphenateProperty(i, false);\n })\n .forEach(addStyleKeyIfNoneExists);\n self.styleKeys\n .map(function (i) {\n return self.hyphenateProperty(i, true);\n })\n .forEach(addStyleKeyIfNoneExists);\n self.DOMStyles = window.getComputedStyle(document.body, null);\n self.styleKeys.concat(Object.keys(self.DOMStyles)).forEach(function (key) {\n // unless this line is here, Object.keys() will not work on <instance>.style\n publicStyleKeyIntf[key] = undefined;\n Object.defineProperty(publicStyleKeyIntf, key, {\n get: function () {\n return self.getStyleProperty(key);\n },\n set: function (value) {\n if (self.initialized) {\n self.appliedInlineStyles[key] = value;\n }\n self.setStyleProperty(key, value);\n },\n });\n });\n Object.defineProperty(self.intf, 'shadowRoot', {\n get: function () {\n return self.shadowRoot;\n },\n });\n Object.defineProperty(self.intf, 'activeCell', {\n get: function () {\n return self.activeCell;\n },\n });\n Object.defineProperty(self.intf, 'hasFocus', {\n get: function () {\n return self.hasFocus;\n },\n });\n Object.defineProperty(self.intf, 'style', {\n get: function () {\n return publicStyleKeyIntf;\n },\n set: function (valueObject) {\n Object.keys(valueObject).forEach(function (key) {\n self.setStyleProperty(key, valueObject[key], true);\n });\n self.draw(true);\n self.dispatchEvent('stylechanged', {\n name: 'style',\n value: valueObject,\n });\n },\n });\n Object.defineProperty(self.intf, 'attributes', { value: {} });\n Object.keys(self.attributes).forEach(function (key) {\n Object.defineProperty(self.intf.attributes, key, {\n get: function () {\n return self.attributes[key];\n },\n set: function (value) {\n self.attributes[key] = value;\n if (key === 'name') {\n self.tryLoadStoredSettings();\n }\n self.draw(true);\n self.dispatchEvent('attributechanged', {\n name: key,\n value: value[key],\n });\n },\n });\n });\n self.filters.string = function (value, filterFor) {\n if (filterFor === self.attributes.blanksText) {\n return self.blankValues.includes(\n value == null ? value : String(value).trim(),\n );\n }\n\n value = String(value);\n var filterRegExp,\n regEnd = /\\/(i|g|m)*$/,\n pattern = regEnd.exec(filterFor),\n flags = pattern ? pattern[0].substring(1) : '',\n flagLength = flags.length;\n self.invalidFilterRegEx = undefined;\n if (filterFor.substring(0, 1) === '/' && pattern) {\n try {\n filterRegExp = new RegExp(\n filterFor.substring(1, filterFor.length - (flagLength + 1)),\n flags,\n );\n } catch (e) {\n self.invalidFilterRegEx = e;\n return;\n }\n return filterRegExp.test(value);\n }\n return value.toString\n ? value\n .toString()\n .toLocaleUpperCase()\n .indexOf(filterFor.toLocaleUpperCase()) !== -1\n : false;\n };\n self.filters.number = function (value, filterFor) {\n if (filterFor === self.attributes.blanksText) {\n return self.blankValues.includes(\n value == null ? value : String(value).trim(),\n );\n }\n\n if (!filterFor) {\n return true;\n }\n return value === filterFor;\n };\n ['formatters', 'filters', 'sorters'].forEach(self.initProp);\n self.applyComponentStyle(false, self.intf);\n self.reloadStoredValues();\n if (self.args.data) {\n self.intf.data = self.args.data;\n }\n if (self.intf.innerText || self.intf.textContent) {\n if (self.intf.dataType === 'application/x-canvas-datagrid') {\n self.intf.dataType = 'application/json+x-canvas-datagrid';\n }\n self.intf.data = self.intf.innerText || self.intf.textContent;\n }\n if (self.args.schema) {\n self.intf.schema = self.args.schema;\n }\n if (self.isChildGrid || !self.isComponent) {\n requestAnimationFrame(function () {\n self.resize(true);\n });\n } else {\n self.resize(true);\n }\n self.initialized = true;\n return self;\n };\n /**\n * Removes focus from the grid.\n * @memberof canvasDatagrid\n * @name blur\n * @method\n */\n self.intf.blur = function (e) {\n self.hasFocus = false;\n };\n /**\n * Focuses on the grid.\n * @memberof canvasDatagrid\n * @name focus\n * @method\n */\n self.intf.focus = function () {\n self.hasFocus = true;\n self.controlInput.focus();\n };\n if (self.shadowRoot || self.isChildGrid) {\n Object.defineProperty(self.intf, 'height', {\n get: function () {\n if (self.shadowRoot) {\n return self.shadowRoot.height;\n }\n return self.parentNode.height;\n },\n set: function (value) {\n if (self.shadowRoot) {\n self.shadowRoot.height = value;\n } else {\n self.parentNode.height = value;\n }\n self.resize(true);\n },\n });\n Object.defineProperty(self.intf, 'width', {\n get: function () {\n if (self.shadowRoot) {\n return self.shadowRoot.width;\n }\n return self.parentNode.width;\n },\n set: function (value) {\n if (self.shadowRoot) {\n self.shadowRoot.width = value;\n } else {\n self.parentNode.width = value;\n }\n self.resize(true);\n },\n });\n Object.defineProperty(self.intf, 'parentNode', {\n get: function () {\n return self.parentNode;\n },\n set: function (value) {\n if (!self.isChildGrid) {\n throw new TypeError(\n 'Cannot set property parentNode which has only a getter',\n );\n }\n self.parentNode = value;\n },\n });\n }\n Object.defineProperty(self.intf, 'visibleRowHeights', {\n get: function () {\n return self.visibleRowHeights;\n },\n });\n Object.defineProperty(self.intf, 'openChildren', {\n get: function () {\n return self.openChildren;\n },\n });\n Object.defineProperty(self.intf, 'childGrids', {\n get: function () {\n return Object.keys(self.childGrids).map(function (gridId) {\n return self.childGrids[gridId];\n });\n },\n });\n Object.defineProperty(self.intf, 'isChildGrid', {\n get: function () {\n return self.isChildGrid;\n },\n });\n Object.defineProperty(self, 'cursor', {\n get: function () {\n return self.parentNodeStyle.cursor;\n },\n set: function (value) {\n if (value === 'cell') {\n value = 'default';\n }\n if (self.currentCursor !== value) {\n self.parentNodeStyle.cursor = value;\n self.currentCursor = value;\n }\n },\n });\n Object.defineProperty(self.intf, 'orderDirection', {\n get: function () {\n return self.orderDirection;\n },\n set: function (value) {\n if (value !== 'desc') {\n value = 'asc';\n }\n self.orderDirection = value;\n self.order(self.orderBy, self.orderDirection);\n },\n });\n Object.defineProperty(self.intf, 'orderBy', {\n get: function () {\n return self.orderBy;\n },\n set: function (value) {\n if (\n self.getSchema().find(function (col) {\n return col.name === value;\n }) === undefined\n ) {\n throw new Error('Cannot sort by unknown column name.');\n }\n self.orderBy = value;\n self.order(self.orderBy, self.orderDirection);\n },\n });\n if (self.isComponent) {\n Object.defineProperty(self.intf, 'offsetHeight', {\n get: function () {\n return self.canvas.offsetHeight;\n },\n });\n Object.defineProperty(self.intf, 'offsetWidth', {\n get: function () {\n return self.canvas.offsetWidth;\n },\n });\n }\n Object.defineProperty(self.intf, 'scrollHeight', {\n get: function () {\n return self.scrollBox.scrollHeight;\n },\n });\n Object.defineProperty(self.intf, 'scrollWidth', {\n get: function () {\n return self.scrollBox.scrollWidth;\n },\n });\n Object.defineProperty(self.intf, 'scrollTop', {\n get: function () {\n return self.scrollBox.scrollTop;\n },\n set: function (value) {\n self.scrollBox.scrollTop = value;\n },\n });\n Object.defineProperty(self.intf, 'scrollLeft', {\n get: function () {\n return self.scrollBox.scrollLeft;\n },\n set: function (value) {\n self.scrollBox.scrollLeft = value;\n },\n });\n Object.defineProperty(self.intf, 'sizes', {\n get: function () {\n return self.sizes;\n },\n });\n Object.defineProperty(self.intf, 'parentDOMNode', {\n get: function () {\n return self.parentDOMNode;\n },\n });\n Object.defineProperty(self.intf, 'input', {\n get: function () {\n return self.input;\n },\n });\n Object.defineProperty(self.intf, 'controlInput', {\n get: function () {\n return self.controlInput;\n },\n });\n Object.defineProperty(self.intf, 'currentCell', {\n get: function () {\n return self.currentCell;\n },\n });\n Object.defineProperty(self.intf, 'visibleCells', {\n get: function () {\n return self.visibleCells;\n },\n });\n Object.defineProperty(self.intf, 'visibleRows', {\n get: function () {\n return self.visibleRows;\n },\n });\n Object.defineProperty(self.intf, 'selections', {\n get: function () {\n return self.selections;\n },\n });\n Object.defineProperty(self.intf, 'dragMode', {\n get: function () {\n return self.dragMode;\n },\n });\n Object.defineProperty(self.intf, 'changes', {\n get: function () {\n return self.changes;\n },\n });\n self.intf.formatters = self.formatters;\n Object.defineProperty(self.intf, 'dataType', {\n get: function () {\n return self.dataType;\n },\n set: function (value) {\n if (!self.parsers[value]) {\n throw new Error('No parser for MIME type ' + value);\n }\n self.dataType = value;\n },\n });\n self.eventNames.forEach(function (eventName) {\n Object.defineProperty(self.intf, 'on' + eventName, {\n get: function () {\n return self.componentL1Events[eventName];\n },\n set: function (value) {\n self.events[eventName] = [];\n self.componentL1Events[eventName] = value;\n if (!value) {\n return;\n }\n self.addEventListener(eventName, value);\n },\n });\n });\n Object.defineProperty(self.intf, 'frozenRow', {\n get: function () {\n return self.frozenRow;\n },\n set: function (val) {\n if (isNaN(val)) {\n throw new TypeError('Expected value for frozenRow to be a number.');\n }\n if (self.visibleRows.length < val) {\n throw new RangeError(\n 'Cannot set a value larger than the number of visible rows.',\n );\n }\n self.frozenRow = val;\n },\n });\n Object.defineProperty(self.intf, 'frozenColumn', {\n get: function () {\n return self.frozenColumn;\n },\n set: function (val) {\n if (isNaN(val)) {\n throw new TypeError('Expected value for frozenRow to be a number.');\n }\n if (self.getVisibleSchema().length < val) {\n throw new RangeError(\n 'Cannot set a value larger than the number of visible columns.',\n );\n }\n self.frozenColumn = val;\n },\n });\n Object.defineProperty(self.intf, 'scrollIndexRect', {\n get: function () {\n return {\n top: self.scrollIndexTop,\n right: self.scrollIndexRight,\n bottom: self.scrollIndexBottom,\n left: self.scrollIndexLeft,\n };\n },\n });\n Object.defineProperty(self.intf, 'scrollPixelRect', {\n get: function () {\n return {\n top: self.scrollPixelTop,\n right: self.scrollPixelRight,\n bottom: self.scrollPixelBottom,\n left: self.scrollPixelLeft,\n };\n },\n });\n Object.defineProperty(self.intf, 'rowOrder', {\n get: function () {\n return self.orders.rows;\n },\n set: function (val) {\n if (!Array.isArray(val)) {\n throw new TypeError('Value must be an array.');\n }\n if (!self.data || val.length < self.data.length) {\n throw new RangeError(\n 'Array length must be equal to or greater than number of rows.',\n );\n }\n self.orders.rows = val;\n },\n });\n Object.defineProperty(self.intf, 'columnOrder', {\n get: function () {\n return self.orders.columns;\n },\n set: function (val) {\n if (!Array.isArray(val)) {\n throw new TypeError('Value must be an array.');\n }\n if (val.length < self.getSchema().length) {\n throw new RangeError(\n 'Array length must be equal to or greater than number of columns.',\n );\n }\n self.orders.columns = val;\n },\n });\n Object.defineProperty(self.intf, 'selectionBounds', {\n get: function () {\n return self.getSelectionBounds();\n },\n });\n Object.defineProperty(self.intf, 'selectedRows', {\n get: function () {\n return self.getSelectedData(true);\n },\n });\n Object.defineProperty(self.intf, 'selectedCells', {\n get: function () {\n return self.getSelectedData();\n },\n });\n Object.defineProperty(self.intf, 'visibleSchema', {\n get: function () {\n return self.getVisibleSchema().map(function eachDataRow(col) {\n return col;\n });\n },\n });\n Object.defineProperty(self.intf, 'treeGridAttributes', {\n get: function () {\n return self.treeGridAttributes;\n },\n set: function setTreeGridAttributes(value) {\n self.treeGridAttributes = value;\n },\n });\n Object.defineProperty(self.intf, 'cellGridAttributes', {\n get: function () {\n return self.cellGridAttributes;\n },\n set: function setCellGridAttributes(value) {\n self.cellGridAttributes = value;\n },\n });\n Object.defineProperty(self.intf, 'ctx', {\n get: function () {\n return self.ctx;\n },\n });\n Object.defineProperty(self.intf, 'schema', {\n get: function schemaGetter() {\n return self.getSchema();\n },\n set: function schemaSetter(value) {\n if (value === undefined) {\n // Issue #89 - allow schema to be set to initialized state\n self.schema = undefined;\n self.tempSchema = undefined;\n self.dispatchEvent('schemachanged', { schema: undefined });\n return;\n }\n if (!Array.isArray(value) || typeof value[0] !== 'object') {\n throw new Error('Schema must be an array of objects.');\n }\n if (value[0].name === undefined) {\n throw new Error(\n 'Expected schema to contain an object with at least a name property.',\n );\n }\n self.schema = value.map(function eachSchemaColumn(column, index) {\n column.width = column.width || self.style.cellWidth;\n column.filter = column.filter || self.filter(column.type);\n column.type = column.type || 'string';\n column.index = index;\n column.columnIndex = index;\n column.rowIndex = -1;\n return column;\n });\n self.tempSchema = undefined;\n self.createNewRowData();\n self.createColumnOrders();\n self.tryLoadStoredSettings();\n if (\n self.storedSettings &&\n typeof self.storedSettings.visibility === 'object'\n ) {\n self.schema.forEach(function hideEachSchemaColumn(column, index) {\n if (\n self.storedSettings &&\n self.storedSettings.visibility[column.name] !== undefined\n ) {\n column.hidden = !self.storedSettings.visibility[column.name];\n }\n });\n }\n self.resize(true);\n self.dispatchEvent('schemachanged', { schema: self.schema });\n },\n });\n /**\n * Gets an array of currently registered MIME types.\n * @memberof canvasDatagrid\n * @name getDataTypes\n * @method\n */\n self.intf.getTypes = function () {\n return Object.keys(self.parsers);\n };\n self.parseInnerHtml = function (data) {\n if (!data || /^ +$/.test(data)) {\n return [];\n }\n try {\n data = JSON.parse(data);\n } catch (e) {\n console.warn(\n Error(\n 'Cannot parse application/json+x-canvas-datagrid formated data. ' +\n e.message +\n ' \\nNote: canvas-datagrid.innerHTML is for string data only. ' +\n 'Use the canvas-datagrid.data property to set object data.',\n ),\n );\n }\n return data;\n };\n self.parsers['application/json+x-canvas-datagrid'] = function (\n data,\n callback,\n ) {\n self.parsers['application/x-canvas-datagrid'](\n self.parseInnerHtml(data),\n function (data, schema) {\n return callback(data, schema);\n },\n );\n };\n self.parsers['application/x-canvas-datagrid'] = function (data, callback) {\n return callback(data);\n };\n self.intf.parsers = self.parsers;\n // send to dataType ETL function to extract from input data\n // and transform into native [{}, {}] format\n self.etl = function (data, callback) {\n if (!self.intf.parsers[self.dataType]) {\n throw new Error('Unsupported data type.');\n }\n self.intf.parsers[self.dataType](data, function (data, schema) {\n if (Array.isArray(schema)) {\n self.schema = schema;\n }\n // Issue #89 - allow schema to be auto-created every time data is set\n if (self.attributes.autoGenerateSchema) {\n self.schema = self.getSchemaFromData(data);\n }\n if (!self.schema) {\n self.tempSchema = self.getSchemaFromData(data);\n }\n if (self.getSchema()) {\n self.createColumnOrders();\n }\n // set the unfiltered/sorted data array\n self.originalData = data;\n // apply filter, sort, etc to incoming dataset\n self.applyDataTransforms();\n // empty data was set\n if (!self.schema && (self.data || []).length === 0) {\n self.tempSchema = [{ name: '' }];\n }\n self.fitColumnToValues('cornerCell', true);\n if (\n (self.tempSchema && !self.schema) ||\n self.attributes.autoGenerateSchema\n ) {\n self.createColumnOrders();\n self.dispatchEvent('schemachanged', { schema: self.tempSchema });\n }\n callback();\n });\n };\n Object.defineProperty(self.intf, 'data', {\n get: function dataGetter() {\n return self.data;\n },\n set: function dataSetter(value) {\n self.etl(value, function () {\n self.changes = [];\n self.createNewRowData();\n if (\n self.attributes.autoResizeColumns &&\n self.data.length > 0 &&\n self.storedSettings === undefined\n ) {\n self.autosize();\n }\n // set the header column to fit the numbers in it\n self.fitColumnToValues('cornerCell', true);\n self.createRowOrders();\n self.tryLoadStoredSettings();\n self.dispatchEvent('datachanged', { data: self.data });\n self.resize(true);\n });\n },\n });\n self.initScrollBox = function () {\n var sHeight = 0,\n sWidth = 0,\n scrollTop = 0,\n scrollLeft = 0,\n scrollHeight = 0,\n scrollWidth = 0,\n scrollBoxHeight = 20,\n scrollBoxWidth = 20;\n function setScrollTop(value, preventScrollEvent) {\n if (isNaN(value)) {\n throw new Error('ScrollTop value must be a number');\n }\n if (value < 0) {\n value = 0;\n }\n if (value > scrollHeight) {\n value = scrollHeight;\n }\n if (scrollHeight < 0) {\n value = 0;\n }\n scrollTop = value;\n if (!preventScrollEvent) {\n self.scroll();\n }\n }\n function setScrollLeft(value, preventScrollEvent) {\n if (isNaN(value)) {\n throw new Error('ScrollLeft value must be a number');\n }\n if (value < 0) {\n value = 0;\n }\n if (value > scrollWidth) {\n value = scrollWidth;\n }\n if (scrollWidth < 0) {\n value = 0;\n }\n scrollLeft = value;\n if (!preventScrollEvent) {\n self.scroll();\n }\n }\n self.scrollBox.toString = function () {\n return (\n '{\"width\": ' +\n scrollWidth.toFixed(2) +\n ', \"height\": ' +\n scrollHeight.toFixed(2) +\n ', \"left\": ' +\n scrollLeft.toFixed(2) +\n ', \"top\": ' +\n scrollTop.toFixed(2) +\n ', \"widthRatio\": ' +\n self.scrollBox.widthBoxRatio.toFixed(5) +\n ', \"heightRatio\": ' +\n self.scrollBox.heightBoxRatio.toFixed(5) +\n '}'\n );\n };\n self.scrollBox.scrollTo = function (x, y, supressDrawEvent) {\n setScrollLeft(x, true);\n setScrollTop(y, supressDrawEvent);\n };\n Object.defineProperty(self.scrollBox, 'scrollBoxHeight', {\n get: function () {\n return scrollBoxHeight;\n },\n set: function (value) {\n scrollBoxHeight = value;\n },\n });\n Object.defineProperty(self.scrollBox, 'scrollBoxWidth', {\n get: function () {\n return scrollBoxWidth;\n },\n set: function (value) {\n scrollBoxWidth = value;\n },\n });\n Object.defineProperty(self.scrollBox, 'height', {\n get: function () {\n return sHeight;\n },\n set: function (value) {\n sHeight = value;\n },\n });\n Object.defineProperty(self.scrollBox, 'width', {\n get: function () {\n return sWidth;\n },\n set: function (value) {\n sWidth = value;\n },\n });\n Object.defineProperty(self.scrollBox, 'scrollTop', {\n get: function () {\n return scrollTop;\n },\n set: setScrollTop,\n });\n Object.defineProperty(self.scrollBox, 'scrollLeft', {\n get: function () {\n return scrollLeft;\n },\n set: setScrollLeft,\n });\n Object.defineProperty(self.scrollBox, 'scrollHeight', {\n get: function () {\n return scrollHeight;\n },\n set: function (value) {\n if (scrollTop > value) {\n scrollTop = Math.max(value, 0);\n }\n scrollHeight = value;\n },\n });\n Object.defineProperty(self.scrollBox, 'scrollWidth', {\n get: function () {\n return scrollWidth;\n },\n set: function (value) {\n if (scrollLeft > value) {\n scrollLeft = Math.max(value, 0);\n }\n scrollWidth = value;\n },\n });\n };\n return;\n}\n","/*jslint browser: true, unparam: true, todo: true, evil: true*/\n/*globals Reflect: false, HTMLElement: true, define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport component from './component';\nimport defaults from './defaults';\nimport draw from './draw';\nimport events from './events';\nimport touch from './touch';\nimport intf from './intf';\nimport contextMenu from './contextMenu';\nimport dom from './dom';\nimport publicMethods from './publicMethods';\n\nvar webComponent = component();\n\nvar modules = [\n defaults,\n draw,\n events,\n touch,\n intf,\n contextMenu,\n dom,\n publicMethods,\n];\n\nfunction Grid(args) {\n args = args || {};\n var self = {};\n self.isComponent = args.component === undefined;\n self.isChildGrid =\n args.parentNode &&\n /canvas-datagrid-(cell|tree)/.test(args.parentNode.nodeType);\n if (self.isChildGrid) {\n self.intf = {};\n } else {\n self.intf = self.isComponent\n ? eval('Reflect.construct(HTMLElement, [], new.target)')\n : document.createElement('canvas');\n }\n self.args = args;\n self.intf.args = args;\n self.applyComponentStyle = webComponent.applyComponentStyle;\n self.hyphenateProperty = webComponent.hyphenateProperty;\n self.dehyphenateProperty = webComponent.dehyphenateProperty;\n self.createGrid = function grid(args) {\n args.component = false;\n return new Grid(args);\n };\n\n modules.forEach(function (module) {\n module(self);\n });\n\n if (self.isChildGrid) {\n self.shadowRoot = args.parentNode.shadowRoot;\n self.parentNode = args.parentNode;\n } else {\n self.shadowRoot = self.intf.attachShadow({ mode: 'open' });\n self.parentNode = self.shadowRoot;\n }\n self.init();\n return self.intf;\n}\nif (window.HTMLElement) {\n Grid.prototype = Object.create(window.HTMLElement.prototype);\n}\n// export web component\nif (window.customElements) {\n Grid.observedAttributes = webComponent.getObservableAttributes();\n Grid.prototype.disconnectedCallback = webComponent.disconnectedCallback;\n Grid.prototype.attributeChangedCallback =\n webComponent.attributeChangedCallback;\n Grid.prototype.connectedCallback = webComponent.connectedCallback;\n Grid.prototype.adoptedCallback = webComponent.adoptedCallback;\n window.customElements.define('canvas-datagrid', Grid);\n}\n\n// export global\nif (\n window &&\n !window.canvasDatagrid &&\n !window.require &&\n // Present to exclude global declarations from ES Module bundles\n !window.EXCLUDE_GLOBAL\n) {\n window.canvasDatagrid = function (args) {\n return new Grid(args);\n };\n}\n\n// export amd loader\nexport default function canvasDatagrid(args) {\n args = args || {};\n var i,\n tKeys = [\n 'style',\n 'formatters',\n 'sorters',\n 'filters',\n 'treeGridAttributes',\n 'cellGridAttributes',\n 'data',\n 'schema',\n ];\n if (window.customElements) {\n i = document.createElement('canvas-datagrid');\n Object.keys(args).forEach(function (argKey) {\n // set data and parentNode after everything else\n if (argKey === 'data') {\n return;\n }\n if (argKey === 'parentNode') {\n return;\n }\n // top level keys in args\n if (tKeys.indexOf(argKey) !== -1) {\n tKeys.forEach(function (tKey) {\n if (args[tKey] === undefined || tKey !== argKey) {\n return;\n }\n if (['formatters', 'sorters', 'filters'].indexOf(argKey) !== -1) {\n if (typeof args[tKey] === 'object' && args[tKey] !== null) {\n Object.keys(args[tKey]).forEach(function (sKey) {\n i[tKey][sKey] = args[tKey][sKey];\n });\n }\n } else {\n i[tKey] = args[tKey];\n }\n });\n return;\n }\n // all others are attribute level keys\n i.attributes[argKey] = args[argKey];\n });\n if (args.data) {\n i.data = args.data;\n }\n // add to the dom very last to avoid redraws\n if (args.parentNode) {\n args.parentNode.appendChild(i);\n }\n return i;\n }\n args.component = false;\n i = new Grid(args);\n if (args.parentNode && args.parentNode.appendChild) {\n args.parentNode.appendChild(i);\n }\n return i;\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nexport default function (self) {\n /**\n * Converts a integer into a letter A - ZZZZZ...\n * @memberof canvasDatagrid\n * @name integerToAlpha\n * @method\n * @param {column} n The number to convert.\n */\n self.integerToAlpha = function (n) {\n var ordA = 'a'.charCodeAt(0),\n ordZ = 'z'.charCodeAt(0),\n len = ordZ - ordA + 1,\n s = '';\n while (n >= 0) {\n s = String.fromCharCode((n % len) + ordA) + s;\n n = Math.floor(n / len) - 1;\n }\n return s;\n };\n /**\n * Inserts a new column before the specified index into the schema.\n * @tutorial schema\n * @memberof canvasDatagrid\n * @name insertColumn\n * @method\n * @param {column} c The column to insert into the schema.\n * @param {number} index The index of the column to insert before.\n */\n self.insertColumn = function (c, index) {\n var s = self.getSchema();\n if (s.length < index) {\n throw new Error('Index is beyond the length of the schema.');\n }\n self.validateColumn(c, s);\n s.splice(index, 0, c);\n self.data.forEach(function (row) {\n self.applyDefaultValue(row, c);\n });\n self.intf.schema = s;\n };\n /**\n * Deletes a column from the schema at the specified index.\n * @memberof canvasDatagrid\n * @name deleteColumn\n * @tutorial schema\n * @method\n * @param {number} index The index of the column to delete.\n */\n self.deleteColumn = function (index) {\n var s = self.getSchema();\n // remove data matching this column name from data\n self.data.forEach(function (row) {\n delete row[s[index].name];\n });\n s.splice(index, 1);\n self.intf.schema = s;\n };\n /**\n * Adds a new column into the schema.\n * @tutorial schema\n * @memberof canvasDatagrid\n * @name addColumn\n * @method\n * @param {column} c The column to add to the schema.\n */\n self.addColumn = function (c) {\n var s = self.getSchema();\n self.validateColumn(c, s);\n s.push(c);\n self.data.forEach(function (row) {\n self.applyDefaultValue(row, c);\n });\n self.intf.schema = s;\n };\n /**\n * Deletes a row from the dataset at the specified index.\n * @memberof canvasDatagrid\n * @name deleteRow\n * @method\n * @param {number} index The index of the row to delete.\n */\n self.deleteRow = function (index) {\n self.originalData.splice(index, 1);\n self.setFilter();\n self.resize(true);\n };\n /**\n * Inserts a new row into the dataset before the specified index.\n * @memberof canvasDatagrid\n * @name insertRow\n * @method\n * @param {object} d data.\n * @param {number} index The index of the row to insert before.\n */\n self.insertRow = function (d, index) {\n if (self.originalData.length < index) {\n throw new Error('Index is beyond the length of the dataset.');\n }\n self.originalData.splice(index, 0, d);\n self.getSchema().forEach(function (c) {\n if (d[c.name] === undefined) {\n self.applyDefaultValue(self.originalData[index], c);\n }\n });\n self.setFilter();\n self.resize(true);\n };\n /**\n * Adds a new row into the dataset.\n * @memberof canvasDatagrid\n * @name addRow\n * @method\n * @param {object} d data.\n */\n self.addRow = function (d) {\n self.originalData.push(d);\n self.getSchema().forEach(function (c) {\n if (d[c.name] === undefined) {\n self.applyDefaultValue(\n self.originalData[self.originalData.length - 1],\n c,\n );\n }\n });\n self.setFilter();\n self.resize(true);\n };\n /**\n * Sets the height of a given row by index number.\n * @memberof canvasDatagrid\n * @name setRowHeight\n * @method\n * @param {number} rowIndex The index of the row to set.\n * @param {number} height Height to set the row to.\n */\n self.setRowHeight = function (rowIndex, height) {\n self.sizes.rows[rowIndex] = height;\n self.draw(true);\n };\n /**\n * Sets the width of a given column by index number.\n * @memberof canvasDatagrid\n * @name setColumnWidth\n * @method\n * @param {number} colIndex The index of the column to set.\n * @param {number} width Width to set the column to.\n */\n self.setColumnWidth = function (colIndex, width) {\n self.sizes.columns[colIndex] = width;\n self.draw(true);\n };\n /**\n * Removes any changes to the width of the columns due to user or api interaction, setting them back to the schema or style default.\n * @memberof canvasDatagrid\n * @name resetColumnWidths\n * @tutorial schema\n * @method\n */\n self.resetColumnWidths = function () {\n self.sizes.columns = {};\n self.draw(true);\n };\n /**\n * Removes any changes to the height of the rows due to user or api interaction, setting them back to the schema or style default.\n * @memberof canvasDatagrid\n * @name resetRowHeights\n * @tutorial schema\n * @method\n */\n self.resetRowHeights = function () {\n self.sizes.rows = {};\n self.draw(true);\n };\n /**\n * Sets the value of the filter.\n * @memberof canvasDatagrid\n * @name setFilter\n * @method\n * @param {string} column Name of the column to filter.\n * @param {string} value The value to filter for.\n */\n self.setFilter = function (column, value) {\n if (column === undefined && value === undefined) {\n self.columnFilters = {};\n } else if (column && (value === '' || value === undefined)) {\n delete self.columnFilters[column];\n } else {\n self.columnFilters[column] = value;\n }\n self.applyDataTransforms();\n };\n /**\n * Returns the number of pixels to scroll down to line up with row rowIndex.\n * @memberof canvasDatagrid\n * @name findRowScrollTop\n * @method\n * @param {number} rowIndex The row index of the row to scroll find.\n */\n self.findRowScrollTop = function (rowIndex) {\n if (self.scrollCache.y[rowIndex] === undefined) {\n throw new RangeError('Row index out of range.');\n }\n return self.scrollCache.y[rowIndex];\n };\n /**\n * Returns the number of pixels to scroll to the left to line up with column columnIndex.\n * @memberof canvasDatagrid\n * @name findColumnScrollLeft\n * @method\n * @param {number} columnIndex The column index of the column to find.\n */\n self.findColumnScrollLeft = function (columnIndex) {\n var i = Math.max(columnIndex - 1, 0);\n if (self.scrollCache.x[i] === undefined) {\n throw new Error('Column index out of range.');\n }\n return (\n self.scrollCache.x[i] -\n self.getColummnWidth(self.orders.columns[columnIndex])\n );\n };\n /**\n * Scrolls to the cell at columnIndex x, and rowIndex y. If you define both rowIndex and columnIndex additional calculations can be made to center the cell using the target cell's height and width. Defining only one rowIndex or only columnIndex will result in simpler calculations.\n * @memberof canvasDatagrid\n * @name gotoCell\n * @method\n * @param {number} x The column index of the cell to scroll to.\n * @param {number} y The row index of the cell to scroll to.\n * @param {number} [offsetX=0] Percentage offset the cell should be from the left edge (not including headers). The default is 0, meaning the cell will appear at the left edge. Valid values are 0 through 1. 1 = Left, 0 = Right, 0.5 = Center.\n * @param {number} [offsetY=0] Percentage offset the cell should be from the top edge (not including headers). The default is 0, meaning the cell will appear at the top edge. Valid values are 0 through 1. 1 = Bottom, 0 = Top, 0.5 = Center.\n */\n self.gotoCell = function (x, y, offsetX, offsetY) {\n var targetX = x === undefined ? undefined : self.findColumnScrollLeft(x),\n targetY = y === undefined ? undefined : self.findRowScrollTop(y),\n cell,\n sbw =\n self.scrollBox.width -\n (self.scrollBox.verticalBarVisible ? self.style.scrollBarWidth : 0),\n sbh =\n self.scrollBox.height -\n (self.scrollBox.horizontalBarVisible ? self.style.scrollBarWidth : 0);\n offsetX = offsetX === undefined ? 0 : offsetX;\n offsetY = offsetY === undefined ? 0 : offsetY;\n targetX -= sbw * offsetX;\n targetY -= sbh * offsetY;\n if (x !== undefined && y !== undefined) {\n self.scrollBox.scrollTo(targetX, targetY);\n requestAnimationFrame(function () {\n cell = self.getVisibleCellByIndex(x, y);\n // HACK: just don't offset if the target cell cannot be seen\n // TODO: offset does not work on very small grids, not sure why\n if (!cell) {\n return;\n }\n targetX += cell.width * offsetX;\n targetY += cell.height * offsetY;\n self.scrollBox.scrollTo(targetX, targetY);\n });\n } else if (x !== undefined) {\n self.scrollBox.scrollLeft = targetX;\n } else if (y !== undefined) {\n self.scrollBox.scrollTop = targetY;\n }\n };\n /**\n * Scrolls the row y.\n * @memberof canvasDatagrid\n * @name gotoRow\n * @method\n * @param {number} y The row index of the cell to scroll to.\n */\n self.gotoRow = function (y) {\n self.gotoCell(0, y);\n };\n /**\n * Scrolls the cell at cell x, row y into view if it is not already.\n * @memberof canvasDatagrid\n * @name scrollIntoView\n * @method\n * @param {number} x The column index of the cell to scroll into view.\n * @param {number} y The row index of the cell to scroll into view.\n * @param {number} [offsetX=0] Percentage offset the cell should be from the left edge (not including headers). The default is 0, meaning the cell will appear at the left edge. Valid values are 0 through 1. 1 = Left, 0 = Right, 0.5 = Center.\n * @param {number} [offsetY=0] Percentage offset the cell should be from the top edge (not including headers). The default is 0, meaning the cell will appear at the top edge. Valid values are 0 through 1. 1 = Bottom, 0 = Top, 0.5 = Center.\n */\n self.scrollIntoView = function (x, y, offsetX, offsetY) {\n if (\n self.visibleCells.filter(function (cell) {\n return (\n (cell.rowIndex === y || y === undefined) &&\n (cell.columnIndex === x || x === undefined) &&\n cell.x > 0 &&\n cell.y > 0 &&\n cell.x + cell.width < self.width &&\n cell.y + cell.height < self.height\n );\n }).length === 0\n ) {\n self.gotoCell(x, y, offsetX, offsetY);\n }\n };\n /**\n * Sets the active cell. Requires redrawing.\n * @memberof canvasDatagrid\n * @name setActiveCell\n * @method\n * @param {number} x The column index of the cell to set active.\n * @param {number} y The row index of the cell to set active.\n */\n self.setActiveCell = function (x, y) {\n if (x < 0) {\n x = 0;\n }\n if (y < 0) {\n y = 0;\n }\n self.activeCell = {\n rowIndex: y,\n columnIndex: x,\n };\n };\n /**\n * Removes the selection.\n * @memberof canvasDatagrid\n * @name selectNone\n * @param {boolean} dontDraw Suppress the draw method after the selection change.\n * @method\n */\n self.selectNone = function (dontDraw) {\n self.selections = [];\n self.dispatchEvent('selectionchanged', {\n selectedData: self.getSelectedData(),\n selections: self.selections,\n selectionBounds: self.selectionBounds,\n });\n if (dontDraw) {\n return;\n }\n self.draw();\n };\n /**\n * Selects every visible cell.\n * @memberof canvasDatagrid\n * @name selectAll\n * @param {boolean} dontDraw Suppress the draw method after the selection change.\n * @method\n */\n self.selectAll = function (dontDraw) {\n self.selectArea({\n top: 0,\n left: -1,\n right: self.getSchema().length - 1,\n bottom: self.data.length - 1,\n });\n if (dontDraw) {\n return;\n }\n self.draw();\n };\n /**\n * Returns true if the selected columnIndex is selected on every row.\n * @memberof canvasDatagrid\n * @name isColumnSelected\n * @method\n * @param {number} columnIndex The column index to check.\n */\n self.isColumnSelected = function (columnIndex) {\n var colIsSelected = true;\n self.data.forEach(function (row, rowIndex) {\n if (\n !self.selections[rowIndex] ||\n self.selections[rowIndex].indexOf(self.orders.columns[columnIndex]) ===\n -1\n ) {\n colIsSelected = false;\n }\n });\n return colIsSelected;\n };\n /**\n * Runs the defined method on each selected cell.\n * @memberof canvasDatagrid\n * @name forEachSelectedCell\n * @method\n * @param {number} fn The function to execute. The signature of the function is: (data, rowIndex, columnName).\n * @param {number} expandToRow When true the data in the array is expanded to the entire row.\n */\n self.forEachSelectedCell = function (fn, expandToRow) {\n var d = [],\n s = expandToRow ? self.getSchema() : self.getVisibleSchema(),\n l = self.data.length;\n self.selections.forEach(function (row, index) {\n if (index === l) {\n return;\n }\n if (row.length === 0) {\n d[index] = null;\n return;\n }\n d[index] = {};\n row.forEach(function (col) {\n if (col === -1 || !s[col]) {\n return;\n }\n fn(self.data, index, s[col].name);\n });\n });\n };\n /**\n * Selects a column.\n * @memberof canvasDatagrid\n * @name selectColumn\n * @method\n * @param {number} columnIndex The column index to select.\n * @param {boolean} toggleSelectMode When true, behaves as if you were holding control/command when you clicked the column.\n * @param {boolean} shift When true, behaves as if you were holding shift when you clicked the column.\n * @param {boolean} supressSelectionchangedEvent When true, prevents the selectionchanged event from firing.\n */\n self.selectColumn = function (columnIndex, ctrl, shift, supressEvent) {\n var s, e, x;\n function addCol(i) {\n self.data.forEach(function (row, rowIndex) {\n self.selections[rowIndex] = self.selections[rowIndex] || [];\n if (self.selections[rowIndex].indexOf(i) === -1) {\n self.selections[rowIndex].push(i);\n }\n });\n }\n function removeCol(i) {\n self.data.forEach(function (row, rowIndex) {\n self.selections[rowIndex] = self.selections[rowIndex] || [];\n if (self.selections[rowIndex].indexOf(i) !== -1) {\n self.selections[rowIndex].splice(\n self.selections[rowIndex].indexOf(i),\n 1,\n );\n }\n });\n }\n if (shift) {\n if (!self.activeCell) {\n return;\n }\n s = Math.min(self.activeCell.columnIndex, columnIndex);\n e = Math.max(self.activeCell.columnIndex, columnIndex);\n for (x = s; e > x; x += 1) {\n addCol(x);\n }\n }\n if (!ctrl && !shift) {\n self.selections = [];\n self.activeCell.columnIndex = columnIndex;\n self.activeCell.rowIndex = self.scrollIndexTop;\n }\n if (ctrl && self.isColumnSelected(columnIndex)) {\n removeCol(columnIndex);\n } else {\n addCol(columnIndex);\n }\n if (supressEvent) {\n return;\n }\n self.dispatchEvent('selectionchanged', {\n selectedData: self.getSelectedData(),\n selections: self.selections,\n selectionBounds: self.getSelectionBounds(),\n });\n };\n /**\n * Selects a row.\n * @memberof canvasDatagrid\n * @name selectRow\n * @method\n * @param {number} rowIndex The row index to select.\n * @param {boolean} ctrl When true, behaves as if you were holding control/command when you clicked the row.\n * @param {boolean} shift When true, behaves as if you were holding shift when you clicked the row.\n * @param {boolean} supressSelectionchangedEvent When true, prevents the selectionchanged event from firing.\n */\n self.selectRow = function (rowIndex, ctrl, shift, supressEvent) {\n var x,\n st,\n en,\n s = self.getVisibleSchema();\n function de() {\n if (supressEvent) {\n return;\n }\n self.dispatchEvent('selectionchanged', {\n selectedData: self.getSelectedData(),\n selections: self.selections,\n selectionBounds: self.selectionBounds,\n });\n }\n function addRow(ri) {\n self.selections[ri] = [];\n self.selections[ri].push(-1);\n s.forEach(function (col, index) {\n self.selections[ri].push(self.orders.columns.indexOf(col.index));\n });\n }\n if (self.dragAddToSelection === false || self.dragObject === undefined) {\n if (\n self.selections[rowIndex] &&\n self.selections[rowIndex].length - 1 === s.length\n ) {\n if (ctrl) {\n self.selections[rowIndex] = [];\n de();\n return;\n }\n }\n }\n if (self.dragAddToSelection === true || self.dragObject === undefined) {\n if (shift && self.dragObject === undefined) {\n if (!self.activeCell) {\n return;\n }\n st = Math.min(self.activeCell.rowIndex, rowIndex);\n en = Math.max(self.activeCell.rowIndex, rowIndex);\n for (x = st; en >= x; x += 1) {\n addRow(x);\n }\n } else {\n addRow(rowIndex);\n }\n }\n de();\n };\n /**\n * Collapse a tree grid by row index.\n * @memberof canvasDatagrid\n * @name collapseTree\n * @method\n * @param {number} index The index of the row to collapse.\n */\n self.collapseTree = function (rowIndex) {\n self.dispatchEvent('collapsetree', {\n childGrid: self.childGrids[rowIndex],\n data: self.data[rowIndex],\n rowIndex: rowIndex,\n });\n self.openChildren[rowIndex].blur();\n self.openChildren[rowIndex].dispose();\n delete self.openChildren[rowIndex];\n delete self.sizes.trees[rowIndex];\n delete self.childGrids[rowIndex];\n self.dispatchEvent('resizerow', {\n cellHeight: self.style.cellHeight,\n });\n self.resize(true);\n self.draw(true);\n };\n /**\n * Expands a tree grid by row index.\n * @memberof canvasDatagrid\n * @name expandTree\n * @method\n * @param {number} index The index of the row to expand.\n */\n self.expandTree = function (rowIndex) {\n var trArgs = self.args.treeGridAttributes || {},\n columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n rowHeaderCellWidth =\n self.sizes.columns.cornerCell || self.style.rowHeaderCellWidth,\n h = self.sizes.trees[rowIndex] || self.style.treeGridHeight,\n treeGrid;\n if (!self.childGrids[rowIndex]) {\n trArgs.debug = self.attributes.debug;\n trArgs.name = self.attributes.saveAppearance\n ? self.attributes.name + 'tree' + rowIndex\n : undefined;\n trArgs.style = trArgs.style || self.style;\n trArgs.parentNode = {\n parentGrid: self.intf,\n nodeType: 'canvas-datagrid-tree',\n offsetHeight: h,\n offsetWidth: self.width - rowHeaderCellWidth,\n header: { width: self.width - rowHeaderCellWidth },\n offsetLeft: rowHeaderCellWidth,\n offsetTop: columnHeaderCellHeight,\n offsetParent: self.intf.parentNode,\n parentNode: self.intf.parentNode,\n style: 'tree',\n data: self.data[rowIndex],\n };\n treeGrid = self.createGrid(trArgs);\n self.childGrids[rowIndex] = treeGrid;\n }\n treeGrid = self.childGrids[rowIndex];\n treeGrid.visible = true;\n self.dispatchEvent('expandtree', {\n treeGrid: treeGrid,\n data: self.data[rowIndex],\n rowIndex: rowIndex,\n });\n self.openChildren[rowIndex] = treeGrid;\n self.sizes.trees[rowIndex] = h;\n self.dispatchEvent('resizerow', { height: self.style.cellHeight });\n self.resize(true);\n };\n /**\n * Toggles tree grid open and close by row index.\n * @memberof canvasDatagrid\n * @name toggleTree\n * @method\n * @param {number} index The index of the row to toggle.\n */\n self.toggleTree = function (rowIndex) {\n var i = self.openChildren[rowIndex];\n if (i) {\n return self.collapseTree(rowIndex);\n }\n self.expandTree(rowIndex);\n };\n /**\n * Returns a header from the schema by name.\n * @memberof canvasDatagrid\n * @name getHeaderByName\n * @tutorial schema\n * @method\n * @returns {header} header with the selected name, or undefined.\n * @param {string} name The name of the column to resize.\n */\n self.getHeaderByName = function (name) {\n var x,\n i = self.getSchema();\n for (x = 0; x < i.length; x += 1) {\n if (i[x].name === name) {\n return i[x];\n }\n }\n };\n /**\n * Resizes a column to fit the longest value in the column. Call without a value to resize all columns.\n * Warning, can be slow on very large record sets (1m records ~3-5 seconds on an i7).\n * @memberof canvasDatagrid\n * @name fitColumnToValues\n * @method\n * @param {string} name The name of the column to resize.\n */\n self.fitColumnToValues = function (name, internal) {\n if (!self.canvas) {\n return;\n }\n self.sizes.columns[\n name === 'cornerCell' ? -1 : self.getHeaderByName(name).index\n ] = Math.max(self.findColumnMaxTextLength(name), self.style.minColumnWidth);\n if (!internal) {\n self.resize();\n self.draw(true);\n }\n };\n /**\n * Checks if a cell is currently visible.\n * @memberof canvasDatagrid\n * @name isCellVisible\n * @overload\n * @method\n * @returns {boolean} when true, the cell is visible, when false the cell is not currently drawn.\n * @param {number} columnIndex The column index of the cell to check.\n * @param {number} rowIndex The row index of the cell to check.\n */\n self.isCellVisible = function (cell, rowIndex) {\n // overload\n if (rowIndex !== undefined) {\n return (\n self.visibleCells.filter(function (c) {\n return c.columnIndex === cell && c.rowIndex === rowIndex;\n }).length > 0\n );\n }\n var x,\n l = self.visibleCells.length;\n for (x = 0; x < l; x += 1) {\n if (\n cell.x === self.visibleCells[x].x &&\n cell.y === self.visibleCells[x].y\n ) {\n return true;\n }\n }\n return false;\n };\n /**\n * Sets the order of the data.\n * @memberof canvasDatagrid\n * @name order\n * @method\n * @param {number} columnName Name of the column to be sorted.\n * @param {string} direction `asc` for ascending or `desc` for descending.\n * @param {function} [sortFunction] When defined, override the default sorting method defined in the column's schema and use this one.\n * @param {bool} [dontSetStorageData] Don't store this setting for future use.\n */\n self.order = function (\n columnName,\n direction,\n sortFunction,\n dontSetStorageData,\n ) {\n var f,\n c = self.getSchema().filter(function (col) {\n return col.name === columnName;\n });\n if (\n self.dispatchEvent('beforesortcolumn', {\n name: columnName,\n direction: direction,\n })\n ) {\n return;\n }\n self.orderBy = columnName;\n self.orderDirection = direction;\n if (!self.data || self.data.length === 0) {\n return;\n }\n if (c.length === 0) {\n throw new Error('Cannot sort. No such column name');\n }\n f = sortFunction || c[0].sorter || self.sorters[c[0].type];\n if (!f && c[0].type !== undefined) {\n console.warn(\n 'Cannot sort type \"%s\" falling back to string sort.',\n c[0].type,\n );\n }\n self.orderings.add(\n columnName,\n direction,\n typeof f === 'function' ? f : self.sorters.string,\n );\n self.orderings.sort();\n self.dispatchEvent('sortcolumn', {\n name: columnName,\n direction: direction,\n });\n self.draw(true);\n if (dontSetStorageData) {\n return;\n }\n self.setStorageData();\n };\n self.isInGrid = function (e) {\n if (e.x < 0 || e.x > self.width || e.y < 0 || e.y > self.height) {\n return false;\n }\n return true;\n };\n /**\n * Moves the current selection relative to the its current position. Note: this method does not move the selected data, just the selection itself.\n * @memberof canvasDatagrid\n * @name moveSelection\n * @method\n * @param {number} offsetX The number of columns to offset the selection.\n * @param {number} offsetY The number of rows to offset the selection.\n */\n self.moveSelection = function (offsetX, offsetY) {\n var sel = [];\n self.selections.forEach(function (row, rowIndex) {\n sel[rowIndex + offsetY] = [];\n row.forEach(function (colIndex) {\n sel[rowIndex + offsetY].push(colIndex + offsetX);\n });\n });\n self.selections = sel;\n };\n /**\n * Moves data in the provided selection to another position in the grid. Moving data off the edge of the schema (columns/x) will truncate data.\n * @memberof canvasDatagrid\n * @name moveTo\n * @method\n * @param {array} sel 2D array representing selected rows and columns. `canvasDatagrid.selections` is in this format and can be used here.\n * @param {number} x The column index to start inserting the selection at.\n * @param {number} y The row index to start inserting the selection at.\n */\n self.moveTo = function (sel, x, y) {\n var d = self.getSelectedData(),\n s = self.getVisibleSchema(),\n l = sel.length,\n xi,\n maxRowLength = -Infinity,\n minXi = Infinity,\n yi = y - 1;\n sel.forEach(function (row, index) {\n if (index === l) {\n return;\n }\n if (row.length === 0) {\n return;\n }\n minXi = Math.min(self.getVisibleColumnIndexOf(x), minXi);\n maxRowLength = Math.max(maxRowLength, row.length);\n row.forEach(function (colIndex) {\n // intentional redef of colIndex\n colIndex = self.getVisibleColumnIndexOf(colIndex);\n if (!s[colIndex]) {\n return;\n }\n if (!self.data[index]) {\n self.data[index] = {};\n }\n self.data[index][s[colIndex].name] = null;\n });\n });\n sel.forEach(function (row, index) {\n var lastSourceIndex;\n yi += 1;\n xi = self.getVisibleColumnIndexOf(x);\n row.forEach(function (colIndex, cidx) {\n colIndex = self.getVisibleColumnIndexOf(colIndex);\n if (cidx > 0) {\n // this confusing bit of nonsense figures out\n // if the selection has skipped cells\n xi += colIndex - lastSourceIndex;\n }\n lastSourceIndex = colIndex;\n if (\n colIndex === -1 ||\n !s[xi] ||\n !s[colIndex] ||\n self.data.length - 1 < yi ||\n yi < 0\n ) {\n return;\n }\n if (!self.data[yi]) {\n self.data[yi] = {};\n }\n self.data[yi][s[xi].name] = d[index][s[colIndex].name];\n });\n });\n };\n /**\n * Checks if a given column is visible.\n * @memberof canvasDatagrid\n * @name isColumnVisible\n * @method\n * @returns {boolean} When true, the column is visible.\n * @param {number} columnIndex Column index.\n */\n self.isColumnVisible = function (columnIndex) {\n return (\n self.visibleCells.filter(function (c) {\n return c.columnIndex === columnIndex;\n }).length > 0\n );\n };\n /**\n * Checks if a given row is visible.\n * @memberof canvasDatagrid\n * @name isRowVisible\n * @method\n * @returns {boolean} When true, the row is visible.\n * @param {number} rowIndex Row index.\n */\n self.isRowVisible = function (rowIndex) {\n return (\n self.visibleCells.filter(function (c) {\n return c.rowIndex === rowIndex;\n }).length > 0\n );\n };\n /**\n * Gets the cell at columnIndex and rowIndex.\n * @memberof canvasDatagrid\n * @name getVisibleCellByIndex\n * @method\n * @returns {cell} cell at the selected location.\n * @param {number} x Column index.\n * @param {number} y Row index.\n */\n self.getVisibleCellByIndex = function (x, y) {\n return self.visibleCells.filter(function (c) {\n return c.columnIndex === x && c.rowIndex === y;\n })[0];\n };\n /**\n * Gets the cell at grid pixel coordinate x and y. Author's note. This function ties drawing and events together. This is a very complex function and is core to the component.\n * @memberof canvasDatagrid\n * @name getCellAt\n * @method\n * @returns {cell} cell at the selected location.\n * @param {number} x Number of pixels from the left.\n * @param {number} y Number of pixels from the top.\n */\n self.getCellAt = function (x, y, useTouchScrollZones) {\n function getBorder(entitiy) {\n if (\n entitiy.x + entitiy.width - self.attributes.borderResizeZone * 0.4 <\n x &&\n entitiy.x + entitiy.width + self.attributes.borderResizeZone * 0.6 > x\n ) {\n return 'r';\n }\n if (\n entitiy.x - self.attributes.borderResizeZone * 0.4 < x &&\n entitiy.x + self.attributes.borderResizeZone * 0.6 > x\n ) {\n return 'l';\n }\n if (\n entitiy.y + entitiy.height - self.attributes.borderResizeZone * 0.4 <\n y &&\n entitiy.y + entitiy.height + self.attributes.borderResizeZone * 0.6 > y\n ) {\n return 'b';\n }\n if (\n entitiy.y - self.attributes.borderResizeZone * 0.4 < y &&\n entitiy.y + self.attributes.borderResizeZone * 0.6 > y\n ) {\n return 't';\n }\n }\n if (!self.visibleCells) {\n return;\n }\n var border,\n tsz = useTouchScrollZones ? self.attributes.touchScrollZone : 0,\n moveMode = self.attributes.borderDragBehavior === 'move',\n i,\n l = self.visibleCells.length,\n moveBorder,\n xBorderBehavior = moveMode ? self.cursorGrab : 'ew-resize',\n yBorderBehavior = moveMode ? self.cursorGrab : 'ns-resize',\n cell,\n entitiy;\n if (!self.visibleCells || !self.visibleCells.length) {\n return;\n }\n self.hasFocus = true;\n if (!(y < self.height && y > 0 && x < self.width && x > 0)) {\n self.hasFocus = false;\n return {\n dragContext: 'inherit',\n context: 'inherit',\n };\n }\n for (i = 0; i < l; i += 1) {\n cell = self.visibleCells[i];\n // interactive dimensions of the cell. used for touch \"over size\" zones\n entitiy = {\n x: cell.x,\n y: cell.y,\n height: cell.height,\n width: cell.width,\n };\n if (\n useTouchScrollZones &&\n /(vertical|horizontal)-scroll-/.test(cell.style)\n ) {\n entitiy.x -= tsz;\n entitiy.y -= tsz;\n entitiy.height += tsz;\n entitiy.width += tsz;\n }\n if (\n entitiy.x - self.style.cellBorderWidth < x &&\n entitiy.x + entitiy.width + self.style.cellBorderWidth > x &&\n entitiy.y - self.style.cellBorderWidth < y &&\n entitiy.y + entitiy.height + self.style.cellBorderWidth > y\n ) {\n if (/frozen-row-marker/.test(cell.style)) {\n cell.dragContext = cell.style;\n cell.context = 'row-resize';\n return cell;\n }\n if (/frozen-column-marker/.test(cell.style)) {\n cell.dragContext = cell.style;\n cell.context = 'col-resize';\n return cell;\n }\n if (/selection-handle-/.test(cell.style)) {\n cell.dragContext = cell.style;\n cell.context = 'crosshair';\n return cell;\n }\n if (/vertical-scroll-(bar|box)/.test(cell.style)) {\n cell.dragContext = 'vertical-scroll-box';\n cell.context = 'vertical-scroll-box';\n cell.isScrollBar = true;\n cell.isVerticalScrollBar = true;\n if (y > self.scrollBox.box.v.y + self.scrollBox.scrollBoxHeight) {\n cell.dragContext = 'vertical-scroll-bottom';\n cell.context = 'vertical-scroll-bottom';\n } else if (y < self.scrollBox.box.v.y) {\n cell.dragContext = 'vertical-scroll-top';\n cell.context = 'vertical-scroll-top';\n }\n self.cursor = 'default';\n return cell;\n }\n if (/horizontal-scroll-(bar|box)/.test(cell.style)) {\n cell.dragContext = 'horizontal-scroll-box';\n cell.context = 'horizontal-scroll-box';\n cell.isScrollBar = true;\n cell.isHorizontalScrollBar = true;\n if (x > self.scrollBox.box.h.x + self.scrollBox.scrollBoxWidth) {\n cell.dragContext = 'horizontal-scroll-right';\n cell.context = 'horizontal-scroll-right';\n } else if (x < self.scrollBox.box.h.x) {\n cell.dragContext = 'horizontal-scroll-left';\n cell.context = 'horizontal-scroll-left';\n }\n self.cursor = 'default';\n return cell;\n }\n border = getBorder(entitiy);\n // check if the border of this cell is the border of the selection and if so show move cursor in move mode\n moveBorder =\n moveMode &&\n cell.selectionBorder &&\n cell.selectionBorder.indexOf(border) !== -1;\n if (\n ['l', 'r'].indexOf(border) !== -1 &&\n (self.attributes.allowColumnResize || moveBorder) &&\n ((self.attributes.allowColumnResizeFromCell && cell.isNormal) ||\n !cell.isNormal ||\n moveBorder) &&\n ((self.attributes.allowRowHeaderResize &&\n (cell.isRowHeader || cell.isCorner)) ||\n !(cell.isRowHeader && cell.isCorner))\n ) {\n if (\n (cell.isColumnHeader ||\n cell.isCorner ||\n (self.attributes.allowColumnResizeFromCell && cell.isNormal)) &&\n border === 'r'\n ) {\n cell.context = 'ew-resize';\n cell.dragContext = 'ew-resize';\n return cell;\n }\n if (!(cell.isColumnHeader || cell.isCorner) && moveBorder) {\n cell.context = xBorderBehavior;\n cell.dragContext = border + '-move';\n return cell;\n }\n }\n if (\n ['t', 'b'].indexOf(border) !== -1 &&\n cell.rowIndex > -1 &&\n (self.attributes.allowRowResize || moveBorder) &&\n ((self.attributes.allowRowResizeFromCell && cell.isNormal) ||\n !cell.isNormal ||\n moveBorder) &&\n !cell.isColumnHeader\n ) {\n if (\n (cell.isRowHeader ||\n cell.isCorner ||\n (self.attributes.allowRowResizeFromCell && cell.isNormal)) &&\n border === 'b'\n ) {\n cell.context = 'ns-resize';\n cell.dragContext = 'ns-resize';\n return cell;\n }\n if (!(cell.isRowHeader || cell.isCorner) && moveBorder) {\n cell.context = yBorderBehavior;\n cell.dragContext = border + '-move';\n return cell;\n }\n }\n if (cell.style === 'columnHeaderCell') {\n cell.context = 'cell';\n cell.dragContext = 'column-reorder';\n return cell;\n }\n if (cell.style === 'rowHeaderCell') {\n if (\n self.attributes.rowGrabZoneSize +\n (cell.y - self.style.cellBorderWidth) <\n y ||\n !self.attributes.allowRowReordering\n ) {\n cell.dragContext = 'cell';\n cell.context = 'cell';\n } else {\n cell.context = self.cursorGrab;\n cell.dragContext = 'row-reorder';\n }\n return cell;\n }\n if (cell.isGrid) {\n self.hasFocus = false;\n cell.dragContext = 'cell-grid';\n cell.context = 'cell-grid';\n return cell;\n }\n if (cell.style === 'tree-grid') {\n self.hasFocus = false;\n cell.dragContext = 'tree';\n cell.context = 'tree';\n return cell;\n }\n cell.dragContext = 'cell';\n cell.context = 'cell';\n return cell;\n }\n }\n self.hasFocus = true;\n self.cursor = 'default';\n return {\n dragContext: 'background',\n context: 'background',\n style: 'background',\n isBackground: true,\n };\n };\n /**\n * Gets the bounds of current selection.\n * @returns {rect} selection.\n * @memberof canvasDatagrid\n * @name getSelectionBounds\n * @method\n */\n self.getSelectionBounds = function () {\n var low = { x: Infinity, y: Infinity },\n high = { x: -Infinity, y: -Infinity };\n self.selections.forEach(function (row, rowIndex) {\n var maxCol, minCol;\n low.y = rowIndex < low.y ? rowIndex : low.y;\n high.y = rowIndex > high.y ? rowIndex : high.y;\n maxCol = Math.max.apply(null, row);\n minCol = Math.min.apply(null, row);\n low.x = minCol < low.x ? minCol : low.x;\n high.x = maxCol > high.x ? maxCol : high.x;\n });\n return {\n top: low.y,\n left: low.x,\n bottom: high.y,\n right: high.x,\n };\n };\n /**\n * Returns an auto generated schema based on data structure.\n * @memberof canvasDatagrid\n * @name getSchemaFromData\n * @method\n * @tutorial schema\n * @returns {schema} schema A schema based on the first item in the data array.\n */\n self.getSchemaFromData = function (d) {\n d = d || self.data;\n return Object.keys(d[0] || { ' ': '' }).map(function mapEachSchemaColumn(\n key,\n index,\n ) {\n var type = self.getBestGuessDataType(key, d),\n i = {\n name: key,\n title: isNaN(parseInt(key, 10))\n ? key\n : self.integerToAlpha(key).toUpperCase(),\n index: index,\n columnIndex: index,\n type: type,\n filter: self.filter(type),\n };\n if (\n self.storedSettings &&\n self.storedSettings.visibility &&\n self.storedSettings.visibility[i.name] !== undefined\n ) {\n i.hidden = !self.storedSettings.visibility[i.name];\n }\n return i;\n });\n };\n /**\n * Clears the change log grid.changes that keeps track of changes to the data set.\n * This does not undo changes or alter data it is simply a convince array to keep\n * track of changes made to the data since last this method was called.\n * @memberof canvasDatagrid\n * @name clearChangeLog\n * @method\n */\n self.clearChangeLog = function () {\n self.changes = [];\n };\n /**\n * Selects an area of the grid.\n * @memberof canvasDatagrid\n * @name selectArea\n * @method\n * @param {rect} bounds A rect object representing the selected values.\n */\n self.selectArea = function (bounds, ctrl) {\n self.selectionBounds = bounds || self.selectionBounds;\n var ev,\n x,\n y,\n s = self.getSchema();\n if (!ctrl) {\n self.selections = [];\n }\n if (\n self.selectionBounds.top < -1 ||\n self.selectionBounds.bottom > self.data.length ||\n self.selectionBounds.left < -1 ||\n self.selectionBounds.right > s.length\n ) {\n throw new Error('Impossible selection area');\n }\n for (\n x = self.selectionBounds.top;\n x <= self.selectionBounds.bottom;\n x += 1\n ) {\n self.selections[x] = [];\n for (\n y = self.selectionBounds.left;\n y <= self.selectionBounds.right;\n y += 1\n ) {\n if (self.selections[x].indexOf(y) === -1) {\n self.selections[x].push(y);\n }\n }\n }\n ev = {\n selections: self.selections,\n selectionBounds: self.selectionBounds,\n };\n Object.defineProperty(ev, 'selectedData', {\n get: function () {\n return self.getSelectedData();\n },\n });\n self.dispatchEvent('selectionchanged', ev);\n };\n /**\n * Returns the maximum text width for a given column by column name.\n * @memberof canvasDatagrid\n * @name findColumnMaxTextLength\n * @method\n * @returns {number} The number of pixels wide the maximum width value in the selected column.\n * @param {string} name The name of the column to calculate the value's width of.\n */\n self.findColumnMaxTextLength = function (name) {\n var m = -Infinity;\n if (name === 'cornerCell') {\n self.ctx.font = self.style.rowHeaderCellFont;\n return (\n self.ctx.measureText(\n (self.data.length + (self.attributes.showNewRow ? 1 : 0)).toString(),\n ).width +\n self.style.autosizePadding +\n self.style.autosizeHeaderCellPadding +\n self.style.rowHeaderCellPaddingRight +\n self.style.rowHeaderCellPaddingLeft +\n (self.attributes.tree\n ? self.style.treeArrowWidth +\n self.style.treeArrowMarginLeft +\n self.style.treeArrowMarginRight\n : 0)\n );\n }\n var formatter = null;\n self.getSchema().forEach(function (col) {\n if (col.name !== name) {\n return;\n }\n self.ctx.font = self.style.columnHeaderCellFont;\n var t =\n self.ctx.measureText(col.title || col.name).width +\n self.style.headerCellPaddingRight +\n self.style.headerCellPaddingLeft;\n m = t > m ? t : m;\n formatter = self.formatters[col.type];\n });\n self.data.forEach(function (row) {\n var text = row[name];\n if (formatter) {\n text = formatter({ cell: { value: text } });\n }\n self.ctx.font = self.style.cellFont;\n var t =\n self.ctx.measureText(text).width +\n self.style.cellPaddingRight +\n self.style.cellPaddingLeft +\n self.style.cellAutoResizePadding;\n m = t > m ? t : m;\n });\n return m;\n };\n /**\n * Gets the total width of all header columns.\n * @memberof canvasDatagrid\n * @name getHeaderWidth\n * @method\n */\n self.getHeaderWidth = function () {\n return self.getVisibleSchema().reduce(function (total, header) {\n return total + parseInt(header.width || self.style.cellWidth, 10);\n }, 0);\n };\n /**\n * Gets the height of a row by index.\n * @memberof canvasDatagrid\n * @name getRowHeight\n * @method\n * @param {number} rowIndex The row index to lookup.\n */\n self.getRowHeight = function (rowIndex) {\n return (self.sizes.rows[rowIndex] || self.style.cellHeight) * self.scale;\n };\n /**\n * Gets the width of a column by index.\n * @memberof canvasDatagrid\n * @name getColummnWidth\n * @method\n * @param {number} columnIndex The column index to lookup.\n */\n self.getColummnWidth = function (columnIndex) {\n return (\n (self.sizes.columns[columnIndex] ||\n self.getSchema()[columnIndex].width ||\n self.style.cellWidth) * self.scale\n );\n };\n self.formatters.string = function cellFormatterString(e) {\n return e.cell.value !== undefined ? e.cell.value : '';\n };\n self.formatters.rowHeaderCell = self.formatters.string;\n self.formatters.headerCell = self.formatters.string;\n self.formatters.number = self.formatters.string;\n self.formatters.int = self.formatters.string;\n self.formatters.html = self.formatters.string;\n self.sorters.string = function (columnName, direction) {\n var asc = direction === 'asc';\n return function (a, b) {\n if (a[columnName] === undefined || a[columnName] === null) {\n return 1;\n }\n if (b[columnName] === undefined || b[columnName] === null) {\n return 0;\n }\n if (asc) {\n if (!a[columnName].localeCompare) {\n return 1;\n }\n return a[columnName].localeCompare(b[columnName]);\n }\n if (!b[columnName].localeCompare) {\n return 1;\n }\n return b[columnName].localeCompare(a[columnName]);\n };\n };\n self.sorters.number = function (columnName, direction) {\n var asc = direction === 'asc';\n return function (a, b) {\n if (asc) {\n return a[columnName] - b[columnName];\n }\n return b[columnName] - a[columnName];\n };\n };\n self.sorters.date = function (columnName, direction) {\n var asc = direction === 'asc';\n return function (a, b) {\n if (asc) {\n return (\n new Date(a[columnName]).getTime() - new Date(b[columnName]).getTime()\n );\n }\n return (\n new Date(b[columnName]).getTime() - new Date(a[columnName]).getTime()\n );\n };\n };\n}\n","/*jslint browser: true, unparam: true, todo: true, plusplus: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nexport default function (self) {\n var touchTimerMs = 50,\n debounceTouchMove,\n touchMoving,\n touchScrollTimeout;\n self.scrollAnimation = {};\n self.touchDelta = {};\n self.touchAnimateTo = {};\n self.animationFrames = 0;\n self.getTouchPos = function (e, touchIndex) {\n var t = touchIndex ? e.touches[touchIndex] : e.touches[0],\n rect = self.canvas.getBoundingClientRect(),\n pos;\n if (!t) {\n return;\n }\n pos = {\n x: t.clientX - rect.left,\n y: t.clientY - rect.top,\n };\n if (self.isChildGrid) {\n pos.x -= self.canvasOffsetLeft;\n pos.y -= self.canvasOffsetTop;\n }\n return {\n x: pos.x,\n y: pos.y,\n rect: rect,\n };\n };\n // shamelessly stolen from from https://gist.github.com/gre/1650294\n self.easingFunctions = {\n linear: function (t) {\n return t;\n },\n easeInQuad: function (t) {\n return t * t;\n },\n easeOutQuad: function (t) {\n return t * (2 - t);\n },\n easeInOutQuad: function (t) {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n },\n easeInCubic: function (t) {\n return t * t * t;\n },\n easeOutCubic: function (t) {\n return --t * t * t + 1;\n },\n easeInOutCubic: function (t) {\n return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n },\n easeInQuart: function (t) {\n return t * t * t * t;\n },\n easeOutQuart: function (t) {\n return 1 - --t * t * t * t;\n },\n easeInOutQuart: function (t) {\n return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\n },\n easeInQuint: function (t) {\n return t * t * t * t * t;\n },\n easeOutQuint: function (t) {\n return 1 + --t * t * t * t * t;\n },\n easeInOutQuint: function (t) {\n return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t;\n },\n };\n self.easing = function (t, b, c, d) {\n return (\n c * self.easingFunctions[self.attributes.touchEasingMethod](t / d) + b\n );\n };\n self.calculatePPSTimed = function () {\n self.xPPST = -(\n (self.touchDelta.x - self.touchSigmaTimed.x) /\n (self.touchDelta.t - self.touchSigmaTimed.t)\n );\n self.yPPST = -(\n (self.touchDelta.y - self.touchSigmaTimed.y) /\n (self.touchDelta.t - self.touchSigmaTimed.t)\n );\n self.touchSigmaTimed = {\n x: self.touchDelta.x,\n y: self.touchDelta.y,\n t: performance.now(),\n };\n };\n self.calculatePPS = function () {\n self.xPPS = -(\n (self.touchDelta.x - self.touchSigma.x) /\n (self.touchDelta.t - self.touchSigma.t)\n );\n self.yPPS = -(\n (self.touchDelta.y - self.touchSigma.y) /\n (self.touchDelta.t - self.touchSigma.t)\n );\n self.touchSigma = {\n x: self.touchDelta.x,\n y: self.touchDelta.y,\n t: performance.now(),\n };\n };\n self.touchEndAnimation = function () {\n if (!self.canvas || !self.scrollBox.scrollTo) {\n return requestAnimationFrame(self.touchEndAnimation);\n }\n var n = performance.now(),\n d = self.attributes.touchReleaseAnimationDurationMs,\n t;\n t = n - self.touchDelta.t;\n self.animationFrames += 1;\n self.scrollAnimation.x = self.easing(\n t,\n self.touchDelta.scrollLeft,\n self.touchAnimateTo.x,\n d,\n );\n self.scrollAnimation.y = self.easing(\n t,\n self.touchDelta.scrollTop,\n self.touchAnimateTo.y,\n d,\n );\n if (\n t > d ||\n (self.scrollAnimation.y === self.scrollBox.scrollTop &&\n self.scrollAnimation.x === self.scrollBox.scrollLeft) ||\n self.stopAnimation\n ) {\n return;\n }\n self.scrollBox.scrollTo(self.scrollAnimation.x, self.scrollAnimation.y);\n requestAnimationFrame(self.touchEndAnimation);\n };\n self.touchEditCell = function (cell) {\n self.beginEditAt(cell.columnIndex, cell.rowIndex);\n };\n self.touchCell = function (e) {\n return function () {\n clearInterval(self.calculatePPSTimer);\n var i,\n pos = self.getTouchPos(e);\n if (\n Math.abs(self.touchDelta.x) + Math.abs(self.touchDelta.y) <\n self.attributes.touchDeadZone\n ) {\n i = self.getCellAt(pos.x, pos.y);\n if (!i) {\n return;\n }\n if (\n self.touchingCell &&\n self.touchingCell.rowIndex === i.rowIndex &&\n self.touchingCell.columnIndex === i.columnIndex\n ) {\n self.touchEditCell(i);\n return;\n }\n if (self.input && self.input.editCell) {\n self.endEdit();\n }\n self.touchingCell = i;\n self.selectArea({\n top: i.rowIndex,\n bottom: i.rowIndex,\n left: i.columnIndex,\n right: i.columnIndex,\n });\n self.draw(true);\n }\n };\n };\n self.touchstart = function (e) {\n if (e.changedTouches[0]) {\n self.touchStart = self.getTouchPos(e);\n self.startingCell = self.getCellAt(\n self.touchStart.x,\n self.touchStart.y,\n true,\n );\n }\n if (\n self.dispatchEvent('touchstart', {\n NativeEvent: e,\n cell: self.startingCell,\n })\n ) {\n return;\n }\n self.disposeContextMenu();\n clearInterval(self.calculatePPSTimer);\n clearTimeout(self.touchContextTimeout);\n self.touchStartEvent = e;\n self.stopAnimation = true;\n self.animationFrames = 0;\n self.stopPropagation(e);\n e.preventDefault();\n if (e.touches.length === 1 && e.changedTouches[0] && !self.zoomAltered) {\n self.touchLength = 1;\n self.touchStart = self.touchStart || self.touchStart1;\n self.touchScrollStart = {\n x: self.scrollBox.scrollLeft,\n y: self.scrollBox.scrollTop,\n t: performance.now(),\n };\n self.touchDelta = {\n x: 0,\n y: 0,\n scrollLeft: self.scrollBox.scrollLeft,\n scrollTop: self.scrollBox.scrollTop,\n t: self.touchScrollStart.t,\n };\n self.touchSigma = {\n x: self.touchDelta.x,\n y: self.touchDelta.y,\n t: self.touchDelta.t,\n };\n self.touchSigmaTimed = {\n x: self.touchDelta.x,\n y: self.touchDelta.y,\n t: self.touchDelta.t,\n };\n self.touchContextTimeout = setTimeout(function () {\n self.contextmenuEvent(e, self.touchStart);\n }, self.attributes.touchContextMenuTimeMs);\n self.calculatePPSTimer = setInterval(\n self.calculatePPSTimed,\n touchTimerMs,\n );\n if (\n self.startingCell &&\n (self.startingCell.isGrid ||\n ['tree', 'inherit'].indexOf(self.startingCell.context) !== -1)\n ) {\n self.hasFocus = false;\n return;\n }\n self.hasFocus = true;\n if (self.startingCell.isHeader) {\n if (self.startingCell.isRowHeader) {\n self.selectArea({\n top: self.startingCell.rowIndex,\n bottom: self.startingCell.rowIndex,\n left: 0,\n right: self.getVisibleSchema().length - 1,\n });\n self.draw(true);\n } else if (self.startingCell.isColumnHeader) {\n if (self.attributes.columnHeaderClickBehavior === 'sort') {\n if (self.orderBy === self.startingCell.header.name) {\n self.orderDirection =\n self.orderDirection === 'asc' ? 'desc' : 'asc';\n } else {\n self.orderDirection = 'asc';\n }\n self.order(self.startingCell.header.name, self.orderDirection);\n }\n if (self.attributes.columnHeaderClickBehavior === 'select') {\n self.selectArea({\n top: 0,\n bottom: self.data.length - 1,\n left: self.startingCell.columnIndex,\n right: self.startingCell.columnIndex,\n });\n self.draw(true);\n }\n }\n self.touchEndEvents(e);\n return;\n }\n }\n if (self.zoomAltered) {\n return;\n }\n document.body.addEventListener('touchmove', self.touchmove, {\n passive: false,\n });\n document.body.addEventListener('touchend', self.touchend, false);\n document.body.addEventListener('touchcancel', self.touchcancel, false);\n self.draw(true);\n };\n self.touchSelect = function (cell, handleType) {\n if (cell.rowIndex === undefined || cell.columnIndex === undefined) {\n return;\n }\n self.touchSelecting = true;\n var bounds = self.getSelectionBounds();\n if (\n handleType === 'selection-handle-bl' &&\n cell.rowIndex >= bounds.top &&\n cell.columnIndex <= bounds.right\n ) {\n bounds.bottom = cell.rowIndex;\n bounds.left = cell.columnIndex;\n } else if (\n handleType === 'selection-handle-tl' &&\n cell.rowIndex <= bounds.bottom &&\n cell.columnIndex <= bounds.right\n ) {\n bounds.top = cell.rowIndex;\n bounds.left = cell.columnIndex;\n } else if (\n handleType === 'selection-handle-tr' &&\n cell.rowIndex <= bounds.bottom &&\n cell.columnIndex >= bounds.left\n ) {\n bounds.top = cell.rowIndex;\n bounds.right = cell.columnIndex;\n } else if (\n handleType === 'selection-handle-br' &&\n cell.rowIndex >= bounds.top &&\n cell.columnIndex >= bounds.left\n ) {\n bounds.bottom = cell.rowIndex;\n bounds.right = cell.columnIndex;\n }\n if (self.attributes.selectionMode === 'row' || cell.rowIndex === -1) {\n bounds.left = 0;\n bounds.right = self.getSchema().length - 1;\n } else {\n bounds.left = Math.max(0, bounds.left);\n }\n self.selectArea(bounds);\n self.draw(true);\n };\n function touchMove(e) {\n var ch, rw, rScrollZone, lScrollZone, bScrollZone, tScrollZone, sbw, t1, t2;\n if (self.dispatchEvent('beforetouchmove', { NativeEvent: e })) {\n return;\n }\n clearTimeout(touchScrollTimeout);\n if (e.changedTouches[0]) {\n self.touchPosition = self.getTouchPos(e);\n }\n if (e.changedTouches[1]) {\n self.touchPosition1 = self.getTouchPos(e, 1);\n }\n if (\n Math.abs(self.touchDelta.x) + Math.abs(self.touchDelta.y) >\n self.attributes.touchDeadZone\n ) {\n clearTimeout(self.touchContextTimeout);\n }\n if (e.touches.length === 2 && self.touchPosition && self.touchPosition1) {\n t1 = self.touchPosition.y;\n t2 = self.touchPosition1.y;\n if (!self.zoomDeltaStart) {\n self.zoomDeltaStart = Math.abs(t1 - t2);\n self.startScale = self.scale;\n }\n self.touchLength = 2;\n self.scaleDelta = self.zoomDeltaStart - Math.abs(t1 - t2);\n self.scale =\n self.startScale -\n self.scaleDelta * self.attributes.touchZoomSensitivity;\n self.scale = Math.min(\n Math.max(self.scale, self.attributes.touchZoomMin),\n self.attributes.touchZoomMax,\n );\n self.zoomAltered = true;\n self.resize(true);\n self.resizeChildGrids();\n return;\n }\n if (self.zoomAltered) {\n return;\n }\n self.touchLength = 1;\n self.touchPosition = self.touchPosition || self.touchPosition1;\n ch = self.getColumnHeaderCellHeight();\n rw = self.getRowHeaderCellWidth();\n rScrollZone =\n self.width - self.style.scrollBarWidth - self.touchPosition.x <\n self.attributes.selectionScrollZone;\n lScrollZone =\n self.touchPosition.x - rw < self.attributes.selectionScrollZone;\n bScrollZone =\n self.height - self.style.scrollBarWidth - self.touchPosition.y <\n self.attributes.selectionScrollZone;\n tScrollZone =\n self.touchPosition.y - ch < self.attributes.selectionScrollZone;\n sbw = self.style.scrollBarWidth;\n function touchScroll() {\n var x = self.scrollBox.scrollLeft,\n y = self.scrollBox.scrollTop;\n x += rScrollZone ? self.attributes.selectionScrollIncrement : 0;\n y += bScrollZone ? self.attributes.selectionScrollIncrement : 0;\n y -= tScrollZone ? self.attributes.selectionScrollIncrement : 0;\n x -= lScrollZone ? self.attributes.selectionScrollIncrement : 0;\n self.scrollBox.scrollTo(x, y);\n touchScrollTimeout = setTimeout(\n touchScroll,\n self.attributes.scrollRepeatRate,\n );\n }\n e.stopPropagation();\n self.touchDelta = {\n x: self.touchPosition.x - self.touchStart.x,\n y: self.touchPosition.y - self.touchStart.y,\n scrollLeft: self.scrollBox.scrollLeft,\n scrollTop: self.scrollBox.scrollTop,\n t: performance.now(),\n };\n self.currentCell = self.getCellAt(\n self.touchPosition.x,\n self.touchPosition.y,\n );\n self.dispatchEvent('touchmove', { NativeEvent: e, cell: self.currentCell });\n self.calculatePPS();\n self.touchDuration = performance.now() - self.touchScrollStart.t;\n self.stopAnimation = true;\n self.animationFrames = 0;\n if (\n self.touchSelecting &&\n (rScrollZone || lScrollZone || tScrollZone || bScrollZone)\n ) {\n touchScroll();\n }\n if (/vertical-scroll-/.test(self.startingCell.style)) {\n self.scrollBox.scrollTop =\n self.scrollBox.scrollHeight *\n ((self.touchPosition.y - ch - sbw) /\n (self.scrollBox.height - sbw - ch));\n return;\n }\n if (/horizontal-scroll-/.test(self.startingCell.style)) {\n self.scrollBox.scrollLeft =\n self.scrollBox.scrollWidth *\n ((self.touchPosition.x - rw - sbw) / (self.scrollBox.width - sbw - rw));\n return;\n }\n if (/selection-handle-/.test(self.startingCell.style)) {\n self.touchSelect(self.currentCell, self.startingCell.style);\n return;\n }\n self.scrollBox.scrollTo(\n self.touchScrollStart.x - self.touchDelta.x,\n self.touchScrollStart.y - self.touchDelta.y,\n );\n }\n self.touchmove = function (e) {\n if (touchMoving) {\n return;\n }\n requestAnimationFrame(function () {\n touchMoving = true;\n touchMove(e);\n touchMoving = false;\n });\n };\n self.touchEndEvents = function (e) {\n self.zoomDeltaStart = undefined;\n self.touchSelecting = false;\n clearInterval(self.touchScrollTimeout);\n clearInterval(self.touchContextTimeout);\n clearInterval(self.calculatePPSTimer);\n e.stopPropagation();\n document.body.removeEventListener('touchmove', self.touchmove, {\n passive: false,\n });\n document.body.removeEventListener('touchend', self.touchend, false);\n document.body.removeEventListener('touchcancel', self.touchcancel, false);\n };\n self.touchend = function (e) {\n if (\n self.dispatchEvent('touchend', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n self.zoomDeltaStart = undefined;\n if (e.changedTouches[0]) {\n self.touchPosition = undefined;\n }\n if (e.changedTouches[1]) {\n self.touchPosition1 = undefined;\n }\n if (self.zoomAltered) {\n if (e.touches.length === 0) {\n self.zoomAltered = false;\n }\n return;\n }\n var dz =\n Math.abs(self.touchDelta.x) + Math.abs(self.touchDelta.y) <\n self.attributes.touchDeadZone;\n if (isNaN(self.xPPS)) {\n self.xPPS = 0;\n }\n if (isNaN(self.yPPS)) {\n self.yPPS = 0;\n }\n if (isNaN(self.xPPST)) {\n self.xPPST = 0;\n }\n if (isNaN(self.yPPST)) {\n self.yPPST = 0;\n }\n self.touchAnimateTo.x =\n self.xPPS * self.attributes.touchReleaseAcceleration;\n self.touchAnimateTo.y =\n self.yPPS * self.attributes.touchReleaseAcceleration;\n self.calculatePPSTimed();\n if (dz && !self.contextMenu) {\n self.touchCell(self.touchStartEvent)();\n } else if (\n self.animationFrames === 0 &&\n (Math.abs(self.xPPST) > self.attributes.scrollAnimationPPSThreshold ||\n Math.abs(self.yPPST) > self.attributes.scrollAnimationPPSThreshold) &&\n !/-scroll-/.test(self.startingCell.style) &&\n !dz\n ) {\n self.stopAnimation = false;\n self.touchEndAnimation();\n }\n self.touchEndEvents(e);\n };\n self.touchcancel = function (e) {\n if (\n self.dispatchEvent('touchcancel', {\n NativeEvent: e,\n cell: self.currentCell,\n })\n ) {\n return;\n }\n self.touchEndEvents(e);\n };\n}\n","module.exports=function(e){var o={};function a(t){if(o[t])return o[t].exports;var r=o[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,a),r.l=!0,r.exports}return a.m=e,a.c=o,a.d=function(e,o,t){a.o(e,o)||Object.defineProperty(e,o,{enumerable:!0,get:t})},a.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},a.t=function(e,o){if(1&o&&(e=a(e)),8&o)return e;if(4&o&&\"object\"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,\"default\",{enumerable:!0,value:e}),2&o&&\"string\"!=typeof e)for(var r in e)a.d(t,r,function(o){return e[o]}.bind(null,r));return t},a.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(o,\"a\",o),o},a.o=function(e,o){return Object.prototype.hasOwnProperty.call(e,o)},a.p=\"\",a(a.s=0)}([function(e,o,a){\"use strict\";Object.defineProperty(o,\"__esModule\",{value:!0});var t=a(1),r=Object.keys(t.default).reduce((function(e,o){return e.concat(t.default[o])}),[]);o.default=function(e){return-1===r.indexOf(e.key)}},function(e,o,a){\"use strict\";Object.defineProperty(o,\"__esModule\",{value:!0});o.default={modifier:[\"Alt\",\"AltGraph\",\"CapsLock\",\"Control\",\"Fn\",\"FnLock\",\"Meta\",\"NumLock\",\"ScrollLock\",\"Shift\",\"Symbol\",\"SymbolLock\"],legacyModifier:[\"Hyper\",\"Super\"],whiteSpace:[\"Enter\",\"Tab\"],navigation:[\"ArrowDown\",\"ArrowLeft\",\"ArrowRight\",\"ArrowUp\",\"End\",\"Home\",\"PageDown\",\"PageUp\"],editing:[\"Backspace\",\"Clear\",\"Copy\",\"CrSel\",\"Cut\",\"Delete\",\"EraseEof\",\"ExSel\",\"Insert\",\"Paste\",\"Redo\",\"Undo\"],ui:[\"Accept\",\"Again\",\"Attn\",\"Cancel\",\"ContextMenu\",\"Escape\",\"Execute\",\"Find\",\"Help\",\"Pause\",\"Play\",\"Props\",\"Select\",\"ZoomIn\",\"ZoomOut\"],device:[\"BrightnessDown\",\"BrightnessUp\",\"Eject\",\"LogOff\",\"Power\",\"PowerOff\",\"PrintScreen\",\"Hibernate\",\"Standby\",\"WakeUp\"],imeCompositionKeys:[\"AllCandidates\",\"Alphanumeric\",\"CodeInput\",\"Compose\",\"Convert\",\"Dead\",\"FinalMode\",\"GroupFirst\",\"GroupLast\",\"GroupNext\",\"GroupPrevious\",\"ModeChange\",\"NextCandidate\",\"NonConvert\",\"PreviousCandidate\",\"Process\",\"SingleCandidate\"],koreanSpecific:[\"HangulMode\",\"HanjaMode\",\"JunjaMode\"],japaneseSpecific:[\"Eisu\",\"Hankaku\",\"Hiragana\",\"HiraganaKatakana\",\"KanaMode\",\"KanjiMode\",\"Katakana\",\"Romaji\",\"Zenkaku\",\"ZenkakuHankaku\"],commonFunction:[\"F1\",\"F2\",\"F3\",\"F4\",\"F5\",\"F6\",\"F7\",\"F8\",\"F9\",\"F10\",\"F11\",\"F12\",\"Soft1\",\"Soft2\",\"Soft3\",\"Soft4\"],multimedia:[\"ChannelDown\",\"ChannelUp\",\"Close\",\"MailForward\",\"MailReply\",\"MailSend\",\"MediaClose\",\"MediaFastForward\",\"MediaPause\",\"MediaPlay\",\"MediaPlayPause\",\"MediaRecord\",\"MediaRewind\",\"MediaStop\",\"MediaTrackNext\",\"MediaTrackPrevious\",\"New\",\"Open\",\"Print\",\"Save\",\"SpellCheck\"],multimediaNumpad:[\"Key11\",\"Key12\"],audio:[\"AudioBalanceLeft\",\"AudioBalanceRight\",\"AudioBassBoostDown\",\"AudioBassBoostToggle\",\"AudioBassBoostUp\",\"AudioFaderFront\",\"AudioFaderRear\",\"AudioSurroundModeNext\",\"AudioTrebleDown\",\"AudioTrebleUp\",\"AudioVolumeDown\",\"AudioVolumeUp\",\"AudioVolumeMute\",\"MicrophoneToggle\",\"MicrophoneVolumeDown\",\"MicrophoneVolumeUp\",\"MicrophoneVolumeMute\"],speech:[\"SpeechCorrectionList\",\"SpeechInputToggle\"],application:[\"LaunchApplication1\",\"LaunchApplication2\",\"LaunchCalendar\",\"LaunchContacts\",\"LaunchMail\",\"LaunchMediaPlayer\",\"LaunchMusicPlayer\",\"LaunchPhone\",\"LaunchScreenSaver\",\"LaunchSpreadsheet\",\"LaunchWebBrowser\",\"LaunchWebCam\",\"LaunchWordProcessor\"],browser:[\"BrowserBack\",\"BrowserFavorites\",\"BrowserForward\",\"BrowserHome\",\"BrowserRefresh\",\"BrowserSearch\",\"BrowserStop\"],mobilePhone:[\"AppSwitch\",\"Call\",\"Camera\",\"CameraFocus\",\"EndCall\",\"GoBack\",\"GoHome\",\"HeadsetHook\",\"LastNumberRedial\",\"Notification\",\"MannerMode\",\"VoiceDial\"],tv:[\"TV\",\"TV3DMode\",\"TVAntennaCable\",\"TVAudioDescription\",\"TVAudioDescriptionMixDown\",\"TVAudioDescriptionMixUp\",\"TVContentsMenu\",\"TVDataService\",\"TVInput\",\"TVInputComponent1\",\"TVInputComponent2\",\"TVInputComposite1\",\"TVInputComposite2\",\"TVInputHDMI1\",\"TVInputHDMI2\",\"TVInputHDMI3\",\"TVInputHDMI4\",\"TVInputVGA1\",\"TVMediaContext\",\"TVNetwork\",\"TVNumberEntry\",\"TVPower\",\"TVRadioService\",\"TVSatellite\",\"TVSatelliteBS\",\"TVSatelliteCS\",\"TVSatelliteToggle\",\"TVTerrestrialAnalog\",\"TVTerrestrialDigital\",\"TVTimer\"],mediaControls:[\"AVRInput\",\"AVRPower\",\"ColorF0Red\",\"ColorF1Green\",\"ColorF2Yellow\",\"ColorF3Blue\",\"ColorF4Grey\",\"ColorF5Brown\",\"ClosedCaptionToggle\",\"Dimmer\",\"DisplaySwap\",\"DVR\",\"Exit\",\"FavoriteClear0\",\"FavoriteClear1\",\"FavoriteClear2\",\"FavoriteClear3\",\"FavoriteRecall0\",\"FavoriteRecall1\",\"FavoriteRecall2\",\"FavoriteRecall3\",\"FavoriteStore0\",\"FavoriteStore1\",\"FavoriteStore2\",\"FavoriteStore3\",\"Guide\",\"GuideNextDay\",\"GuidePreviousDay\",\"Info\",\"InstantReplay\",\"Link\",\"ListProgram\",\"LiveContent\",\"Lock\",\"MediaApps\",\"MediaAudioTrack\",\"MediaLast\",\"MediaSkipBackward\",\"MediaSkipForward\",\"MediaStepBackward\",\"MediaStepForward\",\"MediaTopMenu\",\"NavigateIn\",\"NavigateNext\",\"NavigateOut\",\"NavigatePrevious\",\"NextFavoriteChannel\",\"NextUserProfile\",\"OnDemand\",\"Pairing\",\"PinPDown\",\"PinPMove\",\"PinPToggle\",\"PinPUp\",\"PlaySpeedDown\",\"PlaySpeedReset\",\"PlaySpeedUp\",\"RandomToggle\",\"RcLowBattery\",\"RecordSpeedNext\",\"RfBypass\",\"ScanChannelsToggle\",\"ScreenModeNext\",\"Settings\",\"SplitScreenToggle\",\"STBInput\",\"STBPower\",\"Subtitle\",\"Teletext\",\"VideoModeNext\",\"Wink\",\"ZoomToggle\"]}}]).default;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(\"./lib/main.js\");\n"],"sourceRoot":""}
1
+ {"version":3,"file":"canvas-datagrid.debug.js","mappings":"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","sources":["webpack://canvasDatagrid/webpack/universalModuleDefinition","webpack://canvasDatagrid/./lib/button.js","webpack://canvasDatagrid/./lib/component.js","webpack://canvasDatagrid/./lib/contextMenu.js","webpack://canvasDatagrid/./lib/defaults.js","webpack://canvasDatagrid/./lib/dom.js","webpack://canvasDatagrid/./lib/draw.js","webpack://canvasDatagrid/./lib/events/index.js","webpack://canvasDatagrid/./lib/events/util.js","webpack://canvasDatagrid/./lib/groups/util.js","webpack://canvasDatagrid/./lib/intf.js","webpack://canvasDatagrid/./lib/publicMethods.js","webpack://canvasDatagrid/./lib/selections/index.js","webpack://canvasDatagrid/./lib/selections/util.js","webpack://canvasDatagrid/./lib/touch.js","webpack://canvasDatagrid/./node_modules/is-printable-key-event/dist/index.js","webpack://canvasDatagrid/webpack/bootstrap","webpack://canvasDatagrid/webpack/runtime/compat get default export","webpack://canvasDatagrid/webpack/runtime/define property getters","webpack://canvasDatagrid/webpack/runtime/hasOwnProperty shorthand","webpack://canvasDatagrid/webpack/runtime/make namespace object","webpack://canvasDatagrid/./lib/main.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"canvasDatagrid\"] = factory();\n\telse\n\t\troot[\"canvasDatagrid\"] = factory();\n})(self, function() {\nreturn ","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false, Event: false*/\n'use strict';\n\nexport default function (self) {\n let zIndexTop;\n\n function applyButtonMenuItemStyle(buttonMenuItemContainer) {\n self.createInlineStyle(\n buttonMenuItemContainer,\n 'canvas-datagrid-button-menu-item' + (self.mobile ? '-mobile' : ''),\n );\n buttonMenuItemContainer.addEventListener('mouseover', function () {\n self.createInlineStyle(\n buttonMenuItemContainer,\n 'canvas-datagrid-button-menu-item:hover',\n );\n });\n buttonMenuItemContainer.addEventListener('mouseout', function () {\n self.createInlineStyle(\n buttonMenuItemContainer,\n 'canvas-datagrid-button-menu-item',\n );\n });\n }\n\n function applyButtonStyle(button) {\n self.createInlineStyle(button, 'canvas-datagrid-button-wrapper');\n button.addEventListener('mouseover', function () {\n if (!self.buttonMenu) {\n self.createInlineStyle(button, 'canvas-datagrid-button-wrapper:hover');\n }\n });\n button.addEventListener('mouseout', function () {\n if (!self.buttonMenu) {\n self.createInlineStyle(button, 'canvas-datagrid-button-wrapper');\n }\n });\n }\n\n function createButton(pos, items, imgSrc) {\n var wrapper = document.createElement('div'),\n buttonArrow = document.createElement('div'),\n buttonIcon = document.createElement('div'),\n intf = {};\n\n if (!Array.isArray(items)) {\n throw new Error('createButton expects an array.');\n }\n\n function init() {\n var loc = {},\n s = self.scrollOffset(self.canvas);\n\n if (zIndexTop === undefined) {\n zIndexTop = self.style.buttonZIndex;\n }\n\n applyButtonStyle(wrapper);\n self.createInlineStyle(buttonIcon, 'canvas-datagrid-button-icon');\n self.createInlineStyle(buttonArrow, 'canvas-datagrid-button-arrow');\n\n loc.x = pos.left - s.left;\n loc.y = pos.top - s.top;\n loc.height = 0;\n zIndexTop += 1;\n wrapper.style.position = 'absolute';\n wrapper.style.zIndex = zIndexTop;\n wrapper.style.left = loc.x + 'px';\n wrapper.style.top = loc.y + 'px';\n wrapper.left = pos.left + self.scrollBox.scrollLeft;\n wrapper.top = pos.top + self.scrollBox.scrollTop;\n buttonArrow.innerHTML = self.style.buttonArrowDownHTML;\n if (imgSrc) {\n let img = document.createElement('img');\n img.setAttribute('src', imgSrc);\n img.style.maxWidth = '100%';\n img.style.height = '100%';\n buttonIcon.appendChild(img);\n }\n wrapper.appendChild(buttonIcon);\n wrapper.appendChild(buttonArrow);\n document.body.appendChild(wrapper);\n wrapper.addEventListener('click', toggleButtonMenu);\n }\n\n intf.wrapper = wrapper;\n intf.items = items;\n init();\n\n intf.dispose = function () {\n if (wrapper.parentNode) {\n wrapper.parentNode.removeChild(wrapper);\n }\n };\n return intf;\n }\n\n function toggleButtonMenu() {\n function createDisposeEvent() {\n requestAnimationFrame(function () {\n document.addEventListener('click', self.disposeButtonMenu);\n });\n }\n if (self.buttonMenu) {\n self.disposeButtonMenu();\n } else {\n let pos = {\n left: self.button.wrapper.left - self.scrollBox.scrollLeft,\n top:\n self.button.wrapper.top +\n self.button.wrapper.offsetHeight -\n self.scrollBox.scrollTop,\n };\n self.buttonMenu = createButtonMenu(pos, self.button.items);\n self.createInlineStyle(\n self.button.wrapper,\n 'canvas-datagrid-button-wrapper:active',\n );\n createDisposeEvent();\n }\n }\n\n function createButtonMenu(pos, items) {\n var buttonMenu = document.createElement('div'),\n selectedIndex = -1,\n intf = {},\n rect;\n\n function createItems() {\n function addItem(item, menuItemContainer) {\n function addContent(content) {\n if (content === null) {\n return;\n }\n\n if (typeof content === 'object') {\n menuItemContainer.appendChild(content);\n return;\n }\n\n applyButtonMenuItemStyle(menuItemContainer);\n menuItemContainer.innerHTML = content;\n return;\n }\n\n addContent(item.title);\n item.buttonMenuItemContainer = menuItemContainer;\n\n if (item.click) {\n menuItemContainer.addEventListener('click', function (ev) {\n item.click.apply(self, [ev]);\n self.disposeButton();\n });\n }\n }\n\n for (let item of items) {\n var buttonMenuItemContainer = document.createElement('div');\n addItem(item, buttonMenuItemContainer);\n buttonMenu.appendChild(buttonMenuItemContainer);\n }\n }\n\n function clickIndex(idx) {\n items[idx].buttonMenuItemContainer.dispatchEvent(new Event('click'));\n }\n\n function init() {\n var loc = {},\n s = self.scrollOffset(self.canvas);\n\n if (zIndexTop === undefined) {\n zIndexTop = self.style.buttonZIndex;\n }\n\n createItems();\n self.createInlineStyle(\n buttonMenu,\n 'canvas-datagrid-button-menu' + (self.mobile ? '-mobile' : ''),\n );\n\n loc.x = pos.left - s.left;\n loc.y = pos.top - s.top;\n loc.height = 0;\n zIndexTop += 1;\n buttonMenu.style.position = 'absolute';\n buttonMenu.style.zIndex = zIndexTop;\n buttonMenu.style.left = loc.x + 'px';\n buttonMenu.style.top = loc.y + 'px';\n document.body.appendChild(buttonMenu);\n rect = buttonMenu.getBoundingClientRect();\n\n if (rect.bottom > window.innerHeight) {\n loc.y =\n self.button.wrapper.top -\n buttonMenu.offsetHeight -\n self.scrollBox.scrollTop;\n if (loc.y < 0) {\n loc.y = self.style.buttonMenuWindowMargin;\n }\n\n if (\n buttonMenu.offsetHeight >\n window.innerHeight - self.style.buttonMenuWindowMargin\n ) {\n buttonMenu.style.height =\n window.innerHeight - self.style.buttonMenuWindowMargin * 2 + 'px';\n }\n }\n\n if (rect.right > window.innerWidth) {\n loc.x -=\n rect.right - window.innerWidth + self.style.buttonMenuWindowMargin;\n }\n\n if (loc.x < 0) {\n loc.x = self.style.buttonMenuWindowMargin;\n }\n\n if (loc.y < 0) {\n loc.y = self.style.buttonMenuWindowMargin;\n }\n\n buttonMenu.style.left = loc.x + 'px';\n buttonMenu.style.top = loc.y + 'px';\n }\n\n intf.buttonMenu = buttonMenu;\n init();\n intf.clickIndex = clickIndex;\n intf.rect = rect;\n intf.items = items;\n\n intf.dispose = function () {\n if (buttonMenu.parentNode) {\n buttonMenu.parentNode.removeChild(buttonMenu);\n }\n };\n\n Object.defineProperty(intf, 'selectedIndex', {\n get: function get() {\n return selectedIndex;\n },\n set: function set(value) {\n if (typeof value !== 'number' || isNaN(value) || !isFinite(value)) {\n throw new Error('Button menu selected index must be a sane number.');\n }\n\n selectedIndex = value;\n\n if (selectedIndex > items.length - 1) {\n selectedIndex = items.length - 1;\n }\n\n if (selectedIndex < 0) {\n selectedIndex = 0;\n }\n\n items.forEach(function (item, index) {\n if (index === selectedIndex) {\n return self.createInlineStyle(\n item.buttonMenuItemContainer,\n 'canvas-datagrid-button-menu-item:hover',\n );\n }\n\n self.createInlineStyle(\n item.buttonMenuItemContainer,\n 'canvas-datagrid-button-menu-item',\n );\n });\n },\n });\n return intf;\n }\n\n self.disposeButtonMenu = function () {\n if (self.buttonMenu) {\n document.removeEventListener('click', self.disposeButtonMenu);\n self.buttonMenu.dispose();\n self.buttonMenu = undefined;\n self.createInlineStyle(\n self.button.wrapper,\n 'canvas-datagrid-button-wrapper:hover',\n );\n }\n };\n\n self.disposeButton = function (e) {\n if (e && e.keyCode !== 27) return;\n document.removeEventListener('keydown', self.disposeButton);\n zIndexTop = self.style.buttonZIndex;\n self.disposeButtonMenu();\n\n if (self.button) {\n self.button.dispose();\n }\n\n self.button = undefined;\n };\n\n self.moveButtonPos = function () {\n self.button.wrapper.style.left =\n self.button.wrapper.left - self.scrollBox.scrollLeft + 'px';\n self.button.wrapper.style.top =\n self.button.wrapper.top - self.scrollBox.scrollTop + 'px';\n self.disposeButtonMenu();\n };\n\n self.attachButton = function (pos, items, imgSrc) {\n function createDisposeEvent() {\n requestAnimationFrame(function () {\n document.addEventListener('keydown', self.disposeButton);\n });\n }\n\n if (self.button) {\n self.disposeButton();\n }\n\n self.button = createButton(pos, items, imgSrc);\n createDisposeEvent();\n };\n return;\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport defaults from './defaults';\n\nexport default function () {\n var typeMap,\n component = {};\n component.dehyphenateProperty = function hyphenateProperty(prop) {\n prop = prop.replace('--cdg-', '');\n var p = '',\n nextLetterCap;\n Array.prototype.forEach.call(prop, function (char) {\n if (nextLetterCap) {\n nextLetterCap = false;\n p += char.toUpperCase();\n return;\n }\n if (char === '-') {\n nextLetterCap = true;\n return;\n }\n p += char;\n });\n return p;\n };\n component.hyphenateProperty = function hyphenateProperty(prop, cust) {\n var p = '';\n Array.prototype.forEach.call(prop, function (char) {\n if (char === char.toUpperCase()) {\n p += '-' + char.toLowerCase();\n return;\n }\n p += char;\n });\n return (cust ? '--cdg-' : '') + p;\n };\n function getDefaultItem(base, item) {\n var i = {},\n r;\n defaults(i);\n r = i.defaults[base].filter(function (i) {\n return (\n i[0].toLowerCase() === item.toLowerCase() ||\n component.hyphenateProperty(i[0]) === item.toLowerCase() ||\n component.hyphenateProperty(i[0], true) === item.toLowerCase()\n );\n })[0];\n return r;\n }\n component.applyComponentStyle = function (supressChangeAndDrawEvents, intf) {\n if (!intf.isComponent) {\n return;\n }\n var cStyle = window.getComputedStyle(\n intf.tagName === 'CANVAS-DATAGRID' ? intf : intf.canvas,\n null,\n ),\n defs = {};\n intf.computedStyle = cStyle;\n defaults(defs);\n defs.defaults.styles.forEach(function (def) {\n var val;\n val = cStyle.getPropertyValue(component.hyphenateProperty(def[0], true));\n if (val === '') {\n val = cStyle.getPropertyValue(\n component.hyphenateProperty(def[0], false),\n );\n }\n if (\n /^overflow[XY]$/.test(def[0]) &&\n typeof val === 'string' &&\n val.trim() === 'visible'\n ) {\n // 'visible' is the CSS default, not something the page asked for,\n // and not a grid value: keep the overflow set through grid.style\n // instead of overwriting it on every style pass (#248)\n return;\n }\n if (val !== '' && typeof val === 'string') {\n intf.setStyleProperty(\n def[0],\n typeMap[typeof def[1]](\n val.replace(/^\\s+/, '').replace(/\\s+$/, ''),\n def[1],\n ),\n true,\n );\n }\n });\n if (!supressChangeAndDrawEvents && intf.dispatchEvent) {\n requestAnimationFrame(function () {\n intf.resize(true);\n });\n intf.dispatchEvent('stylechanged', intf.style);\n }\n };\n typeMap = {\n data: function (strData) {\n try {\n return JSON.parse(strData);\n } catch (e) {\n throw new Error('Cannot read JSON data in canvas-datagrid data.');\n }\n },\n schema: function (strSchema) {\n try {\n return JSON.parse(strSchema);\n } catch (e) {\n throw new Error(\n 'Cannot read JSON data in canvas-datagrid schema attribute.',\n );\n }\n },\n number: function (strNum, def) {\n var n = parseInt(strNum, 10);\n return isNaN(n) ? def : n;\n },\n boolean: function (strBool) {\n return /true/i.test(strBool);\n },\n string: function (str) {\n return str;\n },\n };\n component.getObservableAttributes = function () {\n var i = {},\n attrs = ['data', 'schema', 'style', 'className', 'name'];\n defaults(i);\n i.defaults.attributes.forEach(function (attr) {\n attrs.push(attr[0].toLowerCase());\n });\n return attrs;\n };\n component.disconnectedCallback = function () {\n this.connected = false;\n // stop observing while detached so a removed grid can be collected (#338)\n if (this.observer && this.observer.disconnect) {\n this.observer.disconnect();\n this.observer = undefined;\n }\n if (typeof this.unobserveResizeTargets === 'function') {\n this.unobserveResizeTargets();\n }\n };\n component.connectedCallback = function () {\n var intf = this;\n intf.parentDOMNode.innerHTML = '';\n intf.parentDOMNode.appendChild(intf.canvas);\n intf.connected = true;\n component.observe(intf);\n if (typeof intf.observeResizeTargets === 'function') {\n intf.observeResizeTargets();\n }\n component.applyComponentStyle(true, intf);\n intf.resize(true);\n };\n component.adoptedCallback = function () {\n this.resize();\n };\n component.attributeChangedCallback = function (attrName, oldVal, newVal) {\n var tfn,\n intf = this,\n def;\n if (attrName === 'style') {\n component.applyComponentStyle(false, intf);\n return;\n }\n if (attrName === 'data') {\n if (intf.dataType === 'application/x-canvas-datagrid') {\n intf.dataType = 'application/json+x-canvas-datagrid';\n }\n intf.data = newVal;\n return;\n }\n if (attrName === 'schema') {\n intf.schema = typeMap.schema(newVal);\n return;\n }\n if (attrName === 'name') {\n intf.name = newVal;\n return;\n }\n if (attrName === 'class' || attrName === 'className') {\n return;\n }\n def = getDefaultItem('attributes', attrName);\n if (def) {\n tfn = typeMap[typeof def[1]];\n intf.attributes[def[0]] = tfn(newVal);\n return;\n }\n if (/^on/.test(attrName)) {\n // inline handler attributes need the Function constructor, which a\n // strict Content Security Policy forbids; degrade with a warning (#311)\n var handler;\n try {\n handler = new Function('e', newVal);\n } catch (err) {\n console.warn(\n 'canvas-datagrid: cannot bind the %s attribute under the current Content Security Policy; use addEventListener instead.',\n attrName,\n );\n return;\n }\n intf.addEventListener('on' + attrName, handler);\n }\n return;\n };\n component.observe = function (intf) {\n var observer;\n if (!window.MutationObserver) {\n return;\n }\n // connectedCallback runs on every (re)attach: never stack observers (#338)\n if (intf.observer && intf.observer.disconnect) {\n intf.observer.disconnect();\n }\n intf.applyComponentStyle = function () {\n component.applyComponentStyle(false, intf);\n intf.resize();\n };\n /**\n * Applies the computed css styles to the grid. In some browsers, changing directives in attached style sheets does not automatically update the styles in this component. It is necessary to call this method to update in these cases.\n * @memberof canvasDatagrid\n * @name applyComponentStyle\n * @method\n */\n observer = new window.MutationObserver(function (mutations) {\n var checkInnerHTML, checkStyle;\n Array.prototype.forEach.call(mutations, function (mutation) {\n if (\n mutation.attributeName === 'class' ||\n mutation.attributeName === 'style'\n ) {\n checkStyle = true;\n return;\n }\n if (mutation.target.nodeName === 'STYLE') {\n checkStyle = true;\n return;\n }\n if (\n mutation.target.parentNode &&\n mutation.target.parentNode.nodeName === 'STYLE'\n ) {\n checkStyle = true;\n return;\n }\n if (\n mutation.target === intf &&\n (mutation.addedNodes.length > 0 || mutation.type === 'characterData')\n ) {\n checkInnerHTML = true;\n }\n });\n if (checkStyle) {\n intf.applyComponentStyle(false, intf);\n }\n if (checkInnerHTML) {\n if (intf.dataType === 'application/x-canvas-datagrid') {\n intf.dataType = 'application/json+x-canvas-datagrid';\n }\n intf.data = intf.innerHTML;\n }\n });\n intf.observer = observer;\n observer.observe(intf, {\n characterData: true,\n childList: true,\n attributes: true,\n subtree: true,\n });\n Array.prototype.forEach.call(\n document.querySelectorAll('style'),\n function (el) {\n observer.observe(el, {\n characterData: true,\n childList: true,\n attributes: true,\n subtree: true,\n });\n },\n );\n };\n return component;\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false, Event: false*/\n'use strict';\n\nexport default function (self) {\n var zIndexTop, hoverScrollTimeout, autoCompleteContext;\n function applyContextItemStyle(contextItemContainer) {\n self.createInlineStyle(\n contextItemContainer,\n 'canvas-datagrid-context-menu-item' + (self.mobile ? '-mobile' : ''),\n );\n contextItemContainer.addEventListener('mouseover', function () {\n self.createInlineStyle(\n contextItemContainer,\n 'canvas-datagrid-context-menu-item:hover',\n );\n });\n contextItemContainer.addEventListener('mouseout', function () {\n self.createInlineStyle(\n contextItemContainer,\n 'canvas-datagrid-context-menu-item',\n );\n });\n }\n function createContextMenu(ev, pos, items, parentContextMenu) {\n var container = document.createElement('div'),\n upArrow = document.createElement('div'),\n downArrow = document.createElement('div'),\n children = [],\n selectedIndex = -1,\n intf = {},\n rect;\n if (!Array.isArray(items)) {\n throw new Error('createContextMenu expects an array.');\n }\n function createItems() {\n items.forEach(function (item) {\n var contextItemContainer = document.createElement('div'),\n childMenuArrow;\n function removeChildContext(e) {\n if (\n e.relatedTarget === container ||\n item.contextMenu.container === e.relatedTarget ||\n childMenuArrow === e.relatedTarget ||\n contextItemContainer === e.relatedTarget ||\n item.contextMenu.container.contains(e.relatedTarget)\n ) {\n return;\n }\n item.contextMenu.dispose();\n children.splice(children.indexOf(item.contextMenu), 1);\n item.contextMenu = undefined;\n contextItemContainer.removeEventListener(\n 'mouseout',\n removeChildContext,\n );\n container.removeEventListener('mouseout', removeChildContext);\n contextItemContainer.setAttribute('contextOpen', '0');\n contextItemContainer.setAttribute('opening', '0');\n }\n function contextAddCallback(items) {\n // check yet again if the user hasn't moved off\n if (\n contextItemContainer.getAttribute('opening') !== '1' ||\n contextItemContainer.getAttribute('contextOpen') === '1'\n ) {\n return;\n }\n var cPos = contextItemContainer.getBoundingClientRect();\n cPos = {\n left:\n cPos.left +\n self.style.childContextMenuMarginLeft +\n container.offsetWidth,\n top: cPos.top + self.style.childContextMenuMarginTop,\n bottom: cPos.bottom,\n right: cPos.right,\n };\n item.contextMenu = createContextMenu(ev, cPos, items, intf);\n contextItemContainer.setAttribute('contextOpen', '1');\n contextItemContainer.addEventListener('mouseout', removeChildContext);\n container.addEventListener('mouseout', removeChildContext);\n children.push(item.contextMenu);\n }\n function createChildContext() {\n var i;\n if (contextItemContainer.getAttribute('contextOpen') === '1') {\n return;\n }\n contextItemContainer.setAttribute('opening', '1');\n if (typeof item.items === 'function') {\n i = item.items.apply(intf, [\n function (items) {\n contextAddCallback(items);\n },\n ]);\n if (i !== undefined && Array.isArray(i)) {\n contextAddCallback(i);\n }\n return;\n }\n contextAddCallback(item.items);\n }\n function addItem(item) {\n function addContent(content) {\n if (content === null) {\n return;\n }\n if (typeof content === 'function') {\n return addContent(content(ev));\n }\n if (typeof content === 'object') {\n contextItemContainer.appendChild(content);\n return;\n }\n applyContextItemStyle(contextItemContainer);\n contextItemContainer.innerHTML = content;\n return;\n }\n addContent(item.title);\n item.contextItemContainer = contextItemContainer;\n if (\n (item.items && item.items.length > 0) ||\n typeof item.items === 'function'\n ) {\n childMenuArrow = document.createElement('div');\n self.createInlineStyle(\n childMenuArrow,\n 'canvas-datagrid-context-child-arrow',\n );\n childMenuArrow.innerHTML = self.style.childContextMenuArrowHTML;\n contextItemContainer.appendChild(childMenuArrow);\n contextItemContainer.addEventListener(\n 'mouseover',\n createChildContext,\n );\n contextItemContainer.addEventListener('mouseout', function () {\n contextItemContainer.setAttribute('opening', '0');\n });\n }\n if (item.click) {\n contextItemContainer.addEventListener('click', function (ev) {\n item.click.apply(self, [ev]);\n });\n }\n }\n addItem(item);\n container.appendChild(contextItemContainer);\n });\n }\n function clickIndex(idx) {\n items[idx].contextItemContainer.dispatchEvent(new Event('click'));\n }\n function checkArrowVisibility() {\n if (container.scrollTop > 0) {\n self.parentDOMNode.appendChild(upArrow);\n } else if (upArrow.parentNode) {\n upArrow.parentNode.removeChild(upArrow);\n }\n if (\n container.scrollTop >=\n container.scrollHeight - container.offsetHeight &&\n downArrow.parentNode\n ) {\n downArrow.parentNode.removeChild(downArrow);\n } else if (\n container.scrollHeight - container.offsetHeight > 0 &&\n !(\n container.scrollTop >=\n container.scrollHeight - container.offsetHeight\n )\n ) {\n self.parentDOMNode.appendChild(downArrow);\n }\n }\n function fade(element) {\n var opacity = 1;\n var timer = setInterval(function () {\n if (opacity <= 0.1) {\n clearInterval(timer);\n element.style.display = 'none';\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n }\n element.style.opacity = opacity;\n element.style.filter = 'alpha(opacity=' + opacity * 100 + ')';\n opacity -= opacity * 0.1;\n }, self.attributes.animationDurationHideContextMenu * 0.1);\n }\n function unfade(element) {\n var opacity = 0.1;\n element.style.display = 'block';\n var timer = setInterval(function () {\n if (opacity >= 1) {\n clearInterval(timer);\n }\n element.style.opacity = opacity;\n element.style.filter = 'alpha(opacity=' + opacity * 100 + ')';\n opacity += opacity * 0.1;\n }, self.attributes.animationDurationShowContextMenu * 0.1);\n }\n function startHoverScroll(type) {\n return function t() {\n var a = self.attributes.contextHoverScrollAmount;\n if (type === 'up' && container.scrollTop === 0) {\n return;\n }\n if (type === 'down' && container.scrollTop === container.scrollHeight) {\n return;\n }\n container.scrollTop += type === 'up' ? -a : a;\n hoverScrollTimeout = setTimeout(\n t,\n self.attributes.contextHoverScrollRateMs,\n type,\n );\n };\n }\n function endHoverScroll(type) {\n return function () {\n clearTimeout(hoverScrollTimeout);\n };\n }\n function init() {\n var loc = {},\n s = self.scrollOffset(self.canvas);\n if (zIndexTop === undefined) {\n zIndexTop = self.style.contextMenuZIndex;\n }\n createItems();\n self.createInlineStyle(\n container,\n 'canvas-datagrid-context-menu' + (self.mobile ? '-mobile' : ''),\n );\n loc.x = pos.left - s.left;\n loc.y = pos.top - s.top;\n loc.height = 0;\n zIndexTop += 1;\n container.style.opacity = 0;\n container.style.position = 'absolute';\n upArrow.style.color = self.style.contextMenuArrowColor;\n downArrow.style.color = self.style.contextMenuArrowColor;\n [upArrow, downArrow].forEach(function (el) {\n el.style.textAlign = 'center';\n el.style.position = 'absolute';\n el.style.zIndex = zIndexTop + 1;\n });\n container.style.zIndex = zIndexTop;\n if (parentContextMenu && parentContextMenu.inputDropdown) {\n container.style.maxHeight =\n window.innerHeight -\n loc.y -\n self.style.autocompleteBottomMargin +\n 'px';\n container.style.minWidth = pos.width + 'px';\n loc.y += pos.height;\n }\n if (self.mobile) {\n container.style.width = pos.width + 'px';\n }\n container.style.left = loc.x + 'px';\n container.style.top = loc.y + 'px';\n container.addEventListener('scroll', checkArrowVisibility);\n container.addEventListener('wheel', function (e) {\n if (self.hasFocus) {\n container.scrollTop += e.deltaY;\n container.scrollLeft += e.deltaX;\n }\n checkArrowVisibility();\n });\n upArrow.innerHTML = self.style.contextMenuArrowUpHTML;\n downArrow.innerHTML = self.style.contextMenuArrowDownHTML;\n container.appendChild(upArrow);\n document.body.appendChild(downArrow);\n document.body.appendChild(container);\n unfade(container);\n rect = container.getBoundingClientRect();\n // TODO: fix !(parentContextMenu && parentContextMenu.inputDropdown) state (autocomplete)\n if (rect.bottom > window.innerHeight) {\n if (!(parentContextMenu && parentContextMenu.inputDropdown)) {\n loc.y -=\n rect.bottom +\n self.style.contextMenuWindowMargin -\n window.innerHeight;\n }\n if (loc.y < 0) {\n loc.y = self.style.contextMenuWindowMargin;\n }\n if (\n container.offsetHeight >\n window.innerHeight - self.style.contextMenuWindowMargin\n ) {\n container.style.height =\n window.innerHeight - self.style.contextMenuWindowMargin * 2 + 'px';\n }\n }\n if (rect.right > window.innerWidth) {\n loc.x -=\n rect.right - window.innerWidth + self.style.contextMenuWindowMargin;\n }\n if (loc.x < 0) {\n loc.x = self.style.contextMenuWindowMargin;\n }\n if (loc.y < 0) {\n loc.y = self.style.contextMenuWindowMargin;\n }\n container.style.left = loc.x + 'px';\n container.style.top = loc.y + 'px';\n rect = container.getBoundingClientRect();\n upArrow.style.top = rect.top + 'px';\n downArrow.style.top =\n rect.top + rect.height - downArrow.offsetHeight + 'px';\n upArrow.style.left = rect.left + 'px';\n downArrow.style.left = rect.left + 'px';\n downArrow.style.width = container.offsetWidth + 'px';\n upArrow.style.width = container.offsetWidth + 'px';\n downArrow.addEventListener('mouseover', startHoverScroll('down'));\n downArrow.addEventListener('mouseout', endHoverScroll('down'));\n upArrow.addEventListener('mouseover', startHoverScroll('up'));\n upArrow.addEventListener('mouseout', endHoverScroll('up'));\n checkArrowVisibility();\n }\n intf.parentGrid = self.intf;\n intf.parentContextMenu = parentContextMenu;\n intf.container = container;\n init();\n intf.clickIndex = clickIndex;\n intf.rect = rect;\n intf.items = items;\n intf.upArrow = upArrow;\n intf.downArrow = downArrow;\n intf.dispose = function () {\n clearTimeout(hoverScrollTimeout);\n children.forEach(function (c) {\n c.dispose();\n });\n [downArrow, upArrow, container].forEach(function (el) {\n fade(el);\n });\n };\n Object.defineProperty(intf, 'selectedIndex', {\n get: function () {\n return selectedIndex;\n },\n set: function (value) {\n if (typeof value !== 'number' || isNaN(value) || !isFinite(value)) {\n throw new Error('Context menu selected index must be a sane number.');\n }\n selectedIndex = value;\n if (selectedIndex > items.length - 1) {\n selectedIndex = items.length - 1;\n }\n if (selectedIndex < 0) {\n selectedIndex = 0;\n }\n items.forEach(function (item, index) {\n if (index === selectedIndex) {\n return self.createInlineStyle(\n item.contextItemContainer,\n 'canvas-datagrid-context-menu-item:hover',\n );\n }\n self.createInlineStyle(\n item.contextItemContainer,\n 'canvas-datagrid-context-menu-item',\n );\n });\n },\n });\n return intf;\n }\n function createFilterContextMenuItems(e) {\n var filterContainer = document.createElement('div'),\n filterLabel = document.createElement('div'),\n filterAutoCompleteButton = document.createElement('button'),\n filterInput = document.createElement('input'),\n n =\n e.cell && e.cell.header\n ? e.cell.header.title || e.cell.header.name\n : '',\n iRect;\n function checkRegExpErrorState() {\n filterInput.style.background = self.style.contextFilterInputBackground;\n filterInput.style.color = self.style.contextFilterInputColor;\n if (self.invalidFilterRegEx) {\n filterInput.style.background =\n self.style.contextFilterInvalidRegExpBackground;\n filterInput.style.color = self.style.contextFilterInvalidRegExpColor;\n }\n }\n function fillAutoComplete() {\n var count = 0;\n var items = {};\n var blanksItem = [];\n\n self.viewData.forEach(function (row) {\n var cellValue =\n row[e.cell.header.name] == null\n ? row[e.cell.header.name]\n : String(row[e.cell.header.name]).trim();\n var value = self.blankValues.includes(cellValue)\n ? self.attributes.blanksText\n : cellValue;\n\n if (items[value] || count > self.attributes.maxAutoCompleteItems) {\n return;\n }\n count += 1;\n items[value] = {\n title: self.formatters[e.cell.header.type || 'string']({\n cell: { value: value },\n }),\n click: function (e) {\n filterInput.value = value;\n e.stopPropagation();\n filterInput.dispatchEvent(new Event('keyup'));\n self.disposeAutocomplete();\n return;\n },\n };\n });\n\n if (Object.keys(items).indexOf(self.attributes.blanksText) !== -1) {\n blanksItem.push(items[self.attributes.blanksText]);\n delete items[self.attributes.blanksText];\n }\n\n return blanksItem.concat(\n Object.keys(items).map(function (key) {\n return items[key];\n }),\n );\n }\n\n function createAutoCompleteContext(ev) {\n if (ev && ['ArrowDown', 'ArrowUp', 'Enter', 'Tab'].includes(ev.key)) {\n return;\n }\n\n var autoCompleteItems = fillAutoComplete();\n\n iRect = filterInput.getBoundingClientRect();\n if (autoCompleteContext) {\n autoCompleteContext.dispose();\n autoCompleteContext = undefined;\n }\n autoCompleteContext = createContextMenu(\n e,\n {\n left: iRect.left,\n top: iRect.top,\n right: iRect.right,\n bottom: iRect.bottom,\n height: iRect.height,\n width: iRect.width,\n },\n autoCompleteItems,\n { inputDropdown: true },\n );\n autoCompleteContext.selectedIndex = 0;\n }\n self.createInlineStyle(filterLabel, 'canvas-datagrid-context-menu-label');\n self.createInlineStyle(\n filterAutoCompleteButton,\n 'canvas-datagrid-context-menu-filter-button',\n );\n self.createInlineStyle(\n filterInput,\n 'canvas-datagrid-context-menu-filter-input',\n );\n checkRegExpErrorState();\n filterInput.onclick = self.disposeAutocomplete;\n filterInput.addEventListener('keydown', function (e) {\n if (e.key === 'ArrowDown') {\n autoCompleteContext.selectedIndex += 1;\n }\n\n if (e.key === 'ArrowUp') {\n autoCompleteContext.selectedIndex -= 1;\n }\n\n if (e.key === 'Enter') {\n autoCompleteContext.clickIndex(autoCompleteContext.selectedIndex);\n self.disposeContextMenu();\n }\n\n if (e.key === 'Tab') {\n autoCompleteContext.clickIndex(autoCompleteContext.selectedIndex);\n e.preventDefault();\n }\n\n if (e.key === 'Escape') {\n self.disposeContextMenu();\n }\n });\n filterInput.addEventListener('keyup', function () {\n self.setFilter(e.cell.header.name, filterInput.value);\n });\n filterInput.addEventListener('keyup', createAutoCompleteContext);\n ['focus', 'blur', 'keydown', 'keyup', 'change'].forEach(function (en) {\n filterInput.addEventListener(en, checkRegExpErrorState);\n });\n filterInput.value = e.cell.header\n ? self.columnFilters[e.cell.header.name] || ''\n : '';\n filterLabel.innerHTML = self.attributes.filterOptionText.replace(/%s/g, n);\n filterAutoCompleteButton.onclick = function () {\n if (autoCompleteContext) {\n return self.disposeAutocomplete();\n }\n createAutoCompleteContext();\n };\n filterAutoCompleteButton.innerHTML = self.style.contextFilterButtonHTML;\n filterContainer.addEventListener('click', function (e) {\n return e.stopPropagation();\n });\n filterContainer.appendChild(filterLabel);\n filterContainer.appendChild(filterInput);\n filterContainer.appendChild(filterAutoCompleteButton);\n e.items.push({\n title: filterContainer,\n });\n if (Object.keys(self.columnFilters).length) {\n Object.keys(self.columnFilters).forEach(function (cf) {\n var h = self.getHeaderByName(cf);\n e.items.push({\n title: self.attributes.removeFilterOptionText.replace(\n /%s/g,\n h.title || h.name,\n ),\n click: function removeFilterClick(e) {\n e.preventDefault();\n self.setFilter(cf, '');\n self.controlInput.focus();\n },\n });\n });\n }\n }\n\n function addDefaultContextMenuItem(e) {\n const schema = self.getSchema();\n /**\n * A map between columnIndex and column data\n * @type {Map<string,any>}\n */\n let columns;\n const getColumnsMap = () => {\n if (!columns)\n columns = new Map(schema.map((_col) => [_col.columnIndex, _col]));\n return columns;\n };\n const isSorting =\n self.orderings.columns && self.orderings.columns.length > 0;\n\n const isNormalCell =\n !(\n e.cell.isBackground ||\n e.cell.isColumnHeaderCellCap ||\n e.cell.isScrollBar ||\n e.cell.isCorner ||\n e.cell.isRowHeader\n ) && e.cell.header;\n if (self.attributes.showFilter && isNormalCell) {\n createFilterContextMenuItems(e);\n }\n if (self.attributes.showCopy && self.canSelectionsBeCopied()) {\n e.items.push({\n title: self.attributes.copyText,\n click: function () {\n document.execCommand('copy');\n self.disposeContextMenu();\n self.controlInput.focus();\n },\n });\n }\n if (self.attributes.showPaste && self.clipBoardData) {\n e.items.push({\n title: self.attributes.pasteText,\n click: function () {\n // Original function call:\n // self.paste(self.clipBoardData, e.cell.columnIndex, e.cell.rowIndex);\n // We can remove the last two parameters follow\n // because this function only need one parameter by following the function declaration\n self.paste(self.clipBoardData);\n self.draw();\n },\n });\n }\n if (self.attributes.showColumnSelector) {\n e.items.push({\n title: self.attributes.columnSelectorText,\n items: function () {\n var d = [];\n self.getSchema().forEach(function (column) {\n function toggleColumnVisibility(e) {\n column.hidden = !column.hidden;\n self.dispatchEvent('togglecolumn', {\n column: column,\n hidden: column.hidden,\n });\n e.preventDefault();\n self.stopPropagation(e);\n self.disposeContextMenu();\n self.resize(true);\n self.setStorageData();\n }\n var el = document.createElement('div');\n applyContextItemStyle(el);\n el.addEventListener('touchstart', toggleColumnVisibility);\n el.addEventListener('click', toggleColumnVisibility);\n el.innerHTML =\n (column.hidden\n ? self.attributes.columnSelectorHiddenText\n : self.attributes.columnSelectorVisibleText) +\n (column.title || column.name);\n d.push({\n title: el,\n });\n });\n return d;\n },\n });\n if (e.cell && e.cell.header && e.cell.columnIndex > -1) {\n // This variable represents the order index because of the following codes from `draw.js`:\n // columnIndex: columnOrderIndex,\n const columnOrderIndex = e.cell.columnIndex;\n const columnIndex = self.orders.columns[columnOrderIndex];\n\n const contiguousColumns = self.getSelectedContiguousColumns(schema);\n let title = '';\n if (contiguousColumns) {\n title = contiguousColumns\n .map((col) => col.title || col.name)\n .join('-');\n } else {\n const column = schema[columnIndex];\n if (column) title = column.title || column.name;\n }\n e.items.push({\n title: self.attributes.hideColumnText.replace(/%s/gi, title),\n click: function (ev) {\n ev.preventDefault();\n self.stopPropagation(ev);\n self.disposeContextMenu();\n if (contiguousColumns) {\n self.hideColumns(\n contiguousColumns[0].orderIndex,\n contiguousColumns[1].orderIndex,\n );\n } else {\n self.hideColumns(columnOrderIndex);\n }\n },\n });\n }\n }\n if (\n self.attributes.saveAppearance &&\n self.attributes.showClearSettingsOption &&\n (Object.keys(self.sizes.rows).length > 0 ||\n Object.keys(self.sizes.columns).length > 0)\n ) {\n e.items.push({\n title: self.attributes.clearSettingsOptionText,\n click: function (e) {\n e.preventDefault();\n self.sizes.rows = {};\n self.sizes.columns = {};\n self.createRowOrders();\n self.createColumnOrders();\n self.storedSettings = undefined;\n self.dispatchEvent('resizecolumn', {\n columnWidth: self.style.cellWidth,\n });\n self.dispatchResizeRow({\n height: self.style.cellHeight,\n });\n self.setStorageData();\n self.resize(true);\n self.disposeContextMenu();\n self.controlInput.focus();\n },\n });\n }\n if (\n self.attributes.allowSorting &&\n self.attributes.showOrderByOption &&\n isNormalCell\n ) {\n e.items.push({\n title: self.attributes.showOrderByOptionTextAsc.replace(\n '%s',\n e.cell.header.title || e.cell.header.name,\n ),\n click: function (ev) {\n ev.preventDefault();\n self.order(e.cell.header.name, 'asc');\n self.controlInput.focus();\n },\n });\n e.items.push({\n title: self.attributes.showOrderByOptionTextDesc.replace(\n '%s',\n e.cell.header.title || e.cell.header.name,\n ),\n click: function (ev) {\n ev.preventDefault();\n self.order(e.cell.header.name, 'desc');\n self.disposeContextMenu();\n self.controlInput.focus();\n },\n });\n }\n\n //#region hide rows\n const canHideRows = !isSorting && e.cell.isRowHeader && e.cell.header;\n if (canHideRows) {\n const range = self.getSelectedContiguousRows(true);\n if (range) {\n const boundRowIndexes = range.map((viewRowIndex) =>\n self.getBoundRowIndexFromViewRowIndex(viewRowIndex),\n );\n let title;\n if (boundRowIndexes.length === 1) {\n if (typeof boundRowIndexes[0] === 'number')\n title = boundRowIndexes[0] + 1;\n else title = range[0] + 1;\n\n title = self.attributes.showHideRow.replace('%s', title);\n // hide one row\n e.items.push({\n title,\n click: function (ev) {\n ev.preventDefault();\n self.hideRows(boundRowIndexes[0], boundRowIndexes[0]);\n },\n });\n } else if (boundRowIndexes[0] <= boundRowIndexes[1]) {\n title = boundRowIndexes\n .map((it, index) => {\n if (typeof it === 'number') return it + 1;\n return range[index] + 1;\n })\n .join('-');\n title = self.attributes.showHideRows.replace('%s', title);\n // hide rows\n e.items.push({\n title,\n click: function (ev) {\n ev.preventDefault();\n self.hideRows(boundRowIndexes[0], boundRowIndexes[1]);\n },\n });\n }\n }\n }\n //#endregion hide rows\n\n //#region group/ungroup columns\n const groupAreaHeight = self.getColumnGroupAreaHeight();\n const groupAreaWidth = self.getRowGroupAreaWidth();\n const setCollapseStateForAllGroups = (allGroups, collapsed) => {\n if (allGroups.length === 0) return;\n for (let i = 0; i < allGroups.length; i++) {\n const groups = allGroups[i];\n for (let j = 0; j < groups.length; j++) {\n const group = groups[j];\n group.collapsed = collapsed;\n }\n }\n self.refresh();\n };\n if (e.pos && e.pos.y < groupAreaHeight) {\n e.items.push({\n title: self.attributes.showRemoveAllGroupColumns,\n click: function (ev) {\n ev.preventDefault();\n self.groupedColumns = [];\n self.refresh();\n },\n });\n e.items.push({\n title: self.attributes.showExpandAllGroupColumns,\n click: function (ev) {\n ev.preventDefault();\n setCollapseStateForAllGroups(self.groupedColumns, false);\n },\n });\n e.items.push({\n title: self.attributes.showCollapseAllGroupColumns,\n click: function (ev) {\n ev.preventDefault();\n setCollapseStateForAllGroups(self.groupedColumns, true);\n },\n });\n }\n if (e.pos && e.pos.x < groupAreaWidth) {\n e.items.push({\n title: self.attributes.showRemoveAllGroupRows,\n click: function (ev) {\n ev.preventDefault();\n self.groupedRows = [];\n self.refresh();\n },\n });\n e.items.push({\n title: self.attributes.showExpandAllGroupRows,\n click: function (ev) {\n ev.preventDefault();\n setCollapseStateForAllGroups(self.groupedRows, false);\n },\n });\n e.items.push({\n title: self.attributes.showCollapseAllGroupRows,\n click: function (ev) {\n ev.preventDefault();\n setCollapseStateForAllGroups(self.groupedRows, true);\n },\n });\n }\n\n const canGroupByColumns =\n self.attributes.allowGroupingColumns &&\n e.cell.isColumnHeader &&\n e.cell.header &&\n e.cell.header.index > 0;\n const canUngroupColumns =\n self.attributes.allowGroupingColumns && e.cell.isColumnHeader;\n const canGroupByRows =\n !isSorting &&\n self.attributes.allowGroupingRows &&\n e.cell.isRowHeader &&\n e.cell.header;\n const canUngroupRows =\n self.attributes.allowGroupingRows && e.cell.isRowHeader;\n\n if (canGroupByColumns) {\n /** @type {number[]} */\n const groupIndexes = [];\n /** @type {number} */\n const headerIndex = e.cell.header.index;\n let col = headerIndex;\n for (; col >= 0; col--) {\n if (!self.isColumnSelected(col)) break;\n groupIndexes[0] = col;\n }\n for (col = headerIndex; ; col++) {\n if (!self.isColumnSelected(col)) break;\n groupIndexes[1] = col;\n }\n if (\n col !== headerIndex &&\n groupIndexes.length === 2 &&\n groupIndexes[1] > groupIndexes[0] &&\n self.isNewGroupRangeValid(\n self.groupedColumns,\n groupIndexes[0],\n groupIndexes[1],\n )\n ) {\n const columns = getColumnsMap();\n const groupTitles = [];\n const groupNames = [];\n for (let i = 0; i < groupIndexes.length; i++) {\n const columnIndex = groupIndexes[i];\n const column = columns.get(columnIndex);\n if (column) {\n groupNames.push(column.name);\n groupTitles.push(column.title || column.name || column.index);\n }\n }\n if (groupNames[0] && groupNames[1]) {\n // show group options\n e.items.push({\n title: self.attributes.showGroupColumns.replace(\n '%s',\n groupTitles[0] + '-' + groupTitles[1],\n ),\n click: function (ev) {\n ev.preventDefault();\n self.groupColumns(groupNames[0], groupNames[1]);\n self.controlInput.focus();\n },\n });\n }\n }\n }\n if (canUngroupColumns) {\n const columnIndex = e.cell.columnIndex;\n const groups = self.getGroupsColumnBelongsTo(columnIndex);\n const columns = getColumnsMap();\n for (let i = 0; i < groups.length; i++) {\n const { from, to } = groups[i];\n const cell0 = columns.get(from);\n const cell1 = columns.get(to);\n if (cell0 && cell1) {\n const formatArgs =\n (cell0.title || cell0.name || cell0.index) +\n '-' +\n (cell1.title || cell1.name || cell1.index);\n e.items.push({\n title: self.attributes.showRemoveGroupColumns.replace(\n '%s',\n formatArgs,\n ),\n click: function (ev) {\n ev.preventDefault();\n self.removeGroupColumns(cell0.name, cell1.name);\n self.controlInput.focus();\n },\n });\n } else {\n console.warn(`Cannot find column ${from} or column ${to}`);\n }\n }\n }\n if (canGroupByRows) {\n const range = self.getSelectedContiguousRows(false) || [];\n const rangeTitle = range\n .map((rowIndex) => {\n const index = self.getBoundRowIndexFromViewRowIndex(rowIndex);\n if (typeof index === 'number') return index + 1;\n return rowIndex + 1;\n })\n .join('-');\n if (\n range.length === 2 &&\n self.isNewGroupRangeValid(self.groupedRows, range[0], range[1])\n ) {\n e.items.push({\n title: self.attributes.showGroupRows.replace('%s', rangeTitle),\n click: function (ev) {\n ev.preventDefault();\n self.groupRows(range[0], range[1]);\n },\n });\n }\n }\n if (canUngroupRows) {\n const rowIndex = e.cell.rowIndex;\n const groups = self.getGroupsRowBelongsTo(rowIndex);\n for (let i = 0; i < groups.length; i++) {\n const { from, to } = groups[i];\n const rangeTitle = [from, to]\n .map((rowIndex) => {\n const index = self.getBoundRowIndexFromViewRowIndex(rowIndex);\n if (typeof index === 'number') return index + 1;\n return rowIndex + 1;\n })\n .join('-');\n e.items.push({\n title: self.attributes.showRemoveGroupRows.replace('%s', rangeTitle),\n click: function (ev) {\n ev.preventDefault();\n self.removeGroupRows(from, to);\n self.controlInput.focus();\n },\n });\n }\n }\n //#endregion group/ungroup columns\n }\n self.disposeAutocomplete = function () {\n if (autoCompleteContext) {\n autoCompleteContext.dispose();\n autoCompleteContext = undefined;\n }\n };\n self.disposeContextMenu = function (event) {\n if (\n event &&\n event.type === 'click' &&\n event.ctrlKey &&\n self.contextMenuOpenedAt !== undefined &&\n performance.now() - self.contextMenuOpenedAt < 500\n ) {\n // macOS Safari dispatches a click right after a ctrl-click contextmenu,\n // which would close the menu immediately (#521)\n return;\n }\n document.removeEventListener('click', self.disposeContextMenu);\n zIndexTop = self.style.contextMenuZIndex;\n self.disposeAutocomplete();\n if (self.contextMenu) {\n self.contextMenu.dispose();\n }\n self.contextMenu = undefined;\n if (event) {\n self.canvas.focus();\n self.mousedown(event);\n self.mouseup(event);\n }\n };\n self.contextmenuEvent = function (e, overridePos) {\n if (!self.hasFocus && e.target !== self.canvas) {\n return;\n }\n // don't create context menu for parents if current position is located in child grid\n const children = Object.keys(self.childGrids);\n for (let i = 0; i < children.length; i++) {\n const childGrid = self.childGrids[children[i]];\n const parentNode = childGrid && childGrid.parentNode;\n if (!parentNode) continue;\n const { offsetLeft, offsetWidth, offsetTop, offsetHeight } = parentNode;\n if ((e.x >= offsetLeft && e.x <= offsetLeft + offsetWidth) === false)\n continue;\n if ((e.y >= offsetTop && e.y <= offsetTop + offsetHeight) === false)\n continue;\n return; // in child grid\n }\n // don't create context menu for child if current position is located in parent grid\n if (self.isChildGrid && self.parentNode) {\n //#region check is current child grid closed\n const childGridsOfParent = self.parentGrid && self.parentGrid.childGrids;\n if (!childGridsOfParent || !Array.isArray(childGridsOfParent)) return;\n const matchedMe = childGridsOfParent.find((grid) => {\n const nodeA = grid.parentNode;\n const nodeB = self.parentNode;\n return (\n nodeA.offsetTop == nodeB.offsetTop &&\n nodeA.offsetLeft === nodeB.offsetLeft\n );\n });\n if (!matchedMe) return;\n //#endregion\n\n let x0 = self.parentNode.offsetLeft;\n let x1 = self.parentNode.offsetLeft + self.parentNode.offsetWidth;\n let y0 = self.parentNode.offsetTop;\n let y1 = self.parentNode.offsetTop + self.parentNode.offsetHeight;\n let node = self.parentNode.parentNode;\n while (node) {\n const { offsetLeft, offsetWidth, offsetTop, offsetHeight } = node;\n if (offsetLeft > x0) x0 = offsetLeft;\n if (offsetTop > y0) y0 = offsetTop;\n const newX1 = offsetLeft + offsetWidth;\n const newY1 = offsetTop + offsetHeight;\n if (newX1 < x1) x1 = newX1;\n if (newY1 < y1) y1 = newY1;\n if (node.nodeType !== 'canvas-datagrid-tree') break;\n node = node.parentNode;\n }\n if ((e.x >= x0 && e.x <= x1 && e.y >= y0 && e.y <= y1) === false) return;\n }\n function createDisposeEvent() {\n requestAnimationFrame(function () {\n document.addEventListener('click', self.disposeContextMenu);\n window.removeEventListener('mouseup', createDisposeEvent);\n });\n }\n var contextPosition,\n items = [],\n pos = overridePos || self.getLayerPos(e),\n ev = {\n NativeEvent: e,\n cell: self.getCellAt(pos.x, pos.y),\n pos,\n items: items,\n };\n if (!ev.cell.isGrid) {\n addDefaultContextMenuItem(ev);\n }\n if (e.type !== 'mousedown' && self.dispatchEvent('contextmenu', ev)) {\n return;\n }\n if (!ev.cell.isGrid) {\n if (self.contextMenu) {\n self.disposeContextMenu();\n }\n contextPosition = {\n left:\n pos.x +\n pos.rect.left +\n self.style.contextMenuMarginLeft +\n self.canvasOffsetLeft,\n top:\n pos.y +\n pos.rect.top +\n self.style.contextMenuMarginTop +\n self.canvasOffsetTop,\n right: ev.cell.width + ev.cell.x + pos.rect.left,\n bottom: ev.cell.height + ev.cell.y + pos.rect.top,\n height: ev.cell.height,\n width: ev.cell.width,\n };\n if (self.mobile) {\n contextPosition.left = self.style.mobileContextMenuMargin + 'px';\n contextPosition.width =\n self.width - self.style.mobileContextMenuMargin * 2 + 'px';\n }\n if (e.type == 'mousedown') {\n contextPosition.top += self.style.filterButtonMenuOffsetTop;\n }\n // use ev.items, not the captured array: a listener may assign a new\n // array to e.items (#263)\n self.contextMenu = createContextMenu(ev, contextPosition, ev.items);\n self.contextMenuOpenedAt = performance.now();\n if (e.type == 'mousedown') {\n window.addEventListener('mouseup', createDisposeEvent);\n } else {\n createDisposeEvent();\n }\n e.preventDefault();\n }\n };\n return;\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n\n'use strict';\nexport default function (self) {\n self.defaults = {\n attributes: [\n ['allowColumnReordering', true],\n ['allowColumnSelection', true],\n ['allowColumnResize', true],\n ['allowColumnResizeFromCell', false],\n ['allowFreezingRows', false],\n ['allowFreezingColumns', false],\n ['allowMovingSelection', true],\n ['allowRowHeaderResize', true],\n ['allowRowReordering', false],\n ['allowRowResize', true],\n ['allowRowResizeFromCell', false],\n ['allowSorting', true],\n ['allowGroupingRows', true],\n ['allowGroupingColumns', true],\n ['allowGridExpandOnPaste', false],\n ['animationDurationShowContextMenu', 50],\n ['animationDurationHideContextMenu', 50],\n ['autoGenerateSchema', false],\n ['fillLastColumn', false],\n ['autoResizeColumns', false],\n ['autoResizeRows', false],\n ['autoScrollOnMousemove', false],\n ['autoScrollMargin', 5],\n ['allowShrinkingSelection', false],\n ['blanksText', '(Blanks)'],\n ['borderDragBehavior', 'none'],\n ['borderResizeZone', 10],\n ['clearCellsWhenShrinkingSelection', false],\n ['clearSettingsOptionText', 'Clear saved settings'],\n ['columnHeaderClickBehavior', 'sort'],\n ['columnSelectorHiddenText', '&nbsp;&nbsp;&nbsp;'],\n ['columnSelectorText', 'Add/Remove columns'],\n ['columnSelectorVisibleText', '\\u2713'],\n ['contextHoverScrollAmount', 2],\n ['contextHoverScrollRateMs', 5],\n ['copyHeadersOnSelectAll', true],\n ['copyText', 'Copy'],\n ['debug', false],\n ['editable', true],\n ['ellipsisText', '...'],\n ['filterOptionText', 'Filter %s'],\n ['filterTextPrefix', '(filtered) '],\n ['filterFrozenRows', true],\n ['globalRowResize', false],\n ['hideColumnText', 'Hide %s'],\n ['showUnhideColumnsIndicator', false],\n ['showUnhideRowsIndicator', false],\n ['showHideRow', 'Hide row %s'],\n ['showHideRows', 'Hide rows %s'],\n ['hoverMode', 'cell'],\n ['keepFocusOnMouseOut', false],\n ['maxAutoCompleteItems', 200],\n ['multiLine', false],\n ['name', ''],\n ['pageUpDownOverlap', 1],\n ['pasteText', 'Paste'],\n ['persistantSelectionMode', false],\n ['removeFilterOptionText', 'Remove filter on %s'],\n ['reorderDeadZone', 3],\n ['resizeAfterDragged', false],\n ['resizeScrollZone', 20],\n ['rowGrabZoneSize', 5],\n ['columnGrabZoneSize', 30],\n ['saveAppearance', true],\n ['scrollAnimationPPSThreshold', 0.75],\n ['scrollPointerLock', false],\n ['scrollRepeatRate', 75],\n ['selectionFollowsActiveCell', false],\n ['selectionHandleBehavior', 'none'],\n ['selectionMode', 'cell'],\n ['selectionScrollIncrement', 20],\n ['selectionScrollZone', 20],\n ['showClearSettingsOption', true],\n ['showColumnHeaders', true],\n ['showColumnSelector', true],\n ['showCopy', false],\n ['showFilter', true],\n ['showFilterInCell', false],\n ['showNewRow', false],\n ['showOrderByOption', true],\n ['showOrderByOptionTextAsc', 'Order by %s ascending'],\n ['showOrderByOptionTextDesc', 'Order by %s descending'],\n //#region grouping\n ['showGroupColumns', 'Group columns %s'],\n ['showGroupRows', 'Group rows %s'],\n ['showRemoveGroupColumns', 'Remove group %s'],\n ['showRemoveGroupRows', 'Remove group %s'],\n ['showRemoveAllGroupColumns', 'Remove all column groups'],\n ['showRemoveAllGroupRows', 'Remove all row groups'],\n ['showExpandAllGroupColumns', 'Expand all column groups'],\n ['showExpandAllGroupRows', 'Expand all row groups'],\n ['showCollapseAllGroupColumns', 'Collapse all column groups'],\n ['showCollapseAllGroupRows', 'Collapse all row groups'],\n ['columnGroupIndicatorPosition', 'right'],\n ['rowGroupIndicatorPosition', 'bottom'],\n //#endregion grouping\n ['showPaste', false],\n ['showPerformance', false],\n ['showRowHeaders', true],\n ['showRowNumbers', true],\n ['showRowNumberGaps', true],\n ['singleSelectionMode', false],\n ['snapToRow', false],\n ['sortFrozenRows', true],\n ['touchContextMenuTimeMs', 800],\n ['touchDeadZone', 3],\n ['touchEasingMethod', 'easeOutQuad'],\n ['touchReleaseAcceleration', 1000],\n ['touchReleaseAnimationDurationMs', 2000],\n ['touchScrollZone', 20],\n ['touchSelectHandleZone', 20],\n ['touchZoomSensitivity', 0.005],\n ['touchZoomMin', 0.5],\n ['touchZoomMax', 1.75],\n ['maxPixelRatio', 2],\n ['maxCanvasSize', 16384],\n ['tree', false],\n ['treeHorizontalScroll', false],\n ['rowTree', []],\n ['rowTreeColIndex', 0],\n ['columnTree', []],\n ['columnTreeRowStartIndex', 0],\n ['columnTreeRowEndIndex', 0],\n ],\n styles: [\n ['activeCellBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['activeCellBorderColor', 'rgba(110, 168, 255, 1)'],\n ['activeCellBorderWidth', 1],\n ['activeCellColor', 'rgba(0, 0, 0, 1)'],\n ['activeCellFont', '16px sans-serif'],\n ['activeCellHoverBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['activeCellHorizontalAlignment', 'left'],\n ['activeCellHoverColor', 'rgba(0, 0, 0, 1)'],\n ['activeCellOverlayBorderColor', 'rgba(66, 133, 244, 1)'],\n ['activeCellOverlayBorderWidth', 1],\n ['activeCellPaddingBottom', 5],\n ['activeCellPaddingLeft', 5],\n ['activeCellPaddingRight', 5],\n ['activeCellPaddingTop', 5],\n ['activeCellSelectedBackgroundColor', 'rgba(236, 243, 255, 1)'],\n ['activeCellSelectedColor', 'rgba(0, 0, 0, 1)'],\n ['activeCellVerticalAlignment', 'center'],\n ['activeColumnHeaderCellBackgroundColor', 'rgba(225, 225, 225, 1)'],\n ['activeColumnHeaderCellColor', 'rgba(0, 0, 0, 1)'],\n ['activeRowHeaderCellBackgroundColor', 'rgba(225, 225, 225, 1)'],\n ['activeRowHeaderCellColor', 'rgba(0, 0, 0, 1)'],\n ['autocompleteBottomMargin', 60],\n ['autosizeHeaderCellPadding', 8],\n ['autosizePadding', 5],\n ['buttonActiveBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['buttonActiveBorderColor', 'rgba(110, 168, 255, 1)'],\n ['buttonArrowColor', 'rgba(50, 50, 50, 1)'],\n ['buttonArrowDownHTML', '&#x25BC;'],\n ['buttonZIndex', 10000],\n ['buttonBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['buttonBorderColor', 'rgba(172, 172, 172, 1)'],\n ['buttonHoverBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['buttonMenuWindowMargin', 30],\n ['buttonPadding', '3px'],\n ['cellAutoResizePadding', 13],\n ['cellBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['cellBorderColor', 'rgba(195, 199, 202, 1)'],\n ['cellBorderWidth', 1],\n ['cellColor', 'rgba(0, 0, 0, 1)'],\n ['cellFont', '16px sans-serif'],\n ['cellGridHeight', 250],\n ['cellHeight', 24],\n ['cellHeightWithChildGrid', 150],\n ['cellHorizontalAlignment', 'left'],\n ['cellHoverBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['cellHoverColor', 'rgba(0, 0, 0, 1)'],\n ['cellPaddingBottom', 5],\n ['cellPaddingLeft', 5],\n ['cellPaddingRight', 5],\n ['cellPaddingTop', 5],\n ['cellSelectedBackgroundColor', 'rgba(236, 243, 255, 1)'],\n ['cellSelectedColor', 'rgba(0, 0, 0, 1)'],\n ['cellTreeIconBorderColor', 'rgba(162, 174, 207, 1)'],\n ['cellTreeIconFillColor', 'rgba(240, 240, 240, 1)'],\n ['cellTreeIconHoverFillColor', 'rgba(198, 217, 233, 1)'],\n ['cellTreeIconLineColor', 'rgba(43, 53, 81, 1)'],\n ['cellTreeIconLineWidth', 1.5],\n ['cellTreeIconMarginLeft', 0],\n ['cellTreeIconMarginRight', 5],\n ['cellTreeIconMarginTop', 6],\n ['cellTreeIconWidth', 13],\n ['cellVerticalAlignment', 'center'],\n ['cellWidth', 250],\n ['cellWidthWithChildGrid', 250],\n ['cellWhiteSpace', 'nowrap'],\n ['cellLineHeight', 1],\n ['cellLineSpacing', 3],\n ['childContextMenuArrowColor', 'rgba(43, 48, 43, 1)'],\n ['childContextMenuArrowHTML', '&#x25BA;'],\n ['childContextMenuMarginLeft', -11],\n ['childContextMenuMarginTop', -6],\n ['columnGroupRowHeight', 25],\n ['columnHeaderCellBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['columnHeaderCellBorderColor', 'rgba(172, 172, 172, 1)'],\n ['columnHeaderCellBorderWidth', 1],\n ['columnHeaderCellCapBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['columnHeaderCellCapBorderColor', 'rgba(172, 172, 172, 1)'],\n ['columnHeaderCellCapBorderWidth', 1],\n ['columnHeaderCellColor', 'rgba(50, 50, 50, 1)'],\n ['columnHeaderCellFont', '16px sans-serif'],\n ['columnHeaderCellHeight', 25],\n ['columnHeaderCellHorizontalAlignment', 'left'],\n ['columnHeaderCellHoverBackgroundColor', 'rgba(235, 235, 235, 1)'],\n ['columnHeaderCellHoverColor', 'rgba(0, 0, 0, 1)'],\n ['columnHeaderCellPaddingBottom', 5],\n ['columnHeaderCellPaddingLeft', 5],\n ['columnHeaderCellPaddingRight', 5],\n ['columnHeaderCellPaddingTop', 5],\n ['columnHeaderCellVerticalAlignment', 'center'],\n ['columnHeaderOrderByArrowBorderColor', 'rgba(195, 199, 202, 1)'],\n ['columnHeaderOrderByArrowBorderWidth', 1],\n ['columnHeaderOrderByArrowColor', 'rgba(155, 155, 155, 1)'],\n ['columnHeaderOrderByArrowHeight', 8],\n ['columnHeaderOrderByArrowMarginLeft', 0],\n ['columnHeaderOrderByArrowMarginRight', 5],\n ['columnHeaderOrderByArrowMarginTop', 6],\n ['columnHeaderOrderByArrowWidth', 13],\n ['contextFilterButtonBorder', 'solid 1px rgba(158, 163, 169, 1)'],\n ['contextFilterButtonBorderRadius', '3px'],\n ['contextFilterButtonHTML', '&#x25BC;'],\n ['contextFilterInputBackground', 'rgba(255,255,255,1)'],\n ['contextFilterInputBorder', 'solid 1px rgba(158, 163, 169, 1)'],\n ['contextFilterInputBorderRadius', '0'],\n ['contextFilterInputColor', 'rgba(0,0,0,1)'],\n ['contextFilterInputFontFamily', 'sans-serif'],\n ['contextFilterInputFontSize', '14px'],\n ['contextFilterInvalidRegExpBackground', 'rgba(180, 6, 1, 1)'],\n ['contextFilterInvalidRegExpColor', 'rgba(255, 255, 255, 1)'],\n ['contextMenuArrowColor', 'rgba(43, 48, 43, 1)'],\n ['contextMenuArrowDownHTML', '&#x25BC;'],\n ['contextMenuArrowUpHTML', '&#x25B2;'],\n ['contextMenuBackground', 'rgba(240, 240, 240, 1)'],\n ['contextMenuBorder', 'solid 1px rgba(158, 163, 169, 1)'],\n ['contextMenuBorderRadius', '3px'],\n ['contextMenuChildArrowFontSize', '12px'],\n ['contextMenuColor', 'rgba(43, 48, 43, 1)'],\n ['contextMenuCursor', 'default'],\n ['contextMenuFilterButtonFontFamily', 'sans-serif'],\n ['contextMenuFilterButtonFontSize', '10px'],\n ['contextMenuFilterInvalidExpresion', 'rgba(237, 155, 156, 1)'],\n ['contextMenuFontFamily', 'sans-serif'],\n ['contextMenuFontSize', '16px'],\n ['contextMenuHoverBackground', 'rgba(182, 205, 250, 1)'],\n ['contextMenuHoverColor', 'rgba(43, 48, 153, 1)'],\n ['contextMenuItemBorderRadius', '3px'],\n ['contextMenuItemMargin', '2px'],\n ['contextMenuLabelDisplay', 'inline-block'],\n ['contextMenuLabelMargin', '0 3px 0 0'],\n ['contextMenuLabelMaxWidth', '700px'],\n ['contextMenuLabelMinWidth', '75px'],\n ['contextMenuMarginLeft', 3],\n ['contextMenuMarginTop', -3],\n ['contextMenuOpacity', '0.98'],\n ['contextMenuPadding', '2px'],\n ['contextMenuWindowMargin', 30],\n ['contextMenuZIndex', 10000],\n ['cornerCellBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['cornerCellBorderColor', 'rgba(202, 202, 202, 1)'],\n ['debugBackgroundColor', 'rgba(0, 0, 0, .0)'],\n ['debugColor', 'rgba(255, 15, 24, 1)'],\n ['debugEntitiesColor', 'rgba(76, 231, 239, 1.00)'],\n ['debugFont', '11px sans-serif'],\n ['debugPerfChartBackground', 'rgba(29, 25, 26, 1.00)'],\n ['debugPerfChartTextColor', 'rgba(255, 255, 255, 0.8)'],\n ['debugPerformanceColor', 'rgba(252, 255, 37, 1.00)'],\n ['debugScrollHeightColor', 'rgba(248, 33, 103, 1.00)'],\n ['debugScrollWidthColor', 'rgba(66, 255, 27, 1.00)'],\n ['debugTouchPPSXColor', 'rgba(246, 102, 24, 1.00)'],\n ['debugTouchPPSYColor', 'rgba(186, 0, 255, 1.00)'],\n ['display', 'inline-block'],\n ['editCellBackgroundColor', 'white'],\n ['editCellBorder', 'solid 1px rgba(110, 168, 255, 1)'],\n ['editCellBoxShadow', '0 2px 5px rgba(0,0,0,0.4)'],\n ['editCellColor', 'black'],\n ['editCellFontFamily', 'sans-serif'],\n ['editCellFontSize', '16px'],\n ['editCellPaddingLeft', 4],\n ['editCellZIndex', 10000],\n ['filterButtonActiveBackgroundColor', 'rgba(225, 225, 225, 1)'],\n ['filterButtonArrowBorderColor', 'rgba(195, 199, 202, 1)'],\n ['filterButtonArrowBorderWidth', 1],\n ['filterButtonArrowClickRadius', 5],\n ['filterButtonArrowColor', 'rgba(50, 50, 50, 1)'],\n ['filterButtonArrowHeight', 5],\n ['filterButtonArrowWidth', 8],\n ['filterButtonBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['filterButtonBorderColor', 'rgba(172, 172, 172, 1)'],\n ['filterButtonBorderRadius', 3],\n ['filterButtonHeight', 20],\n ['filterButtonHoverBackgroundColor', 'rgba(235, 235, 235, 1)'],\n ['filterButtonMenuOffsetTop', 10],\n ['filterButtonWidth', 20],\n ['frozenMarkerHoverColor', 'rgba(165, 198, 254, 1)'],\n ['frozenMarkerHoverBorderColor', 'rgba(165, 198, 254, 1)'],\n ['frozenMarkerActiveColor', 'rgba(165, 198, 254, 0.2)'],\n ['frozenMarkerActiveBorderColor', 'rgba(165, 198, 254, 0.5)'],\n ['frozenMarkerActiveHeaderColor', 'rgba(165, 198, 254, 1)'],\n ['frozenMarkerColor', 'rgba(221, 221, 221, 1)'],\n ['frozenMarkerBorderColor', 'rgba(221, 221, 221, 1)'],\n ['frozenMarkerBorderWidth', 1],\n ['frozenMarkerHeaderColor', 'rgba(188, 188, 188, 1)'],\n ['frozenMarkerWidth', 4],\n ['groupingAreaBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['gridBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['gridBorderCollapse', 'collapse'],\n ['gridBorderColor', 'rgba(202, 202, 202, 1)'],\n ['gridBorderWidth', 1],\n ['groupIndicatorColor', 'rgba(155, 155, 155, 1)'],\n ['groupIndicatorBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['height', 'auto'],\n ['maxHeight', 'inherit'],\n ['maxWidth', 'inherit'],\n ['minColumnWidth', 45],\n ['minHeight', 'inherit'],\n ['minRowHeight', 24],\n ['minWidth', 'inherit'],\n ['mobileContextMenuMargin', 10],\n ['mobileEditInputHeight', 30],\n ['mobileEditFontFamily', 'sans-serif'],\n ['mobileEditFontSize', '16px'],\n ['moveOverlayBorderWidth', 1],\n ['moveOverlayBorderColor', 'rgba(66, 133, 244, 1)'],\n ['moveOverlayBorderSegments', '12, 7'],\n ['name', 'default'],\n ['overflowY', 'auto'],\n ['overflowX', 'auto'],\n ['reorderMarkerBackgroundColor', 'rgba(0, 0, 0, 0.1)'],\n ['reorderMarkerBorderColor', 'rgba(0, 0, 0, 0.2)'],\n ['reorderMarkerBorderWidth', 1.25],\n ['reorderMarkerIndexBorderColor', 'rgba(66, 133, 244, 1)'],\n ['reorderMarkerIndexBorderWidth', 2.75],\n ['resizeMarkerColor', 'rgba(0, 0, 0, 0.2)'],\n ['resizeMarkerSize', 2],\n ['rowGroupColumnWidth', 25],\n ['rowHeaderCellBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['rowHeaderCellBorderColor', 'rgba(200, 200, 200, 1)'],\n ['rowHeaderCellBorderWidth', 1],\n ['rowHeaderCellColor', 'rgba(50, 50, 50, 1)'],\n ['rowHeaderCellFont', '16px sans-serif'],\n ['rowHeaderCellHeight', 25],\n ['rowHeaderCellHorizontalAlignment', 'left'],\n ['rowHeaderCellHoverBackgroundColor', 'rgba(235, 235, 235, 1)'],\n ['rowHeaderCellHoverColor', 'rgba(0, 0, 0, 1)'],\n ['rowHeaderCellPaddingBottom', 5],\n ['rowHeaderCellPaddingLeft', 5],\n ['rowHeaderCellPaddingRight', 5],\n ['rowHeaderCellPaddingTop', 5],\n ['rowHeaderCellRowNumberGapHeight', 5],\n ['rowHeaderCellRowNumberGapColor', 'rgba(50, 50, 50, 1)'],\n ['rowHeaderCellSelectedBackgroundColor', 'rgba(217, 217, 217, 1)'],\n ['rowHeaderCellSelectedColor', 'rgba(50, 50, 50, 1)'],\n ['rowHeaderCellVerticalAlignment', 'center'],\n ['rowHeaderCellWidth', 57],\n ['scrollBarActiveColor', 'rgba(125, 125, 125, 1)'],\n ['scrollBarBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['scrollBarBorderColor', 'rgba(202, 202, 202, 1)'],\n ['scrollBarBorderWidth', 0.5],\n ['scrollBarBoxBorderRadius', 4.125],\n ['scrollBarBoxColor', 'rgba(192, 192, 192, 1)'],\n ['scrollBarBoxMargin', 2],\n ['scrollBarBoxMinSize', 15],\n ['scrollBarBoxWidth', 8],\n ['scrollBarCornerBackgroundColor', 'rgba(240, 240, 240, 1)'],\n ['scrollBarCornerBorderColor', 'rgba(202, 202, 202, 1)'],\n ['scrollBarWidth', 11],\n ['selectionHandleBorderColor', 'rgba(255, 255, 255, 1)'],\n ['selectionHandleBorderWidth', 1.5],\n ['selectionHandleColor', 'rgba(66, 133, 244, 1)'],\n ['selectionHandleSize', 8],\n ['selectionHandleType', 'square'],\n ['fillOverlayBorderColor', 'rgba(127, 127, 127, 1)'],\n ['fillOverlayBorderWidth', 2],\n ['selectionOverlayBorderColor', 'rgba(66, 133, 244, 1)'],\n ['selectionOverlayBorderWidth', 1],\n ['treeArrowBorderColor', 'rgba(195, 199, 202, 1)'],\n ['treeArrowBorderWidth', 1],\n ['treeArrowClickRadius', 5],\n ['treeArrowColor', 'rgba(155, 155, 155, 1)'],\n ['treeArrowHeight', 8],\n ['treeArrowMarginLeft', 0],\n ['treeArrowMarginRight', 5],\n ['treeArrowMarginTop', 6],\n ['treeArrowWidth', 13],\n ['treeGridHeight', 250],\n ['unhideIndicatorColor', 'rgba(0, 0, 0, 1)'],\n ['unhideIndicatorBackgroundColor', 'rgba(255, 255, 255, 1)'],\n ['unhideIndicatorBorderColor', 'rgba(174, 193, 232, 1)'],\n ['unhideIndicatorSize', 16],\n ['width', 'auto'],\n ],\n };\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nexport default function (self) {\n self.getClippingRect = function (ele) {\n var boundingRect = self.position(self.parentNode),\n eleRect = self.position(ele),\n s = self.scrollOffset(self.canvas),\n clipRect = {\n x: 0,\n y: 0,\n h: 0,\n w: 0,\n },\n parentRect = {\n x: -Infinity,\n y: -Infinity,\n h: Infinity,\n w: Infinity,\n },\n columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n rowHeaderCellWidth = self.getRowHeaderCellWidth();\n boundingRect.top -= s.top;\n boundingRect.left -= s.left;\n eleRect.top -= s.top;\n eleRect.left -= s.left;\n clipRect.h =\n boundingRect.top +\n boundingRect.height -\n ele.offsetTop -\n self.style.scrollBarWidth;\n clipRect.w =\n boundingRect.left +\n boundingRect.width -\n ele.offsetLeft -\n self.style.scrollBarWidth;\n clipRect.x = boundingRect.left + eleRect.left * -1 + rowHeaderCellWidth;\n clipRect.y = boundingRect.top + eleRect.top * -1 + columnHeaderCellHeight;\n return {\n x: clipRect.x > parentRect.x ? clipRect.x : parentRect.x,\n y: clipRect.y > parentRect.y ? clipRect.y : parentRect.y,\n h: clipRect.h < parentRect.h ? clipRect.h : parentRect.h,\n w: clipRect.w < parentRect.w ? clipRect.w : parentRect.w,\n };\n };\n self.clipElement = function (ele) {\n var clipRect = self.getClippingRect(ele);\n if (clipRect.w < 0) {\n clipRect.w = 0;\n }\n if (clipRect.h < 0) {\n clipRect.h = 0;\n }\n ele.style.clip =\n 'rect(' +\n clipRect.y +\n 'px,' +\n clipRect.w +\n 'px,' +\n clipRect.h +\n 'px,' +\n clipRect.x +\n 'px' +\n ')';\n // INFO https://developer.mozilla.org/en-US/docs/Web/CSS/clip\n // clip has been \"deprecated\" for clipPath. Of course nothing but chrome\n // supports clip path, so we'll keep using clip until someday clipPath becomes\n // more widely support. The code below works correctly, but setting clipPath and clip\n // at the same time has undesirable results.\n // ele.style.clipPath = 'polygon('\n // + clipRect.x + 'px ' + clipRect.y + 'px,'\n // + clipRect.x + 'px ' + clipRect.h + 'px,'\n // + clipRect.w + 'px ' + clipRect.h + 'px,'\n // + clipRect.w + 'px ' + clipRect.y + 'px'\n // + ')';\n };\n self.scrollOffset = function (e) {\n var x = 0,\n y = 0,\n scrollingElement = document.scrollingElement || {\n scrollLeft: 0,\n scrollTop: 0,\n };\n while (\n e.parentNode &&\n e.nodeName !== 'CANVAS-DATAGRID' &&\n e !== self.intf\n ) {\n if (\n e.nodeType !== 'canvas-datagrid-tree' &&\n e.nodeType !== 'canvas-datagrid-cell'\n ) {\n x -= e.scrollLeft;\n y -= e.scrollTop;\n }\n e = e.parentNode;\n }\n return {\n left: x - scrollingElement.scrollLeft,\n top: y - scrollingElement.scrollTop,\n };\n };\n self.resizeEditInput = function () {\n if (self.input && self.input.editCell) {\n var pos = self.canvas.getBoundingClientRect(),\n s = self.scrollOffset(self.intf),\n bm = self.style.gridBorderCollapse === 'collapse' ? 1 : 2,\n borderWidth = self.style.cellBorderWidth * bm,\n cell = self.getVisibleCellByIndex(\n self.input.editCell.columnIndex,\n self.input.editCell.rowIndex,\n ) || { x: -100, y: -100, height: 0, width: 0 };\n if (self.mobile) {\n self.input.style.left = '0';\n self.input.style.top =\n self.height -\n self.style.mobileEditInputHeight -\n borderWidth -\n 1 +\n 'px';\n self.input.style.height = self.style.mobileEditInputHeight + 'px';\n self.input.style.width = self.width - borderWidth - 1 + 'px';\n return;\n }\n let groupAreaOffsetY = self.getColumnGroupAreaHeight();\n let groupAreaOffsetX = self.getRowGroupAreaWidth();\n if (self.parentNode) {\n const { columnGroupsAreaHeight, rowGroupsAreaWidth } = self.parentNode;\n if (columnGroupsAreaHeight) groupAreaOffsetY += columnGroupsAreaHeight;\n if (rowGroupsAreaWidth) groupAreaOffsetX += rowGroupsAreaWidth;\n }\n self.input.style.left =\n pos.left +\n cell.x +\n self.canvasOffsetLeft -\n s.left +\n groupAreaOffsetX +\n 'px';\n self.input.style.top =\n pos.top +\n cell.y -\n self.style.cellBorderWidth +\n self.canvasOffsetTop -\n s.top +\n groupAreaOffsetY +\n 'px';\n self.input.style.height = cell.height - borderWidth + 'px';\n self.input.style.width = cell.width - self.style.cellPaddingLeft + 'px';\n self.clipElement(self.input);\n }\n };\n self.position = function (e, ignoreScrollOffset) {\n var x = 0,\n y = 0,\n s = e,\n h,\n w;\n let calculatedTree = false;\n while (e.offsetParent && e.nodeName !== 'CANVAS-DATAGRID') {\n const isTree = e.nodeType === 'canvas-datagrid-tree';\n if (!isTree || !calculatedTree) {\n x += e.offsetLeft;\n y += e.offsetTop;\n h = e.offsetHeight;\n w = e.offsetWidth;\n }\n if (isTree) calculatedTree = true;\n e = e.offsetParent;\n }\n if (ignoreScrollOffset) {\n return { left: x, top: y, height: h, width: w };\n }\n e = s;\n s = self.scrollOffset(e);\n return { left: x + s.left, top: y + s.top, height: h, width: w };\n };\n self.getLayerPos = function (e) {\n var rect = self.canvas.getBoundingClientRect(),\n pos = {\n x: e.clientX - rect.left,\n y: e.clientY - rect.top,\n };\n if (self.isChildGrid) {\n pos.x -= self.canvasOffsetLeft;\n pos.y -= self.canvasOffsetTop;\n if (self.parentNode.rowGroupsAreaWidth)\n pos.x -= self.parentNode.rowGroupsAreaWidth;\n if (self.parentNode.columnGroupsAreaHeight)\n pos.y -= self.parentNode.columnGroupsAreaHeight;\n }\n return {\n x: pos.x,\n y: pos.y,\n rect: rect,\n };\n };\n /**\n * Watches the host element and its parent for size changes so a grid sized\n * with auto/percentage dimensions follows layout changes (flex, splitters,\n * tab switches) without an explicit `resize()` call (#289, #239).\n * Falls back to the `window` resize listener when ResizeObserver is missing.\n */\n self.initResizeObserver = function () {\n if (self.isChildGrid || typeof window.ResizeObserver !== 'function') {\n return;\n }\n self.observedSizes = new Map();\n self.resizeObserver = new window.ResizeObserver(function (entries) {\n var changed = false;\n entries.forEach(function (entry) {\n var rect = entry.contentRect;\n var last = self.observedSizes.get(entry.target);\n if (!last || last.width !== rect.width || last.height !== rect.height) {\n self.observedSizes.set(entry.target, {\n width: rect.width,\n height: rect.height,\n });\n changed = true;\n }\n });\n if (!changed || self.disposed || self.resizeObserverFrame) {\n return;\n }\n // coalesce bursts of notifications into one resize per frame\n self.resizeObserverFrame = requestAnimationFrame(function () {\n self.resizeObserverFrame = undefined;\n if (self.disposed) {\n return;\n }\n self.resize(true);\n });\n });\n self.observeResizeTargets();\n };\n self.observeResizeTargets = function () {\n if (!self.resizeObserver) {\n return;\n }\n self.resizeObserver.disconnect();\n self.observedSizes = new Map();\n var host = self.intf && self.intf.nodeType === 1 ? self.intf : self.canvas;\n [host, host && host.parentNode].forEach(function (target) {\n if (target && target.nodeType === 1) {\n self.resizeObserver.observe(target);\n }\n });\n };\n self.unobserveResizeTargets = function () {\n if (self.resizeObserver) {\n self.resizeObserver.disconnect();\n }\n };\n /**\n * Ends editing, optionally aborting the edit.\n * @memberof canvasDatagrid\n * @name endEdit\n * @method\n * @param {boolean} abort When true, abort the edit.\n */\n self.endEdit = function (abort) {\n var cell = self.input.editCell,\n y = cell.rowIndex,\n // Decide up front whether this is the \"new row\" placeholder. A\n // beforeendedit handler may add or delete rows (#583), which would\n // otherwise make the last real row look like the placeholder.\n isNewRow = y === self.viewData.length;\n function abortEdit() {\n abort = true;\n }\n if (\n self.dispatchEvent('beforeendedit', {\n cell: cell,\n newValue: self.input.value,\n oldValue: cell.value,\n abort: abortEdit,\n input: self.input,\n })\n ) {\n return false;\n }\n if (self.input.value !== cell.value && !abort) {\n // key the change log by the bound (data) row index rather than the\n // view index so sorting/filtering cannot misattribute edits (#418)\n var changeIndex =\n cell.boundRowIndex === undefined ? y : cell.boundRowIndex;\n self.changes[changeIndex] = self.changes[changeIndex] || {};\n self.changes[changeIndex][cell.header.name] = self.input.value;\n if (!cell.data) {\n self.originalData[cell.boundRowIndex] = {};\n cell.data = self.originalData[cell.boundRowIndex];\n }\n cell.data[cell.header.name] = self.input.value;\n if (isNewRow) {\n if (\n self.dispatchEvent('newrow', {\n value: self.input.value,\n defaultValue: cell.value,\n aborted: abort,\n cell: cell,\n input: self.input,\n })\n ) {\n return false;\n }\n self.addRow(cell.data);\n self.createNewRowData();\n }\n self.dispatchDataChanged('edit', {\n cell: cell,\n value: self.input.value,\n });\n self.draw(true);\n }\n if (self.input.parentNode) {\n self.input.parentNode.removeChild(self.input);\n }\n self.intf.focus();\n self.dispatchEvent('endedit', {\n cell: cell,\n value: self.input.value,\n aborted: abort,\n input: self.input,\n });\n self.input = undefined;\n return true;\n };\n /**\n * Begins editing at cell x, row y.\n * @memberof canvasDatagrid\n * @name beginEditAt\n * @method\n * @param {number} x The column index of the cell to edit.\n * @param {number} y The row index of the cell to edit.\n * @param {boolean} inEnterMode If true, starting to type in cell will replace the\n * cell's previous value instead of appending, and using the arrow keys will allow\n * the user to navigate to adjacent cells instead of moving the text cursor around\n * (default is false, and means user is in 'edit' mode).\n */\n self.beginEditAt = function (x, y, NativeEvent, inEnterMode = false) {\n if (!self.attributes.editable) {\n return;\n }\n if (self.input) {\n self.endEdit();\n }\n var cell = self.getVisibleCellByIndex(x, y),\n s = self.getSchema(),\n adjacentCells,\n enumItems,\n enu,\n option,\n valueInEnum;\n if (!(cell && cell.header)) {\n return;\n }\n //HACK for IE10, does not like literal enum\n enu = cell.header['enum'];\n if (\n self.dispatchEvent('beforebeginedit', {\n cell: cell,\n NativeEvent: NativeEvent,\n })\n ) {\n return false;\n }\n self.scrollIntoView(x, y);\n self.setActiveCell(x, y);\n adjacentCells = self.getAdjacentCells();\n if (enu) {\n self.input = document.createElement('select');\n } else {\n self.input = document.createElement(\n self.attributes.multiLine ? 'textarea' : 'input',\n );\n }\n cell = self.getVisibleCellByIndex(x, y);\n //HACK on mobile devices sometimes edit can begin without the cell being in view, I don't know how.\n if (!cell) {\n return;\n }\n if (enu) {\n // add enums\n if (typeof enu === 'function') {\n enumItems = enu.apply(self.intf, [{ cell: cell }]);\n } else if (Array.isArray(enu)) {\n enumItems = enu;\n }\n enumItems.forEach(function (e) {\n var i = document.createElement('option'),\n val,\n title;\n if (Array.isArray(e)) {\n val = e[0];\n title = e[1];\n } else {\n val = e;\n title = e;\n }\n if (val === cell.value) {\n valueInEnum = true;\n }\n i.value = val;\n i.innerHTML = title;\n self.input.appendChild(i);\n });\n if (!valueInEnum) {\n option = document.createElement('option');\n option.value = cell.value;\n option.innerHTML = cell.value;\n self.input.appendChild(option);\n }\n self.input.addEventListener('change', function () {\n self.endEdit();\n self.draw(true);\n });\n }\n // if the user has not prevented the default action, append to the body\n if (\n !self.dispatchEvent('appendeditinput', { cell: cell, input: self.input })\n ) {\n document.body.appendChild(self.input);\n }\n self.createInlineStyle(\n self.input,\n self.mobile\n ? 'canvas-datagrid-edit-mobile-input'\n : 'canvas-datagrid-edit-input',\n );\n self.input.style.position = 'absolute';\n self.input.editCell = cell;\n self.resizeEditInput();\n if (enu && typeof self.input.showPicker === 'function') {\n // open the enum <select> immediately (#230); browsers only allow this\n // from a user gesture, so treat failure as harmless\n try {\n self.input.showPicker();\n } catch (err) {\n // no user activation\n }\n }\n self.input.style.zIndex = self.style.editCellZIndex;\n self.input.style.fontSize =\n parseInt(self.style.editCellFontSize, 10) * self.scale + 'px';\n\n var cellValueIsEmpty = [null, undefined].indexOf(cell.value) !== -1;\n var shouldClearCellValue = cellValueIsEmpty || inEnterMode;\n\n self.input.value = shouldClearCellValue ? '' : cell.value;\n let width = Math.round(\n self.input.value.length *\n parseInt(self.style.editCellFontSize, 10) *\n 0.7 *\n self.scale,\n );\n if (width + self.style.cellPaddingLeft < cell.width) {\n width = cell.width - self.style.cellPaddingLeft;\n } else if (width > self.width - cell.x - self.style.scrollBarWidth) {\n width = self.width - cell.x - self.style.scrollBarWidth;\n self.input.style.height = 'auto';\n }\n self.input.style.width = width + 'px';\n self.input.focus();\n self.input.addEventListener('click', self.stopPropagation);\n self.input.addEventListener('dblclick', self.stopPropagation);\n self.input.addEventListener('mouseup', self.stopPropagation);\n self.input.addEventListener('mousedown', self.stopPropagation);\n self.input.addEventListener('keydown', function (e) {\n var nx = cell.columnIndex,\n ny = cell.rowIndex;\n\n if (e.key === 'Escape') {\n self.endEdit(true); // end edit and abort the value change\n self.draw(true);\n } else if (e.key === 'Enter' && self.attributes.multiLine && e.altKey) {\n self.input.value = self.input.value + '\\n';\n self.input.scrollTop = self.input.scrollHeight;\n } else if (e.key === 'Enter') {\n self.endEdit();\n\n // Move to cell in next or previous row\n var nextRowIndex = e.shiftKey\n ? Math.max(0, ny - 1)\n : Math.min(ny + 1, self.viewData.length - 1);\n\n if (nextRowIndex !== ny) {\n self.scrollIntoView(nx, nextRowIndex);\n self.setActiveCell(nx, nextRowIndex);\n }\n\n self.draw(true);\n } else if (\n ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(e.key) &&\n inEnterMode\n ) {\n switch (e.key) {\n case 'ArrowUp':\n ny = Math.max(0, ny - 1);\n break;\n case 'ArrowDown':\n ny = Math.min(ny + 1, self.viewData.length - 1);\n break;\n case 'ArrowLeft':\n nx = Math.max(nx - 1, 0);\n break;\n case 'ArrowRight':\n nx = adjacentCells.right;\n break;\n }\n\n self.endEdit();\n\n self.scrollIntoView(nx, ny);\n self.setActiveCell(nx, ny);\n\n self.draw(true);\n } else if (e.key === 'Tab') {\n e.preventDefault();\n if (!self.endEdit()) {\n return;\n }\n if (e.shiftKey) {\n nx = adjacentCells.left;\n } else {\n nx = adjacentCells.right;\n }\n if (adjacentCells.left === x && e.shiftKey) {\n nx = adjacentCells.last;\n ny -= 1;\n }\n if (adjacentCells.right === x && !e.shiftKey) {\n nx = adjacentCells.first;\n ny += 1;\n }\n if (ny < 0) {\n ny = self.viewData.length - 1;\n }\n if (ny > self.viewData.length - 1) {\n ny = 0;\n }\n self.scrollIntoView(nx, ny);\n self.beginEditAt(nx, ny, e);\n } else {\n let width = Math.round(\n self.input.value.length *\n parseInt(self.style.editCellFontSize, 10) *\n 0.7 *\n self.scale,\n );\n if (width + self.style.cellPaddingLeft < cell.width) {\n width = cell.width - self.style.cellPaddingLeft;\n } else if (width > self.width - cell.x - self.style.scrollBarWidth) {\n width = self.width - cell.x - self.style.scrollBarWidth;\n self.input.style.height = 'auto';\n }\n self.input.style.width = width + 'px';\n }\n });\n\n self.dispatchEvent('beginedit', { cell: cell, input: self.input });\n };\n self.createInlineStyle = function (el, className) {\n var css = {\n 'canvas-datagrid-button-wrapper': {\n display: 'inline-block',\n padding: self.style.buttonPadding,\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: self.style.buttonBorderColor,\n cursor: 'pointer',\n background: self.style.buttonBackgroundColor,\n userSelect: 'none',\n },\n 'canvas-datagrid-button-wrapper:hover': {\n borderColor: self.style.buttonBorderColor,\n background: self.style.buttonHoverBackgroundColor,\n },\n 'canvas-datagrid-button-wrapper:active': {\n borderColor: self.style.buttonActiveBorderColor,\n background: self.style.buttonActiveBackgroundColor,\n },\n 'canvas-datagrid-button-icon': {\n width: '18px',\n height: '18px',\n display: 'inline-block',\n verticalAlign: 'middle',\n },\n 'canvas-datagrid-button-arrow': {\n display: 'inline-block',\n color: self.style.buttonArrowColor,\n fontSize: '9px',\n },\n 'canvas-datagrid-button-menu-item-mobile': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n color: 'inherit',\n background: 'inherit',\n margin: self.style.contextMenuItemMargin,\n borderRadius: self.style.contextMenuItemBorderRadius,\n verticalAlign: 'middle',\n },\n 'canvas-datagrid-button-menu-item': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n color: 'inherit',\n background: 'inherit',\n margin: self.style.contextMenuItemMargin,\n borderRadius: self.style.contextMenuItemBorderRadius,\n verticalAlign: 'middle',\n },\n 'canvas-datagrid-button-menu-item:hover': {\n background: self.style.contextMenuHoverBackground,\n color: self.style.contextMenuHoverColor,\n },\n 'canvas-datagrid-button-menu-label': {\n margin: self.style.contextMenuLabelMargin,\n display: self.style.contextMenuLabelDisplay,\n minWidth: self.style.contextMenuLabelMinWidth,\n maxWidth: self.style.contextMenuLabelMaxWidth,\n },\n 'canvas-datagrid-button-menu-mobile': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n border: self.style.contextMenuBorder,\n padding: self.style.contextMenuPadding,\n borderRadius: self.style.contextMenuBorderRadius,\n opacity: self.style.contextMenuOpacity,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n },\n 'canvas-datagrid-button-menu': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n border: self.style.contextMenuBorder,\n padding: self.style.contextMenuPadding,\n borderRadius: self.style.contextMenuBorderRadius,\n opacity: self.style.contextMenuOpacity,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n cursor: self.style.contextMenuCursor,\n },\n 'canvas-datagrid-context-menu-filter-input': {\n height: '19px',\n verticalAlign: 'bottom',\n marginLeft: '2px',\n padding: '0',\n background: self.style.contextFilterInputBackground,\n color: self.style.contextFilterInputColor,\n border: self.style.contextFilterInputBorder,\n borderRadius: self.style.contextFilterInputBorderRadius,\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextFilterInputFontFamily,\n fontSize: self.style.contextFilterInputFontSize,\n },\n 'canvas-datagrid-context-menu-filter-button': {\n height: '19px',\n verticalAlign: 'bottom',\n marginLeft: '2px',\n padding: '0',\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n border: self.style.contextFilterButtonBorder,\n borderRadius: self.style.contextFilterButtonBorderRadius,\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFilterButtonFontFamily,\n fontSize: self.style.contextMenuFilterButtonFontSize,\n },\n 'canvas-datagrid-context-child-arrow': {\n cssFloat: 'right',\n color: self.style.childContextMenuArrowColor,\n fontSize: self.style.contextMenuChildArrowFontSize,\n fontFamily: self.style.contextMenuFontFamily,\n verticalAlign: 'middle',\n },\n 'canvas-datagrid-autocomplete': {\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n border: self.style.contextMenuBorder,\n padding: self.style.contextMenuPadding,\n borderRadius: self.style.contextMenuBorderRadius,\n opacity: self.style.contextMenuOpacity,\n position: 'absolute',\n zIndex: 9999,\n overflow: 'hidden',\n },\n 'canvas-datagrid-autocomplete-item': {\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n },\n 'canvas-datagrid-autocomplete-item:hover': {\n background: self.style.contextMenuHoverBackground,\n color: self.style.contextMenuHoverColor,\n },\n 'canvas-datagrid-canvas': {\n position: 'absolute',\n zIndex: '-1',\n },\n 'canvas-datagrid': {\n display: 'block',\n },\n 'canvas-datagrid-control-input': {\n position: 'fixed',\n top: '-5px',\n left: '-5px',\n border: 'none',\n opacity: '0',\n cursor: 'pointer',\n width: '1px',\n height: '1px',\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n },\n 'canvas-datagrid-edit-mobile-input': {\n boxSizing: 'content-box',\n outline: 'none',\n margin: '0',\n padding: '0 0 0 0',\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.mobileEditFontFamily,\n fontSize: self.style.mobileEditFontSize,\n border: self.style.editCellBorder,\n color: self.style.editCellColor,\n background: self.style.editCellBackgroundColor,\n appearance: 'none',\n webkitAppearance: 'none',\n mozAppearance: 'none',\n borderRadius: '0',\n },\n 'canvas-datagrid-edit-input': {\n boxSizing: 'content-box',\n outline: 'none',\n margin: '0',\n padding: '0 0 0 ' + self.style.editCellPaddingLeft + 'px',\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.editCellFontFamily,\n fontSize: self.style.editCellFontSize,\n boxShadow: self.style.editCellBoxShadow,\n border: self.style.editCellBorder,\n color: self.style.editCellColor,\n background: self.style.editCellBackgroundColor,\n appearance: 'none',\n webkitAppearance: 'none',\n mozAppearance: 'none',\n borderRadius: '0',\n },\n 'canvas-datagrid-context-menu-item-mobile': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n color: 'inherit',\n background: 'inherit',\n margin: self.style.contextMenuItemMargin,\n borderRadius: self.style.contextMenuItemBorderRadius,\n verticalAlign: 'middle',\n },\n 'canvas-datagrid-context-menu-item': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n color: 'inherit',\n background: 'inherit',\n margin: self.style.contextMenuItemMargin,\n borderRadius: self.style.contextMenuItemBorderRadius,\n verticalAlign: 'middle',\n },\n 'canvas-datagrid-context-menu-item:hover': {\n background: self.style.contextMenuHoverBackground,\n color: self.style.contextMenuHoverColor,\n },\n 'canvas-datagrid-context-menu-label': {\n margin: self.style.contextMenuLabelMargin,\n display: self.style.contextMenuLabelDisplay,\n minWidth: self.style.contextMenuLabelMinWidth,\n maxWidth: self.style.contextMenuLabelMaxWidth,\n },\n 'canvas-datagrid-context-menu-mobile': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n border: self.style.contextMenuBorder,\n padding: self.style.contextMenuPadding,\n borderRadius: self.style.contextMenuBorderRadius,\n opacity: self.style.contextMenuOpacity,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n },\n 'canvas-datagrid-context-menu': {\n lineHeight: 'normal',\n fontWeight: 'normal',\n fontFamily: self.style.contextMenuFontFamily,\n fontSize: self.style.contextMenuFontSize,\n background: self.style.contextMenuBackground,\n color: self.style.contextMenuColor,\n border: self.style.contextMenuBorder,\n padding: self.style.contextMenuPadding,\n borderRadius: self.style.contextMenuBorderRadius,\n opacity: self.style.contextMenuOpacity,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n cursor: self.style.contextMenuCursor,\n },\n 'canvas-datagrid-invalid-search-regExp': {\n background: self.style.contextMenuFilterInvalidExpresion,\n },\n };\n if (css[className]) {\n Object.keys(css[className]).map(function (prop) {\n el.style[prop] = css[className][prop];\n });\n el.className = className;\n }\n return;\n };\n self.appendTo = function (e) {\n self.parentNode = e;\n self.setDom();\n };\n self.setDom = function () {\n if (self.isChildGrid) {\n self.parentGrid = self.parentNode.parentGrid;\n self.ctx = self.parentGrid.context;\n self.canvas = self.parentGrid.canvas;\n self.controlInput = self.parentGrid.controlInput;\n self.eventParent = self.canvas;\n } else {\n self.controlInput = self.controlInput || document.createElement('input');\n self.controlInput.onblur = self.intf.blur;\n self.createInlineStyle(\n self.controlInput,\n 'canvas-datagrid-control-input',\n );\n self.isChildGrid = false;\n self.parentDOMNode = self.parentNode;\n self.parentIsCanvas = /^canvas$/i.test(self.parentDOMNode.tagName);\n if (self.parentIsCanvas) {\n self.canvas = self.parentDOMNode;\n } else {\n self.canvas = document.createElement('canvas');\n self.parentDOMNode.appendChild(self.canvas);\n }\n document.body.appendChild(self.controlInput);\n self.createInlineStyle(self.canvas, 'canvas-datagrid');\n self.ctx = self.canvas.getContext('2d');\n self.ctx.textBaseline = 'alphabetic';\n self.eventParent = self.canvas;\n }\n self.parentNodeStyle = self.canvas.style;\n self.controlInput.setAttribute('readonly', true);\n self.controlInput.addEventListener('blur', function (e) {\n if (e.target !== self.canvas) {\n self.hasFocus = false;\n }\n });\n self.eventParent.addEventListener('scroll', self.resize, false);\n self.eventParent.addEventListener('touchstart', self.touchstart, {\n passive: true,\n });\n self.eventParent.addEventListener('mousedown', self.mousedown, false);\n self.eventParent.addEventListener('dblclick', self.dblclick, false);\n self.eventParent.addEventListener('click', self.click, false);\n self.eventParent.addEventListener('mouseup', self.mouseup, false);\n window.addEventListener('mouseup', self.mouseupOutsideGrid, false);\n window.addEventListener('mousemove', self.mousemove);\n self[self.isChildGrid ? 'parentGrid' : 'eventParent'].addEventListener(\n 'wheel',\n self.scrollWheel,\n false,\n );\n self.canvas.addEventListener('contextmenu', self.contextmenuEvent, false);\n self.controlInput.addEventListener('copy', self.copy);\n self.controlInput.addEventListener('cut', self.cut);\n self.controlInput.addEventListener('paste', self.paste);\n self.controlInput.addEventListener('keypress', self.keypress, false);\n self.controlInput.addEventListener('keyup', self.keyup, false);\n self.controlInput.addEventListener('keydown', self.keydown, false);\n window.addEventListener('resize', self.resize);\n self.initResizeObserver();\n };\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals XMLSerializer: false, define: true, Blob: false, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport { isCellSelected } from './selections/util';\n\nexport default function (self) {\n var perfCounters = [],\n cachedImagesDrawn = false,\n drawCount = 0,\n perfWindowSize = 300,\n entityCount = [],\n hiddenFrozenColumnCount = 0,\n scrollDebugCounters = [],\n touchPPSCounters = [];\n self.htmlImageCache = {};\n // more heavyweight version than fillArray defined in intf.js\n function fillArray(low, high, step, def) {\n step = step || 1;\n var i = [],\n x;\n for (x = low; x <= high; x += step) {\n i[x] = def === undefined ? x : typeof def === 'function' ? def(x) : def;\n }\n return i;\n }\n function drawPerfLine(w, h, x, y, perfArr, arrIndex, max, color, useAbs) {\n var i = w / perfArr.length,\n r = h / max;\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.beginPath();\n self.ctx.moveTo(x, y + h);\n perfArr.forEach(function (n) {\n var val = arrIndex === undefined ? n : n[arrIndex],\n cx,\n cy;\n if (useAbs) {\n val = Math.abs(val);\n }\n cx = x + i;\n cy = y + h - val * r;\n self.ctx.lineTo(cx, cy);\n x += i;\n });\n self.ctx.moveTo(x + w, y + h);\n self.ctx.strokeStyle = color;\n self.ctx.stroke();\n }\n function drawOnAllImagesLoaded() {\n var loaded = true;\n Object.keys(self.htmlImageCache).forEach(function (html) {\n if (!self.htmlImageCache[html].img.complete) {\n loaded = false;\n }\n });\n if (loaded && !cachedImagesDrawn) {\n cachedImagesDrawn = true;\n self.draw();\n }\n }\n function drawHtml(cell) {\n var img,\n v = cell.innerHTML || cell.formattedValue,\n cacheKey =\n v.toString() + cell.rowIndex.toString() + cell.columnIndex.toString(),\n x = Math.round(cell.x + self.canvasOffsetLeft),\n y = Math.round(cell.y + self.canvasOffsetTop);\n if (self.htmlImageCache[cacheKey]) {\n img = self.htmlImageCache[cacheKey].img;\n if (\n self.htmlImageCache[cacheKey].height !== cell.height ||\n self.htmlImageCache[cacheKey].width !== cell.width\n ) {\n // height and width of the cell has changed, invalidate cache\n self.htmlImageCache[cacheKey] = undefined;\n } else {\n if (!img.complete) {\n return;\n }\n return self.ctx.drawImage(img, x, y);\n }\n } else {\n cachedImagesDrawn = false;\n }\n img = new Image(cell.width, cell.height);\n self.htmlImageCache[cacheKey] = {\n img,\n width: cell.width,\n height: cell.height,\n };\n img.onload = function () {\n self.ctx.drawImage(img, x, y);\n drawOnAllImagesLoaded();\n };\n img.src =\n 'data:image/svg+xml;base64,' +\n btoa(\n '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"' +\n cell.width +\n '\" height=\"' +\n cell.height +\n '\">\\n' +\n '<foreignObject class=\"node\" x=\"0\" y=\"0\" width=\"100%\" height=\"100%\">\\n' +\n '<body xmlns=\"http://www.w3.org/1999/xhtml\" style=\"margin:0;padding:0;\">\\n' +\n v +\n '\\n' +\n '</body>' +\n '</foreignObject>\\n' +\n '</svg>\\n',\n );\n }\n /**\n * @param {number[]} coords [x0,y0, x1,y1, x2,y2, ...]\n * @param {boolean} [fill] fill the area that construct by these lines but not stroke\n */\n function drawLines(coords, fill) {\n if (coords.length < 4) return;\n self.ctx.beginPath();\n self.ctx.moveTo(\n coords[0] + self.canvasOffsetLeft,\n coords[1] + self.canvasOffsetTop,\n );\n for (let i = 2; i < coords.length; i += 2) {\n const x = coords[i] + self.canvasOffsetLeft;\n const y = coords[i + 1] + self.canvasOffsetTop;\n self.ctx.lineTo(x, y);\n }\n if (fill) self.ctx.fill();\n else self.ctx.stroke();\n }\n /**\n * @param {number} x based-X (left-top)\n * @param {number} y based-Y (left-top)\n * @param {number} width\n * @param {boolean} collapsed true: '+'; false: '-'\n */\n function drawGroupHandle(x, y, width, collapsed) {\n fillRect(x, y, width, width);\n strokeRect(x, y, width, width);\n const cx = x + width * 0.5;\n const cy = y + width * 0.5;\n drawLines([x + width * 0.2, cy, x + width * 0.78, cy]);\n if (collapsed) drawLines([cx, y + width * 0.22, cx, y + width * 0.8]);\n }\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} size\n * @param {string} dir Direction of the triangle, one of the 't','b','l' and 'r'\n * @param {boolean} [active]\n */\n function drawUnhideIndicator(x, y, size, dir, active) {\n const minPadding = size * 0.2;\n const maxPadding = size * 0.3;\n /** The long edge width of the triangle */\n const longEdge = size - 2 * minPadding;\n /** The median width of the triangle */\n const median = size - 2 * maxPadding;\n const halfLongEdge = longEdge * 0.5;\n let x0, y0;\n let coords, borderCoords;\n switch (dir) {\n case 'r':\n x0 = x + maxPadding;\n y0 = y + minPadding;\n borderCoords = [x, y, x + size, y, x + size, y + size, x, y + size];\n coords = [x0, y0, x0, y0 + longEdge, x0 + median, y0 + halfLongEdge];\n break;\n case 'l':\n x0 = x + size - maxPadding;\n y0 = y + minPadding;\n borderCoords = [x + size, y, x, y, x, y + size, x + size, y + size];\n coords = [x0, y0, x0, y0 + longEdge, x0 - median, y0 + halfLongEdge];\n break;\n case 't':\n x0 = x + minPadding;\n y0 = y + size - maxPadding;\n borderCoords = [x, y + size, x, y, x + size, y, x + size, y + size];\n coords = [x0, y0, x0 + longEdge, y0, x0 + halfLongEdge, y0 - median];\n break;\n case 'b':\n x0 = x + minPadding;\n y0 = y + maxPadding;\n borderCoords = [x, y, x, y + size, x + size, y + size, x + size, y];\n coords = [x0, y0, x0 + longEdge, y0, x0 + halfLongEdge, y0 + median];\n break;\n }\n\n if (active) {\n self.ctx.strokeStyle = self.style.unhideIndicatorBorderColor;\n self.ctx.lineWidth = 2;\n drawLines(borderCoords);\n\n self.ctx.fillStyle = self.style.unhideIndicatorBackgroundColor;\n let offset = dir === 'r' || dir === 'b' ? 1 : 0;\n if (dir === 'l' || dir === 'r')\n fillRect(x - offset, y, size + offset, size);\n else fillRect(x, y - offset, size, size + offset);\n }\n\n self.ctx.fillStyle = self.style.unhideIndicatorColor;\n drawLines(coords, true);\n }\n function drawOrderByArrow(x, y) {\n var mt = self.style.columnHeaderOrderByArrowMarginTop * self.scale,\n ml = self.style.columnHeaderOrderByArrowMarginLeft * self.scale,\n mr = self.style.columnHeaderOrderByArrowMarginRight * self.scale,\n aw = self.style.columnHeaderOrderByArrowWidth * self.scale,\n ah = self.style.columnHeaderOrderByArrowHeight * self.scale;\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.fillStyle = self.style.columnHeaderOrderByArrowColor;\n self.ctx.strokeStyle = self.style.columnHeaderOrderByArrowBorderColor;\n self.ctx.beginPath();\n x = x + ml;\n y = y + mt;\n if (self.orderDirection === 'asc') {\n self.ctx.lineTo(x, y + ah);\n self.ctx.lineTo(x + aw, y + ah);\n self.ctx.lineTo(x + aw * 0.5, y);\n self.ctx.lineTo(x, y + ah);\n } else {\n self.ctx.moveTo(x, y);\n self.ctx.lineTo(x + aw, y);\n self.ctx.lineTo(x + aw * 0.5, y + ah);\n self.ctx.moveTo(x, y);\n }\n self.ctx.stroke();\n self.ctx.fill();\n return ml + aw + mr;\n }\n function drawTreeArrow(cell, x, y) {\n var mt = self.style.treeArrowMarginTop * self.scale,\n mr = self.style.treeArrowMarginRight * self.scale,\n ml = self.style.treeArrowMarginLeft * self.scale,\n aw = self.style.treeArrowWidth * self.scale,\n ah = self.style.treeArrowHeight * self.scale;\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.fillStyle = self.style.treeArrowColor;\n self.ctx.strokeStyle = self.style.treeArrowBorderColor;\n self.ctx.beginPath();\n x = x + ml;\n y = y + mt;\n if (self.openChildren[cell.rowIndex]) {\n self.ctx.moveTo(x, y);\n self.ctx.lineTo(x + aw, y);\n self.ctx.lineTo(x + aw * 0.5, y + ah);\n self.ctx.moveTo(x, y);\n } else {\n self.ctx.lineTo(x, y);\n self.ctx.lineTo(x + ah, y + aw * 0.5);\n self.ctx.lineTo(x, y + aw);\n self.ctx.lineTo(x, y);\n }\n self.ctx.stroke();\n self.ctx.fill();\n return ml + aw + mr;\n }\n function drawCellTreeIcon(cell, tree, rowTree) {\n const parentCount = rowTree ? tree.parentCount : 0;\n const iconSize = self.style.cellTreeIconWidth * self.scale,\n marginTop = self.style.cellTreeIconMarginTop * self.scale,\n marginRight = self.style.cellTreeIconMarginRight * self.scale,\n marginLeft =\n self.style.cellTreeIconMarginLeft * self.scale +\n parentCount * (iconSize + cell.paddingLeft);\n\n let x = cell.x + cell.paddingLeft + self.canvasOffsetLeft + marginLeft,\n y = cell.y + self.canvasOffsetTop + marginTop;\n\n if (tree.icon) {\n self.ctx.beginPath();\n const oldFillStyle = self.ctx.fillStyle;\n const oldStrokeStyle = self.ctx.strokeStyle;\n\n if (cell.hovered && self.hovers.onCellTreeIcon) {\n self.ctx.fillStyle = self.style.cellTreeIconHoverFillColor;\n } else {\n self.ctx.fillStyle = self.style.cellTreeIconFillColor;\n }\n\n self.ctx.fillRect(x, y, iconSize, iconSize);\n self.ctx.strokeStyle = self.style.cellTreeIconBorderColor;\n self.ctx.rect(x, y, iconSize, iconSize);\n self.ctx.stroke();\n\n self.ctx.beginPath();\n if (tree.expand) {\n self.ctx.moveTo(x + 3, y + iconSize * 0.5);\n self.ctx.lineTo(x + iconSize - 3, y + iconSize * 0.5);\n } else {\n self.ctx.moveTo(x + 2, y + iconSize * 0.5);\n self.ctx.lineTo(x + iconSize - 2, y + iconSize * 0.5);\n self.ctx.moveTo(x + iconSize * 0.5, y + 2);\n self.ctx.lineTo(x + iconSize * 0.5, y + iconSize - 2);\n }\n self.ctx.lineWidth = self.style.cellTreeIconLineWidth;\n self.ctx.strokeStyle = self.style.cellTreeIconLineColor;\n self.ctx.stroke();\n\n self.ctx.strokeStyle = oldStrokeStyle;\n self.ctx.fillStyle = oldFillStyle;\n }\n\n return marginLeft + iconSize + marginRight;\n }\n function drawFilterButtonArrow(x, y) {\n var mt =\n ((self.style.filterButtonHeight - self.style.filterButtonArrowHeight) /\n 2) *\n self.scale,\n ml =\n ((self.style.filterButtonWidth - self.style.filterButtonArrowWidth) /\n 2) *\n self.scale,\n aw = self.style.filterButtonArrowWidth * self.scale,\n ah = self.style.filterButtonArrowHeight * self.scale;\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.fillStyle = self.style.filterButtonArrowColor;\n self.ctx.strokeStyle = self.style.filterButtonArrowBorderColor;\n self.ctx.beginPath();\n x = x + ml;\n y = y + mt;\n\n self.ctx.moveTo(x, y);\n self.ctx.lineTo(x + aw, y);\n self.ctx.lineTo(x + aw * 0.5, y + ah);\n self.ctx.moveTo(x, y);\n\n self.ctx.stroke();\n self.ctx.fill();\n return ml + aw;\n }\n function radiusRect(x, y, w, h, radius) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n var r = x + w,\n b = y + h;\n self.ctx.beginPath();\n self.ctx.moveTo(x + radius, y);\n self.ctx.lineTo(r - radius, y);\n self.ctx.quadraticCurveTo(r, y, r, y + radius);\n self.ctx.lineTo(r, y + h - radius);\n self.ctx.quadraticCurveTo(r, b, r - radius, b);\n self.ctx.lineTo(x + radius, b);\n self.ctx.quadraticCurveTo(x, b, x, b - radius);\n self.ctx.lineTo(x, y + radius);\n self.ctx.quadraticCurveTo(x, y, x + radius, y);\n }\n function fillRect(x, y, w, h) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.fillRect(x, y, w, h);\n }\n function strokeRect(x, y, w, h) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.strokeRect(x, y, w, h);\n }\n function fillText(text, x, y) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.fillText(text, x, y);\n }\n function fillCircle(x, y, r) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.beginPath();\n self.ctx.arc(x, y, r, 0, 2 * Math.PI);\n self.ctx.fill();\n }\n function strokeCircle(x, y, r) {\n x += self.canvasOffsetLeft;\n y += self.canvasOffsetTop;\n self.ctx.beginPath();\n self.ctx.arc(x, y, r, 0, 2 * Math.PI);\n self.ctx.stroke();\n }\n function clipFrozenArea(mode) {\n // 0 both, 1 rows, 2 cols\n // self.lastFrozenColumnPixel;\n // self.lastFrozenRowPixel;\n self.ctx.beginPath();\n if (mode === 0) {\n self.ctx.moveTo(self.lastFrozenColumnPixel, self.lastFrozenRowPixel);\n self.ctx.lineTo(self.lastFrozenColumnPixel, self.height);\n self.ctx.lineTo(self.width, self.height);\n self.ctx.lineTo(self.width, self.lastFrozenRowPixel);\n }\n if (mode === 1) {\n self.ctx.moveTo(0, self.lastFrozenRowPixel);\n self.ctx.lineTo(0, self.height);\n self.ctx.lineTo(self.width, self.height);\n self.ctx.lineTo(self.width, self.lastFrozenRowPixel);\n }\n if (mode === 2) {\n self.ctx.moveTo(self.lastFrozenColumnPixel, 0);\n self.ctx.lineTo(self.width, 0);\n self.ctx.lineTo(self.width, self.height);\n self.ctx.lineTo(self.lastFrozenColumnPixel, self.height);\n }\n self.ctx.clip();\n }\n function fillHandle(x, y, r) {\n if (self.style.selectionHandleType === 'circle') {\n return fillCircle(x, y, r * 0.5);\n }\n fillRect(x - r * 0.5, y - r * 0.5, r, r);\n }\n function strokeHandle(x, y, r) {\n if (self.style.selectionHandleType === 'circle') {\n return strokeCircle(x, y, r * 0.5);\n }\n strokeRect(x - r * 0.5, y - r * 0.5, r, r);\n }\n function addselectionHandle(c, pos) {\n var hw = self.style.selectionHandleSize,\n p = {\n tr: function () {\n fillHandle(c.x + c.width, c.y, hw);\n strokeHandle(c.x + c.width, c.y, hw);\n },\n br: function () {\n fillHandle(c.x + c.width, c.y + c.height, hw);\n strokeHandle(c.x + c.width, c.y + c.height, hw);\n },\n tl: function () {\n fillHandle(c.x, c.y, hw);\n strokeHandle(c.x, c.y, hw);\n },\n bl: function () {\n fillHandle(c.x, c.y + c.height, hw);\n strokeHandle(c.x, c.y + c.height, hw);\n },\n };\n p[pos]();\n }\n function addBorderLine(c, pos) {\n self.ctx.beginPath();\n var p = {\n t: function () {\n self.ctx.moveTo(\n c.x + self.canvasOffsetLeft,\n c.y + self.canvasOffsetTop,\n );\n self.ctx.lineTo(\n c.x + self.canvasOffsetLeft + c.width,\n c.y + self.canvasOffsetTop,\n );\n },\n r: function () {\n self.ctx.moveTo(\n c.x + self.canvasOffsetLeft + c.width,\n c.y + self.canvasOffsetTop,\n );\n self.ctx.lineTo(\n c.x + self.canvasOffsetLeft + c.width,\n c.y + self.canvasOffsetTop + c.height,\n );\n },\n b: function () {\n self.ctx.moveTo(\n c.x + self.canvasOffsetLeft,\n c.y + self.canvasOffsetTop + c.height,\n );\n self.ctx.lineTo(\n c.x + self.canvasOffsetLeft + c.width,\n c.y + self.canvasOffsetTop + c.height,\n );\n },\n l: function () {\n self.ctx.moveTo(\n c.x + self.canvasOffsetLeft,\n c.y + self.canvasOffsetTop,\n );\n self.ctx.lineTo(\n c.x + self.canvasOffsetLeft,\n c.y + self.canvasOffsetTop + c.height,\n );\n },\n };\n p[pos]();\n self.ctx.stroke();\n }\n function addEllipsis(text, width) {\n var c,\n w = 0;\n if (self.ellipsisCache[text] && self.ellipsisCache[text][width]) {\n return self.ellipsisCache[text][width];\n }\n //TODO Add ellipsis back when there is a fast way to do it\n w = self.ctx.measureText(text).width;\n self.ellipsisCache[text] = self.ellipsisCache[text] || {};\n c = { value: text, width: w };\n self.ellipsisCache[text][width] = c;\n return c;\n }\n function wrapText(cell, splitChar) {\n if (!cell.formattedValue) {\n return {\n lines: [{ width: 0, value: '' }],\n width: 0,\n height: cell.calculatedLineHeight,\n };\n }\n var max = 0,\n n = '\\n',\n x,\n word,\n words = cell.formattedValue.split(splitChar),\n textHeight = cell.calculatedLineHeight,\n lines = [],\n out = [],\n wrap = self.style.cellWhiteSpace !== 'nowrap',\n autoResize = self.attributes.autoResizeRows && wrap,\n elWidth,\n et = self.attributes.ellipsisText,\n elClipLength,\n plWidth,\n clippedVal,\n ogWordWidth,\n previousLine,\n line = {\n width: 0,\n value: '',\n },\n cHeight = wrap ? cell.paddedHeight : cell.calculatedLineHeight;\n lines.push(line);\n elWidth = self.ctx.measureText(' ' + et).width;\n for (x = 0; x < words.length; x += 1) {\n word = words[x];\n var curSplitChar = word[word.length - 1] === '-' ? '' : splitChar;\n var measure = self.ctx.measureText(word + curSplitChar);\n if (line.width + measure.width + elWidth < cell.paddedWidth) {\n line.value += word + curSplitChar;\n line.width += measure.width;\n continue;\n }\n // if there is a hyphenated word that is too long\n // split it and add the split set to the array\n // then back up and re-read new split set\n // this behavior seems right, it might not be\n if (/\\w-\\w/.test(word) && cell.paddedWidth < measure.width) {\n var arr = word.split('-');\n arr = arr.map((item, index) => {\n return index === arr.length - 1 ? item : item + '-';\n });\n words.splice(x, 1, ...arr);\n x -= 1;\n continue;\n }\n line = {\n width: measure.width,\n value: word + curSplitChar,\n };\n if (x === 0) {\n lines = [];\n lines.push(line);\n }\n textHeight += cell.calculatedLineHeight;\n if (textHeight > cHeight && !autoResize) {\n if (lines.length === 0) {\n break;\n }\n elClipLength = 1;\n previousLine = lines[lines.length - 1];\n if (previousLine.width < cell.paddedWidth && words.length === 1) {\n break;\n }\n clippedVal = previousLine.value + word;\n plWidth = self.ctx.measureText(clippedVal + et).width;\n var originText = clippedVal;\n if (plWidth > cell.paddedWidth) {\n var stepLength = parseInt(clippedVal.length / 2);\n var direction = -1;\n while (stepLength > 0) {\n clippedVal = originText.substr(\n 0,\n stepLength * direction + clippedVal.length,\n );\n plWidth = self.ctx.measureText(clippedVal + et).width;\n direction = plWidth > cell.paddedWidth ? -1 : 1;\n stepLength = parseInt(stepLength / 2);\n }\n }\n clippedVal =\n clippedVal + (originText.length != clippedVal.length ? et : '');\n previousLine.value = clippedVal;\n previousLine.width = plWidth;\n break;\n }\n if (x > 0) {\n lines.push(line);\n }\n }\n return {\n lines: lines,\n width: max,\n height: cell.calculatedLineHeight * lines.length,\n };\n }\n function drawText(cell, treeCellPadding = 0) {\n var ll = cell.text.lines.length,\n h = cell.fontHeight * cell.lineHeight,\n x,\n line,\n wrap = self.style.cellWhiteSpace !== 'nowrap',\n textHeight = 0;\n // text supplied by a rendertext handler may omit width/height (#460)\n var textBlockHeight =\n cell.text.height === undefined\n ? cell.calculatedLineHeight * ll\n : cell.text.height;\n for (x = 0; x < cell.text.lines.length; x += 1) {\n line = cell.text.lines[x];\n if (line.width === undefined) {\n line.width = self.ctx.measureText(\n line.value === undefined || line.value === null\n ? ''\n : String(line.value),\n ).width;\n }\n var vPos =\n Math.max(\n (cell.height -\n (wrap ? textBlockHeight : cell.calculatedLineHeight)) *\n 0.5,\n 0,\n ) + h,\n hPos =\n cell.paddingLeft +\n treeCellPadding +\n cell.treeArrowWidth +\n cell.orderByArrowWidth;\n if (cell.horizontalAlignment === 'right') {\n hPos =\n cell.paddingLeft + treeCellPadding + cell.paddedWidth - line.width;\n } else if (cell.horizontalAlignment === 'center') {\n hPos =\n cell.paddingLeft +\n treeCellPadding +\n (cell.paddedWidth + cell.paddingRight) / 2 -\n line.width / 2;\n }\n if (cell.verticalAlignment === 'top') {\n vPos = cell.calculatedLineHeight;\n } else if (cell.verticalAlignment === 'bottom') {\n // baseline of the last line sits on the bottom padding (#530)\n vPos =\n cell.height -\n cell.paddingBottom -\n textBlockHeight +\n cell.calculatedLineHeight;\n }\n line.height = h + cell.lineSpacing;\n line.offsetLeft = hPos;\n line.offsetTop = vPos;\n line.x = cell.x + hPos;\n line.y = cell.y + textHeight + vPos;\n textHeight += line.height;\n fillText(line.value, line.x, line.y);\n }\n if (self.attributes.debug && cell.active) {\n requestAnimationFrame(function () {\n self.ctx.font = self.style.debugFont;\n self.ctx.fillStyle = self.style.debugColor;\n fillText(\n JSON.stringify(\n {\n x: cell.x,\n y: cell.y,\n h: cell.height,\n w: cell.width,\n pw: cell.paddedWidth,\n idx: cell.columnIndex,\n idx_ord: cell.sortColumnIndex,\n },\n null,\n '\\t',\n ),\n cell.x + 14,\n cell.y + 14,\n );\n fillText(\n JSON.stringify(\n cell.text.lines.map(function (l) {\n return { w: l.width, v: l.value.length };\n }),\n null,\n '\\t',\n ),\n cell.x + 14,\n cell.y + 30,\n );\n });\n }\n }\n function getFrozenColumnsWidth() {\n var w = 0,\n s = self.getSchema(),\n x = 0,\n n = Math.min(self.frozenColumn, s.length),\n collapsedGroups = self.getCollapsedColumnGroups(),\n column;\n hiddenFrozenColumnCount = 0;\n while (x < n) {\n column = s[x];\n if (column.hidden) {\n hiddenFrozenColumnCount += 1;\n } else {\n const isCollapsed =\n collapsedGroups.findIndex(\n (group) => x >= group.from && x <= group.to,\n ) >= 0;\n if (isCollapsed) {\n hiddenFrozenColumnCount += 1;\n } else {\n w += self.getColumnWidth(x);\n }\n }\n x += 1;\n }\n return w;\n }\n /**\n * Redraws the grid. No matter what the change, this is the only method required to refresh everything.\n * @memberof canvasDatagrid\n * @name draw\n * @method\n */\n // r = literal row index\n // rd = row data array\n // i = user order index\n // o = literal data index\n // y = y drawing cursor\n // x = x drawing cursor\n // s = visible schema array\n // cx = current x drawing cursor sub calculation var\n // cy = current y drawing cursor sub calculation var\n // a = static cell (like corner cell)\n // p = perf counter\n // l = data length\n // u = current cell\n // h = current height\n // w = current width\n self.draw = function (internal) {\n if (self.dispatchEvent('beforedraw', {})) {\n return;\n }\n if (!self.isChildGrid && (!self.height || !self.width)) {\n return;\n }\n if (self.isChildGrid && internal) {\n requestAnimationFrame(self.parentGrid.draw);\n return;\n }\n if (self.intf.visible === false) {\n return;\n }\n // initial values\n var checkScrollHeight,\n rowHeaderCell,\n p,\n cx,\n cy,\n treeGrid,\n rowOpen,\n rowHeight,\n cornerCell,\n y,\n x,\n c,\n h,\n w,\n schema,\n rowIndex,\n rowData,\n aCell,\n viewData = self.viewData || [],\n bc = self.style.gridBorderCollapse === 'collapse',\n selectionBorders = [],\n moveBorders = [],\n selectionHandles = [],\n rowHeaders = [],\n l = viewData.length,\n u = self.currentCell || {},\n columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n rowHeaderCellWidth = self.getRowHeaderCellWidth(),\n rowGroupsAreaWidth = self.getRowGroupAreaWidth(),\n columnGroupsAreaHeight = self.getColumnGroupAreaHeight(),\n /** key: boundRowIndex, value: `{y,h}` */\n rowGroupsRectInfo = {},\n /** value: `{y,h}` */\n rowGroupsFrozenInfo = {},\n /** key: columnIndex, value: `{x,w}` */\n columnGroupsRectInfo = {},\n collapsedColumnGroups = self.getCollapsedColumnGroups(),\n collapsedRowGroups = self.getCollapsedRowGroups(),\n cellHeight = self.style.cellHeight,\n currentRowIndexOffset = 0,\n /** @type {Array<{from:number,plus:number}>} */\n rowIndexOffsetByHiddenRows = self.hiddenRowRanges\n .map((range) => ({\n from: range[0],\n plus: range[1] - range[0] + 1,\n }))\n .sort((a, b) => a.from - b.from);\n drawCount += 1;\n p = performance.now();\n self.visibleRowHeights = [];\n // if data length has changed, there is no way to know\n if (viewData.length > self.orders.rows.length) {\n self.createRowOrders();\n }\n function saveRowGroupsRectInfo(cell) {\n let index = cell.boundRowIndex;\n if (index >= -1 === false)\n if (cell.rowIndex === -1) index = -1;\n else return;\n if (rowGroupsRectInfo[index]) return;\n rowGroupsRectInfo[index] = { y: cell.y, h: cell.height };\n }\n function saveColumnGroupsRectInfo(cell) {\n const index = cell.columnIndex;\n if (columnGroupsRectInfo[index]) return;\n columnGroupsRectInfo[index] = { x: cell.x, w: cell.width };\n }\n /**\n * @param {number} columnIndex\n * @returns {boolean}\n */\n function isColumnCollapsedByGroup(columnIndex) {\n return (\n collapsedColumnGroups.findIndex(\n (group) => columnIndex >= group.from && columnIndex <= group.to,\n ) >= 0\n );\n }\n\n function drawScrollBars() {\n var drawCorner,\n en = self.scrollBox.entities,\n m = self.style.scrollBarBoxMargin * 2;\n self.ctx.strokeStyle = self.style.scrollBarBorderColor;\n self.ctx.lineWidth = self.style.scrollBarBorderWidth;\n if (self.frozenColumn > 0) {\n en.horizontalBox.x =\n rowHeaderCellWidth +\n self.style.scrollBarBoxMargin +\n self.scrollCache.x[self.frozenColumn - 1] +\n (en.horizontalBar.width -\n self.scrollCache.x[self.frozenColumn - 1] -\n self.scrollBox.scrollBoxWidth) *\n (self.scrollBox.scrollLeft / self.scrollBox.scrollWidth);\n } else {\n en.horizontalBox.x =\n rowHeaderCellWidth +\n self.style.scrollBarBoxMargin +\n (en.horizontalBar.width - self.scrollBox.scrollBoxWidth) *\n (self.scrollBox.scrollLeft / self.scrollBox.scrollWidth);\n }\n en.verticalBox.y =\n columnHeaderCellHeight +\n self.style.scrollBarBoxMargin +\n self.scrollCache.y[self.frozenRow] +\n (en.verticalBar.height -\n self.scrollBox.scrollBoxHeight -\n self.scrollCache.y[self.frozenRow]) *\n (self.scrollBox.scrollTop / self.scrollBox.scrollHeight);\n if (self.scrollBox.horizontalBarVisible) {\n self.ctx.fillStyle = self.style.scrollBarBackgroundColor;\n fillRect(\n en.horizontalBar.x,\n en.horizontalBar.y,\n en.horizontalBar.width + m,\n en.horizontalBar.height,\n );\n strokeRect(\n en.horizontalBar.x,\n en.horizontalBar.y,\n en.horizontalBar.width + m,\n en.horizontalBar.height,\n );\n self.ctx.fillStyle = self.style.scrollBarBoxColor;\n if (self.scrollBox.horizontalBoxVisible) {\n if (/horizontal/.test(u.context)) {\n self.ctx.fillStyle = self.style.scrollBarActiveColor;\n }\n radiusRect(\n en.horizontalBox.x,\n en.horizontalBox.y,\n en.horizontalBox.width,\n en.horizontalBox.height,\n self.style.scrollBarBoxBorderRadius,\n );\n self.ctx.stroke();\n self.ctx.fill();\n }\n drawCorner = true;\n self.visibleCells.unshift(en.horizontalBar);\n self.visibleCells.unshift(en.horizontalBox);\n }\n if (self.scrollBox.verticalBarVisible) {\n self.ctx.fillStyle = self.style.scrollBarBackgroundColor;\n fillRect(\n en.verticalBar.x,\n en.verticalBar.y,\n en.verticalBar.width,\n en.verticalBar.height + m,\n );\n strokeRect(\n en.verticalBar.x,\n en.verticalBar.y,\n en.verticalBar.width,\n en.verticalBar.height + m,\n );\n if (self.scrollBox.verticalBoxVisible) {\n self.ctx.fillStyle = self.style.scrollBarBoxColor;\n if (/vertical/.test(u.context)) {\n self.ctx.fillStyle = self.style.scrollBarActiveColor;\n }\n radiusRect(\n en.verticalBox.x,\n en.verticalBox.y,\n en.verticalBox.width,\n en.verticalBox.height,\n self.style.scrollBarBoxBorderRadius,\n );\n self.ctx.stroke();\n self.ctx.fill();\n }\n drawCorner = true;\n self.visibleCells.unshift(en.verticalBar);\n self.visibleCells.unshift(en.verticalBox);\n }\n if (drawCorner) {\n //corner\n self.ctx.strokeStyle = self.style.scrollBarCornerBorderColor;\n self.ctx.fillStyle = self.style.scrollBarCornerBackgroundColor;\n radiusRect(\n en.corner.x,\n en.corner.y,\n en.corner.width,\n en.corner.height,\n 0,\n );\n self.ctx.stroke();\n self.ctx.fill();\n self.visibleCells.unshift(en.corner);\n }\n }\n function createHandlesOverlayArray(cell) {\n if (self.attributes.allowMovingSelection || self.mobile) {\n if (\n cell.selectionBorderTop &&\n cell.selectionBorderRight &&\n self.mobile\n ) {\n selectionHandles.push([cell, 'tr']);\n cell.selectionHandle = 'tr';\n }\n if (cell.selectionBorderTop && cell.selectionBorderLeft) {\n if (self.mobile) {\n selectionHandles.push([cell, 'tl']);\n cell.selectionHandle = 'tl';\n }\n if (self.fillOverlay.handle) {\n self.fillOverlay.snapTo = {\n x: cell.x,\n y: cell.y,\n };\n }\n }\n if (\n cell.selectionBorderBottom &&\n cell.selectionBorderLeft &&\n self.mobile\n ) {\n selectionHandles.push([cell, 'bl']);\n cell.selectionHandle = 'bl';\n }\n if (\n cell.selectionBorderBottom &&\n cell.selectionBorderRight &&\n (self.attributes.selectionHandleBehavior !== 'none' || self.mobile)\n ) {\n selectionHandles.push([cell, 'br']);\n cell.selectionHandle = 'br';\n\n if (self.fillOverlay.handle) {\n self.fillOverlay.handle.x = cell.x + cell.width;\n self.fillOverlay.handle.y = cell.y + cell.height;\n }\n }\n\n if (self.fillOverlay.handle) {\n // Some corners may not be displaying, so we get at least\n // one correct axis in order to display a fill overlay.\n if (self.fillOverlay.snapTo.x === -1 && cell.selectionBorderLeft) {\n self.fillOverlay.snapTo.x = cell.x;\n }\n if (self.fillOverlay.snapTo.y === -1 && cell.selectionBorderTop) {\n self.fillOverlay.snapTo.y = cell.y;\n }\n }\n }\n }\n function createBorderOverlayArray(\n cell,\n drawArray,\n propPrefix,\n offsetPoint,\n ) {\n cell.selectionBorder = '';\n // TODO: optimize it by `getSelectionStateFromCells`\n const isSelected = offsetPoint\n ? (row, col) =>\n isCellSelected(\n self.selections,\n row - offsetPoint.y,\n col - offsetPoint.x,\n )\n : (row, col) => isCellSelected(self.selections, row, col);\n const lastColumnIndex = Math.max(schema.length - 1, 0);\n const lastRowIndex = Math.max(viewData.length - 1, 0);\n const { isRowHeader, rowIndex, columnIndex } = cell;\n\n if (!isRowHeader && isSelected(rowIndex, columnIndex)) {\n if (\n (!isSelected(rowIndex - 1, columnIndex) || rowIndex === 0) &&\n !cell.isHeader\n ) {\n drawArray.push([cell, 't']);\n cell[propPrefix + 'BorderTop'] = true;\n cell[propPrefix + 'Border'] += 't';\n }\n if (\n rowIndex >= lastRowIndex ||\n !isSelected(rowIndex + 1, columnIndex)\n ) {\n drawArray.push([cell, 'b']);\n cell[propPrefix + 'BorderBottom'] = true;\n cell[propPrefix + 'Border'] += 'b';\n }\n if (columnIndex === 0 || !isSelected(rowIndex, columnIndex - 1)) {\n drawArray.push([cell, 'l']);\n cell[propPrefix + 'BorderLeft'] = true;\n cell[propPrefix + 'Border'] += 'l';\n }\n if (\n columnIndex >= lastColumnIndex ||\n !isSelected(rowIndex, columnIndex + 1)\n ) {\n drawArray.push([cell, 'r']);\n cell[propPrefix + 'BorderRight'] = true;\n cell[propPrefix + 'Border'] += 'r';\n }\n }\n }\n function drawCell(rowData, rowOrderIndex, rowIndex) {\n const isActiveRowHeader =\n self.orders.rows[self.activeCell.rowIndex] === rowOrderIndex ||\n self.isRowSelected(rowOrderIndex);\n\n return function drawEach(header, headerIndex, columnOrderIndex) {\n if (header.hidden) {\n return 0;\n }\n var cellStyle = header.style || 'cell',\n cellGridAttributes,\n cell,\n isHeader = /HeaderCell/.test(cellStyle),\n isCorner = /cornerCell/.test(cellStyle),\n isRowHeader = 'rowHeaderCell' === cellStyle,\n isColumnHeader = 'columnHeaderCell' === cellStyle,\n isFilterable =\n self.filterable.rows.includes(rowIndex) &&\n self.filterable.columns.includes(headerIndex),\n wrap = self.style.cellWhiteSpace !== 'nowrap',\n // TODO: optimize it by `getSelectionStateFromCells`\n selected = isCellSelected(\n self.selections,\n rowOrderIndex,\n columnOrderIndex,\n ),\n hovered =\n self.hovers.rowIndex === rowOrderIndex &&\n (self.attributes.hoverMode === 'row' ||\n self.hovers.columnIndex === columnOrderIndex),\n openedFilter =\n self.selectedFilterButton.rowIndex == rowIndex &&\n self.selectedFilterButton.columnIndex == headerIndex,\n active =\n self.activeCell.rowIndex === rowOrderIndex &&\n self.activeCell.columnIndex === columnOrderIndex,\n isColumnHeaderCellCap = cellStyle === 'columnHeaderCellCap',\n rawValue = rowData ? rowData[header.name] : undefined,\n isGrid = header.type === 'canvas-datagrid',\n val,\n f = self.formatters[header.type || 'string'],\n orderByArrowSize = 0,\n treeArrowSize = 0,\n cellWidth =\n headerIndex >= 0\n ? self.getColumnWidth(headerIndex)\n : self.sizes.columns[headerIndex] || header.width,\n ev = {\n value: rawValue,\n row: rowData,\n header: header,\n };\n\n const isActiveColumnHeader =\n self.orders.columns[self.activeCell.columnIndex] === headerIndex ||\n self.isColumnSelected(self.activeCell.viewColumnIndex);\n let activeHeader = false;\n if (\n (isActiveColumnHeader || isActiveRowHeader) &&\n (columnOrderIndex === -1 || rowOrderIndex === -1)\n )\n activeHeader = isRowHeader\n ? 'activeRowHeaderCell'\n : 'activeColumnHeaderCell';\n\n if (isColumnHeaderCellCap) {\n cellWidth = w - x;\n }\n // if no data or schema are defined, a width is provided to the stub column\n if (cellWidth === undefined) {\n cellWidth = self.style.cellWidth;\n }\n if (headerIndex < 0) {\n cellWidth = cellWidth * self.scale;\n }\n if (x + cellWidth + self.style.cellBorderWidth < 0) {\n x += cellWidth + self.style.cellBorderWidth;\n }\n if (active && cellStyle !== 'cornerCell') {\n cellStyle = 'activeCell';\n }\n if (self.visibleRows.indexOf(rowIndex) === -1 && !isHeader) {\n self.visibleRows.push(rowIndex);\n }\n val = self.dispatchEvent('formatcellvalue', ev);\n cx = x;\n cy = y;\n if (cellStyle === 'cornerCell') {\n cx = 0;\n cy = 0;\n } else if (isRowHeader) {\n cx = 0;\n } else if (isHeader) {\n cy = 0;\n }\n cell = {\n type: isGrid ? 'canvas-datagrid-cell' : header.type,\n style: cellStyle,\n nodeType: 'canvas-datagrid-cell',\n x: cx,\n y: cy,\n fontHeight: (self.style[cellStyle + 'FontHeight'] || 0) * self.scale,\n horizontalAlignment: self.style[cellStyle + 'HorizontalAlignment'],\n verticalAlignment: self.style[cellStyle + 'VerticalAlignment'],\n paddingLeft:\n (self.style[cellStyle + 'PaddingLeft'] || 0) * self.scale,\n paddingTop: (self.style[cellStyle + 'PaddingTop'] || 0) * self.scale,\n paddingRight:\n (self.style[cellStyle + 'PaddingRight'] || 0) * self.scale,\n paddingBottom:\n (self.style[cellStyle + 'PaddingBottom'] || 0) * self.scale,\n whiteSpace: self.style.cellWhiteSpace,\n lineHeight: self.style.cellLineHeight,\n lineSpacing: self.style.cellLineSpacing,\n offsetTop: self.canvasOffsetTop + cy,\n offsetLeft: self.canvasOffsetLeft + cx,\n scrollTop: self.scrollBox.scrollTop,\n scrollLeft: self.scrollBox.scrollLeft,\n active: active || activeHeader,\n hovered: hovered,\n selected: selected,\n width: cellWidth,\n height: cellHeight,\n offsetWidth: cellWidth,\n offsetHeight: cellHeight,\n parentNode: self.intf.parentNode,\n offsetParent: self.intf.parentNode,\n data: rowData,\n isCorner: isCorner,\n isHeader: isHeader,\n isColumnHeader: isColumnHeader,\n isColumnHeaderCellCap: isColumnHeaderCellCap,\n isRowHeader: isRowHeader,\n isFilterable: isFilterable,\n openedFilter: openedFilter,\n rowOpen: rowOpen,\n header: header,\n\n columnIndex: columnOrderIndex,\n rowIndex: rowOrderIndex,\n\n viewRowIndex: rowOrderIndex,\n viewColumnIndex: columnOrderIndex,\n\n boundRowIndex: self.getBoundRowIndexFromViewRowIndex(rowOrderIndex),\n boundColumnIndex:\n self.getBoundColumnIndexFromViewColumnIndex(columnOrderIndex),\n\n sortColumnIndex: headerIndex,\n sortRowIndex: rowIndex,\n\n isGrid: isGrid,\n isNormal: !isGrid && !isCorner && !isHeader,\n gridId: (self.attributes.name || '') + rowIndex + ':' + headerIndex,\n parentGrid: self.intf,\n innerHTML: '',\n activeHeader: activeHeader,\n value:\n isHeader && !isRowHeader ? header.title || header.name : rawValue,\n isRowTree:\n rowOrderIndex >= 0 &&\n columnOrderIndex == self.cellTree.rowTreeColIndex &&\n self.cellTree.rows.length > 0 &&\n self.cellTree.rows[rowOrderIndex].icon,\n isColumnTree:\n columnOrderIndex >= 0 &&\n self.cellTree.columns[rowOrderIndex] &&\n self.cellTree.columns[rowOrderIndex][columnOrderIndex].icon,\n };\n cell.calculatedLineHeight =\n cell.fontHeight * cell.lineHeight + cell.lineSpacing;\n cell.paddedWidth = cell.width - cell.paddingRight - cell.paddingLeft;\n cell.paddedHeight = cell.height - cell.paddingTop - cell.paddingBottom;\n ev.cell = cell;\n cell.userHeight = cell.isHeader ? self.sizes.rows[-1] : rowHeight;\n cell.userWidth = cell.isHeader\n ? self.sizes.columns.cornerCell\n : self.sizes.columns[headerIndex];\n self.visibleCells.unshift(cell);\n saveRowGroupsRectInfo(cell);\n saveColumnGroupsRectInfo(cell);\n if (self.dispatchEvent('beforerendercell', ev)) {\n return;\n }\n self.ctx.fillStyle = self.style[cellStyle + 'BackgroundColor'];\n self.ctx.strokeStyle = self.style[cellStyle + 'BorderColor'];\n self.ctx.lineWidth = self.style[cellStyle + 'BorderWidth'];\n if (hovered) {\n self.ctx.fillStyle = self.style[cellStyle + 'HoverBackgroundColor'];\n self.ctx.strokeStyle = self.style[cellStyle + 'HoverBorderColor'];\n }\n if (selected) {\n self.ctx.fillStyle =\n self.style[cellStyle + 'SelectedBackgroundColor'];\n self.ctx.strokeStyle = self.style[cellStyle + 'SelectedBorderColor'];\n }\n if (activeHeader) {\n self.ctx.fillStyle = self.style[activeHeader + 'BackgroundColor'];\n }\n self.dispatchEvent('rendercell', ev);\n if (cell.isGrid) {\n if (cell.height !== rowHeight) {\n cell.height = rowHeight || self.style.cellHeightWithChildGrid;\n checkScrollHeight = true;\n }\n cell.width =\n self.sizes.columns[headerIndex] ||\n self.style.cellWidthWithChildGrid;\n }\n if (rowOpen && !cell.isRowHeader) {\n cell.height = self.sizes.rows[rowIndex] || self.style.cellHeight;\n }\n if (!cell.isGrid) {\n fillRect(cx, cy, cell.width, cell.height);\n strokeRect(cx, cy, cell.width, cell.height);\n }\n self.ctx.save();\n radiusRect(cell.x, cell.y, cell.width, cell.height, 0);\n self.ctx.clip();\n self.dispatchEvent('afterrendercell', ev);\n if (cell.height !== cellHeight && !(rowOpen && !cell.isRowHeader)) {\n self.sizes.rows[isHeader ? -1 : rowIndex] = cell.height;\n checkScrollHeight = true;\n }\n if (cell.width !== cellWidth) {\n self.sizes.columns[headerIndex] = cell.width;\n checkScrollHeight = true;\n }\n if (isRowHeader && self.attributes.tree) {\n if (!self.dispatchEvent('rendertreearrow', ev)) {\n treeArrowSize = drawTreeArrow(\n cell,\n self.style[cellStyle + 'PaddingLeft'],\n cy,\n 0,\n );\n }\n }\n if ((self.attributes.showRowNumbers && isRowHeader) || !isRowHeader) {\n if (cell.isGrid && !self.dispatchEvent('beforerendercellgrid', ev)) {\n if (!self.childGrids[cell.gridId]) {\n // HACK: this only allows setting of the child grids styles if data is set _after_\n // this is less than desirable. An interface needs to be made to effect the\n // style of all cell grids. One for individual grids already exists.\n cellGridAttributes = self.cellGridAttributes;\n cellGridAttributes.name = self.attributes.saveAppearance\n ? cell.gridId\n : undefined;\n cellGridAttributes.component = false;\n cellGridAttributes.parentNode = cell;\n cellGridAttributes.data = rawValue;\n ev.cellGridAttributes = cellGridAttributes;\n if (self.dispatchEvent('beforecreatecellgrid', ev)) {\n return;\n }\n self.childGrids[cell.gridId] =\n self.createGrid(cellGridAttributes);\n self.sizes.rows[rowIndex] =\n self.sizes.rows[rowIndex] || self.style.cellGridHeight;\n checkScrollHeight = true;\n }\n cell.grid = self.childGrids[cell.gridId];\n cell.grid.parentNode = cell;\n cell.grid.visible = true;\n cell.grid.draw();\n self.dispatchEvent('rendercellgrid', ev);\n } else if (!cell.isGrid) {\n if (self.childGrids[cell.gridId]) {\n self.childGrids[cell.gridId].parentNode.offsetHeight = 0;\n }\n if (isHeader && self.orderBy === header.name) {\n if (!self.dispatchEvent('renderorderbyarrow', ev)) {\n orderByArrowSize = drawOrderByArrow(\n cx + self.style[cellStyle + 'PaddingLeft'],\n 0,\n );\n }\n }\n self.ctx.fillStyle = self.style[cellStyle + 'Color'];\n if (hovered) {\n self.ctx.fillStyle = self.style[cellStyle + 'HoverColor'];\n }\n if (selected) {\n self.ctx.fillStyle = self.style[cellStyle + 'SelectedColor'];\n }\n if (activeHeader) {\n self.ctx.fillStyle = self.style[activeHeader + 'Color'];\n }\n cell.treeArrowWidth = treeArrowSize;\n cell.orderByArrowWidth = orderByArrowSize;\n // create text ref to see if height needs to expand\n val = val !== undefined ? val : f ? f(ev) : '';\n if (val === undefined && !f) {\n val = '';\n console.warn(\n 'canvas-datagrid: Unknown format ' +\n header.type +\n ' add a cellFormater',\n );\n }\n cell.formattedValue = (\n val !== undefined && val !== null ? val : ''\n ).toString();\n if (\n self.columnFilters &&\n self.columnFilters[val] !== undefined &&\n isHeader\n ) {\n cell.formattedValue = self.attributes.filterTextPrefix + val;\n }\n self.ctx.font = self.getScaledFont(cellStyle + 'Font');\n if (!self.dispatchEvent('formattext', ev)) {\n cell.text = wrapText(cell, ' ');\n }\n if (!self.dispatchEvent('rendertext', ev)) {\n if (cell.innerHTML || header.type === 'html') {\n drawHtml(cell);\n } else {\n let treeCellPadding = 0,\n isDrawText = true;\n if (\n cell.columnIndex == self.cellTree.rowTreeColIndex &&\n !cell.isColumnHeader &&\n self.cellTree.rows.length > 0 &&\n Object.keys(self.cellTree.rows[cell.rowIndex]).length > 1\n )\n treeCellPadding = drawCellTreeIcon(\n cell,\n self.cellTree.rows[cell.rowIndex],\n true,\n );\n\n if (\n !cell.isRowHeader &&\n cell.rowIndex > 0 &&\n self.cellTree.columns[cell.rowIndex - 1] &&\n self.cellTree.columns[cell.rowIndex - 1][cell.columnIndex]\n .icon\n ) {\n for (let r = cell.rowIndex - 1; r >= 0; r--) {\n if (!self.cellTree.columns[r]) break;\n if (!self.cellTree.columns[r][cell.columnIndex].icon) break;\n if (!self.cellTree.columns[r][cell.columnIndex].expand) {\n isDrawText = false;\n break;\n }\n }\n }\n if (\n isDrawText &&\n !cell.isRowHeader &&\n self.cellTree.columns[cell.rowIndex] &&\n self.cellTree.columns[cell.rowIndex][cell.columnIndex].icon\n ) {\n if (\n self.viewData.length > 0 &&\n self.viewData[cell.rowIndex][cell.columnIndex].length > 0\n )\n treeCellPadding = drawCellTreeIcon(\n cell,\n self.cellTree.columns[cell.rowIndex][cell.columnIndex],\n false,\n );\n }\n if (isDrawText) drawText(cell, treeCellPadding);\n }\n\n if (wrap && cell.text && cell.text.height > rowHeight) {\n self.sizes.rows[isHeader ? -1 : rowIndex] = cell.text.height;\n checkScrollHeight = true;\n }\n }\n }\n }\n if (active) {\n aCell = cell;\n }\n createBorderOverlayArray(cell, selectionBorders, 'selection');\n // createBorderOverlayArray calculates data for createHandlesOverlayArray so it must go 2nd\n createHandlesOverlayArray(cell);\n if (self.movingSelection) {\n createBorderOverlayArray(cell, moveBorders, 'move', self.moveOffset);\n }\n self.ctx.restore();\n\n if (isFilterable) {\n drawFilterButton(cell);\n }\n\n // Gaps may occur in row numbers between consecutively rendered rows\n // when we are filtering. We draw attention to this by drawing a thick\n // border overlapping the two consecutive row headers. If sorting, visible\n // row numbers stay the same (i.e. they don't correspond to the underlying\n // data's row number), so we do not show row gaps in that case.\n const isSorting =\n self.orderings.columns && self.orderings.columns.length > 0;\n\n if (\n isRowHeader &&\n self.attributes.showRowNumbers &&\n self.attributes.showRowNumberGaps &&\n isSorting === false\n ) {\n const previousRowNumber = self.getBoundRowIndexFromViewRowIndex(\n rowOrderIndex - 1,\n );\n let hasRowGap =\n previousRowNumber !== undefined &&\n cell.boundRowIndex > 0 &&\n cell.boundRowIndex - previousRowNumber > 1;\n if (hasRowGap && collapsedRowGroups.length > 0) {\n hasRowGap =\n collapsedRowGroups.find(\n (group) =>\n group.from === previousRowNumber &&\n group.to === cell.boundRowIndex,\n ) >= 0;\n }\n // We don't treat the row index difference from hidden rows as the row gap.\n if (hasRowGap && self.hiddenRowRanges.length > 0) {\n for (let i = 0; i < self.hiddenRowRanges.length; i++) {\n const [beginRowIndex, endRowIndex] = self.hiddenRowRanges[i];\n if (\n cell.boundRowIndex === endRowIndex + 1 &&\n previousRowNumber === beginRowIndex - 1\n ) {\n hasRowGap = false;\n break;\n }\n }\n }\n\n if (hasRowGap) {\n const barHeight = self.style.rowHeaderCellRowNumberGapHeight;\n const barColor = self.style.rowHeaderCellRowNumberGapColor;\n\n self.ctx.save();\n\n self.ctx.fillStyle = barColor;\n\n fillRect(cell.x, cell.y - barHeight / 2, cell.width, barHeight);\n\n self.ctx.restore();\n }\n }\n\n //#region draw unhide indicator for column headers\n if (isColumnHeader && self.attributes.showUnhideColumnsIndicator) {\n const hovered = self.hovers.unhideIndicator;\n const size = self.style.unhideIndicatorSize;\n const cellX = x;\n const topY = cell.y + Math.max(0.5 * (cell.height - size), 0);\n\n const isActive = (orderIndex) =>\n hovered &&\n (hovered.dir === 'l' || hovered.dir === 'r') &&\n orderIndex >= hovered.orderIndex0 &&\n orderIndex <= hovered.orderIndex1;\n const isHiddenColumn = (columnIndex) =>\n columnIndex >= 0 &&\n schema[columnIndex] &&\n schema[columnIndex].hidden;\n\n let orderIndex0, orderIndex1;\n const drawIndicator = (leftX, dir, active) => {\n self.visibleUnhideIndicators.push({\n x: leftX - 1,\n y: topY - 1,\n x2: leftX + size + 2,\n y2: topY + size + 2,\n orderIndex0,\n orderIndex1,\n dir,\n });\n if (!active) {\n const line = cell.text && cell.text.lines && cell.text.lines[0];\n if (line) {\n const iconsWidth = orderByArrowSize + treeArrowSize;\n const lineX0 = iconsWidth > 0 ? iconsWidth : line.x;\n const lineX1 = line.x + line.width;\n if (leftX + size >= lineX0 && leftX <= lineX1) return;\n }\n }\n drawUnhideIndicator(leftX, topY, size, dir, active);\n }; // end of drawIndicator\n\n let orderIndexPtr = columnOrderIndex - 1;\n const prevColumnIndex = self.orders.columns[orderIndexPtr];\n if (isHiddenColumn(prevColumnIndex)) {\n const active = isActive(prevColumnIndex);\n orderIndex0 = orderIndexPtr;\n orderIndex1 = orderIndexPtr;\n while (--orderIndexPtr >= 0) {\n if (isHiddenColumn(self.orders.columns[orderIndexPtr]))\n orderIndex0 = orderIndexPtr;\n else break;\n }\n drawIndicator(cellX, 'r', active);\n }\n\n orderIndexPtr = columnOrderIndex + 1;\n const nextColumnIndex = self.orders.columns[orderIndexPtr];\n if (isHiddenColumn(nextColumnIndex)) {\n const active = isActive(nextColumnIndex);\n orderIndex0 = orderIndexPtr;\n orderIndex1 = orderIndexPtr;\n while (++orderIndexPtr < self.orders.columns.length) {\n if (isHiddenColumn(self.orders.columns[orderIndexPtr]))\n orderIndex1 = orderIndexPtr;\n else break;\n }\n const indicatorX = x + cell.width - size;\n drawIndicator(indicatorX, 'l', active);\n }\n }\n //#endregion draw unhide indicator for column headers\n\n //#region draw unhide indicator for row headers\n if (\n isRowHeader &&\n self.attributes.showUnhideRowsIndicator &&\n self.hiddenRowRanges.length > 0\n ) {\n // Leo's comment:\n // from the first row to the last row, `rowIndex` is from 0 to the count of rows\n // but `boundRowIndex` can be disordered if there are any ordered columns or filtered columns\n // Like this statement:\n // console.log(rowIndex, cell.boundRowIndex, cell.formattedValue);\n // can output the result like this:\n // 0 1 '2'\n // 1 3 '4'\n const hovered = self.hovers.unhideIndicator;\n const size = self.style.unhideIndicatorSize;\n const leftX = cell.x + cell.width - size - 2;\n const cellY = y;\n const topIndicators = {};\n const bottomIndicators = {};\n self.hiddenRowRanges.forEach((it) => {\n topIndicators[it[0] - 1] = it;\n bottomIndicators[it[1] + 1] = it;\n });\n\n const rowIndex = cell.rowIndex + currentRowIndexOffset;\n const isActive = () =>\n hovered &&\n (hovered.dir === 't' || hovered.dir === 'b') &&\n rowIndex >= hovered.orderIndex0 - 1 &&\n rowIndex <= hovered.orderIndex1 + 1;\n\n let orderIndex0, orderIndex1;\n const drawIndicator = (topY, dir, active) => {\n self.visibleUnhideIndicators.push({\n x: leftX - 1,\n y: topY - 1,\n x2: leftX + size + 2,\n y2: topY + size + 2,\n orderIndex0,\n orderIndex1,\n dir,\n });\n drawUnhideIndicator(leftX, topY, size, dir, active);\n }; // end of drawIndicator\n\n let matched = topIndicators[rowIndex];\n if (matched) {\n const indicatorY = cellY + cell.height - size;\n [orderIndex0, orderIndex1] = matched;\n drawIndicator(indicatorY, 't', isActive());\n }\n matched = bottomIndicators[rowIndex];\n if (matched) {\n const indicatorY = cellY;\n [orderIndex0, orderIndex1] = matched;\n drawIndicator(indicatorY, 'b', isActive());\n }\n }\n //#endregion draw unhide indicator for row headers\n\n x += cell.width + (bc ? 0 : self.style.cellBorderWidth);\n return cell.width;\n }; // end of drawEach\n }\n function drawFilterButton(cell, ev) {\n var posX = cell.x + cell.width - self.style.filterButtonWidth - 1;\n var posY = cell.y + cell.height - self.style.filterButtonHeight - 2;\n if (self.dispatchEvent('beforerenderfilterbutton', ev)) {\n return;\n }\n self.ctx.save();\n self.ctx.strokeStyle = self.style.filterButtonBorderColor;\n self.ctx.fillStyle = self.style.filterButtonBackgroundColor;\n if (cell.openedFilter) {\n self.ctx.fillStyle = self.style.filterButtonActiveBackgroundColor;\n } else if (cell.hovered && self.hovers.onFilterButton) {\n self.ctx.fillStyle = self.style.filterButtonHoverBackgroundColor;\n }\n radiusRect(\n posX,\n posY,\n self.style.filterButtonWidth,\n self.style.filterButtonHeight,\n self.style.filterButtonBorderRadius,\n );\n self.ctx.stroke();\n self.ctx.fill();\n drawFilterButtonArrow(posX, posY);\n self.ctx.clip();\n self.dispatchEvent('afterrenderfilterbutton', ev);\n self.ctx.restore();\n }\n function drawRowHeader(rowData, rowIndex, rowOrderIndex) {\n if (self.attributes.showRowHeaders) {\n x = 0;\n\n // When filtering we'd like to display the actual row numbers,\n // as it is in the unfiltered data, instead of simply the viewed\n // row index + 1. If rowIndex > viewData.length, it's a new row\n // added to the end, and we want to render that new row's number\n let filteredRowNumber;\n if (self.viewData && rowIndex < self.viewData.length)\n filteredRowNumber =\n self.getBoundRowIndexFromViewRowIndex(rowIndex) + 1;\n else\n filteredRowNumber = self.originalData\n ? self.originalData.length + 1\n : rowOrderIndex + 1;\n\n let rowHeaderValue =\n self.hasActiveFilters() || self.hasCollapsedRowGroup()\n ? filteredRowNumber\n : rowIndex + 1;\n rowHeaderValue += currentRowIndexOffset;\n\n const rowHeaderCell = { rowHeaderCell: rowHeaderValue };\n const headerDescription = {\n name: 'rowHeaderCell',\n width: self.sizes.columns[-1] || self.style.rowHeaderCellWidth,\n style: 'rowHeaderCell',\n type: 'string',\n data: rowHeaderValue,\n index: -1,\n };\n rowOpen = self.openChildren[rowIndex];\n drawCell(rowHeaderCell, rowOrderIndex, rowIndex)(\n headerDescription,\n -1,\n -1,\n );\n\n if (\n rowIndexOffsetByHiddenRows[0] &&\n rowHeaderValue >= rowIndexOffsetByHiddenRows[0].from\n ) {\n const { plus } = rowIndexOffsetByHiddenRows.shift();\n currentRowIndexOffset += plus;\n }\n }\n }\n function drawHeaders() {\n var d,\n g = schema.length,\n i,\n o,\n columnHeaderCell,\n header,\n nonFrozenHeaderWidth;\n function drawHeaderColumnRange(start, end) {\n end = Math.min(end, g);\n for (o = start; o < end; o += 1) {\n i = self.orders.columns[o];\n header = schema[i];\n if (!header.hidden && !isColumnCollapsedByGroup(o)) {\n d = {\n title: header.title,\n name: header.name,\n width: header.width || self.style.cellWidth,\n style: 'columnHeaderCell',\n type: 'string',\n index: o,\n order: i,\n };\n columnHeaderCell = {\n columnHeaderCell: header.title || header.name,\n };\n x += drawCell(columnHeaderCell, -1, -1)(d, i, o);\n if (x > self.width + self.scrollBox.scrollLeft) {\n break;\n }\n }\n }\n }\n rowHeaders.forEach(function (rArgs, rhIndex) {\n y = rArgs[3];\n cellHeight = rArgs[4];\n if (rhIndex === self.frozenRow) {\n self.ctx.save();\n radiusRect(\n 0,\n self.lastFrozenRowPixel,\n self.width,\n self.height - self.lastFrozenRowPixel,\n 0,\n );\n self.ctx.clip();\n }\n drawRowHeader(rArgs[0], rArgs[1], rArgs[2]);\n });\n self.ctx.restore();\n if (self.attributes.showColumnHeaders) {\n x =\n -self.scrollBox.scrollLeft +\n self.scrollPixelLeft +\n self.style.columnHeaderCellBorderWidth;\n if (self.attributes.showRowHeaders) {\n x += rowHeaderCellWidth;\n }\n y = 0;\n // cell height might have changed during drawing\n cellHeight = self.getColumnHeaderCellHeight();\n drawHeaderColumnRange(self.scrollIndexLeft, g);\n nonFrozenHeaderWidth = x;\n x = self.style.columnHeaderCellBorderWidth;\n if (self.attributes.showRowHeaders) {\n x += rowHeaderCellWidth;\n }\n drawHeaderColumnRange(0, self.frozenColumn);\n // fill in the space right of the headers\n x = nonFrozenHeaderWidth;\n if (x < w) {\n c = {\n name: '',\n width: self.style.scrollBarWidth,\n style: 'columnHeaderCellCap',\n isColumnHeaderCell: true,\n isColumnHeaderCellCap: true,\n type: 'string',\n index: schema.length,\n };\n drawCell({ endCap: '' }, -1, -1)(c, -1, -1);\n }\n // fill in the space right of the headers\n if (self.attributes.showRowHeaders) {\n cornerCell = { cornerCell: '' };\n x = 0;\n c = {\n name: 'cornerCell',\n width: self.style.rowHeaderCellWidth,\n style: 'cornerCell',\n type: 'string',\n index: -1,\n };\n drawCell(cornerCell, -1, -1)(c, -1, -1);\n }\n }\n }\n function drawRow(rowOrderIndex, rowIndex) {\n var headerIndex,\n treeHeight,\n rowSansTreeHeight,\n columnOrderIndex,\n g = schema.length;\n if (y - cellHeight * 2 > h) {\n return false;\n }\n rowData = viewData[rowOrderIndex];\n rowOpen = self.openChildren[rowOrderIndex];\n rowSansTreeHeight =\n (self.sizes.rows[rowOrderIndex] || self.style.cellHeight) * self.scale;\n treeHeight = (rowOpen ? self.sizes.trees[rowOrderIndex] : 0) * self.scale;\n rowHeight = rowSansTreeHeight + treeHeight;\n if (y < -rowHeight) {\n return false;\n }\n if (self.attributes.showRowHeaders) {\n x += rowHeaderCellWidth;\n }\n cellHeight = rowHeight;\n //draw normal columns\n for (\n columnOrderIndex = self.scrollIndexLeft;\n columnOrderIndex < g;\n columnOrderIndex += 1\n ) {\n if (!isColumnCollapsedByGroup(columnOrderIndex)) {\n headerIndex = self.orders.columns[columnOrderIndex];\n x += drawCell(rowData, rowOrderIndex, rowIndex)(\n schema[headerIndex],\n headerIndex,\n columnOrderIndex,\n );\n }\n if (x > self.width) {\n self.scrollIndexRight = columnOrderIndex;\n self.scrollPixelRight = x;\n break;\n }\n }\n //draw frozen columns\n x = 1;\n if (self.attributes.showRowHeaders) {\n x += rowHeaderCellWidth;\n }\n for (\n columnOrderIndex = 0;\n columnOrderIndex < self.frozenColumn;\n columnOrderIndex += 1\n ) {\n if (!isColumnCollapsedByGroup(columnOrderIndex)) {\n headerIndex = self.orders.columns[columnOrderIndex];\n x += drawCell(rowData, rowOrderIndex, rowIndex)(\n schema[headerIndex],\n headerIndex,\n columnOrderIndex,\n );\n }\n if (x > self.width) {\n break;\n }\n }\n self.lastFrozenColumnPixel = x;\n // cell height might have changed during drawing\n cellHeight = rowHeight;\n x =\n -self.scrollBox.scrollLeft +\n self.scrollPixelLeft +\n self.style.cellBorderWidth;\n // don't draw a tree for the new row\n treeGrid = self.childGrids[rowOrderIndex];\n if (rowOrderIndex !== viewData.length && rowOpen) {\n treeGrid.visible = true;\n treeGrid.parentNode = {\n offsetTop: y + rowSansTreeHeight + self.canvasOffsetTop,\n offsetLeft: rowHeaderCellWidth - 1 + self.canvasOffsetLeft,\n offsetHeight: treeHeight,\n offsetWidth:\n self.width - rowHeaderCellWidth - self.style.scrollBarWidth - 1,\n offsetParent: self.intf.parentNode,\n parentNode: self.intf.parentNode,\n style: self.style,\n nodeType: 'canvas-datagrid-tree',\n scrollTop: self.scrollBox.scrollTop,\n scrollLeft: self.scrollBox.scrollLeft,\n rowIndex: rowOrderIndex,\n columnGroupsAreaHeight: columnGroupsAreaHeight,\n rowGroupsAreaWidth: rowGroupsAreaWidth,\n };\n if (self.intf.parentNode) {\n const { columnGroupsAreaHeight, rowGroupsAreaWidth } =\n self.intf.parentNode;\n treeGrid.parentNode.columnGroupsAreaHeight +=\n columnGroupsAreaHeight || 0;\n treeGrid.parentNode.rowGroupsAreaWidth += rowGroupsAreaWidth || 0;\n }\n self.visibleCells.unshift({\n rowIndex: rowOrderIndex,\n columnIndex: 0,\n y: treeGrid.parentNode.offsetTop,\n x: treeGrid.parentNode.offsetLeft,\n height: treeGrid.height,\n width: treeGrid.width,\n style: 'tree-grid',\n type: treeGrid.parentNode.nodeType,\n });\n treeGrid.draw();\n } else if (treeGrid) {\n treeGrid.parentNode.offsetHeight = 0;\n delete self.sizes.trees[rowOrderIndex];\n }\n rowHeaders.push([rowData, rowOrderIndex, rowIndex, y, rowHeight]);\n self.visibleRowHeights[rowOrderIndex] = rowHeight;\n y += cellHeight + (bc ? 0 : self.style.cellBorderWidth);\n return true;\n }\n function initDraw() {\n self.visibleRows = [];\n schema = self.getSchema();\n self.visibleCells = [];\n self.visibleGroups = [];\n self.visibleUnhideIndicators = [];\n self.canvasOffsetTop = self.isChildGrid ? self.parentNode.offsetTop : 0.5;\n self.canvasOffsetLeft = self.isChildGrid\n ? self.parentNode.offsetLeft\n : -0.5;\n h = self.height;\n w = self.width;\n\n // patch for first row being hidden\n const firstRowIndexOffset = rowIndexOffsetByHiddenRows[0];\n if (firstRowIndexOffset && firstRowIndexOffset.from === 0) {\n currentRowIndexOffset = firstRowIndexOffset.plus;\n rowIndexOffsetByHiddenRows.shift();\n }\n }\n function drawBackground() {\n radiusRect(0, 0, w, h, 0);\n self.ctx.clip();\n self.ctx.clearRect(0, 0, w, h);\n self.ctx.fillStyle = self.style.gridBackgroundColor;\n fillRect(0, 0, w, h);\n }\n function initGroupArea() {\n self.ctx.translate(rowGroupsAreaWidth, columnGroupsAreaHeight);\n }\n function drawGroupArea() {\n const mx = rowGroupsAreaWidth;\n const my = columnGroupsAreaHeight;\n const frozenColumnsWidth = getFrozenColumnsWidth();\n const frozenRowsHeight =\n rowGroupsFrozenInfo.y + rowGroupsFrozenInfo.h - columnHeaderCellHeight;\n const onTheLeft = self.attributes.columnGroupIndicatorPosition === 'left';\n const onTheTop = self.attributes.rowGroupIndicatorPosition === 'top';\n\n /** @type {CanvasRenderingContext2D} */\n const ctx = self.ctx;\n ctx.save();\n ctx.fillStyle = self.style.groupingAreaBackgroundColor;\n fillRect(0, -my, w, my);\n fillRect(-mx, -my, mx, h);\n ctx.restore();\n\n //#region Columns Grouping\n /** it extends `self.groupedRows` */\n const groupedColumns = [];\n for (let row = 0; row < self.groupedColumns.length; row++) {\n const groups = self.groupedColumns[row];\n for (let j = 0; j < groups.length; j++) {\n groupedColumns.push(Object.assign({ row }, groups[j]));\n }\n }\n if (groupedColumns.length > 0) {\n const rowHeight = self.style.columnGroupRowHeight;\n const toggleHandleSize = rowHeight * 0.5;\n const toggleHandlePadding = (rowHeight - toggleHandleSize) * 0.5;\n\n for (let i = 0; i < groupedColumns.length; i++) {\n const group = groupedColumns[i];\n const { row, collapsed } = group;\n\n const topY = -my + row * rowHeight;\n const centerY = topY + rowHeight * 0.5;\n const bottomY = topY + rowHeight - toggleHandlePadding;\n const leftmostX =\n rowHeaderCellWidth - toggleHandleSize - toggleHandlePadding;\n\n const drawGroupHandleAtX = (x) =>\n drawGroupHandle(\n x,\n topY + toggleHandlePadding,\n toggleHandleSize,\n group.collapsed,\n );\n const pushToVisibleGroups = (leftX, rightX) =>\n self.visibleGroups.push({\n type: 'c',\n collapsed,\n from: group.from,\n to: group.to,\n row,\n x: leftX + mx,\n y: topY + my,\n x2: rightX + mx,\n y2: bottomY + my,\n });\n\n //#region check the relationship between this group and frozen columns\n const crossTheFrozen =\n group.from < self.frozenColumn && group.to >= self.frozenColumn;\n const notInFrozen = group.from >= self.frozenColumn;\n //#endregion\n\n if (collapsed) {\n let leftX = leftmostX + toggleHandleSize;\n // This group is not sticking on the first column\n if (group.from > 0) {\n let colIndex = group.to + 1;\n let col = columnGroupsRectInfo[colIndex];\n if (!col) {\n colIndex = group.from - 1;\n col = columnGroupsRectInfo[colIndex];\n if (!col) continue; // don't draw this group indicator because it is invisible\n leftX = col.x + col.w - toggleHandleSize * 0.5;\n } else {\n leftX = col.x + toggleHandlePadding;\n }\n if (colIndex >= self.frozenColumn) {\n const compare =\n frozenColumnsWidth + rowHeaderCellWidth - toggleHandlePadding;\n // don't draw this group indicator because it is hidden by frozen columns\n if (leftX < compare) continue;\n }\n }\n const rightX = leftX + toggleHandleSize;\n ctx.save();\n ctx.strokeStyle = self.style.groupIndicatorColor;\n ctx.fillStyle = self.style.groupIndicatorBackgroundColor;\n drawGroupHandleAtX(leftX);\n ctx.restore();\n pushToVisibleGroups(leftX, rightX);\n } // end of collapsed group\n\n /** @type {number} pointer for loop */\n let ptr;\n let left = columnGroupsRectInfo[group.from];\n let right = columnGroupsRectInfo[group.to];\n\n let containsBegining = true;\n let containsEnd = true;\n ptr = group.from;\n while (!left && ptr < group.to) {\n left = columnGroupsRectInfo[++ptr];\n containsBegining = false;\n }\n ptr = group.to;\n while (!right && ptr > group.from) {\n right = columnGroupsRectInfo[--ptr];\n containsEnd = false;\n }\n if (!left || !right) continue;\n let rightX = right.x + right.w;\n let leftX = left.x;\n if (crossTheFrozen) {\n const rightCompare = columnGroupsRectInfo[self.frozenColumn - 1];\n if (rightCompare) {\n let compareX = rightCompare.x + rightCompare.w;\n if (!onTheLeft) compareX += toggleHandleSize;\n if (compareX >= rightX) {\n right = rightCompare;\n rightX = right.x + right.w;\n containsEnd = false;\n }\n }\n }\n\n let minLeftX =\n rowHeaderCellWidth + (notInFrozen ? frozenColumnsWidth : 0);\n if (rightX + (onTheLeft ? 0 : toggleHandleSize) < minLeftX) continue;\n\n rightX -= toggleHandlePadding;\n leftX += toggleHandlePadding;\n\n ctx.save();\n ctx.strokeStyle = self.style.groupIndicatorColor;\n ctx.fillStyle = self.style.groupIndicatorBackgroundColor;\n const lineCoords = [];\n\n if (onTheLeft) {\n // avoid lines from two groups be overlapping\n minLeftX += toggleHandlePadding * 2;\n if (leftX < minLeftX) leftX = minLeftX;\n if (group.from === 0) leftX -= toggleHandlePadding * 2;\n if (rightX >= leftX) {\n lineCoords.push(leftX, centerY, rightX, centerY);\n if (containsEnd) lineCoords.push(rightX, bottomY);\n } else {\n rightX = leftX;\n }\n\n leftX -= toggleHandleSize;\n drawGroupHandleAtX(leftX);\n // add more clickable area into `visibleGroups`\n rightX += toggleHandlePadding - 1;\n } else {\n // handle on the right\n if (leftX < minLeftX) leftX = minLeftX;\n if (group.from === 0) leftX -= toggleHandlePadding * 2;\n if (containsEnd) {\n if (group.to === self.frozenColumn - 1) {\n rightX -= toggleHandleSize;\n } else {\n rightX += toggleHandlePadding * 2;\n }\n drawGroupHandleAtX(rightX);\n }\n if (leftX > rightX) {\n leftX = rightX;\n } else {\n if (group.from === 0) {\n containsBegining = true;\n leftX = leftmostX + toggleHandleSize;\n }\n if (containsBegining) lineCoords.push(leftX, bottomY);\n lineCoords.push(leftX, centerY, rightX, centerY);\n }\n\n // add more clickable area into `visibleGroups`\n leftX -= toggleHandlePadding + 1;\n if (containsEnd) rightX += toggleHandleSize;\n }\n drawLines(lineCoords);\n ctx.restore();\n pushToVisibleGroups(leftX, rightX);\n }\n }\n //#endregion Columns Grouping\n\n //#region Rows Grouping\n /** it extends `self.groupedRows` */\n const groupedRows = [];\n for (let col = 0; col < self.groupedRows.length; col++) {\n const groups = self.groupedRows[col];\n for (let j = 0; j < groups.length; j++) {\n groupedRows.push(Object.assign({ col }, groups[j]));\n }\n }\n if (groupedRows.length > 0) {\n const colWidth = self.style.rowGroupColumnWidth;\n const toggleHandleSize = colWidth * 0.5;\n const toggleHandlePadding = (colWidth - toggleHandleSize) * 0.5;\n\n for (let i = 0; i < groupedRows.length; i++) {\n const group = groupedRows[i];\n const { col, collapsed } = group;\n\n const leftX = -mx + col * colWidth;\n const centerX = leftX + colWidth * 0.5;\n const rightX = leftX + colWidth - toggleHandlePadding;\n const topmostY =\n columnHeaderCellHeight - toggleHandleSize - toggleHandlePadding;\n\n const drawGroupHandleAtY = (y) =>\n drawGroupHandle(\n leftX + toggleHandlePadding,\n y,\n toggleHandleSize,\n group.collapsed,\n );\n const pushToVisibleGroups = (topY, bottomY) =>\n self.visibleGroups.push({\n type: 'r',\n collapsed,\n from: group.from,\n to: group.to,\n col,\n x: leftX + mx,\n y: topY + my,\n x2: rightX + mx,\n y2: bottomY + my,\n });\n\n //#region check the relationship between this group and frozen columns\n const crossTheFrozen =\n group.from < self.frozenRow && group.to >= self.frozenRow;\n const notInFrozen = group.from >= self.frozenRow;\n //#endregion\n\n if (collapsed) {\n let topY = topmostY + toggleHandleSize;\n // This group is not sticking on the first column\n if (group.from > 0) {\n let rowIndex = group.to + 1;\n let row = rowGroupsRectInfo[rowIndex];\n if (!row) {\n rowIndex = group.from - 1;\n row = rowGroupsRectInfo[rowIndex];\n if (!row) continue; // don't draw this group indicator because it is invisible\n topY = row.y + row.h - toggleHandleSize * 0.5;\n } else {\n topY = row.y;\n }\n if (rowIndex >= self.frozenRow) {\n const compare =\n frozenRowsHeight +\n columnHeaderCellHeight -\n toggleHandlePadding;\n // don't draw this group indicator because it is hidden by frozen columns\n if (topY < compare) continue;\n }\n }\n const bottomY = topY + toggleHandleSize;\n ctx.save();\n ctx.strokeStyle = self.style.groupIndicatorColor;\n ctx.fillStyle = self.style.groupIndicatorBackgroundColor;\n drawGroupHandleAtY(topY);\n ctx.restore();\n pushToVisibleGroups(topY, bottomY);\n } // end of collapsed group\n\n /** @type {number} pointer for loop */\n let ptr;\n let top = rowGroupsRectInfo[group.from];\n let bottom = rowGroupsRectInfo[group.to];\n\n let containsBegining = true;\n let containsEnd = true;\n ptr = group.from;\n while (!top && ptr < group.to) {\n top = rowGroupsRectInfo[++ptr];\n containsBegining = false;\n }\n ptr = group.to;\n while (!bottom && ptr > group.from) {\n bottom = rowGroupsRectInfo[--ptr];\n containsEnd = false;\n }\n if (!top || !bottom) continue;\n let bottomY = bottom.y + bottom.h;\n let topY = top.y;\n if (crossTheFrozen) {\n const bottomCompare = rowGroupsRectInfo[self.frozenRow - 1];\n if (bottomCompare) {\n let compareY = bottomCompare.y + bottomCompare.h;\n if (!onTheTop) compareY += toggleHandleSize;\n if (compareY >= bottomY) {\n bottom = bottomCompare;\n bottomY = bottom.y + bottom.h;\n containsEnd = false;\n }\n }\n }\n\n let minTopY =\n columnHeaderCellHeight + (notInFrozen ? frozenRowsHeight : 0);\n if (bottomY + (onTheTop ? 0 : toggleHandleSize) < minTopY) continue;\n\n bottomY -= toggleHandlePadding;\n topY += toggleHandlePadding;\n\n ctx.save();\n ctx.strokeStyle = self.style.groupIndicatorColor;\n ctx.fillStyle = self.style.groupIndicatorBackgroundColor;\n const lineCoords = [];\n\n if (onTheTop) {\n // avoid lines from two groups be overlapping\n minTopY += toggleHandlePadding * 2;\n if (topY < minTopY) topY = minTopY;\n if (group.from === 0) topY -= toggleHandlePadding * 2;\n if (bottomY >= topY) {\n lineCoords.push(centerX, topY, centerX, bottomY);\n if (containsEnd) lineCoords.push(rightX, bottomY);\n } else {\n bottomY = topY;\n }\n\n topY -= toggleHandleSize;\n drawGroupHandleAtY(topY);\n\n // add more clickable area into `visibleGroups`\n bottomY += toggleHandlePadding - 1;\n } else {\n // handle on the bottom\n if (topY < minTopY) topY = minTopY;\n if (group.from === 0) topY -= toggleHandlePadding * 2;\n if (containsEnd) {\n if (group.to === self.frozenRow - 1) {\n bottomY -= toggleHandleSize;\n } else {\n // bottomY += toggleHandlePadding * 2;\n }\n drawGroupHandleAtY(bottomY);\n }\n if (topY > bottomY) {\n topY = bottomY;\n } else {\n if (group.from === 0) {\n containsBegining = true;\n topY = topmostY + toggleHandleSize;\n }\n if (containsBegining) lineCoords.push(rightX, topY);\n lineCoords.push(centerX, topY, centerX, bottomY);\n // add more clickable area into `visibleGroups`\n topY -= toggleHandlePadding + 1;\n }\n // add more clickable area into `visibleGroups`\n if (containsEnd) bottomY += toggleHandleSize;\n }\n drawLines(lineCoords);\n ctx.restore();\n pushToVisibleGroups(topY, bottomY);\n }\n }\n //#endregion Rows Grouping\n }\n function drawFrozenRows() {\n var rowOrderIndex,\n ln = Math.min(viewData.length, self.frozenRow);\n x =\n -self.scrollBox.scrollLeft +\n self.scrollPixelLeft +\n self.style.cellBorderWidth;\n y = columnHeaderCellHeight;\n for (rowIndex = 0; rowIndex < ln; rowIndex += 1) {\n rowOrderIndex = self.orders.rows[rowIndex];\n if (!drawRow(rowOrderIndex, rowIndex)) {\n break;\n }\n }\n if (self.attributes.allowFreezingRows) {\n // HACK great, another stupid magic number.\n // Background will appear as a 0.5px artifact behind the row freeze bar without this hack\n if (y > columnHeaderCellHeight) y += self.style.frozenMarkerWidth;\n y += self.style.frozenMarkerBorderWidth - 0.4999999999;\n }\n self.lastFrozenRowPixel = y;\n }\n function drawRows() {\n self.ctx.save();\n if (self.frozenRow > 0) {\n radiusRect(\n 0,\n self.lastFrozenRowPixel,\n self.width,\n self.height - self.lastFrozenRowPixel,\n 0,\n );\n self.ctx.clip();\n }\n var columnOrderIndex,\n rowOrderIndex,\n headerIndex,\n g = schema.length;\n x =\n -self.scrollBox.scrollLeft +\n self.scrollPixelLeft +\n self.style.cellBorderWidth;\n if (!self.attributes.snapToRow) {\n y +=\n -self.scrollBox.scrollTop +\n self.scrollPixelTop +\n self.style.cellBorderWidth;\n }\n for (\n rowIndex = self.frozenRow + self.scrollIndexTop;\n rowIndex < l;\n rowIndex += 1\n ) {\n rowOrderIndex = self.orders.rows[rowIndex];\n self.scrollIndexBottom = rowIndex;\n self.scrollPixelBottom = y;\n if (\n self.cellTree.rows.length > 0 &&\n Object.keys(self.cellTree.rows[rowOrderIndex]).length > 0 &&\n self.cellTree.rows[rowOrderIndex].hide\n )\n continue;\n if (!drawRow(rowOrderIndex, rowIndex)) {\n break;\n }\n }\n if (self.attributes.showNewRow) {\n if (self.attributes.showRowHeaders) {\n x += rowHeaderCellWidth;\n }\n rowHeight = cellHeight = self.style.cellHeight;\n rowOpen = false;\n for (\n columnOrderIndex = self.scrollIndexLeft;\n columnOrderIndex < g;\n columnOrderIndex += 1\n ) {\n if (!isColumnCollapsedByGroup(columnOrderIndex)) {\n headerIndex = self.orders.columns[columnOrderIndex];\n x += drawCell(self.newRow, viewData.length, viewData.length)(\n schema[headerIndex],\n headerIndex,\n columnOrderIndex,\n );\n }\n if (x > self.width + self.scrollBox.scrollLeft) {\n break;\n }\n }\n rowHeaders.push([\n self.newRow,\n viewData.length,\n viewData.length,\n y,\n rowHeight,\n ]);\n }\n self.ctx.restore();\n }\n function drawMoveMarkers() {\n if (!self.movingSelection) {\n return;\n }\n self.ctx.lineWidth = self.style.moveOverlayBorderWidth;\n self.ctx.strokeStyle = self.style.moveOverlayBorderColor;\n self.ctx.setLineDash(self.style.moveOverlayBorderSegments);\n moveBorders.forEach(function (c) {\n addBorderLine(c[0], c[1]);\n });\n self.ctx.setLineDash([]);\n }\n function drawReorderMarkers() {\n if (!self.reorderObject) {\n return;\n }\n var b = {\n height: self.reorderObject.height,\n width: self.reorderObject.width,\n x: self.reorderObject.x + self.reorderObject.dragOffset.x,\n y: self.reorderObject.y + self.reorderObject.dragOffset.y,\n },\n m = {\n width: w,\n height: h,\n x: 0,\n y: 0,\n };\n self.ctx.fillStyle = self.style.reorderMarkerBackgroundColor;\n self.ctx.lineWidth = self.style.reorderMarkerBorderWidth;\n self.ctx.strokeStyle = self.style.reorderMarkerBorderColor;\n if (self.dragMode === 'row-reorder') {\n b.height = self.getSelectedRowsHeight();\n b.width = w;\n b.x = 0;\n m.width = w;\n m.height = self.currentCell.height;\n m.y = self.currentCell.y;\n fillRect(b.x, b.y, b.width, b.height);\n strokeRect(b.x, b.y, b.width, b.height);\n self.ctx.lineWidth = self.style.reorderMarkerIndexBorderWidth;\n self.ctx.strokeStyle = self.style.reorderMarkerIndexBorderColor;\n if (\n !self.isRowSelected(self.reorderTarget.sortRowIndex) &&\n self.currentCell.rowIndex !== self.reorderObject.rowIndex &&\n self.currentCell.rowIndex > -1 &&\n self.currentCell.rowIndex < l\n ) {\n addBorderLine(\n m,\n self.reorderTarget.sortRowIndex > self.reorderObject.sortRowIndex\n ? 'b'\n : 't',\n );\n }\n } else if (self.dragMode === 'column-reorder' && self.reorderObject) {\n b.width = self.getSelectedColumnsWidth();\n b.height = h;\n b.y = 0;\n m.height = h;\n m.width = self.currentCell.width;\n m.y = 0;\n m.x = self.currentCell.x;\n fillRect(b.x, b.y, b.width, b.height);\n strokeRect(b.x, b.y, b.width, b.height);\n self.ctx.lineWidth = self.style.reorderMarkerIndexBorderWidth;\n self.ctx.strokeStyle = self.style.reorderMarkerIndexBorderColor;\n if (\n !self.isColumnSelected(self.reorderTarget.sortColumnIndex) &&\n self.currentCell.sortColumnIndex !==\n self.reorderObject.sortColumnIndex &&\n self.reorderTarget.columnIndex !== self.reorderObject.columnIndex &&\n self.currentCell.sortColumnIndex > -1 &&\n self.currentCell.sortColumnIndex < schema.length\n ) {\n addBorderLine(\n m,\n self.reorderTarget.columnIndex > self.reorderObject.columnIndex\n ? 'r'\n : 'l',\n );\n }\n }\n }\n function drawResizeMarkers() {\n if (\n !self.attributes.resizeAfterDragged ||\n !self.draggingItem ||\n !self.pendingDragResize ||\n (self.dragMode != 'ew-resize' && self.dragMode != 'ns-resize')\n ) {\n return;\n }\n\n const resizingRow = self.dragMode == 'ns-resize';\n const height = resizingRow ? self.style.resizeMarkerSize : self.height;\n const width = resizingRow ? self.width : self.style.resizeMarkerSize;\n const minX =\n self.dragStart.x -\n (self.resizingStartingWidth - self.style.minColumnWidth);\n const minY =\n self.dragStart.y -\n (self.resizingStartingHeight - self.style.minRowHeight);\n const x = resizingRow ? 0 : Math.max(self.pendingDragResize.x, minX);\n const y = !resizingRow ? 0 : Math.max(self.pendingDragResize.y, minY);\n\n self.ctx.fillStyle = self.style.resizeMarkerColor;\n fillRect(x, y, width, height);\n }\n function drawBorder() {\n self.ctx.lineWidth = self.style.gridBorderWidth;\n self.ctx.strokeStyle = self.style.gridBorderColor;\n strokeRect(0, 0, self.width, self.height);\n }\n function drawSelectionBorders() {\n function dsb(c) {\n if (!self.fillOverlay.handle) {\n self.ctx.lineWidth = self.style.selectionOverlayBorderWidth;\n self.ctx.strokeStyle = self.style.selectionOverlayBorderColor;\n addBorderLine(c[0], c[1]);\n }\n }\n selectionBorders\n .filter(function (c) {\n return (\n c[0].rowIndex < self.frozenRow &&\n c[0].columnIndex < self.frozenColumn\n );\n })\n .forEach(dsb);\n self.ctx.save();\n clipFrozenArea(0);\n selectionBorders\n .filter(function (c) {\n return (\n c[0].rowIndex >= self.frozenRow &&\n c[0].columnIndex >= self.frozenColumn\n );\n })\n .forEach(dsb);\n self.ctx.restore();\n self.ctx.save();\n clipFrozenArea(1);\n selectionBorders\n .filter(function (c) {\n return (\n c[0].rowIndex >= self.frozenRow &&\n c[0].columnIndex < self.frozenColumn\n );\n })\n .forEach(dsb);\n self.ctx.restore();\n self.ctx.save();\n clipFrozenArea(2);\n selectionBorders\n .filter(function (c) {\n return (\n c[0].rowIndex < self.frozenRow &&\n c[0].columnIndex >= self.frozenColumn\n );\n })\n .forEach(dsb);\n self.ctx.restore();\n\n drawFillOverlay();\n }\n function drawSelectionHandles() {\n if (\n (self.mobile || self.attributes.allowMovingSelection) &&\n self.attributes.editable\n ) {\n self.ctx.lineWidth = self.style.selectionHandleBorderWidth;\n self.ctx.strokeStyle = self.style.selectionHandleBorderColor;\n self.ctx.fillStyle = self.style.selectionHandleColor;\n selectionHandles.forEach(function (c) {\n addselectionHandle(c[0], c[1]);\n var az = self.attributes.touchSelectHandleZone / 2,\n ax =\n c[0].x + (c[1] === 'tl' || c[1] === 'bl' ? 0 : c[0].width) - az,\n ay =\n c[0].y + (c[1] === 'bl' || c[1] === 'br' ? c[0].height : 0) - az;\n self.visibleCells.unshift({\n x: ax,\n y: ay,\n height: self.style.selectionHandleSize + az,\n width: self.style.selectionHandleSize + az,\n style: 'selection-handle-' + c[1],\n });\n });\n }\n }\n function drawFillOverlay() {\n if (!self.fillOverlay.handle || !self.fillOverlay.snapTo) {\n return;\n }\n\n self.ctx.save();\n\n const overlay = self.fillOverlay;\n const handle = overlay.handle;\n const toX = overlay.snapTo.x;\n const toY = overlay.snapTo.y;\n\n // The cell that the cursor is moving over. This may be unavailable\n // when the cursor is outside the grid or is pointing to something else.\n //\n // When unavailable, we use the actual position of the cursor to draw\n // the overlay.\n const snap = overlay.snap;\n\n // Calculate the X, Y coordinates of the cursor with snap positions and\n // the direction of the movement in mind.\n //\n // When the movement is horizontal, we get the Y coordinate from the handle,\n // and vice-versa.\n const cursorX =\n overlay.direction === 'x'\n ? snap\n ? snap.x + (overlay.x < toX ? 0 : snap.width)\n : overlay.x\n : handle.x;\n const cursorY =\n overlay.direction === undefined || overlay.direction === 'y'\n ? snap\n ? snap.y + (overlay.y < toY ? 0 : snap.height)\n : overlay.y\n : handle.y;\n\n // The final coordinates of the rect. We use 'minX' and 'minY' to avoid\n // drawing on the frozen area.\n const x = Math.max(Math.min(toX, cursorX), overlay.minX);\n const y = Math.max(Math.min(toY, cursorY), overlay.minY);\n\n // Width and height of the rect are the difference between the\n // coordinates of both the rect and the cursor. The user may be pointing\n // behind and/or upwards of the rect, so we need to take that into\n // account.\n const width = Math.max(toX, cursorX) - x;\n const height = Math.max(toY, cursorY) - y;\n\n self.ctx.strokeStyle = self.style.fillOverlayBorderColor;\n self.ctx.lineWidth = self.style.fillOverlayBorderWidth;\n self.ctx.setLineDash([3, 3]);\n strokeRect(x, y, width, height);\n self.ctx.setLineDash([]);\n self.ctx.restore();\n }\n function drawActiveCell() {\n if (!aCell) {\n return;\n }\n self.ctx.save();\n var cl =\n self.activeCell.columnIndex + 1 > self.frozenColumn ||\n self.activeCell.rowIndex + 1 > self.frozenRow,\n acx = cl ? self.lastFrozenColumnPixel : 0,\n acy = cl ? self.lastFrozenRowPixel : 0,\n acw = cl ? self.width - self.lastFrozenColumnPixel : self.width,\n ach = cl ? self.height - self.lastFrozenRowPixel : self.height;\n radiusRect(acx, acy, acw, ach, 0);\n self.ctx.clip();\n if (self.attributes.selectionMode === 'row') {\n if (self.activeCell && self.activeCell.rowIndex === aCell.rowIndex) {\n self.ctx.lineWidth = self.style.activeCellOverlayBorderWidth;\n self.ctx.strokeStyle = self.style.activeCellOverlayBorderColor;\n strokeRect(\n 1,\n aCell.y,\n self.getHeaderWidth() + rowHeaderCellWidth,\n self.visibleRowHeights[aCell.rowIndex],\n );\n }\n } else {\n self.ctx.lineWidth = self.style.activeCellOverlayBorderWidth;\n self.ctx.strokeStyle = self.style.activeCellOverlayBorderColor;\n strokeRect(aCell.x, aCell.y, aCell.width, aCell.height);\n }\n self.ctx.restore();\n }\n function drawFrozenMarkers() {\n var my = self.lastFrozenRowPixel - self.style.frozenMarkerWidth,\n mx = self.lastFrozenColumnPixel - self.style.frozenMarkerWidth,\n xHover =\n self.currentCell && self.currentCell.style === 'frozen-row-marker',\n yHover =\n self.currentCell && self.currentCell.style === 'frozen-column-marker';\n let rowHeaderCellWidth = self.getRowHeaderCellWidth();\n self.ctx.lineWidth = self.style.frozenMarkerBorderWidth;\n if (self.attributes.allowFreezingColumns) {\n if (\n !self.freezeMarkerPosition ||\n (self.freezeMarkerPosition && self.dragMode === 'frozen-row-marker')\n ) {\n if (mx > self.style.rowHeaderCellWidth) {\n self.ctx.fillStyle = self.style.frozenMarkerColor;\n self.ctx.strokeStyle = self.style.frozenMarkerBorderColor;\n fillRect(mx, 0, self.style.frozenMarkerWidth, self.height);\n strokeRect(mx, 0, self.style.frozenMarkerWidth, self.height);\n }\n self.ctx.fillStyle = yHover\n ? self.style.frozenMarkerHoverColor\n : self.style.frozenMarkerHeaderColor;\n self.ctx.strokeStyle = yHover\n ? self.style.frozenMarkerHoverBorderColor\n : self.style.frozenMarkerHeaderColor;\n fillRect(\n mx,\n 0,\n self.style.frozenMarkerWidth,\n self.style.columnHeaderCellHeight,\n );\n strokeRect(\n mx,\n 0,\n self.style.frozenMarkerWidth,\n self.style.columnHeaderCellHeight,\n );\n }\n\n if (\n !self.dragStartObject ||\n (self.dragStartObject &&\n self.dragStartObject.style !== 'rowHeaderCell')\n ) {\n self.visibleCells.unshift({\n x: mx,\n y: 0,\n height: self.height,\n width: self.style.frozenMarkerWidth, // + self.style.frozenMarkerBorderWidth,\n style: 'frozen-column-marker',\n });\n }\n }\n if (self.attributes.allowFreezingRows) {\n if (\n !self.freezeMarkerPosition ||\n (self.freezeMarkerPosition &&\n self.dragMode === 'frozen-column-marker')\n ) {\n if (my > rowHeaderCellWidth) {\n self.ctx.fillStyle = self.style.frozenMarkerColor;\n self.ctx.strokeStyle = self.style.frozenMarkerBorderColor;\n fillRect(0, my, self.width, self.style.frozenMarkerWidth);\n strokeRect(0, my, self.width, self.style.frozenMarkerWidth);\n }\n self.ctx.fillStyle = xHover\n ? self.style.frozenMarkerHoverColor\n : self.style.frozenMarkerHeaderColor;\n self.ctx.strokeStyle = xHover\n ? self.style.frozenMarkerHoverBorderColor\n : self.style.frozenMarkerHeaderColor;\n fillRect(0, my, rowHeaderCellWidth, self.style.frozenMarkerWidth);\n strokeRect(0, my, rowHeaderCellWidth, self.style.frozenMarkerWidth);\n }\n var height =\n self.style.frozenMarkerWidth + self.style.frozenMarkerBorderWidth;\n if (\n !self.dragStartObject ||\n (self.dragStartObject &&\n self.dragStartObject.style !== 'columnHeaderCell')\n ) {\n self.visibleCells.unshift({\n x: 0,\n y: my,\n height: height,\n width: self.width,\n style: 'frozen-row-marker',\n });\n }\n rowGroupsFrozenInfo = { y: my, h: height };\n }\n if (self.freezeMarkerPosition) {\n self.ctx.fillStyle = self.style.frozenMarkerActiveColor;\n self.ctx.strokeStyle = self.style.frozenMarkerActiveBorderColor;\n if (self.dragMode === 'frozen-column-marker') {\n let posX = self.freezeMarkerPosition.x;\n let nearCell = self.getCellAt(posX, 0);\n if (self.freezeMarkerPosition.isGrab) posX = mx;\n if (posX > rowHeaderCellWidth) {\n let x =\n nearCell.x -\n self.style.frozenMarkerWidth -\n self.style.frozenMarkerBorderWidth;\n if (posX > x + nearCell.width / 2) x = x + nearCell.width;\n self.ctx.fillStyle = self.style.frozenMarkerColor;\n self.ctx.strokeStyle = self.style.frozenMarkerBorderColor;\n fillRect(x, 0, self.style.frozenMarkerWidth, self.height);\n strokeRect(x, 0, self.style.frozenMarkerWidth, self.height);\n self.ctx.fillStyle = self.style.frozenMarkerHeaderColor;\n self.ctx.strokeStyle = self.style.frozenMarkerHeaderColor;\n fillRect(\n x,\n 0,\n self.style.frozenMarkerWidth,\n self.style.columnHeaderCellHeight,\n );\n strokeRect(\n x,\n 0,\n self.style.frozenMarkerWidth,\n self.style.columnHeaderCellHeight,\n );\n }\n self.ctx.fillStyle = self.style.frozenMarkerActiveHeaderColor;\n self.ctx.strokeStyle = self.style.frozenMarkerActiveBorderColor;\n fillRect(\n posX,\n 0,\n self.style.frozenMarkerWidth,\n self.style.columnHeaderCellHeight,\n );\n strokeRect(\n posX,\n 0,\n self.style.frozenMarkerWidth,\n self.style.columnHeaderCellHeight,\n );\n self.ctx.fillStyle = self.style.frozenMarkerActiveColor;\n fillRect(posX, 0, self.style.frozenMarkerWidth, self.height);\n strokeRect(posX, 0, self.style.frozenMarkerWidth, self.height);\n } else {\n let posY = self.freezeMarkerPosition.y;\n let nearCell = self.getCellAt(0, posY);\n if (self.freezeMarkerPosition.isGrab) posY = my;\n if (posY > self.style.columnHeaderCellHeight) {\n let y =\n nearCell.y -\n self.style.frozenMarkerWidth -\n self.style.frozenMarkerBorderWidth;\n if (posY > y + nearCell.height / 2) y = y + nearCell.height;\n self.ctx.fillStyle = self.style.frozenMarkerColor;\n self.ctx.strokeStyle = self.style.frozenMarkerBorderColor;\n fillRect(0, y, self.width, self.style.frozenMarkerWidth);\n strokeRect(0, y, self.width, self.style.frozenMarkerWidth);\n self.ctx.fillStyle = self.style.frozenMarkerHeaderColor;\n self.ctx.strokeStyle = self.style.frozenMarkerHeaderColor;\n fillRect(0, y, rowHeaderCellWidth, self.style.frozenMarkerWidth);\n strokeRect(0, y, rowHeaderCellWidth, self.style.frozenMarkerWidth);\n }\n self.ctx.fillStyle = self.style.frozenMarkerActiveHeaderColor;\n self.ctx.strokeStyle = self.style.frozenMarkerActiveBorderColor;\n fillRect(0, posY, rowHeaderCellWidth, self.style.frozenMarkerWidth);\n strokeRect(0, posY, rowHeaderCellWidth, self.style.frozenMarkerWidth);\n self.ctx.fillStyle = self.style.frozenMarkerActiveColor;\n fillRect(0, posY, self.width, self.style.frozenMarkerWidth);\n strokeRect(0, posY, self.width, self.style.frozenMarkerWidth);\n }\n }\n }\n function drawPerfLines() {\n if (!self.attributes.showPerformance) {\n return;\n }\n var pw = 250,\n px =\n self.width -\n pw -\n self.style.scrollBarWidth -\n self.style.scrollBarBorderWidth * 2,\n py = columnHeaderCellHeight,\n ph = 100;\n if (scrollDebugCounters.length === 0) {\n scrollDebugCounters = fillArray(0, perfWindowSize, 1, function () {\n return [0, 0];\n });\n }\n if (touchPPSCounters.length === 0) {\n touchPPSCounters = fillArray(0, perfWindowSize, 1, function () {\n return [0, 0];\n });\n }\n if (entityCount.length === 0) {\n entityCount = fillArray(0, perfWindowSize, 1, 0);\n }\n self.ctx.lineWidth = 0.5;\n function dpl(name, perfArr, arrIndex, max, color, useAbs, rowIndex) {\n var v;\n drawPerfLine(pw, ph, px, py, perfArr, arrIndex, max, color, useAbs);\n self.ctx.fillStyle = color;\n fillRect(3 + px, py + 9 + rowIndex * 11, 8, 8);\n self.ctx.fillStyle = self.style.debugPerfChartTextColor;\n v = arrIndex !== undefined ? perfArr[0][arrIndex] : perfArr[0];\n fillText(\n name + ' ' + (isNaN(v) ? 0 : v).toFixed(3),\n 14 + px,\n py + 16 + rowIndex * 11,\n );\n }\n self.ctx.textAlign = 'left';\n self.ctx.font = self.style.debugFont;\n self.ctx.fillStyle = self.style.debugPerfChartBackground;\n fillRect(px, py, pw, ph);\n [\n [\n 'Scroll Height',\n scrollDebugCounters,\n 0,\n self.scrollBox.scrollHeight,\n self.style.debugScrollHeightColor,\n false,\n ],\n [\n 'Scroll Width',\n scrollDebugCounters,\n 1,\n self.scrollBox.scrollWidth,\n self.style.debugScrollWidthColor,\n false,\n ],\n [\n 'Performance',\n perfCounters,\n undefined,\n 200,\n self.style.debugPerformanceColor,\n false,\n ],\n [\n 'Entities',\n entityCount,\n undefined,\n 1500,\n self.style.debugEntitiesColor,\n false,\n ],\n [\n 'TouchPPSX',\n touchPPSCounters,\n 0,\n 1000,\n self.style.debugTouchPPSXColor,\n true,\n ],\n [\n 'TouchPPSY',\n touchPPSCounters,\n 1,\n 1000,\n self.style.debugTouchPPSYColor,\n true,\n ],\n ].forEach(function (i, index) {\n i.push(index);\n dpl.apply(null, i);\n });\n self.ctx.fillStyle = self.style.debugPerfChartBackground;\n entityCount.pop();\n entityCount.unshift(self.visibleCells.length);\n scrollDebugCounters.pop();\n scrollDebugCounters.unshift([\n self.scrollBox.scrollTop,\n self.scrollBox.scrollLeft,\n ]);\n touchPPSCounters.pop();\n touchPPSCounters.unshift([self.yPPS, self.xPPS]);\n }\n function drawDebug() {\n self.ctx.save();\n var d;\n if (self.attributes.showPerformance || self.attributes.debug) {\n if (perfCounters.length === 0) {\n perfCounters = fillArray(0, perfWindowSize, 1, 0);\n }\n perfCounters.pop();\n perfCounters.unshift(performance.now() - p);\n }\n if (!self.attributes.debug) {\n self.ctx.restore();\n return;\n }\n self.ctx.font = self.style.debugFont;\n d = {};\n d.perf = (\n perfCounters.reduce(function (a, b) {\n return a + b;\n }, 0) / Math.min(drawCount, perfCounters.length)\n ).toFixed(1);\n d.perfDelta = perfCounters[0].toFixed(1);\n d.frozenColumnsWidth = getFrozenColumnsWidth();\n d.htmlImages = Object.keys(self.htmlImageCache).length;\n d.reorderObject =\n 'x: ' +\n (self.reorderObject || { columnIndex: 0 }).columnIndex +\n ', y: ' +\n (self.reorderObject || { rowIndex: 0 }).rowIndex;\n d.reorderTarget =\n 'x: ' +\n (self.reorderTarget || { columnIndex: 0 }).columnIndex +\n ', y: ' +\n (self.reorderTarget || { rowIndex: 0 }).rowIndex;\n d.scale = self.scale;\n d.startScale = self.startScale;\n d.scaleDelta = self.scaleDelta;\n d.zoomDeltaStart = self.zoomDeltaStart;\n d.touchLength = self.touchLength;\n d.touches =\n 'y0: ' +\n (self.touchPosition || { y: 0 }).y +\n ' y1: ' +\n (self.touchPosition1 || { y: 0 }).y;\n d.scrollBox = self.scrollBox.toString();\n d.scrollIndex =\n 'x: ' + self.scrollIndexLeft + ', y: ' + self.scrollIndexTop;\n d.scrollPixel =\n 'x: ' + self.scrollPixelLeft + ', y: ' + self.scrollPixelTop;\n d.canvasOffset =\n 'x: ' + self.canvasOffsetLeft + ', y: ' + self.canvasOffsetTop;\n d.touchDelta = 'x: ' + self.touchDelta.x + ', y: ' + self.touchDelta.y;\n d.touchAnimateTo =\n 'x: ' + self.touchAnimateTo.x + ', y: ' + self.touchAnimateTo.y;\n d.scrollAnimation =\n 'x: ' + self.scrollAnimation.x + ', y: ' + self.scrollAnimation.y;\n d.touchPPS = 'x: ' + self.xPPS + ', y: ' + self.yPPS;\n d.touchPPST = 'x: ' + self.xPPST + ', y: ' + self.yPPST;\n d.touchDuration = self.touchDuration;\n d.pointerLockPosition = self.pointerLockPosition\n ? self.pointerLockPosition.x + ', ' + self.pointerLockPosition.y\n : '';\n d.size = 'w: ' + self.width + ', h: ' + self.height;\n d.mouse = 'x: ' + self.mouse.x + ', y: ' + self.mouse.y;\n d.touch = !self.touchStart\n ? ''\n : 'x: ' + self.touchStart.x + ', y: ' + self.touchStart.y;\n d.entities = self.visibleCells.length;\n d.hasFocus = self.hasFocus;\n d.dragMode = self.dragMode;\n if (self.currentCell) {\n d.columnIndex = self.currentCell.columnIndex;\n d.rowIndex = self.currentCell.rowIndex;\n d.sortColumnIndex = self.currentCell.sortColumnIndex;\n d.sortRowIndex = self.currentCell.sortRowIndex;\n d.context = self.currentCell.context;\n d.dragContext = self.currentCell.dragContext;\n d.style = self.currentCell.style;\n d.type = self.currentCell.type;\n }\n self.ctx.textAlign = 'right';\n self.ctx.fillStyle = self.style.debugBackgroundColor;\n fillRect(0, 0, self.width, self.height);\n Object.keys(d).forEach(function (key, index) {\n var m = key + ': ' + d[key],\n lh = 14;\n self.ctx.fillStyle = self.style.debugColor;\n fillText(\n m,\n w - 20,\n (self.attributes.showPerformance ? 140 : 24) + index * lh,\n );\n });\n self.ctx.restore();\n }\n self.ctx.save();\n initDraw();\n drawBackground();\n initGroupArea();\n drawFrozenRows();\n drawRows();\n drawActiveCell();\n drawHeaders();\n drawFrozenMarkers();\n drawSelectionHandles();\n drawReorderMarkers();\n drawMoveMarkers();\n drawResizeMarkers();\n drawBorder();\n drawSelectionBorders();\n drawScrollBars();\n if (checkScrollHeight) {\n self.resize(true);\n }\n drawGroupArea();\n drawDebug();\n drawPerfLines();\n if (self.dispatchEvent('afterdraw', {})) {\n return;\n }\n self.ctx.restore();\n };\n}\n","/*jslint browser: true, unparam: true, todo: true, plusplus: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport isPrintableKeyEvent from 'is-printable-key-event';\nimport { isSupportedHtml, parseData, deduceColTypeFromData } from './util';\n\nexport default function (self) {\n var wheeling;\n self.stopPropagation = function (e) {\n e.stopPropagation();\n };\n /**\n * Adds an event listener to the given event.\n * @memberof canvasDatagrid\n * @name addEventListener\n * @method\n * @param {string} ev The name of the event to subscribe to.\n * @param {function} fn The event procedure to execute when the event is raised.\n */\n self.addEventListener = function (ev, fn) {\n self.events[ev] = self.events[ev] || [];\n self.events[ev].unshift(fn);\n };\n /**\n * Removes the given listener function from the given event. Must be an actual reference to the function that was bound.\n * @memberof canvasDatagrid\n * @name removeEventListener\n * @method\n * @param {string} ev The name of the event to unsubscribe from.\n * @param {function} fn The event procedure to execute when the event is raised.\n */\n self.removeEventListener = function (ev, fn) {\n (self.events[ev] || []).forEach(function removeEachListener(sfn, idx) {\n if (fn === sfn) {\n self.events[ev].splice(idx, 1);\n }\n });\n };\n /**\n * Fires the given event, passing an event object to the event subscribers.\n * @memberof canvasDatagrid\n * @name dispatchEvent\n * @method\n * @param {number} ev The name of the event to dispatch.\n * @param {number} e The event object.\n */\n self.dispatchEvent = function (ev, e) {\n e = ev.type ? ev : e || {};\n ev = ev.type || ev;\n var defaultPrevented;\n function preventDefault() {\n defaultPrevented = true;\n }\n if (!self.events[ev]) {\n return;\n }\n self.events[ev].forEach(function dispatchEachEvent(fn) {\n e.ctx = self.ctx;\n e.preventDefault = preventDefault;\n fn.apply(self.intf, [e]);\n });\n return defaultPrevented;\n };\n self.getRatio = function () {\n return Math.min(\n self.attributes.maxPixelRatio,\n (window.devicePixelRatio || 1) /\n (self.ctx.webkitBackingStorePixelRatio ||\n self.ctx.mozBackingStorePixelRatio ||\n self.ctx.msBackingStorePixelRatio ||\n self.ctx.oBackingStorePixelRatio ||\n self.ctx.backingStorePixelRatio ||\n 1),\n );\n };\n /**\n * @returns {number} dataWidth\n */\n self.refreshScrollCacheX = function () {\n const s = self.getSchema();\n self.scrollCache.x = [];\n\n /** @type {number} it will be used in `reduceSchema` only */\n let frozenWidth = 0;\n\n const collapsedColumnGroups = self.getCollapsedColumnGroups();\n const isColumnCollapsed = (columnIndex) =>\n collapsedColumnGroups.findIndex(\n (group) => columnIndex >= group.from && columnIndex <= group.to,\n ) >= 0;\n\n const dataWidth =\n s.reduce(function reduceSchema(accumulator, column, columnIndex) {\n // intentional redefintion of column. This causes scrollCache to be in the correct order\n const schemaIndex = self.orders.columns[columnIndex];\n const columnWidth = self.getColumnWidth(schemaIndex);\n column = s[schemaIndex];\n if (!column.hidden && !isColumnCollapsed(columnIndex))\n accumulator += columnWidth;\n if (columnIndex < self.frozenColumn) {\n self.scrollCache.x[columnIndex] = accumulator;\n frozenWidth = accumulator;\n } else {\n self.scrollCache.x[columnIndex] = Math.max(\n frozenWidth + columnWidth,\n accumulator,\n );\n }\n return accumulator;\n }, 0) || 0;\n return dataWidth;\n };\n self.resize = function (drawAfterResize) {\n if (!self.canvas) {\n return;\n }\n var x,\n v = {\n x: 0,\n y: 0,\n height: 0,\n width: 0,\n style: 'vertical-scroll-bar',\n },\n n = {\n x: 0,\n y: 0,\n height: 0,\n width: 0,\n style: 'horizontal-scroll-bar',\n },\n vb = {\n x: 0,\n y: 0,\n height: 0,\n width: 0,\n style: 'vertical-scroll-box',\n },\n nb = {\n x: 0,\n y: 0,\n height: 0,\n width: 0,\n style: 'horizontal-scroll-box',\n },\n co = {\n x: 0,\n y: 0,\n height: 0,\n width: 0,\n isCorner: true,\n isScrollBoxCorner: true,\n style: 'scroll-box-corner',\n },\n m = self.style.scrollBarBoxMargin * 2,\n b = self.style.scrollBarBorderWidth * 2,\n d = self.style.scrollBarBoxMargin * 0.5,\n sbw = self.style.scrollBarWidth + self.style.scrollBarBorderWidth * 2,\n ratio = self.getRatio(),\n bm = self.style.gridBorderCollapse === 'collapse' ? 1 : 2,\n cellBorder = self.style.cellBorderWidth * bm,\n columnHeaderCellBorder = self.style.columnHeaderCellBorderWidth * bm,\n dataHeight = 0,\n dataWidth = 0,\n dims,\n l = (self.viewData || []).length,\n columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n rowHeaderCellWidth = self.getRowHeaderCellWidth(),\n topGroupAreaHeight = self.getColumnGroupAreaHeight(),\n leftGroupAreaWidth = self.getRowGroupAreaWidth(),\n ch = self.style.cellHeight;\n // sets actual DOM canvas element\n function checkScrollBoxVisibility() {\n var capped = self.autoSizeCapped || {};\n self.scrollBox.horizontalBarVisible =\n ((self.style.width !== 'auto' || capped.width) &&\n dataWidth > self.scrollBox.width &&\n self.style.overflowX !== 'hidden') ||\n self.style.overflowX === 'scroll';\n self.scrollBox.horizontalBoxVisible = dataWidth > self.scrollBox.width;\n self.scrollBox.verticalBarVisible =\n ((self.style.height !== 'auto' || capped.height) &&\n dataHeight > self.scrollBox.height &&\n self.style.overflowY !== 'hidden') ||\n self.style.overflowY === 'scroll';\n self.scrollBox.verticalBoxVisible = dataHeight > self.scrollBox.height;\n }\n function setScrollBoxSize() {\n self.scrollBox.width =\n self.width - rowHeaderCellWidth - leftGroupAreaWidth;\n self.scrollBox.height =\n self.height - columnHeaderCellHeight - topGroupAreaHeight;\n }\n function setCanvasSize() {\n if (self.isChildGrid) {\n return;\n }\n dims = {\n // HACK +1 ? maybe it's a magic cell border? Required to line up properly in auto height mode.\n height:\n columnHeaderCellHeight +\n topGroupAreaHeight +\n dataHeight +\n cellBorder +\n 1,\n width: dataWidth + rowHeaderCellWidth + cellBorder + leftGroupAreaWidth,\n };\n // Browsers refuse to paint canvases beyond roughly 16k px per side, so\n // an auto-sized grid with enough rows went blank past that point\n // (#254). Cap the element and let it scroll for the remainder.\n var maxCanvasSize = self.attributes.maxCanvasSize;\n self.autoSizeCapped = { width: false, height: false };\n ['width', 'height'].forEach(function (dim) {\n if (dims[dim] > maxCanvasSize) {\n dims[dim] = maxCanvasSize;\n self.autoSizeCapped[dim] = true;\n }\n });\n ['width', 'height'].forEach(function (dim) {\n //TODO: support inherit\n if (\n ['auto', undefined].indexOf(self.style[dim]) !== -1 &&\n ['auto', undefined].indexOf(self.appliedInlineStyles[dim]) !== -1\n ) {\n self.parentNodeStyle[dim] = dims[dim] + 'px';\n } else if (\n ['auto', undefined].indexOf(self.style[dim]) == -1 &&\n ['auto', undefined].indexOf(self.appliedInlineStyles[dim]) == -1\n ) {\n self.parentNodeStyle[dim] = self.style[dim];\n if (self.isComponent) {\n self.canvas.style[dim] = self.style[dim];\n }\n }\n });\n }\n self.autoLastColumnWidth = undefined;\n dataWidth = self.refreshScrollCacheX();\n self.scrollCache.y = [];\n for (x = 0; x < l; x += 1) {\n self.scrollCache.y[x] = dataHeight;\n dataHeight +=\n ((self.sizes.rows[x] || ch) + (self.sizes.trees[x] || 0)) * self.scale +\n // HACK? if an expanded tree row is frozen it is necessary to add the tree row's height a second time.\n (self.frozenRow > x ? self.sizes.trees[x] || 0 : 0);\n }\n if (l > 1) {\n self.scrollCache.y[x] = dataHeight;\n }\n if (self.attributes.showNewRow) {\n dataHeight += ch;\n }\n if (self.attributes.snapToRow) {\n dataHeight += self.style.cellHeight;\n }\n setCanvasSize();\n if (self.isChildGrid) {\n self.width = self.parentNode.offsetWidth;\n self.height = self.parentNode.offsetHeight;\n } else if (\n self.height !== self.canvas.offsetHeight ||\n self.width !== self.canvas.offsetWidth\n ) {\n self.height = self.canvas.offsetHeight;\n self.width = self.canvas.offsetWidth;\n self.canvasOffsetLeft = self.args.canvasOffsetLeft || 0;\n self.canvasOffsetTop = self.args.canvasOffsetTop || 0;\n }\n /// calculate scroll bar dimensions\n // non-controversial\n self.scrollBox.top =\n columnHeaderCellHeight + topGroupAreaHeight + columnHeaderCellBorder;\n self.scrollBox.left = rowHeaderCellWidth + leftGroupAreaWidth;\n // width and height of scroll box\n setScrollBoxSize();\n // is the data larger than the scroll box\n checkScrollBoxVisibility();\n // if the scroll box is visible, make room for it by expanding the size of the element\n // if the other dimension is set to auto\n if (self.scrollBox.horizontalBarVisible) {\n if (self.style.height === 'auto' && !self.isChildGrid) {\n self.height += sbw;\n }\n dataHeight += sbw;\n setCanvasSize();\n setScrollBoxSize();\n checkScrollBoxVisibility();\n }\n if (self.scrollBox.verticalBarVisible) {\n if (self.style.width === 'auto' && !self.isChildGrid) {\n self.width += sbw;\n }\n dataWidth += sbw;\n setCanvasSize();\n setScrollBoxSize();\n checkScrollBoxVisibility();\n }\n // set again after bar visibility checks\n setScrollBoxSize();\n if (self.attributes.fillLastColumn) {\n const lastColumnIndex = self.getLastVisibleColumnIndex();\n const availableWidth =\n self.scrollBox.width -\n (self.scrollBox.verticalBarVisible ? sbw : 0) -\n cellBorder;\n if (lastColumnIndex >= 0 && dataWidth < availableWidth) {\n self.autoLastColumnWidth = {\n index: lastColumnIndex,\n width:\n self.getColumnWidth(lastColumnIndex) + availableWidth - dataWidth,\n };\n dataWidth = self.refreshScrollCacheX();\n checkScrollBoxVisibility();\n }\n }\n self.scrollBox.scrollWidth = dataWidth - self.scrollBox.width;\n self.scrollBox.scrollHeight = dataHeight - self.scrollBox.height;\n if (self.frozenColumn > 0) {\n self.scrollBox.widthBoxRatio =\n (self.scrollBox.width - self.scrollCache.x[self.frozenColumn - 1]) /\n dataWidth;\n } else {\n self.scrollBox.widthBoxRatio = self.scrollBox.width / dataWidth;\n }\n self.scrollBox.scrollBoxWidth =\n self.scrollBox.width * self.scrollBox.widthBoxRatio -\n self.style.scrollBarWidth -\n b -\n d;\n // TODO: This heightBoxRatio number is terribly wrong.\n // They should be a result of the size of the grid/canvas?\n // it being off causes the scroll bar to \"slide\" under\n // the dragged mouse.\n // https://github.com/TonyGermaneri/canvas-datagrid/issues/97\n self.scrollBox.heightBoxRatio =\n (self.scrollBox.height -\n columnHeaderCellHeight -\n topGroupAreaHeight -\n self.scrollCache.y[self.frozenRow]) /\n dataHeight;\n self.scrollBox.scrollBoxHeight =\n self.scrollBox.height * self.scrollBox.heightBoxRatio -\n self.style.scrollBarWidth -\n b -\n d;\n self.scrollBox.scrollBoxWidth = Math.max(\n self.scrollBox.scrollBoxWidth,\n self.style.scrollBarBoxMinSize,\n );\n self.scrollBox.scrollBoxHeight = Math.max(\n self.scrollBox.scrollBoxHeight,\n self.style.scrollBarBoxMinSize,\n );\n // horizontal\n n.x += rowHeaderCellWidth;\n n.y += self.height - self.style.scrollBarWidth - d - topGroupAreaHeight;\n n.width =\n self.width -\n self.style.scrollBarWidth -\n rowHeaderCellWidth -\n leftGroupAreaWidth -\n d -\n m;\n n.height = self.style.scrollBarWidth + self.style.scrollBarBorderWidth + d;\n // horizontal box\n nb.y = n.y + self.style.scrollBarBoxMargin;\n nb.width = self.scrollBox.scrollBoxWidth;\n nb.height = self.style.scrollBarBoxWidth;\n // vertical\n v.x +=\n self.width -\n leftGroupAreaWidth -\n self.style.scrollBarWidth -\n self.style.scrollBarBorderWidth -\n d;\n v.y += columnHeaderCellHeight + self.scrollCache.y[self.frozenRow];\n v.width = self.style.scrollBarWidth + self.style.scrollBarBorderWidth + d;\n v.height =\n self.height -\n columnHeaderCellHeight -\n topGroupAreaHeight -\n self.style.scrollBarWidth -\n d -\n m;\n // vertical box\n vb.x = v.x + self.style.scrollBarBoxMargin;\n vb.y += self.scrollCache.y[self.frozenRow];\n vb.width = self.style.scrollBarBoxWidth;\n vb.height = self.scrollBox.scrollBoxHeight;\n // corner\n co.x = n.x + n.width + m;\n co.y = v.y + v.height + m;\n co.width = self.style.scrollBarWidth + self.style.scrollBarBorderWidth;\n co.height = self.style.scrollBarWidth + self.style.scrollBarBorderWidth;\n self.scrollBox.entities = {\n horizontalBar: n,\n horizontalBox: nb,\n verticalBar: v,\n verticalBox: vb,\n corner: co,\n };\n self.scrollBox.bar = {\n v: v,\n h: n,\n };\n self.scrollBox.box = {\n v: vb,\n h: nb,\n };\n /// calculate page and dom elements\n self.page = Math.max(\n 1,\n self.visibleRows.length - 3 - self.attributes.pageUpDownOverlap,\n );\n // set canvas drawing related items\n if (!self.isChildGrid) {\n const newWidth = self.width * ratio;\n const newHeight = self.height * ratio;\n // We need to check is settings size to canvas necessary,\n // because settings the canvas'size will cause the canvas and its state be cleared\n // even if the size is the same.\n // Notes: Please don't call `self.resize()` without a subsequent call to `self.draw()`\n if (self.canvas.width !== newWidth || self.canvas.height !== newHeight) {\n self.canvas.width = newWidth;\n self.canvas.height = newHeight;\n self.ctx.scale(ratio, ratio);\n }\n }\n // resize any open dom elements (input/textarea)\n self.resizeEditInput();\n self.scroll(true);\n if (drawAfterResize) {\n self.draw(true);\n }\n self.dispatchEvent('resize', {});\n return true;\n };\n self.scroll = function (dontDraw) {\n var s = self.getSchema(),\n l = (self.viewData || []).length,\n ch = self.style.cellHeight;\n // go too far in leaps, then get focused\n self.scrollIndexTop = Math.floor(\n l * (self.scrollBox.scrollTop / self.scrollBox.scrollHeight) - 100,\n );\n self.scrollIndexTop = Math.max(self.scrollIndexTop, 0);\n self.scrollPixelTop = self.scrollCache.y[self.scrollIndexTop];\n // sometimes the grid is rendered but the height is zero\n if (self.scrollBox.scrollHeight === 0) {\n self.scrollIndexTop = 0;\n }\n self.scrollPixelTop = 0;\n self.scrollIndexLeft = self.frozenColumn;\n self.scrollPixelLeft = 0;\n while (\n self.scrollPixelTop < self.scrollBox.scrollTop &&\n self.scrollIndexTop < self.viewData.length\n ) {\n // start on index +1 since index 0 was used in \"go too far\" section above\n self.scrollIndexTop += 1;\n self.scrollPixelTop = self.scrollCache.y[self.scrollIndexTop];\n }\n while (\n self.scrollPixelLeft < self.scrollBox.scrollLeft + 1 &&\n self.scrollIndexLeft < s.length\n ) {\n self.scrollPixelLeft = self.scrollCache.x[self.scrollIndexLeft];\n self.scrollIndexLeft += 1;\n }\n if (s.length > 0) {\n self.scrollIndexLeft = Math.max(self.scrollIndexLeft - 1, 0);\n self.scrollPixelLeft -= self.getColumnWidth(\n self.orders.columns[self.scrollIndexLeft],\n );\n }\n if ((self.viewData || []).length > 0) {\n self.scrollIndexTop = Math.max(self.scrollIndexTop - 1, 0);\n self.scrollPixelTop = Math.max(\n self.scrollPixelTop -\n (self.viewData[self.scrollIndexTop]\n ? (self.sizes.rows[self.scrollIndexTop] || ch) +\n (self.sizes.trees[self.scrollIndexTop] || 0)\n : ch) *\n self.scale,\n 0,\n );\n }\n self.ellipsisCache = {};\n if (!dontDraw) {\n self.draw(true);\n }\n //TODO: figure out why this has to be delayed for child grids\n //BUG: wheeling event on 3rd level hierarchy fails to move input box\n requestAnimationFrame(self.resizeEditInput);\n self.dispatchEvent('scroll', {\n top: self.scrollBox.scrollTop,\n left: self.scrollBox.scrollLeft,\n });\n };\n self.mousemove = function (e, overridePos) {\n if (self.contextMenu || self.input) {\n return;\n }\n\n // Cancel dragging action if user ventures outside grid\n if (self.draggingItem && e.which === 0) {\n self.stopFreezeMove(e);\n self.mouseup(e);\n return;\n }\n\n self.mouse = overridePos || self.getLayerPos(e);\n var ctrl =\n (e.ctrlKey || e.metaKey || self.attributes.persistantSelectionMode) &&\n !self.attributes.singleSelectionMode,\n i,\n s = self.getSchema(),\n dragBounds,\n sBounds,\n x = self.mouse.x,\n y = self.mouse.y,\n cell = self.getCellAt(x, y),\n delta,\n disallowVerticalAutoScroll = false,\n disallowHorizontalAutoScroll = false,\n ev = { NativeEvent: e, cell: cell, x: x, y: y },\n previousCell = self.currentCell;\n clearTimeout(self.scrollTimer);\n if (!self.isInGrid({ x: x, y: y })) {\n self.hasFocus = false;\n }\n if (self.dispatchEvent('mousemove', ev)) {\n return;\n }\n if (cell && self.currentCell) {\n self.rowBoundaryCrossed = self.currentCell.rowIndex !== cell.rowIndex;\n self.columnBoundaryCrossed =\n self.currentCell.columnIndex !== cell.columnIndex;\n self.cellBoundaryCrossed =\n self.rowBoundaryCrossed || self.columnBoundaryCrossed;\n ['row', 'column', 'cell'].forEach(function (prefix) {\n if (self[prefix + 'BoundaryCrossed']) {\n ev.cell = previousCell;\n self.dispatchEvent(prefix + 'mouseout', ev);\n ev.cell = cell;\n self.dispatchEvent(prefix + 'mouseover', ev);\n }\n });\n }\n self.currentCell = cell;\n\n if (\n !self.draggingItem && // It is not in dragging mode (avoid changing hovers frequent)\n cell &&\n (cell.context === 'cell' || cell.context === self.cursorGrab)\n ) {\n const indicator = self.getUnhideIndicator(self.mouse.x, self.mouse.y);\n if (indicator) {\n self.cursor = 'pointer';\n self.hovers = { unhideIndicator: indicator };\n self.draw();\n return;\n }\n }\n\n self.hovers = {};\n if (!self.draggingItem && cell) {\n self.dragItem = cell;\n self.dragMode = cell.dragContext;\n self.cursor = cell.context;\n if (cell.context === 'cell') {\n self.cursor = 'default';\n self.hovers = {\n rowIndex: cell.rowIndex,\n columnIndex: cell.columnIndex,\n onFilterButton: false,\n onCellTreeIcon: false,\n };\n if (\n cell.isFilterable &&\n x >\n cell.x +\n cell.width +\n self.canvasOffsetLeft -\n self.style.filterButtonWidth &&\n x < cell.x + cell.width + self.canvasOffsetLeft &&\n y >\n cell.y +\n cell.height +\n self.canvasOffsetTop -\n self.style.filterButtonHeight &&\n y < cell.y + cell.height + self.canvasOffsetTop\n ) {\n self.hovers.onFilterButton = true;\n self.draw();\n }\n if (cell.isRowTree || cell.isColumnTree) {\n const pc = cell.isRowTree\n ? self.cellTree.rows[cell.rowIndex].parentCount\n : 0;\n const rc = self.style.cellTreeIconWidth * self.scale,\n rx =\n cell.x +\n cell.paddingLeft +\n self.canvasOffsetLeft +\n self.style.cellTreeIconMarginLeft +\n pc * (rc + cell.paddingLeft),\n ry =\n cell.y +\n self.canvasOffsetTop +\n self.style.cellTreeIconMarginTop * self.scale;\n if (x >= rx && x <= rx + rc && y >= ry && y < ry + rc) {\n self.hovers.onCellTreeIcon = true;\n self.draw();\n }\n }\n }\n if (self.selecting || self.reorderObject) {\n delta = {\n x: Math.abs(self.dragStart.x - x),\n y: Math.abs(self.dragStart.y - y),\n };\n if (\n self.dragStartObject.columnIndex !== -1 &&\n e.shiftKey &&\n !self.attributes.singleSelectionMode\n ) {\n self.dragStartObject = {\n rowIndex: self.activeCell.rowIndex,\n columnIndex: self.activeCell.columnIndex,\n };\n }\n dragBounds = {\n top: Math.min(self.dragStartObject.rowIndex, cell.rowIndex),\n left: Math.min(self.dragStartObject.columnIndex, cell.columnIndex),\n bottom: Math.max(self.dragStartObject.rowIndex, cell.rowIndex),\n right: Math.max(self.dragStartObject.columnIndex, cell.columnIndex),\n };\n if (self.dragStartObject.columnIndex === -1) {\n sBounds = self.getSelectionBounds();\n dragBounds.left = -1;\n dragBounds.right = s.length - 1;\n dragBounds.top = Math.min(sBounds.top, cell.rowIndex);\n dragBounds.bottom = Math.max(sBounds.bottom, cell.rowIndex);\n if (dragBounds.top < 0) dragBounds.top = 0;\n }\n\n if (self.dragStartObject.rowIndex === -1) {\n sBounds = self.getSelectionBounds();\n dragBounds.left =\n cell.columnIndex === undefined\n ? sBounds.left\n : Math.min(sBounds.left, cell.columnIndex);\n dragBounds.right =\n cell.columnIndex === undefined\n ? sBounds.right\n : Math.max(sBounds.right, cell.columnIndex);\n dragBounds.top = -1;\n dragBounds.bottom = self.viewData.length - 1;\n if (dragBounds.left < 0) dragBounds.left = 0;\n if (dragBounds.left != dragBounds.right)\n self.isMultiColumnsSelected = true;\n else self.isMultiRowsSelected = false;\n }\n\n if (\n self.dragStartObject.rowIndex !== cell.rowIndex ||\n self.dragStartObject.columnIndex !== cell.columnIndex\n ) {\n self.ignoreNextClick = true;\n }\n if (\n self.cellBoundaryCrossed ||\n (delta.x === 0 && delta.y === 0) ||\n self.attributes.selectionMode === 'row'\n ) {\n if (\n cell.rowIndex !== undefined &&\n (self.attributes.selectionMode === 'row' ||\n self.dragStartObject.columnIndex === -1) &&\n self.rowBoundaryCrossed\n ) {\n if (self.dragStartObject.rowIndex < cell.rowIndex) {\n dragBounds.top = self.dragStartObject.rowIndex;\n dragBounds.bottom = cell.rowIndex;\n } else {\n dragBounds.top = cell.rowIndex;\n dragBounds.bottom = self.dragStartObject.rowIndex;\n }\n } else if (\n cell.rowIndex !== undefined &&\n (self.attributes.selectionMode === 'column' ||\n self.dragStartObject.rowIndex === -1) &&\n self.columnBoundaryCrossed\n ) {\n if (self.dragStartObject.columnIndex < cell.columnIndex) {\n dragBounds.left = self.dragStartObject.columnIndex;\n dragBounds.right = cell.columnIndex;\n } else {\n dragBounds.left = cell.columnIndex;\n dragBounds.right = self.dragStartObject.columnIndex;\n }\n } else if (self.attributes.selectionMode !== 'row') {\n if (cell.hovered && self.hovers.onFilterButton) {\n if (cell.openedFilter) {\n cell.openedFilter = false;\n self.selectedFilterButton = {\n columnIndex: -1,\n rowIndex: -1,\n };\n } else {\n self.selectedFilterButton.rowIndex = cell.rowIndex;\n self.selectedFilterButton.columnIndex = cell.columnIndex;\n self.contextmenuEvent(e, {\n x: cell.x + cell.width - self.style.filterButtonWidth,\n y: cell.y + cell.height,\n rect: { left: 0, top: 0 },\n });\n }\n self.draw();\n return;\n } else if (\n cell.hovered &&\n self.hovers.onCellTreeIcon &&\n e.type == 'mousedown'\n ) {\n self.toggleCollapseTree(cell.rowIndex, cell.columnIndex);\n return;\n } else {\n self.selectedFilterButton = {\n columnIndex: -1,\n rowIndex: -1,\n };\n if (self.hovers.onFilterButton) return;\n if (self.hovers.onCellTreeIcon) return;\n if (!self.dragAddToSelection && cell.rowIndex !== undefined) {\n if (self.isCellSelected(cell)) self.unselectCell(cell);\n } else {\n if (!self.isCellSelected(cell)) self.selectCell(cell);\n }\n }\n }\n }\n if (self.attributes.singleSelectionMode) {\n // only one row (row mode) or one cell may be selected at a time, so\n // a drag follows the pointer instead of growing a range (#472)\n if (\n self.dragStartObject.rowIndex !== -1 &&\n cell.rowIndex !== undefined &&\n cell.rowIndex > -1\n ) {\n dragBounds.top = cell.rowIndex;\n dragBounds.bottom = cell.rowIndex;\n }\n if (\n self.attributes.selectionMode !== 'row' &&\n self.dragStartObject.columnIndex !== -1 &&\n cell.columnIndex !== undefined &&\n cell.columnIndex > -1\n ) {\n dragBounds.left = cell.columnIndex;\n dragBounds.right = cell.columnIndex;\n }\n }\n if (\n (!self.selectionBounds ||\n dragBounds.top !== self.selectionBounds.top ||\n dragBounds.left !== self.selectionBounds.left ||\n dragBounds.bottom !== self.selectionBounds.bottom ||\n dragBounds.right !== self.selectionBounds.right) &&\n !ctrl\n ) {\n if (!(cell.hovered && self.hovers.onFilterButton))\n self.clearSelections();\n if (dragBounds.top === -1) {\n dragBounds.top = 0;\n }\n sBounds = dragBounds;\n if (self.attributes.selectionMode === 'row') {\n for (i = sBounds.top; i <= sBounds.bottom; i += 1) {\n self.selectRow(i, true, null, true);\n }\n } else {\n self.selectArea(sBounds, true);\n self.activeCell.rowIndex = sBounds.top;\n self.activeCell.columnIndex = sBounds.left;\n if (sBounds.left == -1 && sBounds.top !== sBounds.bottom) {\n self.activeCell.columnIndex = 0;\n self.isMultiRowsSelected = true;\n self.isMultiColumnsSelected = false;\n }\n }\n }\n } else if (self.movingSelectionHandle) {\n delta = {\n x: Math.abs(self.dragStart.x - x),\n y: Math.abs(self.dragStart.y - y),\n };\n\n // Disallow auto-scroll to the direction that overlay is not\n // moving towards.\n if (self.fillOverlay.direction === 'y') {\n disallowHorizontalAutoScroll = true;\n } else if (self.fillOverlay.direction === 'x') {\n disallowVerticalAutoScroll = true;\n }\n }\n\n if (delta) {\n if (\n self.attributes.autoScrollOnMousemove ||\n disallowVerticalAutoScroll ||\n disallowHorizontalAutoScroll\n ) {\n var movedVertically =\n !disallowVerticalAutoScroll &&\n delta.y > self.attributes.autoScrollMargin;\n var movedHorizontally =\n !disallowHorizontalAutoScroll &&\n delta.x > self.attributes.autoScrollMargin;\n\n if (movedVertically && !movedHorizontally)\n self.autoScrollZone(e, -1, y, ctrl);\n else if (movedHorizontally && !movedVertically)\n self.autoScrollZone(e, x, -1, ctrl);\n else if (movedHorizontally && movedVertically)\n self.autoScrollZone(e, x, y, ctrl);\n } else {\n self.autoScrollZone(e, x, y, ctrl);\n }\n }\n }\n const columnGroup = self.getColumnGroupAt(self.mouse.x, self.mouse.y);\n if (columnGroup) self.cursor = 'pointer';\n\n const rowGroup = self.getRowGroupAt(self.mouse.x, self.mouse.y);\n if (rowGroup) self.cursor = 'pointer';\n\n self.cellBoundaryCrossed = false;\n self.rowBoundaryCrossed = false;\n self.columnBoundaryCrossed = false;\n self.draw(true);\n };\n self.click = function (e, overridePos) {\n var i,\n startingBounds = JSON.stringify(self.getSelectionBounds()),\n ctrl =\n (e.ctrlKey || e.metaKey || self.attributes.persistantSelectionMode) &&\n !self.attributes.singleSelectionMode,\n pos = overridePos || self.getLayerPos(e);\n self.currentCell = self.getCellAt(pos.x, pos.y);\n if (self.currentCell.grid !== undefined) {\n return;\n }\n function checkSelectionChange() {\n var ev,\n sb = self.getSelectionBounds();\n\n if (startingBounds === JSON.stringify(sb)) {\n return;\n }\n self.dispatchEvent('selectionchanged', self.getContextOfSelectionEvent());\n }\n if (self.input) {\n self.endEdit();\n }\n if (self.ignoreNextClick) {\n self.ignoreNextClick = false;\n return;\n }\n i = self.currentCell;\n if (\n self.dispatchEvent('click', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n\n const unhideIndicator = self.getUnhideIndicator(pos.x, pos.y);\n if (unhideIndicator) {\n const { dir, orderIndex0, orderIndex1 } = unhideIndicator;\n if (dir === 'l' || dir === 'r')\n self.unhideColumns(orderIndex0, orderIndex1);\n else self.unhideRows(orderIndex0, orderIndex1);\n return;\n }\n\n let group = self.getColumnGroupAt(pos.x, pos.y);\n if (!group) group = self.getRowGroupAt(pos.x, pos.y);\n if (group) {\n if (self.toggleGroup(group)) {\n self.setStorageData();\n self.refresh();\n return;\n }\n }\n\n if (!self.hasFocus) {\n return;\n }\n\n const leftOffset = self.getRowGroupAreaWidth();\n const topOffset = self.getColumnGroupAreaHeight();\n const xInGrid = pos.x - leftOffset;\n const yInGrid = pos.y - topOffset;\n if (\n ['rowHeaderCell', 'columnHeaderCell'].indexOf(self.currentCell.style) ===\n -1 &&\n !ctrl\n ) {\n if (!self.hovers.onFilterButton) {\n self.setActiveCell(i.columnIndex, i.rowIndex);\n }\n }\n if (\n self.currentCell.style === 'columnHeaderCell' &&\n self.attributes.columnHeaderClickBehavior === 'sort' &&\n // a header is also a reorder grab zone when column reordering is on;\n // a plain click (no drag, which sets ignoreNextClick) still sorts (#514)\n (self.currentCell.context === 'cell' ||\n self.currentCell.dragContext === 'column-reorder')\n ) {\n if (self.orderBy === i.header.name) {\n self.orderDirection = self.orderDirection === 'asc' ? 'desc' : 'asc';\n } else {\n self.orderDirection = 'asc';\n }\n self.order(i.header.name, self.orderDirection);\n checkSelectionChange();\n return;\n }\n if (self.currentCell.context === 'cell') {\n if (self.currentCell.style === 'cornerCell') {\n self.selectAll();\n self.draw();\n checkSelectionChange();\n return;\n }\n if (\n self.attributes.selectionMode === 'row' ||\n self.currentCell.style === 'rowHeaderCell'\n ) {\n if (\n self.currentCell.style === 'rowHeaderCell' &&\n self.attributes.tree &&\n xInGrid > 0 &&\n xInGrid - self.currentCell.x <\n self.style.treeArrowWidth +\n self.style.treeArrowMarginLeft +\n self.style.treeArrowMarginRight +\n self.style.treeArrowClickRadius &&\n yInGrid - self.currentCell.y <\n self.style.treeArrowHeight +\n self.style.treeArrowMarginTop +\n self.style.treeArrowClickRadius &&\n yInGrid > 0\n ) {\n self.toggleTree(i.rowIndex);\n return;\n }\n }\n if (e.shiftKey && !ctrl && !self.attributes.singleSelectionMode) {\n self.selectionBounds = self.getSelectionBounds();\n self.selectArea(undefined, false);\n }\n }\n checkSelectionChange();\n self.draw(true);\n };\n self.dragResizeColumn = function (e) {\n const resizingColumn = self.dragMode === 'ew-resize';\n var pos, x, y;\n pos = self.getLayerPos(e);\n x = self.resizingStartingWidth + pos.x - self.dragStart.x;\n y = self.resizingStartingHeight + pos.y - self.dragStart.y;\n if (x < self.style.minColumnWidth) {\n x = self.style.minColumnWidth;\n }\n if (y < self.style.minRowHeight) {\n y = self.style.minRowHeight;\n }\n const resizeEventDetails = {\n x: x,\n y: y,\n width: x,\n height: y,\n columnIndex: resizingColumn ? self.draggingItem.columnIndex : undefined,\n rowIndex: resizingColumn ? undefined : self.draggingItem.rowIndex,\n draggingItem: self.draggingItem,\n NativeEvent: e,\n };\n if (\n resizingColumn\n ? self.dispatchEvent('resizecolumn', resizeEventDetails)\n : self.dispatchResizeRow(resizeEventDetails)\n ) {\n return false;\n }\n if (self.attributes.resizeAfterDragged) {\n self.pendingDragResize = {\n item: self.draggingItem,\n width: x,\n height: y,\n x: e.clientX,\n y: e.clientY,\n };\n } else {\n self.dragResizeApply(self.draggingItem, x, y);\n }\n };\n self.dragResizeApply = function (draggingItem, width, height) {\n if (\n self.scrollBox.scrollLeft >\n self.scrollBox.scrollWidth - self.attributes.resizeScrollZone &&\n self.dragMode === 'ew-resize'\n ) {\n self.resize(true);\n }\n if (self.dragMode === 'ew-resize') {\n self.sizes.columns[\n draggingItem.header.style === 'rowHeaderCell'\n ? 'cornerCell'\n : draggingItem.sortColumnIndex\n ] = width;\n if (\n ['rowHeaderCell', 'cornerCell'].indexOf(draggingItem.header.style) !==\n -1\n ) {\n self.resize(true);\n }\n self.resizeChildGrids();\n return;\n } else if (self.dragMode === 'ns-resize') {\n if (draggingItem.rowOpen) {\n self.sizes.trees[draggingItem.rowIndex] = height;\n } else if (self.attributes.globalRowResize) {\n self.style.cellHeight = height;\n } else {\n self.sizes.rows[draggingItem.rowIndex] = height;\n }\n self.dispatchResizeRow({\n height: height,\n rowIndex: draggingItem.rowIndex,\n draggingItem: draggingItem,\n });\n self.resizeChildGrids();\n return;\n }\n self.ellipsisCache = {};\n };\n self.stopDragResize = function (event) {\n const pos = self.getLayerPos(event);\n\n if (self.attributes.resizeAfterDragged) {\n self.dragResizeApply(\n self.pendingDragResize.item,\n self.pendingDragResize.width,\n self.pendingDragResize.height,\n );\n self.pendingDragResize = undefined;\n }\n\n if (self.dragMode === 'ew-resize') {\n const hasMoved = !!(pos.x - self.dragStart.x);\n // Check that dragItem is selected or part of selection.\n const dragItemIsSelected = self.isColumnSelected(\n self.dragItem.columnIndex,\n );\n\n if (hasMoved && dragItemIsSelected) {\n const width = Math.max(\n self.resizingStartingWidth + pos.x - self.dragStart.x,\n self.style.minColumnWidth,\n );\n // If the column is selected, resize it to width plus any other selected columns.\n self.fitSelectedColumns(width);\n }\n } else if (self.dragMode === 'ns-resize') {\n // Do the above for rows.\n const hasMoved = !!(pos.y - self.dragStart.y);\n const dragItemIsSelected = self.isRowSelected(self.dragItem.rowIndex);\n\n if (hasMoved && dragItemIsSelected) {\n const height = Math.max(\n self.resizingStartingHeight + pos.y - self.dragStart.y,\n self.style.minRowHeight,\n );\n self.fitSelectedRows(height);\n }\n }\n\n self.resize();\n window.removeEventListener('mousemove', self.dragResizeColumn, false);\n window.removeEventListener('mouseup', self.stopDragResize, false);\n self.setStorageData();\n self.draw(true);\n self.ignoreNextClick = true;\n };\n self.scrollGrid = function (e) {\n var pos = self.getLayerPos(e);\n if (\n self.attributes.scrollPointerLock &&\n self.pointerLockPosition &&\n ['horizontal-scroll-box', 'vertical-scroll-box'].indexOf(\n self.scrollStartMode,\n ) !== -1\n ) {\n self.pointerLockPosition.x += e.movementX;\n self.pointerLockPosition.y += e.movementY;\n self.pointerLockPosition.x = Math.min(\n self.width - self.style.scrollBarWidth,\n Math.max(0, self.pointerLockPosition.x),\n );\n self.pointerLockPosition.y = Math.min(\n self.height - self.style.scrollBarWidth,\n Math.max(0, self.pointerLockPosition.y),\n );\n pos = self.pointerLockPosition;\n }\n self.scrollMode = self.getCellAt(pos.x, pos.y).context;\n if (\n self.scrollMode === 'horizontal-scroll-box' &&\n self.scrollStartMode !== 'horizontal-scroll-box'\n ) {\n self.scrollStartMode = 'horizontal-scroll-box';\n self.dragStart = pos;\n self.scrollStart.left = self.scrollBox.scrollLeft;\n clearTimeout(self.scrollTimer);\n return;\n }\n if (\n self.scrollMode === 'vertical-scroll-box' &&\n self.scrollStartMode !== 'vertical-scroll-box'\n ) {\n self.scrollStartMode = 'vertical-scroll-box';\n self.dragStart = pos;\n self.scrollStart.top = self.scrollBox.scrollTop;\n clearTimeout(self.scrollTimer);\n return;\n }\n if (\n self.scrollStartMode === 'vertical-scroll-box' &&\n self.scrollMode !== 'vertical-scroll-box'\n ) {\n self.scrollMode = 'vertical-scroll-box';\n }\n if (\n self.scrollStartMode === 'horizontal-scroll-box' &&\n self.scrollMode !== 'horizontal-scroll-box'\n ) {\n self.scrollMode = 'horizontal-scroll-box';\n }\n clearTimeout(self.scrollTimer);\n if (self.scrollModes.indexOf(self.scrollMode) === -1) {\n return;\n }\n if (self.scrollMode === 'vertical-scroll-box') {\n self.scrollBox.scrollTop =\n self.scrollStart.top +\n (pos.y - self.dragStart.y) / self.scrollBox.heightBoxRatio;\n } else if (self.scrollMode === 'vertical-scroll-top') {\n self.scrollBox.scrollTop -= self.page * self.style.cellHeight;\n self.scrollTimer = setTimeout(\n self.scrollGrid,\n self.attributes.scrollRepeatRate,\n e,\n );\n } else if (self.scrollMode === 'vertical-scroll-bottom') {\n self.scrollBox.scrollTop += self.page * self.style.cellHeight;\n self.scrollTimer = setTimeout(\n self.scrollGrid,\n self.attributes.scrollRepeatRate,\n e,\n );\n }\n if (self.scrollMode === 'horizontal-scroll-box') {\n self.scrollBox.scrollLeft =\n self.scrollStart.left +\n (pos.x - self.dragStart.x) / self.scrollBox.widthBoxRatio;\n } else if (self.scrollMode === 'horizontal-scroll-right') {\n self.scrollBox.scrollLeft += self.attributes.selectionScrollIncrement;\n self.scrollTimer = setTimeout(\n self.scrollGrid,\n self.attributes.scrollRepeatRate,\n e,\n );\n } else if (self.scrollMode === 'horizontal-scroll-left') {\n self.scrollBox.scrollLeft -= self.attributes.selectionScrollIncrement;\n self.scrollTimer = setTimeout(\n self.scrollGrid,\n self.attributes.scrollRepeatRate,\n e,\n );\n }\n };\n self.stopScrollGrid = function () {\n clearTimeout(self.scrollTimer);\n if (document.exitPointerLock) {\n document.exitPointerLock();\n }\n window.removeEventListener('mousemove', self.scrollGrid, false);\n };\n self.dragReorder = function (e) {\n var pos,\n x,\n y,\n columReorder = self.dragMode === 'column-reorder',\n rowReorder = self.dragMode === 'row-reorder';\n pos = self.getLayerPos(e);\n x = pos.x - self.dragStart.x;\n y = pos.y - self.dragStart.y;\n if (!self.attributes.allowColumnReordering && columReorder) {\n return;\n }\n if (!self.attributes.allowRowReordering && rowReorder) {\n return;\n }\n if ((e.ctrlKey || e.metaKey || e.shiftKey) && self.reorderObject) {\n if (self.dragMode === 'column-reorder' && !self.isMultiColumnsSelected) {\n self.selectColumn(self.draggingItem.header.index, false, false);\n }\n }\n if (\n self.dispatchEvent('reordering', {\n NativeEvent: e,\n source: self.dragStartObject,\n target: self.currentCell,\n dragMode: self.dragMode,\n })\n ) {\n return;\n }\n if (\n Math.abs(x) > self.attributes.reorderDeadZone ||\n Math.abs(y) > self.attributes.reorderDeadZone\n ) {\n self.reorderObject = self.draggingItem;\n if (self.isMultiRowsSelected)\n self.reorderObject = self.getVisibleCellByIndex(\n -1,\n self.activeCell.rowIndex,\n );\n if (self.isMultiColumnsSelected)\n self.reorderObject = self.getVisibleCellByIndex(\n self.activeCell.columnIndex,\n -1,\n );\n if (!self.reorderObject) return;\n self.reorderTarget = self.currentCell;\n self.reorderObject.dragOffset = {\n x: x,\n y: y,\n };\n self.autoScrollZone(\n e,\n columReorder ? pos.x : -1,\n rowReorder ? pos.y : -1,\n false,\n );\n }\n };\n self.stopDragReorder = function (e) {\n let originalIndex;\n let targetIndex;\n const orderLists = {\n 'row-reorder': self.orders.rows,\n 'column-reorder': self.orders.columns,\n };\n const indexName = {\n 'row-reorder': 'rowIndex',\n 'column-reorder': 'sortColumnIndex',\n }[self.dragMode];\n window.removeEventListener('mousemove', self.dragReorder, false);\n window.removeEventListener('mouseup', self.stopDragReorder, false);\n if (\n self.reorderObject &&\n self.reorderTarget &&\n ((self.dragMode === 'column-reorder' &&\n self.reorderTarget.sortColumnIndex > -1 &&\n self.reorderTarget.sortColumnIndex < self.getSchema().length) ||\n (self.dragMode === 'row-reorder' &&\n self.reorderTarget.rowIndex > -1 &&\n self.reorderTarget.rowIndex < self.viewData.length)) &&\n self.reorderObject[indexName] !== self.reorderTarget[indexName] &&\n !self.dispatchEvent('reorder', {\n NativeEvent: e,\n source: self.reorderObject,\n target: self.reorderTarget,\n dragMode: self.dragMode,\n })\n ) {\n self.ignoreNextClick = true;\n originalIndex = orderLists[self.dragMode].indexOf(\n self.reorderObject[indexName],\n );\n targetIndex = orderLists[self.dragMode].indexOf(\n self.reorderTarget[indexName],\n );\n if (self.dragMode === 'column-reorder') {\n /** Select column view indexes in the first row */\n const selectedIndexes = self.getRowSelectionStates(0);\n const sortColumnIndices = [];\n const selectedColumnIndices = [];\n if (selectedIndexes) {\n originalIndex = selectedIndexes[0];\n selectedIndexes.forEach(function (value) {\n sortColumnIndices.push(self.orders.columns[value]);\n });\n }\n const deleteCount = sortColumnIndices.length;\n if (\n targetIndex < originalIndex ||\n (targetIndex > originalIndex &&\n Math.abs(targetIndex - originalIndex) >= deleteCount)\n ) {\n orderLists[self.dragMode].splice(originalIndex, deleteCount);\n if (targetIndex > originalIndex)\n targetIndex = targetIndex - (deleteCount - 1);\n\n for (let i = 0; i < sortColumnIndices.length; i++) {\n if (i === 0) self.activeCell.columnIndex = targetIndex;\n selectedColumnIndices.push(targetIndex + i);\n orderLists[self.dragMode].splice(\n targetIndex + i,\n 0,\n sortColumnIndices[i],\n );\n }\n\n self.orders.columns = orderLists[self.dragMode];\n self.selectColumnViewIndexes(selectedColumnIndices);\n }\n } else {\n /** The original name of this variable is `odata` */\n const rowIndexes = self.getRowViewIndexesFromSelection();\n const originalData = rowIndexes.map(\n (rowIndex) => self.viewData[rowIndex],\n );\n if (\n targetIndex < originalIndex ||\n (targetIndex > originalIndex &&\n Math.abs(targetIndex - originalIndex) >= originalData.length)\n ) {\n self.viewData.splice(originalIndex, originalData.length);\n if (targetIndex > originalIndex)\n targetIndex = targetIndex - (originalData.length - 1);\n self.activeCell.rowIndex = targetIndex;\n for (let i = 0; i < originalData.length; i++)\n self.viewData.splice(targetIndex + i, 0, originalData[i]);\n self.moveSelection(0, targetIndex);\n }\n }\n self.resize();\n self.setStorageData();\n }\n self.reorderObject = undefined;\n self.reorderTarget = undefined;\n self.draw(true);\n };\n self.dragMove = function (e) {\n if (\n self.dispatchEvent('moving', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n var pos = self.getLayerPos(e);\n self.moveOffset = {\n x: self.currentCell.columnIndex - self.dragStartObject.columnIndex,\n y: self.currentCell.rowIndex - self.dragStartObject.rowIndex,\n };\n if (\n Math.abs(pos.x) > self.attributes.reorderDeadZone ||\n Math.abs(pos.y) > self.attributes.reorderDeadZone\n ) {\n setTimeout(function () {\n self.autoScrollZone(e, pos.x, pos.y, false);\n }, 1);\n }\n };\n self.stopDragMove = function (e) {\n window.removeEventListener('mousemove', self.dragMove, false);\n window.removeEventListener('mouseup', self.stopDragMove, false);\n var b = self.getSelectionBounds();\n if (\n self.dispatchEvent('endmove', { NativeEvent: e, cell: self.currentCell })\n ) {\n self.movingSelection = undefined;\n self.moveOffset = undefined;\n self.draw(true);\n return;\n }\n if (self.moveOffset) {\n self.moveTo(\n self.movingSelection,\n b.left + self.moveOffset.x,\n b.top + self.moveOffset.y,\n );\n self.moveSelection(self.moveOffset.x, self.moveOffset.y);\n }\n self.movingSelection = undefined;\n self.moveOffset = undefined;\n self.draw(true);\n };\n self.freezeMove = function (e) {\n if (\n self.dispatchEvent('freezemoving', {\n NativeEvent: e,\n cell: self.currentCell,\n })\n ) {\n return;\n }\n var pos = self.getLayerPos(e);\n\n self.ignoreNextClick = true;\n self.freezeMarkerPosition = pos;\n pos.x -= self.getRowGroupAreaWidth();\n pos.y -= self.getColumnGroupAreaHeight();\n if (\n Math.abs(pos.x) > self.attributes.reorderDeadZone ||\n Math.abs(pos.y) > self.attributes.reorderDeadZone\n ) {\n setTimeout(function () {\n self.autoScrollZone(e, pos.x, pos.y, false);\n }, 1);\n }\n };\n self.stopFreezeMove = function (e) {\n let pos = self.getLayerPos(e),\n bm = self.style.gridBorderCollapse === 'collapse' ? 1 : 2,\n columnHeaderCellBorder = self.style.columnHeaderCellBorderWidth * bm,\n columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n rowHeaderCellWidth = self.getRowHeaderCellWidth();\n pos.x -= self.getRowGroupAreaWidth();\n pos.y -= self.getColumnGroupAreaHeight();\n\n if (\n self.currentCell &&\n self.currentCell.rowIndex !== undefined &&\n self.dragMode === 'frozen-row-marker'\n ) {\n self.scrollBox.scrollTop = 0;\n self.frozenRow = self.currentCell.rowIndex + 1;\n self.scrollBox.bar.v.y =\n columnHeaderCellHeight +\n columnHeaderCellBorder +\n self.scrollCache.y[self.frozenRow];\n self.scrollBox.box.v.y =\n columnHeaderCellHeight +\n columnHeaderCellBorder +\n self.scrollCache.y[self.frozenRow];\n var dataHeight = self.scrollCache.y[self.scrollCache.y.length - 1];\n self.scrollBox.heightBoxRatio =\n (self.scrollBox.height -\n columnHeaderCellHeight -\n self.scrollCache.y[self.frozenRow]) /\n dataHeight;\n self.scrollBox.scrollBoxHeight =\n self.scrollBox.height * self.scrollBox.heightBoxRatio -\n self.style.scrollBarWidth;\n self.scrollBox.scrollBoxHeight = Math.max(\n self.scrollBox.scrollBoxHeight,\n self.style.scrollBarBoxMinSize,\n );\n self.scrollBox.box.v.height = self.scrollBox.scrollBoxHeight;\n }\n if (\n self.currentCell &&\n self.currentCell.columnIndex !== undefined &&\n self.dragMode === 'frozen-column-marker'\n ) {\n const dataWidth = self.refreshScrollCacheX();\n self.scrollBox.scrollLeft = 0;\n let x =\n self.currentCell.x -\n self.style.frozenMarkerWidth -\n self.style.frozenMarkerBorderWidth;\n if (pos.x > x + self.currentCell.width / 2)\n self.frozenColumn = self.currentCell.columnIndex + 1;\n else if (self.currentCell.columnIndex >= 0)\n self.frozenColumn = self.currentCell.columnIndex;\n self.scrollBox.bar.h.x =\n rowHeaderCellWidth + self.scrollCache.x[self.frozenColumn];\n self.scrollBox.widthBoxRatio =\n (self.scrollBox.width - self.scrollCache.x[self.frozenColumn]) /\n dataWidth;\n self.scrollBox.scrollBoxWidth =\n self.scrollBox.width * self.scrollBox.widthBoxRatio -\n self.style.scrollBarWidth;\n self.scrollBox.scrollBoxWidth = Math.max(\n self.scrollBox.scrollBoxWidth,\n self.style.scrollBarBoxMinSize,\n );\n self.scrollBox.box.h.width = self.scrollBox.scrollBoxWidth;\n }\n if (\n Math.abs(pos.x) > self.attributes.reorderDeadZone ||\n Math.abs(pos.y) > self.attributes.reorderDeadZone\n ) {\n setTimeout(function () {\n self.autoScrollZone(e, pos.x, pos.y, false);\n }, 1);\n }\n\n window.removeEventListener('mousemove', self.freezeMove, false);\n window.removeEventListener('mouseup', self.stopFreezeMove, false);\n self.freezeMarkerPosition = undefined;\n if (\n self.dispatchEvent('endfreezemove', {\n NativeEvent: e,\n cell: self.currentCell,\n })\n ) {\n self.frozenRow = self.startFreezeMove.x;\n self.frozenColumn = self.startFreezeMove.y;\n self.draw(true);\n return;\n }\n self.draw(true);\n self.resize();\n };\n self.mousedown = function (e, overridePos) {\n self.lastMouseDownTarget = e.target;\n if (\n self.dispatchEvent('mousedown', {\n NativeEvent: e,\n cell: self.currentCell,\n })\n ) {\n return;\n }\n if (!self.hasFocus) {\n return;\n }\n if (e.button === 2 || self.input) {\n return;\n }\n var ctrl = (e.ctrlKey || e.metaKey) && !self.attributes.singleSelectionMode,\n shift = e.shiftKey && !self.attributes.singleSelectionMode,\n move = /-move/.test(self.dragMode),\n freeze = /frozen-row-marker|frozen-column-marker/.test(self.dragMode),\n resize = /-resize/.test(self.dragMode),\n selectionHandleMove = /selection-handle-br/.test(self.dragMode);\n const onUnhideIndicator = self.hovers && self.hovers.unhideIndicator;\n self.dragStart = overridePos || self.getLayerPos(e);\n self.scrollStart = {\n left: self.scrollBox.scrollLeft,\n top: self.scrollBox.scrollTop,\n };\n self.dragStartObject = self.getCellAt(self.dragStart.x, self.dragStart.y);\n self.dragAddToSelection = !self.dragStartObject.selected;\n if (\n !ctrl &&\n !shift &&\n !/(vertical|horizontal)-scroll-(bar|box)/.test(\n self.dragStartObject.context,\n ) &&\n self.currentCell &&\n !self.currentCell.isColumnHeader &&\n !move &&\n !freeze &&\n !resize &&\n !selectionHandleMove\n ) {\n if (\n !(self.dragMode == 'row-reorder' && self.isMultiRowsSelected) &&\n !(self.currentCell.hovered && self.hovers.onFilterButton)\n ) {\n self.clearSelections();\n }\n }\n if (self.dragStartObject.isGrid) {\n return;\n }\n if (\n self.scrollModes.indexOf(self.dragStartObject.context) !== -1 &&\n !onUnhideIndicator\n ) {\n self.scrollMode = self.dragStartObject.context;\n self.scrollStartMode = self.dragStartObject.context;\n self.scrollGrid(e);\n if (\n self.attributes.scrollPointerLock &&\n ['horizontal-scroll-box', 'vertical-scroll-box'].indexOf(\n self.scrollStartMode,\n ) !== -1\n ) {\n self.pointerLockPosition = {\n x: self.dragStart.x,\n y: self.dragStart.y,\n };\n self.canvas.requestPointerLock();\n }\n window.addEventListener('mousemove', self.scrollGrid, false);\n window.addEventListener('mouseup', self.stopScrollGrid, false);\n self.ignoreNextClick = true;\n return;\n }\n if (self.dragMode === 'cell') {\n self.selecting = true;\n if (\n (self.attributes.selectionMode === 'row' ||\n self.dragStartObject.columnIndex === -1) &&\n self.dragStartObject.rowIndex > -1\n ) {\n self.selectRow(self.dragStartObject.rowIndex, ctrl, null);\n } else if (\n (self.attributes.selectionMode === 'column' ||\n self.dragStartObject.rowIndex === -1) &&\n self.dragStartObject.columnIndex > -1\n ) {\n if (self.attributes.allowColumnSelection) {\n self.selectColumn(self.currentCell.header.index, ctrl, shift);\n }\n return;\n }\n if (self.attributes.selectionMode !== 'row') {\n self.mousemove(e);\n }\n return;\n }\n if (selectionHandleMove && self.attributes.editable) {\n self.movingSelectionHandle = true;\n self.fillOverlay = {\n handle: {\n x: self.dragStartObject.x + self.dragStartObject.width / 2,\n y: self.dragStartObject.y + self.dragStartObject.height / 2,\n },\n snapTo: { x: -1, y: -1 },\n selection: self.getSelectionBounds(),\n };\n if (self.dispatchEvent('beginselectionhandlemove', { NativeEvent: e })) {\n return;\n }\n window.addEventListener('mousemove', self.selectionHandleMove, false);\n window.addEventListener('mouseup', self.stopSelectionHandleMove, false);\n return self.selectionHandleMove(e);\n }\n if (move) {\n self.draggingItem = self.dragItem;\n self.movingSelection = self.cloneSelections();\n self.dragging = self.dragStartObject;\n if (\n self.dispatchEvent('beginmove', {\n NativeEvent: e,\n cell: self.currentCell,\n })\n ) {\n return;\n }\n window.addEventListener('mousemove', self.dragMove, false);\n window.addEventListener('mouseup', self.stopDragMove, false);\n return self.mousemove(e);\n }\n if (freeze) {\n self.draggingItem = self.dragItem;\n self.startFreezeMove = {\n x: self.frozenRow,\n y: self.frozenColumn,\n };\n if (self.dispatchEvent('beginfreezemove', { NativeEvent: e })) {\n return;\n }\n\n self.freezeMarkerPosition = self.getLayerPos(e);\n self.freezeMarkerPosition.isGrab = true;\n\n window.addEventListener('mousemove', self.freezeMove, false);\n window.addEventListener('mouseup', self.stopFreezeMove, false);\n return self.mousemove(e);\n }\n if (resize && !onUnhideIndicator) {\n self.draggingItem = self.dragItem;\n if (self.draggingItem.rowOpen) {\n self.resizingStartingHeight =\n self.sizes.trees[self.draggingItem.rowIndex];\n } else {\n self.resizingStartingHeight =\n self.sizes.rows[self.draggingItem.rowIndex] || self.style.cellHeight;\n }\n self.resizingStartingWidth =\n self.sizes.columns[\n self.draggingItem.header.style === 'rowHeaderCell'\n ? 'cornerCell'\n : self.draggingItem.sortColumnIndex\n ] || self.draggingItem.width;\n window.addEventListener('mousemove', self.dragResizeColumn, false);\n window.addEventListener('mouseup', self.stopDragResize, false);\n return;\n }\n if (['row-reorder', 'column-reorder'].indexOf(self.dragMode) !== -1) {\n self.draggingItem = self.dragStartObject;\n if (\n self.dragMode === 'column-reorder' &&\n !self.isMultiColumnsSelected &&\n self.attributes.allowColumnSelection\n ) {\n self.selectColumn(self.currentCell.header.index, ctrl, shift);\n } else if (self.dragMode === 'row-reorder' && !self.isMultiRowsSelected) {\n self.selectRow(self.dragStartObject.rowIndex, ctrl, null);\n }\n window.addEventListener('mousemove', self.dragReorder, false);\n window.addEventListener('mouseup', self.stopDragReorder, false);\n return;\n }\n };\n /**\n * A mouseup anywhere ends a selection drag. Only the canvas receives the\n * full mouseup handler, so releasing the button outside the grid used to\n * leave it in \"selecting\" mode and the next mousemove kept extending the\n * selection.\n */\n self.mouseupOutsideGrid = function (e) {\n if (e.target === self.canvas) {\n return; // handled by mouseup\n }\n self.selecting = undefined;\n self.cellBoundaryCrossed = true;\n self.rowBoundaryCrossed = true;\n self.columnBoundaryCrossed = true;\n };\n self.mouseup = function (e) {\n clearTimeout(self.scrollTimer);\n self.cellBoundaryCrossed = true;\n self.rowBoundaryCrossed = true;\n self.columnBoundaryCrossed = true;\n self.selecting = undefined;\n self.draggingItem = undefined;\n self.dragStartObject = undefined;\n if (\n self.dispatchEvent('mouseup', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n if (!self.hasFocus && e.target !== self.canvas) {\n return;\n }\n if (self.currentCell && self.currentCell.grid !== undefined) {\n return;\n }\n if (self.contextMenu || self.input) {\n return;\n }\n if (self.dragStart && self.isInGrid(self.dragStart)) {\n self.controlInput.focus();\n }\n e.preventDefault();\n };\n // gets the horizontal adjacent cells as well as first/last based on column visibility\n self.getAdjacentCells = function () {\n var x,\n i,\n s = self.getSchema(),\n o = {};\n for (x = 0; x < s.length; x += 1) {\n i = self.orders.columns[x];\n if (!s[i].hidden) {\n if (o.first === undefined) {\n o.first = x;\n o.left = x;\n }\n o.last = x;\n if (x > self.activeCell.columnIndex && o.right === undefined) {\n o.right = x;\n }\n if (x < self.activeCell.columnIndex) {\n o.left = x;\n }\n }\n }\n if (o.right === undefined) {\n o.right = o.last;\n }\n return o;\n };\n self.keydown = function (e) {\n var i,\n ev,\n adjacentCells = self.getAdjacentCells(),\n x = Math.max(self.activeCell.columnIndex, 0),\n y = Math.max(self.activeCell.rowIndex, 0),\n ctrl = e.ctrlKey || e.metaKey,\n last = self.viewData.length - 1,\n s = self.getSchema(),\n cols = s.length - 1;\n\n var defaultPrevented = self.dispatchEvent('keydown', {\n NativeEvent: e,\n cell: self.currentCell,\n });\n\n if (defaultPrevented) {\n return;\n }\n\n if (!self.attributes.keepFocusOnMouseOut && !self.hasFocus) {\n return;\n }\n\n // If a user starts typing content, switch to \"Enter\" mode\n if (isPrintableKeyEvent(e) && !ctrl) {\n return self.beginEditAt(x, y, e, true);\n }\n\n if (self.attributes.showNewRow) {\n last += 1;\n }\n\n if (e.key === 'Tab') {\n e.preventDefault();\n }\n\n if (e.key === 'Escape') {\n self.selectNone();\n } else if (ctrl && e.key === 'a') {\n self.selectAll();\n } else if (['Backspace', 'Delete'].includes(e.key)) {\n // read-only grids must not lose data on Delete/Backspace (#587, #458)\n if (self.attributes.editable) {\n self.deleteSelectedData();\n }\n } else if (e.key === 'ArrowDown') {\n y += 1;\n } else if (e.key === 'ArrowUp') {\n y -= 1;\n } else if (\n (e.key === 'ArrowLeft' && !ctrl) ||\n (e.shiftKey && e.key === 'Tab')\n ) {\n x = adjacentCells.left;\n } else if (\n (e.key === 'ArrowRight' && !ctrl) ||\n (!e.shiftKey && e.key === 'Tab')\n ) {\n x = adjacentCells.right;\n } else if (e.key === 'PageUp') {\n y -= self.page;\n e.preventDefault();\n } else if (e.key === 'PageDown') {\n y += self.page;\n e.preventDefault();\n } else if (e.key === 'Home' || (ctrl && e.key === 'ArrowUp')) {\n y = 0;\n } else if (e.key === 'End' || (ctrl && e.key === 'ArrowDown')) {\n y = self.viewData.length - 1;\n } else if (ctrl && e.key === 'ArrowRight') {\n x = adjacentCells.last;\n } else if (ctrl && e.key === 'ArrowLeft') {\n x = adjacentCells.first;\n }\n\n if (e.key === 'Enter') {\n e.preventDefault();\n return self.beginEditAt(x, y, e);\n }\n if (x < 0 || Number.isNaN(x)) {\n x = adjacentCells.first;\n }\n if (y > last) {\n y = last;\n }\n if (y < 0 || Number.isNaN(y)) {\n y = 0;\n }\n if (x > cols) {\n x = adjacentCells.last;\n }\n\n // TODO - most likely some column order related bugs in key based selection\n // Arrows\n const isArrowKey = [\n 'ArrowLeft',\n 'ArrowUp',\n 'ArrowRight',\n 'ArrowDown',\n ].includes(e.key);\n\n // Shrinking and expanding selection using shift and arrow keys\n if (e.shiftKey && isArrowKey && !self.attributes.singleSelectionMode) {\n const changed = self.shrinkOrExpandSelections(\n { rowIndex: y, columnIndex: x },\n e,\n true,\n );\n if (changed) self.draw(true);\n }\n\n if (x !== self.activeCell.columnIndex || y !== self.activeCell.rowIndex) {\n self.scrollIntoView(\n x !== self.activeCell.columnIndex ? x : undefined,\n y !== self.activeCell.rowIndex && !Number.isNaN(y) ? y : undefined,\n );\n\n self.setActiveCell(x, y);\n if (!e.shiftKey && self.attributes.selectionFollowsActiveCell) {\n if (!ctrl) self.clearSelections();\n self.selectCell({ rowIndex: y, viewColumnIndex: x });\n }\n self.draw(true);\n }\n };\n self.keyup = function (e) {\n if (\n self.dispatchEvent('keyup', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n if (!self.hasFocus) {\n return;\n }\n };\n self.keypress = function (e) {\n if (!self.hasFocus) {\n return;\n }\n if (\n self.dispatchEvent('keypress', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n };\n self.dblclick = function (e) {\n if (\n self.dispatchEvent('dblclick', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n if (!self.hasFocus) {\n return;\n }\n if (\n self.currentCell.context === 'ew-resize' &&\n self.currentCell.style === 'columnHeaderCell'\n ) {\n // Check that double-clicked cell is selected or part of selection.\n const currentCellIsSelected = self.isColumnSelected(\n self.currentCell.columnIndex,\n );\n\n if (currentCellIsSelected) {\n // There might be more\n self.fitSelectedColumns();\n } else {\n self.fitColumnToValues(self.currentCell.header.name);\n }\n } else if (\n self.currentCell.context === 'ew-resize' &&\n self.currentCell.style === 'cornerCell'\n ) {\n self.autosize();\n } else if (\n ['cell', 'activeCell'].includes(self.currentCell.style) &&\n !self.hovers.onFilterButton &&\n !self.hovers.onCellTreeIcon\n ) {\n if (self.currentCell.isRowTree || self.currentCell.isColumnTree) {\n self.cellTreeExpandCollapse(\n self.currentCell.rowIndex,\n self.currentCell.columnIndex,\n );\n self.draw();\n } else {\n self.beginEditAt(\n self.currentCell.columnIndex,\n self.currentCell.rowIndex,\n );\n }\n }\n };\n self.scrollWheel = function (e) {\n var l,\n t,\n ev = e,\n deltaX = e.deltaX === undefined ? e.NativeEvent.deltaX : e.deltaX,\n deltaY = e.deltaY === undefined ? e.NativeEvent.deltaY : e.deltaY,\n deltaMode =\n e.deltaMode === undefined ? e.NativeEvent.deltaMode : e.deltaMode;\n if (e.NativeEvent) e = e.NativeEvent;\n if (wheeling) {\n ev.preventDefault(e);\n return;\n }\n if (self.dispatchEvent('wheel', { NativeEvent: e })) {\n return;\n }\n self.touchHaltAnimation = true;\n l = self.scrollBox.scrollLeft;\n t = self.scrollBox.scrollTop;\n if (self.hasFocus) {\n //BUG Issue 42: https://github.com/TonyGermaneri/canvas-datagrid/issues/42\n //https://stackoverflow.com/questions/20110224/what-is-the-height-of-a-line-in-a-wheel-event-deltamode-dom-delta-line\n if (deltaMode === 1) {\n // line mode = 17 pixels per line\n deltaY = deltaY * 17;\n }\n if (\n (self.scrollBox.scrollTop < self.scrollBox.scrollHeight &&\n deltaY > 0) ||\n (self.scrollBox.scrollLeft < self.scrollBox.scrollWidth &&\n deltaX > 0) ||\n (self.scrollBox.scrollTop > 0 && deltaY < 0) ||\n (self.scrollBox.scrollLeft > 0 && deltaX < 0)\n ) {\n ev.preventDefault(e);\n }\n wheeling = setTimeout(function () {\n wheeling = undefined;\n self.scrollBox.scrollTo(deltaX + l, deltaY + t);\n }, 1);\n }\n };\n self.pasteData = function (\n pasteValue,\n mimeType,\n startRowIndex,\n startColIndex,\n minRowsLength = 0,\n minColumnsLength = 0,\n ) {\n if (mimeType === 'text/html' && !isSupportedHtml(pasteValue)) {\n console.warn(\n 'Unrecognized HTML format. HTML must be a simple table, e.g.: <table><tr><td>data</td></tr></table>.',\n );\n console.warn(\n 'Data with the mime type text/html not in this format will not be imported as row data.',\n );\n\n return;\n }\n\n const rows = parseData(pasteValue, mimeType);\n const columnsLength = rows[0].length;\n\n // selected cell. This mimics Excel's paste functionality, and works\n // as a poor-man's fill-down.\n if (\n rows.length === 1 &&\n columnsLength === 1 &&\n minRowsLength <= 1 &&\n minColumnsLength <= 1\n ) {\n var cellData = rows[0][0].value.map((item) => item.value).join();\n\n self.forEachSelectedCell(function (data, rowIndex, colName) {\n data[rowIndex][colName] = cellData;\n });\n } else {\n let direction = null;\n\n if (minRowsLength > rows.length && minColumnsLength > columnsLength) {\n direction = 'both';\n } else if (minRowsLength > rows.length) {\n direction = 'vertical';\n } else if (minColumnsLength > columnsLength) {\n direction = 'horizontal';\n }\n\n self.insert({\n rows: rows,\n startRowIndex: startRowIndex,\n startColumnIndex: startColIndex,\n minRowsLength: minRowsLength,\n minColumnsLength: minColumnsLength,\n reverseRows: false,\n reverseColumns: false,\n clearSelections: true,\n alwaysFilling: false,\n direction: direction,\n });\n }\n\n // selections is a sparse array, so we condense:\n const affectedCells = [];\n self.forEachSelectedCell((viewData, viewRowIndex, columnName, cell) => {\n affectedCells.push([\n viewRowIndex,\n cell.viewColumnIndex,\n cell.boundRowIndex,\n cell.boundColumnIndex,\n // the pasted value, so listeners need not look it up (#549)\n viewData[viewRowIndex] ? viewData[viewRowIndex][columnName] : undefined,\n ]);\n });\n\n self.dispatchEvent('afterpaste', {\n cells: affectedCells,\n });\n self.dispatchDataChanged('paste', { cells: affectedCells });\n\n return rows.length;\n };\n /**\n * Grows the data set and the schema so that `insert` can write every pasted\n * cell, adding all missing rows and columns in one pass with a single\n * refresh instead of calling `addRow`/`addColumn` per cell.\n * @param {Array} rows Parsed clipboard rows (see `parseData`).\n * @param {number} requiredRowCount Number of rows the grid needs to have.\n * @param {number} requiredColumnCount Number of columns the grid needs to have.\n */\n self.expandGridForInsert = function (\n rows,\n requiredRowCount,\n requiredColumnCount,\n ) {\n const schema = self.getSchema();\n let changed = false;\n const missingColumns = requiredColumnCount - schema.length;\n if (missingColumns > 0) {\n const lastColumn = schema[self.orders.columns[schema.length - 1]] || {};\n for (let i = 0; i < missingColumns; i += 1) {\n const column = {\n name: `col${schema.length + 1}:${Date.now()}${i}`,\n type: deduceColTypeFromData(rows, i),\n title: ' ',\n width: lastColumn.width,\n };\n self.validateColumn(column, schema);\n schema.push(column);\n self.originalData.forEach(function (row, rowIndex) {\n self.applyDefaultValue(row, column, rowIndex);\n });\n }\n self.intf.schema = schema;\n changed = true;\n }\n const missingRows = requiredRowCount - self.originalData.length;\n if (missingRows > 0) {\n for (let i = 0; i < missingRows; i += 1) {\n const row = {};\n self.originalData.push(row);\n self.getSchema().forEach(function (c) {\n self.applyDefaultValue(row, c, self.originalData.length - 1);\n });\n }\n changed = true;\n }\n if (changed) {\n // setFilter re-applies filters and sorting and calls refresh() once\n self.setFilter();\n self.resize(true);\n }\n return changed;\n };\n self.insert = function ({\n rows = [],\n startRowIndex = 0,\n startColumnIndex = 0,\n minRowsLength = 0,\n minColumnsLength = 0,\n reverseRows = false,\n reverseColumns = false,\n clearSelections = false,\n alwaysFilling = false,\n direction = 'both',\n }) {\n const rowsLength = Math.max(rows.length, minRowsLength);\n const fillCellCallback = self.fillCellCallback;\n const filledCells = [];\n\n if (self.attributes.allowGridExpandOnPaste) {\n self.expandGridForInsert(\n rows,\n startRowIndex + rowsLength,\n startColumnIndex +\n Math.max(minColumnsLength, ...rows.map((cells) => cells.length)),\n );\n }\n\n if (clearSelections) self.selections = [];\n\n for (\n let rowPosReal = 0, rowDataPos = 0;\n rowPosReal < rowsLength;\n rowPosReal++, rowDataPos++\n ) {\n if (rowDataPos >= rows.length) {\n rowDataPos = 0;\n }\n\n const fillingRow = rowPosReal >= rows.length;\n const rowPosition = reverseRows\n ? rowsLength - rowPosReal - 1\n : rowPosReal;\n // Rows may have been moved by user, so get the actual row index\n // (instead of the row index at which the row is rendered):\n if (self.originalData[startRowIndex + rowPosition] === undefined) {\n console.warn('Paste data exceeded grid bounds. Skipping.');\n break;\n }\n const realRowIndex = self.orders.rows[startRowIndex + rowPosition];\n\n const cells = rows[rowDataPos];\n const cellsLength = Math.max(cells.length, minColumnsLength);\n\n const existingRowData = self.viewData[realRowIndex];\n const newRowData = Object.assign({}, existingRowData);\n const fillArgs = fillCellCallback\n ? {\n rows: rows,\n direction: direction,\n rowData: newRowData,\n existingRowData: existingRowData,\n rowIndex: realRowIndex,\n rowOffset: rowDataPos,\n cells: cells,\n reversed: direction === 'horizontal' ? reverseColumns : reverseRows,\n isFillingRow: fillingRow || alwaysFilling,\n fillingRowPosition: alwaysFilling\n ? rowPosReal\n : fillingRow\n ? rowPosReal - rows.length\n : -1,\n fillingRowLength: alwaysFilling\n ? rowsLength\n : fillingRow\n ? rowsLength - rows.length\n : -1,\n }\n : undefined;\n\n for (\n let colPosReal = 0, cellDataPos = 0;\n colPosReal < cellsLength;\n colPosReal++, cellDataPos++\n ) {\n if (cellDataPos >= cells.length) {\n cellDataPos = 0;\n }\n\n const fillingColumn = colPosReal >= cells.length;\n const colPosition = reverseColumns\n ? cellsLength - colPosReal - 1\n : colPosReal;\n const columnIndex = startColumnIndex + colPosition;\n if (!self.getSchema()[columnIndex]) {\n console.warn('Paste data exceeded grid bounds. Skipping.');\n continue;\n }\n const column = self.getSchema()[self.orders.columns[columnIndex]];\n const columnName = column.name;\n let cellData = cells[cellDataPos];\n if (cellData && cellData.value) {\n cellData = cellData.value.map((item) => item.value).join('');\n }\n\n const existingCellData = existingRowData[columnName];\n\n if (\n fillCellCallback &&\n (fillingColumn || fillingRow || alwaysFilling)\n ) {\n newRowData[columnName] = fillCellCallback({\n ...fillArgs,\n column: column,\n columnIndex: columnIndex,\n columnOffset: cellDataPos,\n newCellData: cellData,\n existingCellData: existingCellData,\n isFillingColumn: fillingColumn || alwaysFilling,\n fillingColumnPosition: alwaysFilling\n ? colPosReal\n : fillingColumn\n ? colPosReal - cells.length\n : -1,\n fillingColumnLength: alwaysFilling\n ? cellsLength\n : fillingColumn\n ? cellsLength - cells.length\n : -1,\n });\n } else {\n newRowData[columnName] =\n cellData === undefined || cellData === null\n ? existingCellData\n : cellData;\n }\n\n self.selectCell(\n { rowIndex: realRowIndex, viewColumnIndex: columnIndex },\n true,\n );\n\n if (alwaysFilling || fillingRow || fillingColumn) {\n filledCells.push([\n realRowIndex,\n columnIndex,\n self.getBoundRowIndexFromViewRowIndex(realRowIndex),\n self.getBoundColumnIndexFromViewColumnIndex(columnIndex),\n ]);\n }\n }\n\n self.originalData[self.boundRowIndexMap.get(realRowIndex)] = newRowData;\n // Update view date here to avoid a full refresh of `viewData`.\n // To stay in line with Excel and Google Sheet behaviour,\n // don't perform a full refresh (and filter/sort results)\n // as this would make any pasted values disappear and/or suddenly change position.\n self.viewData[realRowIndex] = newRowData;\n }\n\n if (filledCells.length > 0 || alwaysFilling) {\n self.dispatchEvent('afterfill', {\n filledCells: filledCells,\n });\n }\n };\n self.getNextVisibleColumnIndex = function (visibleColumnIndex) {\n var x,\n s = self.getVisibleSchema();\n for (x = 0; x < s.length; x += 1) {\n if (s[x].columnIndex === visibleColumnIndex) {\n return s[x + 1].columnIndex;\n }\n }\n return -1;\n };\n self.getVisibleColumnIndexOf = function (columnIndex) {\n var x,\n s = self.getVisibleSchema();\n for (x = 0; x < s.length; x += 1) {\n if (s[x].columnIndex === columnIndex) {\n return x;\n }\n }\n return -1;\n };\n self.getSelectionIndex = function () {\n const bounds = self.getSelectionBounds(true);\n if (!bounds) return;\n const { top, bottom } = bounds;\n for (let rowIndex = top; rowIndex <= bottom; rowIndex++) {\n const row = self.getRowSelectionStates(rowIndex);\n if (row) {\n if (row[0] === undefined) break;\n\n return {\n row: rowIndex,\n column: row[0] < 0 ? row[1] : row[0],\n rowLength: bottom - rowIndex + 1,\n columnLength: row.length - (row[0] < 0 ? 1 : 0),\n };\n }\n }\n\n return null;\n };\n self.paste = function (event) {\n if (!self.attributes.editable) {\n return;\n }\n\n var defaultPrevented = self.dispatchEvent('beforepaste', {\n NativeEvent: event,\n });\n\n if (defaultPrevented) {\n return;\n }\n\n var clipboardItems = new Map(\n Array.from(event.clipboardData.items).map((item) => [item.type, item]),\n );\n\n // Supported MIME types, in order of preference:\n var supportedMimeTypes = ['text/html', 'text/csv', 'text/plain'];\n\n // The clipboard will often contain the same data in multiple formats,\n // which can be used depending on the context in which it's pasted. Here\n // we'll prefere more structured (HTML/CSV) over less structured, when\n // available, so we try to find those first:\n var pasteableItems = supportedMimeTypes\n .map((mimeType) => clipboardItems.get(mimeType))\n .filter((item) => !!item); // filter out not-found MIME types (= undefined)\n\n if (pasteableItems.length === 0) {\n console.warn(\n 'Cannot find supported clipboard data type. Supported types are:',\n supportedMimeTypes.join(', '),\n );\n return;\n }\n\n const selectionIndex = self.getSelectionIndex();\n if (!selectionIndex) return;\n\n var itemToPaste = pasteableItems[0];\n\n // itemToPaste is cleared once accessed (getData or getAsString),\n // so we need to store the type here, before reading its value:\n var pasteType = itemToPaste.type;\n\n itemToPaste.getAsString(function (pasteValue) {\n self.pasteData(\n pasteValue,\n pasteType,\n selectionIndex.row,\n selectionIndex.column,\n selectionIndex.rowLength,\n selectionIndex.columnLength,\n );\n\n self.draw();\n });\n };\n self.cut = function (event) {\n if (self.dispatchEvent('cut', { NativeEvent: event })) {\n return;\n }\n\n // Expecting instance of `ClipboardEvent` with `clipboardData` attribute\n if (!self.hasFocus || !event.clipboardData) {\n return;\n }\n\n if (!self.attributes.editable) {\n // A read-only grid can still put the selection on the clipboard,\n // but nothing is removed from the data (#587).\n self.copySelectedCellsToClipboard(event.clipboardData);\n event.preventDefault();\n return;\n }\n\n self.copySelectedCellsToClipboard(event.clipboardData);\n\n const affectedCells = self.clearSelectedCells();\n const apiCompatibleCells = affectedCells.map((cell) => {\n return [\n cell.viewRowIndex,\n cell.viewColumnIndex,\n cell.boundRowIndex,\n cell.boundColumnIndex,\n ];\n });\n\n self.dispatchEvent('aftercut', {\n cells: apiCompatibleCells,\n });\n self.dispatchDataChanged('cut', { cells: apiCompatibleCells });\n\n requestAnimationFrame(() => self.draw());\n event.preventDefault();\n };\n self.copy = function (event) {\n if (self.dispatchEvent('copy', { NativeEvent: event })) {\n return;\n }\n\n // Expecting instance of `ClipboardEvent` with `clipboardData` attribute\n if (!self.hasFocus || !event.clipboardData) {\n return;\n }\n\n self.copySelectedCellsToClipboard(event.clipboardData);\n\n event.preventDefault();\n };\n self.selectionHandleMove = function (e) {\n if (!self.movingSelectionHandle) {\n return;\n }\n\n const clippingRect = self.getClippingRect(e);\n const rowIndex = self.currentCell.rowIndex;\n const columnIndex = self.currentCell.columnIndex;\n const isInSelectionBounds =\n rowIndex >= -1 &&\n columnIndex >= -1 &&\n self.fillOverlay.selection.left <= columnIndex &&\n self.fillOverlay.selection.right >= columnIndex &&\n self.fillOverlay.selection.top <= rowIndex &&\n self.fillOverlay.selection.bottom >= rowIndex;\n\n self.fillOverlay.minX = clippingRect.x;\n self.fillOverlay.minY = clippingRect.y;\n self.fillOverlay.x = Math.max(clippingRect.x, e.clientX);\n self.fillOverlay.y = Math.max(clippingRect.y, e.clientY);\n\n // If we are in the selection bounds, allow user to change directions.\n if (isInSelectionBounds) {\n self.fillOverlay.lastInBoundsLocation = {\n x: e.clientX,\n y: e.clientY,\n };\n } else if (\n self.fillOverlay.lastInBoundsLocation ||\n !self.fillOverlay.direction\n ) {\n const lastInBoundsLocation = self.fillOverlay.lastInBoundsLocation;\n self.fillOverlay.lastInBoundsLocation = undefined;\n\n const x = lastInBoundsLocation\n ? lastInBoundsLocation.x\n : self.fillOverlay.handle.x;\n const y = lastInBoundsLocation\n ? lastInBoundsLocation.y\n : self.fillOverlay.handle.y;\n const dx = Math.abs(e.clientX - x);\n const dy = Math.abs(e.clientY - y);\n\n if (dx > 5 || dy > 5) {\n self.fillOverlay.direction = dx > dy ? 'x' : 'y';\n }\n }\n\n if (rowIndex >= 0) {\n self.fillOverlay.rowIndex = rowIndex;\n }\n if (columnIndex >= 0) {\n self.fillOverlay.columnIndex = columnIndex;\n if (rowIndex === -1 && self.visibleRows.length) {\n self.fillOverlay.rowIndex = self.visibleRows[0];\n }\n }\n\n if (rowIndex >= -1 && columnIndex >= -1) {\n self.fillOverlay.snap = self.currentCell;\n } else {\n self.fillOverlay.snap = undefined;\n }\n };\n self.stopSelectionHandleMove = function (e) {\n if (!self.fillOverlay.handle) {\n return false;\n }\n\n self.ignoreNextClick = true;\n\n window.removeEventListener('mousemove', self.selectionHandleMove, false);\n window.removeEventListener('mouseup', self.stopSelectionHandleMove, false);\n\n const overlay = self.fillOverlay;\n const selectionIndex = self.getSelectionIndex();\n const bounds = overlay.selection;\n if (!selectionIndex) return;\n\n self.movingSelectionHandle = undefined;\n self.fillOverlay = {};\n\n if (overlay.rowIndex >= 0 && overlay.columnIndex >= 0) {\n const boundsOld = { ...bounds };\n const isVertical = overlay.direction === 'y';\n const isHorizontal = overlay.direction === 'x';\n\n let startRow,\n rowLength,\n startColumn,\n columnLength,\n reverseVertically = false,\n reverseHorizontally = false;\n\n if (isVertical) {\n if (overlay.rowIndex < bounds.top) {\n bounds.top = overlay.rowIndex;\n reverseVertically = true;\n } else if (overlay.rowIndex > bounds.bottom) {\n bounds.bottom = overlay.rowIndex;\n }\n\n startRow =\n bounds.top < boundsOld.top ? bounds.top : boundsOld.bottom + 1;\n rowLength =\n bounds.top < boundsOld.top\n ? boundsOld.top - bounds.top\n : bounds.bottom - boundsOld.bottom;\n startColumn = selectionIndex.column;\n columnLength = selectionIndex.columnLength;\n } else if (isHorizontal) {\n if (overlay.columnIndex < bounds.left) {\n bounds.left = overlay.columnIndex;\n reverseHorizontally = true;\n } else if (overlay.columnIndex > bounds.right) {\n bounds.right = overlay.columnIndex;\n }\n\n startColumn =\n bounds.left < boundsOld.left ? bounds.left : boundsOld.right + 1;\n columnLength =\n bounds.left < boundsOld.left\n ? boundsOld.left - bounds.left\n : bounds.right - boundsOld.right;\n startRow = selectionIndex.row;\n rowLength = selectionIndex.rowLength;\n }\n\n if (\n bounds.left <= bounds.right &&\n bounds.top <= bounds.bottom &&\n (bounds.left < boundsOld.left ||\n bounds.top < boundsOld.top ||\n bounds.right > boundsOld.right ||\n bounds.bottom > boundsOld.bottom)\n ) {\n const schema = self.getSchema();\n const rows = [];\n\n for (\n let rowIndex = 0;\n rowIndex < Math.min(rowLength, selectionIndex.rowLength);\n rowIndex++\n ) {\n const rowData = self.viewData[selectionIndex.row + rowIndex];\n\n rows[rowIndex] = [];\n\n for (\n let columnIndex = 0;\n columnIndex < Math.min(columnLength, selectionIndex.columnLength);\n columnIndex++\n ) {\n const column = schema[selectionIndex.column + columnIndex];\n if (!column) continue;\n\n const cellData = rowData[column.name];\n\n rows[rowIndex][columnIndex] = cellData;\n }\n }\n\n self.insert({\n rows: rows,\n startRowIndex: startRow,\n startColumnIndex: startColumn,\n minRowsLength: rowLength,\n minColumnsLength: columnLength,\n reverseRows: reverseVertically,\n reverseColumns: reverseHorizontally,\n clearSelections: false,\n alwaysFilling: true,\n direction: isHorizontal ? 'horizontal' : 'vertical',\n });\n self.dispatchDataChanged('fill');\n\n self.draw();\n }\n }\n\n return true;\n };\n return;\n}\n","'use strict';\n\nconst isSupportedHtml = function (pasteValue) {\n // We need to match new lines in the HTML, .* won't match new line characters.\n // `s` regex modifier can't be used with `ecmaVersion === 2017`.\n // As a workaround using [\\s\\S]*. Fix when we upgrade `ecmaVersion`.\n const genericDiv = /(?:^(<meta[^>]*>)?[\\s\\S]*<div[^>]*>)/;\n const genericSpan = /(?:^(<meta[^>]*>)?[\\s\\S]*<span[^>]*>)/;\n const genericTable = /(?:^(<meta[^>]*>)?[\\s\\S]*<table[^>]*>)/; // Matches Google Sheets format clipboard data format too.\n const excelTable = /(?:<!--StartFragment-->[\\s\\S]*<tr[^>]*>)/;\n const excelTableRow = /(?:<!--StartFragment-->[\\s\\S]*<td[^>]*>)/;\n\n return [\n genericDiv,\n genericTable,\n genericSpan,\n excelTable,\n excelTableRow,\n ].some((expression) => expression.test(pasteValue));\n};\n\n// Explanation of nodeType here: https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst IGNORE_NODETYPES = [8, 3]; // '#text' and '#comment'\n\nconst isHtmlTable = function (pasteValue) {\n return /(?:<table[^>]*>)|(?:<tr[^]*>)/.test(pasteValue);\n};\n\nconst sanitizeElementData = function (element) {\n // It is not entirely clear if this check on nodeType is required.\n let elementData = element.nodeType === 1 ? element.innerText : element.data;\n\n return String(elementData).replace(/\\s+/g, ' ').trim();\n};\n\nconst parseHtmlText = function (data) {\n const doc = new DOMParser().parseFromString(data, 'text/html');\n const element = doc.querySelector('div') || doc.querySelector('span');\n const elementData = sanitizeElementData(element);\n\n return elementData\n .split('\\n')\n .map((item) => item.split('\\t').map((value) => ({ value: [{ value }] })));\n};\n\nconst parseHtmlTable = function (data) {\n const doc = new DOMParser().parseFromString(data, 'text/html');\n const trs = doc.querySelectorAll('table tr');\n const rows = [];\n\n for (const tr of trs) {\n const row = [];\n\n for (const childNode of tr.childNodes) {\n if (IGNORE_NODETYPES.includes(childNode.nodeType)) continue;\n\n const col = { value: [] };\n const value = sanitizeElementData(childNode);\n\n if (value) col.value.push({ value });\n\n row.push(col);\n }\n\n rows.push(row);\n }\n\n return rows;\n};\n\nconst parseText = function (data) {\n return data\n .split('\\n')\n .map((item) => item.split('\\t').map((value) => ({ value: [{ value }] })));\n};\n\nconst parseData = function (data, mimeType) {\n if (mimeType === 'text/html' && isHtmlTable(data)) {\n return parseHtmlTable(data);\n } else if (mimeType === 'text/html') {\n return parseHtmlText(data);\n }\n\n // Default data format is string, so split on new line,\n // and then enclose in an array (a row with one cell):\n return parseText(data);\n};\n\nconst htmlSafe = function (value) {\n if (typeof value !== 'string') return value;\n\n return value.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n};\n\nconst createTextString = function (selectedData, isNeat) {\n // Selected like [[0, 1], [0, 1]] of [[0, 3]] is neat; Selected like [[0, 1], [1, 2]] is untidy.\n // If not isNeat we just return a simple string of concatenated values.\n if (!isNeat)\n return selectedData.map((row) => Object.values(row).join('')).join('');\n\n // If isNeat, we can create tab separated mutti-line text.\n return selectedData.map((row) => Object.values(row).join('\\t')).join('\\n');\n};\n\nconst createHTMLString = function (selectedData, isNeat) {\n if (!isNeat) return createTextString(selectedData, isNeat);\n\n // If isNeat, we can create a HTML table with the selected data.\n let htmlString = '<table>';\n htmlString += selectedData\n .map(\n (row) =>\n '<tr>' +\n Object.values(row)\n .map((value) => ['<td>', htmlSafe(value), '</td>'].join(''))\n .join('') +\n '</tr>',\n )\n .join('');\n htmlString += '</table>';\n\n return htmlString;\n};\n\n/**\n * deduce the type of values in the column 'colNum' of data represented by 'rows'\n * if the column is not empty and all values in the column are numbers, then the type is 'number',\n * otherwise the type is 'string'.\n * Purpose: check the type of pasted data when a new column is created dynamically\n * @param {Array} rows - array of rows, e.g. [ [{\"value\": [{\"value\": \"a\"}]},{\"value\": [{\"value\": \"b\"}]}], [{\"value\": [{\"value\": \"1\"}]},{\"value\": [{\"value\": \"2\"}]}] ]\n * @param {number} colNum - Column index to check\n * @returns {(\"string\" | \"number\")} deduced type\n */\nconst deduceColTypeFromData = function (rows, colNum) {\n const len = rows.length;\n // the first row can represent column headings.\n // if one row is pasted, check it, otherwise start from the second row.\n const startRow = len === 1 ? 0 : 1;\n let isColEmpty = true;\n for (let i = startRow; i < len; i += 1) {\n const cellData = rows[i][colNum];\n if (!cellData || cellData.value.length === 0) {\n continue;\n }\n isColEmpty = false;\n const val = cellData.value[0].value;\n if (!Number.isFinite(Number(val))) {\n return 'string';\n }\n }\n return isColEmpty ? 'string' : 'number';\n};\n\nexport {\n createTextString,\n createHTMLString,\n isSupportedHtml,\n htmlSafe,\n parseData,\n parseHtmlTable,\n parseHtmlText,\n parseText,\n sanitizeElementData,\n deduceColTypeFromData,\n};\n","'use strict';\n\n/**\n * Merge a new hidden row range into existed ranges array\n * @param {any[]} hiddenRowRanges tuples: Array<[bgeinRowIndex, endRowIndex]>\n * @param {number[]} newRange tuple: [beginRowIndex, endRowIndex]\n * @returns {boolean}\n */\nconst mergeHiddenRowRanges = function (hiddenRowRanges, newRange) {\n const [beginRowIndex, endRowIndex] = newRange;\n if (endRowIndex < beginRowIndex) return false;\n let inserted = false;\n for (let i = 0; i < hiddenRowRanges.length; i++) {\n const range = hiddenRowRanges[i];\n if (beginRowIndex > range[1] + 1) continue;\n if (beginRowIndex <= range[0] && endRowIndex >= range[0]) {\n hiddenRowRanges[i] = [beginRowIndex, Math.max(endRowIndex, range[1])];\n inserted = true;\n break;\n }\n if (beginRowIndex >= range[0]) {\n hiddenRowRanges[i] = [range[0], Math.max(endRowIndex, range[1])];\n inserted = true;\n break;\n }\n }\n if (!inserted) hiddenRowRanges.push([beginRowIndex, endRowIndex]);\n // merge intersections after sorting ranges\n hiddenRowRanges.sort((a, b) => a[0] - b[0]);\n for (let i = 0; i < hiddenRowRanges.length - 1; i++) {\n const range = hiddenRowRanges[i];\n const nextRange = hiddenRowRanges[i + 1];\n if (nextRange[0] <= range[1] + 1) {\n hiddenRowRanges[i] = [range[0], Math.max(range[1], nextRange[1])];\n hiddenRowRanges.splice(i + 1, 1);\n i--;\n }\n }\n return true;\n};\n\nexport { mergeHiddenRowRanges };\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals HTMLElement: false, Reflect: false, define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport { createHTMLString, createTextString } from './events/util';\n\nexport default function (self, ctor) {\n self.scale = 1;\n self.orders = {\n rows: [],\n columns: [],\n };\n self.appliedInlineStyles = {};\n self.cellGridAttributes = {};\n self.treeGridAttributes = {};\n self.visibleRowHeights = [];\n self.hasFocus = false;\n self.activeCell = {\n columnIndex: 0,\n rowIndex: 0,\n };\n self.innerHTML = '';\n self.storageName = 'canvasDataGrid';\n self.invalidSearchExpClass = 'canvas-datagrid-invalid-search-regExp';\n self.localStyleLibraryStorageKey = 'canvas-datagrid-user-style-library';\n self.dataType = 'application/x-canvas-datagrid';\n self.orderBy = null;\n self.orderDirection = 'asc';\n self.orderings = {\n columns: [],\n add: function (orderBy, orderDirection, sortFunction) {\n self.orderings.columns = self.orderings.columns.filter(function (col) {\n return col.orderBy !== orderBy;\n });\n self.orderings.columns.push({\n orderBy: orderBy,\n orderDirection: orderDirection,\n sortFunction: sortFunction,\n });\n },\n sort: function () {\n console.warn(\n 'grid.orderings.sort has been deprecated. Please use grid.refresh().',\n );\n\n self.orderings.columns.forEach(function (col) {\n self.viewData.sort(col.sortFunction(col.orderBy, col.orderDirection));\n });\n },\n };\n self.columnFilters = {};\n self.filters = {};\n self.frozenRow = 0;\n self.frozenColumn = 0;\n self.ellipsisCache = {};\n self.scrollCache = { x: [], y: [] };\n self.scrollBox = {};\n self.visibleRows = [];\n self.visibleCells = [];\n /**\n * Each item of this array contains these properties:\n * - `x`, `y`, `x2`, `y2`\n * - `orderIndex0`, `orderIndex1`: The closed interval of the hiding rows/columns.\n * - `dir`: The directon of the unhide indicator. 'l' and 'r' for columns, 't' and 'b' for rows\n */\n self.visibleUnhideIndicators = [];\n /**\n * Each item is a tuple conatins two numbers:\n * its type difination: Array<[beginRowIndex, endRowIndex]>\n * Each tuple represents a closed Interval\n */\n self.hiddenRowRanges = [];\n /**\n * This array stored all groups information with context for drawing,\n * it is generated by drawing functions,\n * and be used for searching groups when users operate on the spreadsheet\n * Each item of this array contains these properties:\n * - `type`: its available values: 'c' and 'r'. indicates the type of this item, 'c' for column group\n * and 'r' for row group.\n * - `x`,`y`: the left-top point of this group's rendering area.\n * - `x2`, `y2`: the right-bottom of this group's rendering area.\n * - `collapsed`: this value indicates the collapsed status of this group.\n * - `from`, `to`: The column index range of this group (We use this value for searching the group)\n * - `row`: The row index for column groups (We use this value for searching the group)\n */\n self.visibleGroups = [];\n self.sizes = {\n rows: {},\n columns: {},\n trees: {},\n };\n self.fillOverlay = {};\n self.filterable = {\n rows: [],\n columns: [],\n };\n self.selectedFilterButton = {\n columnIndex: -1,\n rowIndex: -1,\n };\n self.cellTree = {\n rows: [],\n columns: {},\n tempSchema: {},\n rowTreeColIndex: 0,\n columnTreeRowStartIndex: 0,\n columnTreeRowEndIndex: 0,\n origin: {\n rows: [],\n columns: {},\n },\n };\n self.hovers = {};\n self.attributes = {};\n self.style = {};\n self.formatters = {};\n self.sorters = {};\n self.parsers = {};\n self.schemaHashes = {};\n self.events = {};\n self.changes = [];\n self.scrollIndexTop = 0;\n self.scrollIndexBottom = 0;\n self.scrollIndexRight = 0;\n self.scrollPixelTop = 0;\n self.scrollIndexLeft = 0;\n self.scrollPixelLeft = 0;\n self.childGrids = {};\n self.openChildren = {};\n\n /**\n * Array for grouped columns\n * Each item in this array is an array and it represents some grouping in one row\n * A grouping descriptor has three properties:\n * - `from`: The column index of the first column\n * - `to`: The column index of the last column\n * - `collapsed`: Is this group be collapsed\n * @example [[{ from: 1, to: 2, collapsed: false }]]\n */\n self.groupedColumns = [];\n\n /**\n * Array for grouped rows\n * Each item in this array is an array and it represents some grouping in one column\n * A grouping descriptor has three properties:\n * - `from`: The row index of the first row\n * - `to`: The row index of the last row\n * - `collapsed`: Is this group be collapsed\n * @example [[{ from: 1, to: 2, collapsed: false }]]\n */\n self.groupedRows = [];\n\n self.scrollModes = [\n 'vertical-scroll-box',\n 'vertical-scroll-top',\n 'vertical-scroll-bottom',\n 'horizontal-scroll-box',\n 'horizontal-scroll-right',\n 'horizontal-scroll-left',\n ];\n self.componentL1Events = {};\n self.eventNames = [\n 'activecellchanged',\n 'afterdraw',\n 'afterrendercell',\n 'afterrenderfilterbutton',\n 'aftercreategroup',\n 'attributechanged',\n 'beforebeginedit',\n 'beforecreatecellgrid',\n 'beforedraw',\n 'beforeendedit',\n 'beforerendercell',\n 'beforerendercellgrid',\n 'beforerenderfilterbutton',\n 'beginedit',\n 'cellmouseout',\n 'cellmouseover',\n 'click',\n 'collapsetree',\n 'columnhide',\n 'columnunhide',\n 'contextmenu',\n 'copy',\n 'datachanged',\n 'dblclick',\n 'endedit',\n 'expandtree',\n 'formatcellvalue',\n 'keydown',\n 'keypress',\n 'keyup',\n 'mousedown',\n 'mousemove',\n 'mouseup',\n 'newrow',\n 'ordercolumn',\n 'rendercell',\n 'rendercellgrid',\n 'renderorderbyarrow',\n 'rendertext',\n 'rendertreearrow',\n 'reorder',\n 'reordering',\n 'resize',\n 'resizecolumn',\n 'resizerow',\n 'schemachanged',\n 'scroll',\n 'selectionchanged',\n 'stylechanged',\n 'touchcancel',\n 'touchend',\n 'touchmove',\n 'touchstart',\n 'wheel',\n ];\n self.mouse = { x: 0, y: 0 };\n\n self.getBoundRowIndexFromViewRowIndex = function (viewRowIndex) {\n if (self.boundRowIndexMap && self.boundRowIndexMap.has(viewRowIndex)) {\n return self.boundRowIndexMap.get(viewRowIndex);\n }\n\n return undefined;\n };\n self.getBoundColumnIndexFromViewColumnIndex = function (viewColumnIndex) {\n return self.orders.columns[viewColumnIndex];\n };\n /**\n * Get the height of the area about column groups for rendering and handling events.\n */\n self.getColumnGroupAreaHeight = function () {\n if (!self.attributes.allowGroupingColumns) {\n return 0;\n }\n const groups = self.groupedColumns.length;\n const base = self.style.columnGroupRowHeight * self.scale;\n return base * groups;\n };\n /**\n * Get the width of the area about row groups for rendering and handling events.\n */\n self.getRowGroupAreaWidth = function () {\n if (!self.attributes.allowGroupingRows) {\n return 0;\n }\n const groups = self.groupedRows.length;\n const base = self.style.rowGroupColumnWidth * self.scale;\n return base * groups;\n };\n self.getCollapsedColumnGroups = function () {\n const result = [];\n for (let rowIndex = 0; rowIndex < self.groupedColumns.length; rowIndex++) {\n const groups = self.groupedColumns[rowIndex];\n for (let groupIndex = 0; groupIndex < groups.length; groupIndex++) {\n const group = groups[groupIndex];\n if (group.collapsed) result.push(group);\n }\n }\n return result;\n };\n self.getCollapsedRowGroups = function () {\n const result = [];\n for (let rowIndex = 0; rowIndex < self.groupedRows.length; rowIndex++) {\n const groups = self.groupedRows[rowIndex];\n for (let groupIndex = 0; groupIndex < groups.length; groupIndex++) {\n const group = groups[groupIndex];\n if (group.collapsed) result.push(group);\n }\n }\n return result;\n };\n /**\n * Toggle the collapse status of a group (expanded/collapsed)\n * @param {{type:string,from:number,to:number}} group\n */\n self.toggleGroup = function (group) {\n if (group.type === 'c') {\n const { from, to } = group;\n /** @type {{from:number,to:number,collapsed:boolean}} */\n let matchedGroup;\n /** @type {Array<Array<{from:number,to:number,collapsed:boolean}>>} */\n const allGroups = self.groupedColumns;\n for (let i = 0; i < allGroups.length; i++) {\n const groups = allGroups[i];\n for (let gi = 0; gi < groups.length; gi++) {\n const group = groups[gi];\n if (group.from === from && group.to === to) {\n matchedGroup = group;\n break;\n }\n }\n if (matchedGroup) break;\n }\n if (!matchedGroup) return;\n const nextCollapsed = !matchedGroup.collapsed;\n matchedGroup.collapsed = nextCollapsed;\n return true;\n }\n if (group.type === 'r') {\n const { from, to } = group;\n /** @type {{from:number,to:number,collapsed:boolean}} */\n let matchedGroup;\n /** @type {Array<Array<{from:number,to:number,collapsed:boolean}>>} */\n const allGroups = self.groupedRows;\n for (let i = 0; i < allGroups.length; i++) {\n const groups = allGroups[i];\n for (let gi = 0; gi < groups.length; gi++) {\n const group = groups[gi];\n if (group.from === from && group.to === to) {\n matchedGroup = group;\n break;\n }\n }\n if (matchedGroup) break;\n }\n if (!matchedGroup) return;\n const nextCollapsed = !matchedGroup.collapsed;\n matchedGroup.collapsed = nextCollapsed;\n return true;\n }\n return false;\n };\n self.isNewGroupRangeValid = function (groupsArray, from, to) {\n for (let i = 0; i < groupsArray.length; i++) {\n const groups = groupsArray[i];\n for (let gIndex = 0; gIndex < groups.length; gIndex++) {\n const group = groups[gIndex];\n if (from === group.to + 1) return false;\n if (from > group.to) continue;\n\n if (from === group.from) {\n if (to === group.to) return false;\n if (to > group.to) return true;\n break; // check smaller range\n }\n if (from > group.from) {\n if (to > group.to) return false;\n break; // check smaller range\n }\n if (to < group.to) return false;\n return true;\n }\n }\n return true;\n };\n self.getColumnHeaderCellHeight = function () {\n if (!self.attributes.showColumnHeaders) {\n return 0;\n }\n return (\n (self.sizes.rows[-1] || self.style.columnHeaderCellHeight) * self.scale\n );\n };\n self.getRowHeaderCellWidth = function () {\n if (!self.attributes.showRowHeaders) {\n return 0;\n }\n return (\n (self.sizes.columns[-1] || self.style.rowHeaderCellWidth) * self.scale\n );\n };\n self.setStorageData = function () {\n if (!self.attributes.saveAppearance || !self.attributes.name) {\n return;\n }\n var visibility = {};\n self.getSchema().forEach(function (column) {\n visibility[column.name] = !column.hidden;\n });\n localStorage.setItem(\n self.storageName + '-' + self.attributes.name,\n JSON.stringify({\n sizes: {\n rows: self.sizes.rows,\n columns: self.sizes.columns,\n },\n orders: {\n rows: self.orders.rows,\n columns: self.orders.columns,\n },\n orderBy: self.orderBy,\n orderDirection: self.orderDirection,\n visibility: visibility,\n }),\n );\n };\n self.getSchema = function () {\n return self.schema || self.tempSchema || [];\n };\n function fillArray(low, high) {\n var i = [],\n x;\n for (x = low; x <= high; x += 1) {\n i[x] = x;\n }\n return i;\n }\n self.createColumnOrders = function () {\n var s = self.getSchema();\n self.orders.columns = fillArray(0, s.length - 1);\n };\n self.createRowOrders = function () {\n self.orders.rows = fillArray(0, self.originalData.length - 1);\n };\n self.getVisibleSchema = function () {\n return self.getSchema().filter(function (col) {\n return !col.hidden;\n });\n };\n self.applyDefaultValue = function (row, header, rowIndex) {\n var d = header.defaultValue || '';\n if (typeof d === 'function') {\n d = d.apply(self.intf, [header, rowIndex]);\n }\n row[header.name] = d;\n };\n self.createNewRowData = function () {\n self.newRow = {};\n\n // The third argument of applyDefaultValue is the row index\n // of the row for which to apply the default value. In this\n // case, we're creating a new row but not yet appending it\n // to self.originalData, so no row index exists\n const newRowIndex = undefined;\n\n self.getSchema().forEach(function forEachHeader(header) {\n self.applyDefaultValue(self.newRow, header, newRowIndex);\n });\n };\n self.getSchemaNameHash = function (key) {\n var n = 0;\n while (self.schemaHashes[key]) {\n n += 1;\n key = key + n;\n }\n return key;\n };\n self.filter = function (type) {\n var f = self.filters[type];\n if (!f && type !== undefined) {\n console.warn(\n 'Cannot find filter for type %s, falling back to substring match.',\n type,\n );\n f = self.filters.string;\n }\n return f;\n };\n self.hasActiveFilters = function () {\n return self.columnFilters && Object.keys(self.columnFilters).length > 0;\n };\n self.hasCollapsedRowGroup = function () {\n for (let i = 0; i < self.groupedRows.length; i++) {\n const groups = self.groupedRows[i];\n for (let j = 0; j < groups.length; j++) {\n const g = groups[j];\n if (g.collapsed) return true;\n }\n }\n return false;\n };\n self.getFilteredAndSortedViewData = function (originalData) {\n // We make a copy of originalData here in order be able to\n // filter and sort rows without modifying the original array.\n // Each row is turned into a (row, rowIndex) tuple\n // so that when we apply filters, we can refer back to the\n // row's original row number in originalData. This becomes\n // useful when emitting cell events.\n let newViewData = originalData.map((row, originalRowIndex) => [\n row,\n originalRowIndex,\n ]);\n\n // Remove hidden rows here. So we can keep the bound indexes correct\n if (self.hiddenRowRanges.length > 0) {\n const ranges = self.hiddenRowRanges.sort((a, b) => b[1] - a[1]);\n for (let i = 0; i < ranges.length; i++) {\n const [beginRowIndex, endRowIndex] = ranges[i];\n const countOfRows = endRowIndex - beginRowIndex + 1;\n newViewData.splice(beginRowIndex, countOfRows);\n }\n }\n\n // Apply filtering\n for (const [headerName, filterText] of Object.entries(self.columnFilters)) {\n const header = self.getHeaderByName(headerName);\n\n if (!header) {\n continue;\n }\n\n const currentFilterFunction =\n header.filter || self.filter(header.type || 'string');\n\n newViewData = newViewData.filter(function ([row, originalRowIndex]) {\n if (\n self.attributes.allowFreezingRows &&\n !self.attributes.filterFrozenRows &&\n originalRowIndex < self.frozenRow\n )\n return true;\n\n return currentFilterFunction(row[headerName], filterText);\n });\n }\n\n //#region Hide rows from collapsed group\n /** @type {number[][]} */\n let collapsedGroups = [];\n for (let i = 0; i < self.groupedRows.length; i++) {\n const rows = self.groupedRows[i];\n for (let j = 0; j < rows.length; j++) {\n const r = rows[j];\n if (!r.collapsed) continue;\n collapsedGroups.push([r.from, r.to]);\n }\n }\n if (collapsedGroups.length > 0) {\n //#region merge groups\n collapsedGroups.sort((a, b) => a[0] - b[0]);\n let newLen = 0;\n const len = collapsedGroups.length;\n for (let i = 0; i < len; i++) {\n const r = collapsedGroups[i];\n if (i === len - 1) {\n collapsedGroups[newLen++] = r;\n break;\n }\n const to = r[1];\n const [from2, to2] = collapsedGroups[i + 1];\n if (from2 > to + 1) {\n collapsedGroups[newLen++] = r;\n continue;\n }\n collapsedGroups[i + 1] = r;\n if (to2 > to) collapsedGroups[i + 1][1] = to2;\n }\n collapsedGroups = collapsedGroups.slice(0, newLen);\n //#endregion merge groups\n\n //#region omit rows by groups\n let g = collapsedGroups.shift();\n for (let start = 0; start < newViewData.length; start++) {\n const it = newViewData[start][1];\n if (it < g[0]) continue;\n let end = start + 1;\n for (; end < newViewData.length; end++) {\n const it2 = newViewData[end][1];\n if (it2 > g[1]) break;\n }\n newViewData.splice(start, end - start);\n g = collapsedGroups.shift();\n if (!g) break;\n start--;\n }\n //#endregion omit rows by groups\n }\n //#endregion Hide rows from collapsed group\n\n // Apply sorting\n for (const column of self.orderings.columns) {\n const sortFn = column.sortFunction(column.orderBy, column.orderDirection);\n\n newViewData.sort(([rowA], [rowB, rowIndexB]) => {\n if (\n self.attributes.allowFreezingRows &&\n !self.attributes.sortFrozenRows &&\n rowIndexB < self.frozenRow\n )\n return 0;\n return sortFn(rowA, rowB);\n });\n }\n\n return {\n viewData: newViewData.map(([row]) => row),\n boundRowIndexMap: new Map(\n newViewData.map(([_row, originalRowIndex], viewRowIndex) => [\n viewRowIndex,\n originalRowIndex,\n ]),\n ),\n };\n };\n self.refresh = function () {\n const { viewData, boundRowIndexMap } = self.getFilteredAndSortedViewData(\n self.originalData,\n );\n\n self.viewData = viewData;\n self.boundRowIndexMap = boundRowIndexMap;\n\n self.resize();\n self.draw(true);\n };\n self.getBestGuessDataType = function (columnName, data) {\n var t,\n x,\n l = data.length;\n for (x = 0; x < l; x += 1) {\n if (\n data[x] !== undefined &&\n data[x] !== null &&\n [null, undefined].indexOf(data[x][columnName]) !== -1\n ) {\n t = typeof data[x];\n return t === 'object' ? 'string' : t;\n }\n }\n return 'string';\n };\n self.drawChildGrids = function () {\n Object.keys(self.childGrids).forEach(function (gridKey) {\n self.childGrids[gridKey].draw();\n });\n };\n self.resizeChildGrids = function () {\n Object.keys(self.childGrids).forEach(function (gridKey) {\n self.childGrids[gridKey].resize();\n });\n };\n self.autoScrollZone = function (e, x, y, ctrl) {\n var setTimer,\n rowHeaderCellWidth = self.getRowHeaderCellWidth(),\n columnHeaderCellHeight = self.getColumnHeaderCellHeight();\n if (x !== -1) {\n if (x > self.width - self.attributes.selectionScrollZone) {\n self.scrollBox.scrollLeft += self.attributes.selectionScrollIncrement;\n setTimer = true;\n }\n if (x - self.attributes.selectionScrollZone - rowHeaderCellWidth < 0) {\n self.scrollBox.scrollLeft -= self.attributes.selectionScrollIncrement;\n setTimer = true;\n }\n }\n if (y !== -1) {\n if (y > self.height - self.attributes.selectionScrollZone) {\n self.scrollBox.scrollTop += self.attributes.selectionScrollIncrement;\n setTimer = true;\n }\n if (\n y - self.attributes.selectionScrollZone - columnHeaderCellHeight <\n 0\n ) {\n self.scrollBox.scrollTop -= self.attributes.selectionScrollIncrement;\n setTimer = true;\n }\n }\n if (\n setTimer &&\n !ctrl &&\n self.currentCell &&\n self.currentCell.columnIndex !== -1\n ) {\n self.scrollTimer = setTimeout(\n self.mousemove,\n self.attributes.scrollRepeatRate,\n e,\n );\n }\n };\n self.validateColumn = function (c, s) {\n if (!c.name) {\n throw new Error('A column must contain at least a name.');\n }\n if (\n s.filter(function (i) {\n return i.name === c.name;\n }).length > 0\n ) {\n throw new Error(\n 'A column with the name ' +\n c.name +\n ' already exists and cannot be added again.',\n );\n }\n return true;\n };\n self.setDefaults = function (obj1, obj2, key, def) {\n obj1[key] = obj2[key] === undefined ? def : obj2[key];\n };\n self.setAttributes = function () {\n self.defaults.attributes.forEach(function eachAttribute(i) {\n self.setDefaults(self.attributes, self.args, i[0], i[1]);\n });\n };\n self.setStyle = function () {\n self.defaults.styles.forEach(function eachStyle(i) {\n self.setDefaults(self.style, self.args.style || {}, i[0], i[1]);\n });\n };\n self.autosize = function (colName) {\n self.getVisibleSchema().forEach(function (col, colIndex) {\n if (col.name === colName || colName === undefined) {\n self.sizes.columns[colIndex] = Math.max(\n self.findColumnMaxTextLength(col.name),\n self.style.minColumnWidth,\n );\n }\n });\n self.sizes.columns[-1] = self.findColumnMaxTextLength('cornerCell');\n };\n self.dispose = function () {\n // dispose is idempotent (#338, #455): a second call is a no-op\n if (self.disposed) {\n return;\n }\n self.disposed = true;\n // child (tree) grids first\n Object.keys(self.openChildren || {}).forEach(function (key) {\n var child = self.openChildren[key];\n if (child && typeof child.dispose === 'function') {\n child.dispose();\n }\n });\n if (self.contextMenu) {\n self.disposeContextMenu();\n }\n document.removeEventListener('click', self.disposeContextMenu);\n if (self.resizeObserver) {\n self.resizeObserver.disconnect();\n self.resizeObserver = undefined;\n }\n if (self.resizeObserverFrame) {\n cancelAnimationFrame(self.resizeObserverFrame);\n self.resizeObserverFrame = undefined;\n }\n if (!self.isChildGrid && self.canvas && self.canvas.parentNode) {\n self.canvas.parentNode.removeChild(self.canvas);\n }\n if (\n !self.isChildGrid &&\n self.controlInput &&\n self.controlInput.parentNode\n ) {\n self.controlInput.parentNode.removeChild(self.controlInput);\n }\n if (self.eventParent) {\n self.eventParent.removeEventListener('scroll', self.resize, false);\n self.eventParent.removeEventListener('mouseup', self.mouseup, false);\n self.eventParent.removeEventListener('touchstart', self.touchstart);\n }\n document.body.removeEventListener('touchmove', self.touchmove);\n document.body.removeEventListener('touchend', self.touchend, false);\n document.body.removeEventListener('touchcancel', self.touchcancel, false);\n self.eventParent.removeEventListener('mousedown', self.mousedown, false);\n self.eventParent.removeEventListener('dblclick', self.dblclick, false);\n self.eventParent.removeEventListener('click', self.click, false);\n self.eventParent.removeEventListener('mousemove', self.mousemove);\n self.eventParent.removeEventListener('wheel', self.scrollWheel, false);\n self.canvas.removeEventListener(\n 'contextmenu',\n self.contextmenuEvent,\n false,\n );\n self.canvas.removeEventListener('copy', self.copy);\n self.controlInput.removeEventListener('copy', self.copy);\n self.controlInput.removeEventListener('cut', self.cut);\n self.controlInput.removeEventListener('paste', self.paste);\n self.controlInput.removeEventListener('keypress', self.keypress, false);\n self.controlInput.removeEventListener('keyup', self.keyup, false);\n self.controlInput.removeEventListener('keydown', self.keydown, false);\n window.removeEventListener('mouseup', self.mouseup, false);\n window.removeEventListener('mouseup', self.mouseupOutsideGrid, false);\n window.removeEventListener('mousemove', self.mousemove);\n window.removeEventListener('resize', self.resize);\n // the MutationObserver is created by the web component wrapper and kept\n // on the host element (#237, #338)\n var observer = self.observer || (self.intf && self.intf.observer);\n if (observer && observer.disconnect) {\n observer.disconnect();\n }\n if (self.intf) {\n self.intf.observer = undefined;\n }\n };\n self.tryLoadStoredSettings = function () {\n var s;\n self.reloadStoredValues();\n if (\n self.storedSettings &&\n typeof self.storedSettings.orders === 'object' &&\n self.storedSettings.orders !== null\n ) {\n if (\n self.storedSettings.orders.rows.length >= (self.viewData || []).length\n ) {\n self.orders.rows = self.storedSettings.orders.rows;\n }\n s = self.getSchema();\n if (self.storedSettings.orders.columns.length === s.length) {\n self.orders.columns = self.storedSettings.orders.columns;\n }\n self.orderBy =\n self.storedSettings.orderBy === undefined\n ? s[0].name\n : self.storedSettings.orderBy;\n self.orderDirection =\n self.storedSettings.orderDirection === undefined\n ? 'asc'\n : self.storedSettings.orderDirection;\n if (\n self.storedSettings.orderBy !== undefined &&\n self.getHeaderByName(self.orderBy) &&\n self.orderDirection\n ) {\n self.order(self.orderBy, self.orderDirection);\n }\n }\n };\n self.toggleCollapseTree = function (rowIndex, columnIndex, type) {\n let tempData = [];\n let collapsedCount = 0;\n if (\n columnIndex == self.cellTree.rowTreeColIndex &&\n (rowIndex > 0 || (rowIndex == 0 && self.cellTree.rows[0].icon))\n ) {\n let ctr = self.cellTree.rows;\n switch (type) {\n case 'Expand':\n ctr[rowIndex].expand = true;\n self.cellTree.origin.rows[ctr[rowIndex].index].expand = true;\n break;\n\n case 'Collapse':\n ctr[rowIndex].expand = false;\n self.cellTree.origin.rows[ctr[rowIndex].index].expand = false;\n break;\n\n default:\n ctr[rowIndex].expand = !ctr[rowIndex].expand;\n self.cellTree.origin.rows[ctr[rowIndex].index].expand =\n ctr[rowIndex].expand;\n }\n for (\n let ri = ctr[rowIndex].index + 1;\n ri <= ctr[rowIndex].lastchild;\n ri++\n ) {\n let orTree = self.cellTree.origin.rows[ri];\n if (ctr[rowIndex].expand) {\n orTree.hide = false;\n if (orTree.icon && !orTree.expand) ri = orTree.lastchild;\n } else {\n orTree.hide = true;\n }\n }\n } else if (self.cellTree.columns[rowIndex]) {\n let ctc = self.cellTree.columns[rowIndex];\n\n switch (type) {\n case 'Expand':\n ctc[columnIndex].expand = true;\n break;\n\n case 'Collapse':\n ctc[columnIndex].expand = false;\n break;\n\n default:\n ctc[columnIndex].expand = !ctc[columnIndex].expand;\n }\n for (\n let ci = ctc[columnIndex].index + 1;\n ci <= ctc[columnIndex].lastchild;\n ci++\n ) {\n if (ctc[columnIndex].expand)\n self.cellTree.tempSchema[ci].hidden = false;\n else self.cellTree.tempSchema[ci].hidden = true;\n }\n let rc = 0,\n _ri;\n\n if (ctc[columnIndex].expand) {\n while (rc < ctc[columnIndex].child) {\n _ri = rowIndex + rc + 1;\n\n for (\n let _ci = ctc[columnIndex].index;\n _ci <= ctc[columnIndex].lastchild;\n _ci++\n ) {\n if (\n self.cellTree.origin.columns[_ri] &&\n self.cellTree.origin.columns[_ri][_ci].icon &&\n !self.cellTree.origin.columns[_ri][_ci].expand\n ) {\n for (\n let si = _ci + 1;\n si <= self.cellTree.origin.columns[_ri][_ci].lastchild;\n si++\n ) {\n self.cellTree.tempSchema[si].hidden = true;\n }\n }\n }\n\n rc++;\n }\n }\n }\n let otherData = {};\n let collapsed = [];\n self.cellTree.rows = [];\n self.cellTree.columns = {};\n for (let k in self.cellTree.origin.rows) {\n let tempRow = [];\n let tree = self.cellTree.origin.rows[k];\n if (!tree.hide) {\n let colTrees = [];\n let collapsedColCount = 0;\n if (k < self.cellTree.columnTreeRowStartIndex) {\n tempData.push(self.originalData[k]);\n } else {\n if (k > self.cellTree.columnTreeRowEndIndex) {\n otherData[k] = self.viewData[k];\n collapsedCount++;\n } else {\n for (let l = 0; l < self.originalData[k].length; l++) {\n if (!self.cellTree.tempSchema[l].hidden) {\n if (l < self.cellTree.rowTreeColIndex) {\n if (!Object.prototype.hasOwnProperty.call(otherData, k))\n otherData[k] = [];\n otherData[k].push(self.viewData[k][l]);\n }\n tempRow.push(self.originalData[k][l]);\n if (\n Object.prototype.hasOwnProperty.call(\n self.cellTree.origin.columns,\n k,\n )\n )\n colTrees.push(self.cellTree.origin.columns[k][l]);\n } else collapsedColCount++;\n }\n tempRow.push(...Array(collapsedColCount).fill(''));\n if (colTrees.length) {\n colTrees.push(\n ...Array(collapsedColCount)\n .fill()\n .map(() => {\n return {};\n }),\n );\n self.cellTree.columns[k] = colTrees;\n }\n tempData.push(tempRow);\n }\n }\n self.cellTree.rows.push(tree);\n } else {\n for (let l = 0; l < self.cellTree.rowTreeColIndex; l++) {\n tempRow.push(self.viewData[k][l]);\n }\n otherData[k] = tempRow;\n collapsed.push(Array(self.viewData[0].length).fill(''));\n collapsedCount++;\n }\n }\n if (collapsedCount) {\n self.cellTree.rows.push(\n ...Array(collapsedCount)\n .fill()\n .map((u, index) => {\n return { index: self.cellTree.rows.length + index };\n }),\n );\n tempData.push(...collapsed);\n }\n for (let k in otherData) {\n if (k > self.cellTree.columnTreeRowEndIndex) tempData[k] = otherData[k];\n else\n for (let l in otherData[k]) {\n tempData[k][l] = otherData[k][l];\n }\n }\n self.viewData = tempData;\n };\n self.cellTreeExpandCollapse = function (rowIndex, columnIndex, type) {\n if (\n columnIndex == self.cellTree.rowTreeColIndex &&\n (rowIndex > 0 || (rowIndex == 0 && self.cellTree.rows[0].icon))\n ) {\n const ctr = self.cellTree.rows;\n switch (type) {\n case 'Expand':\n ctr[rowIndex].expand = true;\n break;\n case 'Collapse':\n ctr[rowIndex].expand = false;\n break;\n default:\n ctr[rowIndex].expand = !ctr[rowIndex].expand;\n }\n for (let ri = rowIndex + 1; ri <= ctr[rowIndex].lastchild; ri++) {\n if (ctr[rowIndex].expand) {\n ctr[ri].hide = false;\n if (ctr[ri].icon && !ctr[ri].expand) ri = ctr[ri].lastchild;\n } else {\n ctr[ri].hide = true;\n }\n }\n } else if (self.cellTree.columns[rowIndex]) {\n const ctc = self.cellTree.columns[rowIndex];\n switch (type) {\n case 'Expand':\n ctc[columnIndex].expand = true;\n break;\n case 'Collapse':\n ctc[columnIndex].expand = false;\n break;\n default:\n ctc[columnIndex].expand = !ctc[columnIndex].expand;\n }\n\n for (let ci = columnIndex + 1; ci <= ctc[columnIndex].lastchild; ci++) {\n if (ctc[columnIndex].expand) self.tempSchema[ci].hidden = false;\n else self.tempSchema[ci].hidden = true;\n }\n\n let rc = 0,\n ri;\n if (ctc[columnIndex].expand) {\n while (rc < ctc[columnIndex].child) {\n ri = rowIndex + rc + 1;\n for (let ci = columnIndex; ci <= ctc[columnIndex].lastchild; ci++) {\n if (\n self.cellTree.columns[ri] &&\n self.cellTree.columns[ri][ci].icon &&\n !self.cellTree.columns[ri][ci].expand\n ) {\n for (\n let si = ci + 1;\n si <= self.cellTree.columns[ri][ci].lastchild;\n si++\n )\n self.tempSchema[si].hidden = true;\n }\n }\n rc++;\n }\n }\n }\n };\n\n self.initCellTreeSettings = function () {\n if (self.viewData === undefined) return;\n if (self.attributes.rowTree.length > 0 && self.viewData.length > 0) {\n self.cellTree.rows = Array(self.viewData.length)\n .fill()\n .map((u, index) => ({ index: index }));\n self.cellTree.rowTreeColIndex = self.attributes.rowTreeColIndex;\n let invalidRowTree = false;\n for (let rt of self.attributes.rowTree) {\n if (self.cellTree.rows.length <= rt.end) {\n invalidRowTree = true;\n break;\n }\n\n for (let ri = rt.begin; ri <= rt.end; ri++) {\n if (ri == rt.begin) {\n self.cellTree.rows[ri].icon = true;\n self.cellTree.rows[ri].lastchild = rt.end;\n self.cellTree.rows[ri].expand = true;\n if (!self.cellTree.rows[ri].parentCount)\n self.cellTree.rows[ri].parentCount = 0;\n } else {\n self.cellTree.rows[ri].hide = false;\n self.cellTree.rows[ri].parentIndex = rt.begin;\n if (self.cellTree.rows[ri] && self.cellTree.rows[ri].parentCount)\n self.cellTree.rows[ri].parentCount += 1;\n else self.cellTree.rows[ri].parentCount = 1;\n }\n }\n }\n if (invalidRowTree) self.cellTree.rows = {};\n }\n if (self.attributes.columnTree.length > 0 && self.viewData.length > 0) {\n self.cellTree.columnTreeRowStartIndex =\n self.attributes.columnTreeRowStartIndex;\n self.cellTree.columnTreeRowEndIndex =\n self.attributes.columnTreeRowEndIndex;\n let dataColumnLength = Object.keys(self.viewData[0]).length;\n let invalidColumnTree = false;\n for (let ct of self.attributes.columnTree) {\n if (dataColumnLength <= ct.end) {\n invalidColumnTree = true;\n break;\n }\n\n if (!self.cellTree.columns[ct.row])\n self.cellTree.columns[ct.row] = Array(dataColumnLength)\n .fill()\n .map((u, index) => ({ index: index }));\n\n for (let i = ct.begin; i <= ct.end; i++) {\n const ctc = self.cellTree.columns[ct.row][i];\n if (i == ct.begin) {\n ctc.icon = true;\n ctc.lastchild = ct.end;\n ctc.length = ct.end - ct.begin;\n ctc.expand = true;\n if (ct.child) ctc.child = ct.child;\n else ctc.child = 0;\n }\n }\n }\n self.cellTree.tempSchema = Array(dataColumnLength)\n .fill()\n .map(function () {\n return { hidden: false };\n });\n if (invalidColumnTree) self.cellTree.columns = {};\n }\n self.cellTree.origin = {\n rows: self.cellTree.rows,\n columns: self.cellTree.columns,\n };\n };\n\n self.getDomRoot = function () {\n return self.shadowRoot ? self.shadowRoot.host : self.parentNode;\n };\n /**\n * Parses a CSS font shorthand (`[style] [variant] [weight] [stretch]\n * size[/line-height] family`) into the pieces the grid needs to rebuild a\n * scaled font string. Sizes in pt/em/rem/% are converted to px (#157).\n * @param {string} fontStyle A CSS font value such as `bold 14px Roboto, sans-serif`.\n * @returns {{prefix: string, height: number, name: string}}\n */\n self.parseFont = function (fontStyle) {\n var value = String(\n fontStyle === undefined || fontStyle === null ? '' : fontStyle,\n ).trim();\n var m = /(\\d*\\.?\\d+)(px|pt|em|rem|%)?(?:\\s*\\/\\s*[\\w.%]+)?\\s+(.+)$/.exec(\n value,\n );\n if (!m) {\n return {\n prefix: '',\n height: parseFloat(value) || 0,\n name: value.replace(/\\d+\\.?\\d*px/, '').trim(),\n };\n }\n var size = parseFloat(m[1]),\n unit = m[2] || 'px',\n height = size;\n if (unit === 'pt') {\n height = size * (4 / 3);\n } else if (unit === 'em' || unit === 'rem') {\n height = size * 16;\n } else if (unit === '%') {\n height = size * 0.16;\n }\n return {\n prefix: value.slice(0, m.index).trim(),\n height: height,\n name: m[3].trim(),\n };\n };\n self.getFontName = function (fontStyle) {\n return self.parseFont(fontStyle).name;\n };\n self.getFontHeight = function (fontStyle) {\n return self.parseFont(fontStyle).height;\n };\n /**\n * Builds the canvas font string for a `*Font` style key at the current\n * scale, keeping any style/weight prefix from the shorthand (#157).\n * @param {string} styleKey e.g. `cellFont`.\n * @returns {string}\n */\n self.getScaledFont = function (styleKey) {\n var prefix = self.style[styleKey + 'Prefix'];\n return (\n (prefix ? prefix + ' ' : '') +\n self.style[styleKey + 'Height'] * self.scale +\n 'px ' +\n self.style[styleKey + 'Name']\n );\n };\n self.parseStyleValue = function (key) {\n if (/Font/.test(key)) {\n var font = self.parseFont(self.style[key]);\n self.style[key + 'Height'] = font.height;\n self.style[key + 'Name'] = font.name;\n self.style[key + 'Prefix'] = font.prefix;\n return;\n }\n // when inheriting styles from already instantiated grids, don't parse already parsed values.\n if (\n key === 'moveOverlayBorderSegments' &&\n typeof self.style[key] === 'string'\n ) {\n self.style[key] = self.style[key].split(',').map(function (i) {\n return parseInt(i, 10);\n });\n }\n };\n self.initProp = function (propName) {\n if (!self.args[propName]) {\n return;\n }\n Object.keys(self.args[propName]).forEach(function (key) {\n self[propName][key] = self.args[propName][key];\n });\n };\n self.getStyleProperty = function (key) {\n if (self.styleKeys.indexOf(key) === -1) {\n return self.parentNodeStyle[key];\n }\n return self.style[key];\n };\n self.setStyleProperty = function (key, value, supressDrawAndEvent) {\n var isDim =\n [\n 'height',\n 'width',\n 'minHeight',\n 'minWidth',\n 'maxHeight',\n 'maxWidth',\n ].indexOf(key) !== -1;\n if (self.styleKeys.indexOf(key) === -1) {\n self.parentNodeStyle[key] = value;\n } else {\n if (/-/.test(key)) {\n key = self.dehyphenateProperty(key);\n }\n self.style[key] = value;\n self.parseStyleValue(key);\n }\n if (isDim) {\n self.resize();\n }\n if (!supressDrawAndEvent) {\n self.draw(true);\n self.dispatchEvent('stylechanged', { name: 'style', value: value });\n }\n };\n self.reloadStoredValues = function () {\n if (self.attributes.name && self.attributes.saveAppearance) {\n try {\n self.storedSettings = localStorage.getItem(\n self.storageName + '-' + self.attributes.name,\n );\n } catch (e) {\n console.warn('Error loading stored values. ' + e.message);\n self.storedSettings = undefined;\n }\n if (self.storedSettings) {\n try {\n self.storedSettings = JSON.parse(self.storedSettings);\n } catch (e) {\n console.warn('could not read settings from localStore', e);\n self.storedSettings = undefined;\n }\n }\n if (self.storedSettings) {\n if (\n typeof self.storedSettings.sizes === 'object' &&\n self.storedSettings.sizes !== null\n ) {\n self.sizes.rows = self.storedSettings.sizes.rows;\n self.sizes.columns = self.storedSettings.sizes.columns;\n ['trees', 'columns', 'rows'].forEach(function (i) {\n if (!self.sizes[i]) {\n self.sizes[i] = {};\n }\n });\n }\n if (typeof self.storedSettings.visibility === 'object') {\n self.getSchema().forEach(function (column) {\n if (\n self.storedSettings.visibility &&\n self.storedSettings.visibility[column.name] !== undefined\n ) {\n column.hidden = !self.storedSettings.visibility[column.name];\n }\n });\n }\n }\n }\n };\n self.init = function () {\n if (self.initialized) {\n return;\n }\n function addStyleKeyIfNoneExists(key) {\n if (self.styleKeys.indexOf(key) === -1) {\n self.styleKeys.push(key);\n }\n }\n var publicStyleKeyIntf = {};\n self.setAttributes();\n self.setStyle();\n self.initScrollBox();\n self.setDom();\n self.nodeType = 'canvas-datagrid';\n self.ie = /Trident/.test(window.navigator.userAgent);\n self.edge = /Edge/.test(window.navigator.userAgent);\n self.webKit = /WebKit/.test(window.navigator.userAgent);\n self.moz = /Gecko/.test(window.navigator.userAgent);\n self.mobile = /Mobile/i.test(window.navigator.userAgent);\n self.blankValues = [undefined, null, ''];\n self.cursorGrab = 'grab';\n self.cursorGrabing = 'grabbing';\n self.cursorGrab = self.webKit ? '-webkit-grab' : self.cursorGrab;\n self.cursorGrabing = self.moz ? '-webkit-grabbing' : self.cursorGrabbing;\n self.pointerLockPosition = { x: 0, y: 0 };\n Object.keys(self.style).forEach(self.parseStyleValue);\n self.intf.moveSelection = self.moveSelection;\n self.intf.deleteSelectedData = self.deleteSelectedData;\n self.intf.moveTo = self.moveTo;\n self.intf.addEventListener = self.addEventListener;\n self.intf.removeEventListener = self.removeEventListener;\n self.intf.dispatchEvent = self.dispatchEvent;\n /**\n * Releases grid resources and removes grid elements.\n * @memberof canvasDatagrid\n * @name dispose\n * @method\n */\n self.intf.dispose = self.dispose;\n /**\n * Appends the grid to another element later. Not implemented.\n * @memberof canvasDatagrid\n * @name appendTo\n * @method\n * @param {number} el The element to append the grid to.\n */\n self.intf.appendTo = self.appendTo;\n self.intf.getVisibleCellByIndex = self.getVisibleCellByIndex;\n self.intf.filters = self.filters;\n self.intf.sorters = self.sorters;\n self.intf.autosize = self.autosize;\n self.intf.beginEditAt = self.beginEditAt;\n self.intf.endEdit = self.endEdit;\n self.intf.setActiveCell = self.setActiveCell;\n self.intf.forEachSelectedCell = self.forEachSelectedCell;\n self.intf.scrollIntoView = self.scrollIntoView;\n self.intf.clearChangeLog = self.clearChangeLog;\n self.intf.gotoCell = self.gotoCell;\n self.intf.gotoRow = self.gotoRow;\n self.intf.addButton = self.addButton;\n self.intf.toggleCellCollapseTree = self.toggleCellCollapseTree;\n self.intf.expandCollapseCellTree = self.expandCollapseCellTree;\n self.intf.getHeaderByName = self.getHeaderByName;\n self.intf.getColumnWidth = self.getColumnWidth;\n self.intf.getRowHeight = self.getRowHeight;\n // internal: used by the web component connected/disconnected callbacks\n self.intf.observeResizeTargets = self.observeResizeTargets;\n self.intf.unobserveResizeTargets = self.unobserveResizeTargets;\n self.intf.findColumnScrollLeft = self.findColumnScrollLeft;\n self.intf.findRowScrollTop = self.findRowScrollTop;\n self.intf.fitColumnToValues = self.fitColumnToValues;\n self.intf.findColumnMaxTextLength = self.findColumnMaxTextLength;\n self.intf.disposeContextMenu = self.disposeContextMenu;\n self.intf.getCellAt = self.getCellAt;\n self.intf.groupColumns = self.groupColumns;\n self.intf.groupRows = self.groupRows;\n self.intf.removeGroupColumns = self.removeGroupColumns;\n self.intf.removeGroupRows = self.removeGroupRows;\n self.intf.toggleGroupColumns = self.toggleGroupColumns;\n self.intf.toggleGroupRows = self.toggleGroupRows;\n self.intf.getGroupsColumnBelongsTo = self.getGroupsColumnBelongsTo;\n self.intf.getGroupsRowBelongsTo = self.getGroupsRowBelongsTo;\n self.intf.isCellVisible = self.isCellVisible;\n self.intf.isRowVisible = self.isRowVisible;\n self.intf.isColumnVisible = self.isColumnVisible;\n self.intf.order = self.order;\n self.intf.draw = self.draw;\n self.intf.refresh = self.refresh;\n self.intf.isComponent = self.isComponent;\n self.intf.selectArea = self.selectArea;\n self.intf.clipElement = self.clipElement;\n self.intf.getSchemaFromData = self.getSchemaFromData;\n self.intf.setFilter = self.setFilter;\n self.intf.parentGrid = self.parentGrid;\n self.intf.toggleTree = self.toggleTree;\n self.intf.expandTree = self.expandTree;\n self.intf.collapseTree = self.collapseTree;\n self.intf.canvas = self.canvas;\n self.intf.context = self.ctx;\n self.intf.insertRow = self.insertRow;\n self.intf.deleteRow = self.deleteRow;\n self.intf.addRow = self.addRow;\n self.intf.insertColumn = self.insertColumn;\n self.intf.deleteColumn = self.deleteColumn;\n self.intf.addColumn = self.addColumn;\n self.intf.getClippingRect = self.getClippingRect;\n self.intf.setRowHeight = self.setRowHeight;\n self.intf.setColumnWidth = self.setColumnWidth;\n self.intf.resetColumnWidths = self.resetColumnWidths;\n self.intf.resetRowHeights = self.resetRowHeights;\n self.intf.resize = self.resize;\n self.intf.selectColumn = self.selectColumn;\n self.intf.selectRow = self.selectRow;\n self.intf.selectAll = self.selectAll;\n self.intf.selectNone = self.selectNone;\n self.intf.drawChildGrids = self.drawChildGrids;\n self.intf.assertPxColor = self.assertPxColor;\n self.intf.clearPxColorAssertions = self.clearPxColorAssertions;\n self.intf.integerToAlpha = self.integerToAlpha;\n self.intf.copy = self.copy;\n self.intf.cut = self.cut;\n self.intf.paste = self.paste;\n self.intf.setStyleProperty = self.setStyleProperty;\n self.intf.hideColumns = self.hideColumns;\n self.intf.unhideColumns = self.unhideColumns;\n self.intf.hideRows = self.hideRows;\n self.intf.unhideRows = self.unhideRows;\n Object.defineProperty(self.intf, 'defaults', {\n get: function () {\n return {\n styles: self.defaults.styles.reduce(function (a, i) {\n a[i[0]] = i[1];\n return a;\n }, {}),\n attributes: self.defaults.attributes.reduce(function (a, i) {\n a[i[0]] = i[1];\n return a;\n }, {}),\n };\n },\n });\n self.styleKeys = Object.keys(self.intf.defaults.styles);\n self.styleKeys\n .map(function (i) {\n return self.hyphenateProperty(i, false);\n })\n .forEach(addStyleKeyIfNoneExists);\n self.styleKeys\n .map(function (i) {\n return self.hyphenateProperty(i, true);\n })\n .forEach(addStyleKeyIfNoneExists);\n self.DOMStyles = window.getComputedStyle(document.body, null);\n self.styleKeys.concat(Object.keys(self.DOMStyles)).forEach(function (key) {\n // unless this line is here, Object.keys() will not work on <instance>.style\n publicStyleKeyIntf[key] = undefined;\n Object.defineProperty(publicStyleKeyIntf, key, {\n get: function () {\n return self.getStyleProperty(key);\n },\n set: function (value) {\n if (self.initialized) {\n self.appliedInlineStyles[key] = value;\n }\n self.setStyleProperty(key, value);\n },\n });\n });\n Object.defineProperty(self.intf, 'shadowRoot', {\n get: function () {\n return self.shadowRoot;\n },\n });\n Object.defineProperty(self.intf, 'activeCell', {\n get: function () {\n return self.activeCell;\n },\n });\n Object.defineProperty(self.intf, 'hasFocus', {\n get: function () {\n return self.hasFocus;\n },\n });\n Object.defineProperty(self.intf, 'hasActiveFilters', {\n get: function () {\n return self.hasActiveFilters();\n },\n });\n Object.defineProperty(self.intf, 'style', {\n get: function () {\n return publicStyleKeyIntf;\n },\n set: function (valueObject) {\n Object.keys(valueObject).forEach(function (key) {\n self.setStyleProperty(key, valueObject[key], true);\n });\n self.draw(true);\n self.dispatchEvent('stylechanged', {\n name: 'style',\n value: valueObject,\n });\n },\n });\n Object.defineProperty(self.intf, 'attributes', { value: {} });\n Object.keys(self.attributes).forEach(function (key) {\n Object.defineProperty(self.intf.attributes, key, {\n get: function () {\n return self.attributes[key];\n },\n set: function (value) {\n self.attributes[key] = value;\n if (key === 'name') {\n self.tryLoadStoredSettings();\n }\n if (\n key === 'rowTree' ||\n key === 'columnTree' ||\n key === 'columnTreeRowEndIndex'\n ) {\n self.initCellTreeSettings();\n }\n if (key === 'fillLastColumn') {\n self.resize(true);\n } else {\n self.draw(true);\n }\n self.dispatchEvent('attributechanged', {\n name: key,\n value: value[key],\n });\n },\n });\n });\n self.filters.string = function (value, filterFor) {\n if (filterFor === self.attributes.blanksText) {\n return self.blankValues.includes(\n value == null ? value : String(value).trim(),\n );\n }\n\n value = String(value);\n var filterRegExp,\n regEnd = /\\/(i|g|m)*$/,\n pattern = regEnd.exec(filterFor),\n flags = pattern ? pattern[0].substring(1) : '',\n flagLength = flags.length;\n self.invalidFilterRegEx = undefined;\n if (filterFor.substring(0, 1) === '/' && pattern) {\n try {\n filterRegExp = new RegExp(\n filterFor.substring(1, filterFor.length - (flagLength + 1)),\n flags,\n );\n } catch (e) {\n self.invalidFilterRegEx = e;\n return;\n }\n return filterRegExp.test(value);\n }\n return value.toString\n ? value\n .toString()\n .toLocaleUpperCase()\n .indexOf(filterFor.toLocaleUpperCase()) !== -1\n : false;\n };\n self.filters.number = function (value, filterFor) {\n if (filterFor === self.attributes.blanksText) {\n return self.blankValues.includes(\n value == null ? value : String(value).trim(),\n );\n }\n\n if (!filterFor) {\n return true;\n }\n if (value === filterFor) {\n return true;\n }\n // the filter text always arrives as a string; compare numerically\n // when both sides parse as numbers (#431)\n const numericValue = Number(value);\n const numericFilter = Number(filterFor);\n if (!Number.isNaN(numericValue) && !Number.isNaN(numericFilter)) {\n return numericValue === numericFilter;\n }\n return String(value) === String(filterFor);\n };\n ['formatters', 'filters', 'sorters'].forEach(self.initProp);\n self.applyComponentStyle(false, self.intf);\n self.reloadStoredValues();\n if (self.args.treeGridAttributes) {\n self.treeGridAttributes = self.args.treeGridAttributes;\n }\n if (self.args.cellGridAttributes) {\n self.cellGridAttributes = self.args.cellGridAttributes;\n }\n if (self.args.data) {\n self.intf.data = self.args.data;\n }\n if (self.intf.innerText || self.intf.textContent) {\n if (self.intf.dataType === 'application/x-canvas-datagrid') {\n self.intf.dataType = 'application/json+x-canvas-datagrid';\n }\n self.intf.data = self.intf.innerText || self.intf.textContent;\n }\n if (self.args.schema) {\n self.intf.schema = self.args.schema;\n }\n if (self.isChildGrid || !self.isComponent) {\n requestAnimationFrame(function () {\n self.resize(true);\n });\n } else {\n self.resize(true);\n }\n self.initialized = true;\n return self;\n };\n /**\n * Removes focus from the grid.\n * @memberof canvasDatagrid\n * @name blur\n * @method\n */\n self.intf.blur = function (e) {\n self.hasFocus = false;\n };\n /**\n * Focuses on the grid.\n * @memberof canvasDatagrid\n * @name focus\n * @method\n */\n self.intf.focus = function () {\n self.hasFocus = true;\n self.controlInput.focus();\n };\n if (self.shadowRoot || self.isChildGrid) {\n Object.defineProperty(self.intf, 'height', {\n get: function () {\n if (self.shadowRoot) {\n return self.shadowRoot.height;\n }\n return self.parentNode.height;\n },\n set: function (value) {\n if (self.shadowRoot) {\n self.shadowRoot.height = value;\n } else {\n self.parentNode.height = value;\n }\n self.resize(true);\n },\n });\n Object.defineProperty(self.intf, 'width', {\n get: function () {\n if (self.shadowRoot) {\n return self.shadowRoot.width;\n }\n return self.parentNode.width;\n },\n set: function (value) {\n if (self.shadowRoot) {\n self.shadowRoot.width = value;\n } else {\n self.parentNode.width = value;\n }\n self.resize(true);\n },\n });\n Object.defineProperty(self.intf, 'parentNode', {\n get: function () {\n return self.parentNode;\n },\n set: function (value) {\n if (!self.isChildGrid) {\n throw new TypeError(\n 'Cannot set property parentNode which has only a getter',\n );\n }\n self.parentNode = value;\n },\n });\n }\n Object.defineProperty(self.intf, 'visibleRowHeights', {\n get: function () {\n return self.visibleRowHeights;\n },\n });\n Object.defineProperty(self.intf, 'openChildren', {\n get: function () {\n return self.openChildren;\n },\n });\n Object.defineProperty(self.intf, 'childGrids', {\n get: function () {\n return Object.keys(self.childGrids).map(function (gridId) {\n return self.childGrids[gridId];\n });\n },\n });\n Object.defineProperty(self.intf, 'isChildGrid', {\n get: function () {\n return self.isChildGrid;\n },\n });\n Object.defineProperty(self, 'cursor', {\n get: function () {\n return self.parentNodeStyle.cursor;\n },\n set: function (value) {\n if (value === 'cell') {\n value = 'default';\n }\n if (self.currentCursor !== value) {\n self.parentNodeStyle.cursor = value;\n self.currentCursor = value;\n }\n },\n });\n Object.defineProperty(self.intf, 'orderDirection', {\n get: function () {\n return self.orderDirection;\n },\n set: function (value) {\n if (value !== 'desc') {\n value = 'asc';\n }\n self.orderDirection = value;\n self.order(self.orderBy, self.orderDirection);\n },\n });\n Object.defineProperty(self.intf, 'orderBy', {\n get: function () {\n return self.orderBy;\n },\n set: function (value) {\n if (\n self.getSchema().find(function (col) {\n return col.name === value;\n }) === undefined\n ) {\n throw new Error('Cannot sort by unknown column name.');\n }\n self.orderBy = value;\n self.order(self.orderBy, self.orderDirection);\n },\n });\n if (self.isComponent) {\n Object.defineProperty(self.intf, 'offsetHeight', {\n get: function () {\n return self.canvas.offsetHeight;\n },\n });\n Object.defineProperty(self.intf, 'offsetWidth', {\n get: function () {\n return self.canvas.offsetWidth;\n },\n });\n }\n Object.defineProperty(self.intf, 'scrollHeight', {\n get: function () {\n return self.scrollBox.scrollHeight;\n },\n });\n Object.defineProperty(self.intf, 'scrollWidth', {\n get: function () {\n return self.scrollBox.scrollWidth;\n },\n });\n Object.defineProperty(self.intf, 'scrollTop', {\n get: function () {\n return self.scrollBox.scrollTop;\n },\n set: function (value) {\n self.scrollBox.scrollTop = value;\n },\n });\n Object.defineProperty(self.intf, 'scrollLeft', {\n get: function () {\n return self.scrollBox.scrollLeft;\n },\n set: function (value) {\n self.scrollBox.scrollLeft = value;\n },\n });\n Object.defineProperty(self.intf, 'sizes', {\n get: function () {\n return self.sizes;\n },\n });\n Object.defineProperty(self.intf, 'parentDOMNode', {\n get: function () {\n return self.parentDOMNode;\n },\n });\n Object.defineProperty(self.intf, 'input', {\n get: function () {\n return self.input;\n },\n });\n Object.defineProperty(self.intf, 'controlInput', {\n get: function () {\n return self.controlInput;\n },\n });\n Object.defineProperty(self.intf, 'currentCell', {\n get: function () {\n return self.currentCell;\n },\n });\n Object.defineProperty(self.intf, 'visibleCells', {\n get: function () {\n return self.visibleCells;\n },\n });\n Object.defineProperty(self.intf, 'visibleRows', {\n get: function () {\n return self.visibleRows;\n },\n });\n let warnedForObsoleteSelections;\n Object.defineProperty(self.intf, 'selections', {\n get: function () {\n if (!warnedForObsoleteSelections) {\n console.warn(\n `DeprecationWarning: The property 'selections' is deprecated due to performance issue. ` +\n `And it will be removed in the future.` +\n `Please use new property 'selectionList' instead. ` +\n `Visit this link to get more information: ` +\n `https://github.com/TonyGermaneri/canvas-datagrid/pull/498`,\n );\n warnedForObsoleteSelections = true;\n }\n return self.getObsoleteSelectionMatrix();\n },\n });\n Object.defineProperty(self.intf, 'selectionList', {\n get: function () {\n return self.selections;\n },\n });\n Object.defineProperty(self.intf, 'dragMode', {\n get: function () {\n return self.dragMode;\n },\n });\n Object.defineProperty(self.intf, 'changes', {\n get: function () {\n return self.changes;\n },\n });\n self.intf.formatters = self.formatters;\n Object.defineProperty(self.intf, 'dataType', {\n get: function () {\n return self.dataType;\n },\n set: function (value) {\n if (!self.parsers[value]) {\n throw new Error('No parser for MIME type ' + value);\n }\n self.dataType = value;\n },\n });\n self.eventNames.forEach(function (eventName) {\n Object.defineProperty(self.intf, 'on' + eventName, {\n get: function () {\n return self.componentL1Events[eventName];\n },\n set: function (value) {\n self.events[eventName] = [];\n self.componentL1Events[eventName] = value;\n if (!value) {\n return;\n }\n self.addEventListener(eventName, value);\n },\n });\n });\n Object.defineProperty(self.intf, 'frozenRow', {\n get: function () {\n return self.frozenRow;\n },\n set: function (val) {\n if (isNaN(val)) {\n throw new TypeError('Expected value for frozenRow to be a number.');\n }\n if (self.visibleRows.length < val) {\n throw new RangeError(\n 'Cannot set a value larger than the number of visible rows.',\n );\n }\n self.frozenRow = val;\n },\n });\n Object.defineProperty(self.intf, 'frozenColumn', {\n get: function () {\n return self.frozenColumn;\n },\n set: function (val) {\n if (isNaN(val)) {\n throw new TypeError('Expected value for frozenRow to be a number.');\n }\n if (self.getVisibleSchema().length < val) {\n throw new RangeError(\n 'Cannot set a value larger than the number of visible columns.',\n );\n }\n self.frozenColumn = val;\n },\n });\n Object.defineProperty(self.intf, 'scrollIndexRect', {\n get: function () {\n return {\n top: self.scrollIndexTop,\n right: self.scrollIndexRight,\n bottom: self.scrollIndexBottom,\n left: self.scrollIndexLeft,\n };\n },\n });\n Object.defineProperty(self.intf, 'scrollPixelRect', {\n get: function () {\n return {\n top: self.scrollPixelTop,\n right: self.scrollPixelRight,\n bottom: self.scrollPixelBottom,\n left: self.scrollPixelLeft,\n };\n },\n });\n Object.defineProperty(self.intf, 'rowOrder', {\n get: function () {\n return self.orders.rows;\n },\n set: function (val) {\n if (!Array.isArray(val)) {\n throw new TypeError('Value must be an array.');\n }\n if (!self.originalData || val.length < self.originalData.length) {\n throw new RangeError(\n 'Array length must be equal to or greater than number of rows.',\n );\n }\n self.orders.rows = val;\n },\n });\n Object.defineProperty(self.intf, 'columnOrder', {\n get: function () {\n return self.orders.columns;\n },\n set: function (val) {\n if (!Array.isArray(val)) {\n throw new TypeError('Value must be an array.');\n }\n if (val.length < self.getSchema().length) {\n throw new RangeError(\n 'Array length must be equal to or greater than number of columns.',\n );\n }\n self.orders.columns = val;\n // redraw with the new order (#160)\n if (self.canvas) {\n self.resize(true);\n }\n },\n });\n Object.defineProperty(self.intf, 'selectionBounds', {\n get: function () {\n return self.getSelectionBounds();\n },\n });\n Object.defineProperty(self.intf, 'selectedRows', {\n get: function () {\n return self.getSelectedData(true);\n },\n });\n Object.defineProperty(self.intf, 'selectedCells', {\n get: function () {\n return self.getSelectedData();\n },\n });\n Object.defineProperty(self.intf, 'visibleSchema', {\n get: function () {\n return self.getVisibleSchema().map(function eachDataRow(col) {\n return col;\n });\n },\n });\n Object.defineProperty(self.intf, 'treeGridAttributes', {\n get: function () {\n return self.treeGridAttributes;\n },\n set: function setTreeGridAttributes(value) {\n self.treeGridAttributes = value;\n },\n });\n Object.defineProperty(self.intf, 'cellGridAttributes', {\n get: function () {\n return self.cellGridAttributes;\n },\n set: function setCellGridAttributes(value) {\n self.cellGridAttributes = value;\n },\n });\n Object.defineProperty(self.intf, 'fillCellCallback', {\n get: function () {\n return self.fillCellCallback;\n },\n set: function setFillCellCallback(value) {\n self.fillCellCallback = value;\n },\n });\n Object.defineProperty(self.intf, 'ctx', {\n get: function () {\n return self.ctx;\n },\n });\n Object.defineProperty(self.intf, 'schema', {\n get: function schemaGetter() {\n return self.getSchema();\n },\n set: function schemaSetter(value) {\n if (value === undefined) {\n // Issue #89 - allow schema to be set to initialized state\n self.schema = undefined;\n self.tempSchema = undefined;\n self.dispatchEvent('schemachanged', { schema: undefined });\n return;\n }\n if (!Array.isArray(value) || typeof value[0] !== 'object') {\n throw new Error('Schema must be an array of objects.');\n }\n if (value[0].name === undefined) {\n throw new Error(\n 'Expected schema to contain an object with at least a name property.',\n );\n }\n self.schema = value.map(function eachSchemaColumn(column, index) {\n column.width = column.width || self.style.cellWidth;\n column.filter = column.filter || self.filter(column.type);\n column.type = column.type || 'string';\n column.index = index;\n column.columnIndex = index;\n column.rowIndex = -1;\n return column;\n });\n self.tempSchema = undefined;\n self.createNewRowData();\n self.createColumnOrders();\n self.tryLoadStoredSettings();\n if (\n self.storedSettings &&\n typeof self.storedSettings.visibility === 'object'\n ) {\n self.schema.forEach(function hideEachSchemaColumn(column, index) {\n if (\n self.storedSettings &&\n self.storedSettings.visibility[column.name] !== undefined\n ) {\n column.hidden = !self.storedSettings.visibility[column.name];\n }\n });\n }\n self.resize(true);\n self.dispatchEvent('schemachanged', { schema: self.schema });\n },\n });\n /**\n * Gets an array of currently registered MIME types.\n * @memberof canvasDatagrid\n * @name getDataTypes\n * @method\n */\n self.intf.getTypes = function () {\n return Object.keys(self.parsers);\n };\n self.parseInnerHtml = function (data) {\n if (!data || /^ +$/.test(data)) {\n return [];\n }\n try {\n data = JSON.parse(data);\n } catch (e) {\n console.warn(\n Error(\n 'Cannot parse application/json+x-canvas-datagrid formated data. ' +\n e.message +\n ' \\nNote: canvas-datagrid.innerHTML is for string data only. ' +\n 'Use the canvas-datagrid.data property to set object data.',\n ),\n );\n }\n return data;\n };\n self.parsers['application/json+x-canvas-datagrid'] = function (\n data,\n callback,\n ) {\n self.parsers['application/x-canvas-datagrid'](\n self.parseInnerHtml(data),\n function (data, schema) {\n return callback(data, schema);\n },\n );\n };\n self.parsers['application/x-canvas-datagrid'] = function (data, callback) {\n return callback(data);\n };\n self.intf.parsers = self.parsers;\n // send to dataType ETL function to extract from input data\n // and transform into native [{}, {}] format\n self.etl = function (data, callback) {\n if (!self.intf.parsers[self.dataType]) {\n throw new Error('Unsupported data type.');\n }\n self.intf.parsers[self.dataType](data, function (data, schema) {\n // set the unfiltered/sorted data array\n self.originalData = data;\n self.viewData = Array.from(self.originalData);\n\n if (Array.isArray(schema)) {\n self.schema = schema;\n }\n // Issue #89 - allow schema to be auto-created every time data is set\n if (self.attributes.autoGenerateSchema) {\n self.schema = self.getSchemaFromData(data);\n }\n if (!self.schema) {\n self.tempSchema = self.getSchemaFromData(data);\n }\n if (self.getSchema()) {\n // keep a user's column order when the schema still fits (#116);\n // auto-generated schemas are re-ordered below\n var columnCount = self.getSchema().length;\n if (\n !self.orders.columns ||\n self.orders.columns.length !== columnCount\n ) {\n self.createColumnOrders();\n }\n }\n // apply filter, sort, etc to incoming dataset, set viewData:\n self.refresh();\n // empty data was set\n if (!self.schema && (self.originalData || []).length === 0) {\n self.tempSchema = [{ name: '' }];\n }\n self.fitColumnToValues('cornerCell', true);\n if (\n (self.tempSchema && !self.schema) ||\n self.attributes.autoGenerateSchema\n ) {\n self.createColumnOrders();\n self.dispatchEvent('schemachanged', { schema: self.tempSchema });\n }\n callback();\n });\n };\n Object.defineProperty(self.intf, 'viewData', {\n get: function () {\n return self.viewData;\n },\n });\n Object.defineProperty(self.intf, 'boundData', {\n get: function () {\n return self.originalData;\n },\n });\n Object.defineProperty(self.intf, 'data', {\n get: function dataGetter() {\n return self.originalData;\n },\n set: function dataSetter(value) {\n self.etl(value, function () {\n self.changes = [];\n self.createNewRowData();\n if (\n self.attributes.autoResizeColumns &&\n self.originalData.length > 0 &&\n self.storedSettings === undefined\n ) {\n self.autosize();\n }\n // set the header column to fit the numbers in it\n self.fitColumnToValues('cornerCell', true);\n self.createRowOrders();\n self.tryLoadStoredSettings();\n self.dispatchDataChanged('data');\n self.initCellTreeSettings();\n self.resize(true);\n });\n },\n });\n self.initScrollBox = function () {\n var sHeight = 0,\n sWidth = 0,\n scrollTop = 0,\n scrollLeft = 0,\n scrollHeight = 0,\n scrollWidth = 0,\n scrollBoxHeight = 20,\n scrollBoxWidth = 20;\n function setScrollTop(value, preventScrollEvent) {\n if (isNaN(value)) {\n throw new Error('ScrollTop value must be a number');\n }\n if (value < 0) {\n value = 0;\n }\n if (value > scrollHeight) {\n value = scrollHeight;\n }\n if (scrollHeight < 0) {\n value = 0;\n }\n scrollTop = value;\n if (!preventScrollEvent) {\n self.scroll();\n }\n if (self.button) {\n self.moveButtonPos();\n }\n }\n function setScrollLeft(value, preventScrollEvent) {\n if (isNaN(value)) {\n throw new Error('ScrollLeft value must be a number');\n }\n if (value < 0) {\n value = 0;\n }\n if (value > scrollWidth) {\n value = scrollWidth;\n }\n if (scrollWidth < 0) {\n value = 0;\n }\n scrollLeft = value;\n if (!preventScrollEvent) {\n self.scroll();\n }\n if (self.button) {\n self.moveButtonPos();\n }\n }\n self.scrollBox.toString = function () {\n return (\n '{\"width\": ' +\n scrollWidth.toFixed(2) +\n ', \"height\": ' +\n scrollHeight.toFixed(2) +\n ', \"left\": ' +\n scrollLeft.toFixed(2) +\n ', \"top\": ' +\n scrollTop.toFixed(2) +\n ', \"widthRatio\": ' +\n self.scrollBox.widthBoxRatio.toFixed(5) +\n ', \"heightRatio\": ' +\n self.scrollBox.heightBoxRatio.toFixed(5) +\n '}'\n );\n };\n self.scrollBox.scrollTo = function (x, y, supressDrawEvent) {\n setScrollLeft(x, true);\n setScrollTop(y, supressDrawEvent);\n };\n Object.defineProperty(self.scrollBox, 'scrollBoxHeight', {\n get: function () {\n return scrollBoxHeight;\n },\n set: function (value) {\n scrollBoxHeight = value;\n },\n });\n Object.defineProperty(self.scrollBox, 'scrollBoxWidth', {\n get: function () {\n return scrollBoxWidth;\n },\n set: function (value) {\n scrollBoxWidth = value;\n },\n });\n Object.defineProperty(self.scrollBox, 'height', {\n get: function () {\n return sHeight;\n },\n set: function (value) {\n sHeight = value;\n },\n });\n Object.defineProperty(self.scrollBox, 'width', {\n get: function () {\n return sWidth;\n },\n set: function (value) {\n sWidth = value;\n },\n });\n Object.defineProperty(self.scrollBox, 'scrollTop', {\n get: function () {\n return scrollTop;\n },\n set: setScrollTop,\n });\n Object.defineProperty(self.scrollBox, 'scrollLeft', {\n get: function () {\n return scrollLeft;\n },\n set: setScrollLeft,\n });\n Object.defineProperty(self.scrollBox, 'scrollHeight', {\n get: function () {\n return scrollHeight;\n },\n set: function (value) {\n if (scrollTop > value) {\n scrollTop = Math.max(value, 0);\n }\n scrollHeight = value;\n },\n });\n Object.defineProperty(self.scrollBox, 'scrollWidth', {\n get: function () {\n return scrollWidth;\n },\n set: function (value) {\n if (scrollLeft > value) {\n scrollLeft = Math.max(value, 0);\n }\n scrollWidth = value;\n },\n });\n };\n return;\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport { mergeHiddenRowRanges } from './groups/util';\n\nexport default function (self) {\n /**\n * Converts a integer into a letter A - ZZZZZ...\n * @memberof canvasDatagrid\n * @name integerToAlpha\n * @method\n * @param {column} n The number to convert.\n */\n self.integerToAlpha = function (n) {\n var ordA = 'a'.charCodeAt(0),\n ordZ = 'z'.charCodeAt(0),\n len = ordZ - ordA + 1,\n s = '';\n while (n >= 0) {\n s = String.fromCharCode((n % len) + ordA) + s;\n n = Math.floor(n / len) - 1;\n }\n return s;\n };\n /**\n * Inserts a new column before the specified index into the schema.\n * @tutorial schema\n * @memberof canvasDatagrid\n * @name insertColumn\n * @method\n * @param {column} c The column to insert into the schema.\n * @param {number} index The index of the column to insert before.\n */\n self.insertColumn = function (c, index) {\n var s = self.getSchema();\n if (s.length < index) {\n throw new Error('Index is beyond the length of the schema.');\n }\n self.validateColumn(c, s);\n s.splice(index, 0, c);\n\n self.originalData.forEach(function (row, rowIndex) {\n self.applyDefaultValue(row, c, rowIndex);\n });\n self.intf.schema = s;\n\n self.refresh();\n self.dispatchDataChanged('insertcolumn', { column: c, index: index });\n };\n /**\n * Deletes a column from the schema at the specified index.\n * @memberof canvasDatagrid\n * @name deleteColumn\n * @tutorial schema\n * @method\n * @param {number} index The index of the column to delete.\n */\n self.deleteColumn = function (index) {\n var schema = self.getSchema();\n\n // remove data matching this column name from data\n self.originalData.forEach(function (row) {\n delete row[schema[index].name];\n });\n\n schema.splice(index, 1);\n self.intf.schema = schema;\n\n self.refresh();\n self.dispatchDataChanged('deletecolumn', { index: index });\n };\n /**\n * Adds a new column into the schema.\n * @tutorial schema\n * @memberof canvasDatagrid\n * @name addColumn\n * @method\n * @param {column} c The column to add to the schema.\n */\n self.addColumn = function (c) {\n var s = self.getSchema();\n self.validateColumn(c, s);\n s.push(c);\n self.originalData.forEach(function (row, rowIndex) {\n self.applyDefaultValue(row, c, rowIndex);\n });\n self.intf.schema = s;\n\n self.refresh();\n self.dispatchDataChanged('addcolumn', { column: c });\n };\n /**\n * Deletes a row from the dataset at the specified index.\n * @memberof canvasDatagrid\n * @name deleteRow\n * @method\n * @param {number} index The index of the row to delete.\n */\n self.deleteRow = function (index) {\n self.originalData.splice(index, 1);\n self.setFilter();\n self.resize(true);\n self.dispatchDataChanged('deleterow', { index: index });\n };\n /**\n * Inserts a new row into the dataset before the specified index.\n * @memberof canvasDatagrid\n * @name insertRow\n * @method\n * @param {object} d data.\n * @param {number} index The index of the row to insert before.\n */\n self.insertRow = function (d, index) {\n if (self.originalData.length < index) {\n throw new Error('Index is beyond the length of the dataset.');\n }\n self.originalData.splice(index, 0, d);\n self.getSchema().forEach(function (c) {\n if (d[c.name] === undefined) {\n self.applyDefaultValue(self.originalData[index], c, index);\n }\n });\n\n // setFilter calls .refresh(), so we need not call it again:\n self.setFilter();\n\n self.resize(true);\n self.dispatchDataChanged('insertrow', { row: d, index: index });\n };\n /**\n * Adds a new row into the dataset.\n * @memberof canvasDatagrid\n * @name addRow\n * @method\n * @param {object} d data.\n */\n self.addRow = function (d) {\n self.originalData.push(d);\n self.getSchema().forEach(function (c) {\n if (d[c.name] === undefined) {\n self.applyDefaultValue(\n self.originalData[self.originalData.length - 1],\n c,\n self.originalData.length - 1,\n );\n }\n });\n\n // setFilter calls .refresh(), so we need not call it again:\n self.setFilter();\n\n self.resize(true);\n self.dispatchDataChanged('addrow', { row: d });\n };\n /**\n * Sets the height of a given row by index number.\n * @memberof canvasDatagrid\n * @name setRowHeight\n * @method\n * @param {number} rowIndex The index of the row to set.\n * @param {number} height Height to set the row to.\n */\n self.setRowHeight = function (rowIndex, height) {\n self.sizes.rows[rowIndex] = height;\n self.draw(true);\n };\n /**\n * Sets the width of a given column by index number.\n * @memberof canvasDatagrid\n * @name setColumnWidth\n * @method\n * @param {number} colIndex The index of the column to set.\n * @param {number} width Width to set the column to.\n */\n self.setColumnWidth = function (colIndex, width) {\n self.sizes.columns[colIndex] = width;\n self.draw(true);\n };\n /**\n * Removes any changes to the width of the columns due to user or api interaction, setting them back to the schema or style default.\n * @memberof canvasDatagrid\n * @name resetColumnWidths\n * @tutorial schema\n * @method\n */\n self.resetColumnWidths = function () {\n self.sizes.columns = {};\n self.draw(true);\n };\n /**\n * Removes any changes to the height of the rows due to user or api interaction, setting them back to the schema or style default.\n * @memberof canvasDatagrid\n * @name resetRowHeights\n * @tutorial schema\n * @method\n */\n self.resetRowHeights = function () {\n self.sizes.rows = {};\n self.draw(true);\n };\n /**\n * Sets the value of the filter.\n * @memberof canvasDatagrid\n * @name setFilter\n * @method\n * @param {string} column Name of the column to filter.\n * @param {string} value The value to filter for.\n */\n self.setFilter = function (column, value) {\n if (column === undefined && value === undefined) {\n self.columnFilters = {};\n } else if (column && (value === '' || value === undefined)) {\n delete self.columnFilters[column];\n } else {\n self.columnFilters[column] = value;\n if (self.attributes.showFilterInCell) {\n self.filterable.rows.push(0);\n self.orders.columns.forEach(function (value, index) {\n self.filterable.columns.push(index);\n });\n }\n }\n if (!Object.keys(self.columnFilters).length) {\n self.filterable = {\n rows: [],\n columns: [],\n };\n }\n self.refresh();\n };\n /**\n * Returns the number of pixels to scroll down to line up with row rowIndex.\n * @memberof canvasDatagrid\n * @name findRowScrollTop\n * @method\n * @param {number} rowIndex The row index of the row to scroll find.\n */\n self.findRowScrollTop = function (rowIndex) {\n if (self.scrollCache.y[rowIndex] === undefined) {\n throw new RangeError(\n `Row index ${rowIndex} out of range: ${self.scrollCache.y.length}.`,\n );\n }\n return self.scrollCache.y[rowIndex];\n };\n /**\n * Returns the number of pixels to scroll to the left to line up with column columnIndex.\n * @memberof canvasDatagrid\n * @name findColumnScrollLeft\n * @method\n * @param {number} columnIndex The column index of the column to find.\n */\n self.findColumnScrollLeft = function (columnIndex) {\n var i = Math.max(columnIndex - 1, 0);\n if (self.scrollCache.x[i] === undefined) {\n throw new Error('Column index out of range.');\n }\n return (\n self.scrollCache.x[i] -\n self.getColumnWidth(self.orders.columns[columnIndex])\n );\n };\n /**\n * Scrolls to the cell at columnIndex x, and rowIndex y. If you define both rowIndex and columnIndex additional calculations can be made to center the cell using the target cell's height and width. Defining only one rowIndex or only columnIndex will result in simpler calculations.\n * @memberof canvasDatagrid\n * @name gotoCell\n * @method\n * @param {number} x The column index of the cell to scroll to.\n * @param {number} y The row index of the cell to scroll to.\n * @param {number} [offsetX=0] Percentage offset the cell should be from the left edge (not including headers). The default is 0, meaning the cell will appear at the left edge. Valid values are 0 through 1. 1 = Left, 0 = Right, 0.5 = Center.\n * @param {number} [offsetY=0] Percentage offset the cell should be from the top edge (not including headers). The default is 0, meaning the cell will appear at the top edge. Valid values are 0 through 1. 1 = Bottom, 0 = Top, 0.5 = Center.\n */\n self.gotoCell = function (x, y, offsetX, offsetY) {\n var targetX = x === undefined ? undefined : self.findColumnScrollLeft(x),\n targetY = y === undefined ? undefined : self.findRowScrollTop(y),\n cell,\n sbw =\n self.scrollBox.width -\n (self.scrollBox.verticalBarVisible ? self.style.scrollBarWidth : 0),\n sbh =\n self.scrollBox.height -\n (self.scrollBox.horizontalBarVisible ? self.style.scrollBarWidth : 0);\n offsetX = offsetX === undefined ? 0 : offsetX;\n offsetY = offsetY === undefined ? 0 : offsetY;\n targetX -= sbw * offsetX;\n targetY -= sbh * offsetY;\n if (x !== undefined && y !== undefined) {\n self.scrollBox.scrollTo(targetX, targetY);\n if (!offsetX && !offsetY) {\n // nothing to correct; a deferred re-scroll would only undo a scroll\n // the user made in the meantime (#313)\n return;\n }\n requestAnimationFrame(function () {\n cell = self.getVisibleCellByIndex(x, y);\n // HACK: just don't offset if the target cell cannot be seen\n // TODO: offset does not work on very small grids, not sure why\n if (!cell) {\n return;\n }\n targetX += cell.width * offsetX;\n targetY += cell.height * offsetY;\n self.scrollBox.scrollTo(targetX, targetY);\n });\n } else if (x !== undefined) {\n self.scrollBox.scrollLeft = targetX;\n } else if (y !== undefined) {\n self.scrollBox.scrollTop = targetY;\n }\n };\n /**\n * Scrolls the row y.\n * @memberof canvasDatagrid\n * @name gotoRow\n * @method\n * @param {number} y The row index of the cell to scroll to.\n */\n self.gotoRow = function (y) {\n self.gotoCell(0, y);\n };\n /**\n * Add a button into the cell.\n * @memberof canvasDatagrid\n * @name addButton\n * @method\n * @param {number} columnIndex The column index of the cell to to add a button.\n * @param {number} rowIndex The row index of the cell to to add a button.\n * @param {object} offset Offset how far go away from cell.\n * @param {object} items a list of items to add into button menu.\n * @param {string} imgSrc icon path to add into button.\n */\n self.addButton = function (columnIndex, rowIndex, offset, items, imgSrc) {\n var cells = self.visibleCells.filter(function (c) {\n return c.sortColumnIndex === columnIndex && c.sortRowIndex === rowIndex;\n });\n\n self.attachButton(\n {\n top: cells[0].y + cells[0].height + offset.y,\n left: cells[0].x + cells[0].width + offset.x,\n },\n items,\n imgSrc,\n );\n };\n\n /**\n * Expand/Collapse CellTree.\n * @memberof canvasDatagrid\n * @name toggleCellCollapseTree\n * @method\n * @param {array} treeData The array of cellTree to expand or collapse.\n */\n\n self.toggleCellCollapseTree = function (treeData) {\n for (let type in treeData) {\n for (let t of treeData[type])\n if (t.length > 0) self.toggleCollapseTree(t[0], t[1], type);\n }\n self.draw();\n };\n\n /**\n * Expand/Collapse CellTree.\n * @memberof canvasDatagrid\n * @name expandCollapseCellTree\n * @method\n * @param {array} treeData The array of cellTree to expand or collapse.\n */\n\n self.expandCollapseCellTree = function (treeData) {\n for (let type in treeData) {\n for (let t of treeData[type])\n if (t.length > 0) self.cellTreeExpandCollapse(t[0], t[1], type);\n }\n self.draw();\n };\n\n /**\n * Scrolls the cell at cell x, row y into view if it is not already.\n * @memberof canvasDatagrid\n * @name scrollIntoView\n * @method\n * @param {number} x The column index of the cell to scroll into view.\n * @param {number} y The row index of the cell to scroll into view.\n * @param {number} [offsetX=0] Percentage offset the cell should be from the left edge (not including headers). The default is 0, meaning the cell will appear at the left edge. Valid values are 0 through 1. 1 = Left, 0 = Right, 0.5 = Center.\n * @param {number} [offsetY=0] Percentage offset the cell should be from the top edge (not including headers). The default is 0, meaning the cell will appear at the top edge. Valid values are 0 through 1. 1 = Bottom, 0 = Top, 0.5 = Center.\n */\n self.scrollIntoView = function (x, y, offsetX, offsetY) {\n const matched = self.visibleCells.filter(function (cell) {\n return (\n (cell.rowIndex === y || y === undefined) &&\n (cell.columnIndex === x || x === undefined) &&\n cell.x > 0 &&\n cell.y > 0 &&\n cell.x + cell.width < self.width &&\n cell.y + cell.height < self.height\n );\n });\n if (matched.length === 1 && x !== undefined && y !== undefined) {\n // goto specific cell and its part be hidden by header\n if (\n matched[0].x < self.getRowHeaderCellWidth() ||\n matched[0].y < self.getColumnHeaderCellHeight()\n )\n matched.length = 0;\n }\n if (matched.length === 0) {\n self.gotoCell(x, y, offsetX, offsetY);\n }\n };\n /**\n * Sets the active cell. Requires redrawing.\n * @memberof canvasDatagrid\n * @name setActiveCell\n * @method\n * @param {number} x The column index of the cell to set active.\n * @param {number} y The row index of the cell to set active.\n */\n self.setActiveCell = function (x, y) {\n if (typeof x === 'undefined') return;\n if (x < 0) {\n x = 0;\n }\n if (y < 0) {\n y = 0;\n }\n self.activeCell = {\n rowIndex: y,\n columnIndex: x,\n };\n self.dispatchEvent('activecellchanged', {\n cell: self.activeCell,\n });\n };\n\n /**\n * Dispatches `datachanged` with the source of the change so listeners can\n * react to edits, pastes, deletions and row/column changes, not only to the\n * data setter (#250, #512).\n * @param {string} source One of data, edit, paste, cut, delete, fill, addrow, insertrow, deleterow, addcolumn, insertcolumn, deletecolumn.\n * @param {object} [details] Extra event details.\n */\n self.dispatchDataChanged = function (source, details) {\n self.dispatchEvent(\n 'datachanged',\n Object.assign({ data: self.originalData, source: source }, details || {}),\n );\n };\n /**\n * Dispatches the `resizerow` event with one consistent payload (#503).\n * Canonical keys: `rowIndex`, `height`, `width`, `x`, `y`, `draggingItem`,\n * `NativeEvent`. `cellHeight` and `row` are kept as deprecated aliases of\n * `height` for listeners written against older versions.\n * @param {object} details Event details; `height` is required.\n * @returns {boolean} true when a listener called preventDefault.\n */\n self.dispatchResizeRow = function (details) {\n var ev = Object.assign({}, details);\n if (ev.y === undefined) {\n ev.y = ev.height;\n }\n ev.cellHeight = ev.height;\n ev.row = ev.height;\n return self.dispatchEvent('resizerow', ev);\n };\n /**\n * Collapse a tree grid by row index.\n * @memberof canvasDatagrid\n * @name collapseTree\n * @method\n * @param {number} index The index of the row to collapse.\n */\n self.collapseTree = function (rowIndex) {\n self.dispatchEvent('collapsetree', {\n childGrid: self.childGrids[rowIndex],\n data: self.viewData[rowIndex],\n rowIndex: rowIndex,\n });\n self.openChildren[rowIndex].blur();\n self.openChildren[rowIndex].dispose();\n delete self.openChildren[rowIndex];\n delete self.sizes.trees[rowIndex];\n delete self.childGrids[rowIndex];\n self.dispatchResizeRow({\n height: self.style.cellHeight,\n rowIndex: rowIndex,\n });\n self.resize(true);\n self.draw(true);\n };\n /**\n * Expands a tree grid by row index.\n * @memberof canvasDatagrid\n * @name expandTree\n * @method\n * @param {number} index The index of the row to expand.\n */\n self.expandTree = function (rowIndex) {\n // copy so the caller's object is not mutated; `self.args` is empty in\n // web-component mode, the value lives on the instance (#444)\n var trArgs = Object.assign({}, self.treeGridAttributes || {}),\n columnHeaderCellHeight = self.getColumnHeaderCellHeight(),\n rowHeaderCellWidth =\n self.sizes.columns.cornerCell || self.style.rowHeaderCellWidth,\n h = self.sizes.trees[rowIndex] || self.style.treeGridHeight,\n treeGrid;\n if (!self.childGrids[rowIndex]) {\n trArgs.debug = self.attributes.debug;\n trArgs.name = self.attributes.saveAppearance\n ? self.attributes.name + 'tree' + rowIndex\n : undefined;\n trArgs.style = trArgs.style || self.style;\n trArgs.parentNode = {\n parentGrid: self.intf,\n nodeType: 'canvas-datagrid-tree',\n offsetHeight: h,\n offsetWidth: self.width - rowHeaderCellWidth,\n header: { width: self.width - rowHeaderCellWidth },\n offsetLeft: rowHeaderCellWidth,\n offsetTop: columnHeaderCellHeight,\n offsetParent: self.intf.parentNode,\n parentNode: self.intf.parentNode,\n style: 'tree',\n data: self.viewData[rowIndex],\n };\n treeGrid = self.createGrid(trArgs);\n self.childGrids[rowIndex] = treeGrid;\n }\n treeGrid = self.childGrids[rowIndex];\n treeGrid.visible = true;\n self.dispatchEvent('expandtree', {\n treeGrid: treeGrid,\n data: self.viewData[rowIndex],\n rowIndex: rowIndex,\n });\n self.openChildren[rowIndex] = treeGrid;\n self.sizes.trees[rowIndex] = h;\n self.dispatchResizeRow({\n height: self.style.cellHeight,\n rowIndex: rowIndex,\n });\n self.resize(true);\n };\n /**\n * Toggles tree grid open and close by row index.\n * @memberof canvasDatagrid\n * @name toggleTree\n * @method\n * @param {number} index The index of the row to toggle.\n */\n self.toggleTree = function (rowIndex) {\n var i = self.openChildren[rowIndex];\n if (i) {\n return self.collapseTree(rowIndex);\n }\n self.expandTree(rowIndex);\n };\n /**\n * Returns a header from the schema by name.\n * @memberof canvasDatagrid\n * @name getHeaderByName\n * @tutorial schema\n * @method\n * @returns {header} header with the selected name, or undefined.\n * @param {string} name The name of the column to resize.\n */\n self.getHeaderByName = function (name) {\n var x,\n i = self.getSchema();\n for (x = 0; x < i.length; x += 1) {\n if (i[x].name === name) {\n return i[x];\n }\n }\n };\n /**\n * Hide column/columns\n * @memberof canvasDatagrid\n * @name hideColumns\n * @method\n * @param {number} beginColumnOrderIndex The begin column order index\n * @param {number} [endColumnOrderIndex] The end column order index\n */\n self.hideColumns = function (beginColumnOrderIndex, endColumnOrderIndex) {\n const schema = self.getSchema();\n const orders = self.orders.columns;\n const hiddenColumns = [];\n if (typeof endColumnOrderIndex !== 'number')\n endColumnOrderIndex = beginColumnOrderIndex;\n for (\n let orderIndex = beginColumnOrderIndex;\n orderIndex <= endColumnOrderIndex;\n orderIndex++\n ) {\n const columnIndex = orders[orderIndex];\n if (columnIndex >= 0 && !schema[columnIndex].hidden) {\n hiddenColumns.push(columnIndex);\n schema[columnIndex].hidden = true;\n\n self.dispatchEvent('columnhide', {\n columnIndex,\n });\n }\n }\n\n if (hiddenColumns.length > 0) {\n self.setStorageData();\n setTimeout(function () {\n self.resize(true);\n }, 10);\n }\n\n self.dispatchEvent('hidecolumns', {\n hiddenColumns,\n });\n };\n /**\n * Unihde column/columns\n * @memberof canvasDatagrid\n * @name unhideColumns\n * @method\n * @param {number} beginColumnOrderIndex The begin column order index\n * @param {number} [endColumnOrderIndex] The end column order index\n */\n self.unhideColumns = function (beginColumnOrderIndex, endColumnOrderIndex) {\n const orders = self.orders.columns;\n const schema = self.getSchema();\n\n for (let i = beginColumnOrderIndex; i <= endColumnOrderIndex; i++) {\n const columnIndex = orders[i];\n const s = schema[columnIndex];\n\n if (s && s.hidden) {\n s.hidden = false;\n\n self.dispatchEvent('columnunhide', {\n columnIndex,\n });\n }\n }\n self.refresh();\n };\n /**\n * Hide rows\n * @memberof canvasDatagrid\n * @name hideRows\n * @method\n * @param {number} beginRowIndex The begin row index\n * @param {number} endRowIndex The end row index\n */\n self.hideRows = function (beginRowIndex, endRowIndex) {\n if (\n mergeHiddenRowRanges(self.hiddenRowRanges, [beginRowIndex, endRowIndex])\n )\n self.refresh();\n };\n /**\n * Unhide rows\n * @memberof canvasDatagrid\n * @name unhideRows\n * @method\n * @param {number} beginRowIndex The begin row index\n * @param {number} endRowIndex The end row index\n */\n self.unhideRows = function (beginRowIndex, endRowIndex) {\n self.hiddenRowRanges = self.hiddenRowRanges.filter(\n (range) => range[0] !== beginRowIndex || range[1] !== endRowIndex,\n );\n self.refresh();\n };\n /**\n * Resizes a column to fit the longest value in the column. Call without a value to resize all columns.\n * Warning, can be slow on very large record sets (1m records ~3-5 seconds on an i7).\n * @memberof canvasDatagrid\n * @name fitColumnToValues\n * @method\n * @param {string} name The name of the column to resize.\n */\n self.fitColumnToValues = function (name, internal) {\n if (!self.canvas) {\n return;\n }\n\n if (name === undefined) {\n // fit every column, as documented (#193)\n self.getSchema().forEach(function (column) {\n self.fitColumnToValues(column.name, true);\n });\n if (!internal) {\n self.resize();\n self.draw(true);\n }\n return;\n }\n\n const header = name === 'cornerCell' ? null : self.getHeaderByName(name);\n if (name !== 'cornerCell' && !header) {\n console.warn('fitColumnToValues: no column named %s', name);\n return;\n }\n const columnIndex = name === 'cornerCell' ? -1 : header.index;\n\n const newSize = Math.max(\n self.findColumnMaxTextLength(name),\n self.style.minColumnWidth,\n );\n\n self.sizes.columns[columnIndex] = newSize;\n\n self.dispatchEvent('resizecolumn', {\n x: newSize,\n y: self.resizingStartingHeight,\n draggingItem: self.currentCell,\n });\n\n if (!internal) {\n self.resize();\n self.draw(true);\n }\n };\n /**\n * Checks if a cell is currently visible.\n * @memberof canvasDatagrid\n * @name isCellVisible\n * @overload\n * @method\n * @returns {boolean} when true, the cell is visible, when false the cell is not currently drawn.\n * @param {number} columnIndex The column index of the cell to check.\n * @param {number} rowIndex The row index of the cell to check.\n */\n self.isCellVisible = function (cell, rowIndex) {\n // overload\n if (rowIndex !== undefined) {\n return (\n self.visibleCells.filter(function (c) {\n return c.columnIndex === cell && c.rowIndex === rowIndex;\n }).length > 0\n );\n }\n var x,\n l = self.visibleCells.length;\n for (x = 0; x < l; x += 1) {\n if (\n cell.x === self.visibleCells[x].x &&\n cell.y === self.visibleCells[x].y\n ) {\n return true;\n }\n }\n return false;\n };\n /**\n * Sets the order of the data.\n * @memberof canvasDatagrid\n * @name order\n * @method\n * @param {number} columnName Name of the column to be sorted.\n * @param {string} direction `asc` for ascending or `desc` for descending.\n * @param {function} [sortFunction] When defined, override the default sorting method defined in the column's schema and use this one.\n * @param {bool} [dontSetStorageData] Don't store this setting for future use.\n */\n self.order = function (\n columnName,\n direction,\n sortFunction,\n dontSetStorageData,\n ) {\n if (!self.attributes.allowSorting) {\n self.refresh();\n return;\n }\n var f,\n c = self.getSchema().filter(function (col) {\n return col.name === columnName;\n });\n if (\n self.dispatchEvent('beforesortcolumn', {\n name: columnName,\n direction: direction,\n })\n ) {\n return;\n }\n self.orderBy = columnName;\n self.orderDirection = direction;\n if (!self.viewData || self.viewData.length === 0) {\n return;\n }\n if (c.length === 0) {\n throw new Error('Cannot sort. No such column name');\n }\n f = sortFunction || c[0].sorter || self.sorters[c[0].type];\n if (!f && c[0].type !== undefined) {\n console.warn(\n 'Cannot sort type \"%s\" falling back to string sort.',\n c[0].type,\n );\n }\n self.orderings.add(\n columnName,\n direction,\n typeof f === 'function' ? f : self.sorters.string,\n );\n self.refresh();\n self.dispatchEvent('sortcolumn', {\n name: columnName,\n direction: direction,\n });\n\n if (dontSetStorageData) {\n return;\n }\n self.setStorageData();\n };\n\n /**\n * Add grouping\n * @param {'columns'|'rows'} groupFor\n * @method\n * @param {number} from\n * @param {number} to\n */\n function addGroup(groupFor, from, to) {\n let newRow = false;\n const allGroups =\n groupFor === 'rows' ? self.groupedRows : self.groupedColumns;\n for (let i = allGroups.length - 1; i >= 0; i--) {\n const groups = allGroups[i];\n const min = groups[0].from,\n max = groups[groups.length - 1].to;\n if (from <= min && to >= max) {\n if (from === min && to === max && groups.length === 1) return; // nothings happened\n // new group wrap this row\n continue;\n }\n for (let gi = 0; gi < groups.length; gi++) {\n const g = groups[gi];\n if (from > g.to) continue;\n if (from >= g.from) {\n if (to > g.to) {\n if (from === g.from) {\n allGroups.splice(i, 0, [{ from, to, collapsed: false }]);\n self.refresh();\n return;\n }\n throw new Error(`Can't group these ${groupFor}`);\n }\n if (to === g.to) {\n if (from === g.from) return; // nothings happened\n }\n newRow = true;\n break;\n }\n if (to >= g.from) {\n if (to < g.to) throw new Error(`Can't group these ${groupFor}`);\n allGroups.splice(i, 0, [{ from, to, collapsed: false }]);\n } else {\n groups.splice(gi, 0, { from, to, collapsed: false });\n }\n self.refresh();\n return;\n }\n if (newRow) continue;\n groups.push({ from, to, collapsed: false });\n self.refresh();\n return;\n }\n if (newRow) allGroups.push([{ from, to, collapsed: false }]);\n else allGroups.unshift([{ from, to, collapsed: false }]);\n self.refresh();\n }\n /**\n * Remove grouping\n * @param {Array<Array<{from:number,to:number,collapsed:boolean}>>} allGroups\n * @method\n * @param {number} from\n * @param {number} to\n */\n function removeGroup(allGroups, from, to) {\n for (let i = 0; i < allGroups.length; i++) {\n const groups = allGroups[i];\n for (let gi = 0; gi < groups.length; gi++) {\n const group = groups[gi];\n if (group.from === from && group.to === to) {\n if (groups.length <= 1) allGroups.splice(i, 1);\n else groups.splice(gi, 1);\n self.refresh();\n return;\n }\n }\n }\n }\n /**\n * Grouping columns\n * @memberof canvasDatagrid\n * @name groupColumns\n * @method\n * @param {number|string} firstColumnName Name of the first column to be grouped.\n * @param {number|string} lastColumnName Name of the last column to be grouped.\n */\n self.groupColumns = function (firstColumnName, lastColumnName) {\n /** @type {Array<{name: string,columnIndex:number}>} */\n const schema = self.getSchema();\n let firstOne, lastOne;\n for (let i = 0; i < schema.length; i++) {\n const it = schema[i];\n if (firstOne && lastOne) break;\n if (it.name === firstColumnName) {\n firstOne = it;\n continue;\n }\n if (it.name === lastColumnName) {\n lastOne = it;\n continue;\n }\n }\n if (!firstOne) throw new Error(`No such column name for first column`);\n if (!lastOne) throw new Error(`No such column name for last column`);\n if (lastOne.columnIndex > firstOne.columnIndex !== true)\n throw new Error(`Can't group these columns`);\n\n const from = firstOne.columnIndex;\n const to = lastOne.columnIndex;\n const ev = { group: { type: 'columns', from, to } };\n try {\n addGroup('columns', from, to);\n } catch (error) {\n ev.error = error;\n }\n self.dispatchEvent('aftercreategroup', ev);\n };\n /**\n * Grouping columns\n * @memberof canvasDatagrid\n * @name groupRows\n * @method\n * @param {number} rowIndexFrom The row index which is the beginning of the group\n * @param {number} rowIndexTo The row index which is the end of the group\n */\n self.groupRows = function (rowIndexFrom, rowIndexTo) {\n if (!Number.isInteger(rowIndexFrom) || rowIndexFrom < 0)\n throw new Error(`No such row for the beginning of the group`);\n\n const dataLength = self.viewData.length;\n if (\n !Number.isInteger(rowIndexFrom) ||\n rowIndexTo <= rowIndexFrom ||\n rowIndexTo >= dataLength\n )\n throw new Error(`No such row for the end of the group`);\n const ev = {\n group: {\n type: 'rows',\n from: rowIndexFrom,\n to: rowIndexTo,\n },\n };\n try {\n addGroup('rows', rowIndexFrom, rowIndexTo);\n } catch (error) {\n ev.error = error;\n }\n self.dispatchEvent('aftercreategroup', ev);\n };\n /**\n * Remove grouping columns\n * @memberof canvasDatagrid\n * @name removeGroupColumns\n * @method\n * @param {number|string} firstColumnName Name of the first column to be grouped.\n * @param {number|string} lastColumnName Name of the last column to be grouped.\n */\n self.removeGroupColumns = function (firstColumnName, lastColumnName) {\n /** @type {Array<{name:string,columnIndex:number}>} */\n const schema = self.getSchema();\n let firstOne, lastOne;\n for (let i = 0; i < schema.length; i++) {\n const it = schema[i];\n if (firstOne && lastOne) break;\n if (it.name === firstColumnName) {\n firstOne = it;\n continue;\n }\n if (it.name === lastColumnName) {\n lastOne = it;\n continue;\n }\n }\n if (!firstOne) throw new Error(`No such column name for first column`);\n if (!lastOne) throw new Error(`No such column name for last column`);\n const from = firstOne.columnIndex;\n const to = lastOne.columnIndex;\n removeGroup(self.groupedColumns, from, to);\n };\n /**\n * Remove grouping columns\n * @memberof canvasDatagrid\n * @name removeGroupRows\n * @method\n * @param {number} rowIndexFrom The row index which is the beginning of the group\n * @param {number} rowIndexTo The row index which is the end of the group\n */\n self.removeGroupRows = function (rowIndexFrom, rowIndexTo) {\n removeGroup(self.groupedRows, rowIndexFrom, rowIndexTo);\n };\n /**\n * Toggle(expand/collapsed) grouping columns\n * @memberof canvasDatagrid\n * @name toggleGroupColumns\n * @method\n * @param {number|string} firstColumnName Name of the first column to be grouped.\n * @param {number|string} lastColumnName Name of the last column to be grouped.\n */\n self.toggleGroupColumns = function (firstColumnName, lastColumnName) {\n /** @type {Array<{name:string,columnIndex:number}>} */\n const schema = self.getSchema();\n let firstOne, lastOne;\n for (let i = 0; i < schema.length; i++) {\n const it = schema[i];\n if (firstOne && lastOne) break;\n if (it.name === firstColumnName) {\n firstOne = it;\n continue;\n }\n if (it.name === lastColumnName) {\n lastOne = it;\n continue;\n }\n }\n if (!firstOne || !lastOne) return;\n const from = firstOne.columnIndex;\n const to = lastOne.columnIndex;\n if (self.toggleGroup({ type: 'c', from, to })) {\n self.disposeContextMenu();\n self.setStorageData();\n self.refresh();\n }\n };\n /**\n * Toggle(expand/collapsed) grouping rows\n * @memberof canvasDatagrid\n * @name toggleGroupRows\n * @method\n * @param {number} rowIndexFrom The row index which is the beginning of the group\n * @param {number} rowIndexTo The row index which is the end of the group\n */\n self.toggleGroupRows = function (rowIndexFrom, rowIndexTo) {\n if (self.toggleGroup({ type: 'r', from: rowIndexFrom, to: rowIndexTo })) {\n self.disposeContextMenu();\n self.setStorageData();\n self.refresh();\n }\n };\n\n self.isInGrid = function (e) {\n if (e.x < 0 || e.x > self.width || e.y < 0 || e.y > self.height) {\n return false;\n }\n return true;\n };\n\n /**\n * Moves data in the provided selection to another position in the grid. Moving data off the edge of the schema (columns/x) will truncate data.\n * @memberof canvasDatagrid\n * @name moveTo\n * @method\n * @param {array} sel 2D array representing selected rows and columns. `canvasDatagrid.selections` is in this format and can be used here.\n * @param {number} x The column index to start inserting the selection at.\n * @param {number} y The row index to start inserting the selection at.\n */\n self.moveTo = function (sel, x, y) {\n // TODO: optimize this function,\n // we just transform the `sel` to obselete selection matrix\n sel = self.getObsoleteSelectionMatrix(sel);\n\n // TODO: this function is not migrated done\n var selectedData = self.getSelectedData(),\n visibleSchema = self.getVisibleSchema(),\n selectionLength = sel.length,\n xi,\n maxRowLength = -Infinity,\n minXi = Infinity,\n yi = y - 1;\n\n sel.forEach(function (row, rowIndex) {\n if (rowIndex === selectionLength) {\n return;\n }\n if (row.length === 0) {\n return;\n }\n minXi = Math.min(self.getVisibleColumnIndexOf(x), minXi);\n maxRowLength = Math.max(maxRowLength, row.length);\n row.forEach(function (colIndex) {\n // intentional redef of colIndex\n colIndex = self.getVisibleColumnIndexOf(colIndex);\n if (!visibleSchema[colIndex]) {\n return;\n }\n // TODO:\n if (!self.data) {\n self.data = {};\n }\n if (!self.data[rowIndex]) {\n self.data[rowIndex] = {};\n }\n // TODO:\n self.data[rowIndex][visibleSchema[colIndex].name] = null;\n });\n });\n\n sel.forEach(function (row, index) {\n var lastSourceIndex;\n yi += 1;\n xi = self.getVisibleColumnIndexOf(x);\n row.forEach(function (colIndex, cidx) {\n colIndex = self.getVisibleColumnIndexOf(colIndex);\n if (cidx > 0) {\n // this confusing bit of nonsense figures out\n // if the selection has skipped cells\n xi += colIndex - lastSourceIndex;\n }\n lastSourceIndex = colIndex;\n if (\n colIndex === -1 ||\n !visibleSchema[xi] ||\n !visibleSchema[colIndex] ||\n // TODO:\n self.data.length - 1 < yi ||\n yi < 0\n ) {\n return;\n }\n // TODO:\n if (!self.data[yi]) {\n self.data[yi] = {};\n }\n // TODO:\n self.data[yi][visibleSchema[xi].name] =\n selectedData[index][visibleSchema[colIndex].name];\n });\n });\n };\n /**\n * Get the column group info given column belongs to\n * @memberof canvasDatagrid\n * @name getGroupsColumnBelongsTo\n * @method\n * @param {number} columnIndex Column index.\n * @returns {Array<{from:number,to:number,collapsed:boolean}>}\n */\n self.getGroupsColumnBelongsTo = function (columnIndex) {\n if (!self.attributes.allowGroupingColumns) return [];\n const result = [];\n for (let i = 0; i < self.groupedColumns.length; i++) {\n const groups = self.groupedColumns[i];\n for (let j = 0; j < groups.length; j++) {\n const group = groups[j];\n if (columnIndex >= group.from && columnIndex <= group.to) {\n result.push(group);\n break;\n }\n }\n }\n return result;\n };\n /**\n * Get the row group info given row belongs to\n * @memberof canvasDatagrid\n * @name getGroupsRowBelongsTo\n * @method\n * @param {number} rowIndex Row index.\n * @returns {Array<{from:number,to:number,collapsed:boolean}>}\n */\n self.getGroupsRowBelongsTo = function (rowIndex) {\n if (!self.attributes.allowGroupingRows) return [];\n const result = [];\n for (let i = 0; i < self.groupedRows.length; i++) {\n const groups = self.groupedRows[i];\n for (let j = 0; j < groups.length; j++) {\n const group = groups[j];\n if (rowIndex >= group.from && rowIndex <= group.to) {\n result.push(group);\n break;\n }\n }\n }\n return result;\n };\n\n /**\n * Checks if a given column is visible.\n * @memberof canvasDatagrid\n * @name isColumnVisible\n * @method\n * @returns {boolean} When true, the column is visible.\n * @param {number} columnIndex Column index.\n */\n self.isColumnVisible = function (columnIndex) {\n return (\n self.visibleCells.filter(function (c) {\n return c.columnIndex === columnIndex;\n }).length > 0\n );\n };\n /**\n * Checks if a given row is visible.\n * @memberof canvasDatagrid\n * @name isRowVisible\n * @method\n * @returns {boolean} When true, the row is visible.\n * @param {number} rowIndex Row index.\n */\n self.isRowVisible = function (rowIndex) {\n return (\n self.visibleCells.filter(function (c) {\n return c.rowIndex === rowIndex;\n }).length > 0\n );\n };\n /**\n * Gets the cell at columnIndex and rowIndex.\n * @memberof canvasDatagrid\n * @name getVisibleCellByIndex\n * @method\n * @returns {cell} cell at the selected location.\n * @param {number} x Column index.\n * @param {number} y Row index.\n */\n self.getVisibleCellByIndex = function (x, y) {\n return self.visibleCells.filter(function (c) {\n return c.columnIndex === x && c.rowIndex === y;\n })[0];\n };\n /**\n * Get an unhide indicator at grid pixel coordinate x and y.\n * @memberof canvasDatagrid\n * @name getUnhideIndicator\n * @method\n * @param {number} x Number of pixels from the left.\n * @param {number} y Number of pixels from the top.\n */\n self.getUnhideIndicator = function (x, y) {\n const indicators = self.visibleUnhideIndicators;\n if (indicators.length <= 0) return;\n for (let i = 0; i < indicators.length; i++) {\n const indicator = indicators[i];\n if (\n x >= indicator.x &&\n y >= indicator.y &&\n x <= indicator.x2 &&\n y <= indicator.y2\n )\n return indicator;\n }\n };\n /**\n * Get a column group at grid pixel coordinate x and y.\n * @memberof canvasDatagrid\n * @name getColumnGroupAt\n * @method\n * @param {number} x Number of pixels from the left.\n * @param {number} y Number of pixels from the top.\n */\n self.getColumnGroupAt = function (x, y) {\n const groups = self.groupedColumns.length;\n if (groups <= 0) return;\n const yZero = self.getColumnGroupAreaHeight();\n if (y >= yZero) return;\n for (let i = 0; i < self.visibleGroups.length; i++) {\n const g = self.visibleGroups[i];\n if (g.type !== 'c') continue;\n if (x >= g.x && y >= g.y && x <= g.x2 && y <= g.y2) return g;\n }\n };\n /**\n * Get a row group at grid pixel coordinate x and y.\n * @memberof canvasDatagrid\n * @name getRowGroupAt\n * @method\n * @param {number} x Number of pixels from the left.\n * @param {number} y Number of pixels from the top.\n */\n self.getRowGroupAt = function (x, y) {\n const groups = self.groupedRows.length;\n if (groups <= 0) return;\n const xZero = self.getRowGroupAreaWidth();\n if (x >= xZero) return;\n for (let i = 0; i < self.visibleGroups.length; i++) {\n const g = self.visibleGroups[i];\n if (g.type !== 'r') continue;\n if (x >= g.x && y >= g.y && x <= g.x2 && y <= g.y2) return g;\n }\n };\n /**\n * Gets the cell at grid pixel coordinate x and y. Author's note. This function ties drawing and events together. This is a very complex function and is core to the component.\n * @memberof canvasDatagrid\n * @name getCellAt\n * @method\n * @returns {cell} cell at the selected location.\n * @param {number} x Number of pixels from the left.\n * @param {number} y Number of pixels from the top.\n */\n self.getCellAt = function (x, y, useTouchScrollZones) {\n function getBorder(entitiy) {\n if (\n entitiy.x + entitiy.width - self.attributes.borderResizeZone * 0.4 <\n x &&\n entitiy.x + entitiy.width + self.attributes.borderResizeZone * 0.6 > x\n ) {\n return 'r';\n }\n if (\n entitiy.x - self.attributes.borderResizeZone * 0.4 < x &&\n entitiy.x + self.attributes.borderResizeZone * 0.6 > x\n ) {\n return 'l';\n }\n if (\n entitiy.y + entitiy.height - self.attributes.borderResizeZone * 0.4 <\n y &&\n entitiy.y + entitiy.height + self.attributes.borderResizeZone * 0.6 > y\n ) {\n return 'b';\n }\n if (\n entitiy.y - self.attributes.borderResizeZone * 0.4 < y &&\n entitiy.y + self.attributes.borderResizeZone * 0.6 > y\n ) {\n return 't';\n }\n }\n if (!self.visibleCells) {\n return;\n }\n x -= self.getRowGroupAreaWidth();\n y -= self.getColumnGroupAreaHeight();\n\n if (self.dragStartObject !== undefined) {\n if (x <= 0) x = 1;\n if (x >= self.width) x = self.width - 1;\n if (y <= 0) y = 1;\n if (y >= self.height) y = self.height - 1;\n }\n\n var border,\n tsz = useTouchScrollZones ? self.attributes.touchScrollZone : 0,\n moveMode = self.attributes.borderDragBehavior === 'move',\n i,\n l = self.visibleCells.length,\n moveBorder,\n xBorderBehavior = moveMode ? self.cursorGrab : 'ew-resize',\n yBorderBehavior = moveMode ? self.cursorGrab : 'ns-resize',\n cell,\n entitiy;\n if (!self.visibleCells || !self.visibleCells.length) {\n return;\n }\n self.hasFocus = true;\n if (!(y < self.height && y > 0 && x < self.width && x > 0)) {\n self.hasFocus = false;\n return {\n dragContext: 'inherit',\n context: 'inherit',\n };\n }\n for (i = 0; i < l; i += 1) {\n cell = self.visibleCells[i];\n // interactive dimensions of the cell. used for touch \"over size\" zones\n entitiy = {\n x: cell.x,\n y: cell.y,\n height: cell.height,\n width: cell.width,\n };\n if (\n useTouchScrollZones &&\n /(vertical|horizontal)-scroll-/.test(cell.style)\n ) {\n entitiy.x -= tsz;\n entitiy.y -= tsz;\n entitiy.height += tsz;\n entitiy.width += tsz;\n }\n if (\n entitiy.x - self.style.cellBorderWidth < x &&\n entitiy.x + entitiy.width + self.style.cellBorderWidth > x &&\n entitiy.y - self.style.cellBorderWidth < y &&\n entitiy.y + entitiy.height + self.style.cellBorderWidth > y\n ) {\n if (/frozen-row-marker/.test(cell.style)) {\n if (self.dragMode === 'frozen-column-marker') continue;\n cell.dragContext = cell.style;\n cell.context = 'grab';\n return cell;\n }\n if (/frozen-column-marker/.test(cell.style)) {\n if (self.dragMode === 'frozen-row-marker') continue;\n cell.dragContext = cell.style;\n cell.context = 'grab';\n return cell;\n }\n if (/selection-handle-/.test(cell.style)) {\n cell.dragContext = cell.style;\n cell.context = 'crosshair';\n return cell;\n }\n if (/vertical-scroll-(bar|box)/.test(cell.style)) {\n cell.dragContext = 'vertical-scroll-box';\n cell.context = 'vertical-scroll-box';\n cell.isScrollBar = true;\n cell.isVerticalScrollBar = true;\n if (y > self.scrollBox.box.v.y + self.scrollBox.scrollBoxHeight) {\n cell.dragContext = 'vertical-scroll-bottom';\n cell.context = 'vertical-scroll-bottom';\n } else if (y < self.scrollBox.box.v.y) {\n cell.dragContext = 'vertical-scroll-top';\n cell.context = 'vertical-scroll-top';\n }\n self.cursor = 'default';\n return cell;\n }\n if (/horizontal-scroll-(bar|box)/.test(cell.style)) {\n cell.dragContext = 'horizontal-scroll-box';\n cell.context = 'horizontal-scroll-box';\n cell.isScrollBar = true;\n cell.isHorizontalScrollBar = true;\n if (x > self.scrollBox.box.h.x + self.scrollBox.scrollBoxWidth) {\n cell.dragContext = 'horizontal-scroll-right';\n cell.context = 'horizontal-scroll-right';\n } else if (x < self.scrollBox.box.h.x) {\n cell.dragContext = 'horizontal-scroll-left';\n cell.context = 'horizontal-scroll-left';\n }\n self.cursor = 'default';\n return cell;\n }\n border = getBorder(entitiy);\n // check if the border of this cell is the border of the selection and if so show move cursor in move mode\n moveBorder =\n moveMode &&\n cell.selectionBorder &&\n cell.selectionBorder.indexOf(border) !== -1;\n if (\n ['l', 'r'].indexOf(border) !== -1 &&\n (self.attributes.allowColumnResize || moveBorder) &&\n !(\n self.attributes.fillLastColumn &&\n border === 'r' &&\n cell.sortColumnIndex === self.getLastVisibleColumnIndex()\n ) &&\n ((self.attributes.allowColumnResizeFromCell && cell.isNormal) ||\n !cell.isNormal ||\n moveBorder) &&\n ((self.attributes.allowRowHeaderResize &&\n (cell.isRowHeader || cell.isCorner)) ||\n !(cell.isRowHeader && cell.isCorner))\n ) {\n if (\n (cell.isColumnHeader ||\n cell.isCorner ||\n (self.attributes.allowColumnResizeFromCell && cell.isNormal)) &&\n border === 'r'\n ) {\n cell.context = 'ew-resize';\n cell.dragContext = 'ew-resize';\n return cell;\n }\n if (!(cell.isColumnHeader || cell.isCorner) && moveBorder) {\n cell.context = xBorderBehavior;\n cell.dragContext = border + '-move';\n return cell;\n }\n }\n if (\n ['t', 'b'].indexOf(border) !== -1 &&\n cell.rowIndex > -1 &&\n (self.attributes.allowRowResize || moveBorder) &&\n ((self.attributes.allowRowResizeFromCell && cell.isNormal) ||\n !cell.isNormal ||\n moveBorder) &&\n !cell.isColumnHeader\n ) {\n if (\n (cell.isRowHeader ||\n cell.isCorner ||\n (self.attributes.allowRowResizeFromCell && cell.isNormal)) &&\n border === 'b'\n ) {\n cell.context = 'ns-resize';\n cell.dragContext = 'ns-resize';\n return cell;\n }\n if (!(cell.isRowHeader || cell.isCorner) && moveBorder) {\n cell.context = yBorderBehavior;\n cell.dragContext = border + '-move';\n return cell;\n }\n }\n if (cell.style === 'columnHeaderCell') {\n if (\n (!self.isColumnSelected(cell.columnIndex) &&\n cell.x +\n cell.width -\n self.attributes.columnGrabZoneSize -\n self.style.cellBorderWidth >\n x) ||\n !self.attributes.allowColumnReordering\n ) {\n cell.dragContext = 'cell';\n cell.context = 'cell';\n } else {\n cell.context = self.cursorGrab;\n cell.dragContext = 'column-reorder';\n }\n return cell;\n }\n if (cell.style === 'rowHeaderCell') {\n if (\n (!self.isRowSelected(cell.rowIndex) &&\n self.attributes.rowGrabZoneSize +\n (cell.y - self.style.cellBorderWidth) <\n y) ||\n !self.attributes.allowRowReordering\n ) {\n cell.dragContext = 'cell';\n cell.context = 'cell';\n } else {\n cell.context = self.cursorGrab;\n cell.dragContext = 'row-reorder';\n }\n return cell;\n }\n if (cell.isGrid) {\n self.hasFocus = false;\n cell.dragContext = 'cell-grid';\n cell.context = 'cell-grid';\n return cell;\n }\n if (cell.style === 'tree-grid') {\n self.hasFocus = false;\n cell.dragContext = 'tree';\n cell.context = 'tree';\n return cell;\n }\n cell.dragContext = 'cell';\n cell.context = 'cell';\n return cell;\n }\n }\n self.hasFocus = true;\n self.cursor = 'default';\n return {\n dragContext: 'background',\n context: 'background',\n style: 'background',\n isBackground: true,\n };\n };\n /**\n * Returns an auto generated schema based on data structure.\n * @memberof canvasDatagrid\n * @name getSchemaFromData\n * @method\n * @tutorial schema\n * @returns {schema} schema A schema based on the first item in the data array.\n */\n self.getSchemaFromData = function (d) {\n d = d || self.originalData;\n return Object.keys(d[0] || { ' ': '' }).map(function mapEachSchemaColumn(\n key,\n index,\n ) {\n var type = self.getBestGuessDataType(key, d),\n i = {\n name: key,\n title: isNaN(parseInt(key, 10))\n ? key\n : self.integerToAlpha(key).toUpperCase(),\n index: index,\n columnIndex: index,\n type: type,\n filter: self.filter(type),\n };\n if (\n self.storedSettings &&\n self.storedSettings.visibility &&\n self.storedSettings.visibility[i.name] !== undefined\n ) {\n i.hidden = !self.storedSettings.visibility[i.name];\n }\n return i;\n });\n };\n /**\n * Clears the change log grid.changes that keeps track of changes to the data set.\n * This does not undo changes or alter data it is simply a convince array to keep\n * track of changes made to the data since last this method was called.\n * @memberof canvasDatagrid\n * @name clearChangeLog\n * @method\n */\n self.clearChangeLog = function () {\n self.changes = [];\n };\n /**\n * Returns the maximum text width for a given column by column name.\n * @memberof canvasDatagrid\n * @name findColumnMaxTextLength\n * @method\n * @returns {number} The number of pixels wide the maximum width value in the selected column.\n * @param {string} name The name of the column to calculate the value's width of.\n */\n self.findColumnMaxTextLength = function (name) {\n var m = -Infinity;\n if (name === 'cornerCell') {\n self.ctx.font = self.style.rowHeaderCellFont;\n return (\n self.ctx.measureText(\n (\n self.viewData.length + (self.attributes.showNewRow ? 1 : 0)\n ).toString(),\n ).width +\n self.style.autosizePadding +\n self.style.autosizeHeaderCellPadding +\n self.style.rowHeaderCellPaddingRight +\n self.style.rowHeaderCellPaddingLeft +\n (self.attributes.tree\n ? self.style.treeArrowWidth +\n self.style.treeArrowMarginLeft +\n self.style.treeArrowMarginRight\n : 0)\n );\n }\n var formatter = null;\n self.getSchema().forEach(function (col) {\n if (col.name !== name) {\n return;\n }\n self.ctx.font = self.style.columnHeaderCellFont;\n var t =\n self.ctx.measureText(col.title || col.name).width +\n self.style.columnHeaderCellPaddingRight +\n self.style.columnHeaderCellPaddingLeft +\n self.style.cellAutoResizePadding;\n m = t > m ? t : m;\n formatter = self.formatters[col.type];\n });\n self.viewData.forEach(function (row) {\n var text = row[name];\n if (formatter) {\n text = formatter({ cell: { value: text } });\n }\n self.ctx.font = self.style.cellFont;\n var t =\n self.ctx.measureText(text).width +\n self.style.cellPaddingRight +\n self.style.cellPaddingLeft +\n self.style.cellAutoResizePadding;\n m = t > m ? t : m;\n });\n return m;\n };\n /**\n * Gets the total width of all header columns.\n * @memberof canvasDatagrid\n * @name getHeaderWidth\n * @method\n */\n self.getHeaderWidth = function () {\n return self.getVisibleSchema().reduce(function (total, header) {\n return total + parseInt(header.width || self.style.cellWidth, 10);\n }, 0);\n };\n /**\n * Gets the height of a row by index.\n * @memberof canvasDatagrid\n * @name getRowHeight\n * @method\n * @param {number} rowIndex The row index to lookup.\n */\n self.getRowHeight = function (rowIndex) {\n return (self.sizes.rows[rowIndex] || self.style.cellHeight) * self.scale;\n };\n /**\n * Gets the width of a column by index.\n * @memberof canvasDatagrid\n * @name getColumnWidth\n * @method\n * @param {number} columnIndex The column index to lookup.\n */\n self.getColumnWidth = function (columnIndex) {\n const column = self.getSchema()[columnIndex] || {};\n const configuredWidth =\n (self.sizes.columns[columnIndex] ||\n column.width ||\n self.style.cellWidth) * self.scale;\n if (\n self.autoLastColumnWidth &&\n self.autoLastColumnWidth.index === columnIndex\n ) {\n return Math.max(configuredWidth, self.autoLastColumnWidth.width);\n }\n return configuredWidth;\n };\n self.getLastVisibleColumnIndex = function () {\n const schema = self.getSchema();\n const collapsedColumnGroups = self.getCollapsedColumnGroups();\n const isColumnCollapsed = (columnIndex) =>\n collapsedColumnGroups.some(\n (group) => columnIndex >= group.from && columnIndex <= group.to,\n );\n for (\n let viewIndex = self.orders.columns.length - 1;\n viewIndex >= 0;\n viewIndex -= 1\n ) {\n const schemaIndex = self.orders.columns[viewIndex];\n if (\n schema[schemaIndex] &&\n !schema[schemaIndex].hidden &&\n !isColumnCollapsed(viewIndex)\n ) {\n return schemaIndex;\n }\n }\n return -1;\n };\n self.formatters.string = function cellFormatterString(e) {\n return e.cell.value !== undefined ? e.cell.value : '';\n };\n self.formatters.rowHeaderCell = self.formatters.string;\n self.formatters.headerCell = self.formatters.string;\n self.formatters.number = self.formatters.string;\n self.formatters.int = self.formatters.string;\n self.formatters.html = self.formatters.string;\n self.sorters.string = function (columnName, direction) {\n var asc = direction === 'asc';\n // Coerce every value to a string so numbers, booleans and blanks sort\n // consistently (blanks first ascending, last descending) (#256, #548).\n function toComparable(value) {\n return value === undefined || value === null ? '' : String(value);\n }\n return function (a, b) {\n const aValue = toComparable(a[columnName]);\n const bValue = toComparable(b[columnName]);\n return asc ? aValue.localeCompare(bValue) : bValue.localeCompare(aValue);\n };\n };\n self.sorters.number = function (columnName, direction) {\n var asc = direction === 'asc';\n return function (a, b) {\n if (asc) {\n return a[columnName] - b[columnName];\n }\n return b[columnName] - a[columnName];\n };\n };\n self.sorters.date = function (columnName, direction) {\n var asc = direction === 'asc';\n return function (a, b) {\n if (asc) {\n return (\n new Date(a[columnName]).getTime() - new Date(b[columnName]).getTime()\n );\n }\n return (\n new Date(b[columnName]).getTime() - new Date(a[columnName]).getTime()\n );\n };\n };\n}\n","/*jslint browser: true, unparam: true, todo: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false, Event: false*/\n/// <reference path=\"./type.d.ts\" />\n'use strict';\n\nimport { createHTMLString, createTextString } from '../events/util';\nimport {\n addIntoSelections,\n areSelectionsComplex,\n areSelectionsNeat,\n cleanupSelections,\n cloneSelections,\n getSelectedContiguousColumns,\n getSelectedContiguousRows,\n getSelectionBounds,\n getSelectionStateFromCells,\n isCellSelected,\n isColumnSelected,\n isRowSelected,\n moveSelections,\n normalizeSelection,\n removeFromSelections,\n SelectionType,\n shrinkOrExpandSelections,\n} from './util';\n\n/**\n * Before reading the code of this module, you must know these things:\n *\n * You may see words like \"obsolete\", \"old API\", \"compatibility\" in the code later.\n * Because this grid component has used a different selection mechanism in the past.\n *\n * The old mechanism use a 2D array to represent the selection state.\n * For example: `[undefined x 10, [0, 5]]` indicates\n * there are two cells are selected in current grid. they are located in row 11.\n * and one in column 1, another in column 6.\n * And `[undefined x 5, [-1, 0,1,2,3,4,5,6...], undefined x 2, [1]]` indicates\n * the row 6 is selected and the cell that located in row 9 column 2 is selected.\n *\n * But this implementation has performance issue when the grid is shipping a large dataset.\n * You can just imagine about what will happen when you select all cells in a grid with 1 million rows.\n *\n * So we create a new way to implement the selection.\n * In this way, we use a selection list to represent the selection state.\n * Each element in this selection list is a selection descriptor.\n * Each descriptor represents an area whose selected or unselected by the user.\n * And we have four types for the descriptor: UnselectedCells, Cells, Rows and Columns\n *\n * Because the old selection mechanism has been in used for a long time and\n * we have many public APIs about it.\n * We still need to keep these APIs working in the 0.x versions in the future.\n * So we create some functions to make sure these APIs and context objects work like previous version.\n * This is the reason why you may see there are some functions in this file\n * be marked \"for compatibility\" without best practice.\n */\nexport default function (self) {\n /**\n * Here are explanation for the item of this array:\n *\n * The type of properties about the row in it is viewRowIndex (startRow, endRow).\n * Here is an example of accessing the row data from the selection object:\n * `const rowData = originalData[self.getBoundRowIndexFromViewRowIndex(selection.startRow)]`\n *\n * The type of properties about the column in it is columnOrderIndex (startColumn, endColumn)\n * Here is an example of accessing thr column schema from the selection object:\n * `const columnSchema = schema[self.orders.columns[selection.startColumn]]`\n * @type {SelectionDescriptor[]}\n */\n self.selections = [];\n\n /**\n * TODO support the cache\n */\n self.selectionCache = [];\n self.selectionCacheWidth = 0;\n self.selectionCacheHeight = 0;\n\n /**\n * This method is used for adapting old API and it has performance issue for the large data set.\n * We should keep this function and its related functions until version 1.x,\n * because this action can cause incompatible API changes <https://semver.org/>\n *\n * Generate a selection 2 dimensional array from the selection list.\n * Each row in this 2D array is a number array that indicates which columns are selected in this row.\n * And -1 in the result means entire cells are selected in particular row/column\n *\n * @param {object[]} [otherSelections] The function create a 2d array based on this selection list\n * if this parameter is provided. Otherwise, this function uses self.selections as the list input.\n * @returns {number[][]}\n */\n self.getObsoleteSelectionMatrix = (otherSelections) => {\n const bounds = self.getSelectionBounds(true, otherSelections);\n if (!bounds) return [];\n const { top, bottom, left, right } = bounds;\n const height = bottom - top + 1;\n const width = right - left + 1;\n const states = getSelectionStateFromCells(self.selections, {\n startRow: top,\n endRow: bottom,\n startColumn: left,\n endColumn: right,\n });\n if (states === false) return [];\n\n const result = [];\n for (let row = top, row2 = top + height; row < row2; row++) {\n if (states === true) {\n result[row] = new Array(width).fill(0).map((_, i) => left + i);\n continue;\n }\n\n const rowState = states[row - top];\n if (!rowState) continue;\n result[row] = [];\n for (let col = left, col2 = left + width; col < col2; col++) {\n if (rowState !== true && !rowState[col - left]) continue;\n result[row].push(col);\n }\n }\n for (let i = 0; i < self.selections.length; i++) {\n const selection = self.selections[i];\n if (selection.type !== SelectionType.Rows) continue;\n for (let row = selection.startRow; row <= selection.endRow; row++) {\n if (!result[row]) {\n result[row] = [-1];\n continue;\n }\n if (result[row][0] === -1) continue;\n result[row].unshift(-1);\n }\n }\n return result;\n };\n\n /**\n * Return a tuple if the user selected contiguous columns, otherwise `null`.\n * Info: Because the user may reorder the columns,\n * the schemaIndex of the first item may be greater than the schemaIndex of the second item,\n * but the columnIndex of the firs item must less than the columnIndex of the second item.\n * @param {object[]} [schema] from `self.getSchema()`\n * @returns {object[]} column schemas tuple (each schema has an additional field `schemaIndex`)\n */\n self.getSelectedContiguousColumns = function (schema) {\n if (!schema) schema = self.getSchema();\n const columnOrderIndexes = getSelectedContiguousColumns(\n self.selections,\n false,\n );\n if (!Array.isArray(columnOrderIndexes)) return;\n\n /** @type {number[]} orders[index] => columnIndex */\n const orders = self.orders.columns;\n return columnOrderIndexes.map((orderIndex) => {\n const schemaIndex = orders[orderIndex];\n const columnSchema = schema[schemaIndex];\n return Object.assign({}, columnSchema, { orderIndex });\n });\n };\n\n /**\n * @param {boolean} [allowOnlyOneRow]\n * @returns {number[]} a viewRowIndex tuple. It can contains one row index or two row indexes.\n */\n self.getSelectedContiguousRows = function (allowOnlyOneRow) {\n const viewRowIndexes = getSelectedContiguousRows(self.selections, false);\n if (!Array.isArray(viewRowIndexes)) return;\n if (!allowOnlyOneRow && viewRowIndexes[0] === viewRowIndexes[1]) return;\n return viewRowIndexes;\n };\n\n /**\n * Check if current selection are copyable for the system clipbaord\n * @returns {boolean}\n */\n self.canSelectionsBeCopied = function () {\n return self.selections.length > 0 && !areSelectionsComplex(self.selections);\n };\n\n /**\n * Return the height of the selection area.\n * This function is used for rendering the overlay for the dnd(drag and drop)\n * @returns {number} The height of the selection area\n */\n self.getSelectedRowsHeight = function () {\n const selected = getSelectedContiguousRows(self.selections, true);\n if (!selected) return 0;\n let height = 0;\n for (let row = selected[0]; row <= selected[1]; row++)\n height += self.getRowHeight(row);\n return height;\n };\n\n /**\n * Return the width of the selection area.\n * This function is used for rendering the overlay for the dnd(drag and drop)\n * @returns {number} The width of the selection area\n */\n self.getSelectedColumnsWidth = function () {\n const selected = getSelectedContiguousColumns(self.selections, true);\n if (!selected) return 0;\n let width = 0;\n for (let col = selected[0]; col <= selected[1]; col++)\n width += self.getColumnWidth(self.orders.columns[col]);\n return width;\n };\n\n /**\n * @param {object} cell This method needs two properties in this parameter: `rowIndex`\n * and `viewColumnIndex`\n */\n self.isCellSelected = (cell) => {\n return isCellSelected(self.selections, cell.rowIndex, cell.viewColumnIndex);\n };\n\n /**\n * Returns true if the selected columnIndex is selected on every row.\n * @memberof canvasDatagrid\n * @name isColumnSelected\n * @method\n * @param {number} columnIndex The column index to check.\n */\n self.isColumnSelected = (viewColumnIndex) => {\n if (typeof viewColumnIndex !== 'number') return false;\n return isColumnSelected(self.selections, viewColumnIndex);\n };\n\n /**\n * Returns true if the selected rowIndex is selected on every column.\n * @memberof canvasDatagrid\n * @name isRowSelected\n * @method\n * @param {number} rowIndex The row index to check.\n */\n self.isRowSelected = (rowIndex) => {\n if (typeof rowIndex !== 'number') return false;\n return isRowSelected(self.selections, rowIndex);\n };\n\n /**\n * Removes the selection.\n * @param {boolean} triggerEvent true for trigger a event\n */\n self.clearSelections = (triggerEvent) => {\n self.selections = [];\n if (triggerEvent) self.dispatchSelectionChangedEvent();\n };\n\n /**\n * Removes the selection.\n * @memberof canvasDatagrid\n * @name selectNone\n * @param {boolean} dontDraw Suppress the draw method after the selection change.\n * @method\n */\n self.selectNone = (dontDraw) => {\n self.clearSelections(true);\n if (dontDraw) return;\n self.draw();\n };\n\n /**\n * Selects every visible cell.\n * @memberof canvasDatagrid\n * @name selectAll\n * @param {boolean} dontDraw Suppress the draw method after the selection change.\n * @method\n */\n self.selectAll = function (dontDraw) {\n const changed = addIntoSelections(self.selections, {\n type: SelectionType.Columns,\n startColumn: 0,\n endColumn: self.getSchema().length - 1,\n });\n if (!changed || dontDraw) return;\n self.draw();\n };\n\n /**\n * @param {object} cell This method needs two properties in this parameter: `rowIndex`\n * and `viewColumnIndex`\n * @param {boolean} [suppressEvent]\n */\n self.unselectCell = (cell, suppressEvent) => {\n const result = removeFromSelections(\n self.selections,\n normalizeSelection({\n type: SelectionType.Cells,\n startRow: cell.rowIndex,\n startColumn: cell.viewColumnIndex,\n }),\n );\n if (result && !suppressEvent) self.dispatchSelectionChangedEvent();\n return result;\n };\n\n /**\n * @param {number} startRow rowViewIndex\n * @param {number} endRow rowViewIndex\n * @param {boolean} suppressEvent When true, prevents the `selectionchanged` event from firing.\n * @returns {boolean} It returns whether the selection changed\n */\n self.unselectRows = (startRow, endRow, suppressEvent) => {\n const result = removeFromSelections(\n self.selections,\n normalizeSelection({\n type: SelectionType.Rows,\n startRow: startRow,\n endRow: endRow,\n }),\n );\n if (result && !suppressEvent) self.dispatchSelectionChangedEvent();\n return result;\n };\n\n /**\n * @param {object} cell This method needs two properties in this parameter: `rowIndex`\n * and `viewColumnIndex`\n * @param {boolean} [suppressEvent]\n */\n self.selectCell = (cell, suppressEvent) => {\n const result = addIntoSelections(\n self.selections,\n normalizeSelection({\n type: SelectionType.Cells,\n startRow: cell.rowIndex,\n startColumn: cell.viewColumnIndex,\n }),\n );\n if (result && !suppressEvent) self.dispatchSelectionChangedEvent();\n return result;\n };\n\n /**\n * Moves the current selection relative to the its current position. Note: this method does not move the selected data, just the selection itself.\n * @memberof canvasDatagrid\n * @name moveSelection\n * @method\n * @param {number} offsetX The number of columns to offset the selection.\n * @param {number} offsetY The number of rows to offset the selection.\n */\n self.moveSelection = function (offsetX, offsetY) {\n moveSelections(self.selections, offsetX, offsetY);\n };\n\n /**\n * Dispatch a event named `selectionchanged` with context info\n */\n self.dispatchSelectionChangedEvent = () => {\n self.dispatchEvent('selectionchanged', self.getContextOfSelectionEvent());\n };\n\n /**\n * Return the event context for event `selectionchanged`\n * @returns {object} the context for the event\n */\n self.getContextOfSelectionEvent = () => {\n const context = { selectionList: self.cloneSelections() };\n //#region for API compatibility\n Object.defineProperty(context, 'selections', {\n get: function () {\n return self.getObsoleteSelectionMatrix();\n },\n });\n Object.defineProperty(context, 'selectedData', {\n get: function () {\n return self.getSelectedData();\n },\n });\n Object.defineProperty(context, 'selectedCells', {\n get: function () {\n return self.getSelectedCells();\n },\n });\n Object.defineProperty(context, 'selectionBounds', {\n get: function () {\n return self.getSelectionBounds();\n },\n });\n //#endregion for API compatibility\n return context;\n };\n\n /**\n * Return a cloned selection list from current selection list\n * @returns {object[]} A cloned selection list\n */\n self.cloneSelections = () => {\n return cloneSelections(self.selections);\n };\n\n /**\n * Gets the bounds of current selection.\n * @param {boolean} [sanitized] sanitize the bound object if the value of thie paramater is `true`\n * @memberof canvasDatagrid\n * @name getSelectionBounds\n * @method\n * @returns {rect} two situations:\n * 1. The result is always a bound object if `sanitized` is not `true`.\n * And the result is `{top: Infinity, left: Infinity, bottom: -Infinity, right: -Infinity}` if there haven't selections.\n * This is used for keeping compatibility with existing APIs.\n * 2. When the parameter `sanitized` is true. The result will be null if there haven't selections.\n */\n self.getSelectionBounds = (sanitized, otherSelections) => {\n const bounds = getSelectionBounds(otherSelections || self.selections);\n if (sanitized) {\n // nothing is selected\n if (bounds.top > bounds.bottom || bounds.left > bounds.right) return null;\n self.sanitizeSelectionBounds(bounds);\n }\n return bounds;\n };\n self.sanitizeSelectionBounds = (bounds) => {\n if (!bounds) return bounds;\n if (bounds.top < 0) bounds.top = 0;\n if (bounds.left < 0) bounds.left = 0;\n\n const viewDataLength = self.viewData.length;\n if (bounds.bottom > viewDataLength) bounds.bottom = viewDataLength - 1;\n\n const schemaLength = self.getSchema().length;\n if (bounds.right > schemaLength) bounds.right = schemaLength - 1;\n return bounds;\n };\n\n /**\n * This function is migrated from the old API,\n * It needs to be refactoring/deprecated to work with the large dataset.\n * @param {boolean} [expandToRow]\n * @returns {any[]}\n */\n self.getSelectedData = (expandToRow) => {\n const bounds = self.getSelectionBounds(true);\n if (!bounds) return [];\n\n const selectedData = [];\n const { top, bottom, left, right } = bounds;\n const height = bottom - top + 1;\n const width = right - left + 1;\n const states = getSelectionStateFromCells(self.selections, {\n startRow: top,\n endRow: bottom,\n startColumn: left,\n endColumn: right,\n });\n if (states === false) return [];\n\n const orderedSchema = getSchemaOrderByViewIndex(left, width);\n for (let row = top, row2 = top + height; row < row2; row++) {\n const viewData = self.viewData[row] || {};\n const rowData = {};\n let hasData = false;\n const rowState = states === true || states[row - top];\n if (!rowState) continue;\n\n for (let col = left, col2 = left + width; col < col2; col++) {\n if (states !== true && !rowState[col - left]) continue;\n const header = orderedSchema[col];\n if (!header || header.hidden) continue;\n hasData = true;\n if (expandToRow) break;\n rowData[header.name] = viewData[header.name];\n }\n if (hasData)\n selectedData[row] = expandToRow ? Object.assign({}, viewData) : rowData;\n }\n return selectedData;\n };\n\n /**\n * This function is migrated from the old API,\n * @param {boolean} [expandToRow]\n * @returns {any[]}\n */\n self.getSelectedCells = (expandToRow) => {\n const selectedCells = [];\n const bounds = self.getSelectionBounds(true);\n iterateSelectedCells(\n (cell) => selectedCells.push(cell),\n bounds,\n expandToRow,\n );\n return selectedCells;\n };\n\n /**\n * This function is migrated from the old API,\n * @returns {any[]} affected cells\n */\n self.clearSelectedCells = () => {\n const affectedCells = [];\n const bounds = self.getSelectionBounds(true);\n iterateSelectedCells(\n (cell) => {\n affectedCells.push(cell);\n self.viewData[cell.viewRowIndex][cell.columnName] = '';\n },\n bounds,\n false,\n );\n return affectedCells;\n };\n\n /**\n * Deletes currently selected data.\n * @memberof canvasDatagrid\n * @name deleteSelectedData\n * @method\n * @param {boolean} dontDraw Suppress the draw method after the selection change.\n */\n self.deleteSelectedData = (dontDraw) => {\n const affectedCells = self.clearSelectedCells();\n const apiCompatibleCells = affectedCells.map((cell) => {\n return [\n cell.viewRowIndex,\n cell.viewColumnIndex,\n cell.boundRowIndex,\n cell.boundColumnIndex,\n ];\n });\n self.dispatchEvent('afterdelete', {\n cells: apiCompatibleCells,\n });\n self.dispatchDataChanged('delete', { cells: apiCompatibleCells });\n if (dontDraw) return;\n requestAnimationFrame(() => self.draw());\n };\n\n /**\n * Runs the defined method on each selected cell.\n * @memberof canvasDatagrid\n * @name forEachSelectedCell\n * @method\n * @param {number} fn The function to execute. The signature of the function is: (data, rowIndex, columnName).\n * @param {number} expandToRow When true the data in the array is expanded to the entire row.\n */\n self.forEachSelectedCell = function (fn, expandToRow) {\n const bounds = self.getSelectionBounds(true);\n iterateSelectedCells(\n (cell) => fn(self.viewData, cell.viewRowIndex, cell.columnName, cell),\n bounds,\n expandToRow,\n );\n };\n\n /**\n * @param {ClipboardInterface} clipboardData\n */\n self.copySelectedCellsToClipboard = (clipboardData) => {\n // an active cell without a selection has nothing to copy (#566)\n if (!self.selections || self.selections.length === 0) return;\n const isNeat = areSelectionsNeat(self.selections);\n const selectedData = self.getSelectedData();\n const data = selectedData.filter((row) => row != null);\n\n if (data.length > 0) {\n const textString = createTextString(data, isNeat);\n const htmlString = createHTMLString(data, isNeat);\n\n const copiedData = {\n 'text/plain': textString,\n 'text/html': htmlString,\n 'text/csv': textString,\n 'application/json': JSON.stringify(data),\n };\n for (const [mimeType, data] of Object.entries(copiedData)) {\n clipboardData.setData(mimeType, data);\n }\n }\n };\n\n /**\n * (This function is migrated from the old API)\n * Modify the width of columns that contain selected cells to fit the content.\n * @param {number} [width] Custom width for each column\n */\n self.fitSelectedColumns = (width) => {\n const bounds = self.getSelectionBounds(true);\n if (!bounds) return;\n\n const hasCustomWidth = typeof width === 'number' && width > 0;\n // convert rectangle's height to only 1 row\n bounds.bottom = bounds.top;\n iterateSelectedCells(\n (cell) => {\n const { columnName, viewColumnIndex } = cell;\n if (hasCustomWidth) {\n self.sizes.columns[viewColumnIndex] = width;\n self.dispatchEvent('resizecolumn', {\n // TODO: Drop x, y from all 'resizecolumn' events and use height and width instead.\n x: width,\n y: self.resizingStartingHeight,\n width: width,\n height: self.resizingStartingHeight,\n columnIndex: viewColumnIndex,\n draggingItem: self.currentCell,\n });\n } else {\n self.fitColumnToValues(columnName);\n }\n },\n bounds,\n false,\n );\n };\n\n /**\n * Set the height of the selected rows to the given value.\n * @param {number} [height]\n */\n self.fitSelectedRows = (height) => {\n const bounds = self.getSelectionBounds(true);\n if (!bounds) return;\n\n for (let row = bounds.top; row <= bounds.bottom; row++) {\n if (!self.isRowSelected(row)) {\n continue;\n }\n self.sizes.rows[row] = height;\n self.dispatchResizeRow({\n width: self.resizingStartingWidth,\n height: height,\n rowIndex: row,\n draggingItem: self.currentCell,\n });\n }\n };\n\n /**\n * Selects a column.\n * @memberof canvasDatagrid\n * @name selectColumn\n * @method\n * @param {number} columnIndex The column index to select.\n * @param {boolean} toggleSelectMode When true, behaves as if you were holding control/command when you clicked the column.\n * @param {boolean} shift When true, behaves as if you were holding shift when you clicked the column.\n * @param {boolean} suppressEvent When true, prevents the selectionchanged event from firing.\n */\n self.selectColumn = (columnIndex, ctrl, shift, suppressEvent) => {\n self.isMultiRowsSelected = false;\n self.isMultiColumnsSelected = false;\n function addCol(i) {\n addIntoSelections(\n self.selections,\n normalizeSelection({\n type: SelectionType.Columns,\n startColumn: i,\n }),\n );\n }\n function removeCol(i) {\n removeFromSelections(\n self.selections,\n normalizeSelection({\n type: SelectionType.Columns,\n startColumn: i,\n }),\n );\n }\n if (shift) {\n if (!self.activeCell) {\n return;\n }\n const s = Math.min(self.activeCell.columnIndex, columnIndex);\n const e = Math.max(self.activeCell.columnIndex, columnIndex);\n addIntoSelections(\n self.selections,\n normalizeSelection({\n type: SelectionType.Columns,\n startColumn: s,\n endColumn: e - 1,\n }),\n );\n if (s != e) self.isMultiColumnsSelected = true;\n }\n if (!ctrl && !shift) {\n self.selections = [];\n self.activeCell.columnIndex = columnIndex;\n self.activeCell.rowIndex = self.scrollIndexTop;\n }\n if (ctrl && self.isColumnSelected(columnIndex)) {\n removeCol(columnIndex);\n } else {\n addCol(columnIndex);\n }\n if (suppressEvent) {\n return;\n }\n self.dispatchSelectionChangedEvent();\n };\n\n /**\n * Selects a row.\n * @memberof canvasDatagrid\n * @name selectRow\n * @method\n * @param {number} rowIndex The row index to select.\n * @param {boolean} ctrl When true, behaves as if you were holding control/command when you clicked the row.\n * @param {boolean} shift When true, behaves as if you were holding shift when you clicked the row.\n * @param {boolean} supressSelectionchangedEvent When true, prevents the selectionchanged event from firing.\n */\n self.selectRow = (rowIndex, ctrl, shift, suppressEvent) => {\n self.isMultiRowsSelected = false;\n function de() {\n if (suppressEvent) {\n return;\n }\n self.dispatchSelectionChangedEvent();\n }\n function addRow(ri) {\n addIntoSelections(\n self.selections,\n normalizeSelection({\n type: SelectionType.Rows,\n startRow: ri,\n }),\n );\n }\n if (self.dragAddToSelection === false || self.dragObject === undefined) {\n if (isRowSelected(self.selections, rowIndex) && ctrl) {\n removeFromSelections(\n self.selections,\n normalizeSelection({\n type: SelectionType.Rows,\n startRow: rowIndex,\n }),\n );\n de();\n return;\n }\n }\n if (self.dragAddToSelection === true || self.dragObject === undefined) {\n if (shift && self.dragObject === undefined) {\n if (!self.activeCell) {\n return;\n }\n const st = Math.min(self.activeCell.rowIndex, rowIndex);\n const en = Math.max(self.activeCell.rowIndex, rowIndex);\n addIntoSelections(\n self.selections,\n normalizeSelection({\n type: SelectionType.Rows,\n startRow: st,\n endRow: en,\n }),\n );\n } else {\n addRow(rowIndex);\n }\n }\n de();\n };\n\n /**\n * @param {function} iterator signature: `(cell: any) => any`\n * @param {object} bounds type: `{left:number;right:number;top:number;bottom:number}`\n * @param {boolean} [expandToRow]\n */\n function iterateSelectedCells(iterator, bounds, expandToRow) {\n if (!bounds) return;\n const { top, bottom, left, right } = bounds;\n const height = bottom - top + 1;\n const width = right - left + 1;\n const states = getSelectionStateFromCells(self.selections, {\n startRow: top,\n endRow: bottom,\n startColumn: left,\n endColumn: right,\n });\n if (states === false) return;\n\n const orderedSchema = getSchemaOrderByViewIndex(left, width);\n for (let row = top, row2 = top + height; row < row2; row++) {\n const viewData = self.viewData[row] || {};\n const rowState = states === true || states[row - top];\n if (!rowState) continue;\n for (let col = left, col2 = left + width; col < col2; col++) {\n if (rowState !== true && !rowState[col - left]) continue;\n\n const header = orderedSchema[col];\n if (!header || (header.hidden && !expandToRow)) continue;\n\n const cell = {\n value: viewData[header.name],\n header,\n columnName: header.name,\n boundRowIndex: self.getBoundRowIndexFromViewRowIndex(row),\n boundColumnIndex: self.orders.columns[col],\n viewRowIndex: row,\n viewColumnIndex: col,\n };\n iterator(cell);\n }\n }\n }\n\n /**\n * Selects an area of the grid.\n * @memberof canvasDatagrid\n * @name selectArea\n * @method\n * @param {rect} [bounds] A rect object representing the selected values.\n * @param {boolean} [ctrl]\n */\n self.selectArea = function (bounds, ctrl) {\n const schemaLength = self.getSchema().length;\n if (bounds) {\n if (bounds.right < 0) {\n // patch for API compatibility\n bounds.right = Math.max(schemaLength - 1, bounds.left, 0);\n }\n if (bounds.top > bounds.bottom || bounds.left > bounds.right)\n throw new Error('Impossible selection area');\n self.selectionBounds = self.sanitizeSelectionBounds(bounds);\n }\n let { top, bottom, left, right } = self.selectionBounds;\n if (!ctrl) self.selections = [];\n\n if (bottom >= self.viewData.length)\n bottom = Math.max(self.viewData.length - 1, top);\n if (top < -1 || left < -1 || right > schemaLength)\n throw new Error('Impossible selection area');\n\n /** @type {ContextForSelectionAction} */\n const context = { rows: self.viewData.length, columns: schemaLength };\n let changed = false;\n\n // In original API, number -1 indicates selecting whole row or selecting while column.\n if (top === -1) {\n // select whole columns\n const startColumn = Math.max(left, 0);\n // left eq -1 means selecting all cells\n const endRow =\n left === -1 ? schemaLength - 1 : Math.min(right, schemaLength - 1);\n changed = addIntoSelections(\n self.selections,\n normalizeSelection({\n type: SelectionType.Columns,\n startColumn: startColumn,\n endColumn: endRow,\n }),\n context,\n );\n } else if (left === -1) {\n // select whole rows\n const startRow = Math.max(top, 0);\n const endRow = Math.min(bottom, self.viewData.length - 1);\n changed = addIntoSelections(\n self.selections,\n normalizeSelection({\n type: SelectionType.Rows,\n startRow: startRow,\n endRow: endRow,\n }),\n context,\n );\n } else {\n changed = addIntoSelections(\n self.selections,\n normalizeSelection({\n type: SelectionType.Cells,\n startRow: top,\n endRow: bottom,\n startColumn: left,\n endColumn: right,\n }),\n context,\n );\n }\n if (changed) self.dispatchSelectionChangedEvent();\n };\n\n /**\n * This private method is using for make existing API about selection works.\n * TODO: This method can be removed by a better way.\n * @param {number} [rowIndex] 0 by default\n * @returns {number[]|undefined}\n */\n self.getRowSelectionStates = (rowIndex) => {\n if (typeof rowIndex !== 'number' || rowIndex < 0) rowIndex = 0;\n const startColumn = 0;\n const endRow = self.getSchema().length - 1;\n const width = endRow - startColumn + 1;\n const state = getSelectionStateFromCells(self.selections, {\n startRow: rowIndex,\n startColumn: startColumn,\n endRow: rowIndex,\n endColumn: endRow,\n });\n if (state === false) return;\n if (state === true) return new Array(width).fill(true).map((_, i) => i);\n\n const firstRow = state[0];\n if (!firstRow) return;\n\n const result = [];\n for (let col = 0; col < firstRow.length; col++)\n if (firstRow[col]) result.push(col);\n return result;\n };\n\n /**\n * Replace current selection list with new selection list\n * @param {object[]} newSelections New selection list\n */\n self.replaceAllSelections = (newSelections) => {\n cleanupSelections(newSelections);\n self.selections = newSelections;\n };\n\n /**\n * Select given columns and remove other existing selection area\n * @param {number[]} viewIndexes A number array that represents column view indexes\n */\n self.selectColumnViewIndexes = (viewIndexes) => {\n const selections = viewIndexes.map((col) => ({\n type: SelectionType.Columns,\n startColumn: col,\n endRow: col,\n }));\n self.replaceAllSelections(selections);\n };\n\n /**\n * This method will be a bottleneck in the future if this component\n * need to ship large dataset. But why I wrote this function:\n * 1. it is used for compatibility with existing APIs\n * 2. this component still has a bottleneck on the selection even there is not this function.\n * @returns {number[]}\n */\n self.getRowViewIndexesFromSelection = () => {\n if (self.selections.length === 0) return [];\n const bounds = getSelectionBounds(self.selections, true);\n const result = [];\n for (let rowIndex = bounds.top; rowIndex <= bounds.bottom; rowIndex++)\n result.push(rowIndex);\n return result;\n };\n\n /**\n * @param {object} cell Signature: `{rowIndex:number;columnIndex:number}`\n * @param {object} keyEvent Signature: `{key:string;shiftKey:boolean}`\n * @param {boolean} [suppressEvent]\n */\n self.shrinkOrExpandSelections = (cell, keyEvent, suppressEvent) => {\n const result = shrinkOrExpandSelections(self.selections, cell, keyEvent, {\n columns: self.getSchema().length,\n rows: self.viewData.length,\n });\n if (result && !suppressEvent) self.dispatchSelectionChangedEvent();\n return result;\n };\n\n /**\n * @param {number} [fromIndex]\n * @param {number} [len]\n */\n function getSchemaOrderByViewIndex(fromIndex, len) {\n const schema = self.getSchema();\n const orderedSchema = [];\n for (let col = fromIndex, col2 = fromIndex + len; col < col2; col++) {\n const orderedIndex = self.orders.columns[col];\n const header = schema[orderedIndex];\n orderedSchema[col] = header;\n }\n return orderedSchema;\n }\n\n /**\n * TODO: this function will be used for caching\n * Concatenating two 2-dimensional array.\n * It is simuliar with the method `concatenating` method of the Python module named `numpy`\n * @template T\n * @param {T[][]} a the first 2d array\n * @param {T[][]} b the second 2d array\n * @param {number} axis 1 implies that it is being done column-wise, otherwise row-wise\n * @returns {T[][]}\n */\n function concatenate2DArray(a, b, axis) {\n if (axis === 1) {\n const result = new Array(a.length);\n for (let i = 0; i < a.length; i++) {\n const rowInA = a[i];\n const rowInB = b[i];\n result[i] = rowInA.concat(rowInB);\n }\n }\n return a.concat(b);\n }\n}\n","'use strict';\n//@ts-check\n/// <reference path=\"./type.d.ts\" />\n\n// Abbreviation in this file\n// - sel: selection\n// - sel0, sel1: If there are two selections in the parameters, these two names are for them.\n\n// Types of Selection\n// 0. (High Priority) Unselected cells from [startRow, startColumn] to [endRow, endColumn]\n// 1. Cells from [startRow, startColumn] to [endRow, endColumn]\n// 2. Rows from startRow to endRow\n// 3. Columns from startColumn to endColumn\n\nconst SelectionType = {\n UnselectedCells: 0,\n Cells: 1,\n Rows: 2,\n Columns: 3,\n};\n\n/**\n * Swap values between two properties in an object\n * @param {object} obj The object\n * @param {string} prop0 First property name\n * @param {string} prop1 Another property name\n */\nconst swapProps = (obj, prop0, prop1) => {\n const t = obj[prop0];\n obj[prop0] = obj[prop1];\n obj[prop1] = t;\n};\n\n/**\n * This function transforms a selection object to normalized.\n * Here is the definition of **normalized selection object**:\n * - It contains these required properties: type, startRow, startColumn, endRow, endColumn\n * - Property `endRow` and property `endColumn` must exist even if their value are the same with `startRow` or `startColumn`.\n * - The value of `endRow` must be equals or greater than the value of `startRow`\n * - The value of `endColumn` must be equals or greater than the value of `startColumn`\n * @param {SelectionDescriptor} sel\n * @returns {SelectionDescriptor}\n */\nconst normalizeSelection = (sel) => {\n if (!sel) return sel;\n switch (sel.type) {\n case SelectionType.UnselectedCells:\n case SelectionType.Cells:\n if (typeof sel.endRow !== 'number') sel.endRow = sel.startRow;\n else if (sel.endRow < sel.startRow) swapProps(sel, 'startRow', 'endRow');\n\n if (typeof sel.endColumn !== 'number') sel.endColumn = sel.startColumn;\n else if (sel.endColumn < sel.startColumn)\n swapProps(sel, 'startColumn', 'endColumn');\n\n break;\n case SelectionType.Rows:\n if (typeof sel.endRow !== 'number') sel.endRow = sel.startRow;\n else if (sel.endRow < sel.startRow) swapProps(sel, 'startRow', 'endRow');\n\n break;\n case SelectionType.Columns:\n if (typeof sel.endColumn !== 'number') sel.endColumn = sel.startColumn;\n else if (sel.endColumn < sel.startColumn)\n swapProps(sel, 'startColumn', 'endColumn');\n\n break;\n }\n return sel;\n};\n\n/**\n * Parse a string expression to a selection object. Here are some example expressions:\n * - cells:20,30-40,50\n * - row:5\n * - cols:5-9\n * @param {string} str\n * @returns {SelectionDescriptor}\n */\nconst getSelectionFromString = (str) => {\n if (typeof str !== 'string') return;\n\n const index = str.indexOf(':');\n if (index < 0) return;\n\n const type = str.slice(0, index);\n const num = str\n .slice(index + 1)\n .split(/[,:;-]+/)\n .map((it) => parseInt(it, 10));\n switch (type) {\n case 'cell':\n case 'cells':\n case '-cell':\n case '-cells':\n return normalizeSelection({\n type: SelectionType[type[0] === '-' ? 'UnselectedCells' : 'Cells'],\n startRow: num[0],\n startColumn: num[1],\n endRow: num[2],\n endColumn: num[3],\n });\n case 'row':\n case 'rows':\n return normalizeSelection({\n type: SelectionType.Rows,\n startRow: num[0],\n endRow: num[1],\n });\n case 'col':\n case 'cols':\n return normalizeSelection({\n type: SelectionType.Columns,\n startColumn: num[0],\n endColumn: num[1],\n });\n }\n};\n\n/**\n * Check are two cells block the same\n * @param {SelectionDescriptor} block0\n * @param {SelectionDescriptor} block1\n * @returns {boolean}\n */\nconst isSameCellsBlock = (block0, block1) => {\n return (\n block0.startRow === block1.startRow &&\n block0.endRow === block1.endRow &&\n block0.startColumn === block1.startColumn &&\n block0.endColumn === block1.endColumn\n );\n};\n\n/**\n * This function is used in the function `mergeSelections`\n * @see mergeSelections\n * @param {SelectionDescriptor} cells\n * @param {SelectionDescriptor} rowsOrColumns\n * @returns {SelectionDescriptor}\n */\nconst mergeCellsIntoRowsOrColumns = (cells, rowsOrColumns) => {\n if (rowsOrColumns.type === SelectionType.Rows) {\n if (\n cells.startRow >= rowsOrColumns.startRow &&\n cells.endRow <= rowsOrColumns.endRow\n )\n return rowsOrColumns;\n return;\n }\n if (\n cells.startColumn >= rowsOrColumns.startColumn &&\n cells.endColumn <= rowsOrColumns.endColumn\n )\n return rowsOrColumns;\n};\n\n/**\n * Merge two selection objects (Splicing, Containing)\n * @param {SelectionDescriptor} sel0\n * @param {SelectionDescriptor} sel1\n * @returns {SelectionDescriptor} A concatenated selection object based on `block0`.\n * Or `undefined` if they can't be concatenated\n */\nconst mergeSelections = (sel0, sel1) => {\n if (sel0.type !== sel1.type) {\n if (sel1.type <= SelectionType.Cells && sel0.type > SelectionType.Cells)\n return mergeCellsIntoRowsOrColumns(sel1, sel0);\n if (sel0.type <= SelectionType.Cells && sel1.type > SelectionType.Cells)\n return mergeCellsIntoRowsOrColumns(sel0, sel1);\n return;\n }\n\n /** These two selection objects may be concatenated horizontally */\n const horizontalConcat =\n sel0.type === SelectionType.Columns\n ? true\n : sel0.startRow === sel1.startRow && sel0.endRow === sel1.endRow;\n\n /** These two selection objects may be concatenated vertically */\n const verticalConcat =\n sel0.type === SelectionType.Rows\n ? true\n : sel0.startColumn === sel1.startColumn &&\n sel0.endColumn === sel1.endColumn;\n\n if (horizontalConcat) {\n // Are they the same\n if (verticalConcat) return sel0;\n // Are they neighbor\n if (\n sel1.startColumn > sel0.endColumn + 1 ||\n sel1.endColumn < sel0.startColumn - 1\n )\n return;\n return Object.assign({}, sel0, {\n startColumn: Math.min(sel0.startColumn, sel1.startColumn),\n endColumn: Math.max(sel0.endColumn, sel1.endColumn),\n });\n }\n\n if (verticalConcat) {\n // Are they neighbor\n if (sel1.startRow > sel0.endRow + 1 || sel1.endRow < sel0.startRow - 1)\n return;\n return Object.assign({}, sel0, {\n startRow: Math.min(sel0.startRow, sel1.startRow),\n endRow: Math.max(sel0.endRow, sel1.endRow),\n });\n }\n\n // Does one of them contain other one\n if (\n sel0.type === SelectionType.Cells ||\n sel0.type === SelectionType.UnselectedCells\n ) {\n const intersection = getIntersection(sel0, sel1);\n if (intersection) {\n if (isSameCellsBlock(intersection, sel0)) return sel1;\n if (isSameCellsBlock(intersection, sel1)) return sel0;\n }\n }\n};\n\n/**\n * Remove some rows from a rows selection\n * @param {SelectionDescriptor} selection It must be a selection with type as `Rows`\n * @param {SelectionDescriptor} remove It must be a selection with type as `Rows`\n * @returns {SelectionDescriptor[]} Returning a `undefined` represents parameter `remove` doesn't intersect with parameter `selection`\n */\nconst removePartOfRowsSelection = (selection, remove) => {\n if (remove.endRow < selection.startRow) return;\n if (remove.startRow > selection.endRow) return;\n if (remove.startRow <= selection.startRow) {\n // all rows of the selection is removed\n if (remove.endRow >= selection.endRow) return [];\n return [Object.assign({}, selection, { startRow: remove.endRow + 1 })];\n }\n if (remove.endRow >= selection.endRow)\n return [Object.assign({}, selection, { endRow: remove.startRow - 1 })];\n // the selection be divided into two parts\n return [\n Object.assign({}, selection, { endRow: remove.startRow - 1 }),\n Object.assign({}, selection, { startRow: remove.endRow + 1 }),\n ];\n};\n\n/**\n * Remove some columns from a columns selection\n * @param {object} selection It must be a selection with type as `Columns`\n * @param {object} remove It must be a selection with type as `Columns`\n * @returns {object[]} Returning a `undefined` represents parameter `remove` doesn't intersect with parameter `selection`\n */\nconst removePartOfColumnsSelection = (selection, remove) => {\n if (remove.endColumn < selection.startColumn) return;\n if (remove.startColumn > selection.endColumn) return;\n if (remove.startColumn <= selection.startColumn) {\n // all cols of the selection is removed\n if (remove.endColumn >= selection.endColumn) return [];\n return [\n Object.assign({}, selection, { startColumn: remove.endColumn + 1 }),\n ];\n }\n if (remove.endColumn >= selection.endColumn)\n return [\n Object.assign({}, selection, { endColumn: remove.startColumn - 1 }),\n ];\n // the selection be divided into two parts\n return [\n Object.assign({}, selection, { endColumn: remove.startColumn - 1 }),\n Object.assign({}, selection, { startColumn: remove.endColumn + 1 }),\n ];\n};\n\n/**\n * Remove a cells block from a cells selection\n * @param {SelectionDescriptor} selection It must be a selection with type as `Cells` or `UnselectedCells`\n * @param {SelectionDescriptor} remove It must be a selection\n * @returns {SelectionDescriptor[]} Returning a `undefined` represents parameter `remove` doesn't intersect with parameter `selection`\n */\nconst removePartOfCellsSelection = (selection, remove) => {\n const intersect = getIntersection(selection, remove);\n if (!intersect) return;\n // all of cells in the selection are removed\n if (isSameCellsBlock(selection, intersect)) return [];\n const result = [];\n let minStartRow = selection.startRow;\n let maxEndRow = selection.endRow;\n let maxEndColumn = selection.endColumn;\n if (intersect.startRow > selection.startRow) {\n // Top\n result.push(\n Object.assign({}, selection, { endRow: intersect.startRow - 1 }),\n );\n minStartRow = intersect.startRow;\n }\n if (intersect.endColumn < selection.endColumn) {\n // Right\n result.push(\n Object.assign({}, selection, {\n startRow: minStartRow,\n startColumn: intersect.endColumn + 1,\n }),\n );\n maxEndColumn = intersect.endColumn;\n }\n if (intersect.endRow < selection.endRow) {\n // Bottom\n result.push(\n Object.assign({}, selection, {\n endColumn: maxEndColumn,\n startRow: intersect.endRow + 1,\n }),\n );\n maxEndRow = intersect.endRow;\n }\n if (intersect.startColumn > selection.startColumn) {\n // Bottom\n result.push(\n Object.assign({}, selection, {\n startRow: minStartRow,\n endRow: maxEndRow,\n endColumn: intersect.startColumn - 1,\n }),\n );\n }\n return result;\n};\n\n/**\n * Get intersection of two selection object\n * @param {SelectionDescriptor} sel0\n * @param {SelectionDescriptor} sel1\n * @returns {SelectionDescriptor} a selection object or undefined\n */\nconst getIntersection = (sel0, sel1) => {\n if (sel0.type > sel1.type) return getIntersection(sel1, sel0);\n if (sel0.type <= SelectionType.Cells) {\n if (sel1.type <= SelectionType.Cells) {\n const startColumn = Math.max(sel0.startColumn, sel1.startColumn);\n const endColumn = Math.min(sel0.endColumn, sel1.endColumn);\n if (startColumn > endColumn) return;\n\n const startRow = Math.max(sel0.startRow, sel1.startRow);\n const endRow = Math.min(sel0.endRow, sel1.endRow);\n if (startRow > endRow) return;\n\n return {\n type: SelectionType.Cells,\n startRow: startRow,\n startColumn: startColumn,\n endRow: endRow,\n endColumn: endColumn,\n };\n }\n if (sel1.type === SelectionType.Rows) {\n const startRow = Math.max(sel0.startRow, sel1.startRow);\n const endRow = Math.min(sel0.endRow, sel1.endRow);\n if (startRow > endRow) return;\n return {\n type: SelectionType.Cells,\n startRow: startRow,\n startColumn: sel0.startColumn,\n endRow: endRow,\n endColumn: sel0.endColumn,\n };\n } else {\n // SelectionType.Columns\n const startColumn = Math.max(sel0.startColumn, sel1.startColumn);\n const endColumn = Math.min(sel0.endColumn, sel1.endColumn);\n if (startColumn > endColumn) return;\n return {\n type: SelectionType.Cells,\n startColumn: startColumn,\n startRow: sel0.startRow,\n endColumn: endColumn,\n endRow: sel0.endRow,\n };\n }\n }\n if (sel0.type === SelectionType.Rows) {\n if (sel1.type === SelectionType.Rows) {\n const startRow = Math.max(sel0.startRow, sel1.startRow);\n const endRow = Math.min(sel0.endRow, sel1.endRow);\n if (startRow > endRow) return;\n return { type: SelectionType.Rows, startRow: startRow, endRow: endRow };\n } else {\n // SelectionType.Columns\n return {\n type: SelectionType.Cells,\n startRow: sel0.startRow,\n startColumn: sel1.startColumn,\n endRow: sel0.endRow,\n endColumn: sel1.endColumn,\n };\n }\n }\n // SelectionType.Columns\n const startColumn = Math.max(sel0.startColumn, sel1.startColumn);\n const endColumn = Math.min(sel0.endColumn, sel1.endColumn);\n if (startColumn > endColumn) return;\n return {\n type: SelectionType.Columns,\n startColumn: startColumn,\n endColumn: endColumn,\n };\n};\n\n/**\n * Add a selection object into `selections` array. And there are two behaviours if this function:\n * - It appends a new selection object into the `selections` array\n * - It rewrites the selection item in the `selections` array (merge or change its type)\n *\n * @param {SelectionDescriptor[]} selections\n * @param {SelectionDescriptor} add Supported types: Cells, Rows, Columns\n * @param {ContextForSelectionAction} [context] Eg: {rows:1000, columns:1000}\n * @returns {boolean} is the selections array changed\n */\nconst addIntoSelections = (selections, add, context) => {\n if (!add || typeof add.type !== 'number') return false;\n if (add.type === SelectionType.Cells) {\n for (let i = 0; i < selections.length; i++) {\n const sel = selections[i];\n if (sel.type === SelectionType.UnselectedCells) {\n const parts = removePartOfCellsSelection(sel, add);\n if (parts) {\n selections.splice(i, 1, ...parts);\n i += parts.length - 1;\n }\n continue;\n }\n if (sel.type === SelectionType.Cells) {\n const parts = removePartOfCellsSelection(add, sel);\n if (Array.isArray(parts)) {\n let result = false;\n for (let i = 0; i < parts.length; i++) {\n const isChanged = addIntoSelections(selections, parts[i], context);\n if (isChanged) result = true;\n }\n if (result) cleanupSelections(selections);\n return result;\n }\n }\n }\n\n // has context info of the grid\n if (context) {\n const selectedAllRows =\n add.startRow === 0 && add.endRow + 1 >= context.rows;\n const selectedAllColumns =\n add.startColumn === 0 && add.endColumn + 1 >= context.columns;\n let isChanged0, isChanged1;\n if (selectedAllRows) {\n isChanged0 = addIntoSelections(\n selections,\n {\n type: SelectionType.Columns,\n startColumn: add.startColumn,\n endColumn: add.endColumn,\n },\n context,\n );\n }\n if (selectedAllColumns) {\n isChanged1 = addIntoSelections(\n selections,\n {\n type: SelectionType.Rows,\n startRow: add.startRow,\n endRow: add.endRow,\n },\n context,\n );\n }\n if (selectedAllRows || selectedAllColumns)\n return isChanged0 || isChanged1;\n }\n\n selections.push(add);\n cleanupSelections(selections);\n return true;\n }\n // end of cells selection\n\n const isRowsSelection = add.type === SelectionType.Rows;\n if (isRowsSelection || add.type === SelectionType.Columns) {\n for (let i = 0; i < selections.length; i++) {\n const sel = selections[i];\n if (sel.type === SelectionType.UnselectedCells) {\n const parts = removePartOfCellsSelection(\n sel,\n isRowsSelection\n ? {\n startRow: add.startRow,\n endRow: add.endRow,\n startColumn: 0,\n endColumn: sel.endColumn,\n }\n : {\n startColumn: add.startColumn,\n endColumn: add.endColumn,\n startRow: 0,\n endRow: sel.endRow,\n },\n );\n if (parts) {\n selections.splice(i, 1, ...parts);\n i += parts.length - 1;\n }\n continue;\n }\n if (sel.type !== add.type) continue;\n // try to concat them\n let merged = mergeSelections(sel, add);\n if (merged) {\n for (let j = i + 1; j < selections.length; j++) {\n if (selections[j].type !== add.type) continue;\n const newMerged = mergeSelections(selections[j], merged);\n if (newMerged) {\n selections.splice(j, 1);\n j--;\n merged = newMerged;\n }\n }\n selections[i] = merged;\n cleanupSelections(selections);\n return true;\n }\n }\n selections.push(add);\n cleanupSelections(selections);\n return true;\n }\n return false;\n};\n\n/**\n * Remove a selection area from `selections` array\n * @param {SelectionDescriptor[]} selections\n * @param {SelectionDescriptor} remove Supported types: Cells, Rows, Columns\n * @param {ContextForSelectionAction} [context] Eg: {rows:1000, columns:1000}\n * @returns {boolean} is the selections array changed\n */\nconst removeFromSelections = (selections, remove, context) => {\n if (!remove || typeof remove.type !== 'number') return false;\n if (remove.type === SelectionType.Cells) {\n for (let i = 0; i < selections.length; i++) {\n const sel = selections[i];\n if (sel.type === SelectionType.UnselectedCells) {\n const parts = removePartOfCellsSelection(remove, sel);\n if (Array.isArray(parts)) {\n let result = false;\n for (let i = 0; i < parts.length; i++) {\n const isChanged = removeFromSelections(\n selections,\n parts[i],\n context,\n );\n if (isChanged) result = true;\n }\n if (result) cleanupSelections(selections);\n return result;\n }\n }\n if (sel.type === SelectionType.Cells) {\n const parts = removePartOfCellsSelection(sel, remove);\n if (parts) {\n selections.splice(i, 1, ...parts);\n i += parts.length - 1;\n }\n continue;\n }\n }\n // has context info of the grid\n if (context) {\n const unselectedAllRows =\n remove.startRow === 0 && remove.endRow + 1 >= context.rows;\n const unselectedAllColumns =\n remove.startColumn === 0 && remove.endColumn + 1 >= context.columns;\n let isChanged0, isChanged1;\n if (unselectedAllRows) {\n isChanged0 = removeFromSelections(\n selections,\n {\n type: SelectionType.Columns,\n startColumn: remove.startColumn,\n endColumn: remove.endColumn,\n },\n context,\n );\n }\n if (unselectedAllColumns) {\n isChanged1 = removeFromSelections(\n selections,\n {\n type: SelectionType.Rows,\n startRow: remove.startRow,\n endRow: remove.endRow,\n },\n context,\n );\n }\n if (unselectedAllRows || unselectedAllColumns)\n return isChanged0 || isChanged1;\n }\n\n remove.type = SelectionType.UnselectedCells;\n selections.unshift(remove);\n cleanupSelections(selections);\n return true;\n }\n // end of cells selection\n\n const isRowsSelection = remove.type === SelectionType.Rows;\n if (isRowsSelection || remove.type === SelectionType.Columns) {\n let isChanged = false;\n for (let i = 0; i < selections.length; i++) {\n const sel = selections[i];\n if (sel.type === SelectionType.Cells) {\n const parts = removePartOfCellsSelection(\n sel,\n isRowsSelection\n ? {\n startRow: remove.startRow,\n endRow: remove.endRow,\n startColumn: 0,\n endColumn: sel.endColumn,\n }\n : {\n startColumn: remove.startColumn,\n endColumn: remove.endColumn,\n startRow: 0,\n endRow: sel.endRow,\n },\n );\n if (parts) {\n selections.splice(i, 1, ...parts);\n i += parts.length - 1;\n }\n continue;\n }\n if (sel.type === SelectionType.UnselectedCells) {\n if (isRowsSelection) {\n if (sel.startRow >= remove.startRow && sel.endRow <= remove.endRow) {\n selections.splice(i, 1);\n i--;\n }\n } else {\n if (\n sel.startColumn >= remove.startColumn &&\n sel.endColumn <= remove.endColumn\n ) {\n selections.splice(i, 1);\n i--;\n }\n }\n continue;\n }\n if (sel.type === remove.type) {\n const newSelection = isRowsSelection\n ? removePartOfRowsSelection(sel, remove)\n : removePartOfColumnsSelection(sel, remove);\n if (!newSelection) continue;\n isChanged = true;\n selections.splice(i, 1, ...newSelection);\n i += newSelection.length - 1;\n } else {\n isChanged = true;\n /** @type {SelectionDescriptor} */\n let newSelection;\n if (sel.type === SelectionType.Rows) {\n newSelection = {\n type: SelectionType.UnselectedCells,\n startColumn: remove.startColumn,\n endColumn: remove.endColumn,\n startRow: sel.startRow,\n endRow: sel.endRow,\n };\n } else {\n newSelection = {\n type: SelectionType.UnselectedCells,\n startRow: remove.startRow,\n endRow: remove.endRow,\n startColumn: sel.startColumn,\n endColumn: sel.endColumn,\n };\n }\n selections.unshift(newSelection);\n }\n }\n if (isChanged) cleanupSelections(selections);\n return isChanged;\n }\n return false;\n};\n\n/**\n * Clean up a selections array.\n * This function removes unnecessary selection object, and it tries to merge different selections.\n * @param {SelectionDescriptor[]} selections\n */\nconst cleanupSelections = (selections) => {\n let unselect = [];\n let select = [];\n for (let i = 0; i < selections.length; i++) {\n const sel = selections[i];\n if (sel.type === SelectionType.UnselectedCells) unselect.push(sel);\n else select.push(sel);\n }\n // clean unused unselected objects\n unselect = unselect.filter((unsel) => {\n for (let i = 0; i < select.length; i++)\n if (getIntersection(unsel, select[i])) return true;\n return false;\n });\n // merge neighbor cells block selections\n let endMerge = false;\n while (!endMerge) {\n endMerge = true;\n for (let i = 0; i < select.length; i++) {\n const sel0 = select[i];\n for (let j = i + 1; j < select.length; j++) {\n const sel1 = select[j];\n const newSel = mergeSelections(sel0, sel1);\n if (!newSel) continue;\n select[i] = newSel;\n select.splice(j, 1);\n endMerge = false;\n break;\n }\n if (!endMerge) break;\n }\n }\n // save back to `selections`\n let ptr = 0;\n for (let i = 0; i < unselect.length; i++) selections[ptr++] = unselect[i];\n for (let i = 0; i < select.length; i++) selections[ptr++] = select[i];\n selections.splice(ptr, selections.length - ptr);\n};\n\n/**\n * Check if all cells in a given row selected\n * @param {SelectionDescriptor[]} selections\n * @param {number} rowIndex\n */\nconst isRowSelected = (selections, rowIndex) => {\n for (let i = 0; i < selections.length; i++) {\n const sel = selections[i];\n switch (sel.type) {\n case SelectionType.UnselectedCells:\n if (rowIndex >= sel.startRow && rowIndex <= sel.endRow) return false;\n break;\n case SelectionType.Rows:\n if (rowIndex >= sel.startRow && rowIndex <= sel.endRow) return true;\n }\n }\n return false;\n};\n\n/**\n * Check if all cells in a given column selected\n * @param {SelectionDescriptor[]} selections\n * @param {number} columnIndex\n */\nconst isColumnSelected = (selections, columnIndex) => {\n for (let i = 0; i < selections.length; i++) {\n const sel = selections[i];\n switch (sel.type) {\n case SelectionType.UnselectedCells:\n if (columnIndex >= sel.startColumn && columnIndex <= sel.endColumn)\n return false;\n break;\n case SelectionType.Columns:\n if (columnIndex >= sel.startColumn && columnIndex <= sel.endColumn)\n return true;\n }\n }\n return false;\n};\n\n/**\n * Check if a given cell selected\n * @param {SelectionDescriptor[]} selections\n * @param {number} rowIndex\n * @param {number} columnIndex\n */\nconst isCellSelected = (selections, rowIndex, columnIndex) => {\n for (let i = 0; i < selections.length; i++) {\n const sel = selections[i];\n switch (sel.type) {\n case SelectionType.UnselectedCells:\n case SelectionType.Cells:\n if (\n columnIndex >= sel.startColumn &&\n columnIndex <= sel.endColumn &&\n rowIndex >= sel.startRow &&\n rowIndex <= sel.endRow\n )\n return sel.type === SelectionType.Cells;\n break;\n case SelectionType.Rows:\n if (rowIndex >= sel.startRow && rowIndex <= sel.endRow) return true;\n break;\n case SelectionType.Columns:\n if (columnIndex >= sel.startColumn && columnIndex <= sel.endColumn)\n return true;\n }\n }\n return false;\n};\n\n/**\n * Check if all given cells selected\n * @param {SelectionDescriptor[]} selections\n * @param {RangeDescriptor} range the range of cells block\n * @returns {boolean}\n */\nconst areAllCellsSelected = (selections, range) => {\n const {\n startRow: startRow,\n startColumn: startColumn,\n endRow: endRow,\n endColumn: endColumn,\n } = range;\n for (let i = 0, iTo = selections.length; i < iTo; i++) {\n const sel = selections[i];\n if (!sel) continue;\n switch (sel.type) {\n case SelectionType.UnselectedCells:\n case SelectionType.Cells:\n {\n const matched0 =\n startColumn >= sel.startColumn && startRow >= sel.startRow;\n const matched1 = endColumn <= sel.endColumn && endRow <= sel.endRow;\n if (matched0 || matched1) {\n if (matched0 && matched1) return sel.type === SelectionType.Cells;\n if (\n (matched0 &&\n startColumn <= sel.endColumn &&\n startRow <= sel.endRow) ||\n (matched1 &&\n endColumn >= sel.startColumn &&\n endRow >= sel.startRow)\n )\n return false;\n }\n }\n break;\n case SelectionType.Rows:\n if (startRow >= sel.startRow) {\n if (endRow <= sel.endRow) return true;\n if (startRow <= sel.endRow) return false;\n } else if (endRow >= sel.startRow) return false;\n break;\n case SelectionType.Columns:\n if (startColumn >= sel.startColumn) {\n if (endColumn <= sel.endColumn) return true;\n if (startColumn <= sel.endColumn) return false;\n } else if (endColumn >= sel.startColumn) return false;\n }\n }\n return false;\n};\n\n/**\n * Get selection state from cells\n * @param {SelectionDescriptor[]} selections\n * @param {RangeDescriptor} range\n * @returns {boolean|boolean[][]} Returning `true` means all given cells are selected,\n * Returning `false` means all given cells are not selected.\n * Returning a two-dimensional array means some cells are selected and some cells are not selected.\n * A reference for returned value: `state[rowIndex - range.startRow][colIndex - range.startColumn]`\n */\nconst getSelectionStateFromCells = (selections, range) => {\n if (!Array.isArray(selections) || selections.length === 0) return false;\n selections = selections.filter((sel) => {\n if (typeof sel.startRow === 'number')\n if (sel.endRow < range.startRow || sel.startRow > range.endRow)\n return false;\n if (typeof sel.startColumn === 'number')\n if (\n sel.endColumn < range.startColumn ||\n sel.startColumn > range.endColumn\n )\n return false;\n return sel;\n });\n if (selections.length === 0) return false;\n if (areAllCellsSelected(selections, range)) return true;\n\n const countOfColumns = range.endColumn - range.startColumn + 1;\n const result = new Array(range.endRow - range.startRow + 1)\n .fill(null)\n .map(() => new Array(countOfColumns));\n\n const test = Object.assign({ type: SelectionType.Cells }, range);\n for (let i = selections.length - 1; i >= 0; i--) {\n const sel = selections[i];\n const intersection = getIntersection(test, sel);\n if (!intersection) continue;\n const value = sel.type !== SelectionType.UnselectedCells;\n for (\n let rowIndex = intersection.startRow;\n rowIndex <= intersection.endRow;\n rowIndex++\n ) {\n const row = result[rowIndex - range.startRow];\n let columnOffset = intersection.startColumn - range.startColumn;\n const columnOffsetEnd = intersection.endColumn - range.startColumn;\n for (; columnOffset <= columnOffsetEnd; columnOffset++)\n row[columnOffset] = value;\n }\n }\n return result;\n};\n\n/**\n * Get verbose selection state from cells.\n * (`verbose` in here means that you can locate particular selection for selected cells)\n * @param {SelectionDescriptor[]} selections\n * @param {RangeDescriptor} range\n * @returns {number[][]} Each item in this two-dimensional array is 0 or a positive int,\n * it represents the index of matched selection plus 1 if it is a positive int.\n * And if the value of item is 0, it means this cell is not selected.\n * A reference for returned value: `state[rowIndex - range.startRow][colIndex - range.startColumn]`\n */\nconst getVerboseSelectionStateFromCells = (selections, range) => {\n if (!Array.isArray(selections) || selections.length === 0) return [];\n selections = selections.map((sel) => {\n if (typeof sel.startRow === 'number')\n if (sel.endRow < range.startRow || sel.startRow > range.endRow)\n return null;\n if (typeof sel.startColumn === 'number')\n if (\n sel.endColumn < range.startColumn ||\n sel.startColumn > range.endColumn\n )\n return null;\n return sel;\n });\n if (selections.length === 0) return [];\n\n const countOfColumns = range.endColumn - range.startColumn + 1;\n const result = new Array(range.endRow - range.startRow + 1)\n .fill(null)\n .map(() => new Array(countOfColumns));\n\n const test = Object.assign({ type: SelectionType.Cells }, range);\n for (let i = selections.length - 1; i >= 0; i--) {\n const sel = selections[i];\n if (!sel) continue;\n const intersection = getIntersection(test, sel);\n if (!intersection) continue;\n const value = sel.type !== SelectionType.UnselectedCells;\n for (\n let rowIndex = intersection.startRow;\n rowIndex <= intersection.endRow;\n rowIndex++\n ) {\n const row = result[rowIndex - range.startRow];\n let columnOffset = intersection.startColumn - range.startColumn;\n const columnOffsetEnd = intersection.endColumn - range.startColumn;\n for (; columnOffset <= columnOffsetEnd; columnOffset++)\n row[columnOffset] = value ? i + 1 : 0;\n }\n }\n return result;\n};\n\n/**\n * Check if any contiguous columns are selected.\n * (This function is useful for the preconditions for actions on columns, Eg: grouping, hiding)\n * @param {SelectionDescriptor[]} selections\n * @param {boolean} allowImpurity This function ignores other selected rows/cells if its value is `true`\n * @returns {number[]} a tuple [beginViewColumnIndex, endViewColumnIndex] or `undefined`\n */\nconst getSelectedContiguousColumns = (selections, allowImpurity) => {\n if (!selections || selections.length === 0) return;\n /** A selection object */\n let matched;\n for (let i = selections.length - 1; i >= 0; i--) {\n const selection = selections[i];\n switch (selection.type) {\n case SelectionType.Columns:\n if (matched) {\n const newMatched = mergeSelections(matched, selection);\n if (newMatched) {\n matched = newMatched;\n break;\n }\n }\n matched = selection;\n break;\n case SelectionType.Rows:\n case SelectionType.Cells:\n if (!allowImpurity) return;\n break;\n case SelectionType.UnselectedCells:\n if (!matched) return;\n if (getIntersection(selection, matched)) return;\n }\n }\n if (matched) return [matched.startColumn, matched.endColumn];\n};\n\n/**\n * Check if any contiguous rows are selected.\n * (This function is useful for the preconditions for actions on rows, Eg: grouping, hiding)\n * @param {SelectionDescriptor[]} selections\n * @param {boolean} allowImpurity This function ignores other selected columns/cells if its value is `true`\n * @returns {number[]} a tuple [beginRowOrderIndex, endRowOrderIndex] or `undefined`\n */\nconst getSelectedContiguousRows = (selections, allowImpurity) => {\n if (!selections || selections.length === 0) return;\n /** A selection object */\n let matched;\n for (let i = selections.length - 1; i >= 0; i--) {\n const selection = selections[i];\n switch (selection.type) {\n case SelectionType.Rows:\n if (matched) {\n const newMatched = mergeSelections(matched, selection);\n if (newMatched) {\n matched = newMatched;\n break;\n }\n }\n matched = selection;\n break;\n case SelectionType.Columns:\n case SelectionType.Cells:\n if (!allowImpurity) return;\n break;\n case SelectionType.UnselectedCells:\n if (!matched) return;\n if (getIntersection(selection, matched)) return;\n }\n }\n if (matched) return [matched.startRow, matched.endRow];\n};\n\n/**\n * Check if current selections are complex.\n * How we defined \"complex\" in here:\n * - There are any unselected cells in selected rows/columns\n * - More than one selection type in current selections\n * @param {SelectionDescriptor[]} selections\n * @returns {boolean}\n */\nconst areSelectionsComplex = (selections) => {\n if (!selections || selections.length <= 1) return false;\n const baseType = selections[0].type;\n if (baseType === SelectionType.UnselectedCells) return true;\n return selections.findIndex((it) => it.type !== baseType) >= 0;\n};\n\n/**\n * Check if current selections are neat.\n * This method is used for make new API are compatible with obsolete API\n * For example:\n * - Selected like <0,0-10,10> or rows<5-10> is neat\n * - Selected like <0,0-10,10>&<11,1-11,10> is untidy\n * @param {SelectionDescriptor[]} selections selections after clean up\n * @returns {boolean}\n */\nconst areSelectionsNeat = (selections) => {\n if (!selections) return false;\n // nothing selected is trivially neat (copy with only an active cell, #566)\n if (selections.length <= 1) return true;\n\n const base = selections[0];\n const baseType = base.type;\n if (baseType === SelectionType.UnselectedCells) return true;\n\n for (let i = 0; i < selections.length; i++) {\n const sel = selections[i];\n if (baseType !== sel.type) return false;\n if (baseType === SelectionType.Cells) {\n if (\n sel.startColumn === base.startColumn &&\n sel.endColumn === base.endColumn\n )\n continue;\n if (sel.startRow === base.startRow && sel.endRow === base.endRow)\n continue;\n // they are not aligned\n return false;\n }\n }\n return true;\n};\n\n/**\n * @param {SelectionDescriptor[]} selections\n * @param {number} offsetX\n * @param {number} offsetY\n */\nconst moveSelections = (selections, offsetX, offsetY) => {\n for (let i = 0; i < selections.length; i++) {\n const selection = selections[i];\n switch (selection.type) {\n case SelectionType.Cells:\n case SelectionType.UnselectedCells:\n selection.startRow += offsetY;\n selection.endRow += offsetY;\n selection.startColumn += offsetX;\n selection.endColumn += offsetX;\n break;\n case SelectionType.Rows:\n selection.startRow += offsetY;\n selection.endRow += offsetY;\n break;\n case SelectionType.Columns:\n selection.startColumn += offsetX;\n selection.endColumn += offsetX;\n break;\n }\n }\n};\n\n/**\n * @param {SelectionDescriptor[]} selections\n * @returns {SelectionDescriptor[]}\n */\nconst cloneSelections = (selections) => {\n const clonedSelections = [];\n for (let i = 0; i < selections.length; i++) {\n const sel = selections[i];\n if (!sel) continue;\n clonedSelections.push(Object.assign({}, sel));\n }\n return clonedSelections;\n};\n\n/**\n * @param {SelectionDescriptor[]} selections\n * @returns {RectangleObject}\n */\nconst getSelectionBounds = (selections) => {\n /**\n * The reason why the initialize values are `Infinity` is used for making\n * the bound is compatible with the obsolete API.\n */\n let top = Infinity,\n bottom = -Infinity,\n left = Infinity,\n right = -Infinity;\n for (let i = 0; i < selections.length; i++) {\n const sel = selections[i];\n if (sel.type === SelectionType.UnselectedCells) continue;\n\n if (typeof sel.startColumn !== 'number') left = 0;\n else if (sel.startColumn < left) left = sel.startColumn;\n\n if (typeof sel.endColumn !== 'number') right = Infinity;\n else if (sel.endColumn > right) right = sel.endColumn;\n\n if (typeof sel.startRow !== 'number') top = 0;\n else if (sel.startRow < top) top = sel.startRow;\n\n if (typeof sel.endRow !== 'number') bottom = Infinity;\n else if (sel.endRow > bottom) bottom = sel.endRow;\n }\n return { top, left, bottom, right };\n};\n\n/**\n * @param {SelectionDescriptor[]} selections\n * @param {object} cell Signature: `{rowIndex:number;columnIndex:number}`\n * @param {object} keyEvent Signature: `{key:string;shiftKey:boolean}`\n * @param {object} context Signature: `{columns:number;rows:number}`\n * @returns {boolean}\n */\nconst shrinkOrExpandSelections = (selections, cell, keyEvent, context) => {\n const { rowIndex, columnIndex } = cell;\n if (rowIndex < 0 || columnIndex < 0) return false;\n\n const keyInfo = {\n ArrowLeft: { x: 1, y: 0, isLeft: true },\n ArrowUp: { x: 0, y: 1, isUp: true },\n ArrowRight: { x: -1, y: 0, isRight: true },\n ArrowDown: { x: 0, y: -1, isDown: true },\n }[keyEvent.key];\n if (!keyInfo) return false;\n\n const originalRowIndex = rowIndex + keyInfo.y;\n const originalColumnIndex = columnIndex + keyInfo.x;\n\n /** @type {number[]} */\n let matchedSelections = [];\n for (let i = 0; i < selections.length; i++) {\n /** @type {SelectionDescriptor} */\n const sel = selections[i];\n switch (sel.type) {\n case SelectionType.Cells:\n case SelectionType.UnselectedCells:\n if (\n (originalRowIndex === sel.startRow ||\n originalRowIndex === sel.endRow) &&\n (originalColumnIndex === sel.startColumn ||\n originalColumnIndex === sel.endColumn)\n ) {\n // we can't shrink or expand from a unselected areas\n if (sel.type === SelectionType.UnselectedCells) return false;\n matchedSelections.push(sel);\n }\n break;\n case SelectionType.Rows:\n if (\n originalRowIndex === sel.startRow ||\n originalRowIndex === sel.endRow\n )\n matchedSelections.push(sel);\n break;\n case SelectionType.Columns:\n if (\n originalColumnIndex === sel.startColumn ||\n originalColumnIndex === sel.endColumn\n )\n matchedSelections.push(sel);\n break;\n }\n }\n // The selection is complex.\n // Or the expanding / shrinking action is not from the border cell of selected area\n if (matchedSelections.length !== 1) return false;\n const selection = matchedSelections[0];\n\n const isTopBorder = selection.startRow === originalRowIndex;\n const isBottomBorder = selection.endRow === originalRowIndex;\n\n const isLeftBorder = selection.startColumn === originalColumnIndex;\n const isRightBorder = selection.endColumn === originalColumnIndex;\n\n const maxRow = context ? context.rows - 1 : Infinity;\n const maxColumn = context ? context.columns - 1 : Infinity;\n\n const afterChange = () => {\n cleanupSelections(selections);\n return true;\n };\n\n if (isTopBorder) {\n if (keyInfo.isUp) {\n // at the topmost row\n if (selection.startRow === 0) return false;\n // expand to the up\n selection.startRow--;\n return afterChange();\n } else if (keyInfo.isDown && selection.startRow < selection.endRow) {\n selection.startRow++;\n return afterChange();\n }\n }\n if (isBottomBorder) {\n if (keyInfo.isDown) {\n // at the bottomost row\n if (selection.endRow >= maxRow) return false;\n // expand to the down\n selection.endRow++;\n return afterChange();\n } else if (keyInfo.isUp && selection.startRow < selection.endRow) {\n selection.endRow--;\n return afterChange();\n }\n }\n if (isLeftBorder) {\n if (keyInfo.isLeft) {\n // at the leftmost column\n if (selection.startColumn === 0) return false;\n // expand to the left\n selection.startColumn--;\n return afterChange();\n } else if (keyInfo.isRight && selection.startColumn < selection.endColumn) {\n selection.startColumn++;\n return afterChange();\n }\n }\n if (isRightBorder) {\n if (keyInfo.isRight) {\n // at the rightmost column\n if (selection.endColumn >= maxColumn) return false;\n // expand to the down\n selection.endColumn++;\n return afterChange();\n } else if (keyInfo.isLeft && selection.startColumn < selection.endColumn) {\n selection.endColumn--;\n return afterChange();\n }\n }\n return false;\n};\n\nexport {\n SelectionType,\n getSelectionFromString,\n normalizeSelection,\n addIntoSelections,\n removeFromSelections,\n mergeSelections,\n removePartOfRowsSelection,\n removePartOfColumnsSelection,\n removePartOfCellsSelection,\n cleanupSelections,\n getIntersection,\n isRowSelected,\n isColumnSelected,\n isCellSelected,\n areAllCellsSelected,\n areSelectionsNeat,\n getSelectionStateFromCells,\n getVerboseSelectionStateFromCells,\n areSelectionsComplex,\n getSelectedContiguousColumns,\n getSelectedContiguousRows,\n moveSelections,\n cloneSelections,\n getSelectionBounds,\n shrinkOrExpandSelections,\n};\n","/*jslint browser: true, unparam: true, todo: true, plusplus: true*/\n/*globals define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nexport default function (self) {\n var touchTimerMs = 50,\n debounceTouchMove,\n touchMoving,\n touchScrollTimeout;\n self.scrollAnimation = {};\n self.touchDelta = {};\n self.touchAnimateTo = {};\n self.animationFrames = 0;\n self.getTouchPos = function (e, touchIndex) {\n var t = touchIndex ? e.touches[touchIndex] : e.touches[0],\n rect = self.canvas.getBoundingClientRect(),\n pos;\n if (!t) {\n return;\n }\n pos = {\n x: t.clientX - rect.left,\n y: t.clientY - rect.top,\n };\n if (self.isChildGrid) {\n pos.x -= self.canvasOffsetLeft;\n pos.y -= self.canvasOffsetTop;\n }\n return {\n x: pos.x,\n y: pos.y,\n rect: rect,\n };\n };\n // shamelessly stolen from from https://gist.github.com/gre/1650294\n self.easingFunctions = {\n linear: function (t) {\n return t;\n },\n easeInQuad: function (t) {\n return t * t;\n },\n easeOutQuad: function (t) {\n return t * (2 - t);\n },\n easeInOutQuad: function (t) {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n },\n easeInCubic: function (t) {\n return t * t * t;\n },\n easeOutCubic: function (t) {\n return --t * t * t + 1;\n },\n easeInOutCubic: function (t) {\n return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n },\n easeInQuart: function (t) {\n return t * t * t * t;\n },\n easeOutQuart: function (t) {\n return 1 - --t * t * t * t;\n },\n easeInOutQuart: function (t) {\n return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\n },\n easeInQuint: function (t) {\n return t * t * t * t * t;\n },\n easeOutQuint: function (t) {\n return 1 + --t * t * t * t * t;\n },\n easeInOutQuint: function (t) {\n return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t;\n },\n };\n self.easing = function (t, b, c, d) {\n return (\n c * self.easingFunctions[self.attributes.touchEasingMethod](t / d) + b\n );\n };\n self.calculatePPSTimed = function () {\n self.xPPST = -(\n (self.touchDelta.x - self.touchSigmaTimed.x) /\n (self.touchDelta.t - self.touchSigmaTimed.t)\n );\n self.yPPST = -(\n (self.touchDelta.y - self.touchSigmaTimed.y) /\n (self.touchDelta.t - self.touchSigmaTimed.t)\n );\n self.touchSigmaTimed = {\n x: self.touchDelta.x,\n y: self.touchDelta.y,\n t: performance.now(),\n };\n };\n self.calculatePPS = function () {\n self.xPPS = -(\n (self.touchDelta.x - self.touchSigma.x) /\n (self.touchDelta.t - self.touchSigma.t)\n );\n self.yPPS = -(\n (self.touchDelta.y - self.touchSigma.y) /\n (self.touchDelta.t - self.touchSigma.t)\n );\n self.touchSigma = {\n x: self.touchDelta.x,\n y: self.touchDelta.y,\n t: performance.now(),\n };\n };\n self.touchEndAnimation = function () {\n if (!self.canvas || !self.scrollBox.scrollTo) {\n return requestAnimationFrame(self.touchEndAnimation);\n }\n var n = performance.now(),\n d = self.attributes.touchReleaseAnimationDurationMs,\n t;\n t = n - self.touchDelta.t;\n self.animationFrames += 1;\n self.scrollAnimation.x = self.easing(\n t,\n self.touchDelta.scrollLeft,\n self.touchAnimateTo.x,\n d,\n );\n self.scrollAnimation.y = self.easing(\n t,\n self.touchDelta.scrollTop,\n self.touchAnimateTo.y,\n d,\n );\n if (\n t > d ||\n (self.scrollAnimation.y === self.scrollBox.scrollTop &&\n self.scrollAnimation.x === self.scrollBox.scrollLeft) ||\n self.stopAnimation\n ) {\n return;\n }\n self.scrollBox.scrollTo(self.scrollAnimation.x, self.scrollAnimation.y);\n requestAnimationFrame(self.touchEndAnimation);\n };\n self.touchEditCell = function (cell) {\n self.beginEditAt(cell.columnIndex, cell.rowIndex);\n };\n self.touchstart = function (e) {\n if (e.changedTouches[0]) {\n self.touchStart = self.getTouchPos(e);\n self.startingCell = self.getCellAt(\n self.touchStart.x,\n self.touchStart.y,\n true,\n );\n } else {\n // nothing to start from (#554)\n self.startingCell = undefined;\n return;\n }\n if (\n self.dispatchEvent('touchstart', {\n NativeEvent: e,\n cell: self.startingCell,\n })\n ) {\n return;\n }\n self.disposeContextMenu();\n clearInterval(self.calculatePPSTimer);\n clearTimeout(self.touchContextTimeout);\n self.touchStartEvent = e;\n self.stopAnimation = true;\n self.animationFrames = 0;\n self.stopPropagation(e);\n if (e.touches.length === 1 && e.changedTouches[0] && !self.zoomAltered) {\n self.touchLength = 1;\n self.touchStart = self.touchStart || self.touchStart1;\n self.touchScrollStart = {\n x: self.scrollBox.scrollLeft,\n y: self.scrollBox.scrollTop,\n t: performance.now(),\n };\n self.touchDelta = {\n x: 0,\n y: 0,\n scrollLeft: self.scrollBox.scrollLeft,\n scrollTop: self.scrollBox.scrollTop,\n t: self.touchScrollStart.t,\n };\n self.touchSigma = {\n x: self.touchDelta.x,\n y: self.touchDelta.y,\n t: self.touchDelta.t,\n };\n self.touchSigmaTimed = {\n x: self.touchDelta.x,\n y: self.touchDelta.y,\n t: self.touchDelta.t,\n };\n self.touchContextTimeout = setTimeout(function () {\n self.contextmenuEvent(e, self.touchStart);\n }, self.attributes.touchContextMenuTimeMs);\n self.calculatePPSTimer = setInterval(\n self.calculatePPSTimed,\n touchTimerMs,\n );\n if (\n self.startingCell &&\n (self.startingCell.isGrid ||\n ['tree', 'inherit'].indexOf(self.startingCell.context) !== -1)\n ) {\n self.hasFocus = false;\n return;\n }\n self.hasFocus = true;\n if (self.startingCell && self.startingCell.isHeader) {\n if (self.startingCell.isRowHeader) {\n self.selectArea({\n top: self.startingCell.rowIndex,\n bottom: self.startingCell.rowIndex,\n left: 0,\n right: self.getVisibleSchema().length - 1,\n });\n self.draw(true);\n } else if (self.startingCell.isColumnHeader) {\n if (self.attributes.columnHeaderClickBehavior === 'sort') {\n if (self.orderBy === self.startingCell.header.name) {\n self.orderDirection =\n self.orderDirection === 'asc' ? 'desc' : 'asc';\n } else {\n self.orderDirection = 'asc';\n }\n self.order(self.startingCell.header.name, self.orderDirection);\n }\n if (\n self.attributes.columnHeaderClickBehavior === 'select' &&\n self.attributes.allowColumnSelection\n ) {\n self.selectArea({\n top: 0,\n bottom: self.viewData.length - 1,\n left: self.startingCell.columnIndex,\n right: self.startingCell.columnIndex,\n });\n self.draw(true);\n }\n }\n self.touchEndEvents(e);\n return;\n }\n }\n if (self.zoomAltered) {\n return;\n }\n document.body.addEventListener('touchmove', self.touchmove, {\n passive: false,\n });\n document.body.addEventListener('touchend', self.touchend, false);\n document.body.addEventListener('touchcancel', self.touchcancel, false);\n self.draw(true);\n };\n self.touchSelect = function (cell, handleType) {\n if (cell.rowIndex === undefined || cell.columnIndex === undefined) {\n return;\n }\n self.touchSelecting = true;\n var bounds = self.getSelectionBounds();\n if (\n handleType === 'selection-handle-bl' &&\n cell.rowIndex >= bounds.top &&\n cell.columnIndex <= bounds.right\n ) {\n bounds.bottom = cell.rowIndex;\n bounds.left = cell.columnIndex;\n } else if (\n handleType === 'selection-handle-tl' &&\n cell.rowIndex <= bounds.bottom &&\n cell.columnIndex <= bounds.right\n ) {\n bounds.top = cell.rowIndex;\n bounds.left = cell.columnIndex;\n } else if (\n handleType === 'selection-handle-tr' &&\n cell.rowIndex <= bounds.bottom &&\n cell.columnIndex >= bounds.left\n ) {\n bounds.top = cell.rowIndex;\n bounds.right = cell.columnIndex;\n } else if (\n handleType === 'selection-handle-br' &&\n cell.rowIndex >= bounds.top &&\n cell.columnIndex >= bounds.left\n ) {\n bounds.bottom = cell.rowIndex;\n bounds.right = cell.columnIndex;\n }\n if (self.attributes.selectionMode === 'row' || cell.rowIndex === -1) {\n bounds.left = 0;\n bounds.right = self.getSchema().length - 1;\n } else {\n bounds.left = Math.max(0, bounds.left);\n }\n self.selectArea(bounds);\n self.draw(true);\n };\n function touchMove(e) {\n var ch, rw, rScrollZone, lScrollZone, bScrollZone, tScrollZone, sbw, t1, t2;\n if (self.dispatchEvent('beforetouchmove', { NativeEvent: e })) {\n return;\n }\n clearTimeout(touchScrollTimeout);\n if (e.changedTouches[0]) {\n self.touchPosition = self.getTouchPos(e);\n }\n if (e.changedTouches[1]) {\n self.touchPosition1 = self.getTouchPos(e, 1);\n }\n if (\n Math.abs(self.touchDelta.x) + Math.abs(self.touchDelta.y) >\n self.attributes.touchDeadZone\n ) {\n clearTimeout(self.touchContextTimeout);\n }\n if (e.touches.length === 2 && self.touchPosition && self.touchPosition1) {\n t1 = self.touchPosition.y;\n t2 = self.touchPosition1.y;\n if (!self.zoomDeltaStart) {\n self.zoomDeltaStart = Math.abs(t1 - t2);\n self.startScale = self.scale;\n }\n self.touchLength = 2;\n self.scaleDelta = self.zoomDeltaStart - Math.abs(t1 - t2);\n self.scale =\n self.startScale -\n self.scaleDelta * self.attributes.touchZoomSensitivity;\n self.scale = Math.min(\n Math.max(self.scale, self.attributes.touchZoomMin),\n self.attributes.touchZoomMax,\n );\n self.zoomAltered = true;\n self.resize(true);\n self.resizeChildGrids();\n return;\n }\n if (self.zoomAltered) {\n return;\n }\n self.touchLength = 1;\n self.touchPosition = self.touchPosition || self.touchPosition1;\n ch = self.getColumnHeaderCellHeight();\n rw = self.getRowHeaderCellWidth();\n rScrollZone =\n self.width - self.style.scrollBarWidth - self.touchPosition.x <\n self.attributes.selectionScrollZone;\n lScrollZone =\n self.touchPosition.x - rw < self.attributes.selectionScrollZone;\n bScrollZone =\n self.height - self.style.scrollBarWidth - self.touchPosition.y <\n self.attributes.selectionScrollZone;\n tScrollZone =\n self.touchPosition.y - ch < self.attributes.selectionScrollZone;\n sbw = self.style.scrollBarWidth;\n function touchScroll() {\n var x = self.scrollBox.scrollLeft,\n y = self.scrollBox.scrollTop;\n x += rScrollZone ? self.attributes.selectionScrollIncrement : 0;\n y += bScrollZone ? self.attributes.selectionScrollIncrement : 0;\n y -= tScrollZone ? self.attributes.selectionScrollIncrement : 0;\n x -= lScrollZone ? self.attributes.selectionScrollIncrement : 0;\n self.scrollBox.scrollTo(x, y);\n touchScrollTimeout = setTimeout(\n touchScroll,\n self.attributes.scrollRepeatRate,\n );\n }\n e.stopPropagation();\n self.touchDelta = {\n x: self.touchPosition.x - self.touchStart.x,\n y: self.touchPosition.y - self.touchStart.y,\n scrollLeft: self.scrollBox.scrollLeft,\n scrollTop: self.scrollBox.scrollTop,\n t: performance.now(),\n };\n self.currentCell = self.getCellAt(\n self.touchPosition.x,\n self.touchPosition.y,\n );\n self.dispatchEvent('touchmove', { NativeEvent: e, cell: self.currentCell });\n self.calculatePPS();\n self.touchDuration = performance.now() - self.touchScrollStart.t;\n self.stopAnimation = true;\n self.animationFrames = 0;\n if (\n self.touchSelecting &&\n (rScrollZone || lScrollZone || tScrollZone || bScrollZone)\n ) {\n touchScroll();\n }\n // the starting cell can be missing when the touch began off-grid (#554)\n var startingCellStyle =\n (self.startingCell && self.startingCell.style) || '';\n if (/vertical-scroll-/.test(startingCellStyle)) {\n self.scrollBox.scrollTop =\n self.scrollBox.scrollHeight *\n ((self.touchPosition.y - ch - sbw) /\n (self.scrollBox.height - sbw - ch));\n return;\n }\n if (/horizontal-scroll-/.test(startingCellStyle)) {\n self.scrollBox.scrollLeft =\n self.scrollBox.scrollWidth *\n ((self.touchPosition.x - rw - sbw) / (self.scrollBox.width - sbw - rw));\n return;\n }\n if (/selection-handle-/.test(startingCellStyle)) {\n self.touchSelect(self.currentCell, startingCellStyle);\n return;\n }\n self.scrollBox.scrollTo(\n self.touchScrollStart.x - self.touchDelta.x,\n self.touchScrollStart.y - self.touchDelta.y,\n );\n }\n self.touchmove = function (e) {\n if (touchMoving) {\n return;\n }\n requestAnimationFrame(function () {\n touchMoving = true;\n touchMove(e);\n touchMoving = false;\n });\n };\n self.touchEndEvents = function (e) {\n self.zoomDeltaStart = undefined;\n self.touchSelecting = false;\n clearInterval(self.touchScrollTimeout);\n clearInterval(self.touchContextTimeout);\n clearInterval(self.calculatePPSTimer);\n e.stopPropagation();\n document.body.removeEventListener('touchmove', self.touchmove, {\n passive: false,\n });\n document.body.removeEventListener('touchend', self.touchend, false);\n document.body.removeEventListener('touchcancel', self.touchcancel, false);\n };\n self.touchend = function (e) {\n if (\n self.dispatchEvent('touchend', { NativeEvent: e, cell: self.currentCell })\n ) {\n return;\n }\n self.zoomDeltaStart = undefined;\n if (e.changedTouches[0]) {\n self.touchPosition = undefined;\n }\n if (e.changedTouches[1]) {\n self.touchPosition1 = undefined;\n }\n if (self.zoomAltered) {\n if (e.touches.length === 0) {\n self.zoomAltered = false;\n }\n return;\n }\n var dz =\n Math.abs(self.touchDelta.x) + Math.abs(self.touchDelta.y) <\n self.attributes.touchDeadZone;\n if (isNaN(self.xPPS)) {\n self.xPPS = 0;\n }\n if (isNaN(self.yPPS)) {\n self.yPPS = 0;\n }\n if (isNaN(self.xPPST)) {\n self.xPPST = 0;\n }\n if (isNaN(self.yPPST)) {\n self.yPPST = 0;\n }\n self.touchAnimateTo.x =\n self.xPPS * self.attributes.touchReleaseAcceleration;\n self.touchAnimateTo.y =\n self.yPPS * self.attributes.touchReleaseAcceleration;\n self.calculatePPSTimed();\n if (\n !dz &&\n self.animationFrames === 0 &&\n (Math.abs(self.xPPST) > self.attributes.scrollAnimationPPSThreshold ||\n Math.abs(self.yPPST) > self.attributes.scrollAnimationPPSThreshold) &&\n !/-scroll-/.test((self.startingCell && self.startingCell.style) || '') &&\n !dz\n ) {\n self.stopAnimation = false;\n self.touchEndAnimation();\n }\n self.touchEndEvents(e);\n };\n self.touchcancel = function (e) {\n if (\n self.dispatchEvent('touchcancel', {\n NativeEvent: e,\n cell: self.currentCell,\n })\n ) {\n return;\n }\n self.touchEndEvents(e);\n };\n}\n","module.exports=function(e){var o={};function a(t){if(o[t])return o[t].exports;var r=o[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,a),r.l=!0,r.exports}return a.m=e,a.c=o,a.d=function(e,o,t){a.o(e,o)||Object.defineProperty(e,o,{enumerable:!0,get:t})},a.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},a.t=function(e,o){if(1&o&&(e=a(e)),8&o)return e;if(4&o&&\"object\"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,\"default\",{enumerable:!0,value:e}),2&o&&\"string\"!=typeof e)for(var r in e)a.d(t,r,function(o){return e[o]}.bind(null,r));return t},a.n=function(e){var o=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(o,\"a\",o),o},a.o=function(e,o){return Object.prototype.hasOwnProperty.call(e,o)},a.p=\"\",a(a.s=0)}([function(e,o,a){\"use strict\";Object.defineProperty(o,\"__esModule\",{value:!0});var t=a(1),r=Object.keys(t.default).reduce((function(e,o){return e.concat(t.default[o])}),[]);o.default=function(e){return-1===r.indexOf(e.key)}},function(e,o,a){\"use strict\";Object.defineProperty(o,\"__esModule\",{value:!0});o.default={modifier:[\"Alt\",\"AltGraph\",\"CapsLock\",\"Control\",\"Fn\",\"FnLock\",\"Meta\",\"NumLock\",\"ScrollLock\",\"Shift\",\"Symbol\",\"SymbolLock\"],legacyModifier:[\"Hyper\",\"Super\"],whiteSpace:[\"Enter\",\"Tab\"],navigation:[\"ArrowDown\",\"ArrowLeft\",\"ArrowRight\",\"ArrowUp\",\"End\",\"Home\",\"PageDown\",\"PageUp\"],editing:[\"Backspace\",\"Clear\",\"Copy\",\"CrSel\",\"Cut\",\"Delete\",\"EraseEof\",\"ExSel\",\"Insert\",\"Paste\",\"Redo\",\"Undo\"],ui:[\"Accept\",\"Again\",\"Attn\",\"Cancel\",\"ContextMenu\",\"Escape\",\"Execute\",\"Find\",\"Help\",\"Pause\",\"Play\",\"Props\",\"Select\",\"ZoomIn\",\"ZoomOut\"],device:[\"BrightnessDown\",\"BrightnessUp\",\"Eject\",\"LogOff\",\"Power\",\"PowerOff\",\"PrintScreen\",\"Hibernate\",\"Standby\",\"WakeUp\"],imeCompositionKeys:[\"AllCandidates\",\"Alphanumeric\",\"CodeInput\",\"Compose\",\"Convert\",\"Dead\",\"FinalMode\",\"GroupFirst\",\"GroupLast\",\"GroupNext\",\"GroupPrevious\",\"ModeChange\",\"NextCandidate\",\"NonConvert\",\"PreviousCandidate\",\"Process\",\"SingleCandidate\"],koreanSpecific:[\"HangulMode\",\"HanjaMode\",\"JunjaMode\"],japaneseSpecific:[\"Eisu\",\"Hankaku\",\"Hiragana\",\"HiraganaKatakana\",\"KanaMode\",\"KanjiMode\",\"Katakana\",\"Romaji\",\"Zenkaku\",\"ZenkakuHankaku\"],commonFunction:[\"F1\",\"F2\",\"F3\",\"F4\",\"F5\",\"F6\",\"F7\",\"F8\",\"F9\",\"F10\",\"F11\",\"F12\",\"Soft1\",\"Soft2\",\"Soft3\",\"Soft4\"],multimedia:[\"ChannelDown\",\"ChannelUp\",\"Close\",\"MailForward\",\"MailReply\",\"MailSend\",\"MediaClose\",\"MediaFastForward\",\"MediaPause\",\"MediaPlay\",\"MediaPlayPause\",\"MediaRecord\",\"MediaRewind\",\"MediaStop\",\"MediaTrackNext\",\"MediaTrackPrevious\",\"New\",\"Open\",\"Print\",\"Save\",\"SpellCheck\"],multimediaNumpad:[\"Key11\",\"Key12\"],audio:[\"AudioBalanceLeft\",\"AudioBalanceRight\",\"AudioBassBoostDown\",\"AudioBassBoostToggle\",\"AudioBassBoostUp\",\"AudioFaderFront\",\"AudioFaderRear\",\"AudioSurroundModeNext\",\"AudioTrebleDown\",\"AudioTrebleUp\",\"AudioVolumeDown\",\"AudioVolumeUp\",\"AudioVolumeMute\",\"MicrophoneToggle\",\"MicrophoneVolumeDown\",\"MicrophoneVolumeUp\",\"MicrophoneVolumeMute\"],speech:[\"SpeechCorrectionList\",\"SpeechInputToggle\"],application:[\"LaunchApplication1\",\"LaunchApplication2\",\"LaunchCalendar\",\"LaunchContacts\",\"LaunchMail\",\"LaunchMediaPlayer\",\"LaunchMusicPlayer\",\"LaunchPhone\",\"LaunchScreenSaver\",\"LaunchSpreadsheet\",\"LaunchWebBrowser\",\"LaunchWebCam\",\"LaunchWordProcessor\"],browser:[\"BrowserBack\",\"BrowserFavorites\",\"BrowserForward\",\"BrowserHome\",\"BrowserRefresh\",\"BrowserSearch\",\"BrowserStop\"],mobilePhone:[\"AppSwitch\",\"Call\",\"Camera\",\"CameraFocus\",\"EndCall\",\"GoBack\",\"GoHome\",\"HeadsetHook\",\"LastNumberRedial\",\"Notification\",\"MannerMode\",\"VoiceDial\"],tv:[\"TV\",\"TV3DMode\",\"TVAntennaCable\",\"TVAudioDescription\",\"TVAudioDescriptionMixDown\",\"TVAudioDescriptionMixUp\",\"TVContentsMenu\",\"TVDataService\",\"TVInput\",\"TVInputComponent1\",\"TVInputComponent2\",\"TVInputComposite1\",\"TVInputComposite2\",\"TVInputHDMI1\",\"TVInputHDMI2\",\"TVInputHDMI3\",\"TVInputHDMI4\",\"TVInputVGA1\",\"TVMediaContext\",\"TVNetwork\",\"TVNumberEntry\",\"TVPower\",\"TVRadioService\",\"TVSatellite\",\"TVSatelliteBS\",\"TVSatelliteCS\",\"TVSatelliteToggle\",\"TVTerrestrialAnalog\",\"TVTerrestrialDigital\",\"TVTimer\"],mediaControls:[\"AVRInput\",\"AVRPower\",\"ColorF0Red\",\"ColorF1Green\",\"ColorF2Yellow\",\"ColorF3Blue\",\"ColorF4Grey\",\"ColorF5Brown\",\"ClosedCaptionToggle\",\"Dimmer\",\"DisplaySwap\",\"DVR\",\"Exit\",\"FavoriteClear0\",\"FavoriteClear1\",\"FavoriteClear2\",\"FavoriteClear3\",\"FavoriteRecall0\",\"FavoriteRecall1\",\"FavoriteRecall2\",\"FavoriteRecall3\",\"FavoriteStore0\",\"FavoriteStore1\",\"FavoriteStore2\",\"FavoriteStore3\",\"Guide\",\"GuideNextDay\",\"GuidePreviousDay\",\"Info\",\"InstantReplay\",\"Link\",\"ListProgram\",\"LiveContent\",\"Lock\",\"MediaApps\",\"MediaAudioTrack\",\"MediaLast\",\"MediaSkipBackward\",\"MediaSkipForward\",\"MediaStepBackward\",\"MediaStepForward\",\"MediaTopMenu\",\"NavigateIn\",\"NavigateNext\",\"NavigateOut\",\"NavigatePrevious\",\"NextFavoriteChannel\",\"NextUserProfile\",\"OnDemand\",\"Pairing\",\"PinPDown\",\"PinPMove\",\"PinPToggle\",\"PinPUp\",\"PlaySpeedDown\",\"PlaySpeedReset\",\"PlaySpeedUp\",\"RandomToggle\",\"RcLowBattery\",\"RecordSpeedNext\",\"RfBypass\",\"ScanChannelsToggle\",\"ScreenModeNext\",\"Settings\",\"SplitScreenToggle\",\"STBInput\",\"STBPower\",\"Subtitle\",\"Teletext\",\"VideoModeNext\",\"Wink\",\"ZoomToggle\"]}}]).default;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\tif (!(moduleId in __webpack_modules__)) {\n\t\tdelete __webpack_module_cache__[moduleId];\n\t\tvar e = new Error(\"Cannot find module '\" + moduleId + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter/value functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); };","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/*jslint browser: true, unparam: true, todo: true, evil: true*/\n/*globals Reflect: false, HTMLElement: true, define: true, MutationObserver: false, requestAnimationFrame: false, performance: false, btoa: false*/\n'use strict';\n\nimport component from './component';\nimport defaults from './defaults';\nimport draw from './draw';\nimport events from './events';\nimport touch from './touch';\nimport intf from './intf';\nimport selections from './selections/index';\nimport contextMenu from './contextMenu';\nimport button from './button';\nimport dom from './dom';\nimport publicMethods from './publicMethods';\n\nvar webComponent = component();\n\nvar modules = [\n defaults,\n draw,\n events,\n touch,\n intf,\n selections,\n contextMenu,\n button,\n dom,\n publicMethods,\n];\n\nfunction Grid(args) {\n args = args || {};\n var self = {};\n self.isComponent = args.component === undefined;\n self.isChildGrid =\n args.parentNode &&\n /canvas-datagrid-(cell|tree)/.test(args.parentNode.nodeType);\n if (self.isChildGrid) {\n self.intf = {};\n } else {\n // Written directly (no eval) so the bundle works under a Content Security\n // Policy without 'unsafe-eval' (#311); ES5-only browsers are not targeted.\n self.intf = self.isComponent\n ? Reflect.construct(HTMLElement, [], new.target)\n : document.createElement('canvas');\n }\n self.args = args;\n self.intf.args = args;\n self.applyComponentStyle = webComponent.applyComponentStyle;\n self.hyphenateProperty = webComponent.hyphenateProperty;\n self.dehyphenateProperty = webComponent.dehyphenateProperty;\n self.createGrid = function grid(args) {\n args.component = false;\n return new Grid(args);\n };\n\n modules.forEach(function (module) {\n module(self);\n });\n\n if (self.isChildGrid) {\n self.shadowRoot = args.parentNode.shadowRoot;\n self.parentNode = args.parentNode;\n } else {\n self.shadowRoot = self.intf.attachShadow({ mode: 'open' });\n self.parentNode = self.shadowRoot;\n }\n self.init();\n return self.intf;\n}\nif (window.HTMLElement) {\n Grid.prototype = Object.create(window.HTMLElement.prototype);\n}\n// export web component\nif (window.customElements) {\n Grid.observedAttributes = webComponent.getObservableAttributes();\n Grid.prototype.disconnectedCallback = webComponent.disconnectedCallback;\n Grid.prototype.attributeChangedCallback =\n webComponent.attributeChangedCallback;\n Grid.prototype.connectedCallback = webComponent.connectedCallback;\n Grid.prototype.adoptedCallback = webComponent.adoptedCallback;\n window.customElements.define('canvas-datagrid', Grid);\n}\n\n// export global\nif (\n window &&\n !window.canvasDatagrid &&\n !window.require &&\n // Present to exclude global declarations from ES Module bundles\n !window.EXCLUDE_GLOBAL\n) {\n window.canvasDatagrid = function (args) {\n return new Grid(args);\n };\n}\n\n// export amd loader\nexport default function canvasDatagrid(args) {\n args = args || {};\n var i,\n tKeys = [\n 'style',\n 'formatters',\n 'sorters',\n 'filters',\n 'treeGridAttributes',\n 'cellGridAttributes',\n 'fillCellCallback',\n 'data',\n 'schema',\n ];\n if (window.customElements) {\n i = document.createElement('canvas-datagrid');\n Object.keys(args).forEach(function (argKey) {\n // set data and parentNode after everything else\n if (argKey === 'data') {\n return;\n }\n if (argKey === 'parentNode') {\n return;\n }\n // top level keys in args\n if (tKeys.indexOf(argKey) !== -1) {\n tKeys.forEach(function (tKey) {\n if (args[tKey] === undefined || tKey !== argKey) {\n return;\n }\n if (['formatters', 'sorters', 'filters'].indexOf(argKey) !== -1) {\n if (typeof args[tKey] === 'object' && args[tKey] !== null) {\n Object.keys(args[tKey]).forEach(function (sKey) {\n i[tKey][sKey] = args[tKey][sKey];\n });\n }\n } else {\n i[tKey] = args[tKey];\n }\n });\n return;\n }\n // all others are attribute level keys\n i.attributes[argKey] = args[argKey];\n });\n if (args.data) {\n i.data = args.data;\n }\n // add to the dom very last to avoid redraws\n if (args.parentNode) {\n args.parentNode.appendChild(i);\n }\n return i;\n }\n args.component = false;\n i = new Grid(args);\n if (args.parentNode && args.parentNode.appendChild) {\n args.parentNode.appendChild(i);\n }\n return i;\n}\n"],"names":["self","zIndexTop","applyButtonMenuItemStyle","buttonMenuItemContainer","createInlineStyle","mobile","addEventListener","applyButtonStyle","button","buttonMenu","createButton","pos","items","imgSrc","wrapper","document","createElement","buttonArrow","buttonIcon","intf","Array","isArray","Error","init","loc","s","scrollOffset","canvas","undefined","style","buttonZIndex","x","left","y","top","height","position","zIndex","scrollBox","scrollLeft","scrollTop","innerHTML","buttonArrowDownHTML","img","setAttribute","maxWidth","appendChild","body","toggleButtonMenu","dispose","parentNode","removeChild","createDisposeEvent","requestAnimationFrame","disposeButtonMenu","offsetHeight","createButtonMenu","selectedIndex","rect","createItems","addItem","item","menuItemContainer","addContent","content","title","click","ev","apply","disposeButton","clickIndex","idx","dispatchEvent","Event","getBoundingClientRect","bottom","window","innerHeight","buttonMenuWindowMargin","right","innerWidth","Object","defineProperty","get","set","value","isNaN","isFinite","length","forEach","index","removeEventListener","e","keyCode","moveButtonPos","attachButton","defaults","typeMap","component","dehyphenateProperty","hyphenateProperty","prop","replace","p","nextLetterCap","prototype","call","char","toUpperCase","cust","toLowerCase","getDefaultItem","base","i","r","filter","applyComponentStyle","supressChangeAndDrawEvents","isComponent","cStyle","getComputedStyle","tagName","defs","computedStyle","styles","def","val","getPropertyValue","test","trim","setStyleProperty","resize","data","strData","JSON","parse","schema","strSchema","number","strNum","n","parseInt","boolean","strBool","string","str","getObservableAttributes","attrs","attributes","attr","push","disconnectedCallback","connected","observer","disconnect","unobserveResizeTargets","connectedCallback","parentDOMNode","observe","observeResizeTargets","adoptedCallback","attributeChangedCallback","attrName","oldVal","newVal","tfn","dataType","name","handler","Function","err","console","warn","MutationObserver","mutations","checkInnerHTML","checkStyle","mutation","attributeName","target","nodeName","addedNodes","type","characterData","childList","subtree","querySelectorAll","el","hoverScrollTimeout","autoCompleteContext","applyContextItemStyle","contextItemContainer","createContextMenu","parentContextMenu","container","upArrow","downArrow","children","childMenuArrow","removeChildContext","relatedTarget","contextMenu","contains","splice","indexOf","contextAddCallback","getAttribute","cPos","childContextMenuMarginLeft","offsetWidth","childContextMenuMarginTop","createChildContext","childContextMenuArrowHTML","checkArrowVisibility","scrollHeight","fade","element","opacity","timer","setInterval","clearInterval","display","animationDurationHideContextMenu","unfade","animationDurationShowContextMenu","startHoverScroll","t","a","contextHoverScrollAmount","setTimeout","contextHoverScrollRateMs","endHoverScroll","clearTimeout","contextMenuZIndex","color","contextMenuArrowColor","textAlign","inputDropdown","maxHeight","autocompleteBottomMargin","minWidth","width","hasFocus","deltaY","deltaX","contextMenuArrowUpHTML","contextMenuArrowDownHTML","contextMenuWindowMargin","parentGrid","c","createFilterContextMenuItems","filterContainer","filterLabel","filterAutoCompleteButton","filterInput","cell","header","iRect","checkRegExpErrorState","background","contextFilterInputBackground","contextFilterInputColor","invalidFilterRegEx","contextFilterInvalidRegExpBackground","contextFilterInvalidRegExpColor","fillAutoComplete","count","blanksItem","viewData","row","cellValue","String","blankValues","includes","blanksText","maxAutoCompleteItems","formatters","stopPropagation","disposeAutocomplete","keys","concat","map","key","createAutoCompleteContext","autoCompleteItems","onclick","disposeContextMenu","preventDefault","setFilter","en","columnFilters","filterOptionText","contextFilterButtonHTML","cf","h","getHeaderByName","removeFilterOptionText","removeFilterClick","controlInput","focus","addDefaultContextMenuItem","getSchema","columns","getColumnsMap","Map","_col","columnIndex","isSorting","orderings","isNormalCell","isBackground","isColumnHeaderCellCap","isScrollBar","isCorner","isRowHeader","showFilter","showCopy","canSelectionsBeCopied","copyText","execCommand","showPaste","clipBoardData","pasteText","paste","draw","showColumnSelector","columnSelectorText","d","column","toggleColumnVisibility","hidden","setStorageData","columnSelectorHiddenText","columnSelectorVisibleText","columnOrderIndex","orders","contiguousColumns","getSelectedContiguousColumns","col","join","hideColumnText","hideColumns","orderIndex","saveAppearance","showClearSettingsOption","sizes","rows","clearSettingsOptionText","createRowOrders","createColumnOrders","storedSettings","columnWidth","cellWidth","dispatchResizeRow","cellHeight","allowSorting","showOrderByOption","showOrderByOptionTextAsc","order","showOrderByOptionTextDesc","canHideRows","range","getSelectedContiguousRows","boundRowIndexes","viewRowIndex","getBoundRowIndexFromViewRowIndex","showHideRow","hideRows","it","showHideRows","groupAreaHeight","getColumnGroupAreaHeight","groupAreaWidth","getRowGroupAreaWidth","setCollapseStateForAllGroups","allGroups","collapsed","groups","j","group","refresh","showRemoveAllGroupColumns","groupedColumns","showExpandAllGroupColumns","showCollapseAllGroupColumns","showRemoveAllGroupRows","groupedRows","showExpandAllGroupRows","showCollapseAllGroupRows","canGroupByColumns","allowGroupingColumns","isColumnHeader","canUngroupColumns","canGroupByRows","allowGroupingRows","canUngroupRows","groupIndexes","headerIndex","isColumnSelected","isNewGroupRangeValid","groupTitles","groupNames","showGroupColumns","groupColumns","getGroupsColumnBelongsTo","from","to","cell0","cell1","formatArgs","showRemoveGroupColumns","removeGroupColumns","rangeTitle","rowIndex","showGroupRows","groupRows","getGroupsRowBelongsTo","showRemoveGroupRows","removeGroupRows","event","ctrlKey","contextMenuOpenedAt","performance","now","mousedown","mouseup","contextmenuEvent","overridePos","childGrids","childGrid","offsetLeft","offsetTop","isChildGrid","childGridsOfParent","matchedMe","find","grid","nodeA","nodeB","x0","x1","y0","y1","node","newX1","newY1","nodeType","contextPosition","getLayerPos","NativeEvent","getCellAt","isGrid","contextMenuMarginLeft","canvasOffsetLeft","contextMenuMarginTop","canvasOffsetTop","mobileContextMenuMargin","filterButtonMenuOffsetTop","getClippingRect","ele","boundingRect","eleRect","clipRect","w","parentRect","Infinity","columnHeaderCellHeight","getColumnHeaderCellHeight","rowHeaderCellWidth","getRowHeaderCellWidth","scrollBarWidth","clipElement","clip","scrollingElement","resizeEditInput","input","editCell","bm","gridBorderCollapse","borderWidth","cellBorderWidth","getVisibleCellByIndex","mobileEditInputHeight","groupAreaOffsetY","groupAreaOffsetX","columnGroupsAreaHeight","rowGroupsAreaWidth","cellPaddingLeft","ignoreScrollOffset","calculatedTree","offsetParent","isTree","clientX","clientY","initResizeObserver","ResizeObserver","observedSizes","resizeObserver","entries","changed","entry","contentRect","last","disposed","resizeObserverFrame","host","endEdit","abort","isNewRow","abortEdit","newValue","oldValue","changeIndex","boundRowIndex","changes","originalData","defaultValue","aborted","addRow","createNewRowData","dispatchDataChanged","beginEditAt","inEnterMode","editable","adjacentCells","enumItems","enu","option","valueInEnum","scrollIntoView","setActiveCell","getAdjacentCells","multiLine","showPicker","editCellZIndex","fontSize","editCellFontSize","scale","cellValueIsEmpty","shouldClearCellValue","Math","round","nx","ny","altKey","nextRowIndex","shiftKey","max","min","first","className","css","padding","buttonPadding","borderStyle","borderColor","buttonBorderColor","cursor","buttonBackgroundColor","userSelect","buttonHoverBackgroundColor","buttonActiveBorderColor","buttonActiveBackgroundColor","verticalAlign","buttonArrowColor","lineHeight","fontWeight","fontFamily","contextMenuFontFamily","contextMenuFontSize","margin","contextMenuItemMargin","borderRadius","contextMenuItemBorderRadius","contextMenuHoverBackground","contextMenuHoverColor","contextMenuLabelMargin","contextMenuLabelDisplay","contextMenuLabelMinWidth","contextMenuLabelMaxWidth","contextMenuBackground","contextMenuColor","border","contextMenuBorder","contextMenuPadding","contextMenuBorderRadius","contextMenuOpacity","overflow","whiteSpace","contextMenuCursor","marginLeft","contextFilterInputBorder","contextFilterInputBorderRadius","contextFilterInputFontFamily","contextFilterInputFontSize","contextFilterButtonBorder","contextFilterButtonBorderRadius","contextMenuFilterButtonFontFamily","contextMenuFilterButtonFontSize","cssFloat","childContextMenuArrowColor","contextMenuChildArrowFontSize","boxSizing","outline","mobileEditFontFamily","mobileEditFontSize","editCellBorder","editCellColor","editCellBackgroundColor","appearance","webkitAppearance","mozAppearance","editCellPaddingLeft","editCellFontFamily","boxShadow","editCellBoxShadow","contextMenuFilterInvalidExpresion","appendTo","setDom","ctx","context","eventParent","onblur","blur","parentIsCanvas","getContext","textBaseline","parentNodeStyle","touchstart","passive","dblclick","mouseupOutsideGrid","mousemove","scrollWheel","copy","cut","keypress","keyup","keydown","isCellSelected","perfCounters","cachedImagesDrawn","drawCount","perfWindowSize","entityCount","hiddenFrozenColumnCount","scrollDebugCounters","touchPPSCounters","htmlImageCache","fillArray","low","high","step","drawPerfLine","perfArr","arrIndex","useAbs","beginPath","moveTo","cx","cy","abs","lineTo","strokeStyle","stroke","drawOnAllImagesLoaded","loaded","html","complete","drawHtml","v","formattedValue","cacheKey","toString","drawImage","Image","onload","src","btoa","drawLines","coords","fill","drawGroupHandle","fillRect","strokeRect","drawUnhideIndicator","size","dir","active","minPadding","maxPadding","longEdge","median","halfLongEdge","borderCoords","unhideIndicatorBorderColor","lineWidth","fillStyle","unhideIndicatorBackgroundColor","offset","unhideIndicatorColor","drawOrderByArrow","mt","columnHeaderOrderByArrowMarginTop","ml","columnHeaderOrderByArrowMarginLeft","mr","columnHeaderOrderByArrowMarginRight","aw","columnHeaderOrderByArrowWidth","ah","columnHeaderOrderByArrowHeight","columnHeaderOrderByArrowColor","columnHeaderOrderByArrowBorderColor","orderDirection","drawTreeArrow","treeArrowMarginTop","treeArrowMarginRight","treeArrowMarginLeft","treeArrowWidth","treeArrowHeight","treeArrowColor","treeArrowBorderColor","openChildren","drawCellTreeIcon","tree","rowTree","parentCount","iconSize","cellTreeIconWidth","marginTop","cellTreeIconMarginTop","marginRight","cellTreeIconMarginRight","cellTreeIconMarginLeft","paddingLeft","icon","oldFillStyle","oldStrokeStyle","hovered","hovers","onCellTreeIcon","cellTreeIconHoverFillColor","cellTreeIconFillColor","cellTreeIconBorderColor","expand","cellTreeIconLineWidth","cellTreeIconLineColor","drawFilterButtonArrow","filterButtonHeight","filterButtonArrowHeight","filterButtonWidth","filterButtonArrowWidth","filterButtonArrowColor","filterButtonArrowBorderColor","radiusRect","radius","b","quadraticCurveTo","fillText","text","fillCircle","arc","PI","strokeCircle","clipFrozenArea","mode","lastFrozenColumnPixel","lastFrozenRowPixel","fillHandle","selectionHandleType","strokeHandle","addselectionHandle","hw","selectionHandleSize","tr","br","tl","bl","addBorderLine","l","addEllipsis","ellipsisCache","measureText","wrapText","splitChar","lines","calculatedLineHeight","word","words","split","textHeight","out","wrap","cellWhiteSpace","autoResize","autoResizeRows","elWidth","et","ellipsisText","elClipLength","plWidth","clippedVal","ogWordWidth","previousLine","line","cHeight","paddedHeight","curSplitChar","measure","paddedWidth","arr","originText","stepLength","direction","substr","drawText","treeCellPadding","ll","fontHeight","textBlockHeight","vPos","hPos","orderByArrowWidth","horizontalAlignment","paddingRight","verticalAlignment","paddingBottom","lineSpacing","debug","font","debugFont","debugColor","stringify","pw","idx_ord","sortColumnIndex","getFrozenColumnsWidth","frozenColumn","collapsedGroups","getCollapsedColumnGroups","isCollapsed","findIndex","getColumnWidth","internal","visible","checkScrollHeight","rowHeaderCell","treeGrid","rowOpen","rowHeight","cornerCell","rowData","aCell","bc","selectionBorders","moveBorders","selectionHandles","rowHeaders","u","currentCell","rowGroupsRectInfo","rowGroupsFrozenInfo","columnGroupsRectInfo","collapsedColumnGroups","collapsedRowGroups","getCollapsedRowGroups","currentRowIndexOffset","rowIndexOffsetByHiddenRows","hiddenRowRanges","plus","sort","visibleRowHeights","saveRowGroupsRectInfo","saveColumnGroupsRectInfo","isColumnCollapsedByGroup","drawScrollBars","drawCorner","entities","m","scrollBarBoxMargin","scrollBarBorderColor","scrollBarBorderWidth","horizontalBox","scrollCache","horizontalBar","scrollBoxWidth","scrollWidth","verticalBox","frozenRow","verticalBar","scrollBoxHeight","horizontalBarVisible","scrollBarBackgroundColor","scrollBarBoxColor","horizontalBoxVisible","scrollBarActiveColor","scrollBarBoxBorderRadius","visibleCells","unshift","verticalBarVisible","verticalBoxVisible","scrollBarCornerBorderColor","scrollBarCornerBackgroundColor","corner","createHandlesOverlayArray","allowMovingSelection","selectionBorderTop","selectionBorderRight","selectionHandle","selectionBorderLeft","fillOverlay","handle","snapTo","selectionBorderBottom","selectionHandleBehavior","createBorderOverlayArray","drawArray","propPrefix","offsetPoint","selectionBorder","isSelected","selections","lastColumnIndex","lastRowIndex","isHeader","drawCell","rowOrderIndex","isActiveRowHeader","activeCell","isRowSelected","drawEach","cellStyle","cellGridAttributes","isFilterable","filterable","selected","hoverMode","openedFilter","selectedFilterButton","rawValue","f","orderByArrowSize","treeArrowSize","isActiveColumnHeader","viewColumnIndex","activeHeader","visibleRows","paddingTop","cellLineHeight","cellLineSpacing","boundColumnIndex","getBoundColumnIndexFromViewColumnIndex","sortRowIndex","isNormal","gridId","isRowTree","cellTree","rowTreeColIndex","isColumnTree","userHeight","userWidth","cellHeightWithChildGrid","cellWidthWithChildGrid","save","showRowNumbers","createGrid","cellGridHeight","orderBy","filterTextPrefix","getScaledFont","isDrawText","movingSelection","moveOffset","restore","drawFilterButton","showRowNumberGaps","previousRowNumber","hasRowGap","beginRowIndex","endRowIndex","barHeight","rowHeaderCellRowNumberGapHeight","barColor","rowHeaderCellRowNumberGapColor","showUnhideColumnsIndicator","unhideIndicator","unhideIndicatorSize","cellX","topY","isActive","orderIndex0","orderIndex1","isHiddenColumn","drawIndicator","leftX","visibleUnhideIndicators","x2","y2","iconsWidth","lineX0","lineX1","orderIndexPtr","prevColumnIndex","nextColumnIndex","indicatorX","showUnhideRowsIndicator","cellY","topIndicators","bottomIndicators","matched","indicatorY","posX","posY","filterButtonBorderColor","filterButtonBackgroundColor","filterButtonActiveBackgroundColor","onFilterButton","filterButtonHoverBackgroundColor","filterButtonBorderRadius","drawRowHeader","showRowHeaders","filteredRowNumber","rowHeaderValue","hasActiveFilters","hasCollapsedRowGroup","headerDescription","shift","drawHeaders","g","o","columnHeaderCell","nonFrozenHeaderWidth","drawHeaderColumnRange","start","end","rArgs","rhIndex","showColumnHeaders","scrollPixelLeft","columnHeaderCellBorderWidth","scrollIndexLeft","isColumnHeaderCell","endCap","drawRow","treeHeight","rowSansTreeHeight","trees","scrollIndexRight","scrollPixelRight","initDraw","visibleGroups","firstRowIndexOffset","drawBackground","clearRect","gridBackgroundColor","initGroupArea","translate","drawGroupArea","mx","my","frozenColumnsWidth","frozenRowsHeight","onTheLeft","columnGroupIndicatorPosition","onTheTop","rowGroupIndicatorPosition","groupingAreaBackgroundColor","assign","columnGroupRowHeight","toggleHandleSize","toggleHandlePadding","centerY","bottomY","leftmostX","drawGroupHandleAtX","pushToVisibleGroups","rightX","crossTheFrozen","notInFrozen","colIndex","compare","groupIndicatorColor","groupIndicatorBackgroundColor","ptr","containsBegining","containsEnd","rightCompare","compareX","minLeftX","lineCoords","colWidth","rowGroupColumnWidth","centerX","topmostY","drawGroupHandleAtY","bottomCompare","compareY","minTopY","drawFrozenRows","ln","allowFreezingRows","frozenMarkerWidth","frozenMarkerBorderWidth","drawRows","snapToRow","scrollPixelTop","scrollIndexTop","scrollIndexBottom","scrollPixelBottom","hide","showNewRow","newRow","drawMoveMarkers","moveOverlayBorderWidth","moveOverlayBorderColor","setLineDash","moveOverlayBorderSegments","drawReorderMarkers","reorderObject","dragOffset","reorderMarkerBackgroundColor","reorderMarkerBorderWidth","reorderMarkerBorderColor","dragMode","getSelectedRowsHeight","reorderMarkerIndexBorderWidth","reorderMarkerIndexBorderColor","reorderTarget","getSelectedColumnsWidth","drawResizeMarkers","resizeAfterDragged","draggingItem","pendingDragResize","resizingRow","resizeMarkerSize","minX","dragStart","resizingStartingWidth","minColumnWidth","minY","resizingStartingHeight","minRowHeight","resizeMarkerColor","drawBorder","gridBorderWidth","gridBorderColor","drawSelectionBorders","dsb","selectionOverlayBorderWidth","selectionOverlayBorderColor","drawFillOverlay","drawSelectionHandles","selectionHandleBorderWidth","selectionHandleBorderColor","selectionHandleColor","az","touchSelectHandleZone","ax","ay","overlay","toX","toY","snap","cursorX","cursorY","fillOverlayBorderColor","fillOverlayBorderWidth","drawActiveCell","cl","acx","acy","acw","ach","selectionMode","activeCellOverlayBorderWidth","activeCellOverlayBorderColor","getHeaderWidth","drawFrozenMarkers","xHover","yHover","allowFreezingColumns","freezeMarkerPosition","frozenMarkerColor","frozenMarkerBorderColor","frozenMarkerHoverColor","frozenMarkerHeaderColor","frozenMarkerHoverBorderColor","dragStartObject","frozenMarkerActiveColor","frozenMarkerActiveBorderColor","nearCell","isGrab","frozenMarkerActiveHeaderColor","drawPerfLines","showPerformance","px","py","ph","dpl","debugPerfChartTextColor","toFixed","debugPerfChartBackground","debugScrollHeightColor","debugScrollWidthColor","debugPerformanceColor","debugEntitiesColor","debugTouchPPSXColor","debugTouchPPSYColor","pop","yPPS","xPPS","drawDebug","perf","reduce","perfDelta","htmlImages","startScale","scaleDelta","zoomDeltaStart","touchLength","touches","touchPosition","touchPosition1","scrollIndex","scrollPixel","canvasOffset","touchDelta","touchAnimateTo","scrollAnimation","touchPPS","touchPPST","xPPST","yPPST","touchDuration","pointerLockPosition","mouse","touch","touchStart","dragContext","debugBackgroundColor","lh","isPrintableKeyEvent","isSupportedHtml","parseData","deduceColTypeFromData","wheeling","fn","events","removeEachListener","sfn","defaultPrevented","dispatchEachEvent","getRatio","maxPixelRatio","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","refreshScrollCacheX","frozenWidth","isColumnCollapsed","dataWidth","reduceSchema","accumulator","schemaIndex","drawAfterResize","vb","nb","co","isScrollBoxCorner","sbw","ratio","cellBorder","columnHeaderCellBorder","dataHeight","dims","topGroupAreaHeight","leftGroupAreaWidth","ch","checkScrollBoxVisibility","capped","autoSizeCapped","overflowX","overflowY","setScrollBoxSize","setCanvasSize","maxCanvasSize","dim","appliedInlineStyles","autoLastColumnWidth","args","fillLastColumn","getLastVisibleColumnIndex","availableWidth","widthBoxRatio","heightBoxRatio","scrollBarBoxMinSize","scrollBarBoxWidth","bar","box","page","pageUpDownOverlap","newWidth","newHeight","scroll","dontDraw","floor","which","stopFreezeMove","ctrl","metaKey","persistantSelectionMode","singleSelectionMode","dragBounds","sBounds","delta","disallowVerticalAutoScroll","disallowHorizontalAutoScroll","previousCell","scrollTimer","isInGrid","rowBoundaryCrossed","columnBoundaryCrossed","cellBoundaryCrossed","prefix","cursorGrab","indicator","getUnhideIndicator","dragItem","pc","rc","rx","ry","selecting","getSelectionBounds","isMultiColumnsSelected","isMultiRowsSelected","ignoreNextClick","toggleCollapseTree","dragAddToSelection","unselectCell","selectCell","selectionBounds","clearSelections","selectRow","selectArea","movingSelectionHandle","autoScrollOnMousemove","movedVertically","autoScrollMargin","movedHorizontally","autoScrollZone","columnGroup","getColumnGroupAt","rowGroup","getRowGroupAt","startingBounds","checkSelectionChange","sb","getContextOfSelectionEvent","unhideColumns","unhideRows","toggleGroup","leftOffset","topOffset","xInGrid","yInGrid","columnHeaderClickBehavior","selectAll","treeArrowClickRadius","toggleTree","dragResizeColumn","resizingColumn","resizeEventDetails","dragResizeApply","resizeScrollZone","resizeChildGrids","globalRowResize","stopDragResize","hasMoved","dragItemIsSelected","fitSelectedColumns","fitSelectedRows","scrollGrid","scrollPointerLock","scrollStartMode","movementX","movementY","scrollMode","scrollStart","scrollModes","scrollRepeatRate","selectionScrollIncrement","stopScrollGrid","exitPointerLock","dragReorder","columReorder","rowReorder","allowColumnReordering","allowRowReordering","selectColumn","source","reorderDeadZone","stopDragReorder","originalIndex","targetIndex","orderLists","indexName","selectedIndexes","getRowSelectionStates","sortColumnIndices","selectedColumnIndices","deleteCount","selectColumnViewIndexes","rowIndexes","getRowViewIndexesFromSelection","moveSelection","dragMove","stopDragMove","freezeMove","startFreezeMove","lastMouseDownTarget","move","freeze","selectionHandleMove","onUnhideIndicator","requestPointerLock","allowColumnSelection","selection","stopSelectionHandleMove","cloneSelections","dragging","cols","keepFocusOnMouseOut","selectNone","deleteSelectedData","Number","isArrowKey","shrinkOrExpandSelections","selectionFollowsActiveCell","currentCellIsSelected","fitColumnToValues","autosize","cellTreeExpandCollapse","deltaMode","touchHaltAnimation","scrollTo","pasteData","pasteValue","mimeType","startRowIndex","startColIndex","minRowsLength","minColumnsLength","columnsLength","cellData","forEachSelectedCell","colName","insert","startColumnIndex","reverseRows","reverseColumns","alwaysFilling","affectedCells","columnName","cells","expandGridForInsert","requiredRowCount","requiredColumnCount","missingColumns","lastColumn","Date","validateColumn","applyDefaultValue","missingRows","rowsLength","fillCellCallback","filledCells","allowGridExpandOnPaste","rowPosReal","rowDataPos","fillingRow","rowPosition","realRowIndex","cellsLength","existingRowData","newRowData","fillArgs","rowOffset","reversed","isFillingRow","fillingRowPosition","fillingRowLength","colPosReal","cellDataPos","fillingColumn","colPosition","existingCellData","columnOffset","newCellData","isFillingColumn","fillingColumnPosition","fillingColumnLength","boundRowIndexMap","getNextVisibleColumnIndex","visibleColumnIndex","getVisibleSchema","getVisibleColumnIndexOf","getSelectionIndex","bounds","rowLength","columnLength","clipboardItems","clipboardData","supportedMimeTypes","pasteableItems","selectionIndex","itemToPaste","pasteType","getAsString","copySelectedCellsToClipboard","clearSelectedCells","apiCompatibleCells","clippingRect","isInSelectionBounds","lastInBoundsLocation","dx","dy","boundsOld","isVertical","isHorizontal","startRow","startColumn","reverseVertically","reverseHorizontally","genericDiv","genericSpan","genericTable","excelTable","excelTableRow","some","expression","IGNORE_NODETYPES","isHtmlTable","sanitizeElementData","elementData","innerText","parseHtmlText","doc","DOMParser","parseFromString","querySelector","parseHtmlTable","trs","childNode","childNodes","parseText","htmlSafe","createTextString","selectedData","isNeat","values","createHTMLString","htmlString","colNum","len","isColEmpty","mergeHiddenRowRanges","newRange","inserted","nextRange","ctor","treeGridAttributes","storageName","invalidSearchExpClass","localStyleLibraryStorageKey","add","sortFunction","filters","tempSchema","columnTreeRowStartIndex","columnTreeRowEndIndex","origin","sorters","parsers","schemaHashes","componentL1Events","eventNames","has","result","groupIndex","matchedGroup","gi","nextCollapsed","groupsArray","gIndex","visibility","localStorage","setItem","newRowIndex","forEachHeader","getSchemaNameHash","getFilteredAndSortedViewData","newViewData","originalRowIndex","ranges","countOfRows","headerName","filterText","currentFilterFunction","filterFrozenRows","newLen","from2","to2","slice","it2","sortFn","rowA","rowB","rowIndexB","sortFrozenRows","_row","getBestGuessDataType","drawChildGrids","gridKey","setTimer","selectionScrollZone","setDefaults","obj1","obj2","setAttributes","eachAttribute","setStyle","eachStyle","findColumnMaxTextLength","child","cancelAnimationFrame","touchmove","touchend","touchcancel","tryLoadStoredSettings","reloadStoredValues","tempData","collapsedCount","ctr","ri","lastchild","orTree","ctc","ci","_ri","_ci","si","otherData","k","tempRow","colTrees","collapsedColCount","hasOwnProperty","initCellTreeSettings","invalidRowTree","rt","begin","parentIndex","columnTree","dataColumnLength","invalidColumnTree","ct","getDomRoot","shadowRoot","parseFont","fontStyle","exec","parseFloat","unit","getFontName","getFontHeight","styleKey","parseStyleValue","initProp","propName","getStyleProperty","styleKeys","supressDrawAndEvent","isDim","getItem","message","initialized","addStyleKeyIfNoneExists","publicStyleKeyIntf","initScrollBox","ie","navigator","userAgent","edge","webKit","moz","cursorGrabing","cursorGrabbing","clearChangeLog","gotoCell","gotoRow","addButton","toggleCellCollapseTree","expandCollapseCellTree","getRowHeight","findColumnScrollLeft","findRowScrollTop","toggleGroupColumns","toggleGroupRows","isCellVisible","isRowVisible","isColumnVisible","getSchemaFromData","expandTree","collapseTree","insertRow","deleteRow","insertColumn","deleteColumn","addColumn","setRowHeight","setColumnWidth","resetColumnWidths","resetRowHeights","assertPxColor","clearPxColorAssertions","integerToAlpha","DOMStyles","valueObject","filterFor","filterRegExp","regEnd","pattern","flags","substring","flagLength","RegExp","toLocaleUpperCase","numericValue","numericFilter","textContent","TypeError","currentCursor","warnedForObsoleteSelections","getObsoleteSelectionMatrix","eventName","RangeError","getSelectedData","eachDataRow","setTreeGridAttributes","setCellGridAttributes","setFillCellCallback","schemaGetter","schemaSetter","eachSchemaColumn","hideEachSchemaColumn","getTypes","parseInnerHtml","callback","etl","autoGenerateSchema","columnCount","dataGetter","dataSetter","autoResizeColumns","sHeight","sWidth","setScrollTop","preventScrollEvent","setScrollLeft","supressDrawEvent","ordA","charCodeAt","ordZ","fromCharCode","showFilterInCell","offsetX","offsetY","targetX","targetY","sbh","treeData","details","trArgs","treeGridHeight","beginColumnOrderIndex","endColumnOrderIndex","hiddenColumns","newSize","dontSetStorageData","sorter","addGroup","groupFor","removeGroup","firstColumnName","lastColumnName","firstOne","lastOne","error","rowIndexFrom","rowIndexTo","isInteger","dataLength","sel","visibleSchema","selectionLength","xi","maxRowLength","minXi","yi","lastSourceIndex","cidx","indicators","yZero","xZero","useTouchScrollZones","getBorder","entitiy","borderResizeZone","tsz","touchScrollZone","moveMode","borderDragBehavior","moveBorder","xBorderBehavior","yBorderBehavior","isVerticalScrollBar","isHorizontalScrollBar","allowColumnResize","allowColumnResizeFromCell","allowRowHeaderResize","allowRowResize","allowRowResizeFromCell","columnGrabZoneSize","rowGrabZoneSize","mapEachSchemaColumn","rowHeaderCellFont","autosizePadding","autosizeHeaderCellPadding","rowHeaderCellPaddingRight","rowHeaderCellPaddingLeft","formatter","columnHeaderCellFont","columnHeaderCellPaddingRight","columnHeaderCellPaddingLeft","cellAutoResizePadding","cellFont","cellPaddingRight","total","configuredWidth","viewIndex","cellFormatterString","headerCell","int","asc","toComparable","aValue","bValue","localeCompare","date","getTime","addIntoSelections","areSelectionsComplex","areSelectionsNeat","cleanupSelections","getSelectionStateFromCells","moveSelections","normalizeSelection","removeFromSelections","SelectionType","selectionCache","selectionCacheWidth","selectionCacheHeight","otherSelections","states","endRow","endColumn","row2","_","rowState","col2","Rows","columnOrderIndexes","columnSchema","allowOnlyOneRow","viewRowIndexes","triggerEvent","dispatchSelectionChangedEvent","Columns","suppressEvent","Cells","unselectRows","selectionList","getSelectedCells","sanitized","sanitizeSelectionBounds","viewDataLength","schemaLength","expandToRow","orderedSchema","getSchemaOrderByViewIndex","hasData","selectedCells","iterateSelectedCells","textString","copiedData","setData","hasCustomWidth","addCol","removeCol","de","dragObject","st","iterator","state","firstRow","replaceAllSelections","newSelections","viewIndexes","keyEvent","fromIndex","orderedIndex","concatenate2DArray","axis","rowInA","rowInB","UnselectedCells","swapProps","obj","prop0","prop1","getSelectionFromString","num","isSameCellsBlock","block0","block1","mergeCellsIntoRowsOrColumns","rowsOrColumns","mergeSelections","sel0","sel1","horizontalConcat","verticalConcat","intersection","getIntersection","removePartOfRowsSelection","remove","removePartOfColumnsSelection","removePartOfCellsSelection","intersect","minStartRow","maxEndRow","maxEndColumn","parts","isChanged","selectedAllRows","selectedAllColumns","isChanged0","isChanged1","isRowsSelection","merged","newMerged","unselectedAllRows","unselectedAllColumns","newSelection","unselect","select","unsel","endMerge","newSel","areAllCellsSelected","iTo","matched0","matched1","countOfColumns","columnOffsetEnd","getVerboseSelectionStateFromCells","allowImpurity","newMatched","baseType","clonedSelections","keyInfo","ArrowLeft","isLeft","ArrowUp","isUp","ArrowRight","isRight","ArrowDown","isDown","originalColumnIndex","matchedSelections","isTopBorder","isBottomBorder","isLeftBorder","isRightBorder","maxRow","maxColumn","afterChange","touchTimerMs","debounceTouchMove","touchMoving","touchScrollTimeout","animationFrames","getTouchPos","touchIndex","easingFunctions","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easing","touchEasingMethod","calculatePPSTimed","touchSigmaTimed","calculatePPS","touchSigma","touchEndAnimation","touchReleaseAnimationDurationMs","stopAnimation","touchEditCell","changedTouches","startingCell","calculatePPSTimer","touchContextTimeout","touchStartEvent","zoomAltered","touchStart1","touchScrollStart","touchContextMenuTimeMs","touchEndEvents","touchSelect","handleType","touchSelecting","touchMove","rw","rScrollZone","lScrollZone","bScrollZone","tScrollZone","t1","t2","touchDeadZone","touchZoomSensitivity","touchZoomMin","touchZoomMax","touchScroll","startingCellStyle","dz","touchReleaseAcceleration","scrollAnimationPPSThreshold","dom","publicMethods","webComponent","modules","Grid","Reflect","construct","HTMLElement","new","module","attachShadow","create","customElements","observedAttributes","define","canvasDatagrid","require","EXCLUDE_GLOBAL","tKeys","argKey","tKey","sKey"],"sourceRoot":""}